esphome 2025.6.2__py3-none-any.whl → 2025.7.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +42 -20
  22. esphome/components/api/api_connection.cpp +318 -391
  23. esphome/components/api/api_connection.h +206 -126
  24. esphome/components/api/api_frame_helper.cpp +89 -124
  25. esphome/components/api/api_frame_helper.h +57 -45
  26. esphome/components/api/api_pb2.cpp +414 -4350
  27. esphome/components/api/api_pb2.h +287 -198
  28. esphome/components/api/api_pb2_dump.cpp +4333 -0
  29. esphome/components/api/api_pb2_service.cpp +180 -425
  30. esphome/components/api/api_pb2_service.h +7 -6
  31. esphome/components/api/api_pb2_size.h +2 -4
  32. esphome/components/api/api_server.cpp +138 -167
  33. esphome/components/api/api_server.h +66 -12
  34. esphome/components/api/client.py +10 -4
  35. esphome/components/api/list_entities.cpp +36 -105
  36. esphome/components/api/list_entities.h +31 -23
  37. esphome/components/api/proto.h +26 -3
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/as5600/as5600.h +0 -1
  41. esphome/components/async_tcp/__init__.py +14 -5
  42. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  43. esphome/components/atm90e32/atm90e32.cpp +2 -1
  44. esphome/components/audio/audio_decoder.cpp +1 -1
  45. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  46. esphome/components/b_parasite/b_parasite.h +0 -1
  47. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  48. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  49. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  50. esphome/components/bh1750/bh1750.cpp +5 -5
  51. esphome/components/binary_sensor/__init__.py +82 -5
  52. esphome/components/binary_sensor/automation.h +19 -1
  53. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  54. esphome/components/binary_sensor/binary_sensor.h +11 -25
  55. esphome/components/binary_sensor/filter.cpp +29 -24
  56. esphome/components/binary_sensor/filter.h +20 -10
  57. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  58. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  60. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  62. esphome/components/ble_client/switch/ble_switch.h +0 -1
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  65. esphome/components/ble_presence/ble_presence_device.h +0 -1
  66. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  67. esphome/components/ble_scanner/ble_scanner.h +0 -1
  68. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  69. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  71. esphome/components/bme680/sensor.py +1 -1
  72. esphome/components/bmp581/bmp581.h +0 -2
  73. esphome/components/button/__init__.py +5 -2
  74. esphome/components/camera/__init__.py +1 -0
  75. esphome/components/camera/camera.cpp +22 -0
  76. esphome/components/camera/camera.h +80 -0
  77. esphome/components/canbus/__init__.py +1 -0
  78. esphome/components/cap1188/cap1188.h +0 -1
  79. esphome/components/captive_portal/__init__.py +12 -2
  80. esphome/components/captive_portal/captive_portal.cpp +12 -2
  81. esphome/components/captive_portal/captive_portal.h +5 -2
  82. esphome/components/ccs811/ccs811.h +0 -2
  83. esphome/components/climate/__init__.py +5 -2
  84. esphome/components/cm1106/sensor.py +2 -2
  85. esphome/components/const/__init__.py +2 -0
  86. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  87. esphome/components/copy/button/copy_button.h +0 -1
  88. esphome/components/copy/cover/copy_cover.h +0 -1
  89. esphome/components/copy/fan/copy_fan.h +0 -1
  90. esphome/components/copy/lock/copy_lock.h +0 -1
  91. esphome/components/copy/number/copy_number.h +0 -1
  92. esphome/components/copy/select/copy_select.h +0 -1
  93. esphome/components/copy/sensor/copy_sensor.h +0 -1
  94. esphome/components/copy/switch/copy_switch.h +0 -1
  95. esphome/components/copy/text/copy_text.h +0 -1
  96. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  97. esphome/components/cover/__init__.py +5 -2
  98. esphome/components/cs5460a/cs5460a.h +0 -1
  99. esphome/components/datetime/__init__.py +4 -2
  100. esphome/components/debug/__init__.py +20 -0
  101. esphome/components/deep_sleep/__init__.py +43 -9
  102. esphome/components/demo/__init__.py +2 -2
  103. esphome/components/display/display.cpp +4 -3
  104. esphome/components/display/display.h +0 -2
  105. esphome/components/display/display_buffer.cpp +1 -1
  106. esphome/components/ds2484/__init__.py +1 -0
  107. esphome/components/ds2484/ds2484.cpp +209 -0
  108. esphome/components/ds2484/ds2484.h +43 -0
  109. esphome/components/ds2484/one_wire.py +37 -0
  110. esphome/components/duty_time/duty_time_sensor.h +0 -1
  111. esphome/components/ens160_base/ens160_base.h +0 -1
  112. esphome/components/es7210/es7210.h +0 -1
  113. esphome/components/es7243e/es7243e.h +0 -1
  114. esphome/components/es8156/es8156.h +0 -1
  115. esphome/components/es8311/es8311.h +0 -1
  116. esphome/components/es8388/es8388.h +0 -1
  117. esphome/components/esp32/__init__.py +102 -135
  118. esphome/components/esp32/core.cpp +0 -4
  119. esphome/components/esp32/gpio.h +1 -1
  120. esphome/components/esp32/helpers.cpp +69 -0
  121. esphome/components/esp32_ble/ble.cpp +5 -6
  122. esphome/components/esp32_ble/ble.h +29 -14
  123. esphome/components/esp32_ble/ble_event.h +6 -6
  124. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  125. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  126. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  127. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  128. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  129. esphome/components/esp32_camera/__init__.py +111 -97
  130. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  131. esphome/components/esp32_camera/esp32_camera.h +35 -30
  132. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  133. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  134. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  135. esphome/components/esp32_hall/sensor.py +2 -21
  136. esphome/components/esp32_hosted/__init__.py +101 -0
  137. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  138. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  139. esphome/components/esp32_rmt/__init__.py +0 -58
  140. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  141. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  142. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  143. esphome/components/esp32_touch/esp32_touch.h +174 -28
  144. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  145. esphome/components/esp32_touch/esp32_touch_v1.cpp +238 -0
  146. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  147. esphome/components/esp8266/__init__.py +1 -0
  148. esphome/components/esp8266/gpio.cpp +10 -10
  149. esphome/components/esp8266/helpers.cpp +31 -0
  150. esphome/components/esphome/ota/__init__.py +1 -0
  151. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  152. esphome/components/ethernet/__init__.py +42 -23
  153. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  154. esphome/components/ethernet/ethernet_component.cpp +69 -29
  155. esphome/components/ethernet/ethernet_component.h +18 -10
  156. esphome/components/event/__init__.py +5 -2
  157. esphome/components/ezo/ezo.h +0 -1
  158. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  159. esphome/components/fan/__init__.py +5 -2
  160. esphome/components/feedback/feedback_cover.h +0 -1
  161. esphome/components/font/__init__.py +92 -82
  162. esphome/components/font/font.cpp +9 -2
  163. esphome/components/font/font.h +20 -5
  164. esphome/components/fs3000/fs3000.h +0 -1
  165. esphome/components/gcja5/gcja5.h +0 -1
  166. esphome/components/gl_r01_i2c/__init__.py +0 -0
  167. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  168. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  169. esphome/components/gl_r01_i2c/sensor.py +36 -0
  170. esphome/components/gp8403/gp8403.h +0 -1
  171. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  172. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  173. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  174. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  175. esphome/components/he60r/he60r.h +0 -1
  176. esphome/components/heatpumpir/climate.py +2 -1
  177. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  178. esphome/components/heatpumpir/heatpumpir.h +1 -0
  179. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  180. esphome/components/host/__init__.py +2 -1
  181. esphome/components/host/helpers.cpp +57 -0
  182. esphome/components/http_request/__init__.py +19 -1
  183. esphome/components/http_request/http_request.h +1 -1
  184. esphome/components/http_request/http_request_arduino.cpp +0 -1
  185. esphome/components/http_request/http_request_arduino.h +1 -0
  186. esphome/components/http_request/http_request_idf.cpp +0 -1
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +430 -261
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +4 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +31 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +1 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +1 -5
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/valve/__init__.py +5 -2
  477. esphome/components/vbus/vbus.h +0 -1
  478. esphome/components/veml3235/veml3235.h +0 -1
  479. esphome/components/veml7700/veml7700.h +0 -1
  480. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  481. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  482. esphome/components/watchdog/watchdog.cpp +0 -4
  483. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  484. esphome/components/web_server/__init__.py +34 -19
  485. esphome/components/web_server/ota/__init__.py +32 -0
  486. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  487. esphome/components/web_server/ota/ota_web_server.h +26 -0
  488. esphome/components/web_server/web_server.cpp +311 -430
  489. esphome/components/web_server/web_server.h +33 -23
  490. esphome/components/web_server/web_server_v1.cpp +4 -5
  491. esphome/components/web_server_base/__init__.py +5 -2
  492. esphome/components/web_server_base/web_server_base.cpp +2 -94
  493. esphome/components/web_server_base/web_server_base.h +5 -25
  494. esphome/components/web_server_idf/multipart.cpp +254 -0
  495. esphome/components/web_server_idf/multipart.h +86 -0
  496. esphome/components/web_server_idf/utils.cpp +32 -0
  497. esphome/components/web_server_idf/utils.h +10 -0
  498. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  499. esphome/components/web_server_idf/web_server_idf.h +11 -10
  500. esphome/components/wiegand/wiegand.cpp +2 -2
  501. esphome/components/wifi/__init__.py +18 -0
  502. esphome/components/wifi/wifi_component.cpp +17 -22
  503. esphome/components/wifi/wifi_component.h +27 -23
  504. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  505. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  506. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  507. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  508. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  509. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  510. esphome/components/wireguard/__init__.py +2 -11
  511. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  512. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  513. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  514. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  515. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  516. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  517. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  518. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  519. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  520. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  521. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  522. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  523. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  524. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  525. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  526. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  527. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  528. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  529. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  530. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  531. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  532. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  533. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  534. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  535. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  536. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  537. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  538. esphome/components/zyaura/zyaura.h +0 -1
  539. esphome/config.py +88 -22
  540. esphome/config_helpers.py +74 -1
  541. esphome/config_validation.py +12 -1
  542. esphome/const.py +65 -10
  543. esphome/core/__init__.py +18 -2
  544. esphome/core/application.cpp +163 -10
  545. esphome/core/application.h +145 -165
  546. esphome/core/area.h +19 -0
  547. esphome/core/automation.h +58 -9
  548. esphome/core/color.cpp +3 -5
  549. esphome/core/color.h +16 -16
  550. esphome/core/component.cpp +151 -18
  551. esphome/core/component.h +98 -4
  552. esphome/core/component_iterator.cpp +7 -7
  553. esphome/core/component_iterator.h +9 -7
  554. esphome/core/config.py +155 -6
  555. esphome/core/controller.cpp +4 -2
  556. esphome/core/controller.h +1 -1
  557. esphome/core/datatypes.h +2 -2
  558. esphome/core/defines.h +17 -2
  559. esphome/core/device.h +20 -0
  560. esphome/core/entity_base.cpp +20 -15
  561. esphome/core/entity_base.h +76 -0
  562. esphome/core/entity_helpers.py +162 -1
  563. esphome/core/event_pool.h +81 -0
  564. esphome/core/helpers.cpp +75 -230
  565. esphome/core/helpers.h +164 -104
  566. esphome/core/lock_free_queue.h +151 -0
  567. esphome/core/log.cpp +2 -2
  568. esphome/core/log.h +2 -0
  569. esphome/core/optional.h +5 -0
  570. esphome/core/ring_buffer.cpp +2 -2
  571. esphome/core/scheduler.cpp +278 -103
  572. esphome/core/scheduler.h +157 -17
  573. esphome/core/time.cpp +5 -5
  574. esphome/core/time.h +5 -5
  575. esphome/cpp_generator.py +17 -0
  576. esphome/cpp_helpers.py +0 -22
  577. esphome/cpp_types.py +3 -1
  578. esphome/dashboard/entries.py +1 -1
  579. esphome/dashboard/util/text.py +5 -21
  580. esphome/dashboard/web_server.py +9 -1
  581. esphome/helpers.py +47 -0
  582. esphome/loader.py +15 -1
  583. esphome/pins.py +14 -8
  584. esphome/wizard.py +16 -3
  585. esphome/writer.py +21 -3
  586. esphome/yaml_util.py +0 -2
  587. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
  588. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
  589. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  590. esphome/components/esp32_ble/queue.h +0 -85
  591. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  592. esphome/components/esp32_hall/esp32_hall.h +0 -23
  593. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  594. esphome/components/ld2410/button/reset_button.cpp +0 -9
  595. esphome/components/ld2450/button/reset_button.cpp +0 -9
  596. esphome/components/openthread/tlv.py +0 -65
  597. /esphome/{dashboard/enum.py → enum.py} +0 -0
  598. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
  599. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
  600. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
  601. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,498 @@
