Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
Controller Layer

Hub orchestration, exchange state machines, pairing, and runtime operations. More...

Collaboration diagram for Controller Layer:

Topics

 Pairing/Radio Diagnostics Tuning
 Runtime-tunable pairing and radio diagnostics layer and its Home Assistant entities.

Files

file  components/home_io_control/device_registry.cpp
 DeviceRegistry implementation.
file  components/home_io_control/device_registry.h
 Per-hub device table, update-callback fan-out, and linked-remote map.
file  components/home_io_control/entity_helpers.h
 Conversions and renderers shared by the hub and its Home Assistant entities.
file  components/home_io_control/exchange_engine.cpp
 Authenticated exchange engine — outbound and inbound protocol flows.
file  components/home_io_control/exchange_engine.h
 Self-contained authenticated exchange engine for IO-Homecontrol 2W.
file  components/home_io_control/hub_core.cpp
 Component lifecycle and main-loop scheduling.
file  components/home_io_control/hub_core.h
 IO-Homecontrol ESPHome component — protocol controller.
file  components/home_io_control/hub_decisions.h
 Pure transition helpers for hub-owned exchange and pairing frame decisions.
file  components/home_io_control/hub_exchange.h
 Internal exchange-state model for hub-owned authenticated non‑pairing flows.
file  components/home_io_control/hub_hooks.h
 Injected-capability callback aliases shared by the hub's collaborator objects.
file  components/home_io_control/hub_internal.h
 Helpers shared only by the hub's own implementation files (hub_*.cpp).
file  components/home_io_control/hub_operations.cpp
 High-level command execution and queued operation dispatch.
file  components/home_io_control/hub_pairing.cpp
 Thin hub wrapper delegating all pairing logic to PairingEngine.
file  components/home_io_control/hub_pairing.h
 Internal pairing-state model for hub‑owned discovery and key‑exchange flows.
file  components/home_io_control/hub_status.cpp
 Inbound status handling and passive receive-side state updates.
file  components/home_io_control/key_extraction_responder.cpp
 "Recover System Key" (key extraction) — device-role responder collaborator.
file  components/home_io_control/key_extraction_responder.h
 "Recover System Key" (key extraction) — device-role responder collaborator.
file  components/home_io_control/log_helpers.h
 Hub-layer log tag and log/format helpers shared by the hub and its collaborators.
file  components/home_io_control/lr1121_firmware_update_controller.h
 LR1121 transceiver-firmware-update feature — orchestration collaborator.
file  components/home_io_control/management_actions.cpp
 Hub-level management actions such as device rename, identify, and force-open.
file  components/home_io_control/management_actions.h
 Hub-level management operations exposed as Home Assistant actions.
file  components/home_io_control/oneway_key_adoption.cpp
 Opt-in, receive-only adoption of a 1W installation's controller key.
file  components/home_io_control/oneway_key_adoption.h
 Opt-in, receive-only adoption of a 1W installation's controller key.
file  components/home_io_control/oneway_sequence_store.cpp
 Persistent rolling-sequence counters for one-way (1W) transmit.
file  components/home_io_control/oneway_sequence_store.h
 Persistent rolling-sequence counters for one-way (1W) transmit.
file  components/home_io_control/oneway_transmitter.cpp
 One-way (1W) transmit collaborator.
file  components/home_io_control/oneway_transmitter.h
 One-way (1W) transmit collaborator.
file  components/home_io_control/operation_queue.cpp
 OperationQueue implementation.
file  components/home_io_control/operation_queue.h
 Pending-operation queue with per-type coalescing and deduplication.
file  components/home_io_control/pairing_advisor.cpp
 Read-only advisor that turns PairingTelemetry into actionable diagnostics.
file  components/home_io_control/pairing_advisor.h
 Read-only advisor that turns PairingTelemetry into actionable diagnostics.
file  components/home_io_control/pairing_engine.cpp
 Device pairing orchestration — discovery, key exchange, and finalization.
file  components/home_io_control/pairing_engine.h
 Device discovery and key-exchange engine for IO-Homecontrol pairing.
file  components/home_io_control/pairing_responder.cpp
 Pure decision logic for the device-role key-extraction responder.
