|
Home IO Control
ESPHome add-on for IO-Homecontrol devices
|
Abstract radio driver for IO-Homecontrol. More...
#include <radio_interface.h>
Public Member Functions | |
| RadioDriver (InternalGPIOPin *rst_pin=nullptr) | |
| virtual | ~RadioDriver ()=default |
| virtual bool | init ()=0 |
| Initialize the radio hardware. Returns true on success. | |
| virtual bool | send_packet (const uint8_t *data, uint8_t len, const RadioTxConfig &tx_config)=0 |
| Send a packet using the specified carrier frequency and preamble settings. | |
| virtual bool | wait_for_packet (RadioRxPacket &packet, uint32_t timeout_ms)=0 |
| Wait (blocking) for a packet with timeout. | |
| virtual bool | check_for_packet (RadioRxPacket &packet)=0 |
| Non-blocking check for a received packet. | |
| virtual int16_t | read_rssi ()=0 |
| Read instantaneous RSSI (in dBm) while in RX mode. | |
| virtual void | change_frequency (uint32_t freq_hz)=0 |
| Change the carrier frequency using fast hop (no standby transition needed). | |
| virtual void | set_mode_rx ()=0 |
| Switch to continuous receive mode. | |
| virtual void | set_mode_standby ()=0 |
| Switch to standby mode. | |
| virtual bool | is_failed () const =0 |
| Returns true if the radio failed to initialize or encountered a fatal error. | |
| virtual const char * | chip_name () const =0 |
| Get a human‑readable chip name. | |
| virtual void | dump_debug () |
| Optional chip-specific diagnostics emitted from dump_config. | |
| uint32_t | get_current_freq () const |
| Get the current RF frequency. | |
| const RadioCaptureInfo & | get_last_capture () const |
| Get the most recent radio capture info. | |
| bool | is_dio_fired () const |
| Set by the ISR when DIO fires. | |
| void | clear_dio_fired () |
| void | mark_dio_fired_from_isr () |
Protected Member Functions | |
| void | clear_last_capture_ () |
| Clear the last capture info (resets diagnostic buffer). | |
| void | prepare_blocking_receive_ (RadioRxPacket &packet) |
| Common preamble for blocking receive: clear diagnostics and output packet. | |
| void | prepare_nonblocking_receive_ (RadioRxPacket &packet) |
| Common preamble for non‑blocking receive: clear diagnostics, output packet, and DIO latch. | |
| void | reset_hardware_ () |
| Hardware reset sequence common to all SX chips. | |
| void | populate_capture_base_ (bool blocking_wait, uint32_t freq_hz, int16_t rssi_dbm, const uint8_t *raw, uint8_t raw_len, const uint8_t *frame, uint8_t frame_len) |
| Populate the common fields of RadioCaptureInfo from raw telemetry. | |
Protected Attributes | |
| uint32_t | current_freq_ {FREQ_CH2} |
| RadioCaptureInfo | last_capture_ {} |
| InternalGPIOPin * | rst_pin_ {nullptr} |
| volatile bool | dio_fired_ {false} |
Abstract radio driver for IO-Homecontrol.
Encapsulates all chip-specific operations: initialization, packet TX/RX, frequency control, and mode switching. Concrete implementations (RadioSX1276, RadioSX1262) handle the register-level details for each chip.
Definition at line 91 of file radio_interface.h.
|
inlineexplicit |
Definition at line 93 of file radio_interface.h.
|
virtualdefault |
|
pure virtual |
Change the carrier frequency using fast hop (no standby transition needed).
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
pure virtual |
Non-blocking check for a received packet.
Called from loop(). Returns true if a packet was read into packet. Contract:
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
nodiscardpure virtual |
Get a human‑readable chip name.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
inline |
Definition at line 161 of file radio_interface.h.
|
inlineprotected |
Clear the last capture info (resets diagnostic buffer).
Definition at line 182 of file radio_interface.h.
|
inlinevirtual |
Optional chip-specific diagnostics emitted from dump_config.
Reimplemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
Definition at line 142 of file radio_interface.h.
|
inlinenodiscard |
Get the current RF frequency.
Definition at line 146 of file radio_interface.h.
|
inlinenodiscard |
Get the most recent radio capture info.
Definition at line 149 of file radio_interface.h.
|
pure virtual |
Initialize the radio hardware. Returns true on success.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
inlinenodiscard |
Set by the ISR when DIO fires.
Using access helpers instead of touching the flag directly keeps the ISR/main-loop handoff explicit and lets ESP32 builds use atomic storage.
Definition at line 153 of file radio_interface.h.
|
nodiscardpure virtual |
Returns true if the radio failed to initialize or encountered a fatal error.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
inline |
Definition at line 171 of file radio_interface.h.
|
inlineprotected |
Populate the common fields of RadioCaptureInfo from raw telemetry.
Chip‑specific fields (rx_done, crc_error, irq_flags*, irq_status, packet_status, etc.) must be set by the derived driver after calling this helper.
| blocking_wait | if this was a blocking receive. |
| freq_hz | RF frequency of the capture. |
| rssi_dbm | Received signal strength. |
| raw | Pointer to raw bytes (may be nullptr). |
| raw_len | Length of raw buffer. |
| frame | Pointer to parsed frame bytes (may be nullptr). |
| frame_len | Length of parsed frame. |
Definition at line 213 of file radio_interface.h.
|
inlineprotected |
Common preamble for blocking receive: clear diagnostics and output packet.
| packet | Output packet buffer to zero and prepare. |
Definition at line 186 of file radio_interface.h.
|
inlineprotected |
Common preamble for non‑blocking receive: clear diagnostics, output packet, and DIO latch.
| packet | Output packet buffer to zero and prepare. |
Definition at line 193 of file radio_interface.h.
|
pure virtual |
Read instantaneous RSSI (in dBm) while in RX mode.
Used for listen-before-talk (LBT) carrier sense before transmitting.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
protected |
Hardware reset sequence common to all SX chips.
Drives RST pin low → 10 ms → high → 10 ms. Called from derived driver init().
Definition at line 17 of file radio_interface.cpp.
|
pure virtual |
Send a packet using the specified carrier frequency and preamble settings.
The radio handles CRC automatically (IoHomeOn mode for SX1276).
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
pure virtual |
Switch to continuous receive mode.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
pure virtual |
Switch to standby mode.
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
pure virtual |
Wait (blocking) for a packet with timeout.
Returns true if a packet was received. Contract:
Implemented in esphome::home_io_control::RadioSX1262, and esphome::home_io_control::RadioSX1276.
|
protected |
Definition at line 231 of file radio_interface.h.
|
protected |
Definition at line 238 of file radio_interface.h.
|
protected |
Definition at line 232 of file radio_interface.h.
|
protected |
Definition at line 233 of file radio_interface.h.