1
+ #include "sx127x.h"
2
+ #include "esphome/core/hal.h"
3
+ #include "esphome/core/log.h"
4
+
5
+ namespace esphome {
6
+ namespace sx127x {
7
+
8
+ static const char *const TAG = "sx127x";
9
+ static const uint32_t FXOSC = 32000000u;
10
+ static const uint16_t RAMP[16] = {3400, 2000, 1000, 500, 250, 125, 100, 62, 50, 40, 31, 25, 20, 15, 12, 10};
11
+ static const uint32_t BW_HZ[22] = {2604, 3125, 3906, 5208, 6250, 7812, 10416, 12500, 15625, 20833, 25000,
12
+ 31250, 41666, 50000, 62500, 83333, 100000, 125000, 166666, 200000, 250000, 500000};
13
+ static const uint8_t BW_LORA[22] = {BW_7_8, BW_7_8, BW_7_8, BW_7_8, BW_7_8, BW_7_8, BW_10_4, BW_15_6,
14
+ BW_15_6, BW_20_8, BW_31_3, BW_31_3, BW_41_7, BW_62_5, BW_62_5, BW_125_0,
15
+ BW_125_0, BW_125_0, BW_250_0, BW_250_0, BW_250_0, BW_500_0};
16
+ static const uint8_t BW_FSK_OOK[22] = {RX_BW_2_6, RX_BW_3_1, RX_BW_3_9, RX_BW_5_2, RX_BW_6_3, RX_BW_7_8,
17
+ RX_BW_10_4, RX_BW_12_5, RX_BW_15_6, RX_BW_20_8, RX_BW_25_0, RX_BW_31_3,
18
+ RX_BW_41_7, RX_BW_50_0, RX_BW_62_5, RX_BW_83_3, RX_BW_100_0, RX_BW_125_0,
19
+ RX_BW_166_7, RX_BW_200_0, RX_BW_250_0, RX_BW_250_0};
20
+ static const int32_t RSSI_OFFSET_HF = 157;
21
+ static const int32_t RSSI_OFFSET_LF = 164;
22
+
23
+ uint8_t SX127x::read_register_(uint8_t reg) {
24
+ this->enable();
25
+ this->write_byte(reg & 0x7F);
26
+ uint8_t value = this->read_byte();
27
+ this->disable();
28
+ return value;
29
+ }
30
+
31
+ void SX127x::write_register_(uint8_t reg, uint8_t value) {
32
+ this->enable();
33
+ this->write_byte(reg | 0x80);
34
+ this->write_byte(value);
35
+ this->disable();
36
+ }
37
+
38
+ void SX127x::read_fifo_(std::vector<uint8_t> &packet) {
39
+ this->enable();
40
+ this->write_byte(REG_FIFO & 0x7F);
41
+ this->read_array(packet.data(), packet.size());
42
+ this->disable();
43
+ }
44
+
45
+ void SX127x::write_fifo_(const std::vector<uint8_t> &packet) {
46
+ this->enable();
47
+ this->write_byte(REG_FIFO | 0x80);
48
+ this->write_array(packet.data(), packet.size());
49
+ this->disable();
50
+ }
51
+
52
+ void SX127x::setup() {
53
+ ESP_LOGCONFIG(TAG, "Running setup");
54
+
55
+ // setup reset
56
+ this->rst_pin_->setup();
57
+
58
+ // setup dio0
59
+ if (this->dio0_pin_) {
60
+ this->dio0_pin_->setup();
61
+ }
62
+
63
+ // start spi
64
+ this->spi_setup();
65
+
66
+ // configure rf
67
+ this->configure();
68
+ }
69
+
70
+ void SX127x::configure() {
71
+ // toggle chip reset
72
+ this->rst_pin_->digital_write(false);
73
+ delayMicroseconds(1000);
74
+ this->rst_pin_->digital_write(true);
75
+ delayMicroseconds(10000);
76
+
77
+ // check silicon version to make sure hw is ok
78
+ if (this->read_register_(REG_VERSION) != 0x12) {
79
+ this->mark_failed();
80
+ return;
81
+ }
82
+
83
+ // enter sleep mode
84
+ this->set_mode_(MOD_FSK, MODE_SLEEP);
85
+
86
+ // set freq
87
+ uint64_t frf = ((uint64_t) this->frequency_ << 19) / FXOSC;
88
+ this->write_register_(REG_FRF_MSB, (uint8_t) ((frf >> 16) & 0xFF));
89
+ this->write_register_(REG_FRF_MID, (uint8_t) ((frf >> 8) & 0xFF));
90
+ this->write_register_(REG_FRF_LSB, (uint8_t) ((frf >> 0) & 0xFF));
91
+
92
+ // enter standby mode
93
+ this->set_mode_(MOD_FSK, MODE_STDBY);
94
+
95
+ // run image cal
96
+ this->run_image_cal();
97
+
98
+ // go back to sleep
99
+ this->set_mode_sleep();
100
+
101
+ // config pa
102
+ if (this->pa_pin_ == PA_PIN_BOOST) {
103
+ this->pa_power_ = std::max(this->pa_power_, (uint8_t) 2);
104
+ this->pa_power_ = std::min(this->pa_power_, (uint8_t) 17);
105
+ this->write_register_(REG_PA_CONFIG, (this->pa_power_ - 2) | this->pa_pin_ | PA_MAX_POWER);
106
+ } else {
107
+ this->pa_power_ = std::min(this->pa_power_, (uint8_t) 14);
108
+ this->write_register_(REG_PA_CONFIG, (this->pa_power_ - 0) | this->pa_pin_ | PA_MAX_POWER);
109
+ }
110
+ if (this->modulation_ != MOD_LORA) {
111
+ this->write_register_(REG_PA_RAMP, this->pa_ramp_ | this->shaping_);
112
+ } else {
113
+ this->write_register_(REG_PA_RAMP, this->pa_ramp_);
114
+ }
115
+
116
+ // configure modem
117
+ if (this->modulation_ != MOD_LORA) {
118
+ this->configure_fsk_ook_();
119
+ } else {
120
+ this->configure_lora_();
121
+ }
122
+
123
+ // switch to rx or sleep
124
+ if (this->rx_start_) {
125
+ this->set_mode_rx();
126
+ } else {
127
+ this->set_mode_sleep();
128
+ }
129
+ }
130
+
131
+ void SX127x::configure_fsk_ook_() {
132
+ // set the channel bw
133
+ this->write_register_(REG_RX_BW, BW_FSK_OOK[this->bandwidth_]);
134
+
135
+ // set fdev
136
+ uint32_t fdev = std::min((this->deviation_ * 4096) / 250000, (uint32_t) 0x3FFF);
137
+ this->write_register_(REG_FDEV_MSB, (uint8_t) ((fdev >> 8) & 0xFF));
138
+ this->write_register_(REG_FDEV_LSB, (uint8_t) ((fdev >> 0) & 0xFF));
139
+
140
+ // set bitrate
141
+ uint64_t bitrate = (FXOSC + this->bitrate_ / 2) / this->bitrate_; // round up
142
+ this->write_register_(REG_BITRATE_MSB, (uint8_t) ((bitrate >> 8) & 0xFF));
143
+ this->write_register_(REG_BITRATE_LSB, (uint8_t) ((bitrate >> 0) & 0xFF));
144
+
145
+ // configure rx and afc
146
+ uint8_t trigger = (this->preamble_detect_ > 0) ? TRIGGER_PREAMBLE : TRIGGER_RSSI;
147
+ this->write_register_(REG_AFC_FEI, AFC_AUTO_CLEAR_ON);
148
+ if (this->modulation_ == MOD_FSK) {
149
+ this->write_register_(REG_RX_CONFIG, AFC_AUTO_ON | AGC_AUTO_ON | trigger);
150
+ } else {
151
+ this->write_register_(REG_RX_CONFIG, AGC_AUTO_ON | trigger);
152
+ }
153
+
154
+ // configure packet mode
155
+ if (this->packet_mode_) {
156
+ uint8_t crc_mode = (this->crc_enable_) ? CRC_ON : CRC_OFF;
157
+ this->write_register_(REG_FIFO_THRESH, TX_START_FIFO_EMPTY);
158
+ if (this->payload_length_ > 0) {
159
+ this->write_register_(REG_PAYLOAD_LENGTH_LSB, this->payload_length_);
160
+ this->write_register_(REG_PACKET_CONFIG_1, crc_mode | FIXED_LENGTH);
161
+ } else {
162
+ this->write_register_(REG_PAYLOAD_LENGTH_LSB, this->get_max_packet_size() - 1);
163
+ this->write_register_(REG_PACKET_CONFIG_1, crc_mode | VARIABLE_LENGTH);
164
+ }
165
+ this->write_register_(REG_PACKET_CONFIG_2, PACKET_MODE);
166
+ } else {
167
+ this->write_register_(REG_PACKET_CONFIG_2, CONTINUOUS_MODE);
168
+ }
169
+ this->write_register_(REG_DIO_MAPPING1, DIO0_MAPPING_00);
170
+
171
+ // config bit synchronizer
172
+ uint8_t polarity = (this->preamble_polarity_ == 0xAA) ? PREAMBLE_AA : PREAMBLE_55;
173
+ if (!this->sync_value_.empty()) {
174
+ uint8_t size = this->sync_value_.size() - 1;
175
+ this->write_register_(REG_SYNC_CONFIG, AUTO_RESTART_PLL_LOCK | polarity | SYNC_ON | size);
176
+ for (uint32_t i = 0; i < this->sync_value_.size(); i++) {
177
+ this->write_register_(REG_SYNC_VALUE1 + i, this->sync_value_[i]);
178
+ }
179
+ } else {
180
+ this->write_register_(REG_SYNC_CONFIG, AUTO_RESTART_PLL_LOCK | polarity);
181
+ }
182
+
183
+ // config preamble detector
184
+ if (this->preamble_detect_ > 0) {
185
+ uint8_t size = (this->preamble_detect_ - 1) << PREAMBLE_DETECTOR_SIZE_SHIFT;
186
+ uint8_t tol = this->preamble_errors_ << PREAMBLE_DETECTOR_TOL_SHIFT;
187
+ this->write_register_(REG_PREAMBLE_DETECT, PREAMBLE_DETECTOR_ON | size | tol);
188
+ } else {
189
+ this->write_register_(REG_PREAMBLE_DETECT, PREAMBLE_DETECTOR_OFF);
190
+ }
191
+ this->write_register_(REG_PREAMBLE_SIZE_MSB, this->preamble_size_ >> 16);
192
+ this->write_register_(REG_PREAMBLE_SIZE_LSB, this->preamble_size_ & 0xFF);
193
+
194
+ // config sync generation and setup ook threshold
195
+ uint8_t bitsync = this->bitsync_ ? BIT_SYNC_ON : BIT_SYNC_OFF;
196
+ this->write_register_(REG_OOK_PEAK, bitsync | OOK_THRESH_STEP_0_5 | OOK_THRESH_PEAK);
197
+ this->write_register_(REG_OOK_AVG, OOK_AVG_RESERVED | OOK_THRESH_DEC_1_8);
198
+
199
+ // set rx floor
200
+ this->write_register_(REG_OOK_FIX, 256 + int(this->rx_floor_ * 2.0));
201
+ this->write_register_(REG_RSSI_THRESH, std::abs(int(this->rx_floor_ * 2.0)));
202
+ }
203
+
204
+ void SX127x::configure_lora_() {
205
+ // config modem
206
+ uint8_t header_mode = this->payload_length_ > 0 ? IMPLICIT_HEADER : EXPLICIT_HEADER;
207
+ uint8_t crc_mode = (this->crc_enable_) ? RX_PAYLOAD_CRC_ON : RX_PAYLOAD_CRC_OFF;
208
+ uint8_t spreading_factor = this->spreading_factor_ << SPREADING_FACTOR_SHIFT;
209
+ this->write_register_(REG_MODEM_CONFIG1, BW_LORA[this->bandwidth_] | this->coding_rate_ | header_mode);
210
+ this->write_register_(REG_MODEM_CONFIG2, spreading_factor | crc_mode);
211
+
212
+ // config fifo and payload length
213
+ this->write_register_(REG_FIFO_TX_BASE_ADDR, 0x00);
214
+ this->write_register_(REG_FIFO_RX_BASE_ADDR, 0x00);
215
+ this->write_register_(REG_PAYLOAD_LENGTH, std::max(this->payload_length_, (uint32_t) 1));
216
+
217
+ // config preamble
218
+ if (this->preamble_size_ >= 6) {
219
+ this->write_register_(REG_PREAMBLE_LEN_MSB, this->preamble_size_ >> 16);
220
+ this->write_register_(REG_PREAMBLE_LEN_LSB, this->preamble_size_ & 0xFF);
221
+ }
222
+
223
+ // optimize detection
224
+ float duration = 1000.0f * std::pow(2, this->spreading_factor_) / BW_HZ[this->bandwidth_];
225
+ if (duration > 16) {
226
+ this->write_register_(REG_MODEM_CONFIG3, MODEM_AGC_AUTO_ON | LOW_DATA_RATE_OPTIMIZE_ON);
227
+ } else {
228
+ this->write_register_(REG_MODEM_CONFIG3, MODEM_AGC_AUTO_ON);
229
+ }
230
+ if (this->spreading_factor_ == 6) {
231
+ this->write_register_(REG_DETECT_OPTIMIZE, 0xC5);
232
+ this->write_register_(REG_DETECT_THRESHOLD, 0x0C);
233
+ } else {
234
+ this->write_register_(REG_DETECT_OPTIMIZE, 0xC3);
235
+ this->write_register_(REG_DETECT_THRESHOLD, 0x0A);
236
+ }
237
+
238
+ // config sync word
239
+ if (!this->sync_value_.empty()) {
240
+ this->write_register_(REG_SYNC_WORD, this->sync_value_[0]);
241
+ }
242
+ }
243
+
244
+ size_t SX127x::get_max_packet_size() {
245
+ if (this->payload_length_ > 0) {
246
+ return this->payload_length_;
247
+ }
248
+ if (this->modulation_ == MOD_LORA) {
249
+ return 256;
250
+ } else {
251
+ return 64;
252
+ }
253
+ }
254
+
255
+ SX127xError SX127x::transmit_packet(const std::vector<uint8_t> &packet) {
256
+ if (this->payload_length_ > 0 && this->payload_length_ != packet.size()) {
257
+ ESP_LOGE(TAG, "Packet size does not match config");
258
+ return SX127xError::INVALID_PARAMS;
259
+ }
260
+ if (packet.empty() || packet.size() > this->get_max_packet_size()) {
261
+ ESP_LOGE(TAG, "Packet size out of range");
262
+ return SX127xError::INVALID_PARAMS;
263
+ }
264
+
265
+ SX127xError ret = SX127xError::NONE;
266
+ if (this->modulation_ == MOD_LORA) {
267
+ this->set_mode_standby();
268
+ if (this->payload_length_ == 0) {
269
+ this->write_register_(REG_PAYLOAD_LENGTH, packet.size());
270
+ }
271
+ this->write_register_(REG_IRQ_FLAGS, 0xFF);
272
+ this->write_register_(REG_FIFO_ADDR_PTR, 0);
273
+ this->write_fifo_(packet);
274
+ this->set_mode_tx();
275
+ } else {
276
+ this->set_mode_standby();
277
+ if (this->payload_length_ == 0) {
278
+ this->write_register_(REG_FIFO, packet.size());
279
+ }
280
+ this->write_fifo_(packet);
281
+ this->set_mode_tx();
282
+ }
283
+
284
+ // wait until transmit completes, typically the delay will be less than 100 ms
285
+ uint32_t start = millis();
286
+ while (!this->dio0_pin_->digital_read()) {
287
+ if (millis() - start > 4000) {
288
+ ESP_LOGE(TAG, "Transmit packet failure");
289
+ ret = SX127xError::TIMEOUT;
290
+ break;
291
+ }
292
+ }
293
+ if (this->rx_start_) {
294
+ this->set_mode_rx();
295
+ } else {
296
+ this->set_mode_sleep();
297
+ }
298
+ return ret;
299
+ }
300
+
301
+ void SX127x::call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr) {
302
+ for (auto &listener : this->listeners_) {
303
+ listener->on_packet(packet, rssi, snr);
304
+ }
305
+ this->packet_trigger_->trigger(packet, rssi, snr);
306
+ }
307
+
308
+ void SX127x::loop() {
309
+ if (this->dio0_pin_ == nullptr || !this->dio0_pin_->digital_read()) {
310
+ return;
311
+ }
312
+
313
+ if (this->modulation_ == MOD_LORA) {
314
+ uint8_t status = this->read_register_(REG_IRQ_FLAGS);
315
+ this->write_register_(REG_IRQ_FLAGS, 0xFF);
316
+ if ((status & PAYLOAD_CRC_ERROR) == 0) {
317
+ uint8_t bytes = this->read_register_(REG_NB_RX_BYTES);
318
+ uint8_t addr = this->read_register_(REG_FIFO_RX_CURR_ADDR);
319
+ uint8_t rssi = this->read_register_(REG_PKT_RSSI_VALUE);
320
+ int8_t snr = (int8_t) this->read_register_(REG_PKT_SNR_VALUE);
321
+ this->packet_.resize(bytes);
322
+ this->write_register_(REG_FIFO_ADDR_PTR, addr);
323
+ this->read_fifo_(this->packet_);
324
+ if (this->frequency_ > 700000000) {
325
+ this->call_listeners_(this->packet_, (float) rssi - RSSI_OFFSET_HF, (float) snr / 4);
326
+ } else {
327
+ this->call_listeners_(this->packet_, (float) rssi - RSSI_OFFSET_LF, (float) snr / 4);
328
+ }
329
+ }
330
+ } else if (this->packet_mode_) {
331
+ uint8_t payload_length = this->payload_length_;
332
+ if (payload_length == 0) {
333
+ payload_length = this->read_register_(REG_FIFO);
334
+ }
335
+ this->packet_.resize(payload_length);
336
+ this->read_fifo_(this->packet_);
337
+ this->call_listeners_(this->packet_, 0.0f, 0.0f);
338
+ }
339
+ }
340
+
341
+ void SX127x::run_image_cal() {
342
+ if (this->modulation_ == MOD_LORA) {
343
+ this->set_mode_(MOD_FSK, MODE_SLEEP);
344
+ this->set_mode_(MOD_FSK, MODE_STDBY);
345
+ }
346
+ if (this->auto_cal_) {
347
+ this->write_register_(REG_IMAGE_CAL, IMAGE_CAL_START | AUTO_IMAGE_CAL_ON | TEMP_THRESHOLD_10C);
348
+ } else {
349
+ this->write_register_(REG_IMAGE_CAL, IMAGE_CAL_START);
350
+ }
351
+ uint32_t start = millis();
352
+ while (this->read_register_(REG_IMAGE_CAL) & IMAGE_CAL_RUNNING) {
353
+ if (millis() - start > 20) {
354
+ ESP_LOGE(TAG, "Image cal failure");
355
+ this->mark_failed();
356
+ break;
357
+ }
358
+ }
359
+ if (this->modulation_ == MOD_LORA) {
360
+ this->set_mode_(this->modulation_, MODE_SLEEP);
361
+ this->set_mode_(this->modulation_, MODE_STDBY);
362
+ }
363
+ }
364
+
365
+ void SX127x::set_mode_(uint8_t modulation, uint8_t mode) {
366
+ uint32_t start = millis();
367
+ this->write_register_(REG_OP_MODE, modulation | mode);
368
+ while (true) {
369
+ uint8_t curr = this->read_register_(REG_OP_MODE) & MODE_MASK;
370
+ if ((curr == mode) || (mode == MODE_RX && curr == MODE_RX_FS)) {
371
+ if (mode == MODE_SLEEP) {
372
+ this->write_register_(REG_OP_MODE, modulation | mode);
373
+ }
374
+ break;
375
+ }
376
+ if (millis() - start > 20) {
377
+ ESP_LOGE(TAG, "Set mode failure");
378
+ this->mark_failed();
379
+ break;
380
+ }
381
+ }
382
+ }
383
+
384
+ void SX127x::set_mode_rx() {
385
+ this->set_mode_(this->modulation_, MODE_RX);
386
+ if (this->modulation_ == MOD_LORA) {
387
+ this->write_register_(REG_IRQ_FLAGS_MASK, 0x00);
388
+ this->write_register_(REG_DIO_MAPPING1, DIO0_MAPPING_00);
389
+ }
390
+ }
391
+
392
+ void SX127x::set_mode_tx() {
393
+ this->set_mode_(this->modulation_, MODE_TX);
394
+ if (this->modulation_ == MOD_LORA) {
395
+ this->write_register_(REG_IRQ_FLAGS_MASK, 0x00);
396
+ this->write_register_(REG_DIO_MAPPING1, DIO0_MAPPING_01);
397
+ }
398
+ }
399
+
400
+ void SX127x::set_mode_standby() { this->set_mode_(this->modulation_, MODE_STDBY); }
401
+
402
+ void SX127x::set_mode_sleep() { this->set_mode_(this->modulation_, MODE_SLEEP); }
403
+
404
+ void SX127x::dump_config() {
405
+ ESP_LOGCONFIG(TAG, "SX127x:");
406
+ LOG_PIN(" CS Pin: ", this->cs_);
407
+ LOG_PIN(" RST Pin: ", this->rst_pin_);
408
+ LOG_PIN(" DIO0 Pin: ", this->dio0_pin_);
409
+ const char *pa_pin = "RFO";
410
+ if (this->pa_pin_ == PA_PIN_BOOST) {
411
+ pa_pin = "BOOST";
412
+ }
413
+ ESP_LOGCONFIG(TAG,
414
+ " Auto Cal: %s\n"
415
+ " Frequency: %" PRIu32 " Hz\n"
416
+ " Bandwidth: %" PRIu32 " Hz\n"
417
+ " PA Pin: %s\n"
418
+ " PA Power: %" PRIu8 " dBm\n"
419
+ " PA Ramp: %" PRIu16 " us",
420
+ TRUEFALSE(this->auto_cal_), this->frequency_, BW_HZ[this->bandwidth_], pa_pin, this->pa_power_,
421
+ RAMP[this->pa_ramp_]);
422
+ if (this->modulation_ == MOD_FSK) {
423
+ ESP_LOGCONFIG(TAG, " Deviation: %" PRIu32 " Hz", this->deviation_);
424
+ }
425
+ if (this->modulation_ == MOD_LORA) {
426
+ const char *cr = "4/8";
427
+ if (this->coding_rate_ == CODING_RATE_4_5) {
428
+ cr = "4/5";
429
+ } else if (this->coding_rate_ == CODING_RATE_4_6) {
430
+ cr = "4/6";
431
+ } else if (this->coding_rate_ == CODING_RATE_4_7) {
432
+ cr = "4/7";
433
+ }
434
+ ESP_LOGCONFIG(TAG,
435
+ " Modulation: LORA\n"
436
+ " Preamble Size: %" PRIu16 "\n"
437
+ " Spreading Factor: %" PRIu8 "\n"
438
+ " Coding Rate: %s\n"
439
+ " CRC Enable: %s",
440
+ this->preamble_size_, this->spreading_factor_, cr, TRUEFALSE(this->crc_enable_));
441
+ if (this->payload_length_ > 0) {
442
+ ESP_LOGCONFIG(TAG, " Payload Length: %" PRIu32, this->payload_length_);
443
+ }
444
+ if (!this->sync_value_.empty()) {
445
+ ESP_LOGCONFIG(TAG, " Sync Value: 0x%02x", this->sync_value_[0]);
446
+ }
447
+ } else {
448
+ const char *shaping = "NONE";
449
+ if (this->modulation_ == MOD_FSK) {
450
+ if (this->shaping_ == GAUSSIAN_BT_0_3) {
451
+ shaping = "GAUSSIAN_BT_0_3";
452
+ } else if (this->shaping_ == GAUSSIAN_BT_0_5) {
453
+ shaping = "GAUSSIAN_BT_0_5";
454
+ } else if (this->shaping_ == GAUSSIAN_BT_1_0) {
455
+ shaping = "GAUSSIAN_BT_1_0";
456
+ }
457
+ } else {
458
+ if (this->shaping_ == CUTOFF_BR_X_2) {
459
+ shaping = "CUTOFF_BR_X_2";
460
+ } else if (this->shaping_ == CUTOFF_BR_X_1) {
461
+ shaping = "CUTOFF_BR_X_1";
462
+ }
463
+ }
464
+ ESP_LOGCONFIG(TAG,
465
+ " Shaping: %s\n"
466
+ " Modulation: %s\n"
467
+ " Bitrate: %" PRIu32 "b/s\n"
468
+ " Bitsync: %s\n"
469
+ " Rx Start: %s\n"
470
+ " Rx Floor: %.1f dBm\n"
471
+ " Packet Mode: %s",
472
+ shaping, this->modulation_ == MOD_FSK ? "FSK" : "OOK", this->bitrate_, TRUEFALSE(this->bitsync_),
473
+ TRUEFALSE(this->rx_start_), this->rx_floor_, TRUEFALSE(this->packet_mode_));
474
+ if (this->packet_mode_) {
475
+ ESP_LOGCONFIG(TAG, " CRC Enable: %s", TRUEFALSE(this->crc_enable_));
476
+ }
477
+ if (this->payload_length_ > 0) {
478
+ ESP_LOGCONFIG(TAG, " Payload Length: %" PRIu32, this->payload_length_);
479
+ }
480
+ if (!this->sync_value_.empty()) {
481
+ ESP_LOGCONFIG(TAG, " Sync Value: 0x%s", format_hex(this->sync_value_).c_str());
482
+ }
483
+ if (this->preamble_size_ > 0 || this->preamble_detect_ > 0) {
484
+ ESP_LOGCONFIG(TAG,
485
+ " Preamble Polarity: 0x%X\n"
486
+ " Preamble Size: %" PRIu16 "\n"
487
+ " Preamble Detect: %" PRIu8 "\n"
488
+ " Preamble Errors: %" PRIu8,
489
+ this->preamble_polarity_, this->preamble_size_, this->preamble_detect_, this->preamble_errors_);
490
+ }
491
+ }
492
+ if (this->is_failed()) {
493
+ ESP_LOGE(TAG, "Configuring SX127x failed");
494
+ }
495
+ }
496
+
497
+ } // namespace sx127x
498
+ } // namespace esphome
@@ -0,0 +1,128 @@
1
+ #pragma once
2
+
3
+ #include "sx127x_reg.h"
4
+ #include "esphome/components/spi/spi.h"
5
+ #include "esphome/core/automation.h"
6
+ #include "esphome/core/component.h"
7
+ #include <vector>
8
+
9
+ namespace esphome {
10
+ namespace sx127x {
11
+
12
+ enum SX127xBw : uint8_t {
13
+ SX127X_BW_2_6,
14
+ SX127X_BW_3_1,
15
+ SX127X_BW_3_9,
16
+ SX127X_BW_5_2,
17
+ SX127X_BW_6_3,
18
+ SX127X_BW_7_8,
19
+ SX127X_BW_10_4,
20
+ SX127X_BW_12_5,
21
+ SX127X_BW_15_6,
22
+ SX127X_BW_20_8,
23
+ SX127X_BW_25_0,
24
+ SX127X_BW_31_3,
25
+ SX127X_BW_41_7,
26
+ SX127X_BW_50_0,
27
+ SX127X_BW_62_5,
28
+ SX127X_BW_83_3,
29
+ SX127X_BW_100_0,
30
+ SX127X_BW_125_0,
31
+ SX127X_BW_166_7,
32
+ SX127X_BW_200_0,
33
+ SX127X_BW_250_0,
34
+ SX127X_BW_500_0,
35
+ };
36
+
37
+ enum class SX127xError { NONE = 0, TIMEOUT, INVALID_PARAMS };
38
+
39
+ class SX127xListener {
40
+ public:
41
+ virtual void on_packet(const std::vector<uint8_t> &packet, float rssi, float snr) = 0;
42
+ };
43
+
44
+ class SX127x : public Component,
45
+ public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
46
+ spi::DATA_RATE_8MHZ> {
47
+ public:
48
+ size_t get_max_packet_size();
49
+ float get_setup_priority() const override { return setup_priority::PROCESSOR; }
50
+ void setup() override;
51
+ void loop() override;
52
+ void dump_config() override;
53
+ void set_auto_cal(bool auto_cal) { this->auto_cal_ = auto_cal; }
54
+ void set_bandwidth(SX127xBw bandwidth) { this->bandwidth_ = bandwidth; }
55
+ void set_bitrate(uint32_t bitrate) { this->bitrate_ = bitrate; }
56
+ void set_bitsync(bool bitsync) { this->bitsync_ = bitsync; }
57
+ void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
58
+ void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
59
+ void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
60
+ void set_dio0_pin(InternalGPIOPin *dio0_pin) { this->dio0_pin_ = dio0_pin; }
61
+ void set_frequency(uint32_t frequency) { this->frequency_ = frequency; }
62
+ void set_mode_rx();
63
+ void set_mode_tx();
64
+ void set_mode_standby();
65
+ void set_mode_sleep();
66
+ void set_modulation(uint8_t modulation) { this->modulation_ = modulation; }
67
+ void set_pa_pin(uint8_t pin) { this->pa_pin_ = pin; }
68
+ void set_pa_power(uint8_t power) { this->pa_power_ = power; }
69
+ void set_pa_ramp(uint8_t ramp) { this->pa_ramp_ = ramp; }
70
+ void set_packet_mode(bool packet_mode) { this->packet_mode_ = packet_mode; }
71
+ void set_payload_length(uint8_t payload_length) { this->payload_length_ = payload_length; }
72
+ void set_preamble_errors(uint8_t preamble_errors) { this->preamble_errors_ = preamble_errors; }
73
+ void set_preamble_polarity(uint8_t preamble_polarity) { this->preamble_polarity_ = preamble_polarity; }
74
+ void set_preamble_size(uint16_t preamble_size) { this->preamble_size_ = preamble_size; }
75
+ void set_preamble_detect(uint8_t preamble_detect) { this->preamble_detect_ = preamble_detect; }
76
+ void set_rst_pin(InternalGPIOPin *rst_pin) { this->rst_pin_ = rst_pin; }
77
+ void set_rx_floor(float floor) { this->rx_floor_ = floor; }
78
+ void set_rx_start(bool start) { this->rx_start_ = start; }
79
+ void set_shaping(uint8_t shaping) { this->shaping_ = shaping; }
80
+ void set_spreading_factor(uint8_t spreading_factor) { this->spreading_factor_ = spreading_factor; }
81
+ void set_sync_value(const std::vector<uint8_t> &sync_value) { this->sync_value_ = sync_value; }
82
+ void run_image_cal();
83
+ void configure();
84
+ SX127xError transmit_packet(const std::vector<uint8_t> &packet);
85
+ void register_listener(SX127xListener *listener) { this->listeners_.push_back(listener); }
86
+ Trigger<std::vector<uint8_t>, float, float> *get_packet_trigger() const { return this->packet_trigger_; };
87
+
88
+ protected:
89
+ void configure_fsk_ook_();
90
+ void configure_lora_();
91
+ void set_mode_(uint8_t modulation, uint8_t mode);
92
+ void write_fifo_(const std::vector<uint8_t> &packet);
93
+ void read_fifo_(std::vector<uint8_t> &packet);
94
+ void write_register_(uint8_t reg, uint8_t value);
95
+ void call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr);
96
+ uint8_t read_register_(uint8_t reg);
97
+ Trigger<std::vector<uint8_t>, float, float> *packet_trigger_{new Trigger<std::vector<uint8_t>, float, float>()};
98
+ std::vector<SX127xListener *> listeners_;
99
+ std::vector<uint8_t> packet_;
100
+ std::vector<uint8_t> sync_value_;
101
+ InternalGPIOPin *dio0_pin_{nullptr};
102
+ InternalGPIOPin *rst_pin_{nullptr};
103
+ SX127xBw bandwidth_;
104
+ uint32_t bitrate_;
105
+ uint32_t deviation_;
106
+ uint32_t frequency_;
107
+ uint32_t payload_length_;
108
+ uint16_t preamble_size_;
109
+ uint8_t coding_rate_;
110
+ uint8_t modulation_;
111
+ uint8_t pa_pin_;
112
+ uint8_t pa_power_;
113
+ uint8_t pa_ramp_;
114
+ uint8_t preamble_detect_;
115
+ uint8_t preamble_errors_;
116
+ uint8_t preamble_polarity_;
117
+ uint8_t shaping_;
118
+ uint8_t spreading_factor_;
119
+ float rx_floor_;
120
+ bool auto_cal_{false};
121
+ bool bitsync_{false};
122
+ bool crc_enable_{false};
123
+ bool packet_mode_{false};
124
+ bool rx_start_{false};
125
+ };
126
+
127
+ } // namespace sx127x
128
+ } // namespace esphome