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,523 @@
1
+ #include "sx126x.h"
2
+ #include "esphome/core/hal.h"
3
+ #include "esphome/core/log.h"
4
+
5
+ namespace esphome {
6
+ namespace sx126x {
7
+
8
+ static const char *const TAG = "sx126x";
9
+ static const uint16_t RAMP[8] = {10, 20, 40, 80, 200, 800, 1700, 3400};
10
+ static const uint32_t BW_HZ[31] = {4800, 5800, 7300, 9700, 11700, 14600, 19500, 23400, 29300, 39000, 46900,
11
+ 58600, 78200, 93800, 117300, 156200, 187200, 234300, 312000, 373600, 467000, 7810,
12
+ 10420, 15630, 20830, 31250, 41670, 62500, 125000, 250000, 500000};
13
+ static const uint8_t BW_LORA[10] = {LORA_BW_7810, LORA_BW_10420, LORA_BW_15630, LORA_BW_20830, LORA_BW_31250,
14
+ LORA_BW_41670, LORA_BW_62500, LORA_BW_125000, LORA_BW_250000, LORA_BW_500000};
15
+ static const uint8_t BW_FSK[21] = {
16
+ FSK_BW_4800, FSK_BW_5800, FSK_BW_7300, FSK_BW_9700, FSK_BW_11700, FSK_BW_14600, FSK_BW_19500,
17
+ FSK_BW_23400, FSK_BW_29300, FSK_BW_39000, FSK_BW_46900, FSK_BW_58600, FSK_BW_78200, FSK_BW_93800,
18
+ FSK_BW_117300, FSK_BW_156200, FSK_BW_187200, FSK_BW_234300, FSK_BW_312000, FSK_BW_373600, FSK_BW_467000};
19
+
20
+ static constexpr uint32_t RESET_DELAY_HIGH_US = 5000;
21
+ static constexpr uint32_t RESET_DELAY_LOW_US = 2000;
22
+ static constexpr uint32_t SWITCHING_DELAY_US = 1;
23
+ static constexpr uint32_t TRANSMIT_TIMEOUT_MS = 4000;
24
+ static constexpr uint32_t BUSY_TIMEOUT_MS = 20;
25
+
26
+ // OCP (Over Current Protection) values
27
+ static constexpr uint8_t OCP_80MA = 0x18; // 80 mA max current
28
+ static constexpr uint8_t OCP_140MA = 0x38; // 140 mA max current
29
+
30
+ // LoRa low data rate optimization threshold
31
+ static constexpr float LOW_DATA_RATE_OPTIMIZE_THRESHOLD = 16.38f; // 16.38 ms
32
+
33
+ uint8_t SX126x::read_fifo_(uint8_t offset, std::vector<uint8_t> &packet) {
34
+ this->wait_busy_();
35
+ this->enable();
36
+ this->transfer_byte(RADIO_READ_BUFFER);
37
+ this->transfer_byte(offset);
38
+ uint8_t status = this->transfer_byte(0x00);
39
+ for (uint8_t &byte : packet) {
40
+ byte = this->transfer_byte(0x00);
41
+ }
42
+ this->disable();
43
+ return status;
44
+ }
45
+
46
+ void SX126x::write_fifo_(uint8_t offset, const std::vector<uint8_t> &packet) {
47
+ this->wait_busy_();
48
+ this->enable();
49
+ this->transfer_byte(RADIO_WRITE_BUFFER);
50
+ this->transfer_byte(offset);
51
+ for (const uint8_t &byte : packet) {
52
+ this->transfer_byte(byte);
53
+ }
54
+ this->disable();
55
+ delayMicroseconds(SWITCHING_DELAY_US);
56
+ }
57
+
58
+ uint8_t SX126x::read_opcode_(uint8_t opcode, uint8_t *data, uint8_t size) {
59
+ this->wait_busy_();
60
+ this->enable();
61
+ this->transfer_byte(opcode);
62
+ uint8_t status = this->transfer_byte(0x00);
63
+ for (int32_t i = 0; i < size; i++) {
64
+ data[i] = this->transfer_byte(0x00);
65
+ }
66
+ this->disable();
67
+ return status;
68
+ }
69
+
70
+ void SX126x::write_opcode_(uint8_t opcode, uint8_t *data, uint8_t size) {
71
+ this->wait_busy_();
72
+ this->enable();
73
+ this->transfer_byte(opcode);
74
+ for (int32_t i = 0; i < size; i++) {
75
+ this->transfer_byte(data[i]);
76
+ }
77
+ this->disable();
78
+ delayMicroseconds(SWITCHING_DELAY_US);
79
+ }
80
+
81
+ void SX126x::read_register_(uint16_t reg, uint8_t *data, uint8_t size) {
82
+ this->wait_busy_();
83
+ this->enable();
84
+ this->write_byte(RADIO_READ_REGISTER);
85
+ this->write_byte((reg >> 8) & 0xFF);
86
+ this->write_byte((reg >> 0) & 0xFF);
87
+ this->write_byte(0x00);
88
+ for (int32_t i = 0; i < size; i++) {
89
+ data[i] = this->transfer_byte(0x00);
90
+ }
91
+ this->disable();
92
+ }
93
+
94
+ void SX126x::write_register_(uint16_t reg, uint8_t *data, uint8_t size) {
95
+ this->wait_busy_();
96
+ this->enable();
97
+ this->write_byte(RADIO_WRITE_REGISTER);
98
+ this->write_byte((reg >> 8) & 0xFF);
99
+ this->write_byte((reg >> 0) & 0xFF);
100
+ for (int32_t i = 0; i < size; i++) {
101
+ this->transfer_byte(data[i]);
102
+ }
103
+ this->disable();
104
+ delayMicroseconds(SWITCHING_DELAY_US);
105
+ }
106
+
107
+ void SX126x::setup() {
108
+ ESP_LOGCONFIG(TAG, "Running setup");
109
+
110
+ // setup pins
111
+ this->busy_pin_->setup();
112
+ this->rst_pin_->setup();
113
+ this->dio1_pin_->setup();
114
+
115
+ // start spi
116
+ this->spi_setup();
117
+
118
+ // configure rf
119
+ this->configure();
120
+ }
121
+
122
+ void SX126x::configure() {
123
+ uint8_t buf[8];
124
+
125
+ // toggle chip reset
126
+ this->rst_pin_->digital_write(true);
127
+ delayMicroseconds(RESET_DELAY_HIGH_US);
128
+ this->rst_pin_->digital_write(false);
129
+ delayMicroseconds(RESET_DELAY_LOW_US);
130
+ this->rst_pin_->digital_write(true);
131
+ delayMicroseconds(RESET_DELAY_HIGH_US);
132
+
133
+ // wakeup
134
+ this->read_opcode_(RADIO_GET_STATUS, nullptr, 0);
135
+
136
+ // config tcxo
137
+ if (this->tcxo_voltage_ != TCXO_CTRL_NONE) {
138
+ uint32_t delay = this->tcxo_delay_ >> 6;
139
+ buf[0] = this->tcxo_voltage_;
140
+ buf[1] = (delay >> 16) & 0xFF;
141
+ buf[2] = (delay >> 8) & 0xFF;
142
+ buf[3] = (delay >> 0) & 0xFF;
143
+ this->write_opcode_(RADIO_SET_TCXOMODE, buf, 4);
144
+ buf[0] = 0x7F;
145
+ this->write_opcode_(RADIO_CALIBRATE, buf, 1);
146
+ }
147
+
148
+ // clear errors
149
+ buf[0] = 0x00;
150
+ buf[1] = 0x00;
151
+ this->write_opcode_(RADIO_CLR_ERROR, buf, 2);
152
+
153
+ // rf switch
154
+ if (this->rf_switch_) {
155
+ buf[0] = 0x01;
156
+ this->write_opcode_(RADIO_SET_RFSWITCHMODE, buf, 1);
157
+ }
158
+
159
+ // check silicon version to make sure hw is ok
160
+ this->read_register_(REG_VERSION_STRING, (uint8_t *) this->version_, 16);
161
+ if (strncmp(this->version_, "SX126", 5) != 0 && strncmp(this->version_, "LLCC68", 6) != 0) {
162
+ this->mark_failed();
163
+ return;
164
+ }
165
+
166
+ // setup packet type
167
+ buf[0] = this->modulation_;
168
+ this->write_opcode_(RADIO_SET_PACKETTYPE, buf, 1);
169
+
170
+ // calibrate image
171
+ this->run_image_cal();
172
+
173
+ // set frequency
174
+ uint64_t freq = ((uint64_t) this->frequency_ << 25) / XTAL_FREQ;
175
+ buf[0] = (uint8_t) ((freq >> 24) & 0xFF);
176
+ buf[1] = (uint8_t) ((freq >> 16) & 0xFF);
177
+ buf[2] = (uint8_t) ((freq >> 8) & 0xFF);
178
+ buf[3] = (uint8_t) (freq & 0xFF);
179
+ this->write_opcode_(RADIO_SET_RFFREQUENCY, buf, 4);
180
+
181
+ // configure pa
182
+ int8_t pa_power = this->pa_power_;
183
+ if (this->hw_version_ == "sx1261") {
184
+ // the following values were taken from section 13.1.14.1 table 13-21
185
+ // in rev 2.1 of the datasheet
186
+ if (pa_power == 15) {
187
+ uint8_t cfg[4] = {0x06, 0x00, 0x01, 0x01};
188
+ this->write_opcode_(RADIO_SET_PACONFIG, cfg, 4);
189
+ } else {
190
+ uint8_t cfg[4] = {0x04, 0x00, 0x01, 0x01};
191
+ this->write_opcode_(RADIO_SET_PACONFIG, cfg, 4);
192
+ }
193
+ pa_power = std::max(pa_power, (int8_t) -3);
194
+ pa_power = std::min(pa_power, (int8_t) 14);
195
+ buf[0] = OCP_80MA;
196
+ this->write_register_(REG_OCP, buf, 1);
197
+ } else {
198
+ // the following values were taken from section 13.1.14.1 table 13-21
199
+ // in rev 2.1 of the datasheet
200
+ uint8_t cfg[4] = {0x04, 0x07, 0x00, 0x01};
201
+ this->write_opcode_(RADIO_SET_PACONFIG, cfg, 4);
202
+ pa_power = std::max(pa_power, (int8_t) -3);
203
+ pa_power = std::min(pa_power, (int8_t) 22);
204
+ buf[0] = OCP_140MA;
205
+ this->write_register_(REG_OCP, buf, 1);
206
+ }
207
+ buf[0] = pa_power;
208
+ buf[1] = this->pa_ramp_;
209
+ this->write_opcode_(RADIO_SET_TXPARAMS, buf, 2);
210
+
211
+ // configure modem
212
+ if (this->modulation_ == PACKET_TYPE_LORA) {
213
+ // set modulation params
214
+ float duration = 1000.0f * std::pow(2, this->spreading_factor_) / BW_HZ[this->bandwidth_];
215
+ buf[0] = this->spreading_factor_;
216
+ buf[1] = BW_LORA[this->bandwidth_ - SX126X_BW_7810];
217
+ buf[2] = this->coding_rate_;
218
+ buf[3] = (duration > LOW_DATA_RATE_OPTIMIZE_THRESHOLD) ? 0x01 : 0x00;
219
+ this->write_opcode_(RADIO_SET_MODULATIONPARAMS, buf, 4);
220
+
221
+ // set packet params and sync word
222
+ this->set_packet_params_(this->payload_length_);
223
+ if (this->sync_value_.size() == 2) {
224
+ this->write_register_(REG_LORA_SYNCWORD, this->sync_value_.data(), this->sync_value_.size());
225
+ }
226
+ } else {
227
+ // set modulation params
228
+ uint32_t bitrate = ((uint64_t) XTAL_FREQ * 32) / this->bitrate_;
229
+ uint32_t fdev = ((uint64_t) this->deviation_ << 25) / XTAL_FREQ;
230
+ buf[0] = (bitrate >> 16) & 0xFF;
231
+ buf[1] = (bitrate >> 8) & 0xFF;
232
+ buf[2] = (bitrate >> 0) & 0xFF;
233
+ buf[3] = this->shaping_;
234
+ buf[4] = BW_FSK[this->bandwidth_ - SX126X_BW_4800];
235
+ buf[5] = (fdev >> 16) & 0xFF;
236
+ buf[6] = (fdev >> 8) & 0xFF;
237
+ buf[7] = (fdev >> 0) & 0xFF;
238
+ this->write_opcode_(RADIO_SET_MODULATIONPARAMS, buf, 8);
239
+
240
+ // set packet params and sync word
241
+ this->set_packet_params_(this->payload_length_);
242
+ if (!this->sync_value_.empty()) {
243
+ this->write_register_(REG_GFSK_SYNCWORD, this->sync_value_.data(), this->sync_value_.size());
244
+ }
245
+ }
246
+
247
+ // switch to rx or sleep
248
+ if (this->rx_start_) {
249
+ this->set_mode_rx();
250
+ } else {
251
+ this->set_mode_sleep();
252
+ }
253
+ }
254
+
255
+ size_t SX126x::get_max_packet_size() {
256
+ if (this->payload_length_ > 0) {
257
+ return this->payload_length_;
258
+ }
259
+ return 255;
260
+ }
261
+
262
+ void SX126x::set_packet_params_(uint8_t payload_length) {
263
+ uint8_t buf[9];
264
+ if (this->modulation_ == PACKET_TYPE_LORA) {
265
+ buf[0] = (this->preamble_size_ >> 8) & 0xFF;
266
+ buf[1] = (this->preamble_size_ >> 0) & 0xFF;
267
+ buf[2] = (this->payload_length_ > 0) ? 0x01 : 0x00;
268
+ buf[3] = payload_length;
269
+ buf[4] = (this->crc_enable_) ? 0x01 : 0x00;
270
+ buf[5] = 0x00;
271
+ this->write_opcode_(RADIO_SET_PACKETPARAMS, buf, 6);
272
+ } else {
273
+ uint16_t preamble_size = this->preamble_size_ * 8;
274
+ buf[0] = (preamble_size >> 8) & 0xFF;
275
+ buf[1] = (preamble_size >> 0) & 0xFF;
276
+ buf[2] = (this->preamble_detect_ > 0) ? ((this->preamble_detect_ - 1) | 0x04) : 0x00;
277
+ buf[3] = this->sync_value_.size() * 8;
278
+ buf[4] = 0x00;
279
+ buf[5] = 0x00;
280
+ buf[6] = payload_length;
281
+ buf[7] = this->crc_enable_ ? 0x06 : 0x01;
282
+ buf[8] = 0x00;
283
+ this->write_opcode_(RADIO_SET_PACKETPARAMS, buf, 9);
284
+ }
285
+ }
286
+
287
+ SX126xError SX126x::transmit_packet(const std::vector<uint8_t> &packet) {
288
+ if (this->payload_length_ > 0 && this->payload_length_ != packet.size()) {
289
+ ESP_LOGE(TAG, "Packet size does not match config");
290
+ return SX126xError::INVALID_PARAMS;
291
+ }
292
+ if (packet.empty() || packet.size() > this->get_max_packet_size()) {
293
+ ESP_LOGE(TAG, "Packet size out of range");
294
+ return SX126xError::INVALID_PARAMS;
295
+ }
296
+
297
+ SX126xError ret = SX126xError::NONE;
298
+ this->set_mode_standby(STDBY_XOSC);
299
+ if (this->payload_length_ == 0) {
300
+ this->set_packet_params_(packet.size());
301
+ }
302
+ this->write_fifo_(0x00, packet);
303
+ this->set_mode_tx();
304
+
305
+ // wait until transmit completes, typically the delay will be less than 100 ms
306
+ uint32_t start = millis();
307
+ while (!this->dio1_pin_->digital_read()) {
308
+ if (millis() - start > TRANSMIT_TIMEOUT_MS) {
309
+ ESP_LOGE(TAG, "Transmit packet failure");
310
+ ret = SX126xError::TIMEOUT;
311
+ break;
312
+ }
313
+ }
314
+
315
+ uint8_t buf[2];
316
+ buf[0] = 0xFF;
317
+ buf[1] = 0xFF;
318
+ this->write_opcode_(RADIO_CLR_IRQSTATUS, buf, 2);
319
+ if (this->rx_start_) {
320
+ this->set_mode_rx();
321
+ } else {
322
+ this->set_mode_sleep();
323
+ }
324
+ return ret;
325
+ }
326
+
327
+ void SX126x::call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr) {
328
+ for (auto &listener : this->listeners_) {
329
+ listener->on_packet(packet, rssi, snr);
330
+ }
331
+ this->packet_trigger_->trigger(packet, rssi, snr);
332
+ }
333
+
334
+ void SX126x::loop() {
335
+ if (!this->dio1_pin_->digital_read()) {
336
+ return;
337
+ }
338
+
339
+ uint16_t status;
340
+ uint8_t buf[3];
341
+ uint8_t rssi;
342
+ int8_t snr;
343
+ this->read_opcode_(RADIO_GET_IRQSTATUS, buf, 2);
344
+ this->write_opcode_(RADIO_CLR_IRQSTATUS, buf, 2);
345
+ status = (buf[0] << 8) | buf[1];
346
+ if ((status & IRQ_RX_DONE) == IRQ_RX_DONE) {
347
+ if ((status & IRQ_CRC_ERROR) != IRQ_CRC_ERROR) {
348
+ this->read_opcode_(RADIO_GET_PACKETSTATUS, buf, 3);
349
+ if (this->modulation_ == PACKET_TYPE_LORA) {
350
+ rssi = buf[0];
351
+ snr = buf[1];
352
+ } else {
353
+ rssi = buf[2];
354
+ snr = 0;
355
+ }
356
+ this->read_opcode_(RADIO_GET_RXBUFFERSTATUS, buf, 2);
357
+ this->packet_.resize(buf[0]);
358
+ this->read_fifo_(buf[1], this->packet_);
359
+ this->call_listeners_(this->packet_, (float) rssi / -2.0f, (float) snr / 4.0f);
360
+ }
361
+ }
362
+ }
363
+
364
+ void SX126x::run_image_cal() {
365
+ // the following values were taken from section 9.2.1 table 9-2
366
+ // in rev 2.1 of the datasheet
367
+ uint8_t buf[2] = {0, 0};
368
+ if (this->frequency_ > 900000000) {
369
+ buf[0] = 0xE1;
370
+ buf[1] = 0xE9;
371
+ } else if (this->frequency_ > 850000000) {
372
+ buf[0] = 0xD7;
373
+ buf[1] = 0xD8;
374
+ } else if (this->frequency_ > 770000000) {
375
+ buf[0] = 0xC1;
376
+ buf[1] = 0xC5;
377
+ } else if (this->frequency_ > 460000000) {
378
+ buf[0] = 0x75;
379
+ buf[1] = 0x81;
380
+ } else if (this->frequency_ > 425000000) {
381
+ buf[0] = 0x6B;
382
+ buf[1] = 0x6F;
383
+ }
384
+ if (buf[0] > 0 && buf[1] > 0) {
385
+ this->write_opcode_(RADIO_CALIBRATEIMAGE, buf, 2);
386
+ }
387
+ }
388
+
389
+ void SX126x::set_mode_rx() {
390
+ uint8_t buf[8];
391
+
392
+ // configure irq params
393
+ uint16_t irq = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_CRC_ERROR;
394
+ buf[0] = (irq >> 8) & 0xFF;
395
+ buf[1] = (irq >> 0) & 0xFF;
396
+ buf[2] = (irq >> 8) & 0xFF;
397
+ buf[3] = (irq >> 0) & 0xFF;
398
+ buf[4] = (IRQ_RADIO_NONE >> 8) & 0xFF;
399
+ buf[5] = (IRQ_RADIO_NONE >> 0) & 0xFF;
400
+ buf[6] = (IRQ_RADIO_NONE >> 8) & 0xFF;
401
+ buf[7] = (IRQ_RADIO_NONE >> 0) & 0xFF;
402
+ this->write_opcode_(RADIO_SET_DIOIRQPARAMS, buf, 8);
403
+
404
+ // set timeout to 0
405
+ buf[0] = 0x00;
406
+ this->write_opcode_(RADIO_SET_LORASYMBTIMEOUT, buf, 1);
407
+
408
+ // switch to continuous mode rx
409
+ buf[0] = 0xFF;
410
+ buf[1] = 0xFF;
411
+ buf[2] = 0xFF;
412
+ this->write_opcode_(RADIO_SET_RX, buf, 3);
413
+ }
414
+
415
+ void SX126x::set_mode_tx() {
416
+ uint8_t buf[8];
417
+
418
+ // configure irq params
419
+ uint16_t irq = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT;
420
+ buf[0] = (irq >> 8) & 0xFF;
421
+ buf[1] = (irq >> 0) & 0xFF;
422
+ buf[2] = (irq >> 8) & 0xFF;
423
+ buf[3] = (irq >> 0) & 0xFF;
424
+ buf[4] = (IRQ_RADIO_NONE >> 8) & 0xFF;
425
+ buf[5] = (IRQ_RADIO_NONE >> 0) & 0xFF;
426
+ buf[6] = (IRQ_RADIO_NONE >> 8) & 0xFF;
427
+ buf[7] = (IRQ_RADIO_NONE >> 0) & 0xFF;
428
+ this->write_opcode_(RADIO_SET_DIOIRQPARAMS, buf, 8);
429
+
430
+ // switch to single mode tx
431
+ buf[0] = 0x00;
432
+ buf[1] = 0x00;
433
+ buf[2] = 0x00;
434
+ this->write_opcode_(RADIO_SET_TX, buf, 3);
435
+ }
436
+
437
+ void SX126x::set_mode_sleep() {
438
+ uint8_t buf[1];
439
+ buf[0] = 0x05;
440
+ this->write_opcode_(RADIO_SET_SLEEP, buf, 1);
441
+ }
442
+
443
+ void SX126x::set_mode_standby(SX126xStandbyMode mode) {
444
+ uint8_t buf[1];
445
+ buf[0] = mode;
446
+ this->write_opcode_(RADIO_SET_STANDBY, buf, 1);
447
+ }
448
+
449
+ void SX126x::wait_busy_() {
450
+ // wait if the device is busy, the maximum delay is only be a few ms
451
+ // with most commands taking only a few us
452
+ uint32_t start = millis();
453
+ while (this->busy_pin_->digital_read()) {
454
+ if (millis() - start > BUSY_TIMEOUT_MS) {
455
+ ESP_LOGE(TAG, "Wait busy timeout");
456
+ this->mark_failed();
457
+ break;
458
+ }
459
+ }
460
+ }
461
+
462
+ void SX126x::dump_config() {
463
+ ESP_LOGCONFIG(TAG, "SX126x:");
464
+ LOG_PIN(" CS Pin: ", this->cs_);
465
+ LOG_PIN(" BUSY Pin: ", this->busy_pin_);
466
+ LOG_PIN(" RST Pin: ", this->rst_pin_);
467
+ LOG_PIN(" DIO1 Pin: ", this->dio1_pin_);
468
+ ESP_LOGCONFIG(TAG,
469
+ " HW Version: %15s\n"
470
+ " Frequency: %" PRIu32 " Hz\n"
471
+ " Bandwidth: %" PRIu32 " Hz\n"
472
+ " PA Power: %" PRId8 " dBm\n"
473
+ " PA Ramp: %" PRIu16 " us\n"
474
+ " Payload Length: %" PRIu32 "\n"
475
+ " CRC Enable: %s\n"
476
+ " Rx Start: %s",
477
+ this->version_, this->frequency_, BW_HZ[this->bandwidth_], this->pa_power_, RAMP[this->pa_ramp_],
478
+ this->payload_length_, TRUEFALSE(this->crc_enable_), TRUEFALSE(this->rx_start_));
479
+ if (this->modulation_ == PACKET_TYPE_GFSK) {
480
+ const char *shaping = "NONE";
481
+ if (this->shaping_ == GAUSSIAN_BT_0_3) {
482
+ shaping = "GAUSSIAN_BT_0_3";
483
+ } else if (this->shaping_ == GAUSSIAN_BT_0_5) {
484
+ shaping = "GAUSSIAN_BT_0_5";
485
+ } else if (this->shaping_ == GAUSSIAN_BT_0_7) {
486
+ shaping = "GAUSSIAN_BT_0_7";
487
+ } else if (this->shaping_ == GAUSSIAN_BT_1_0) {
488
+ shaping = "GAUSSIAN_BT_1_0";
489
+ }
490
+ ESP_LOGCONFIG(TAG,
491
+ " Modulation: FSK\n"
492
+ " Deviation: %" PRIu32 " Hz\n"
493
+ " Shaping: %s\n"
494
+ " Preamble Size: %" PRIu16 "\n"
495
+ " Preamble Detect: %" PRIu16 "\n"
496
+ " Bitrate: %" PRIu32 "b/s",
497
+ this->deviation_, shaping, this->preamble_size_, this->preamble_detect_, this->bitrate_);
498
+ } else if (this->modulation_ == PACKET_TYPE_LORA) {
499
+ const char *cr = "4/8";
500
+ if (this->coding_rate_ == LORA_CR_4_5) {
501
+ cr = "4/5";
502
+ } else if (this->coding_rate_ == LORA_CR_4_6) {
503
+ cr = "4/6";
504
+ } else if (this->coding_rate_ == LORA_CR_4_7) {
505
+ cr = "4/7";
506
+ }
507
+ ESP_LOGCONFIG(TAG,
508
+ " Modulation: LORA\n"
509
+ " Spreading Factor: %" PRIu8 "\n"
510
+ " Coding Rate: %s\n"
511
+ " Preamble Size: %" PRIu16,
512
+ this->spreading_factor_, cr, this->preamble_size_);
513
+ }
514
+ if (!this->sync_value_.empty()) {
515
+ ESP_LOGCONFIG(TAG, " Sync Value: 0x%s", format_hex(this->sync_value_).c_str());
516
+ }
517
+ if (this->is_failed()) {
518
+ ESP_LOGE(TAG, "Configuring SX126x failed");
519
+ }
520
+ }
521
+
522
+ } // namespace sx126x
523
+ } // namespace esphome
@@ -0,0 +1,140 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/spi/spi.h"
4
+ #include "esphome/core/automation.h"
5
+ #include "esphome/core/component.h"
6
+ #include "sx126x_reg.h"
7
+ #include <utility>
8
+ #include <vector>
9
+
10
+ namespace esphome {
11
+ namespace sx126x {
12
+
13
+ enum SX126xBw : uint8_t {
14
+ // FSK
15
+ SX126X_BW_4800,
16
+ SX126X_BW_5800,
17
+ SX126X_BW_7300,
18
+ SX126X_BW_9700,
19
+ SX126X_BW_11700,
20
+ SX126X_BW_14600,
21
+ SX126X_BW_19500,
22
+ SX126X_BW_23400,
23
+ SX126X_BW_29300,
24
+ SX126X_BW_39000,
25
+ SX126X_BW_46900,
26
+ SX126X_BW_58600,
27
+ SX126X_BW_78200,
28
+ SX126X_BW_93800,
29
+ SX126X_BW_117300,
30
+ SX126X_BW_156200,
31
+ SX126X_BW_187200,
32
+ SX126X_BW_234300,
33
+ SX126X_BW_312000,
34
+ SX126X_BW_373600,
35
+ SX126X_BW_467000,
36
+ // LORA
37
+ SX126X_BW_7810,
38
+ SX126X_BW_10420,
39
+ SX126X_BW_15630,
40
+ SX126X_BW_20830,
41
+ SX126X_BW_31250,
42
+ SX126X_BW_41670,
43
+ SX126X_BW_62500,
44
+ SX126X_BW_125000,
45
+ SX126X_BW_250000,
46
+ SX126X_BW_500000,
47
+ };
48
+
49
+ enum class SX126xError { NONE = 0, TIMEOUT, INVALID_PARAMS };
50
+
51
+ class SX126xListener {
52
+ public:
53
+ virtual void on_packet(const std::vector<uint8_t> &packet, float rssi, float snr) = 0;
54
+ };
55
+
56
+ class SX126x : public Component,
57
+ public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
58
+ spi::DATA_RATE_8MHZ> {
59
+ public:
60
+ size_t get_max_packet_size();
61
+ float get_setup_priority() const override { return setup_priority::PROCESSOR; }
62
+ void setup() override;
63
+ void loop() override;
64
+ void dump_config() override;
65
+ void set_bandwidth(SX126xBw bandwidth) { this->bandwidth_ = bandwidth; }
66
+ void set_bitrate(uint32_t bitrate) { this->bitrate_ = bitrate; }
67
+ void set_busy_pin(InternalGPIOPin *busy_pin) { this->busy_pin_ = busy_pin; }
68
+ void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
69
+ void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
70
+ void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
71
+ void set_dio1_pin(InternalGPIOPin *dio1_pin) { this->dio1_pin_ = dio1_pin; }
72
+ void set_frequency(uint32_t frequency) { this->frequency_ = frequency; }
73
+ void set_hw_version(const std::string &hw_version) { this->hw_version_ = hw_version; }
74
+ void set_mode_rx();
75
+ void set_mode_tx();
76
+ void set_mode_standby(SX126xStandbyMode mode);
77
+ void set_mode_sleep();
78
+ void set_modulation(uint8_t modulation) { this->modulation_ = modulation; }
79
+ void set_pa_power(int8_t power) { this->pa_power_ = power; }
80
+ void set_pa_ramp(uint8_t ramp) { this->pa_ramp_ = ramp; }
81
+ void set_payload_length(uint8_t payload_length) { this->payload_length_ = payload_length; }
82
+ void set_preamble_detect(uint16_t preamble_detect) { this->preamble_detect_ = preamble_detect; }
83
+ void set_preamble_size(uint16_t preamble_size) { this->preamble_size_ = preamble_size; }
84
+ void set_rst_pin(InternalGPIOPin *rst_pin) { this->rst_pin_ = rst_pin; }
85
+ void set_rx_start(bool rx_start) { this->rx_start_ = rx_start; }
86
+ void set_rf_switch(bool rf_switch) { this->rf_switch_ = rf_switch; }
87
+ void set_shaping(uint8_t shaping) { this->shaping_ = shaping; }
88
+ void set_spreading_factor(uint8_t spreading_factor) { this->spreading_factor_ = spreading_factor; }
89
+ void set_sync_value(const std::vector<uint8_t> &sync_value) { this->sync_value_ = sync_value; }
90
+ void set_tcxo_voltage(uint8_t tcxo_voltage) { this->tcxo_voltage_ = tcxo_voltage; }
91
+ void set_tcxo_delay(uint32_t tcxo_delay) { this->tcxo_delay_ = tcxo_delay; }
92
+ void run_image_cal();
93
+ void configure();
94
+ SX126xError transmit_packet(const std::vector<uint8_t> &packet);
95
+ void register_listener(SX126xListener *listener) { this->listeners_.push_back(listener); }
96
+ Trigger<std::vector<uint8_t>, float, float> *get_packet_trigger() const { return this->packet_trigger_; };
97
+
98
+ protected:
99
+ void configure_fsk_ook_();
100
+ void configure_lora_();
101
+ void set_packet_params_(uint8_t payload_length);
102
+ uint8_t read_fifo_(uint8_t offset, std::vector<uint8_t> &packet);
103
+ void write_fifo_(uint8_t offset, const std::vector<uint8_t> &packet);
104
+ void write_opcode_(uint8_t opcode, uint8_t *data, uint8_t size);
105
+ uint8_t read_opcode_(uint8_t opcode, uint8_t *data, uint8_t size);
106
+ void write_register_(uint16_t reg, uint8_t *data, uint8_t size);
107
+ void read_register_(uint16_t reg, uint8_t *data, uint8_t size);
108
+ void call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr);
109
+ void wait_busy_();
110
+ Trigger<std::vector<uint8_t>, float, float> *packet_trigger_{new Trigger<std::vector<uint8_t>, float, float>()};
111
+ std::vector<SX126xListener *> listeners_;
112
+ std::vector<uint8_t> packet_;
113
+ std::vector<uint8_t> sync_value_;
114
+ InternalGPIOPin *busy_pin_{nullptr};
115
+ InternalGPIOPin *dio1_pin_{nullptr};
116
+ InternalGPIOPin *rst_pin_{nullptr};
117
+ std::string hw_version_;
118
+ char version_[16];
119
+ SX126xBw bandwidth_{SX126X_BW_125000};
120
+ uint32_t bitrate_{0};
121
+ uint32_t deviation_{0};
122
+ uint32_t frequency_{0};
123
+ uint32_t payload_length_{0};
124
+ uint32_t tcxo_delay_{0};
125
+ uint16_t preamble_detect_{0};
126
+ uint16_t preamble_size_{0};
127
+ uint8_t tcxo_voltage_{0};
128
+ uint8_t coding_rate_{0};
129
+ uint8_t modulation_{PACKET_TYPE_LORA};
130
+ uint8_t pa_ramp_{0};
131
+ uint8_t shaping_{0};
132
+ uint8_t spreading_factor_{0};
133
+ int8_t pa_power_{0};
134
+ bool crc_enable_{false};
135
+ bool rx_start_{false};
136
+ bool rf_switch_{false};
137
+ };
138
+
139
+ } // namespace sx126x
140
+ } // namespace esphome