esphome 2025.8.3__py3-none-any.whl → 2025.9.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +36 -42
- esphome/components/absolute_humidity/absolute_humidity.cpp +3 -5
- esphome/components/adc/adc_sensor_esp32.cpp +29 -6
- esphome/components/ags10/ags10.cpp +3 -18
- esphome/components/ags10/ags10.h +2 -12
- esphome/components/aht10/aht10.cpp +3 -3
- esphome/components/airthings_ble/__init__.py +2 -2
- esphome/components/alarm_control_panel/__init__.py +2 -2
- esphome/components/am2315c/am2315c.cpp +1 -17
- esphome/components/am2315c/am2315c.h +2 -3
- esphome/components/api/__init__.py +2 -2
- esphome/components/api/api_connection.cpp +34 -23
- esphome/components/api/api_connection.h +20 -39
- esphome/components/api/api_frame_helper.cpp +25 -25
- esphome/components/api/api_frame_helper.h +3 -3
- esphome/components/api/api_frame_helper_noise.cpp +75 -40
- esphome/components/api/api_frame_helper_noise.h +3 -7
- esphome/components/api/api_frame_helper_plaintext.cpp +17 -4
- esphome/components/api/api_frame_helper_plaintext.h +1 -4
- esphome/components/api/api_pb2.cpp +20 -2
- esphome/components/api/api_pb2.h +146 -141
- esphome/components/api/api_pb2_dump.cpp +12 -1
- esphome/components/api/proto.cpp +33 -37
- esphome/components/async_tcp/__init__.py +2 -2
- esphome/components/atm90e26/sensor.py +2 -0
- esphome/components/atm90e32/sensor.py +4 -2
- esphome/components/audio_adc/__init__.py +2 -2
- esphome/components/audio_dac/__init__.py +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +1 -1
- esphome/components/bedjet/bedjet_hub.cpp +1 -1
- esphome/components/binary_sensor/__init__.py +2 -2
- esphome/components/binary_sensor/binary_sensor.cpp +13 -0
- esphome/components/binary_sensor/binary_sensor.h +4 -7
- esphome/components/bl0940/__init__.py +6 -1
- esphome/components/bl0940/bl0940.cpp +178 -41
- esphome/components/bl0940/bl0940.h +121 -76
- esphome/components/bl0940/button/__init__.py +27 -0
- esphome/components/bl0940/button/calibration_reset_button.cpp +20 -0
- esphome/components/bl0940/button/calibration_reset_button.h +19 -0
- esphome/components/bl0940/number/__init__.py +94 -0
- esphome/components/bl0940/number/calibration_number.cpp +29 -0
- esphome/components/bl0940/number/calibration_number.h +26 -0
- esphome/components/bl0940/sensor.py +151 -2
- esphome/components/bl0942/bl0942.cpp +1 -1
- esphome/components/ble_client/output/__init__.py +4 -4
- esphome/components/bluetooth_proxy/__init__.py +1 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -1
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +15 -7
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +3 -2
- esphome/components/button/__init__.py +2 -2
- esphome/components/button/button.cpp +13 -0
- esphome/components/button/button.h +4 -7
- esphome/components/camera/buffer.h +18 -0
- esphome/components/camera/buffer_impl.cpp +20 -0
- esphome/components/camera/buffer_impl.h +26 -0
- esphome/components/camera/camera.h +43 -0
- esphome/components/camera/encoder.h +69 -0
- esphome/components/camera_encoder/__init__.py +62 -0
- esphome/components/camera_encoder/encoder_buffer_impl.cpp +23 -0
- esphome/components/camera_encoder/encoder_buffer_impl.h +25 -0
- esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +82 -0
- esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +39 -0
- esphome/components/captive_portal/__init__.py +2 -2
- esphome/components/captive_portal/captive_portal.cpp +35 -12
- esphome/components/captive_portal/captive_portal.h +3 -3
- esphome/components/ccs811/ccs811.cpp +3 -3
- esphome/components/climate/__init__.py +2 -2
- esphome/components/climate/climate.cpp +1 -1
- esphome/components/cover/__init__.py +5 -5
- esphome/components/cover/cover.cpp +1 -1
- esphome/components/cover/cover.h +2 -2
- esphome/components/dallas_temp/dallas_temp.cpp +2 -2
- esphome/components/datetime/__init__.py +2 -2
- esphome/components/datetime/date_entity.h +2 -2
- esphome/components/datetime/datetime_entity.h +2 -2
- esphome/components/datetime/time_entity.h +2 -2
- esphome/components/debug/debug_esp32.cpp +1 -1
- esphome/components/display/__init__.py +4 -4
- esphome/components/duty_time/duty_time_sensor.cpp +1 -1
- esphome/components/esp32/__init__.py +0 -5
- esphome/components/esp32/gpio.cpp +27 -23
- esphome/components/esp32/gpio.h +26 -11
- esphome/components/esp32/preferences.cpp +8 -4
- esphome/components/esp32_ble/__init__.py +7 -2
- esphome/components/esp32_ble_client/ble_client_base.cpp +7 -3
- esphome/components/esp32_ble_tracker/__init__.py +2 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +9 -44
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +2 -14
- esphome/components/esp8266/__init__.py +2 -2
- esphome/components/esp8266/core.cpp +2 -2
- esphome/components/esp8266/gpio.py +4 -4
- esphome/components/esp8266/preferences.cpp +30 -28
- esphome/components/esphome/ota/__init__.py +2 -2
- esphome/components/esphome/ota/ota_esphome.cpp +21 -19
- esphome/components/esphome/ota/ota_esphome.h +6 -5
- esphome/components/ethernet/__init__.py +7 -2
- esphome/components/ethernet/ethernet_component.cpp +1 -1
- esphome/components/event/__init__.py +2 -2
- esphome/components/event/event.h +4 -4
- esphome/components/fan/__init__.py +2 -2
- esphome/components/fan/fan.cpp +2 -1
- esphome/components/gdk101/gdk101.cpp +4 -4
- esphome/components/globals/__init__.py +2 -2
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +19 -18
- esphome/components/gpio_expander/cached_gpio.h +36 -16
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -5
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +1 -1
- esphome/components/haier/hon_climate.cpp +1 -1
- esphome/components/hlw8012/hlw8012.cpp +5 -5
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +4 -4
- esphome/components/host/preferences.h +3 -2
- esphome/components/hte501/hte501.cpp +3 -21
- esphome/components/hte501/hte501.h +2 -3
- esphome/components/http_request/ota/__init__.py +2 -2
- esphome/components/i2c/__init__.py +2 -2
- esphome/components/i2c/i2c.cpp +13 -9
- esphome/components/i2c/i2c_bus.h +36 -6
- esphome/components/i2s_audio/__init__.py +8 -2
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/microphone/__init__.py +1 -1
- esphome/components/i2s_audio/speaker/__init__.py +1 -1
- esphome/components/inkplate/__init__.py +1 -0
- esphome/components/inkplate/const.py +105 -0
- esphome/components/inkplate/display.py +238 -0
- esphome/components/{inkplate6 → inkplate}/inkplate.cpp +156 -74
- esphome/components/{inkplate6 → inkplate}/inkplate.h +28 -68
- esphome/components/inkplate6/__init__.py +0 -1
- esphome/components/inkplate6/display.py +2 -211
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/json/__init__.py +2 -2
- esphome/components/kmeteriso/kmeteriso.cpp +1 -1
- esphome/components/lc709203f/lc709203f.cpp +4 -17
- esphome/components/lc709203f/lc709203f.h +2 -3
- esphome/components/ld2420/text_sensor/{text_sensor.cpp → ld2420_text_sensor.cpp} +1 -1
- esphome/components/ld2450/ld2450.cpp +1 -1
- esphome/components/libretiny/preferences.cpp +13 -5
- esphome/components/light/__init__.py +2 -2
- esphome/components/light/addressable_light_effect.h +7 -0
- esphome/components/light/base_light_effects.h +8 -0
- esphome/components/light/light_call.cpp +22 -20
- esphome/components/light/light_effect.cpp +36 -0
- esphome/components/light/light_effect.h +14 -0
- esphome/components/light/light_json_schema.cpp +9 -1
- esphome/components/light/light_state.cpp +2 -2
- esphome/components/light/light_state.h +39 -0
- esphome/components/lock/__init__.py +2 -2
- esphome/components/lock/lock.h +2 -2
- esphome/components/logger/__init__.py +2 -2
- esphome/components/logger/logger.cpp +25 -4
- esphome/components/logger/logger.h +1 -1
- esphome/components/logger/logger_esp32.cpp +16 -8
- esphome/components/logger/logger_esp8266.cpp +11 -3
- esphome/components/logger/logger_libretiny.cpp +13 -3
- esphome/components/logger/logger_rp2040.cpp +14 -3
- esphome/components/logger/logger_zephyr.cpp +15 -4
- esphome/components/lvgl/defines.py +1 -0
- esphome/components/lvgl/hello_world.py +96 -33
- esphome/components/lvgl/number/lvgl_number.h +1 -1
- esphome/components/lvgl/select/lvgl_select.h +1 -1
- esphome/components/lvgl/widgets/__init__.py +0 -1
- esphome/components/lvgl/widgets/spinbox.py +20 -11
- esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +1 -1
- esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +1 -1
- esphome/components/mapping/__init__.py +13 -5
- esphome/components/mapping/mapping.h +69 -0
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/mcp23016/__init__.py +1 -0
- esphome/components/mcp23016/mcp23016.cpp +20 -5
- esphome/components/mcp23016/mcp23016.h +10 -4
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +1 -1
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +2 -2
- esphome/components/mdns/__init__.py +2 -2
- esphome/components/mdns/mdns_component.cpp +145 -54
- esphome/components/media_player/__init__.py +2 -2
- esphome/components/micro_wake_word/__init__.py +2 -2
- esphome/components/microphone/__init__.py +2 -2
- esphome/components/mipi/__init__.py +77 -33
- esphome/components/mipi_rgb/__init__.py +2 -0
- esphome/components/mipi_rgb/display.py +321 -0
- esphome/components/mipi_rgb/mipi_rgb.cpp +388 -0
- esphome/components/mipi_rgb/mipi_rgb.h +127 -0
- esphome/components/mipi_rgb/models/guition.py +24 -0
- esphome/components/mipi_rgb/models/lilygo.py +228 -0
- esphome/components/mipi_rgb/models/rpi.py +9 -0
- esphome/components/mipi_rgb/models/st7701s.py +214 -0
- esphome/components/mipi_rgb/models/waveshare.py +64 -0
- esphome/components/mipi_spi/models/jc.py +229 -0
- esphome/components/mlx90614/mlx90614.cpp +1 -16
- esphome/components/mlx90614/mlx90614.h +0 -1
- esphome/components/mqtt/__init__.py +2 -2
- esphome/components/mqtt/mqtt_sensor.cpp +7 -2
- esphome/components/ms5611/ms5611.cpp +7 -6
- esphome/components/network/__init__.py +2 -2
- esphome/components/nextion/nextion_upload.cpp +4 -1
- esphome/components/nrf52/__init__.py +49 -6
- esphome/components/nrf52/const.py +1 -0
- esphome/components/nrf52/dfu.cpp +51 -0
- esphome/components/nrf52/dfu.h +24 -0
- esphome/components/ntc/ntc.cpp +1 -1
- esphome/components/number/__init__.py +2 -2
- esphome/components/number/automation.cpp +1 -1
- esphome/components/number/number.cpp +21 -0
- esphome/components/number/number.h +4 -13
- esphome/components/opentherm/hub.h +6 -6
- esphome/components/opentherm/number/{number.cpp → opentherm_number.cpp} +2 -2
- esphome/components/opentherm/output/{output.cpp → opentherm_output.cpp} +1 -1
- esphome/components/opentherm/switch/{switch.cpp → opentherm_switch.cpp} +1 -1
- esphome/components/ota/__init__.py +2 -2
- esphome/components/pca6416a/__init__.py +1 -0
- esphome/components/pca6416a/pca6416a.cpp +20 -5
- esphome/components/pca6416a/pca6416a.h +12 -5
- esphome/components/pca9554/__init__.py +2 -1
- esphome/components/pca9554/pca9554.cpp +12 -18
- esphome/components/pca9554/pca9554.h +10 -9
- esphome/components/pcf8574/__init__.py +1 -0
- esphome/components/pcf8574/pcf8574.cpp +14 -5
- esphome/components/pcf8574/pcf8574.h +13 -6
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +7 -7
- esphome/components/pipsolar/__init__.py +3 -3
- esphome/components/pipsolar/output/__init__.py +4 -4
- esphome/components/pulse_width/pulse_width.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +81 -126
- esphome/components/qmp6988/qmp6988.h +31 -37
- esphome/components/radon_eye_ble/__init__.py +2 -2
- esphome/components/remote_base/__init__.py +6 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +1 -1
- esphome/components/rp2040/__init__.py +2 -2
- esphome/components/runtime_stats/runtime_stats.cpp +10 -23
- esphome/components/runtime_stats/runtime_stats.h +4 -10
- esphome/components/safe_mode/__init__.py +2 -2
- esphome/components/safe_mode/safe_mode.cpp +33 -31
- esphome/components/script/script.cpp +6 -0
- esphome/components/script/script.h +19 -5
- esphome/components/sdm_meter/sensor.py +3 -1
- esphome/components/select/__init__.py +2 -2
- esphome/components/select/select.h +2 -2
- esphome/components/sen5x/sen5x.cpp +58 -55
- esphome/components/sen5x/sen5x.h +21 -15
- esphome/components/sen5x/sensor.py +67 -44
- esphome/components/sensirion_common/i2c_sensirion.cpp +18 -47
- esphome/components/sensirion_common/i2c_sensirion.h +39 -55
- esphome/components/sensor/__init__.py +2 -2
- esphome/components/sensor/automation.h +1 -1
- esphome/components/sensor/sensor.cpp +34 -6
- esphome/components/sensor/sensor.h +4 -21
- esphome/components/sgp30/sgp30.cpp +34 -35
- esphome/components/sgp30/sgp30.h +11 -10
- esphome/components/sgp4x/sgp4x.cpp +2 -2
- esphome/components/shelly_dimmer/light.py +7 -7
- esphome/components/sht4x/sht4x.cpp +1 -1
- esphome/components/sntp/sntp_component.cpp +36 -9
- esphome/components/sntp/sntp_component.h +7 -0
- esphome/components/sound_level/sound_level.cpp +1 -1
- esphome/components/speaker/__init__.py +2 -2
- esphome/components/speaker/media_player/__init__.py +2 -2
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -1
- esphome/components/spi/__init__.py +2 -2
- esphome/components/sprinkler/sprinkler.cpp +1 -1
- esphome/components/sps30/sps30.cpp +18 -23
- esphome/components/sps30/sps30.h +3 -3
- esphome/components/status_led/__init__.py +2 -2
- esphome/components/stepper/__init__.py +2 -2
- esphome/components/switch/__init__.py +2 -2
- esphome/components/switch/switch.cpp +5 -5
- esphome/components/sx1509/__init__.py +1 -1
- esphome/components/sx1509/sx1509.cpp +12 -7
- esphome/components/sx1509/sx1509.h +11 -4
- esphome/components/tca9555/tca9555.cpp +5 -5
- esphome/components/tee501/tee501.cpp +2 -21
- esphome/components/tee501/tee501.h +2 -4
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +1 -1
- esphome/components/template/datetime/template_date.cpp +1 -1
- esphome/components/template/datetime/template_datetime.cpp +2 -2
- esphome/components/template/datetime/template_time.cpp +1 -1
- esphome/components/template/number/template_number.cpp +1 -1
- esphome/components/template/select/template_select.cpp +1 -1
- esphome/components/template/text/template_text.cpp +1 -1
- esphome/components/text/__init__.py +2 -2
- esphome/components/text/text.h +2 -2
- esphome/components/text_sensor/__init__.py +2 -2
- esphome/components/text_sensor/text_sensor.h +4 -4
- esphome/components/thermostat/climate.py +11 -7
- esphome/components/thermostat/thermostat_climate.cpp +237 -206
- esphome/components/thermostat/thermostat_climate.h +52 -41
- esphome/components/time/__init__.py +2 -2
- esphome/components/tmp1075/tmp1075.cpp +1 -1
- esphome/components/total_daily_energy/total_daily_energy.cpp +1 -1
- esphome/components/touchscreen/__init__.py +2 -2
- esphome/components/tuya/number/tuya_number.cpp +1 -1
- esphome/components/udp/udp_component.cpp +3 -3
- esphome/components/ufire_ec/ufire_ec.cpp +4 -4
- esphome/components/ufire_ise/ufire_ise.cpp +4 -4
- esphome/components/update/__init__.py +2 -2
- esphome/components/usb_uart/usb_uart.cpp +1 -1
- esphome/components/valve/__init__.py +5 -5
- esphome/components/valve/valve.cpp +1 -1
- esphome/components/valve/valve.h +2 -2
- esphome/components/wake_on_lan/wake_on_lan.cpp +2 -2
- esphome/components/waveshare_epaper/waveshare_213v3.cpp +1 -1
- esphome/components/web_server/__init__.py +2 -2
- esphome/components/web_server/ota/__init__.py +2 -2
- esphome/components/web_server/ota/ota_web_server.cpp +11 -0
- esphome/components/web_server/web_server.cpp +58 -12
- esphome/components/web_server_base/__init__.py +2 -2
- esphome/components/wifi/__init__.py +5 -5
- esphome/components/wifi/wifi_component.cpp +3 -3
- esphome/components/wifi/wifi_component_esp_idf.cpp +2 -0
- esphome/config_validation.py +2 -2
- esphome/const.py +2 -1
- esphome/core/__init__.py +1 -0
- esphome/core/application.cpp +89 -51
- esphome/core/application.h +1 -0
- esphome/core/component.cpp +41 -19
- esphome/core/component.h +17 -13
- esphome/core/config.py +7 -7
- esphome/core/defines.h +4 -0
- esphome/core/entity_base.cpp +22 -8
- esphome/core/entity_base.h +43 -0
- esphome/core/helpers.cpp +26 -13
- esphome/core/helpers.h +4 -3
- esphome/core/ring_buffer.cpp +6 -2
- esphome/core/ring_buffer.h +2 -1
- esphome/core/scheduler.cpp +175 -94
- esphome/core/scheduler.h +66 -35
- esphome/core/time.cpp +6 -20
- esphome/coroutine.py +80 -3
- esphome/cpp_generator.py +13 -0
- esphome/cpp_helpers.py +2 -2
- esphome/dashboard/web_server.py +67 -10
- esphome/espota2.py +13 -6
- esphome/helpers.py +68 -83
- esphome/resolver.py +67 -0
- esphome/util.py +9 -6
- esphome/wizard.py +39 -26
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/METADATA +9 -9
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/RECORD +345 -314
- /esphome/components/ld2420/text_sensor/{text_sensor.h → ld2420_text_sensor.h} +0 -0
- /esphome/components/opentherm/number/{number.h → opentherm_number.h} +0 -0
- /esphome/components/opentherm/output/{output.h → opentherm_output.h} +0 -0
- /esphome/components/opentherm/switch/{switch.h → opentherm_switch.h} +0 -0
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.8.3.dist-info → esphome-2025.9.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,238 @@
|
|
1
|
+
from esphome import pins
|
2
|
+
import esphome.codegen as cg
|
3
|
+
from esphome.components import display, i2c
|
4
|
+
from esphome.components.esp32 import CONF_CPU_FREQUENCY
|
5
|
+
import esphome.config_validation as cv
|
6
|
+
from esphome.const import (
|
7
|
+
CONF_FULL_UPDATE_EVERY,
|
8
|
+
CONF_ID,
|
9
|
+
CONF_LAMBDA,
|
10
|
+
CONF_MIRROR_X,
|
11
|
+
CONF_MIRROR_Y,
|
12
|
+
CONF_MODEL,
|
13
|
+
CONF_OE_PIN,
|
14
|
+
CONF_PAGES,
|
15
|
+
CONF_TRANSFORM,
|
16
|
+
CONF_WAKEUP_PIN,
|
17
|
+
PLATFORM_ESP32,
|
18
|
+
)
|
19
|
+
import esphome.final_validate as fv
|
20
|
+
|
21
|
+
from .const import INKPLATE_10_CUSTOM_WAVEFORMS, WAVEFORMS
|
22
|
+
|
23
|
+
DEPENDENCIES = ["i2c", "esp32"]
|
24
|
+
AUTO_LOAD = ["psram"]
|
25
|
+
|
26
|
+
CONF_DISPLAY_DATA_0_PIN = "display_data_0_pin"
|
27
|
+
CONF_DISPLAY_DATA_1_PIN = "display_data_1_pin"
|
28
|
+
CONF_DISPLAY_DATA_2_PIN = "display_data_2_pin"
|
29
|
+
CONF_DISPLAY_DATA_3_PIN = "display_data_3_pin"
|
30
|
+
CONF_DISPLAY_DATA_4_PIN = "display_data_4_pin"
|
31
|
+
CONF_DISPLAY_DATA_5_PIN = "display_data_5_pin"
|
32
|
+
CONF_DISPLAY_DATA_6_PIN = "display_data_6_pin"
|
33
|
+
CONF_DISPLAY_DATA_7_PIN = "display_data_7_pin"
|
34
|
+
|
35
|
+
CONF_CL_PIN = "cl_pin"
|
36
|
+
CONF_CKV_PIN = "ckv_pin"
|
37
|
+
CONF_GREYSCALE = "greyscale"
|
38
|
+
CONF_GMOD_PIN = "gmod_pin"
|
39
|
+
CONF_GPIO0_ENABLE_PIN = "gpio0_enable_pin"
|
40
|
+
CONF_LE_PIN = "le_pin"
|
41
|
+
CONF_PARTIAL_UPDATING = "partial_updating"
|
42
|
+
CONF_POWERUP_PIN = "powerup_pin"
|
43
|
+
CONF_SPH_PIN = "sph_pin"
|
44
|
+
CONF_SPV_PIN = "spv_pin"
|
45
|
+
CONF_VCOM_PIN = "vcom_pin"
|
46
|
+
|
47
|
+
inkplate_ns = cg.esphome_ns.namespace("inkplate")
|
48
|
+
Inkplate = inkplate_ns.class_(
|
49
|
+
"Inkplate",
|
50
|
+
cg.PollingComponent,
|
51
|
+
i2c.I2CDevice,
|
52
|
+
display.Display,
|
53
|
+
display.DisplayBuffer,
|
54
|
+
)
|
55
|
+
|
56
|
+
InkplateModel = inkplate_ns.enum("InkplateModel")
|
57
|
+
|
58
|
+
MODELS = {
|
59
|
+
"inkplate_6": InkplateModel.INKPLATE_6,
|
60
|
+
"inkplate_10": InkplateModel.INKPLATE_10,
|
61
|
+
"inkplate_6_plus": InkplateModel.INKPLATE_6_PLUS,
|
62
|
+
"inkplate_6_v2": InkplateModel.INKPLATE_6_V2,
|
63
|
+
"inkplate_5": InkplateModel.INKPLATE_5,
|
64
|
+
"inkplate_5_v2": InkplateModel.INKPLATE_5_V2,
|
65
|
+
}
|
66
|
+
|
67
|
+
CONF_CUSTOM_WAVEFORM = "custom_waveform"
|
68
|
+
|
69
|
+
|
70
|
+
def _validate_custom_waveform(config):
|
71
|
+
if CONF_CUSTOM_WAVEFORM in config and config[CONF_MODEL] != "inkplate_10":
|
72
|
+
raise cv.Invalid("Custom waveforms are only supported on the Inkplate 10")
|
73
|
+
return config
|
74
|
+
|
75
|
+
|
76
|
+
CONFIG_SCHEMA = cv.All(
|
77
|
+
display.FULL_DISPLAY_SCHEMA.extend(
|
78
|
+
{
|
79
|
+
cv.GenerateID(): cv.declare_id(Inkplate),
|
80
|
+
cv.Optional(CONF_GREYSCALE, default=False): cv.boolean,
|
81
|
+
cv.Optional(CONF_CUSTOM_WAVEFORM): cv.All(
|
82
|
+
cv.uint8_t, cv.Range(min=1, max=len(INKPLATE_10_CUSTOM_WAVEFORMS))
|
83
|
+
),
|
84
|
+
cv.Optional(CONF_TRANSFORM): cv.Schema(
|
85
|
+
{
|
86
|
+
cv.Optional(CONF_MIRROR_X, default=False): cv.boolean,
|
87
|
+
cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean,
|
88
|
+
}
|
89
|
+
),
|
90
|
+
cv.Optional(CONF_PARTIAL_UPDATING, default=True): cv.boolean,
|
91
|
+
cv.Optional(CONF_FULL_UPDATE_EVERY, default=10): cv.uint32_t,
|
92
|
+
cv.Optional(CONF_MODEL, default="inkplate_6"): cv.enum(
|
93
|
+
MODELS, lower=True, space="_"
|
94
|
+
),
|
95
|
+
# Control pins
|
96
|
+
cv.Required(CONF_CKV_PIN): pins.gpio_output_pin_schema,
|
97
|
+
cv.Required(CONF_GMOD_PIN): pins.gpio_output_pin_schema,
|
98
|
+
cv.Required(CONF_GPIO0_ENABLE_PIN): pins.gpio_output_pin_schema,
|
99
|
+
cv.Required(CONF_OE_PIN): pins.gpio_output_pin_schema,
|
100
|
+
cv.Required(CONF_POWERUP_PIN): pins.gpio_output_pin_schema,
|
101
|
+
cv.Required(CONF_SPH_PIN): pins.gpio_output_pin_schema,
|
102
|
+
cv.Required(CONF_SPV_PIN): pins.gpio_output_pin_schema,
|
103
|
+
cv.Required(CONF_VCOM_PIN): pins.gpio_output_pin_schema,
|
104
|
+
cv.Required(CONF_WAKEUP_PIN): pins.gpio_output_pin_schema,
|
105
|
+
cv.Optional(CONF_CL_PIN, default=0): pins.internal_gpio_output_pin_schema,
|
106
|
+
cv.Optional(CONF_LE_PIN, default=2): pins.internal_gpio_output_pin_schema,
|
107
|
+
# Data pins
|
108
|
+
cv.Optional(
|
109
|
+
CONF_DISPLAY_DATA_0_PIN, default=4
|
110
|
+
): pins.internal_gpio_output_pin_schema,
|
111
|
+
cv.Optional(
|
112
|
+
CONF_DISPLAY_DATA_1_PIN, default=5
|
113
|
+
): pins.internal_gpio_output_pin_schema,
|
114
|
+
cv.Optional(
|
115
|
+
CONF_DISPLAY_DATA_2_PIN, default=18
|
116
|
+
): pins.internal_gpio_output_pin_schema,
|
117
|
+
cv.Optional(
|
118
|
+
CONF_DISPLAY_DATA_3_PIN, default=19
|
119
|
+
): pins.internal_gpio_output_pin_schema,
|
120
|
+
cv.Optional(
|
121
|
+
CONF_DISPLAY_DATA_4_PIN, default=23
|
122
|
+
): pins.internal_gpio_output_pin_schema,
|
123
|
+
cv.Optional(
|
124
|
+
CONF_DISPLAY_DATA_5_PIN, default=25
|
125
|
+
): pins.internal_gpio_output_pin_schema,
|
126
|
+
cv.Optional(
|
127
|
+
CONF_DISPLAY_DATA_6_PIN, default=26
|
128
|
+
): pins.internal_gpio_output_pin_schema,
|
129
|
+
cv.Optional(
|
130
|
+
CONF_DISPLAY_DATA_7_PIN, default=27
|
131
|
+
): pins.internal_gpio_output_pin_schema,
|
132
|
+
}
|
133
|
+
)
|
134
|
+
.extend(cv.polling_component_schema("5s"))
|
135
|
+
.extend(i2c.i2c_device_schema(0x48)),
|
136
|
+
cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA),
|
137
|
+
_validate_custom_waveform,
|
138
|
+
)
|
139
|
+
|
140
|
+
|
141
|
+
def _validate_cpu_frequency(config):
|
142
|
+
esp32_config = fv.full_config.get()[PLATFORM_ESP32]
|
143
|
+
if esp32_config[CONF_CPU_FREQUENCY] != "240MHZ":
|
144
|
+
raise cv.Invalid(
|
145
|
+
"Inkplate requires 240MHz CPU frequency (set in esp32 component)"
|
146
|
+
)
|
147
|
+
return config
|
148
|
+
|
149
|
+
|
150
|
+
FINAL_VALIDATE_SCHEMA = _validate_cpu_frequency
|
151
|
+
|
152
|
+
|
153
|
+
async def to_code(config):
|
154
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
155
|
+
|
156
|
+
await display.register_display(var, config)
|
157
|
+
await i2c.register_i2c_device(var, config)
|
158
|
+
|
159
|
+
if CONF_LAMBDA in config:
|
160
|
+
lambda_ = await cg.process_lambda(
|
161
|
+
config[CONF_LAMBDA], [(display.DisplayRef, "it")], return_type=cg.void
|
162
|
+
)
|
163
|
+
cg.add(var.set_writer(lambda_))
|
164
|
+
|
165
|
+
cg.add(var.set_greyscale(config[CONF_GREYSCALE]))
|
166
|
+
if transform := config.get(CONF_TRANSFORM):
|
167
|
+
cg.add(var.set_mirror_x(transform[CONF_MIRROR_X]))
|
168
|
+
cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y]))
|
169
|
+
cg.add(var.set_partial_updating(config[CONF_PARTIAL_UPDATING]))
|
170
|
+
cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY]))
|
171
|
+
|
172
|
+
cg.add(var.set_model(config[CONF_MODEL]))
|
173
|
+
|
174
|
+
if custom_waveform := config.get(CONF_CUSTOM_WAVEFORM):
|
175
|
+
waveform = INKPLATE_10_CUSTOM_WAVEFORMS[custom_waveform - 1]
|
176
|
+
waveform = [element for tupl in waveform for element in tupl]
|
177
|
+
cg.add(var.set_waveform(waveform, True))
|
178
|
+
else:
|
179
|
+
waveform = WAVEFORMS[config[CONF_MODEL]]
|
180
|
+
waveform = [element for tupl in waveform for element in tupl]
|
181
|
+
cg.add(var.set_waveform(waveform, False))
|
182
|
+
|
183
|
+
ckv = await cg.gpio_pin_expression(config[CONF_CKV_PIN])
|
184
|
+
cg.add(var.set_ckv_pin(ckv))
|
185
|
+
|
186
|
+
gmod = await cg.gpio_pin_expression(config[CONF_GMOD_PIN])
|
187
|
+
cg.add(var.set_gmod_pin(gmod))
|
188
|
+
|
189
|
+
gpio0_enable = await cg.gpio_pin_expression(config[CONF_GPIO0_ENABLE_PIN])
|
190
|
+
cg.add(var.set_gpio0_enable_pin(gpio0_enable))
|
191
|
+
|
192
|
+
oe = await cg.gpio_pin_expression(config[CONF_OE_PIN])
|
193
|
+
cg.add(var.set_oe_pin(oe))
|
194
|
+
|
195
|
+
powerup = await cg.gpio_pin_expression(config[CONF_POWERUP_PIN])
|
196
|
+
cg.add(var.set_powerup_pin(powerup))
|
197
|
+
|
198
|
+
sph = await cg.gpio_pin_expression(config[CONF_SPH_PIN])
|
199
|
+
cg.add(var.set_sph_pin(sph))
|
200
|
+
|
201
|
+
spv = await cg.gpio_pin_expression(config[CONF_SPV_PIN])
|
202
|
+
cg.add(var.set_spv_pin(spv))
|
203
|
+
|
204
|
+
vcom = await cg.gpio_pin_expression(config[CONF_VCOM_PIN])
|
205
|
+
cg.add(var.set_vcom_pin(vcom))
|
206
|
+
|
207
|
+
wakeup = await cg.gpio_pin_expression(config[CONF_WAKEUP_PIN])
|
208
|
+
cg.add(var.set_wakeup_pin(wakeup))
|
209
|
+
|
210
|
+
cl = await cg.gpio_pin_expression(config[CONF_CL_PIN])
|
211
|
+
cg.add(var.set_cl_pin(cl))
|
212
|
+
|
213
|
+
le = await cg.gpio_pin_expression(config[CONF_LE_PIN])
|
214
|
+
cg.add(var.set_le_pin(le))
|
215
|
+
|
216
|
+
display_data_0 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_0_PIN])
|
217
|
+
cg.add(var.set_display_data_0_pin(display_data_0))
|
218
|
+
|
219
|
+
display_data_1 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_1_PIN])
|
220
|
+
cg.add(var.set_display_data_1_pin(display_data_1))
|
221
|
+
|
222
|
+
display_data_2 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_2_PIN])
|
223
|
+
cg.add(var.set_display_data_2_pin(display_data_2))
|
224
|
+
|
225
|
+
display_data_3 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_3_PIN])
|
226
|
+
cg.add(var.set_display_data_3_pin(display_data_3))
|
227
|
+
|
228
|
+
display_data_4 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_4_PIN])
|
229
|
+
cg.add(var.set_display_data_4_pin(display_data_4))
|
230
|
+
|
231
|
+
display_data_5 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_5_PIN])
|
232
|
+
cg.add(var.set_display_data_5_pin(display_data_5))
|
233
|
+
|
234
|
+
display_data_6 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_6_PIN])
|
235
|
+
cg.add(var.set_display_data_6_pin(display_data_6))
|
236
|
+
|
237
|
+
display_data_7 = await cg.gpio_pin_expression(config[CONF_DISPLAY_DATA_7_PIN])
|
238
|
+
cg.add(var.set_display_data_7_pin(display_data_7))
|
@@ -6,11 +6,11 @@
|
|
6
6
|
#include <hal/gpio_hal.h>
|
7
7
|
|
8
8
|
namespace esphome {
|
9
|
-
namespace
|
9
|
+
namespace inkplate {
|
10
10
|
|
11
11
|
static const char *const TAG = "inkplate";
|
12
12
|
|
13
|
-
void
|
13
|
+
void Inkplate::setup() {
|
14
14
|
for (uint32_t i = 0; i < 256; i++) {
|
15
15
|
this->pin_lut_[i] = ((i & 0b00000011) << 4) | (((i & 0b00001100) >> 2) << 18) | (((i & 0b00010000) >> 4) << 23) |
|
16
16
|
(((i & 0b11100000) >> 5) << 25);
|
@@ -56,7 +56,7 @@ void Inkplate6::setup() {
|
|
56
56
|
/**
|
57
57
|
* Allocate buffers. May be called after setup to re-initialise if e.g. greyscale is changed.
|
58
58
|
*/
|
59
|
-
void
|
59
|
+
void Inkplate::initialize_() {
|
60
60
|
RAMAllocator<uint8_t> allocator;
|
61
61
|
RAMAllocator<uint32_t> allocator32;
|
62
62
|
uint32_t buffer_size = this->get_buffer_length_();
|
@@ -81,29 +81,25 @@ void Inkplate6::initialize_() {
|
|
81
81
|
return;
|
82
82
|
}
|
83
83
|
if (this->greyscale_) {
|
84
|
-
|
85
|
-
|
86
|
-
this->glut_ = allocator32.allocate(256 * glut_size);
|
84
|
+
this->glut_ = allocator32.allocate(256 * GLUT_SIZE);
|
87
85
|
if (this->glut_ == nullptr) {
|
88
86
|
ESP_LOGE(TAG, "Could not allocate glut!");
|
89
87
|
this->mark_failed();
|
90
88
|
return;
|
91
89
|
}
|
92
|
-
this->glut2_ = allocator32.allocate(256 *
|
90
|
+
this->glut2_ = allocator32.allocate(256 * GLUT_SIZE);
|
93
91
|
if (this->glut2_ == nullptr) {
|
94
92
|
ESP_LOGE(TAG, "Could not allocate glut2!");
|
95
93
|
this->mark_failed();
|
96
94
|
return;
|
97
95
|
}
|
98
96
|
|
99
|
-
|
100
|
-
|
101
|
-
for (int i = 0; i < glut_size; i++) {
|
97
|
+
for (uint8_t i = 0; i < GLUT_SIZE; i++) {
|
102
98
|
for (uint32_t j = 0; j < 256; j++) {
|
103
|
-
uint8_t z = (
|
99
|
+
uint8_t z = (this->waveform_[j & 0x07][i] << 2) | (this->waveform_[(j >> 4) & 0x07][i]);
|
104
100
|
this->glut_[i * 256 + j] = ((z & 0b00000011) << 4) | (((z & 0b00001100) >> 2) << 18) |
|
105
101
|
(((z & 0b00010000) >> 4) << 23) | (((z & 0b11100000) >> 5) << 25);
|
106
|
-
z = ((
|
102
|
+
z = ((this->waveform_[j & 0x07][i] << 2) | (this->waveform_[(j >> 4) & 0x07][i])) << 4;
|
107
103
|
this->glut2_[i * 256 + j] = ((z & 0b00000011) << 4) | (((z & 0b00001100) >> 2) << 18) |
|
108
104
|
(((z & 0b00010000) >> 4) << 23) | (((z & 0b11100000) >> 5) << 25);
|
109
105
|
}
|
@@ -130,9 +126,9 @@ void Inkplate6::initialize_() {
|
|
130
126
|
memset(this->buffer_, 0, buffer_size);
|
131
127
|
}
|
132
128
|
|
133
|
-
float
|
129
|
+
float Inkplate::get_setup_priority() const { return setup_priority::PROCESSOR; }
|
134
130
|
|
135
|
-
size_t
|
131
|
+
size_t Inkplate::get_buffer_length_() {
|
136
132
|
if (this->greyscale_) {
|
137
133
|
return size_t(this->get_width_internal()) * size_t(this->get_height_internal()) / 2u;
|
138
134
|
} else {
|
@@ -140,7 +136,7 @@ size_t Inkplate6::get_buffer_length_() {
|
|
140
136
|
}
|
141
137
|
}
|
142
138
|
|
143
|
-
void
|
139
|
+
void Inkplate::update() {
|
144
140
|
this->do_update_();
|
145
141
|
|
146
142
|
if (this->full_update_every_ > 0 && this->partial_updates_ >= this->full_update_every_) {
|
@@ -150,7 +146,7 @@ void Inkplate6::update() {
|
|
150
146
|
this->display();
|
151
147
|
}
|
152
148
|
|
153
|
-
void HOT
|
149
|
+
void HOT Inkplate::draw_absolute_pixel_internal(int x, int y, Color color) {
|
154
150
|
if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0)
|
155
151
|
return;
|
156
152
|
|
@@ -171,18 +167,18 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) {
|
|
171
167
|
// uint8_t gs = (uint8_t)(px*7);
|
172
168
|
|
173
169
|
uint8_t gs = ((color.red * 2126 / 10000) + (color.green * 7152 / 10000) + (color.blue * 722 / 10000)) >> 5;
|
174
|
-
this->buffer_[pos] = (
|
170
|
+
this->buffer_[pos] = (PIXEL_MASK_GLUT[x_sub] & current) | (x_sub ? gs : gs << 4);
|
175
171
|
|
176
172
|
} else {
|
177
173
|
int x1 = x / 8;
|
178
174
|
int x_sub = x % 8;
|
179
175
|
uint32_t pos = (x1 + y * (this->get_width_internal() / 8));
|
180
176
|
uint8_t current = this->partial_buffer_[pos];
|
181
|
-
this->partial_buffer_[pos] = (~
|
177
|
+
this->partial_buffer_[pos] = (~PIXEL_MASK_LUT[x_sub] & current) | (color.is_on() ? 0 : PIXEL_MASK_LUT[x_sub]);
|
182
178
|
}
|
183
179
|
}
|
184
180
|
|
185
|
-
void
|
181
|
+
void Inkplate::dump_config() {
|
186
182
|
LOG_DISPLAY("", "Inkplate", this);
|
187
183
|
ESP_LOGCONFIG(TAG,
|
188
184
|
" Greyscale: %s\n"
|
@@ -214,7 +210,7 @@ void Inkplate6::dump_config() {
|
|
214
210
|
LOG_UPDATE_INTERVAL(this);
|
215
211
|
}
|
216
212
|
|
217
|
-
void
|
213
|
+
void Inkplate::eink_off_() {
|
218
214
|
ESP_LOGV(TAG, "Eink off called");
|
219
215
|
if (!panel_on_)
|
220
216
|
return;
|
@@ -242,7 +238,7 @@ void Inkplate6::eink_off_() {
|
|
242
238
|
pins_z_state_();
|
243
239
|
}
|
244
240
|
|
245
|
-
void
|
241
|
+
void Inkplate::eink_on_() {
|
246
242
|
ESP_LOGV(TAG, "Eink on called");
|
247
243
|
if (panel_on_)
|
248
244
|
return;
|
@@ -284,7 +280,7 @@ void Inkplate6::eink_on_() {
|
|
284
280
|
this->oe_pin_->digital_write(true);
|
285
281
|
}
|
286
282
|
|
287
|
-
bool
|
283
|
+
bool Inkplate::read_power_status_() {
|
288
284
|
uint8_t data;
|
289
285
|
auto err = this->read_register(0x0F, &data, 1);
|
290
286
|
if (err == i2c::ERROR_OK) {
|
@@ -293,7 +289,7 @@ bool Inkplate6::read_power_status_() {
|
|
293
289
|
return false;
|
294
290
|
}
|
295
291
|
|
296
|
-
void
|
292
|
+
void Inkplate::fill(Color color) {
|
297
293
|
ESP_LOGV(TAG, "Fill called");
|
298
294
|
uint32_t start_time = millis();
|
299
295
|
|
@@ -308,7 +304,7 @@ void Inkplate6::fill(Color color) {
|
|
308
304
|
ESP_LOGV(TAG, "Fill finished (%ums)", millis() - start_time);
|
309
305
|
}
|
310
306
|
|
311
|
-
void
|
307
|
+
void Inkplate::display() {
|
312
308
|
ESP_LOGV(TAG, "Display called");
|
313
309
|
uint32_t start_time = millis();
|
314
310
|
|
@@ -324,7 +320,7 @@ void Inkplate6::display() {
|
|
324
320
|
ESP_LOGV(TAG, "Display finished (full) (%ums)", millis() - start_time);
|
325
321
|
}
|
326
322
|
|
327
|
-
void
|
323
|
+
void Inkplate::display1b_() {
|
328
324
|
ESP_LOGV(TAG, "Display1b called");
|
329
325
|
uint32_t start_time = millis();
|
330
326
|
|
@@ -334,32 +330,71 @@ void Inkplate6::display1b_() {
|
|
334
330
|
uint8_t buffer_value;
|
335
331
|
const uint8_t *buffer_ptr;
|
336
332
|
eink_on_();
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
333
|
+
uint8_t rep = 4;
|
334
|
+
switch (this->model_) {
|
335
|
+
case INKPLATE_10:
|
336
|
+
clean_fast_(0, 1);
|
337
|
+
clean_fast_(1, 10);
|
338
|
+
clean_fast_(2, 1);
|
339
|
+
clean_fast_(0, 10);
|
340
|
+
clean_fast_(2, 1);
|
341
|
+
clean_fast_(1, 10);
|
342
|
+
clean_fast_(2, 1);
|
343
|
+
clean_fast_(0, 10);
|
344
|
+
rep = 5;
|
345
|
+
break;
|
346
|
+
case INKPLATE_6_PLUS:
|
347
|
+
clean_fast_(0, 1);
|
348
|
+
clean_fast_(1, 15);
|
349
|
+
clean_fast_(2, 1);
|
350
|
+
clean_fast_(0, 5);
|
351
|
+
clean_fast_(2, 1);
|
352
|
+
clean_fast_(1, 15);
|
353
|
+
break;
|
354
|
+
case INKPLATE_6:
|
355
|
+
case INKPLATE_6_V2:
|
356
|
+
clean_fast_(0, 1);
|
357
|
+
clean_fast_(1, 18);
|
358
|
+
clean_fast_(2, 1);
|
359
|
+
clean_fast_(0, 18);
|
360
|
+
clean_fast_(2, 1);
|
361
|
+
clean_fast_(1, 18);
|
362
|
+
clean_fast_(2, 1);
|
363
|
+
clean_fast_(0, 18);
|
364
|
+
clean_fast_(2, 1);
|
365
|
+
if (this->model_ == INKPLATE_6_V2)
|
366
|
+
rep = 5;
|
367
|
+
break;
|
368
|
+
case INKPLATE_5:
|
369
|
+
clean_fast_(0, 1);
|
370
|
+
clean_fast_(1, 14);
|
371
|
+
clean_fast_(2, 1);
|
372
|
+
clean_fast_(0, 14);
|
373
|
+
clean_fast_(2, 1);
|
374
|
+
clean_fast_(1, 14);
|
375
|
+
clean_fast_(2, 1);
|
376
|
+
clean_fast_(0, 14);
|
377
|
+
clean_fast_(2, 1);
|
378
|
+
rep = 5;
|
379
|
+
break;
|
380
|
+
case INKPLATE_5_V2:
|
381
|
+
clean_fast_(0, 1);
|
382
|
+
clean_fast_(1, 11);
|
383
|
+
clean_fast_(2, 1);
|
384
|
+
clean_fast_(0, 11);
|
385
|
+
clean_fast_(2, 1);
|
386
|
+
clean_fast_(1, 11);
|
387
|
+
clean_fast_(2, 1);
|
388
|
+
clean_fast_(0, 11);
|
389
|
+
rep = 3;
|
390
|
+
break;
|
354
391
|
}
|
355
392
|
|
356
393
|
uint32_t clock = (1 << this->cl_pin_->get_pin());
|
357
394
|
uint32_t data_mask = this->get_data_pin_mask_();
|
358
395
|
ESP_LOGV(TAG, "Display1b start loops (%ums)", millis() - start_time);
|
359
396
|
|
360
|
-
|
361
|
-
|
362
|
-
for (int k = 0; k < rep; k++) {
|
397
|
+
for (uint8_t k = 0; k < rep; k++) {
|
363
398
|
buffer_ptr = &this->buffer_[this->get_buffer_length_() - 1];
|
364
399
|
vscan_start_();
|
365
400
|
for (int i = 0, im = this->get_height_internal(); i < im; i++) {
|
@@ -452,28 +487,75 @@ void Inkplate6::display1b_() {
|
|
452
487
|
ESP_LOGV(TAG, "Display1b finished (%ums)", millis() - start_time);
|
453
488
|
}
|
454
489
|
|
455
|
-
void
|
490
|
+
void Inkplate::display3b_() {
|
456
491
|
ESP_LOGV(TAG, "Display3b called");
|
457
492
|
uint32_t start_time = millis();
|
458
493
|
|
459
494
|
eink_on_();
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
495
|
+
|
496
|
+
switch (this->model_) {
|
497
|
+
case INKPLATE_10:
|
498
|
+
if (this->custom_waveform_) {
|
499
|
+
clean_fast_(1, 1);
|
500
|
+
clean_fast_(0, 7);
|
501
|
+
clean_fast_(2, 1);
|
502
|
+
clean_fast_(1, 12);
|
503
|
+
clean_fast_(2, 1);
|
504
|
+
clean_fast_(0, 7);
|
505
|
+
clean_fast_(2, 1);
|
506
|
+
clean_fast_(1, 12);
|
507
|
+
} else {
|
508
|
+
clean_fast_(1, 1);
|
509
|
+
clean_fast_(0, 10);
|
510
|
+
clean_fast_(2, 1);
|
511
|
+
clean_fast_(1, 10);
|
512
|
+
clean_fast_(2, 1);
|
513
|
+
clean_fast_(0, 10);
|
514
|
+
clean_fast_(2, 1);
|
515
|
+
clean_fast_(1, 10);
|
516
|
+
}
|
517
|
+
break;
|
518
|
+
case INKPLATE_6_PLUS:
|
519
|
+
clean_fast_(0, 1);
|
520
|
+
clean_fast_(1, 15);
|
521
|
+
clean_fast_(2, 1);
|
522
|
+
clean_fast_(0, 5);
|
523
|
+
clean_fast_(2, 1);
|
524
|
+
clean_fast_(1, 15);
|
525
|
+
break;
|
526
|
+
case INKPLATE_6:
|
527
|
+
case INKPLATE_6_V2:
|
528
|
+
clean_fast_(0, 1);
|
529
|
+
clean_fast_(1, 18);
|
530
|
+
clean_fast_(2, 1);
|
531
|
+
clean_fast_(0, 18);
|
532
|
+
clean_fast_(2, 1);
|
533
|
+
clean_fast_(1, 18);
|
534
|
+
clean_fast_(2, 1);
|
535
|
+
clean_fast_(0, 18);
|
536
|
+
clean_fast_(2, 1);
|
537
|
+
break;
|
538
|
+
case INKPLATE_5:
|
539
|
+
clean_fast_(0, 1);
|
540
|
+
clean_fast_(1, 14);
|
541
|
+
clean_fast_(2, 1);
|
542
|
+
clean_fast_(0, 14);
|
543
|
+
clean_fast_(2, 1);
|
544
|
+
clean_fast_(1, 14);
|
545
|
+
clean_fast_(2, 1);
|
546
|
+
clean_fast_(0, 14);
|
547
|
+
clean_fast_(2, 1);
|
548
|
+
break;
|
549
|
+
case INKPLATE_5_V2:
|
550
|
+
clean_fast_(0, 1);
|
551
|
+
clean_fast_(1, 11);
|
552
|
+
clean_fast_(2, 1);
|
553
|
+
clean_fast_(0, 11);
|
554
|
+
clean_fast_(2, 1);
|
555
|
+
clean_fast_(1, 11);
|
556
|
+
clean_fast_(2, 1);
|
557
|
+
clean_fast_(0, 11);
|
558
|
+
break;
|
477
559
|
}
|
478
560
|
|
479
561
|
uint32_t clock = (1 << this->cl_pin_->get_pin());
|
@@ -518,7 +600,7 @@ void Inkplate6::display3b_() {
|
|
518
600
|
ESP_LOGV(TAG, "Display3b finished (%ums)", millis() - start_time);
|
519
601
|
}
|
520
602
|
|
521
|
-
bool
|
603
|
+
bool Inkplate::partial_update_() {
|
522
604
|
ESP_LOGV(TAG, "Partial update called");
|
523
605
|
uint32_t start_time = millis();
|
524
606
|
if (this->greyscale_)
|
@@ -560,7 +642,7 @@ bool Inkplate6::partial_update_() {
|
|
560
642
|
GPIO.out_w1ts = this->pin_lut_[data] | clock;
|
561
643
|
GPIO.out_w1tc = data_mask | clock;
|
562
644
|
}
|
563
|
-
// New
|
645
|
+
// New Inkplate panel doesn't need last clock
|
564
646
|
if (this->model_ != INKPLATE_6_V2) {
|
565
647
|
GPIO.out_w1ts = clock;
|
566
648
|
GPIO.out_w1tc = data_mask | clock;
|
@@ -580,7 +662,7 @@ bool Inkplate6::partial_update_() {
|
|
580
662
|
return true;
|
581
663
|
}
|
582
664
|
|
583
|
-
void
|
665
|
+
void Inkplate::vscan_start_() {
|
584
666
|
this->ckv_pin_->digital_write(true);
|
585
667
|
delayMicroseconds(7);
|
586
668
|
this->spv_pin_->digital_write(false);
|
@@ -604,7 +686,7 @@ void Inkplate6::vscan_start_() {
|
|
604
686
|
this->ckv_pin_->digital_write(true);
|
605
687
|
}
|
606
688
|
|
607
|
-
void
|
689
|
+
void Inkplate::hscan_start_(uint32_t d) {
|
608
690
|
uint8_t clock = (1 << this->cl_pin_->get_pin());
|
609
691
|
this->sph_pin_->digital_write(false);
|
610
692
|
GPIO.out_w1ts = d | clock;
|
@@ -613,14 +695,14 @@ void Inkplate6::hscan_start_(uint32_t d) {
|
|
613
695
|
this->ckv_pin_->digital_write(true);
|
614
696
|
}
|
615
697
|
|
616
|
-
void
|
698
|
+
void Inkplate::vscan_end_() {
|
617
699
|
this->ckv_pin_->digital_write(false);
|
618
700
|
this->le_pin_->digital_write(true);
|
619
701
|
this->le_pin_->digital_write(false);
|
620
702
|
delayMicroseconds(0);
|
621
703
|
}
|
622
704
|
|
623
|
-
void
|
705
|
+
void Inkplate::clean() {
|
624
706
|
ESP_LOGV(TAG, "Clean called");
|
625
707
|
uint32_t start_time = millis();
|
626
708
|
|
@@ -634,7 +716,7 @@ void Inkplate6::clean() {
|
|
634
716
|
ESP_LOGV(TAG, "Clean finished (%ums)", millis() - start_time);
|
635
717
|
}
|
636
718
|
|
637
|
-
void
|
719
|
+
void Inkplate::clean_fast_(uint8_t c, uint8_t rep) {
|
638
720
|
ESP_LOGV(TAG, "Clean fast called with: (%d, %d)", c, rep);
|
639
721
|
uint32_t start_time = millis();
|
640
722
|
|
@@ -666,7 +748,7 @@ void Inkplate6::clean_fast_(uint8_t c, uint8_t rep) {
|
|
666
748
|
GPIO.out_w1ts = clock;
|
667
749
|
GPIO.out_w1tc = clock;
|
668
750
|
}
|
669
|
-
// New
|
751
|
+
// New Inkplate panel doesn't need last clock
|
670
752
|
if (this->model_ != INKPLATE_6_V2) {
|
671
753
|
GPIO.out_w1ts = send | clock;
|
672
754
|
GPIO.out_w1tc = clock;
|
@@ -679,7 +761,7 @@ void Inkplate6::clean_fast_(uint8_t c, uint8_t rep) {
|
|
679
761
|
ESP_LOGV(TAG, "Clean fast finished (%ums)", millis() - start_time);
|
680
762
|
}
|
681
763
|
|
682
|
-
void
|
764
|
+
void Inkplate::pins_z_state_() {
|
683
765
|
this->cl_pin_->pin_mode(gpio::FLAG_INPUT);
|
684
766
|
this->le_pin_->pin_mode(gpio::FLAG_INPUT);
|
685
767
|
this->ckv_pin_->pin_mode(gpio::FLAG_INPUT);
|
@@ -699,7 +781,7 @@ void Inkplate6::pins_z_state_() {
|
|
699
781
|
this->display_data_7_pin_->pin_mode(gpio::FLAG_INPUT);
|
700
782
|
}
|
701
783
|
|
702
|
-
void
|
784
|
+
void Inkplate::pins_as_outputs_() {
|
703
785
|
this->cl_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
704
786
|
this->le_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
705
787
|
this->ckv_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
@@ -719,5 +801,5 @@ void Inkplate6::pins_as_outputs_() {
|
|
719
801
|
this->display_data_7_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
720
802
|
}
|
721
803
|
|
722
|
-
} // namespace
|
804
|
+
} // namespace inkplate
|
723
805
|
} // namespace esphome
|