mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add flip X and Y on inkplate6 component (#7904)
Co-authored-by: Antoine Weill--Duflos <antoine@haply.co> Co-authored-by: David Sichau <sichau@inf.ethz.ch> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: David Sichau <DavidSichau@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
		| @@ -6,9 +6,12 @@ from esphome.const import ( | ||||
|     CONF_FULL_UPDATE_EVERY, | ||||
|     CONF_ID, | ||||
|     CONF_LAMBDA, | ||||
|     CONF_MIRROR_X, | ||||
|     CONF_MIRROR_Y, | ||||
|     CONF_MODEL, | ||||
|     CONF_OE_PIN, | ||||
|     CONF_PAGES, | ||||
|     CONF_TRANSFORM, | ||||
|     CONF_WAKEUP_PIN, | ||||
| ) | ||||
|  | ||||
| @@ -36,7 +39,6 @@ CONF_SPH_PIN = "sph_pin" | ||||
| CONF_SPV_PIN = "spv_pin" | ||||
| CONF_VCOM_PIN = "vcom_pin" | ||||
|  | ||||
|  | ||||
| inkplate6_ns = cg.esphome_ns.namespace("inkplate6") | ||||
| Inkplate6 = inkplate6_ns.class_( | ||||
|     "Inkplate6", | ||||
| @@ -62,6 +64,12 @@ CONFIG_SCHEMA = cv.All( | ||||
|         { | ||||
|             cv.GenerateID(): cv.declare_id(Inkplate6), | ||||
|             cv.Optional(CONF_GREYSCALE, default=False): cv.boolean, | ||||
|             cv.Optional(CONF_TRANSFORM): cv.Schema( | ||||
|                 { | ||||
|                     cv.Optional(CONF_MIRROR_X, default=False): cv.boolean, | ||||
|                     cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean, | ||||
|                 } | ||||
|             ), | ||||
|             cv.Optional(CONF_PARTIAL_UPDATING, default=True): cv.boolean, | ||||
|             cv.Optional(CONF_FULL_UPDATE_EVERY, default=10): cv.uint32_t, | ||||
|             cv.Optional(CONF_MODEL, default="inkplate_6"): cv.enum( | ||||
| @@ -126,6 +134,9 @@ async def to_code(config): | ||||
|         cg.add(var.set_writer(lambda_)) | ||||
|  | ||||
|     cg.add(var.set_greyscale(config[CONF_GREYSCALE])) | ||||
|     if transform := config.get(CONF_TRANSFORM): | ||||
|         cg.add(var.set_mirror_x(transform[CONF_MIRROR_X])) | ||||
|         cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y])) | ||||
|     cg.add(var.set_partial_updating(config[CONF_PARTIAL_UPDATING])) | ||||
|     cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY])) | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #include "inkplate.h" | ||||
| #include "esphome/core/log.h" | ||||
| #include "esphome/core/application.h" | ||||
| #include "esphome/core/helpers.h" | ||||
| #include "esphome/core/log.h" | ||||
|  | ||||
| #ifdef USE_ESP32_FRAMEWORK_ARDUINO | ||||
|  | ||||
| @@ -156,6 +156,12 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) { | ||||
|   if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0) | ||||
|     return; | ||||
|  | ||||
|   if (this->mirror_y_) | ||||
|     y = this->get_height_internal() - y - 1; | ||||
|  | ||||
|   if (this->mirror_x_) | ||||
|     x = this->get_width_internal() - x - 1; | ||||
|  | ||||
|   if (this->greyscale_) { | ||||
|     int x1 = x / 2; | ||||
|     int x_sub = x % 2; | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "esphome/components/display/display_buffer.h" | ||||
| #include "esphome/components/i2c/i2c.h" | ||||
| #include "esphome/core/component.h" | ||||
| #include "esphome/core/hal.h" | ||||
| #include "esphome/components/i2c/i2c.h" | ||||
| #include "esphome/components/display/display_buffer.h" | ||||
|  | ||||
| #ifdef USE_ESP32_FRAMEWORK_ARDUINO | ||||
|  | ||||
| @@ -92,6 +92,9 @@ class Inkplate6 : public display::DisplayBuffer, public i2c::I2CDevice { | ||||
|     if (this->is_ready()) | ||||
|       this->initialize_(); | ||||
|   } | ||||
|   void set_mirror_y(bool mirror_y) { this->mirror_y_ = mirror_y; } | ||||
|   void set_mirror_x(bool mirror_x) { this->mirror_x_ = mirror_x; } | ||||
|  | ||||
|   void set_partial_updating(bool partial_updating) { this->partial_updating_ = partial_updating; } | ||||
|   void set_full_update_every(uint32_t full_update_every) { this->full_update_every_ = full_update_every; } | ||||
|  | ||||
| @@ -221,6 +224,8 @@ class Inkplate6 : public display::DisplayBuffer, public i2c::I2CDevice { | ||||
|  | ||||
|   bool block_partial_{true}; | ||||
|   bool greyscale_; | ||||
|   bool mirror_y_{false}; | ||||
|   bool mirror_x_{false}; | ||||
|   bool partial_updating_; | ||||
|  | ||||
|   InkplateModel model_; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user