esphome 2024.12.3__py3-none-any.whl → 2025.2.0__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 +16 -3
- esphome/components/adc/__init__.py +17 -11
- esphome/components/adc/adc_sensor.h +17 -0
- esphome/components/adc/adc_sensor_common.cpp +55 -0
- esphome/components/adc/adc_sensor_esp32.cpp +8 -5
- esphome/components/adc/adc_sensor_esp8266.cpp +10 -6
- esphome/components/adc/adc_sensor_libretiny.cpp +11 -6
- esphome/components/adc/adc_sensor_rp2040.cpp +13 -10
- esphome/components/adc/sensor.py +9 -3
- esphome/components/ads1115/ads1115.cpp +56 -7
- esphome/components/ads1115/ads1115.h +13 -1
- esphome/components/ads1115/sensor/__init__.py +16 -0
- esphome/components/ads1115/sensor/ads1115_sensor.cpp +2 -1
- esphome/components/ads1115/sensor/ads1115_sensor.h +2 -0
- esphome/components/animation/__init__.py +23 -261
- esphome/components/animation/animation.cpp +2 -2
- esphome/components/animation/animation.h +2 -1
- esphome/components/api/api_pb2.cpp +14 -0
- esphome/components/api/api_pb2.h +1 -0
- esphome/components/api/client.py +8 -3
- esphome/components/audio/__init__.py +112 -0
- esphome/components/audio/audio.cpp +67 -0
- esphome/components/audio/audio.h +125 -7
- esphome/components/audio/audio_decoder.cpp +361 -0
- esphome/components/audio/audio_decoder.h +135 -0
- esphome/components/audio/audio_reader.cpp +308 -0
- esphome/components/audio/audio_reader.h +85 -0
- esphome/components/audio/audio_resampler.cpp +159 -0
- esphome/components/audio/audio_resampler.h +101 -0
- esphome/components/audio/audio_transfer_buffer.cpp +165 -0
- esphome/components/audio/audio_transfer_buffer.h +139 -0
- esphome/components/audio_adc/__init__.py +41 -0
- esphome/components/audio_adc/audio_adc.h +17 -0
- esphome/components/audio_adc/automation.h +23 -0
- esphome/components/bk72xx/__init__.py +1 -0
- esphome/components/ble_client/ble_client.cpp +1 -2
- esphome/components/ble_client/sensor/__init__.py +1 -1
- esphome/components/ble_client/text_sensor/__init__.py +1 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -0
- esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -0
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +5 -0
- esphome/components/ch422g/ch422g.h +2 -0
- esphome/components/climate/__init__.py +1 -1
- esphome/components/climate_ir/climate_ir.cpp +2 -1
- esphome/components/coolix/coolix.cpp +2 -1
- esphome/components/cse7766/cse7766.cpp +8 -16
- esphome/components/custom/__init__.py +0 -3
- esphome/components/custom/binary_sensor/__init__.py +2 -28
- esphome/components/custom/climate/__init__.py +2 -27
- esphome/components/custom/cover/__init__.py +2 -27
- esphome/components/custom/light/__init__.py +2 -27
- esphome/components/custom/output/__init__.py +2 -58
- esphome/components/custom/sensor/__init__.py +2 -24
- esphome/components/custom/switch/__init__.py +2 -24
- esphome/components/custom/text_sensor/__init__.py +2 -29
- esphome/components/custom_component/__init__.py +3 -27
- esphome/components/daly_bms/daly_bms.cpp +6 -0
- esphome/components/daly_bms/daly_bms.h +2 -0
- esphome/components/daly_bms/sensor.py +6 -0
- esphome/components/debug/debug_component.cpp +4 -0
- esphome/components/debug/debug_component.h +14 -0
- esphome/components/debug/debug_esp32.cpp +154 -74
- esphome/components/dfplayer/dfplayer.cpp +15 -2
- esphome/components/dfrobot_sen0395/dfrobot_sen0395.cpp +2 -1
- esphome/components/dht/dht.cpp +4 -2
- esphome/components/dht/sensor.py +1 -1
- esphome/components/display/__init__.py +18 -5
- esphome/components/display/display.cpp +16 -3
- esphome/components/display/rect.cpp +2 -1
- esphome/components/es7210/__init__.py +0 -0
- esphome/components/es7210/audio_adc.py +51 -0
- esphome/components/es7210/es7210.cpp +228 -0
- esphome/components/es7210/es7210.h +62 -0
- esphome/components/es7210/es7210_const.h +129 -0
- esphome/components/es7243e/__init__.py +0 -0
- esphome/components/es7243e/audio_adc.py +34 -0
- esphome/components/es7243e/es7243e.cpp +125 -0
- esphome/components/es7243e/es7243e.h +37 -0
- esphome/components/es7243e/es7243e_const.h +54 -0
- esphome/components/es8156/__init__.py +0 -0
- esphome/components/es8156/audio_dac.py +27 -0
- esphome/components/es8156/es8156.cpp +87 -0
- esphome/components/es8156/es8156.h +51 -0
- esphome/components/es8156/es8156_const.h +68 -0
- esphome/components/es8311/audio_dac.py +1 -2
- esphome/components/esp32/__init__.py +1 -0
- esphome/components/esp32/core.cpp +5 -1
- esphome/components/esp32/gpio.h +2 -0
- esphome/components/esp32_ble/__init__.py +39 -0
- esphome/components/esp32_ble/queue.h +4 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +46 -0
- esphome/components/esp32_ble_client/ble_client_base.h +2 -0
- esphome/components/esp32_ble_server/__init__.py +582 -12
- esphome/components/esp32_ble_server/ble_characteristic.cpp +48 -60
- esphome/components/esp32_ble_server/ble_characteristic.h +24 -17
- esphome/components/esp32_ble_server/ble_descriptor.cpp +21 -9
- esphome/components/esp32_ble_server/ble_descriptor.h +17 -6
- esphome/components/esp32_ble_server/ble_server.cpp +62 -67
- esphome/components/esp32_ble_server/ble_server.h +28 -32
- esphome/components/esp32_ble_server/ble_server_automations.cpp +77 -0
- esphome/components/esp32_ble_server/ble_server_automations.h +115 -0
- esphome/components/esp32_ble_server/ble_service.cpp +17 -15
- esphome/components/esp32_ble_server/ble_service.h +10 -14
- esphome/components/esp32_ble_tracker/__init__.py +6 -39
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +33 -10
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +8 -4
- esphome/components/esp32_dac/esp32_dac.cpp +16 -7
- esphome/components/esp32_dac/esp32_dac.h +8 -0
- esphome/components/esp32_dac/output.py +16 -4
- esphome/components/esp32_improv/__init__.py +2 -8
- esphome/components/esp32_improv/esp32_improv_component.cpp +21 -20
- esphome/components/esp32_improv/esp32_improv_component.h +3 -4
- esphome/components/esp32_rmt/__init__.py +28 -3
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +73 -6
- esphome/components/esp32_rmt_led_strip/led_strip.h +21 -3
- esphome/components/esp32_rmt_led_strip/light.py +72 -7
- esphome/components/esp32_touch/esp32_touch.cpp +5 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.h +1 -0
- esphome/components/ethernet/__init__.py +10 -10
- esphome/components/event/event.cpp +4 -2
- esphome/components/event/event.h +2 -0
- esphome/components/event_emitter/__init__.py +5 -0
- esphome/components/event_emitter/event_emitter.cpp +14 -0
- esphome/components/event_emitter/event_emitter.h +63 -0
- esphome/components/font/__init__.py +1 -1
- esphome/components/gcja5/gcja5.cpp +2 -1
- esphome/components/graph/graph.cpp +4 -9
- esphome/components/haier/haier_base.cpp +2 -1
- esphome/components/haier/hon_climate.cpp +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +2 -1
- esphome/components/host/__init__.py +1 -0
- esphome/components/host/gpio.h +1 -0
- esphome/components/http_request/http_request.h +2 -2
- esphome/components/http_request/http_request_arduino.cpp +1 -1
- esphome/components/http_request/http_request_idf.cpp +1 -1
- esphome/components/i2c/i2c_bus_esp_idf.cpp +4 -0
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +7 -5
- esphome/components/i2s_audio/speaker/__init__.py +53 -6
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +92 -46
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +8 -0
- esphome/components/ili9xxx/display.py +29 -11
- esphome/components/ili9xxx/ili9xxx_display.cpp +2 -5
- esphome/components/ili9xxx/ili9xxx_display.h +2 -1
- esphome/components/image/__init__.py +443 -255
- esphome/components/image/image.cpp +115 -61
- esphome/components/image/image.h +15 -24
- esphome/components/json/json_util.cpp +8 -34
- esphome/components/libretiny/__init__.py +1 -0
- esphome/components/libretiny/gpio_arduino.h +1 -0
- esphome/components/light/light_color_values.h +1 -1
- esphome/components/logger/__init__.py +45 -9
- esphome/components/logger/logger.cpp +16 -14
- esphome/components/logger/logger.h +11 -7
- esphome/components/logger/select/__init__.py +29 -0
- esphome/components/logger/select/logger_level_select.cpp +27 -0
- esphome/components/logger/select/logger_level_select.h +15 -0
- esphome/components/lvgl/__init__.py +96 -73
- esphome/components/lvgl/automation.py +39 -7
- esphome/components/lvgl/defines.py +8 -2
- esphome/components/lvgl/lvgl_esphome.cpp +8 -15
- esphome/components/lvgl/lvgl_esphome.h +20 -5
- esphome/components/lvgl/schemas.py +25 -14
- esphome/components/lvgl/trigger.py +27 -3
- esphome/components/lvgl/widgets/dropdown.py +1 -1
- esphome/components/lvgl/widgets/keyboard.py +8 -1
- esphome/components/lvgl/widgets/meter.py +2 -1
- esphome/components/lvgl/widgets/msgbox.py +1 -1
- esphome/components/lvgl/widgets/obj.py +1 -12
- esphome/components/lvgl/widgets/page.py +37 -2
- esphome/components/lvgl/widgets/tabview.py +1 -1
- esphome/components/max6956/max6956.h +2 -0
- esphome/components/mcp23016/mcp23016.h +2 -0
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +2 -0
- esphome/components/mdns/__init__.py +1 -1
- esphome/components/media_player/__init__.py +37 -8
- esphome/components/media_player/automation.h +11 -2
- esphome/components/media_player/media_player.cpp +8 -0
- esphome/components/media_player/media_player.h +8 -4
- esphome/components/micronova/switch/micronova_switch.cpp +4 -2
- esphome/components/midea/ac_automations.h +3 -1
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea/air_conditioner.h +1 -1
- esphome/components/midea/climate.py +4 -2
- esphome/components/midea/ir_transmitter.h +36 -5
- esphome/components/mixer/__init__.py +0 -0
- esphome/components/mixer/speaker/__init__.py +172 -0
- esphome/components/mixer/speaker/automation.h +19 -0
- esphome/components/mixer/speaker/mixer_speaker.cpp +624 -0
- esphome/components/mixer/speaker/mixer_speaker.h +207 -0
- esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp +7 -13
- esphome/components/mpr121/mpr121.h +2 -0
- esphome/components/mqtt/__init__.py +1 -1
- esphome/components/mqtt/mqtt_client.cpp +7 -1
- esphome/components/mqtt/mqtt_client.h +1 -1
- esphome/components/mqtt/mqtt_climate.cpp +2 -2
- esphome/components/network/ip_address.h +2 -0
- esphome/components/nextion/automation.h +17 -0
- esphome/components/nextion/display.py +42 -17
- esphome/components/nextion/nextion.cpp +4 -10
- esphome/components/nextion/nextion.h +89 -82
- esphome/components/nextion/nextion_commands.cpp +10 -10
- esphome/components/ntc/sensor.py +2 -4
- esphome/components/online_image/__init__.py +98 -46
- esphome/components/online_image/bmp_image.cpp +101 -0
- esphome/components/online_image/bmp_image.h +40 -0
- esphome/components/online_image/image_decoder.cpp +31 -2
- esphome/components/online_image/image_decoder.h +24 -15
- esphome/components/online_image/jpeg_image.cpp +92 -0
- esphome/components/online_image/jpeg_image.h +34 -0
- esphome/components/online_image/online_image.cpp +118 -58
- esphome/components/online_image/online_image.h +39 -9
- esphome/components/online_image/png_image.cpp +7 -3
- esphome/components/online_image/png_image.h +2 -1
- esphome/components/opentherm/__init__.py +73 -7
- esphome/components/opentherm/automation.h +25 -0
- esphome/components/opentherm/const.py +1 -0
- esphome/components/opentherm/generate.py +39 -6
- esphome/components/opentherm/hub.cpp +117 -79
- esphome/components/opentherm/hub.h +31 -15
- esphome/components/opentherm/opentherm.cpp +47 -23
- esphome/components/opentherm/opentherm.h +27 -6
- esphome/components/opentherm/opentherm_macros.h +11 -0
- esphome/components/opentherm/schema.py +78 -1
- esphome/components/opentherm/validate.py +7 -2
- esphome/components/pca6416a/pca6416a.h +2 -0
- esphome/components/pca9554/pca9554.h +2 -0
- esphome/components/pcf8574/pcf8574.h +2 -0
- esphome/components/preferences/__init__.py +2 -4
- esphome/components/preferences/syncer.h +10 -3
- esphome/components/prometheus/prometheus_handler.cpp +313 -0
- esphome/components/prometheus/prometheus_handler.h +48 -7
- esphome/components/psram/psram.cpp +8 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +14 -9
- esphome/components/pulse_counter/pulse_counter_sensor.h +4 -4
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +2 -0
- esphome/components/qspi_dbi/__init__.py +3 -0
- esphome/components/qspi_dbi/display.py +74 -47
- esphome/components/qspi_dbi/models.py +245 -2
- esphome/components/qspi_dbi/qspi_dbi.cpp +9 -16
- esphome/components/qspi_dbi/qspi_dbi.h +2 -2
- esphome/components/remote_base/__init__.py +77 -25
- esphome/components/remote_base/remote_base.cpp +1 -1
- esphome/components/remote_base/remote_base.h +20 -2
- esphome/components/remote_base/toto_protocol.cpp +100 -0
- esphome/components/remote_base/toto_protocol.h +45 -0
- esphome/components/remote_receiver/__init__.py +55 -10
- esphome/components/remote_receiver/remote_receiver.h +36 -3
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +145 -6
- esphome/components/remote_transmitter/__init__.py +62 -4
- esphome/components/remote_transmitter/remote_transmitter.h +21 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +140 -4
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +3 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +3 -3
- esphome/components/resampler/__init__.py +0 -0
- esphome/components/resampler/speaker/__init__.py +103 -0
- esphome/components/resampler/speaker/resampler_speaker.cpp +318 -0
- esphome/components/resampler/speaker/resampler_speaker.h +107 -0
- esphome/components/resistance/resistance_sensor.h +2 -3
- esphome/components/resistance/sensor.py +2 -9
- esphome/components/rotary_encoder/rotary_encoder.cpp +8 -4
- esphome/components/rp2040/__init__.py +1 -0
- esphome/components/rp2040/gpio.h +1 -0
- esphome/components/rtl87xx/__init__.py +2 -0
- esphome/components/scd30/sensor.py +1 -1
- esphome/components/sdl/binary_sensor.py +270 -0
- esphome/components/sdl/sdl_esphome.cpp +16 -0
- esphome/components/sdl/sdl_esphome.h +9 -0
- esphome/components/seeed_mr60bha2/binary_sensor.py +25 -0
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +26 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +9 -20
- esphome/components/seeed_mr60bha2/sensor.py +9 -1
- esphome/components/sn74hc165/sn74hc165.h +3 -0
- esphome/components/sn74hc595/sn74hc595.h +3 -0
- esphome/components/speaker/__init__.py +5 -4
- esphome/components/speaker/media_player/__init__.py +458 -0
- esphome/components/speaker/media_player/audio_pipeline.cpp +568 -0
- esphome/components/speaker/media_player/audio_pipeline.h +159 -0
- esphome/components/speaker/media_player/automation.h +26 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +577 -0
- esphome/components/speaker/media_player/speaker_media_player.h +160 -0
- esphome/components/speaker/speaker.h +20 -0
- esphome/components/spi/__init__.py +1 -5
- esphome/components/spi/spi.cpp +7 -1
- esphome/components/spi/spi.h +21 -2
- esphome/components/spi_led_strip/light.py +3 -5
- esphome/components/spi_led_strip/spi_led_strip.cpp +67 -0
- esphome/components/spi_led_strip/spi_led_strip.h +8 -60
- esphome/components/sprinkler/sprinkler.cpp +3 -1
- esphome/components/sx1509/sx1509_gpio_pin.h +2 -0
- esphome/components/tca9555/tca9555.h +2 -0
- esphome/components/toshiba/toshiba.cpp +2 -1
- esphome/components/tuya/light/tuya_light.cpp +4 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +2 -2
- esphome/components/uart/uart_component_esp_idf.cpp +2 -2
- esphome/components/udp/__init__.py +8 -2
- esphome/components/udp/udp_component.cpp +25 -56
- esphome/components/udp/udp_component.h +3 -0
- esphome/components/uponor_smatrix/sensor/__init__.py +14 -4
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +5 -0
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.h +1 -0
- esphome/components/uptime/text_sensor/__init__.py +19 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +63 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.h +25 -0
- esphome/components/voice_assistant/voice_assistant.cpp +24 -14
- esphome/components/voice_assistant/voice_assistant.h +8 -0
- esphome/components/waveshare_epaper/display.py +22 -1
- esphome/components/waveshare_epaper/waveshare_213v3.cpp +9 -3
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1155 -44
- esphome/components/waveshare_epaper/waveshare_epaper.h +208 -7
- esphome/components/web_server/web_server.cpp +28 -6
- esphome/components/weikai/weikai.h +2 -0
- esphome/components/wifi/__init__.py +6 -6
- esphome/components/wifi/wifi_component.cpp +1 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -1
- esphome/components/wireguard/__init__.py +2 -2
- esphome/components/xl9535/xl9535.h +2 -0
- esphome/components/xxtea/__init__.py +3 -0
- esphome/components/xxtea/xxtea.cpp +46 -0
- esphome/components/xxtea/xxtea.h +26 -0
- esphome/components/yashima/yashima.cpp +2 -1
- esphome/config.py +9 -5
- esphome/config_validation.py +55 -17
- esphome/const.py +7 -10
- esphome/core/__init__.py +6 -13
- esphome/core/base_automation.h +1 -0
- esphome/core/config.py +59 -72
- esphome/core/defines.h +9 -1
- esphome/core/gpio.h +7 -0
- esphome/core/helpers.cpp +19 -15
- esphome/core/helpers.h +57 -8
- esphome/core/log.h +9 -7
- esphome/cpp_generator.py +2 -2
- esphome/dashboard/web_server.py +1 -1
- esphome/espota2.py +3 -2
- esphome/loader.py +12 -4
- esphome/log.py +5 -7
- esphome/yaml_util.py +2 -2
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/METADATA +14 -9
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/RECORD +349 -300
- esphome/components/custom/binary_sensor/custom_binary_sensor.cpp +0 -16
- esphome/components/custom/binary_sensor/custom_binary_sensor.h +0 -26
- esphome/components/custom/climate/custom_climate.h +0 -22
- esphome/components/custom/cover/custom_cover.h +0 -21
- esphome/components/custom/light/custom_light_output.h +0 -24
- esphome/components/custom/output/custom_output.h +0 -37
- esphome/components/custom/sensor/custom_sensor.cpp +0 -16
- esphome/components/custom/sensor/custom_sensor.h +0 -24
- esphome/components/custom/switch/custom_switch.cpp +0 -16
- esphome/components/custom/switch/custom_switch.h +0 -24
- esphome/components/custom/text_sensor/custom_text_sensor.cpp +0 -16
- esphome/components/custom/text_sensor/custom_text_sensor.h +0 -26
- esphome/components/custom_component/custom_component.h +0 -28
- esphome/components/esp32_ble_server/ble_2901.cpp +0 -18
- esphome/components/esp32_ble_server/ble_2901.h +0 -19
- esphome/components/resistance_sampler/__init__.py +0 -6
- esphome/components/resistance_sampler/resistance_sampler.h +0 -10
- esphome/components/uptime/{sensor.py → sensor/__init__.py} +3 -3
- /esphome/components/uptime/{uptime_seconds_sensor.cpp → sensor/uptime_seconds_sensor.cpp} +0 -0
- /esphome/components/uptime/{uptime_seconds_sensor.h → sensor/uptime_seconds_sensor.h} +0 -0
- /esphome/components/uptime/{uptime_timestamp_sensor.cpp → sensor/uptime_timestamp_sensor.cpp} +0 -0
- /esphome/components/uptime/{uptime_timestamp_sensor.h → sensor/uptime_timestamp_sensor.h} +0 -0
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/LICENSE +0 -0
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/WHEEL +0 -0
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/entry_points.txt +0 -0
- {esphome-2024.12.3.dist-info → esphome-2025.2.0.dist-info}/top_level.txt +0 -0
@@ -24,6 +24,7 @@ from esphome.const import (
|
|
24
24
|
)
|
25
25
|
from esphome.core import TimePeriod
|
26
26
|
|
27
|
+
from . import CONF_DRAW_FROM_ORIGIN, CONF_DRAW_ROUNDING
|
27
28
|
from .models import DriverChip
|
28
29
|
|
29
30
|
DEPENDENCIES = ["spi"]
|
@@ -41,7 +42,6 @@ COLOR_ORDERS = {
|
|
41
42
|
}
|
42
43
|
DATA_PIN_SCHEMA = pins.internal_gpio_output_pin_schema
|
43
44
|
|
44
|
-
CONF_DRAW_FROM_ORIGIN = "draw_from_origin"
|
45
45
|
DELAY_FLAG = 0xFF
|
46
46
|
|
47
47
|
|
@@ -78,56 +78,81 @@ def _validate(config):
|
|
78
78
|
return config
|
79
79
|
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
cv.Optional(
|
97
|
-
CONF_OFFSET_HEIGHT, default=0
|
98
|
-
): validate_dimension,
|
99
|
-
cv.Optional(
|
100
|
-
CONF_OFFSET_WIDTH, default=0
|
101
|
-
): validate_dimension,
|
102
|
-
}
|
103
|
-
),
|
104
|
-
),
|
105
|
-
cv.Optional(CONF_TRANSFORM): cv.Schema(
|
81
|
+
def power_of_two(value):
|
82
|
+
value = cv.int_range(1, 128)(value)
|
83
|
+
if value & (value - 1) != 0:
|
84
|
+
raise cv.Invalid("value must be a power of two")
|
85
|
+
return value
|
86
|
+
|
87
|
+
|
88
|
+
BASE_SCHEMA = display.FULL_DISPLAY_SCHEMA.extend(
|
89
|
+
cv.Schema(
|
90
|
+
{
|
91
|
+
cv.GenerateID(): cv.declare_id(QSPI_DBI),
|
92
|
+
cv.Optional(CONF_INIT_SEQUENCE): cv.ensure_list(map_sequence),
|
93
|
+
cv.Required(CONF_DIMENSIONS): cv.Any(
|
94
|
+
cv.dimensions,
|
95
|
+
cv.Schema(
|
106
96
|
{
|
107
|
-
cv.
|
108
|
-
cv.
|
109
|
-
cv.Optional(
|
97
|
+
cv.Required(CONF_WIDTH): validate_dimension,
|
98
|
+
cv.Required(CONF_HEIGHT): validate_dimension,
|
99
|
+
cv.Optional(CONF_OFFSET_HEIGHT, default=0): validate_dimension,
|
100
|
+
cv.Optional(CONF_OFFSET_WIDTH, default=0): validate_dimension,
|
110
101
|
}
|
111
102
|
),
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
103
|
+
),
|
104
|
+
cv.Optional(CONF_DRAW_FROM_ORIGIN, default=False): cv.boolean,
|
105
|
+
cv.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema,
|
106
|
+
cv.Optional(CONF_ENABLE_PIN): pins.gpio_output_pin_schema,
|
107
|
+
cv.Optional(CONF_BRIGHTNESS, default=0xD0): cv.int_range(
|
108
|
+
0, 0xFF, min_included=True, max_included=True
|
109
|
+
),
|
110
|
+
}
|
111
|
+
).extend(
|
112
|
+
spi.spi_device_schema(
|
113
|
+
cs_pin_required=False,
|
114
|
+
default_mode="MODE0",
|
115
|
+
default_data_rate=10e6,
|
116
|
+
quad=True,
|
117
|
+
)
|
118
|
+
)
|
119
|
+
)
|
120
|
+
|
121
|
+
|
122
|
+
def model_property(name, defaults, fallback):
|
123
|
+
return cv.Optional(name, default=defaults.get(name, fallback))
|
124
|
+
|
125
|
+
|
126
|
+
def model_schema(defaults):
|
127
|
+
transform = cv.Schema(
|
128
|
+
{
|
129
|
+
cv.Optional(CONF_MIRROR_X, default=False): cv.boolean,
|
130
|
+
cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean,
|
131
|
+
}
|
132
|
+
)
|
133
|
+
if defaults.get(CONF_SWAP_XY, True):
|
134
|
+
transform = transform.extend(
|
135
|
+
{
|
136
|
+
cv.Optional(CONF_SWAP_XY, default=False): cv.boolean,
|
122
137
|
}
|
123
|
-
).extend(
|
124
|
-
spi.spi_device_schema(
|
125
|
-
cs_pin_required=False,
|
126
|
-
default_mode="MODE0",
|
127
|
-
default_data_rate=10e6,
|
128
|
-
quad=True,
|
129
|
-
)
|
130
138
|
)
|
139
|
+
return BASE_SCHEMA.extend(
|
140
|
+
{
|
141
|
+
model_property(CONF_INVERT_COLORS, defaults, False): cv.boolean,
|
142
|
+
model_property(CONF_COLOR_ORDER, defaults, "RGB"): cv.enum(
|
143
|
+
COLOR_ORDERS, upper=True
|
144
|
+
),
|
145
|
+
model_property(CONF_DRAW_ROUNDING, defaults, 2): power_of_two,
|
146
|
+
cv.Optional(CONF_TRANSFORM): transform,
|
147
|
+
}
|
148
|
+
)
|
149
|
+
|
150
|
+
|
151
|
+
CONFIG_SCHEMA = cv.All(
|
152
|
+
cv.typed_schema(
|
153
|
+
{k.upper(): model_schema(v.defaults) for k, v in DriverChip.chips.items()},
|
154
|
+
upper=True,
|
155
|
+
key=CONF_MODEL,
|
131
156
|
),
|
132
157
|
cv.only_with_esp_idf,
|
133
158
|
)
|
@@ -152,6 +177,7 @@ async def to_code(config):
|
|
152
177
|
cg.add(var.set_brightness(config[CONF_BRIGHTNESS]))
|
153
178
|
cg.add(var.set_model(config[CONF_MODEL]))
|
154
179
|
cg.add(var.set_draw_from_origin(config[CONF_DRAW_FROM_ORIGIN]))
|
180
|
+
cg.add(var.set_draw_rounding(config[CONF_DRAW_ROUNDING]))
|
155
181
|
if enable_pin := config.get(CONF_ENABLE_PIN):
|
156
182
|
enable = await cg.gpio_pin_expression(enable_pin)
|
157
183
|
cg.add(var.set_enable_pin(enable))
|
@@ -163,7 +189,8 @@ async def to_code(config):
|
|
163
189
|
if transform := config.get(CONF_TRANSFORM):
|
164
190
|
cg.add(var.set_mirror_x(transform[CONF_MIRROR_X]))
|
165
191
|
cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y]))
|
166
|
-
|
192
|
+
# swap_xy is not implemented for some chips
|
193
|
+
cg.add(var.set_swap_xy(transform.get(CONF_SWAP_XY, False)))
|
167
194
|
|
168
195
|
if CONF_DIMENSIONS in config:
|
169
196
|
dimensions = config[CONF_DIMENSIONS]
|
@@ -1,5 +1,10 @@
|
|
1
1
|
# Commands
|
2
|
+
from esphome.const import CONF_INVERT_COLORS, CONF_SWAP_XY
|
3
|
+
|
4
|
+
from . import CONF_DRAW_ROUNDING
|
5
|
+
|
2
6
|
SW_RESET_CMD = 0x01
|
7
|
+
SLEEP_IN = 0x10
|
3
8
|
SLEEP_OUT = 0x11
|
4
9
|
NORON = 0x13
|
5
10
|
INVERT_OFF = 0x20
|
@@ -24,11 +29,12 @@ PAGESEL = 0xFE
|
|
24
29
|
class DriverChip:
|
25
30
|
chips = {}
|
26
31
|
|
27
|
-
def __init__(self, name: str):
|
32
|
+
def __init__(self, name: str, defaults=None):
|
28
33
|
name = name.upper()
|
29
34
|
self.name = name
|
30
35
|
self.chips[name] = self
|
31
36
|
self.initsequence = []
|
37
|
+
self.defaults = defaults or {}
|
32
38
|
|
33
39
|
def cmd(self, c, *args):
|
34
40
|
"""
|
@@ -59,9 +65,246 @@ chip.cmd(TEON, 0x00)
|
|
59
65
|
chip.cmd(PIXFMT, 0x55)
|
60
66
|
chip.cmd(NORON)
|
61
67
|
|
62
|
-
chip = DriverChip("AXS15231")
|
68
|
+
chip = DriverChip("AXS15231", {CONF_DRAW_ROUNDING: 8, CONF_SWAP_XY: False})
|
63
69
|
chip.cmd(0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5)
|
64
70
|
chip.cmd(0xC1, 0x33)
|
65
71
|
chip.cmd(0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
|
66
72
|
|
73
|
+
chip = DriverChip(
|
74
|
+
"JC4832W535",
|
75
|
+
{
|
76
|
+
CONF_DRAW_ROUNDING: 8,
|
77
|
+
CONF_SWAP_XY: False,
|
78
|
+
},
|
79
|
+
)
|
80
|
+
chip.cmd(DISPLAY_OFF)
|
81
|
+
chip.delay(20)
|
82
|
+
chip.cmd(SLEEP_IN)
|
83
|
+
chip.delay(80)
|
84
|
+
chip.cmd(SLEEP_OUT)
|
85
|
+
chip.cmd(INVERT_OFF)
|
86
|
+
# A magic sequence to enable the windowed drawing mode
|
87
|
+
chip.cmd(0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5)
|
88
|
+
chip.cmd(0xC1, 0x33)
|
89
|
+
chip.cmd(0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
|
90
|
+
|
91
|
+
chip = DriverChip("JC3636W518", {CONF_INVERT_COLORS: True})
|
92
|
+
chip.cmd(0xF0, 0x08)
|
93
|
+
chip.cmd(0xF2, 0x08)
|
94
|
+
chip.cmd(0x9B, 0x51)
|
95
|
+
chip.cmd(0x86, 0x53)
|
96
|
+
chip.cmd(0xF2, 0x80)
|
97
|
+
chip.cmd(0xF0, 0x00)
|
98
|
+
chip.cmd(0xF0, 0x01)
|
99
|
+
chip.cmd(0xF1, 0x01)
|
100
|
+
chip.cmd(0xB0, 0x54)
|
101
|
+
chip.cmd(0xB1, 0x3F)
|
102
|
+
chip.cmd(0xB2, 0x2A)
|
103
|
+
chip.cmd(0xB4, 0x46)
|
104
|
+
chip.cmd(0xB5, 0x34)
|
105
|
+
chip.cmd(0xB6, 0xD5)
|
106
|
+
chip.cmd(0xB7, 0x30)
|
107
|
+
chip.cmd(0xBA, 0x00)
|
108
|
+
chip.cmd(0xBB, 0x08)
|
109
|
+
chip.cmd(0xBC, 0x08)
|
110
|
+
chip.cmd(0xBD, 0x00)
|
111
|
+
chip.cmd(0xC0, 0x80)
|
112
|
+
chip.cmd(0xC1, 0x10)
|
113
|
+
chip.cmd(0xC2, 0x37)
|
114
|
+
chip.cmd(0xC3, 0x80)
|
115
|
+
chip.cmd(0xC4, 0x10)
|
116
|
+
chip.cmd(0xC5, 0x37)
|
117
|
+
chip.cmd(0xC6, 0xA9)
|
118
|
+
chip.cmd(0xC7, 0x41)
|
119
|
+
chip.cmd(0xC8, 0x51)
|
120
|
+
chip.cmd(0xC9, 0xA9)
|
121
|
+
chip.cmd(0xCA, 0x41)
|
122
|
+
chip.cmd(0xCB, 0x51)
|
123
|
+
chip.cmd(0xD0, 0x91)
|
124
|
+
chip.cmd(0xD1, 0x68)
|
125
|
+
chip.cmd(0xD2, 0x69)
|
126
|
+
chip.cmd(0xF5, 0x00, 0xA5)
|
127
|
+
chip.cmd(0xDD, 0x3F)
|
128
|
+
chip.cmd(0xDE, 0x3F)
|
129
|
+
chip.cmd(0xF1, 0x10)
|
130
|
+
chip.cmd(0xF0, 0x00)
|
131
|
+
chip.cmd(0xF0, 0x02)
|
132
|
+
chip.cmd(
|
133
|
+
0xE0,
|
134
|
+
0x70,
|
135
|
+
0x09,
|
136
|
+
0x12,
|
137
|
+
0x0C,
|
138
|
+
0x0B,
|
139
|
+
0x27,
|
140
|
+
0x38,
|
141
|
+
0x54,
|
142
|
+
0x4E,
|
143
|
+
0x19,
|
144
|
+
0x15,
|
145
|
+
0x15,
|
146
|
+
0x2C,
|
147
|
+
0x2F,
|
148
|
+
)
|
149
|
+
chip.cmd(
|
150
|
+
0xE1,
|
151
|
+
0x70,
|
152
|
+
0x08,
|
153
|
+
0x11,
|
154
|
+
0x0C,
|
155
|
+
0x0B,
|
156
|
+
0x27,
|
157
|
+
0x38,
|
158
|
+
0x43,
|
159
|
+
0x4C,
|
160
|
+
0x18,
|
161
|
+
0x14,
|
162
|
+
0x14,
|
163
|
+
0x2B,
|
164
|
+
0x2D,
|
165
|
+
)
|
166
|
+
chip.cmd(0xF0, 0x10)
|
167
|
+
chip.cmd(0xF3, 0x10)
|
168
|
+
chip.cmd(0xE0, 0x08)
|
169
|
+
chip.cmd(0xE1, 0x00)
|
170
|
+
chip.cmd(0xE2, 0x00)
|
171
|
+
chip.cmd(0xE3, 0x00)
|
172
|
+
chip.cmd(0xE4, 0xE0)
|
173
|
+
chip.cmd(0xE5, 0x06)
|
174
|
+
chip.cmd(0xE6, 0x21)
|
175
|
+
chip.cmd(0xE7, 0x00)
|
176
|
+
chip.cmd(0xE8, 0x05)
|
177
|
+
chip.cmd(0xE9, 0x82)
|
178
|
+
chip.cmd(0xEA, 0xDF)
|
179
|
+
chip.cmd(0xEB, 0x89)
|
180
|
+
chip.cmd(0xEC, 0x20)
|
181
|
+
chip.cmd(0xED, 0x14)
|
182
|
+
chip.cmd(0xEE, 0xFF)
|
183
|
+
chip.cmd(0xEF, 0x00)
|
184
|
+
chip.cmd(0xF8, 0xFF)
|
185
|
+
chip.cmd(0xF9, 0x00)
|
186
|
+
chip.cmd(0xFA, 0x00)
|
187
|
+
chip.cmd(0xFB, 0x30)
|
188
|
+
chip.cmd(0xFC, 0x00)
|
189
|
+
chip.cmd(0xFD, 0x00)
|
190
|
+
chip.cmd(0xFE, 0x00)
|
191
|
+
chip.cmd(0xFF, 0x00)
|
192
|
+
chip.cmd(0x60, 0x42)
|
193
|
+
chip.cmd(0x61, 0xE0)
|
194
|
+
chip.cmd(0x62, 0x40)
|
195
|
+
chip.cmd(0x63, 0x40)
|
196
|
+
chip.cmd(0x64, 0x02)
|
197
|
+
chip.cmd(0x65, 0x00)
|
198
|
+
chip.cmd(0x66, 0x40)
|
199
|
+
chip.cmd(0x67, 0x03)
|
200
|
+
chip.cmd(0x68, 0x00)
|
201
|
+
chip.cmd(0x69, 0x00)
|
202
|
+
chip.cmd(0x6A, 0x00)
|
203
|
+
chip.cmd(0x6B, 0x00)
|
204
|
+
chip.cmd(0x70, 0x42)
|
205
|
+
chip.cmd(0x71, 0xE0)
|
206
|
+
chip.cmd(0x72, 0x40)
|
207
|
+
chip.cmd(0x73, 0x40)
|
208
|
+
chip.cmd(0x74, 0x02)
|
209
|
+
chip.cmd(0x75, 0x00)
|
210
|
+
chip.cmd(0x76, 0x40)
|
211
|
+
chip.cmd(0x77, 0x03)
|
212
|
+
chip.cmd(0x78, 0x00)
|
213
|
+
chip.cmd(0x79, 0x00)
|
214
|
+
chip.cmd(0x7A, 0x00)
|
215
|
+
chip.cmd(0x7B, 0x00)
|
216
|
+
chip.cmd(0x80, 0x48)
|
217
|
+
chip.cmd(0x81, 0x00)
|
218
|
+
chip.cmd(0x82, 0x05)
|
219
|
+
chip.cmd(0x83, 0x02)
|
220
|
+
chip.cmd(0x84, 0xDD)
|
221
|
+
chip.cmd(0x85, 0x00)
|
222
|
+
chip.cmd(0x86, 0x00)
|
223
|
+
chip.cmd(0x87, 0x00)
|
224
|
+
chip.cmd(0x88, 0x48)
|
225
|
+
chip.cmd(0x89, 0x00)
|
226
|
+
chip.cmd(0x8A, 0x07)
|
227
|
+
chip.cmd(0x8B, 0x02)
|
228
|
+
chip.cmd(0x8C, 0xDF)
|
229
|
+
chip.cmd(0x8D, 0x00)
|
230
|
+
chip.cmd(0x8E, 0x00)
|
231
|
+
chip.cmd(0x8F, 0x00)
|
232
|
+
chip.cmd(0x90, 0x48)
|
233
|
+
chip.cmd(0x91, 0x00)
|
234
|
+
chip.cmd(0x92, 0x09)
|
235
|
+
chip.cmd(0x93, 0x02)
|
236
|
+
chip.cmd(0x94, 0xE1)
|
237
|
+
chip.cmd(0x95, 0x00)
|
238
|
+
chip.cmd(0x96, 0x00)
|
239
|
+
chip.cmd(0x97, 0x00)
|
240
|
+
chip.cmd(0x98, 0x48)
|
241
|
+
chip.cmd(0x99, 0x00)
|
242
|
+
chip.cmd(0x9A, 0x0B)
|
243
|
+
chip.cmd(0x9B, 0x02)
|
244
|
+
chip.cmd(0x9C, 0xE3)
|
245
|
+
chip.cmd(0x9D, 0x00)
|
246
|
+
chip.cmd(0x9E, 0x00)
|
247
|
+
chip.cmd(0x9F, 0x00)
|
248
|
+
chip.cmd(0xA0, 0x48)
|
249
|
+
chip.cmd(0xA1, 0x00)
|
250
|
+
chip.cmd(0xA2, 0x04)
|
251
|
+
chip.cmd(0xA3, 0x02)
|
252
|
+
chip.cmd(0xA4, 0xDC)
|
253
|
+
chip.cmd(0xA5, 0x00)
|
254
|
+
chip.cmd(0xA6, 0x00)
|
255
|
+
chip.cmd(0xA7, 0x00)
|
256
|
+
chip.cmd(0xA8, 0x48)
|
257
|
+
chip.cmd(0xA9, 0x00)
|
258
|
+
chip.cmd(0xAA, 0x06)
|
259
|
+
chip.cmd(0xAB, 0x02)
|
260
|
+
chip.cmd(0xAC, 0xDE)
|
261
|
+
chip.cmd(0xAD, 0x00)
|
262
|
+
chip.cmd(0xAE, 0x00)
|
263
|
+
chip.cmd(0xAF, 0x00)
|
264
|
+
chip.cmd(0xB0, 0x48)
|
265
|
+
chip.cmd(0xB1, 0x00)
|
266
|
+
chip.cmd(0xB2, 0x08)
|
267
|
+
chip.cmd(0xB3, 0x02)
|
268
|
+
chip.cmd(0xB4, 0xE0)
|
269
|
+
chip.cmd(0xB5, 0x00)
|
270
|
+
chip.cmd(0xB6, 0x00)
|
271
|
+
chip.cmd(0xB7, 0x00)
|
272
|
+
chip.cmd(0xB8, 0x48)
|
273
|
+
chip.cmd(0xB9, 0x00)
|
274
|
+
chip.cmd(0xBA, 0x0A)
|
275
|
+
chip.cmd(0xBB, 0x02)
|
276
|
+
chip.cmd(0xBC, 0xE2)
|
277
|
+
chip.cmd(0xBD, 0x00)
|
278
|
+
chip.cmd(0xBE, 0x00)
|
279
|
+
chip.cmd(0xBF, 0x00)
|
280
|
+
chip.cmd(0xC0, 0x12)
|
281
|
+
chip.cmd(0xC1, 0xAA)
|
282
|
+
chip.cmd(0xC2, 0x65)
|
283
|
+
chip.cmd(0xC3, 0x74)
|
284
|
+
chip.cmd(0xC4, 0x47)
|
285
|
+
chip.cmd(0xC5, 0x56)
|
286
|
+
chip.cmd(0xC6, 0x00)
|
287
|
+
chip.cmd(0xC7, 0x88)
|
288
|
+
chip.cmd(0xC8, 0x99)
|
289
|
+
chip.cmd(0xC9, 0x33)
|
290
|
+
chip.cmd(0xD0, 0x21)
|
291
|
+
chip.cmd(0xD1, 0xAA)
|
292
|
+
chip.cmd(0xD2, 0x65)
|
293
|
+
chip.cmd(0xD3, 0x74)
|
294
|
+
chip.cmd(0xD4, 0x47)
|
295
|
+
chip.cmd(0xD5, 0x56)
|
296
|
+
chip.cmd(0xD6, 0x00)
|
297
|
+
chip.cmd(0xD7, 0x88)
|
298
|
+
chip.cmd(0xD8, 0x99)
|
299
|
+
chip.cmd(0xD9, 0x33)
|
300
|
+
chip.cmd(0xF3, 0x01)
|
301
|
+
chip.cmd(0xF0, 0x00)
|
302
|
+
chip.cmd(0xF0, 0x01)
|
303
|
+
chip.cmd(0xF1, 0x01)
|
304
|
+
chip.cmd(0xA0, 0x0B)
|
305
|
+
chip.cmd(0xA3, 0x2A)
|
306
|
+
chip.cmd(0xA5, 0xC3)
|
307
|
+
chip.cmd(PIXFMT, 0x55)
|
308
|
+
|
309
|
+
|
67
310
|
DriverChip("Custom")
|
@@ -33,19 +33,12 @@ void QspiDbi::update() {
|
|
33
33
|
this->do_update_();
|
34
34
|
if (this->buffer_ == nullptr || this->x_low_ > this->x_high_ || this->y_low_ > this->y_high_)
|
35
35
|
return;
|
36
|
-
//
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
}
|
43
|
-
if (this->y_low_ % 2 == 1) {
|
44
|
-
this->y_low_--;
|
45
|
-
}
|
46
|
-
if (this->y_high_ % 2 == 0) {
|
47
|
-
this->y_high_++;
|
48
|
-
}
|
36
|
+
// Some chips require that the drawing window be aligned on certain boundaries
|
37
|
+
auto dr = this->draw_rounding_;
|
38
|
+
this->x_low_ = this->x_low_ / dr * dr;
|
39
|
+
this->y_low_ = this->y_low_ / dr * dr;
|
40
|
+
this->x_high_ = (this->x_high_ + dr) / dr * dr - 1;
|
41
|
+
this->y_high_ = (this->y_high_ + dr) / dr * dr - 1;
|
49
42
|
if (this->draw_from_origin_) {
|
50
43
|
this->x_low_ = 0;
|
51
44
|
this->y_low_ = 0;
|
@@ -175,10 +168,9 @@ void QspiDbi::write_to_display_(int x_start, int y_start, int w, int h, const ui
|
|
175
168
|
this->write_cmd_addr_data(8, 0x32, 24, 0x2C00, ptr, w * h * 2, 4);
|
176
169
|
} else {
|
177
170
|
auto stride = x_offset + w + x_pad;
|
178
|
-
|
171
|
+
this->write_cmd_addr_data(8, 0x32, 24, 0x2C00, nullptr, 0, 4);
|
179
172
|
for (int y = 0; y != h; y++) {
|
180
|
-
this->write_cmd_addr_data(
|
181
|
-
cmd = 0x3C00;
|
173
|
+
this->write_cmd_addr_data(0, 0, 0, 0, ptr + ((y + y_offset) * stride + x_offset) * 2, w * 2, 4);
|
182
174
|
}
|
183
175
|
}
|
184
176
|
this->disable();
|
@@ -220,6 +212,7 @@ void QspiDbi::dump_config() {
|
|
220
212
|
ESP_LOGCONFIG("", "Model: %s", this->model_);
|
221
213
|
ESP_LOGCONFIG(TAG, " Height: %u", this->height_);
|
222
214
|
ESP_LOGCONFIG(TAG, " Width: %u", this->width_);
|
215
|
+
ESP_LOGCONFIG(TAG, " Draw rounding: %u", this->draw_rounding_);
|
223
216
|
LOG_PIN(" CS Pin: ", this->cs_);
|
224
217
|
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
225
218
|
ESP_LOGCONFIG(TAG, " SPI Data rate: %dMHz", (unsigned) (this->data_rate_ / 1000000));
|
@@ -4,12 +4,10 @@
|
|
4
4
|
#pragma once
|
5
5
|
|
6
6
|
#ifdef USE_ESP_IDF
|
7
|
-
#include "esphome/core/component.h"
|
8
7
|
#include "esphome/components/spi/spi.h"
|
9
8
|
#include "esphome/components/display/display.h"
|
10
9
|
#include "esphome/components/display/display_buffer.h"
|
11
10
|
#include "esphome/components/display/display_color_utils.h"
|
12
|
-
#include "esp_lcd_panel_ops.h"
|
13
11
|
|
14
12
|
#include "esp_lcd_panel_rgb.h"
|
15
13
|
|
@@ -105,6 +103,7 @@ class QspiDbi : public display::DisplayBuffer,
|
|
105
103
|
int get_height_internal() override { return this->height_; }
|
106
104
|
bool can_proceed() override { return this->setup_complete_; }
|
107
105
|
void add_init_sequence(const std::vector<uint8_t> &sequence) { this->init_sequences_.push_back(sequence); }
|
106
|
+
void set_draw_rounding(unsigned rounding) { this->draw_rounding_ = rounding; }
|
108
107
|
|
109
108
|
protected:
|
110
109
|
void check_buffer_() {
|
@@ -161,6 +160,7 @@ class QspiDbi : public display::DisplayBuffer,
|
|
161
160
|
bool mirror_x_{};
|
162
161
|
bool mirror_y_{};
|
163
162
|
bool draw_from_origin_{false};
|
163
|
+
unsigned draw_rounding_{2};
|
164
164
|
uint8_t brightness_{0xD0};
|
165
165
|
const char *model_{"Unknown"};
|
166
166
|
std::vector<std::vector<uint8_t>> init_sequences_{};
|
@@ -1,41 +1,41 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
1
|
from esphome import automation
|
2
|
+
import esphome.codegen as cg
|
4
3
|
from esphome.components import binary_sensor
|
4
|
+
import esphome.config_validation as cv
|
5
5
|
from esphome.const import (
|
6
|
+
CONF_ADDRESS,
|
7
|
+
CONF_BUTTON,
|
8
|
+
CONF_CARRIER_FREQUENCY,
|
9
|
+
CONF_CHANNEL,
|
10
|
+
CONF_CHECK,
|
11
|
+
CONF_CODE,
|
12
|
+
CONF_COMMAND,
|
6
13
|
CONF_COMMAND_REPEATS,
|
7
14
|
CONF_DATA,
|
8
|
-
|
15
|
+
CONF_DELTA,
|
16
|
+
CONF_DEVICE,
|
17
|
+
CONF_FAMILY,
|
18
|
+
CONF_GROUP,
|
19
|
+
CONF_ID,
|
20
|
+
CONF_INVERTED,
|
21
|
+
CONF_LEVEL,
|
22
|
+
CONF_MAGNITUDE,
|
9
23
|
CONF_NBITS,
|
10
|
-
CONF_ADDRESS,
|
11
|
-
CONF_COMMAND,
|
12
|
-
CONF_CODE,
|
13
|
-
CONF_PULSE_LENGTH,
|
14
|
-
CONF_SYNC,
|
15
|
-
CONF_ZERO,
|
16
24
|
CONF_ONE,
|
17
|
-
CONF_INVERTED,
|
18
25
|
CONF_PROTOCOL,
|
19
|
-
|
20
|
-
|
26
|
+
CONF_PULSE_LENGTH,
|
27
|
+
CONF_RC_CODE_1,
|
28
|
+
CONF_RC_CODE_2,
|
29
|
+
CONF_REPEAT,
|
21
30
|
CONF_SECOND,
|
22
31
|
CONF_STATE,
|
23
|
-
|
24
|
-
CONF_FAMILY,
|
25
|
-
CONF_REPEAT,
|
26
|
-
CONF_WAIT_TIME,
|
32
|
+
CONF_SYNC,
|
27
33
|
CONF_TIMES,
|
34
|
+
CONF_TRIGGER_ID,
|
28
35
|
CONF_TYPE_ID,
|
29
|
-
|
30
|
-
CONF_RC_CODE_1,
|
31
|
-
CONF_RC_CODE_2,
|
32
|
-
CONF_MAGNITUDE,
|
36
|
+
CONF_WAIT_TIME,
|
33
37
|
CONF_WAND_ID,
|
34
|
-
|
35
|
-
CONF_DELTA,
|
36
|
-
CONF_ID,
|
37
|
-
CONF_BUTTON,
|
38
|
-
CONF_CHECK,
|
38
|
+
CONF_ZERO,
|
39
39
|
)
|
40
40
|
from esphome.core import coroutine
|
41
41
|
from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor
|
@@ -1963,3 +1963,55 @@ async def mirage_action(var, config, args):
|
|
1963
1963
|
vec_ = cg.std_vector.template(cg.uint8)
|
1964
1964
|
template_ = await cg.templatable(config[CONF_CODE], args, vec_, vec_)
|
1965
1965
|
cg.add(var.set_code(template_))
|
1966
|
+
|
1967
|
+
|
1968
|
+
# Toto
|
1969
|
+
(
|
1970
|
+
TotoData,
|
1971
|
+
TotoBinarySensor,
|
1972
|
+
TotoTrigger,
|
1973
|
+
TotoAction,
|
1974
|
+
TotoDumper,
|
1975
|
+
) = declare_protocol("Toto")
|
1976
|
+
|
1977
|
+
TOTO_SCHEMA = cv.Schema(
|
1978
|
+
{
|
1979
|
+
cv.Optional(CONF_RC_CODE_1, default=0): cv.hex_int_range(0, 0xF),
|
1980
|
+
cv.Optional(CONF_RC_CODE_2, default=0): cv.hex_int_range(0, 0xF),
|
1981
|
+
cv.Required(CONF_COMMAND): cv.hex_uint8_t,
|
1982
|
+
}
|
1983
|
+
)
|
1984
|
+
|
1985
|
+
|
1986
|
+
@register_binary_sensor("toto", TotoBinarySensor, TOTO_SCHEMA)
|
1987
|
+
def toto_binary_sensor(var, config):
|
1988
|
+
cg.add(
|
1989
|
+
var.set_data(
|
1990
|
+
cg.StructInitializer(
|
1991
|
+
TotoData,
|
1992
|
+
("rc_code_1", config[CONF_RC_CODE_1]),
|
1993
|
+
("rc_code_2", config[CONF_RC_CODE_2]),
|
1994
|
+
("command", config[CONF_COMMAND]),
|
1995
|
+
)
|
1996
|
+
)
|
1997
|
+
)
|
1998
|
+
|
1999
|
+
|
2000
|
+
@register_trigger("toto", TotoTrigger, TotoData)
|
2001
|
+
def toto_trigger(var, config):
|
2002
|
+
pass
|
2003
|
+
|
2004
|
+
|
2005
|
+
@register_dumper("toto", TotoDumper)
|
2006
|
+
def toto_dumper(var, config):
|
2007
|
+
pass
|
2008
|
+
|
2009
|
+
|
2010
|
+
@register_action("toto", TotoAction, TOTO_SCHEMA)
|
2011
|
+
async def Toto_action(var, config, args):
|
2012
|
+
template_ = await cg.templatable(config[CONF_RC_CODE_1], args, cg.uint8)
|
2013
|
+
cg.add(var.set_rc_code_1(template_))
|
2014
|
+
template_ = await cg.templatable(config[CONF_RC_CODE_2], args, cg.uint8)
|
2015
|
+
cg.add(var.set_rc_code_2(template_))
|
2016
|
+
template_ = await cg.templatable(config[CONF_COMMAND], args, cg.uint8)
|
2017
|
+
cg.add(var.set_command(template_))
|
@@ -8,7 +8,7 @@ namespace remote_base {
|
|
8
8
|
|
9
9
|
static const char *const TAG = "remote_base";
|
10
10
|
|
11
|
-
#
|
11
|
+
#if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
|
12
12
|
RemoteRMTChannel::RemoteRMTChannel(uint8_t mem_block_num) : mem_block_num_(mem_block_num) {
|
13
13
|
static rmt_channel_t next_rmt_channel = RMT_CHANNEL_0;
|
14
14
|
this->channel_ = next_rmt_channel;
|
@@ -8,7 +8,7 @@
|
|
8
8
|
#include "esphome/core/component.h"
|
9
9
|
#include "esphome/core/hal.h"
|
10
10
|
|
11
|
-
#
|
11
|
+
#if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
|
12
12
|
#include <driver/rmt.h>
|
13
13
|
#endif
|
14
14
|
|
@@ -54,7 +54,7 @@ class RemoteReceiveData {
|
|
54
54
|
uint32_t get_index() const { return index_; }
|
55
55
|
int32_t operator[](uint32_t index) const { return this->data_[index]; }
|
56
56
|
int32_t size() const { return this->data_.size(); }
|
57
|
-
bool is_valid(uint32_t offset) const { return this->index_ + offset < this->data_.size(); }
|
57
|
+
bool is_valid(uint32_t offset = 0) const { return this->index_ + offset < this->data_.size(); }
|
58
58
|
int32_t peek(uint32_t offset = 0) const { return this->data_[this->index_ + offset]; }
|
59
59
|
bool peek_mark(uint32_t length, uint32_t offset = 0) const;
|
60
60
|
bool peek_space(uint32_t length, uint32_t offset = 0) const;
|
@@ -112,25 +112,43 @@ class RemoteComponentBase {
|
|
112
112
|
#ifdef USE_ESP32
|
113
113
|
class RemoteRMTChannel {
|
114
114
|
public:
|
115
|
+
#if ESP_IDF_VERSION_MAJOR >= 5
|
116
|
+
void set_clock_resolution(uint32_t clock_resolution) { this->clock_resolution_ = clock_resolution; }
|
117
|
+
void set_rmt_symbols(uint32_t rmt_symbols) { this->rmt_symbols_ = rmt_symbols; }
|
118
|
+
#else
|
115
119
|
explicit RemoteRMTChannel(uint8_t mem_block_num = 1);
|
116
120
|
explicit RemoteRMTChannel(rmt_channel_t channel, uint8_t mem_block_num = 1);
|
117
121
|
|
118
122
|
void config_rmt(rmt_config_t &rmt);
|
119
123
|
void set_clock_divider(uint8_t clock_divider) { this->clock_divider_ = clock_divider; }
|
124
|
+
#endif
|
120
125
|
|
121
126
|
protected:
|
122
127
|
uint32_t from_microseconds_(uint32_t us) {
|
128
|
+
#if ESP_IDF_VERSION_MAJOR >= 5
|
129
|
+
const uint32_t ticks_per_ten_us = this->clock_resolution_ / 100000u;
|
130
|
+
#else
|
123
131
|
const uint32_t ticks_per_ten_us = 80000000u / this->clock_divider_ / 100000u;
|
132
|
+
#endif
|
124
133
|
return us * ticks_per_ten_us / 10;
|
125
134
|
}
|
126
135
|
uint32_t to_microseconds_(uint32_t ticks) {
|
136
|
+
#if ESP_IDF_VERSION_MAJOR >= 5
|
137
|
+
const uint32_t ticks_per_ten_us = this->clock_resolution_ / 100000u;
|
138
|
+
#else
|
127
139
|
const uint32_t ticks_per_ten_us = 80000000u / this->clock_divider_ / 100000u;
|
140
|
+
#endif
|
128
141
|
return (ticks * 10) / ticks_per_ten_us;
|
129
142
|
}
|
130
143
|
RemoteComponentBase *remote_base_;
|
144
|
+
#if ESP_IDF_VERSION_MAJOR >= 5
|
145
|
+
uint32_t clock_resolution_{1000000};
|
146
|
+
uint32_t rmt_symbols_;
|
147
|
+
#else
|
131
148
|
rmt_channel_t channel_{RMT_CHANNEL_0};
|
132
149
|
uint8_t mem_block_num_;
|
133
150
|
uint8_t clock_divider_{80};
|
151
|
+
#endif
|
134
152
|
};
|
135
153
|
#endif
|
136
154
|
|