esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__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 +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +8 -2
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +17 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +76 -19
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +0 -4
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +305 -427
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +162 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +163 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/wizard.py +17 -4
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
esphome/core/helpers.h
CHANGED
|
@@ -32,94 +32,27 @@
|
|
|
32
32
|
#include <semphr.h>
|
|
33
33
|
#endif
|
|
34
34
|
|
|
35
|
+
#ifdef USE_HOST
|
|
36
|
+
#include <mutex>
|
|
37
|
+
#endif
|
|
38
|
+
|
|
35
39
|
#define HOT __attribute__((hot))
|
|
36
40
|
#define ESPDEPRECATED(msg, when) __attribute__((deprecated(msg)))
|
|
37
41
|
#define ESPHOME_ALWAYS_INLINE __attribute__((always_inline))
|
|
38
42
|
#define PACKED __attribute__((packed))
|
|
39
43
|
|
|
40
|
-
// Various functions can be constexpr in C++14, but not in C++11 (because their body isn't just a return statement).
|
|
41
|
-
// Define a substitute constexpr keyword for those functions, until we can drop C++11 support.
|
|
42
|
-
#if __cplusplus >= 201402L
|
|
43
|
-
#define constexpr14 constexpr
|
|
44
|
-
#else
|
|
45
|
-
#define constexpr14 inline // constexpr implies inline
|
|
46
|
-
#endif
|
|
47
|
-
|
|
48
44
|
namespace esphome {
|
|
49
45
|
|
|
50
46
|
/// @name STL backports
|
|
51
47
|
///@{
|
|
52
48
|
|
|
53
|
-
//
|
|
54
|
-
// ambiguity and to provide a uniform API.
|
|
55
|
-
|
|
56
|
-
// std::to_string() from C++11, available from libstdc++/g++ 8
|
|
57
|
-
// See https://github.com/espressif/esp-idf/issues/1445
|
|
58
|
-
#if _GLIBCXX_RELEASE >= 8
|
|
49
|
+
// Keep "using" even after the removal of our backports, to avoid breaking existing code.
|
|
59
50
|
using std::to_string;
|
|
60
|
-
#else
|
|
61
|
-
std::string to_string(int value); // NOLINT
|
|
62
|
-
std::string to_string(long value); // NOLINT
|
|
63
|
-
std::string to_string(long long value); // NOLINT
|
|
64
|
-
std::string to_string(unsigned value); // NOLINT
|
|
65
|
-
std::string to_string(unsigned long value); // NOLINT
|
|
66
|
-
std::string to_string(unsigned long long value); // NOLINT
|
|
67
|
-
std::string to_string(float value);
|
|
68
|
-
std::string to_string(double value);
|
|
69
|
-
std::string to_string(long double value);
|
|
70
|
-
#endif
|
|
71
|
-
|
|
72
|
-
// std::is_trivially_copyable from C++11, implemented in libstdc++/g++ 5.1 (but minor releases can't be detected)
|
|
73
|
-
#if _GLIBCXX_RELEASE >= 6
|
|
74
51
|
using std::is_trivially_copyable;
|
|
75
|
-
#else
|
|
76
|
-
// Implementing this is impossible without compiler intrinsics, so don't bother. Invalid usage will be detected on
|
|
77
|
-
// other variants that use a newer compiler anyway.
|
|
78
|
-
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
79
|
-
template<typename T> struct is_trivially_copyable : public std::integral_constant<bool, true> {};
|
|
80
|
-
#endif
|
|
81
|
-
|
|
82
|
-
// std::make_unique() from C++14
|
|
83
|
-
#if __cpp_lib_make_unique >= 201304
|
|
84
52
|
using std::make_unique;
|
|
85
|
-
#else
|
|
86
|
-
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args &&...args) {
|
|
87
|
-
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
|
88
|
-
}
|
|
89
|
-
#endif
|
|
90
|
-
|
|
91
|
-
// std::enable_if_t from C++14
|
|
92
|
-
#if __cplusplus >= 201402L
|
|
93
53
|
using std::enable_if_t;
|
|
94
|
-
#else
|
|
95
|
-
template<bool B, class T = void> using enable_if_t = typename std::enable_if<B, T>::type;
|
|
96
|
-
#endif
|
|
97
|
-
|
|
98
|
-
// std::clamp from C++17
|
|
99
|
-
#if __cpp_lib_clamp >= 201603
|
|
100
54
|
using std::clamp;
|
|
101
|
-
#else
|
|
102
|
-
template<typename T, typename Compare> constexpr const T &clamp(const T &v, const T &lo, const T &hi, Compare comp) {
|
|
103
|
-
return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
|
|
104
|
-
}
|
|
105
|
-
template<typename T> constexpr const T &clamp(const T &v, const T &lo, const T &hi) {
|
|
106
|
-
return clamp(v, lo, hi, std::less<T>{});
|
|
107
|
-
}
|
|
108
|
-
#endif
|
|
109
|
-
|
|
110
|
-
// std::is_invocable from C++17
|
|
111
|
-
#if __cpp_lib_is_invocable >= 201703
|
|
112
55
|
using std::is_invocable;
|
|
113
|
-
#else
|
|
114
|
-
// https://stackoverflow.com/a/37161919/8924614
|
|
115
|
-
template<class T, class... Args> struct is_invocable { // NOLINT(readability-identifier-naming)
|
|
116
|
-
template<class U> static auto test(U *p) -> decltype((*p)(std::declval<Args>()...), void(), std::true_type());
|
|
117
|
-
template<class U> static auto test(...) -> decltype(std::false_type());
|
|
118
|
-
static constexpr auto value = decltype(test<T>(nullptr))::value; // NOLINT
|
|
119
|
-
};
|
|
120
|
-
#endif
|
|
121
|
-
|
|
122
|
-
// std::bit_cast from C++20
|
|
123
56
|
#if __cpp_lib_bit_cast >= 201806
|
|
124
57
|
using std::bit_cast;
|
|
125
58
|
#else
|
|
@@ -134,31 +67,29 @@ To bit_cast(const From &src) {
|
|
|
134
67
|
return dst;
|
|
135
68
|
}
|
|
136
69
|
#endif
|
|
70
|
+
using std::lerp;
|
|
137
71
|
|
|
138
72
|
// std::byteswap from C++23
|
|
139
|
-
template<typename T>
|
|
73
|
+
template<typename T> constexpr T byteswap(T n) {
|
|
140
74
|
T m;
|
|
141
75
|
for (size_t i = 0; i < sizeof(T); i++)
|
|
142
76
|
reinterpret_cast<uint8_t *>(&m)[i] = reinterpret_cast<uint8_t *>(&n)[sizeof(T) - 1 - i];
|
|
143
77
|
return m;
|
|
144
78
|
}
|
|
145
|
-
template<>
|
|
146
|
-
template<>
|
|
147
|
-
template<>
|
|
148
|
-
template<>
|
|
149
|
-
template<>
|
|
150
|
-
template<>
|
|
151
|
-
template<>
|
|
152
|
-
template<>
|
|
79
|
+
template<> constexpr uint8_t byteswap(uint8_t n) { return n; }
|
|
80
|
+
template<> constexpr uint16_t byteswap(uint16_t n) { return __builtin_bswap16(n); }
|
|
81
|
+
template<> constexpr uint32_t byteswap(uint32_t n) { return __builtin_bswap32(n); }
|
|
82
|
+
template<> constexpr uint64_t byteswap(uint64_t n) { return __builtin_bswap64(n); }
|
|
83
|
+
template<> constexpr int8_t byteswap(int8_t n) { return n; }
|
|
84
|
+
template<> constexpr int16_t byteswap(int16_t n) { return __builtin_bswap16(n); }
|
|
85
|
+
template<> constexpr int32_t byteswap(int32_t n) { return __builtin_bswap32(n); }
|
|
86
|
+
template<> constexpr int64_t byteswap(int64_t n) { return __builtin_bswap64(n); }
|
|
153
87
|
|
|
154
88
|
///@}
|
|
155
89
|
|
|
156
90
|
/// @name Mathematics
|
|
157
91
|
///@{
|
|
158
92
|
|
|
159
|
-
/// Linearly interpolate between \p start and \p end by \p completion (between 0 and 1).
|
|
160
|
-
float lerp(float completion, float start, float end);
|
|
161
|
-
|
|
162
93
|
/// Remap \p value from the range (\p min, \p max) to (\p min_out, \p max_out).
|
|
163
94
|
template<typename T, typename U> T remap(U value, U min, U max, T min_out, T max_out) {
|
|
164
95
|
return (value - min) * (max_out - min_out) / (max - min) + min_out;
|
|
@@ -203,8 +134,7 @@ constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, ui
|
|
|
203
134
|
}
|
|
204
135
|
|
|
205
136
|
/// Encode a value from its constituent bytes (from most to least significant) in an array with length sizeof(T).
|
|
206
|
-
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
|
|
207
|
-
constexpr14 T encode_value(const uint8_t *bytes) {
|
|
137
|
+
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> constexpr T encode_value(const uint8_t *bytes) {
|
|
208
138
|
T val = 0;
|
|
209
139
|
for (size_t i = 0; i < sizeof(T); i++) {
|
|
210
140
|
val <<= 8;
|
|
@@ -214,12 +144,12 @@ constexpr14 T encode_value(const uint8_t *bytes) {
|
|
|
214
144
|
}
|
|
215
145
|
/// Encode a value from its constituent bytes (from most to least significant) in an std::array with length sizeof(T).
|
|
216
146
|
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
|
|
217
|
-
|
|
147
|
+
constexpr T encode_value(const std::array<uint8_t, sizeof(T)> bytes) {
|
|
218
148
|
return encode_value<T>(bytes.data());
|
|
219
149
|
}
|
|
220
150
|
/// Decode a value into its constituent bytes (from most to least significant).
|
|
221
151
|
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
|
|
222
|
-
|
|
152
|
+
constexpr std::array<uint8_t, sizeof(T)> decode_value(T val) {
|
|
223
153
|
std::array<uint8_t, sizeof(T)> ret{};
|
|
224
154
|
for (size_t i = sizeof(T); i > 0; i--) {
|
|
225
155
|
ret[i - 1] = val & 0xFF;
|
|
@@ -246,7 +176,7 @@ inline uint32_t reverse_bits(uint32_t x) {
|
|
|
246
176
|
}
|
|
247
177
|
|
|
248
178
|
/// Convert a value between host byte order and big endian (most significant byte first) order.
|
|
249
|
-
template<typename T>
|
|
179
|
+
template<typename T> constexpr T convert_big_endian(T val) {
|
|
250
180
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
251
181
|
return byteswap(val);
|
|
252
182
|
#else
|
|
@@ -255,7 +185,7 @@ template<typename T> constexpr14 T convert_big_endian(T val) {
|
|
|
255
185
|
}
|
|
256
186
|
|
|
257
187
|
/// Convert a value between host byte order and little endian (least significant byte first) order.
|
|
258
|
-
template<typename T>
|
|
188
|
+
template<typename T> constexpr T convert_little_endian(T val) {
|
|
259
189
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
260
190
|
return val;
|
|
261
191
|
#else
|
|
@@ -276,9 +206,6 @@ bool str_startswith(const std::string &str, const std::string &start);
|
|
|
276
206
|
/// Check whether a string ends with a value.
|
|
277
207
|
bool str_endswith(const std::string &str, const std::string &end);
|
|
278
208
|
|
|
279
|
-
/// Convert the value to a string (added as extra overload so that to_string() can be used on all stringifiable types).
|
|
280
|
-
inline std::string to_string(const std::string &val) { return val; }
|
|
281
|
-
|
|
282
209
|
/// Truncate a string to a specific length.
|
|
283
210
|
std::string str_truncate(const std::string &str, size_t length);
|
|
284
211
|
|
|
@@ -402,6 +329,8 @@ template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> optional<
|
|
|
402
329
|
return parse_hex<T>(str.c_str(), str.length());
|
|
403
330
|
}
|
|
404
331
|
|
|
332
|
+
/// Format the six-byte array \p mac into a MAC address.
|
|
333
|
+
std::string format_mac_address_pretty(const uint8_t mac[6]);
|
|
405
334
|
/// Format the byte array \p data of length \p len in lowercased hex.
|
|
406
335
|
std::string format_hex(const uint8_t *data, size_t length);
|
|
407
336
|
/// Format the vector \p data in lowercased hex.
|
|
@@ -415,18 +344,149 @@ template<std::size_t N> std::string format_hex(const std::array<uint8_t, N> &dat
|
|
|
415
344
|
return format_hex(data.data(), data.size());
|
|
416
345
|
}
|
|
417
346
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
347
|
+
/** Format a byte array in pretty-printed, human-readable hex format.
|
|
348
|
+
*
|
|
349
|
+
* Converts binary data to a hexadecimal string representation with customizable formatting.
|
|
350
|
+
* Each byte is displayed as a two-digit uppercase hex value, separated by the specified separator.
|
|
351
|
+
* Optionally includes the total byte count in parentheses at the end.
|
|
352
|
+
*
|
|
353
|
+
* @param data Pointer to the byte array to format.
|
|
354
|
+
* @param length Number of bytes in the array.
|
|
355
|
+
* @param separator Character to use between hex bytes (default: '.').
|
|
356
|
+
* @param show_length Whether to append the byte count in parentheses (default: true).
|
|
357
|
+
* @return Formatted hex string, e.g., "A1.B2.C3.D4.E5 (5)" or "A1:B2:C3" depending on parameters.
|
|
358
|
+
*
|
|
359
|
+
* @note Returns empty string if data is nullptr or length is 0.
|
|
360
|
+
* @note The length will only be appended if show_length is true AND the length is greater than 4.
|
|
361
|
+
*
|
|
362
|
+
* Example:
|
|
363
|
+
* @code
|
|
364
|
+
* uint8_t data[] = {0xA1, 0xB2, 0xC3};
|
|
365
|
+
* format_hex_pretty(data, 3); // Returns "A1.B2.C3" (no length shown for <= 4 parts)
|
|
366
|
+
* uint8_t data2[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5};
|
|
367
|
+
* format_hex_pretty(data2, 5); // Returns "A1.B2.C3.D4.E5 (5)"
|
|
368
|
+
* format_hex_pretty(data2, 5, ':'); // Returns "A1:B2:C3:D4:E5 (5)"
|
|
369
|
+
* format_hex_pretty(data2, 5, '.', false); // Returns "A1.B2.C3.D4.E5"
|
|
370
|
+
* @endcode
|
|
371
|
+
*/
|
|
372
|
+
std::string format_hex_pretty(const uint8_t *data, size_t length, char separator = '.', bool show_length = true);
|
|
373
|
+
|
|
374
|
+
/** Format a 16-bit word array in pretty-printed, human-readable hex format.
|
|
375
|
+
*
|
|
376
|
+
* Similar to the byte array version, but formats 16-bit words as 4-digit hex values.
|
|
377
|
+
*
|
|
378
|
+
* @param data Pointer to the 16-bit word array to format.
|
|
379
|
+
* @param length Number of 16-bit words in the array.
|
|
380
|
+
* @param separator Character to use between hex words (default: '.').
|
|
381
|
+
* @param show_length Whether to append the word count in parentheses (default: true).
|
|
382
|
+
* @return Formatted hex string with 4-digit hex values per word.
|
|
383
|
+
*
|
|
384
|
+
* @note The length will only be appended if show_length is true AND the length is greater than 4.
|
|
385
|
+
*
|
|
386
|
+
* Example:
|
|
387
|
+
* @code
|
|
388
|
+
* uint16_t data[] = {0xA1B2, 0xC3D4};
|
|
389
|
+
* format_hex_pretty(data, 2); // Returns "A1B2.C3D4" (no length shown for <= 4 parts)
|
|
390
|
+
* uint16_t data2[] = {0xA1B2, 0xC3D4, 0xE5F6};
|
|
391
|
+
* format_hex_pretty(data2, 3); // Returns "A1B2.C3D4.E5F6 (3)"
|
|
392
|
+
* @endcode
|
|
393
|
+
*/
|
|
394
|
+
std::string format_hex_pretty(const uint16_t *data, size_t length, char separator = '.', bool show_length = true);
|
|
395
|
+
|
|
396
|
+
/** Format a byte vector in pretty-printed, human-readable hex format.
|
|
397
|
+
*
|
|
398
|
+
* Convenience overload for std::vector<uint8_t>. Formats each byte as a two-digit
|
|
399
|
+
* uppercase hex value with customizable separator.
|
|
400
|
+
*
|
|
401
|
+
* @param data Vector of bytes to format.
|
|
402
|
+
* @param separator Character to use between hex bytes (default: '.').
|
|
403
|
+
* @param show_length Whether to append the byte count in parentheses (default: true).
|
|
404
|
+
* @return Formatted hex string representation of the vector contents.
|
|
405
|
+
*
|
|
406
|
+
* @note The length will only be appended if show_length is true AND the vector size is greater than 4.
|
|
407
|
+
*
|
|
408
|
+
* Example:
|
|
409
|
+
* @code
|
|
410
|
+
* std::vector<uint8_t> data = {0xDE, 0xAD, 0xBE, 0xEF};
|
|
411
|
+
* format_hex_pretty(data); // Returns "DE.AD.BE.EF" (no length shown for <= 4 parts)
|
|
412
|
+
* std::vector<uint8_t> data2 = {0xDE, 0xAD, 0xBE, 0xEF, 0xCA};
|
|
413
|
+
* format_hex_pretty(data2); // Returns "DE.AD.BE.EF.CA (5)"
|
|
414
|
+
* format_hex_pretty(data2, '-'); // Returns "DE-AD-BE-EF-CA (5)"
|
|
415
|
+
* @endcode
|
|
416
|
+
*/
|
|
417
|
+
std::string format_hex_pretty(const std::vector<uint8_t> &data, char separator = '.', bool show_length = true);
|
|
418
|
+
|
|
419
|
+
/** Format a 16-bit word vector in pretty-printed, human-readable hex format.
|
|
420
|
+
*
|
|
421
|
+
* Convenience overload for std::vector<uint16_t>. Each 16-bit word is formatted
|
|
422
|
+
* as a 4-digit uppercase hex value in big-endian order.
|
|
423
|
+
*
|
|
424
|
+
* @param data Vector of 16-bit words to format.
|
|
425
|
+
* @param separator Character to use between hex words (default: '.').
|
|
426
|
+
* @param show_length Whether to append the word count in parentheses (default: true).
|
|
427
|
+
* @return Formatted hex string representation of the vector contents.
|
|
428
|
+
*
|
|
429
|
+
* @note The length will only be appended if show_length is true AND the vector size is greater than 4.
|
|
430
|
+
*
|
|
431
|
+
* Example:
|
|
432
|
+
* @code
|
|
433
|
+
* std::vector<uint16_t> data = {0x1234, 0x5678};
|
|
434
|
+
* format_hex_pretty(data); // Returns "1234.5678" (no length shown for <= 4 parts)
|
|
435
|
+
* std::vector<uint16_t> data2 = {0x1234, 0x5678, 0x9ABC};
|
|
436
|
+
* format_hex_pretty(data2); // Returns "1234.5678.9ABC (3)"
|
|
437
|
+
* @endcode
|
|
438
|
+
*/
|
|
439
|
+
std::string format_hex_pretty(const std::vector<uint16_t> &data, char separator = '.', bool show_length = true);
|
|
440
|
+
|
|
441
|
+
/** Format a string's bytes in pretty-printed, human-readable hex format.
|
|
442
|
+
*
|
|
443
|
+
* Treats each character in the string as a byte and formats it in hex.
|
|
444
|
+
* Useful for debugging binary data stored in std::string containers.
|
|
445
|
+
*
|
|
446
|
+
* @param data String whose bytes should be formatted as hex.
|
|
447
|
+
* @param separator Character to use between hex bytes (default: '.').
|
|
448
|
+
* @param show_length Whether to append the byte count in parentheses (default: true).
|
|
449
|
+
* @return Formatted hex string representation of the string's byte contents.
|
|
450
|
+
*
|
|
451
|
+
* @note The length will only be appended if show_length is true AND the string length is greater than 4.
|
|
452
|
+
*
|
|
453
|
+
* Example:
|
|
454
|
+
* @code
|
|
455
|
+
* std::string data = "ABC"; // ASCII: 0x41, 0x42, 0x43
|
|
456
|
+
* format_hex_pretty(data); // Returns "41.42.43" (no length shown for <= 4 parts)
|
|
457
|
+
* std::string data2 = "ABCDE";
|
|
458
|
+
* format_hex_pretty(data2); // Returns "41.42.43.44.45 (5)"
|
|
459
|
+
* @endcode
|
|
460
|
+
*/
|
|
461
|
+
std::string format_hex_pretty(const std::string &data, char separator = '.', bool show_length = true);
|
|
462
|
+
|
|
463
|
+
/** Format an unsigned integer in pretty-printed, human-readable hex format.
|
|
464
|
+
*
|
|
465
|
+
* Converts the integer to big-endian byte order and formats each byte as hex.
|
|
466
|
+
* The most significant byte appears first in the output string.
|
|
467
|
+
*
|
|
468
|
+
* @tparam T Unsigned integer type (uint8_t, uint16_t, uint32_t, uint64_t, etc.).
|
|
469
|
+
* @param val The unsigned integer value to format.
|
|
470
|
+
* @param separator Character to use between hex bytes (default: '.').
|
|
471
|
+
* @param show_length Whether to append the byte count in parentheses (default: true).
|
|
472
|
+
* @return Formatted hex string with most significant byte first.
|
|
473
|
+
*
|
|
474
|
+
* @note The length will only be appended if show_length is true AND sizeof(T) is greater than 4.
|
|
475
|
+
*
|
|
476
|
+
* Example:
|
|
477
|
+
* @code
|
|
478
|
+
* uint32_t value = 0x12345678;
|
|
479
|
+
* format_hex_pretty(value); // Returns "12.34.56.78" (no length shown for <= 4 parts)
|
|
480
|
+
* uint64_t value2 = 0x123456789ABCDEF0;
|
|
481
|
+
* format_hex_pretty(value2); // Returns "12.34.56.78.9A.BC.DE.F0 (8)"
|
|
482
|
+
* format_hex_pretty(value2, ':'); // Returns "12:34:56:78:9A:BC:DE:F0 (8)"
|
|
483
|
+
* format_hex_pretty<uint16_t>(0x1234); // Returns "12.34"
|
|
484
|
+
* @endcode
|
|
485
|
+
*/
|
|
486
|
+
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
|
|
487
|
+
std::string format_hex_pretty(T val, char separator = '.', bool show_length = true) {
|
|
428
488
|
val = convert_big_endian(val);
|
|
429
|
-
return format_hex_pretty(reinterpret_cast<uint8_t *>(&val), sizeof(T));
|
|
489
|
+
return format_hex_pretty(reinterpret_cast<uint8_t *>(&val), sizeof(T), separator, show_length);
|
|
430
490
|
}
|
|
431
491
|
|
|
432
492
|
/// Format the byte array \p data of length \p len in binary.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#if defined(USE_ESP32) || defined(USE_LIBRETINY)
|
|
4
|
+
|
|
5
|
+
#include <atomic>
|
|
6
|
+
#include <cstddef>
|
|
7
|
+
|
|
8
|
+
#if defined(USE_ESP32)
|
|
9
|
+
#include <freertos/FreeRTOS.h>
|
|
10
|
+
#include <freertos/task.h>
|
|
11
|
+
#elif defined(USE_LIBRETINY)
|
|
12
|
+
#include <FreeRTOS.h>
|
|
13
|
+
#include <task.h>
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Lock-free queue for single-producer single-consumer scenarios.
|
|
18
|
+
* This allows one thread to push items and another to pop them without
|
|
19
|
+
* blocking each other.
|
|
20
|
+
*
|
|
21
|
+
* This is a Single-Producer Single-Consumer (SPSC) lock-free ring buffer.
|
|
22
|
+
* Available on platforms with FreeRTOS support (ESP32, LibreTiny).
|
|
23
|
+
*
|
|
24
|
+
* Common use cases:
|
|
25
|
+
* - BLE events: BLE task produces, main loop consumes
|
|
26
|
+
* - MQTT messages: main task produces, MQTT thread consumes
|
|
27
|
+
*
|
|
28
|
+
* @tparam T The type of elements stored in the queue (must be a pointer type)
|
|
29
|
+
* @tparam SIZE The maximum number of elements (1-255, limited by uint8_t indices)
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
namespace esphome {
|
|
33
|
+
|
|
34
|
+
// Base lock-free queue without task notification
|
|
35
|
+
template<class T, uint8_t SIZE> class LockFreeQueue {
|
|
36
|
+
public:
|
|
37
|
+
LockFreeQueue() : head_(0), tail_(0), dropped_count_(0) {}
|
|
38
|
+
|
|
39
|
+
bool push(T *element) {
|
|
40
|
+
bool was_empty;
|
|
41
|
+
uint8_t old_tail;
|
|
42
|
+
return push_internal_(element, was_empty, old_tail);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
protected:
|
|
46
|
+
// Internal push that reports queue state - for use by derived classes
|
|
47
|
+
bool push_internal_(T *element, bool &was_empty, uint8_t &old_tail) {
|
|
48
|
+
if (element == nullptr)
|
|
49
|
+
return false;
|
|
50
|
+
|
|
51
|
+
uint8_t current_tail = tail_.load(std::memory_order_relaxed);
|
|
52
|
+
uint8_t next_tail = (current_tail + 1) % SIZE;
|
|
53
|
+
|
|
54
|
+
// Read head before incrementing tail
|
|
55
|
+
uint8_t head_before = head_.load(std::memory_order_acquire);
|
|
56
|
+
|
|
57
|
+
if (next_tail == head_before) {
|
|
58
|
+
// Buffer full
|
|
59
|
+
dropped_count_.fetch_add(1, std::memory_order_relaxed);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
was_empty = (current_tail == head_before);
|
|
64
|
+
old_tail = current_tail;
|
|
65
|
+
|
|
66
|
+
buffer_[current_tail] = element;
|
|
67
|
+
tail_.store(next_tail, std::memory_order_release);
|
|
68
|
+
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public:
|
|
73
|
+
T *pop() {
|
|
74
|
+
uint8_t current_head = head_.load(std::memory_order_relaxed);
|
|
75
|
+
|
|
76
|
+
if (current_head == tail_.load(std::memory_order_acquire)) {
|
|
77
|
+
return nullptr; // Empty
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
T *element = buffer_[current_head];
|
|
81
|
+
head_.store((current_head + 1) % SIZE, std::memory_order_release);
|
|
82
|
+
return element;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
size_t size() const {
|
|
86
|
+
uint8_t tail = tail_.load(std::memory_order_acquire);
|
|
87
|
+
uint8_t head = head_.load(std::memory_order_acquire);
|
|
88
|
+
return (tail - head + SIZE) % SIZE;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
uint16_t get_and_reset_dropped_count() { return dropped_count_.exchange(0, std::memory_order_relaxed); }
|
|
92
|
+
|
|
93
|
+
void increment_dropped_count() { dropped_count_.fetch_add(1, std::memory_order_relaxed); }
|
|
94
|
+
|
|
95
|
+
bool empty() const { return head_.load(std::memory_order_acquire) == tail_.load(std::memory_order_acquire); }
|
|
96
|
+
|
|
97
|
+
bool full() const {
|
|
98
|
+
uint8_t next_tail = (tail_.load(std::memory_order_relaxed) + 1) % SIZE;
|
|
99
|
+
return next_tail == head_.load(std::memory_order_acquire);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
protected:
|
|
103
|
+
T *buffer_[SIZE];
|
|
104
|
+
// Atomic: written by producer (push/increment), read+reset by consumer (get_and_reset)
|
|
105
|
+
std::atomic<uint16_t> dropped_count_; // 65535 max - more than enough for drop tracking
|
|
106
|
+
// Atomic: written by consumer (pop), read by producer (push) to check if full
|
|
107
|
+
// Using uint8_t limits queue size to 255 elements but saves memory and ensures
|
|
108
|
+
// atomic operations are efficient on all platforms
|
|
109
|
+
std::atomic<uint8_t> head_;
|
|
110
|
+
// Atomic: written by producer (push), read by consumer (pop) to check if empty
|
|
111
|
+
std::atomic<uint8_t> tail_;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// Extended queue with task notification support
|
|
115
|
+
template<class T, uint8_t SIZE> class NotifyingLockFreeQueue : public LockFreeQueue<T, SIZE> {
|
|
116
|
+
public:
|
|
117
|
+
NotifyingLockFreeQueue() : LockFreeQueue<T, SIZE>(), task_to_notify_(nullptr) {}
|
|
118
|
+
|
|
119
|
+
bool push(T *element) {
|
|
120
|
+
bool was_empty;
|
|
121
|
+
uint8_t old_tail;
|
|
122
|
+
bool result = this->push_internal_(element, was_empty, old_tail);
|
|
123
|
+
|
|
124
|
+
// Notify optimization: only notify if we need to
|
|
125
|
+
if (result && task_to_notify_ != nullptr &&
|
|
126
|
+
(was_empty || this->head_.load(std::memory_order_acquire) == old_tail)) {
|
|
127
|
+
// Notify in two cases:
|
|
128
|
+
// 1. Queue was empty - consumer might be going to sleep
|
|
129
|
+
// 2. Consumer just caught up to where tail was - might go to sleep
|
|
130
|
+
// Note: There's a benign race in case 2 - between reading head and calling
|
|
131
|
+
// xTaskNotifyGive(), the consumer could advance further. This would result
|
|
132
|
+
// in an unnecessary wake-up, but is harmless and extremely rare in practice.
|
|
133
|
+
xTaskNotifyGive(task_to_notify_);
|
|
134
|
+
}
|
|
135
|
+
// Otherwise: consumer is still behind, no need to notify
|
|
136
|
+
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Set the FreeRTOS task handle to notify when items are pushed to the queue
|
|
141
|
+
// This enables efficient wake-up of a consumer task that's waiting for data
|
|
142
|
+
// @param task The FreeRTOS task handle to notify, or nullptr to disable notifications
|
|
143
|
+
void set_task_to_notify(TaskHandle_t task) { task_to_notify_ = task; }
|
|
144
|
+
|
|
145
|
+
private:
|
|
146
|
+
TaskHandle_t task_to_notify_;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
} // namespace esphome
|
|
150
|
+
|
|
151
|
+
#endif // defined(USE_ESP32) || defined(USE_LIBRETINY)
|
esphome/core/log.cpp
CHANGED
|
@@ -29,7 +29,7 @@ void HOT esp_log_vprintf_(int level, const char *tag, int line, const char *form
|
|
|
29
29
|
if (log == nullptr)
|
|
30
30
|
return;
|
|
31
31
|
|
|
32
|
-
log->log_vprintf_(level, tag, line, format, args);
|
|
32
|
+
log->log_vprintf_(static_cast<uint8_t>(level), tag, line, format, args);
|
|
33
33
|
#endif
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -41,7 +41,7 @@ void HOT esp_log_vprintf_(int level, const char *tag, int line, const __FlashStr
|
|
|
41
41
|
if (log == nullptr)
|
|
42
42
|
return;
|
|
43
43
|
|
|
44
|
-
log->log_vprintf_(level, tag, line, format, args);
|
|
44
|
+
log->log_vprintf_(static_cast<uint8_t>(level), tag, line, format, args);
|
|
45
45
|
#endif
|
|
46
46
|
}
|
|
47
47
|
#endif
|
esphome/core/log.h
CHANGED
|
@@ -165,6 +165,8 @@ int esp_idf_log_vprintf_(const char *format, va_list args); // NOLINT
|
|
|
165
165
|
#define YESNO(b) ((b) ? "YES" : "NO")
|
|
166
166
|
#define ONOFF(b) ((b) ? "ON" : "OFF")
|
|
167
167
|
#define TRUEFALSE(b) ((b) ? "TRUE" : "FALSE")
|
|
168
|
+
// for use with optional values
|
|
169
|
+
#define ONOFFMAYBE(b) (((b).has_value()) ? ONOFF((b).value()) : "UNKNOWN")
|
|
168
170
|
|
|
169
171
|
// Helper class that identifies strings that may be stored in flash storage (similar to Arduino's __FlashStringHelper)
|
|
170
172
|
struct LogString;
|
esphome/core/optional.h
CHANGED
|
@@ -52,6 +52,11 @@ template<typename T> class optional { // NOLINT
|
|
|
52
52
|
reset();
|
|
53
53
|
return *this;
|
|
54
54
|
}
|
|
55
|
+
bool operator==(optional<T> const &rhs) const {
|
|
56
|
+
if (has_value() && rhs.has_value())
|
|
57
|
+
return value() == rhs.value();
|
|
58
|
+
return !has_value() && !rhs.has_value();
|
|
59
|
+
}
|
|
55
60
|
|
|
56
61
|
template<class U> optional &operator=(optional<U> const &other) {
|
|
57
62
|
has_value_ = other.has_value();
|
esphome/core/ring_buffer.cpp
CHANGED
|
@@ -14,7 +14,7 @@ static const char *const TAG = "ring_buffer";
|
|
|
14
14
|
RingBuffer::~RingBuffer() {
|
|
15
15
|
if (this->handle_ != nullptr) {
|
|
16
16
|
vRingbufferDelete(this->handle_);
|
|
17
|
-
RAMAllocator<uint8_t> allocator
|
|
17
|
+
RAMAllocator<uint8_t> allocator;
|
|
18
18
|
allocator.deallocate(this->storage_, this->size_);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -24,7 +24,7 @@ std::unique_ptr<RingBuffer> RingBuffer::create(size_t len) {
|
|
|
24
24
|
|
|
25
25
|
rb->size_ = len;
|
|
26
26
|
|
|
27
|
-
RAMAllocator<uint8_t> allocator
|
|
27
|
+
RAMAllocator<uint8_t> allocator;
|
|
28
28
|
rb->storage_ = allocator.allocate(rb->size_);
|
|
29
29
|
if (rb->storage_ == nullptr) {
|
|
30
30
|
return nullptr;
|