esphome 2025.7.4__py3-none-any.whl → 2025.8.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 +190 -83
- 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 +475 -116
- esphome/components/atm90e32/atm90e32.h +43 -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 +392 -81
- 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 +203 -60
- 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 +41 -2
- esphome/components/esp32_ble/ble.cpp +14 -10
- 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 +139 -73
- 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 +2 -2
- 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/pipsolar.cpp +54 -42
- esphome/components/pipsolar/pipsolar.h +5 -4
- 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 +6 -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/senseair/senseair.cpp +7 -3
- esphome/components/senseair/senseair.h +11 -0
- 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 +188 -353
- 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 +17 -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 +12 -16
- esphome/const.py +26 -1
- esphome/core/__init__.py +92 -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 +45 -10
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +311 -77
- esphome/core/scheduler.h +141 -28
- 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 +16 -108
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/RECORD +757 -677
- 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.0.dist-info}/WHEEL +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
|
@@ -3,16 +3,14 @@
|
|
|
3
3
|
#ifdef USE_ESP32
|
|
4
4
|
|
|
5
5
|
#include <cstddef> // for offsetof
|
|
6
|
-
#include <
|
|
7
|
-
|
|
6
|
+
#include <cstring> // for memcpy
|
|
8
7
|
#include <esp_gap_ble_api.h>
|
|
9
8
|
#include <esp_gattc_api.h>
|
|
10
9
|
#include <esp_gatts_api.h>
|
|
11
10
|
|
|
12
11
|
#include "ble_scan_result.h"
|
|
13
12
|
|
|
14
|
-
namespace esphome {
|
|
15
|
-
namespace esp32_ble {
|
|
13
|
+
namespace esphome::esp32_ble {
|
|
16
14
|
|
|
17
15
|
// Compile-time verification that ESP-IDF scan complete events only contain a status field
|
|
18
16
|
// This ensures our reinterpret_cast in ble.cpp is safe
|
|
@@ -63,10 +61,24 @@ static_assert(offsetof(esp_ble_gap_cb_param_t, read_rssi_cmpl.rssi) == sizeof(es
|
|
|
63
61
|
static_assert(offsetof(esp_ble_gap_cb_param_t, read_rssi_cmpl.remote_addr) == sizeof(esp_bt_status_t) + sizeof(int8_t),
|
|
64
62
|
"remote_addr must follow rssi in read_rssi_cmpl");
|
|
65
63
|
|
|
64
|
+
// Param struct sizes on ESP32
|
|
65
|
+
static constexpr size_t GATTC_PARAM_SIZE = 28;
|
|
66
|
+
static constexpr size_t GATTS_PARAM_SIZE = 32;
|
|
67
|
+
|
|
68
|
+
// Maximum size for inline storage of data
|
|
69
|
+
// GATTC: 80 - 28 (param) - 8 (other fields) = 44 bytes for data
|
|
70
|
+
// GATTS: 80 - 32 (param) - 8 (other fields) = 40 bytes for data
|
|
71
|
+
static constexpr size_t GATTC_INLINE_DATA_SIZE = 44;
|
|
72
|
+
static constexpr size_t GATTS_INLINE_DATA_SIZE = 40;
|
|
73
|
+
|
|
74
|
+
// Verify param struct sizes
|
|
75
|
+
static_assert(sizeof(esp_ble_gattc_cb_param_t) == GATTC_PARAM_SIZE, "GATTC param size unexpected");
|
|
76
|
+
static_assert(sizeof(esp_ble_gatts_cb_param_t) == GATTS_PARAM_SIZE, "GATTS param size unexpected");
|
|
77
|
+
|
|
66
78
|
// Received GAP, GATTC and GATTS events are only queued, and get processed in the main loop().
|
|
67
79
|
// This class stores each event with minimal memory usage.
|
|
68
|
-
// GAP events (99% of traffic) don't have the
|
|
69
|
-
// GATTC/GATTS events use heap allocation for their param and data.
|
|
80
|
+
// GAP events (99% of traffic) don't have the heap allocation overhead.
|
|
81
|
+
// GATTC/GATTS events use heap allocation for their param and inline storage for small data.
|
|
70
82
|
//
|
|
71
83
|
// Event flow:
|
|
72
84
|
// 1. ESP-IDF BLE stack calls our static handlers in the BLE task context
|
|
@@ -113,21 +125,21 @@ class BLEEvent {
|
|
|
113
125
|
this->init_gap_data_(e, p);
|
|
114
126
|
}
|
|
115
127
|
|
|
116
|
-
// Constructor for GATTC events -
|
|
117
|
-
// IMPORTANT:
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
128
|
+
// Constructor for GATTC events - param stored inline, data may use heap
|
|
129
|
+
// IMPORTANT: We MUST copy the param struct because the pointer from ESP-IDF
|
|
130
|
+
// is only valid during the callback execution. Since BLE events are processed
|
|
131
|
+
// asynchronously in the main loop, we store our own copy inline to ensure
|
|
132
|
+
// the data remains valid until the event is processed.
|
|
121
133
|
BLEEvent(esp_gattc_cb_event_t e, esp_gatt_if_t i, esp_ble_gattc_cb_param_t *p) {
|
|
122
134
|
this->type_ = GATTC;
|
|
123
135
|
this->init_gattc_data_(e, i, p);
|
|
124
136
|
}
|
|
125
137
|
|
|
126
|
-
// Constructor for GATTS events -
|
|
127
|
-
// IMPORTANT:
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
138
|
+
// Constructor for GATTS events - param stored inline, data may use heap
|
|
139
|
+
// IMPORTANT: We MUST copy the param struct because the pointer from ESP-IDF
|
|
140
|
+
// is only valid during the callback execution. Since BLE events are processed
|
|
141
|
+
// asynchronously in the main loop, we store our own copy inline to ensure
|
|
142
|
+
// the data remains valid until the event is processed.
|
|
131
143
|
BLEEvent(esp_gatts_cb_event_t e, esp_gatt_if_t i, esp_ble_gatts_cb_param_t *p) {
|
|
132
144
|
this->type_ = GATTS;
|
|
133
145
|
this->init_gatts_data_(e, i, p);
|
|
@@ -137,25 +149,32 @@ class BLEEvent {
|
|
|
137
149
|
~BLEEvent() { this->release(); }
|
|
138
150
|
|
|
139
151
|
// Default constructor for pre-allocation in pool
|
|
140
|
-
BLEEvent() : type_(GAP) {}
|
|
152
|
+
BLEEvent() : event_{}, type_(GAP) {}
|
|
141
153
|
|
|
142
154
|
// Invoked on return to EventPool - clean up any heap-allocated data
|
|
143
155
|
void release() {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
switch (this->type_) {
|
|
157
|
+
case GAP:
|
|
158
|
+
// GAP events don't have heap allocations
|
|
159
|
+
break;
|
|
160
|
+
case GATTC:
|
|
161
|
+
// Param is now stored inline, only delete heap data if it was heap-allocated
|
|
162
|
+
if (!this->event_.gattc.is_inline && this->event_.gattc.data.heap_data != nullptr) {
|
|
163
|
+
delete[] this->event_.gattc.data.heap_data;
|
|
164
|
+
}
|
|
165
|
+
// Clear critical fields to prevent issues if type changes
|
|
166
|
+
this->event_.gattc.is_inline = false;
|
|
167
|
+
this->event_.gattc.data.heap_data = nullptr;
|
|
168
|
+
break;
|
|
169
|
+
case GATTS:
|
|
170
|
+
// Param is now stored inline, only delete heap data if it was heap-allocated
|
|
171
|
+
if (!this->event_.gatts.is_inline && this->event_.gatts.data.heap_data != nullptr) {
|
|
172
|
+
delete[] this->event_.gatts.data.heap_data;
|
|
173
|
+
}
|
|
174
|
+
// Clear critical fields to prevent issues if type changes
|
|
175
|
+
this->event_.gatts.is_inline = false;
|
|
176
|
+
this->event_.gatts.data.heap_data = nullptr;
|
|
177
|
+
break;
|
|
159
178
|
}
|
|
160
179
|
}
|
|
161
180
|
|
|
@@ -207,20 +226,30 @@ class BLEEvent {
|
|
|
207
226
|
|
|
208
227
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
209
228
|
struct gattc_event {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
229
|
+
esp_ble_gattc_cb_param_t gattc_param; // Stored inline (28 bytes)
|
|
230
|
+
esp_gattc_cb_event_t gattc_event; // 4 bytes
|
|
231
|
+
union {
|
|
232
|
+
uint8_t *heap_data; // 4 bytes when heap-allocated
|
|
233
|
+
uint8_t inline_data[GATTC_INLINE_DATA_SIZE]; // 44 bytes when stored inline
|
|
234
|
+
} data; // 44 bytes total
|
|
235
|
+
uint16_t data_len; // 2 bytes
|
|
236
|
+
esp_gatt_if_t gattc_if; // 1 byte
|
|
237
|
+
bool is_inline; // 1 byte - true when data is stored inline
|
|
238
|
+
} gattc; // Total: 80 bytes
|
|
215
239
|
|
|
216
240
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
217
241
|
struct gatts_event {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
242
|
+
esp_ble_gatts_cb_param_t gatts_param; // Stored inline (32 bytes)
|
|
243
|
+
esp_gatts_cb_event_t gatts_event; // 4 bytes
|
|
244
|
+
union {
|
|
245
|
+
uint8_t *heap_data; // 4 bytes when heap-allocated
|
|
246
|
+
uint8_t inline_data[GATTS_INLINE_DATA_SIZE]; // 40 bytes when stored inline
|
|
247
|
+
} data; // 40 bytes total
|
|
248
|
+
uint16_t data_len; // 2 bytes
|
|
249
|
+
esp_gatt_if_t gatts_if; // 1 byte
|
|
250
|
+
bool is_inline; // 1 byte - true when data is stored inline
|
|
251
|
+
} gatts; // Total: 80 bytes
|
|
252
|
+
} event_; // 80 bytes
|
|
224
253
|
|
|
225
254
|
ble_event_t type_;
|
|
226
255
|
|
|
@@ -234,6 +263,29 @@ class BLEEvent {
|
|
|
234
263
|
const esp_ble_sec_t &security() const { return event_.gap.security; }
|
|
235
264
|
|
|
236
265
|
private:
|
|
266
|
+
// Helper to copy data with inline storage optimization
|
|
267
|
+
template<typename EventStruct, size_t InlineSize>
|
|
268
|
+
void copy_data_with_inline_storage_(EventStruct &event, const uint8_t *src_data, uint16_t len,
|
|
269
|
+
uint8_t **param_value_ptr) {
|
|
270
|
+
event.data_len = len;
|
|
271
|
+
if (len > 0) {
|
|
272
|
+
if (len <= InlineSize) {
|
|
273
|
+
event.is_inline = true;
|
|
274
|
+
memcpy(event.data.inline_data, src_data, len);
|
|
275
|
+
*param_value_ptr = event.data.inline_data;
|
|
276
|
+
} else {
|
|
277
|
+
event.is_inline = false;
|
|
278
|
+
event.data.heap_data = new uint8_t[len];
|
|
279
|
+
memcpy(event.data.heap_data, src_data, len);
|
|
280
|
+
*param_value_ptr = event.data.heap_data;
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
event.is_inline = false;
|
|
284
|
+
event.data.heap_data = nullptr;
|
|
285
|
+
*param_value_ptr = nullptr;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
237
289
|
// Initialize GAP event data
|
|
238
290
|
void init_gap_data_(esp_gap_ble_cb_event_t e, esp_ble_gap_cb_param_t *p) {
|
|
239
291
|
this->event_.gap.gap_event = e;
|
|
@@ -318,35 +370,38 @@ class BLEEvent {
|
|
|
318
370
|
this->event_.gattc.gattc_if = i;
|
|
319
371
|
|
|
320
372
|
if (p == nullptr) {
|
|
321
|
-
|
|
322
|
-
this->event_.gattc.
|
|
373
|
+
// Zero out the param struct when null
|
|
374
|
+
memset(&this->event_.gattc.gattc_param, 0, sizeof(this->event_.gattc.gattc_param));
|
|
375
|
+
this->event_.gattc.is_inline = false;
|
|
376
|
+
this->event_.gattc.data.heap_data = nullptr;
|
|
377
|
+
this->event_.gattc.data_len = 0;
|
|
323
378
|
return; // Invalid event, but we can't log in header file
|
|
324
379
|
}
|
|
325
380
|
|
|
326
|
-
//
|
|
327
|
-
//
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
// - Without this copy, we'd have use-after-free bugs as ESP-IDF reuses the callback memory
|
|
333
|
-
this->event_.gattc.gattc_param = new esp_ble_gattc_cb_param_t(*p);
|
|
381
|
+
// Copy param struct inline (no heap allocation!)
|
|
382
|
+
// GATTC/GATTS events are rare (<1% of events) but we can still store them inline
|
|
383
|
+
// along with small data payloads, eliminating all heap allocations for typical BLE operations
|
|
384
|
+
// CRITICAL: This copy is REQUIRED for memory safety - the ESP-IDF param pointer
|
|
385
|
+
// is only valid during the callback and will be reused/freed after we return
|
|
386
|
+
this->event_.gattc.gattc_param = *p;
|
|
334
387
|
|
|
335
388
|
// Copy data for events that need it
|
|
336
389
|
// The param struct contains pointers (e.g., notify.value) that point to temporary buffers.
|
|
337
390
|
// We must copy this data to ensure it remains valid when the event is processed later.
|
|
338
391
|
switch (e) {
|
|
339
392
|
case ESP_GATTC_NOTIFY_EVT:
|
|
340
|
-
this->event_.gattc
|
|
341
|
-
|
|
393
|
+
copy_data_with_inline_storage_<decltype(this->event_.gattc), GATTC_INLINE_DATA_SIZE>(
|
|
394
|
+
this->event_.gattc, p->notify.value, p->notify.value_len, &this->event_.gattc.gattc_param.notify.value);
|
|
342
395
|
break;
|
|
343
396
|
case ESP_GATTC_READ_CHAR_EVT:
|
|
344
397
|
case ESP_GATTC_READ_DESCR_EVT:
|
|
345
|
-
this->event_.gattc
|
|
346
|
-
|
|
398
|
+
copy_data_with_inline_storage_<decltype(this->event_.gattc), GATTC_INLINE_DATA_SIZE>(
|
|
399
|
+
this->event_.gattc, p->read.value, p->read.value_len, &this->event_.gattc.gattc_param.read.value);
|
|
347
400
|
break;
|
|
348
401
|
default:
|
|
349
|
-
this->event_.gattc.
|
|
402
|
+
this->event_.gattc.is_inline = false;
|
|
403
|
+
this->event_.gattc.data.heap_data = nullptr;
|
|
404
|
+
this->event_.gattc.data_len = 0;
|
|
350
405
|
break;
|
|
351
406
|
}
|
|
352
407
|
}
|
|
@@ -357,30 +412,33 @@ class BLEEvent {
|
|
|
357
412
|
this->event_.gatts.gatts_if = i;
|
|
358
413
|
|
|
359
414
|
if (p == nullptr) {
|
|
360
|
-
|
|
361
|
-
this->event_.gatts.
|
|
415
|
+
// Zero out the param struct when null
|
|
416
|
+
memset(&this->event_.gatts.gatts_param, 0, sizeof(this->event_.gatts.gatts_param));
|
|
417
|
+
this->event_.gatts.is_inline = false;
|
|
418
|
+
this->event_.gatts.data.heap_data = nullptr;
|
|
419
|
+
this->event_.gatts.data_len = 0;
|
|
362
420
|
return; // Invalid event, but we can't log in header file
|
|
363
421
|
}
|
|
364
422
|
|
|
365
|
-
//
|
|
366
|
-
//
|
|
367
|
-
//
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
|
|
371
|
-
// - Without this copy, we'd have use-after-free bugs as ESP-IDF reuses the callback memory
|
|
372
|
-
this->event_.gatts.gatts_param = new esp_ble_gatts_cb_param_t(*p);
|
|
423
|
+
// Copy param struct inline (no heap allocation!)
|
|
424
|
+
// GATTC/GATTS events are rare (<1% of events) but we can still store them inline
|
|
425
|
+
// along with small data payloads, eliminating all heap allocations for typical BLE operations
|
|
426
|
+
// CRITICAL: This copy is REQUIRED for memory safety - the ESP-IDF param pointer
|
|
427
|
+
// is only valid during the callback and will be reused/freed after we return
|
|
428
|
+
this->event_.gatts.gatts_param = *p;
|
|
373
429
|
|
|
374
430
|
// Copy data for events that need it
|
|
375
431
|
// The param struct contains pointers (e.g., write.value) that point to temporary buffers.
|
|
376
432
|
// We must copy this data to ensure it remains valid when the event is processed later.
|
|
377
433
|
switch (e) {
|
|
378
434
|
case ESP_GATTS_WRITE_EVT:
|
|
379
|
-
this->event_.gatts
|
|
380
|
-
|
|
435
|
+
copy_data_with_inline_storage_<decltype(this->event_.gatts), GATTS_INLINE_DATA_SIZE>(
|
|
436
|
+
this->event_.gatts, p->write.value, p->write.len, &this->event_.gatts.gatts_param.write.value);
|
|
381
437
|
break;
|
|
382
438
|
default:
|
|
383
|
-
this->event_.gatts.
|
|
439
|
+
this->event_.gatts.is_inline = false;
|
|
440
|
+
this->event_.gatts.data.heap_data = nullptr;
|
|
441
|
+
this->event_.gatts.data_len = 0;
|
|
384
442
|
break;
|
|
385
443
|
}
|
|
386
444
|
}
|
|
@@ -390,12 +448,20 @@ class BLEEvent {
|
|
|
390
448
|
// The gap member in the union should be 80 bytes (including the gap_event enum)
|
|
391
449
|
static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)) <= 80, "gap_event struct has grown beyond 80 bytes");
|
|
392
450
|
|
|
451
|
+
// Verify GATTC and GATTS structs don't exceed GAP struct size
|
|
452
|
+
// This ensures the union size is determined by GAP (the most common event type)
|
|
453
|
+
static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gattc)) <=
|
|
454
|
+
sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)),
|
|
455
|
+
"gattc_event struct exceeds gap_event size - union size would increase");
|
|
456
|
+
static_assert(sizeof(decltype(((BLEEvent *) nullptr)->event_.gatts)) <=
|
|
457
|
+
sizeof(decltype(((BLEEvent *) nullptr)->event_.gap)),
|
|
458
|
+
"gatts_event struct exceeds gap_event size - union size would increase");
|
|
459
|
+
|
|
393
460
|
// Verify esp_ble_sec_t fits within our union
|
|
394
461
|
static_assert(sizeof(esp_ble_sec_t) <= 73, "esp_ble_sec_t is larger than BLEScanResult");
|
|
395
462
|
|
|
396
463
|
// BLEEvent total size: 84 bytes (80 byte union + 1 byte type + 3 bytes padding)
|
|
397
464
|
|
|
398
|
-
} // namespace esp32_ble
|
|
399
|
-
} // namespace esphome
|
|
465
|
+
} // namespace esphome::esp32_ble
|
|
400
466
|
|
|
401
467
|
#endif
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
#include <esp_gap_ble_api.h>
|
|
6
6
|
|
|
7
|
-
namespace esphome {
|
|
8
|
-
namespace esp32_ble {
|
|
7
|
+
namespace esphome::esp32_ble {
|
|
9
8
|
|
|
10
9
|
// Structure for BLE scan results - only fields we actually use
|
|
11
10
|
struct __attribute__((packed)) BLEScanResult {
|
|
@@ -18,7 +17,6 @@ struct __attribute__((packed)) BLEScanResult {
|
|
|
18
17
|
uint8_t search_evt;
|
|
19
18
|
}; // ~73 bytes vs ~400 bytes for full esp_ble_gap_cb_param_t
|
|
20
19
|
|
|
21
|
-
} // namespace esp32_ble
|
|
22
|
-
} // namespace esphome
|
|
20
|
+
} // namespace esphome::esp32_ble
|
|
23
21
|
|
|
24
22
|
#endif
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#include "ble_uuid.h"
|
|
2
2
|
|
|
3
3
|
#ifdef USE_ESP32
|
|
4
|
+
#ifdef USE_ESP32_BLE_UUID
|
|
4
5
|
|
|
5
6
|
#include <cstring>
|
|
6
7
|
#include <cstdio>
|
|
7
8
|
#include <cinttypes>
|
|
8
9
|
#include "esphome/core/log.h"
|
|
9
10
|
|
|
10
|
-
namespace esphome {
|
|
11
|
-
namespace esp32_ble {
|
|
11
|
+
namespace esphome::esp32_ble {
|
|
12
12
|
|
|
13
13
|
static const char *const TAG = "esp32_ble";
|
|
14
14
|
|
|
@@ -189,7 +189,7 @@ std::string ESPBTUUID::to_string() const {
|
|
|
189
189
|
return "";
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
} // namespace esp32_ble
|
|
193
|
-
} // namespace esphome
|
|
192
|
+
} // namespace esphome::esp32_ble
|
|
194
193
|
|
|
195
|
-
#endif
|
|
194
|
+
#endif // USE_ESP32_BLE_UUID
|
|
195
|
+
#endif // USE_ESP32
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "esphome/core/defines.h"
|
|
3
4
|
#include "esphome/core/hal.h"
|
|
4
5
|
#include "esphome/core/helpers.h"
|
|
5
6
|
|
|
6
7
|
#ifdef USE_ESP32
|
|
8
|
+
#ifdef USE_ESP32_BLE_UUID
|
|
7
9
|
|
|
8
10
|
#include <string>
|
|
9
11
|
#include <esp_bt_defs.h>
|
|
10
12
|
|
|
11
|
-
namespace esphome {
|
|
12
|
-
namespace esp32_ble {
|
|
13
|
+
namespace esphome::esp32_ble {
|
|
13
14
|
|
|
14
15
|
class ESPBTUUID {
|
|
15
16
|
public:
|
|
@@ -41,7 +42,7 @@ class ESPBTUUID {
|
|
|
41
42
|
esp_bt_uuid_t uuid_;
|
|
42
43
|
};
|
|
43
44
|
|
|
44
|
-
} // namespace esp32_ble
|
|
45
|
-
} // namespace esphome
|
|
45
|
+
} // namespace esphome::esp32_ble
|
|
46
46
|
|
|
47
|
-
#endif
|
|
47
|
+
#endif // USE_ESP32_BLE_UUID
|
|
48
|
+
#endif // USE_ESP32
|
|
@@ -65,6 +65,8 @@ FINAL_VALIDATE_SCHEMA = esp32_ble.validate_variant
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
async def to_code(config):
|
|
68
|
+
cg.add_define("USE_ESP32_BLE_UUID")
|
|
69
|
+
|
|
68
70
|
uuid = config[CONF_UUID].hex
|
|
69
71
|
uuid_arr = [
|
|
70
72
|
cg.RawExpression(f"0x{uuid[i : i + 2]}") for i in range(0, len(uuid), 2)
|
|
@@ -82,6 +84,8 @@ async def to_code(config):
|
|
|
82
84
|
cg.add(var.set_measured_power(config[CONF_MEASURED_POWER]))
|
|
83
85
|
cg.add(var.set_tx_power(config[CONF_TX_POWER]))
|
|
84
86
|
|
|
87
|
+
cg.add_define("USE_ESP32_BLE_ADVERTISING")
|
|
88
|
+
|
|
85
89
|
if CORE.using_esp_idf:
|
|
86
90
|
add_idf_sdkconfig_option("CONFIG_BT_ENABLED", True)
|
|
87
91
|
add_idf_sdkconfig_option("CONFIG_BT_BLE_42_FEATURES_SUPPORTED", True)
|
|
@@ -2,7 +2,7 @@ import esphome.codegen as cg
|
|
|
2
2
|
from esphome.components import esp32_ble_tracker
|
|
3
3
|
|
|
4
4
|
AUTO_LOAD = ["esp32_ble_tracker"]
|
|
5
|
-
CODEOWNERS = ["@jesserockz"]
|
|
5
|
+
CODEOWNERS = ["@jesserockz", "@bdraco"]
|
|
6
6
|
DEPENDENCIES = ["esp32"]
|
|
7
7
|
|
|
8
8
|
esp32_ble_client_ns = cg.esphome_ns.namespace("esp32_ble_client")
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
#include "esphome/core/log.h"
|
|
6
6
|
|
|
7
7
|
#ifdef USE_ESP32
|
|
8
|
+
#ifdef USE_ESP32_BLE_DEVICE
|
|
8
9
|
|
|
9
|
-
namespace esphome {
|
|
10
|
-
namespace esp32_ble_client {
|
|
10
|
+
namespace esphome::esp32_ble_client {
|
|
11
11
|
|
|
12
12
|
static const char *const TAG = "esp32_ble_client";
|
|
13
13
|
|
|
@@ -93,7 +93,7 @@ esp_err_t BLECharacteristic::write_value(uint8_t *new_val, int16_t new_val_size)
|
|
|
93
93
|
return write_value(new_val, new_val_size, ESP_GATT_WRITE_TYPE_NO_RSP);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
} // namespace esp32_ble_client
|
|
97
|
-
} // namespace esphome
|
|
96
|
+
} // namespace esphome::esp32_ble_client
|
|
98
97
|
|
|
98
|
+
#endif // USE_ESP32_BLE_DEVICE
|
|
99
99
|
#endif // USE_ESP32
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "esphome/core/defines.h"
|
|
4
|
+
|
|
3
5
|
#ifdef USE_ESP32
|
|
6
|
+
#ifdef USE_ESP32_BLE_DEVICE
|
|
4
7
|
|
|
5
8
|
#include "esphome/components/esp32_ble_tracker/esp32_ble_tracker.h"
|
|
6
9
|
|
|
@@ -8,8 +11,7 @@
|
|
|
8
11
|
|
|
9
12
|
#include <vector>
|
|
10
13
|
|
|
11
|
-
namespace esphome {
|
|
12
|
-
namespace esp32_ble_client {
|
|
14
|
+
namespace esphome::esp32_ble_client {
|
|
13
15
|
|
|
14
16
|
namespace espbt = esphome::esp32_ble_tracker;
|
|
15
17
|
|
|
@@ -33,7 +35,7 @@ class BLECharacteristic {
|
|
|
33
35
|
BLEService *service;
|
|
34
36
|
};
|
|
35
37
|
|
|
36
|
-
} // namespace esp32_ble_client
|
|
37
|
-
} // namespace esphome
|
|
38
|
+
} // namespace esphome::esp32_ble_client
|
|
38
39
|
|
|
40
|
+
#endif // USE_ESP32_BLE_DEVICE
|
|
39
41
|
#endif // USE_ESP32
|