esphome 2025.7.4__py3-none-any.whl → 2025.8.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 +189 -82
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +112 -56
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +488 -118
- esphome/components/atm90e32/atm90e32.h +44 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +199 -58
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +40 -2
- esphome/components/esp32_ble/ble.cpp +12 -8
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +2 -4
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/font/__init__.py +9 -1
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/lvgl/widgets/tileview.py +15 -7
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +0 -1
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +2 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +187 -352
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +8 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +8 -15
- esphome/const.py +26 -1
- esphome/core/__init__.py +88 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +41 -6
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +277 -74
- esphome/core/scheduler.h +89 -27
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +5 -107
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
|
@@ -473,6 +473,12 @@ bool WiFiComponent::wifi_sta_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
473
473
|
if (!this->wifi_mode_(true, {}))
|
|
474
474
|
return false;
|
|
475
475
|
|
|
476
|
+
// Check if the STA interface is initialized before using it
|
|
477
|
+
if (s_sta_netif == nullptr) {
|
|
478
|
+
ESP_LOGW(TAG, "STA interface not initialized");
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
|
|
476
482
|
esp_netif_dhcp_status_t dhcp_status;
|
|
477
483
|
esp_err_t err = esp_netif_dhcpc_get_status(s_sta_netif, &dhcp_status);
|
|
478
484
|
if (err != ESP_OK) {
|
|
@@ -640,8 +646,20 @@ const char *get_disconnect_reason_str(uint8_t reason) {
|
|
|
640
646
|
return "Handshake Failed";
|
|
641
647
|
case WIFI_REASON_CONNECTION_FAIL:
|
|
642
648
|
return "Connection Failed";
|
|
649
|
+
case WIFI_REASON_AP_TSF_RESET:
|
|
650
|
+
return "AP TSF reset";
|
|
643
651
|
case WIFI_REASON_ROAMING:
|
|
644
652
|
return "Station Roaming";
|
|
653
|
+
case WIFI_REASON_ASSOC_COMEBACK_TIME_TOO_LONG:
|
|
654
|
+
return "Association comeback time too long";
|
|
655
|
+
case WIFI_REASON_SA_QUERY_TIMEOUT:
|
|
656
|
+
return "SA query timeout";
|
|
657
|
+
case WIFI_REASON_NO_AP_FOUND_W_COMPATIBLE_SECURITY:
|
|
658
|
+
return "No AP found with compatible security";
|
|
659
|
+
case WIFI_REASON_NO_AP_FOUND_IN_AUTHMODE_THRESHOLD:
|
|
660
|
+
return "No AP found in auth mode threshold";
|
|
661
|
+
case WIFI_REASON_NO_AP_FOUND_IN_RSSI_THRESHOLD:
|
|
662
|
+
return "No AP found in RSSI threshold";
|
|
645
663
|
case WIFI_REASON_UNSPECIFIED:
|
|
646
664
|
default:
|
|
647
665
|
return "Unspecified";
|
|
@@ -679,6 +697,8 @@ void WiFiComponent::wifi_process_event_(IDFWiFiEvent *data) {
|
|
|
679
697
|
} else if (data->event_base == WIFI_EVENT && data->event_id == WIFI_EVENT_STA_STOP) {
|
|
680
698
|
ESP_LOGV(TAG, "STA stop");
|
|
681
699
|
s_sta_started = false;
|
|
700
|
+
// Clear the STA interface handle to prevent use-after-free
|
|
701
|
+
s_sta_netif = nullptr;
|
|
682
702
|
|
|
683
703
|
} else if (data->event_base == WIFI_EVENT && data->event_id == WIFI_EVENT_STA_AUTHMODE_CHANGE) {
|
|
684
704
|
const auto &it = data->data.sta_authmode_change;
|
|
@@ -777,6 +797,10 @@ void WiFiComponent::wifi_process_event_(IDFWiFiEvent *data) {
|
|
|
777
797
|
} else if (data->event_base == WIFI_EVENT && data->event_id == WIFI_EVENT_AP_STOP) {
|
|
778
798
|
ESP_LOGV(TAG, "AP stop");
|
|
779
799
|
s_ap_started = false;
|
|
800
|
+
#ifdef USE_WIFI_AP
|
|
801
|
+
// Clear the AP interface handle to prevent use-after-free
|
|
802
|
+
s_ap_netif = nullptr;
|
|
803
|
+
#endif
|
|
780
804
|
|
|
781
805
|
} else if (data->event_base == WIFI_EVENT && data->event_id == WIFI_EVENT_AP_PROBEREQRECVED) {
|
|
782
806
|
const auto &it = data->data.ap_probe_req_rx;
|
|
@@ -853,6 +877,12 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
853
877
|
if (!this->wifi_mode_({}, true))
|
|
854
878
|
return false;
|
|
855
879
|
|
|
880
|
+
// Check if the AP interface is initialized before using it
|
|
881
|
+
if (s_ap_netif == nullptr) {
|
|
882
|
+
ESP_LOGW(TAG, "AP interface not initialized");
|
|
883
|
+
return false;
|
|
884
|
+
}
|
|
885
|
+
|
|
856
886
|
esp_netif_ip_info_t info;
|
|
857
887
|
if (manual_ip.has_value()) {
|
|
858
888
|
info.ip = manual_ip->static_ip;
|
|
@@ -28,7 +28,6 @@ class IPAddressWiFiInfo : public PollingComponent, public text_sensor::TextSenso
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
31
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-ip"; }
|
|
32
31
|
void dump_config() override;
|
|
33
32
|
void add_ip_sensors(uint8_t index, text_sensor::TextSensor *s) { this->ip_sensors_[index] = s; }
|
|
34
33
|
|
|
@@ -51,7 +50,6 @@ class DNSAddressWifiInfo : public PollingComponent, public text_sensor::TextSens
|
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
54
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-dns"; }
|
|
55
53
|
void dump_config() override;
|
|
56
54
|
|
|
57
55
|
protected:
|
|
@@ -80,7 +78,6 @@ class ScanResultsWiFiInfo : public PollingComponent, public text_sensor::TextSen
|
|
|
80
78
|
}
|
|
81
79
|
}
|
|
82
80
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
83
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-scanresults"; }
|
|
84
81
|
void dump_config() override;
|
|
85
82
|
|
|
86
83
|
protected:
|
|
@@ -97,7 +94,6 @@ class SSIDWiFiInfo : public PollingComponent, public text_sensor::TextSensor {
|
|
|
97
94
|
}
|
|
98
95
|
}
|
|
99
96
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
100
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-ssid"; }
|
|
101
97
|
void dump_config() override;
|
|
102
98
|
|
|
103
99
|
protected:
|
|
@@ -116,7 +112,6 @@ class BSSIDWiFiInfo : public PollingComponent, public text_sensor::TextSensor {
|
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
119
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-bssid"; }
|
|
120
115
|
void dump_config() override;
|
|
121
116
|
|
|
122
117
|
protected:
|
|
@@ -126,7 +121,6 @@ class BSSIDWiFiInfo : public PollingComponent, public text_sensor::TextSensor {
|
|
|
126
121
|
class MacAddressWifiInfo : public Component, public text_sensor::TextSensor {
|
|
127
122
|
public:
|
|
128
123
|
void setup() override { this->publish_state(get_mac_address_pretty()); }
|
|
129
|
-
std::string unique_id() override { return get_mac_address() + "-wifiinfo-macadr"; }
|
|
130
124
|
void dump_config() override;
|
|
131
125
|
};
|
|
132
126
|
|
|
@@ -13,7 +13,6 @@ class WiFiSignalSensor : public sensor::Sensor, public PollingComponent {
|
|
|
13
13
|
void update() override { this->publish_state(wifi::global_wifi_component->wifi_rssi()); }
|
|
14
14
|
void dump_config() override;
|
|
15
15
|
|
|
16
|
-
std::string unique_id() override { return get_mac_address() + "-wifisignal"; }
|
|
17
16
|
float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
|
|
18
17
|
};
|
|
19
18
|
|
|
@@ -28,8 +28,6 @@ static const char *const LOGMSG_ONLINE = "online";
|
|
|
28
28
|
static const char *const LOGMSG_OFFLINE = "offline";
|
|
29
29
|
|
|
30
30
|
void Wireguard::setup() {
|
|
31
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
32
|
-
|
|
33
31
|
this->wg_config_.address = this->address_.c_str();
|
|
34
32
|
this->wg_config_.private_key = this->private_key_.c_str();
|
|
35
33
|
this->wg_config_.endpoint = this->peer_endpoint_.c_str();
|
esphome/components/x9c/x9c.cpp
CHANGED
|
@@ -7,8 +7,6 @@ namespace xl9535 {
|
|
|
7
7
|
static const char *const TAG = "xl9535";
|
|
8
8
|
|
|
9
9
|
void XL9535Component::setup() {
|
|
10
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
11
|
-
|
|
12
10
|
// Check to see if the device can read from the register
|
|
13
11
|
uint8_t port = 0;
|
|
14
12
|
if (this->read_register(XL9535_INPUT_PORT_0_REGISTER, &port, 1) != i2c::ERROR_OK) {
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import TypedDict
|
|
3
|
+
|
|
4
|
+
import esphome.codegen as cg
|
|
5
|
+
from esphome.const import CONF_BOARD
|
|
6
|
+
from esphome.core import CORE
|
|
7
|
+
from esphome.helpers import copy_file_if_changed, write_file_if_changed
|
|
8
|
+
|
|
9
|
+
from .const import (
|
|
10
|
+
BOOTLOADER_MCUBOOT,
|
|
11
|
+
KEY_BOARD,
|
|
12
|
+
KEY_BOOTLOADER,
|
|
13
|
+
KEY_EXTRA_BUILD_FILES,
|
|
14
|
+
KEY_OVERLAY,
|
|
15
|
+
KEY_PM_STATIC,
|
|
16
|
+
KEY_PRJ_CONF,
|
|
17
|
+
KEY_USER,
|
|
18
|
+
KEY_ZEPHYR,
|
|
19
|
+
zephyr_ns,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
CODEOWNERS = ["@tomaszduda23"]
|
|
23
|
+
AUTO_LOAD = ["preferences"]
|
|
24
|
+
|
|
25
|
+
PrjConfValueType = bool | str | int
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Section:
|
|
29
|
+
def __init__(self, name, address, size, region):
|
|
30
|
+
self.name = name
|
|
31
|
+
self.address = address
|
|
32
|
+
self.size = size
|
|
33
|
+
self.region = region
|
|
34
|
+
self.end_address = self.address + self.size
|
|
35
|
+
|
|
36
|
+
def __str__(self):
|
|
37
|
+
return (
|
|
38
|
+
f"{self.name}:\n"
|
|
39
|
+
f" address: 0x{self.address:X}\n"
|
|
40
|
+
f" end_address: 0x{self.end_address:X}\n"
|
|
41
|
+
f" region: {self.region}\n"
|
|
42
|
+
f" size: 0x{self.size:X}"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ZephyrData(TypedDict):
|
|
47
|
+
board: str
|
|
48
|
+
bootloader: str
|
|
49
|
+
prj_conf: dict[str, tuple[PrjConfValueType, bool]]
|
|
50
|
+
overlay: str
|
|
51
|
+
extra_build_files: dict[str, str]
|
|
52
|
+
pm_static: list[Section]
|
|
53
|
+
user: dict[str, list[str]]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def zephyr_set_core_data(config):
|
|
57
|
+
CORE.data[KEY_ZEPHYR] = ZephyrData(
|
|
58
|
+
board=config[CONF_BOARD],
|
|
59
|
+
bootloader=config[KEY_BOOTLOADER],
|
|
60
|
+
prj_conf={},
|
|
61
|
+
overlay="",
|
|
62
|
+
extra_build_files={},
|
|
63
|
+
pm_static=[],
|
|
64
|
+
user={},
|
|
65
|
+
)
|
|
66
|
+
return config
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def zephyr_data() -> ZephyrData:
|
|
70
|
+
return CORE.data[KEY_ZEPHYR]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def zephyr_add_prj_conf(
|
|
74
|
+
name: str, value: PrjConfValueType, required: bool = True
|
|
75
|
+
) -> None:
|
|
76
|
+
"""Set an zephyr prj conf value."""
|
|
77
|
+
if not name.startswith("CONFIG_"):
|
|
78
|
+
name = "CONFIG_" + name
|
|
79
|
+
prj_conf = zephyr_data()[KEY_PRJ_CONF]
|
|
80
|
+
if name not in prj_conf:
|
|
81
|
+
prj_conf[name] = (value, required)
|
|
82
|
+
return
|
|
83
|
+
old_value, old_required = prj_conf[name]
|
|
84
|
+
if old_value != value and old_required:
|
|
85
|
+
raise ValueError(
|
|
86
|
+
f"{name} already set with value '{old_value}', cannot set again to '{value}'"
|
|
87
|
+
)
|
|
88
|
+
if required:
|
|
89
|
+
prj_conf[name] = (value, required)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def zephyr_add_overlay(content):
|
|
93
|
+
zephyr_data()[KEY_OVERLAY] += content
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def add_extra_build_file(filename: str, path: str) -> bool:
|
|
97
|
+
"""Add an extra build file to the project."""
|
|
98
|
+
extra_build_files = zephyr_data()[KEY_EXTRA_BUILD_FILES]
|
|
99
|
+
if filename not in extra_build_files:
|
|
100
|
+
extra_build_files[filename] = path
|
|
101
|
+
return True
|
|
102
|
+
return False
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def add_extra_script(stage: str, filename: str, path: str):
|
|
106
|
+
"""Add an extra script to the project."""
|
|
107
|
+
key = f"{stage}:{filename}"
|
|
108
|
+
if add_extra_build_file(filename, path):
|
|
109
|
+
cg.add_platformio_option("extra_scripts", [key])
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def zephyr_to_code(config):
|
|
113
|
+
cg.add(zephyr_ns.setup_preferences())
|
|
114
|
+
cg.add_build_flag("-DUSE_ZEPHYR")
|
|
115
|
+
cg.set_cpp_standard("gnu++20")
|
|
116
|
+
# build is done by west so bypass board checking in platformio
|
|
117
|
+
cg.add_platformio_option("boards_dir", CORE.relative_build_path("boards"))
|
|
118
|
+
|
|
119
|
+
# c++ support
|
|
120
|
+
zephyr_add_prj_conf("NEWLIB_LIBC", True)
|
|
121
|
+
zephyr_add_prj_conf("CONFIG_FPU", True)
|
|
122
|
+
zephyr_add_prj_conf("NEWLIB_LIBC_FLOAT_PRINTF", True)
|
|
123
|
+
zephyr_add_prj_conf("CPLUSPLUS", True)
|
|
124
|
+
zephyr_add_prj_conf("CONFIG_STD_CPP20", True)
|
|
125
|
+
zephyr_add_prj_conf("LIB_CPLUSPLUS", True)
|
|
126
|
+
# preferences
|
|
127
|
+
zephyr_add_prj_conf("SETTINGS", True)
|
|
128
|
+
zephyr_add_prj_conf("NVS", True)
|
|
129
|
+
zephyr_add_prj_conf("FLASH_MAP", True)
|
|
130
|
+
zephyr_add_prj_conf("CONFIG_FLASH", True)
|
|
131
|
+
# watchdog
|
|
132
|
+
zephyr_add_prj_conf("WATCHDOG", True)
|
|
133
|
+
zephyr_add_prj_conf("WDT_DISABLE_AT_BOOT", False)
|
|
134
|
+
# disable console
|
|
135
|
+
zephyr_add_prj_conf("UART_CONSOLE", False)
|
|
136
|
+
zephyr_add_prj_conf("CONSOLE", False, False)
|
|
137
|
+
# use NFC pins as GPIO
|
|
138
|
+
zephyr_add_prj_conf("NFCT_PINS_AS_GPIOS", True)
|
|
139
|
+
|
|
140
|
+
# <err> os: ***** USAGE FAULT *****
|
|
141
|
+
# <err> os: Illegal load of EXC_RETURN into PC
|
|
142
|
+
zephyr_add_prj_conf("MAIN_STACK_SIZE", 2048)
|
|
143
|
+
|
|
144
|
+
add_extra_script(
|
|
145
|
+
"pre",
|
|
146
|
+
"pre_build.py",
|
|
147
|
+
os.path.join(os.path.dirname(__file__), "pre_build.py.script"),
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _format_prj_conf_val(value: PrjConfValueType) -> str:
|
|
152
|
+
if isinstance(value, bool):
|
|
153
|
+
return "y" if value else "n"
|
|
154
|
+
if isinstance(value, int):
|
|
155
|
+
return str(value)
|
|
156
|
+
if isinstance(value, str):
|
|
157
|
+
return f'"{value}"'
|
|
158
|
+
raise ValueError
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def zephyr_add_cdc_acm(config, id):
|
|
162
|
+
zephyr_add_prj_conf("USB_DEVICE_STACK", True)
|
|
163
|
+
zephyr_add_prj_conf("USB_CDC_ACM", True)
|
|
164
|
+
# prevent device to go to susspend, without this communication stop working in python
|
|
165
|
+
# there should be a way to solve it
|
|
166
|
+
zephyr_add_prj_conf("USB_DEVICE_REMOTE_WAKEUP", False)
|
|
167
|
+
# prevent logging when buffer is full
|
|
168
|
+
zephyr_add_prj_conf("USB_CDC_ACM_LOG_LEVEL_WRN", True)
|
|
169
|
+
zephyr_add_overlay(
|
|
170
|
+
f"""
|
|
171
|
+
&zephyr_udc0 {{
|
|
172
|
+
cdc_acm_uart{id}: cdc_acm_uart{id} {{
|
|
173
|
+
compatible = "zephyr,cdc-acm-uart";
|
|
174
|
+
}};
|
|
175
|
+
}};
|
|
176
|
+
"""
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def zephyr_add_pm_static(section: Section):
|
|
181
|
+
CORE.data[KEY_ZEPHYR][KEY_PM_STATIC].extend(section)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def zephyr_add_user(key, value):
|
|
185
|
+
user = zephyr_data()[KEY_USER]
|
|
186
|
+
if key not in user:
|
|
187
|
+
user[key] = []
|
|
188
|
+
user[key] += [value]
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def copy_files():
|
|
192
|
+
user = zephyr_data()[KEY_USER]
|
|
193
|
+
if user:
|
|
194
|
+
zephyr_add_overlay(
|
|
195
|
+
f"""
|
|
196
|
+
/ {{
|
|
197
|
+
zephyr,user {{
|
|
198
|
+
{[f"{key} = {', '.join(value)};" for key, value in user.items()][0]}
|
|
199
|
+
}};
|
|
200
|
+
}};"""
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
want_opts = zephyr_data()[KEY_PRJ_CONF]
|
|
204
|
+
|
|
205
|
+
prj_conf = (
|
|
206
|
+
"\n".join(
|
|
207
|
+
f"{name}={_format_prj_conf_val(value[0])}"
|
|
208
|
+
for name, value in sorted(want_opts.items())
|
|
209
|
+
)
|
|
210
|
+
+ "\n"
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
write_file_if_changed(CORE.relative_build_path("zephyr/prj.conf"), prj_conf)
|
|
214
|
+
|
|
215
|
+
write_file_if_changed(
|
|
216
|
+
CORE.relative_build_path("zephyr/app.overlay"),
|
|
217
|
+
zephyr_data()[KEY_OVERLAY],
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
if zephyr_data()[KEY_BOOTLOADER] == BOOTLOADER_MCUBOOT or zephyr_data()[
|
|
221
|
+
KEY_BOARD
|
|
222
|
+
] in ["xiao_ble"]:
|
|
223
|
+
fake_board_manifest = """
|
|
224
|
+
{
|
|
225
|
+
"frameworks": [
|
|
226
|
+
"zephyr"
|
|
227
|
+
],
|
|
228
|
+
"name": "esphome nrf52",
|
|
229
|
+
"upload": {
|
|
230
|
+
"maximum_ram_size": 248832,
|
|
231
|
+
"maximum_size": 815104
|
|
232
|
+
},
|
|
233
|
+
"url": "https://esphome.io/",
|
|
234
|
+
"vendor": "esphome"
|
|
235
|
+
}
|
|
236
|
+
"""
|
|
237
|
+
write_file_if_changed(
|
|
238
|
+
CORE.relative_build_path(f"boards/{zephyr_data()[KEY_BOARD]}.json"),
|
|
239
|
+
fake_board_manifest,
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
for filename, path in zephyr_data()[KEY_EXTRA_BUILD_FILES].items():
|
|
243
|
+
copy_file_if_changed(
|
|
244
|
+
path,
|
|
245
|
+
CORE.relative_build_path(filename),
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
pm_static = "\n".join(str(item) for item in zephyr_data()[KEY_PM_STATIC])
|
|
249
|
+
if pm_static:
|
|
250
|
+
write_file_if_changed(
|
|
251
|
+
CORE.relative_build_path("zephyr/pm_static.yml"), pm_static
|
|
252
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from typing import Final
|
|
2
|
+
|
|
3
|
+
import esphome.codegen as cg
|
|
4
|
+
|
|
5
|
+
BOOTLOADER_MCUBOOT = "mcuboot"
|
|
6
|
+
|
|
7
|
+
KEY_BOOTLOADER: Final = "bootloader"
|
|
8
|
+
KEY_EXTRA_BUILD_FILES: Final = "extra_build_files"
|
|
9
|
+
KEY_OVERLAY: Final = "overlay"
|
|
10
|
+
KEY_PM_STATIC: Final = "pm_static"
|
|
11
|
+
KEY_PRJ_CONF: Final = "prj_conf"
|
|
12
|
+
KEY_ZEPHYR = "zephyr"
|
|
13
|
+
KEY_BOARD: Final = "board"
|
|
14
|
+
KEY_USER: Final = "user"
|
|
15
|
+
|
|
16
|
+
zephyr_ns = cg.esphome_ns.namespace("zephyr")
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#ifdef USE_ZEPHYR
|
|
2
|
+
|
|
3
|
+
#include <zephyr/kernel.h>
|
|
4
|
+
#include <zephyr/drivers/watchdog.h>
|
|
5
|
+
#include <zephyr/sys/reboot.h>
|
|
6
|
+
#include <zephyr/random/rand32.h>
|
|
7
|
+
#include "esphome/core/hal.h"
|
|
8
|
+
#include "esphome/core/helpers.h"
|
|
9
|
+
|
|
10
|
+
namespace esphome {
|
|
11
|
+
|
|
12
|
+
static int wdt_channel_id = -1; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
|
13
|
+
static const device *const WDT = DEVICE_DT_GET(DT_ALIAS(watchdog0));
|
|
14
|
+
|
|
15
|
+
void yield() { ::k_yield(); }
|
|
16
|
+
uint32_t millis() { return k_ticks_to_ms_floor32(k_uptime_ticks()); }
|
|
17
|
+
uint32_t micros() { return k_ticks_to_us_floor32(k_uptime_ticks()); }
|
|
18
|
+
void delayMicroseconds(uint32_t us) { ::k_usleep(us); }
|
|
19
|
+
void delay(uint32_t ms) { ::k_msleep(ms); }
|
|
20
|
+
|
|
21
|
+
void arch_init() {
|
|
22
|
+
if (device_is_ready(WDT)) {
|
|
23
|
+
static wdt_timeout_cfg wdt_config{};
|
|
24
|
+
wdt_config.flags = WDT_FLAG_RESET_SOC;
|
|
25
|
+
wdt_config.window.max = 2000;
|
|
26
|
+
wdt_channel_id = wdt_install_timeout(WDT, &wdt_config);
|
|
27
|
+
if (wdt_channel_id >= 0) {
|
|
28
|
+
wdt_setup(WDT, WDT_OPT_PAUSE_HALTED_BY_DBG | WDT_OPT_PAUSE_IN_SLEEP);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void arch_feed_wdt() {
|
|
34
|
+
if (wdt_channel_id >= 0) {
|
|
35
|
+
wdt_feed(WDT, wdt_channel_id);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void arch_restart() { sys_reboot(SYS_REBOOT_COLD); }
|
|
40
|
+
uint32_t arch_get_cpu_cycle_count() { return k_cycle_get_32(); }
|
|
41
|
+
uint32_t arch_get_cpu_freq_hz() { return sys_clock_hw_cycles_per_sec(); }
|
|
42
|
+
uint8_t progmem_read_byte(const uint8_t *addr) { return *addr; }
|
|
43
|
+
|
|
44
|
+
Mutex::Mutex() {
|
|
45
|
+
auto *mutex = new k_mutex();
|
|
46
|
+
this->handle_ = mutex;
|
|
47
|
+
k_mutex_init(mutex);
|
|
48
|
+
}
|
|
49
|
+
Mutex::~Mutex() { delete static_cast<k_mutex *>(this->handle_); }
|
|
50
|
+
void Mutex::lock() { k_mutex_lock(static_cast<k_mutex *>(this->handle_), K_FOREVER); }
|
|
51
|
+
bool Mutex::try_lock() { return k_mutex_lock(static_cast<k_mutex *>(this->handle_), K_NO_WAIT) == 0; }
|
|
52
|
+
void Mutex::unlock() { k_mutex_unlock(static_cast<k_mutex *>(this->handle_)); }
|
|
53
|
+
|
|
54
|
+
IRAM_ATTR InterruptLock::InterruptLock() { state_ = irq_lock(); }
|
|
55
|
+
IRAM_ATTR InterruptLock::~InterruptLock() { irq_unlock(state_); }
|
|
56
|
+
|
|
57
|
+
// Zephyr doesn't support lwIP core locking, so this is a no-op
|
|
58
|
+
LwIPLock::LwIPLock() {}
|
|
59
|
+
LwIPLock::~LwIPLock() {}
|
|
60
|
+
|
|
61
|
+
uint32_t random_uint32() { return rand(); } // NOLINT(cert-msc30-c, cert-msc50-cpp)
|
|
62
|
+
bool random_bytes(uint8_t *data, size_t len) {
|
|
63
|
+
sys_rand_get(data, len);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void get_mac_address_raw(uint8_t *mac) { // NOLINT(readability-non-const-parameter)
|
|
68
|
+
mac[0] = ((NRF_FICR->DEVICEADDR[1] & 0xFFFF) >> 8) | 0xC0;
|
|
69
|
+
mac[1] = NRF_FICR->DEVICEADDR[1] & 0xFFFF;
|
|
70
|
+
mac[2] = NRF_FICR->DEVICEADDR[0] >> 24;
|
|
71
|
+
mac[3] = NRF_FICR->DEVICEADDR[0] >> 16;
|
|
72
|
+
mac[4] = NRF_FICR->DEVICEADDR[0] >> 8;
|
|
73
|
+
mac[5] = NRF_FICR->DEVICEADDR[0];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
} // namespace esphome
|
|
77
|
+
|
|
78
|
+
void setup();
|
|
79
|
+
void loop();
|
|
80
|
+
|
|
81
|
+
int main() {
|
|
82
|
+
setup();
|
|
83
|
+
while (true) {
|
|
84
|
+
loop();
|
|
85
|
+
esphome::yield();
|
|
86
|
+
}
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#endif
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#ifdef USE_ZEPHYR
|
|
2
|
+
#include "gpio.h"
|
|
3
|
+
#include <zephyr/drivers/gpio.h>
|
|
4
|
+
#include "esphome/core/log.h"
|
|
5
|
+
|
|
6
|
+
namespace esphome {
|
|
7
|
+
namespace zephyr {
|
|
8
|
+
|
|
9
|
+
static const char *const TAG = "zephyr";
|
|
10
|
+
|
|
11
|
+
static int flags_to_mode(gpio::Flags flags, bool inverted, bool value) {
|
|
12
|
+
int ret = 0;
|
|
13
|
+
if (flags & gpio::FLAG_INPUT) {
|
|
14
|
+
ret |= GPIO_INPUT;
|
|
15
|
+
}
|
|
16
|
+
if (flags & gpio::FLAG_OUTPUT) {
|
|
17
|
+
ret |= GPIO_OUTPUT;
|
|
18
|
+
if (value != inverted) {
|
|
19
|
+
ret |= GPIO_OUTPUT_INIT_HIGH;
|
|
20
|
+
} else {
|
|
21
|
+
ret |= GPIO_OUTPUT_INIT_LOW;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (flags & gpio::FLAG_PULLUP) {
|
|
25
|
+
ret |= GPIO_PULL_UP;
|
|
26
|
+
}
|
|
27
|
+
if (flags & gpio::FLAG_PULLDOWN) {
|
|
28
|
+
ret |= GPIO_PULL_DOWN;
|
|
29
|
+
}
|
|
30
|
+
if (flags & gpio::FLAG_OPEN_DRAIN) {
|
|
31
|
+
ret |= GPIO_OPEN_DRAIN;
|
|
32
|
+
}
|
|
33
|
+
return ret;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
struct ISRPinArg {
|
|
37
|
+
uint8_t pin;
|
|
38
|
+
bool inverted;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
ISRInternalGPIOPin ZephyrGPIOPin::to_isr() const {
|
|
42
|
+
auto *arg = new ISRPinArg{}; // NOLINT(cppcoreguidelines-owning-memory)
|
|
43
|
+
arg->pin = this->pin_;
|
|
44
|
+
arg->inverted = this->inverted_;
|
|
45
|
+
return ISRInternalGPIOPin((void *) arg);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void ZephyrGPIOPin::attach_interrupt(void (*func)(void *), void *arg, gpio::InterruptType type) const {
|
|
49
|
+
// TODO
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void ZephyrGPIOPin::setup() {
|
|
53
|
+
const struct device *gpio = nullptr;
|
|
54
|
+
if (this->pin_ < 32) {
|
|
55
|
+
#define GPIO0 DT_NODELABEL(gpio0)
|
|
56
|
+
#if DT_NODE_HAS_STATUS(GPIO0, okay)
|
|
57
|
+
gpio = DEVICE_DT_GET(GPIO0);
|
|
58
|
+
#else
|
|
59
|
+
#error "gpio0 is disabled"
|
|
60
|
+
#endif
|
|
61
|
+
} else {
|
|
62
|
+
#define GPIO1 DT_NODELABEL(gpio1)
|
|
63
|
+
#if DT_NODE_HAS_STATUS(GPIO1, okay)
|
|
64
|
+
gpio = DEVICE_DT_GET(GPIO1);
|
|
65
|
+
#else
|
|
66
|
+
#error "gpio1 is disabled"
|
|
67
|
+
#endif
|
|
68
|
+
}
|
|
69
|
+
if (device_is_ready(gpio)) {
|
|
70
|
+
this->gpio_ = gpio;
|
|
71
|
+
} else {
|
|
72
|
+
ESP_LOGE(TAG, "gpio %u is not ready.", this->pin_);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this->pin_mode(this->flags_);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void ZephyrGPIOPin::pin_mode(gpio::Flags flags) {
|
|
79
|
+
if (nullptr == this->gpio_) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
gpio_pin_configure(this->gpio_, this->pin_ % 32, flags_to_mode(flags, this->inverted_, this->value_));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
std::string ZephyrGPIOPin::dump_summary() const {
|
|
86
|
+
char buffer[32];
|
|
87
|
+
snprintf(buffer, sizeof(buffer), "GPIO%u, P%u.%u", this->pin_, this->pin_ / 32, this->pin_ % 32);
|
|
88
|
+
return buffer;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
bool ZephyrGPIOPin::digital_read() {
|
|
92
|
+
if (nullptr == this->gpio_) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return bool(gpio_pin_get(this->gpio_, this->pin_ % 32) != this->inverted_);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
void ZephyrGPIOPin::digital_write(bool value) {
|
|
99
|
+
// make sure that value is not ignored since it can be inverted e.g. on switch side
|
|
100
|
+
// that way init state should be correct
|
|
101
|
+
this->value_ = value;
|
|
102
|
+
if (nullptr == this->gpio_) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
gpio_pin_set(this->gpio_, this->pin_ % 32, value != this->inverted_ ? 1 : 0);
|
|
106
|
+
}
|
|
107
|
+
void ZephyrGPIOPin::detach_interrupt() const {
|
|
108
|
+
// TODO
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
} // namespace zephyr
|
|
112
|
+
|
|
113
|
+
bool IRAM_ATTR ISRInternalGPIOPin::digital_read() {
|
|
114
|
+
// TODO
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
} // namespace esphome
|
|
119
|
+
|
|
120
|
+
#endif
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#ifdef USE_ZEPHYR
|
|
4
|
+
#include "esphome/core/hal.h"
|
|
5
|
+
struct device;
|
|
6
|
+
namespace esphome {
|
|
7
|
+
namespace zephyr {
|
|
8
|
+
|
|
9
|
+
class ZephyrGPIOPin : public InternalGPIOPin {
|
|
10
|
+
public:
|
|
11
|
+
void set_pin(uint8_t pin) { this->pin_ = pin; }
|
|
12
|
+
void set_inverted(bool inverted) { this->inverted_ = inverted; }
|
|
13
|
+
void set_flags(gpio::Flags flags) { this->flags_ = flags; }
|
|
14
|
+
|
|
15
|
+
void setup() override;
|
|
16
|
+
void pin_mode(gpio::Flags flags) override;
|
|
17
|
+
bool digital_read() override;
|
|
18
|
+
void digital_write(bool value) override;
|
|
19
|
+
std::string dump_summary() const override;
|
|
20
|
+
void detach_interrupt() const override;
|
|
21
|
+
ISRInternalGPIOPin to_isr() const override;
|
|
22
|
+
uint8_t get_pin() const override { return this->pin_; }
|
|
23
|
+
bool is_inverted() const override { return this->inverted_; }
|
|
24
|
+
gpio::Flags get_flags() const override { return flags_; }
|
|
25
|
+
|
|
26
|
+
protected:
|
|
27
|
+
void attach_interrupt(void (*func)(void *), void *arg, gpio::InterruptType type) const override;
|
|
28
|
+
uint8_t pin_;
|
|
29
|
+
bool inverted_;
|
|
30
|
+
gpio::Flags flags_;
|
|
31
|
+
const device *gpio_ = nullptr;
|
|
32
|
+
bool value_ = false;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace zephyr
|
|
36
|
+
} // namespace esphome
|
|
37
|
+
|
|
38
|
+
#endif // USE_ZEPHYR
|