file  components/home_io_control/pairing_responder.h
 Pure decision logic for the device-role "Accept Foreign Pairing" (system-key extraction) responder.
file  components/home_io_control/pairing_telemetry.cpp
 Structured per-attempt telemetry recorder implementation.
file  components/home_io_control/pairing_telemetry.h
 Structured per-attempt telemetry recorder for the pairing flow.
file  components/home_io_control/status_poll_policy.cpp
 StatusPollPolicy implementation.
file  components/home_io_control/status_poll_policy.h
 Per-device poll scheduling, failure backoff, and follow-up-poll state machine.
file  components/home_io_control/transmit_observer.h
 Observer interface for every frame the exchange engine puts on air.

Classes

class  esphome::home_io_control::DeviceRegistry
 Owns the per-hub device table, update callbacks, and linked-remote associations. More...
class  esphome::home_io_control::IOHomeControlComponent
 The main IO-Homecontrol component. More...
class  esphome::home_io_control::KeyExtractionResponder
 Device-role responder for the "Recover System Key" feature. More...
class  esphome::home_io_control::ManagementActions
 Encapsulates hub-level management operations exposed as Home Assistant actions. More...
class  esphome::home_io_control::OnewayKeyAdoption
 Opt-in, receive-only listener that adopts an overheard 1W controller key. More...
class  esphome::home_io_control::OneWaySequenceStore
 Per-controller-identity rolling sequence counters, persisted across reboots. More...
struct  esphome::home_io_control::OneWayCommandReport
 What a 1W command attempt did — the only feedback this feature can ever produce. More...
class  esphome::home_io_control::OneWayTransmitter
 Sends 1W commands as the repeated bursts real remotes send. More...
class  esphome::home_io_control::PairingEngine
 Owns and drives all three phases of the IO-Homecontrol device pairing flow. More...
class  esphome::home_io_control::PairingTelemetry
 Fixed-size per-attempt telemetry recorder for the pairing flow. More...

Functions

uint16_t esphome::home_io_control::oneway_copy_preamble_bytes (OneWayCopyShape shape, uint16_t normal_start_preamble)
 Resolve one copy's shape (oneway_burst_copy_shape()) to the actual preamble byte count.
std::string esphome::home_io_control::format_oneway_preamble_list (OneWayPowerClass power_class, uint16_t normal_start_preamble)
 Render the preamble bytes each copy of a burst will use, e.g.

Detailed Description

Hub orchestration, exchange state machines, pairing, and runtime operations.

Function Documentation

◆ format_oneway_preamble_list()

std::string esphome::home_io_control::format_oneway_preamble_list ( OneWayPowerClass power_class,
uint16_t normal_start_preamble )

Render the preamble bytes each copy of a burst will use, e.g.

"1024/32/32/32".

Built from oneway_burst_copy_shape() and oneway_copy_preamble_bytes() — the exact functions send_burst() itself calls per copy — so the TX log line can never disagree with what actually went on air. Pure and free-standing so it is unit-testable: the host ESP_LOG stub discards its arguments, so a formatter buried in the log call could not be asserted on at all.

Parameters
power_classThe identity's power class.
normal_start_preambleLive tuning value a NORMAL-shaped copy resolves to.
Returns
Slash-separated preamble byte counts, one per copy, in burst order.

Definition at line 28 of file oneway_transmitter.cpp.

Here is the call graph for this function:

◆ oneway_copy_preamble_bytes()

uint16_t esphome::home_io_control::oneway_copy_preamble_bytes ( OneWayCopyShape shape,
uint16_t normal_start_preamble )

Resolve one copy's shape (oneway_burst_copy_shape()) to the actual preamble byte count.

The one place OneWayPreamble::WAKE -> LONG_PREAMBLE / OneWayPreamble::NORMAL -> normal_start_preamble is written — send_burst(), format_oneway_preamble_list(), and this header's tests all go through it, so the burst, the TX log line describing it, and anything asserting on it can never resolve the mapping three different ways.

Parameters
shapeA copy's shape, from oneway_burst_copy_shape().
normal_start_preambleLive tuning value a NORMAL-shaped copy resolves to.
Returns
The preamble length in bytes this copy transmits with.

Definition at line 24 of file oneway_transmitter.cpp.

Here is the call graph for this function: