Home IO Control
ESPHome add-on for IO-Homecontrol devices
Loading...
Searching...
No Matches
roll_call.h File Reference

The roll-call sweep: one keyed 0x2A broadcast, repeated over channels and power classes. More...

#include "device_registry.h"
#include "exchange_engine.h"
#include "proto_commands.h"
#include "proto_device_types.h"
#include "tuning_config.h"
#include <algorithm>
#include <array>
#include <cstdint>
#include <vector>
Include dependency graph for roll_call.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  esphome::home_io_control::ScanResponder
 One roll-call responder, decoded on arrival. More...
struct  esphome::home_io_control::RollCallPass
 One roll-call frame shape, and how to listen for its replies. More...
struct  esphome::home_io_control::ScanState
 Accumulated state of one scan, threaded through every sweep. More...
struct  esphome::home_io_control::RollCallReplyKeys
 The keys a responder line needs: the one a responder answered under, and the hub's. More...
struct  esphome::home_io_control::PulledKeyReportInfo
 What build_pulled_key_report() says about the device that handed over a key. More...

Namespaces

namespace  esphome
namespace  esphome::home_io_control

Enumerations

enum class  esphome::home_io_control::RollCallAttemptResult : uint8_t { esphome::home_io_control::OK , esphome::home_io_control::BUILD_FAILED }
 Outcome of one roll-call attempt or sweep, so the caller can surface a build failure. More...
enum class  esphome::home_io_control::ScanAddResult : uint8_t { esphome::home_io_control::ADDED , esphome::home_io_control::DUPLICATE , esphome::home_io_control::FULL }
 Outcome of add_scan_responder(), so callers can tell a harmless repeat from real loss. More...
enum class  esphome::home_io_control::RollCallKeyDisplay : uint8_t { esphome::home_io_control::HIDDEN , esphome::home_io_control::BANNERED , esphome::home_io_control::PLAIN }
 How a responder line shows the key it answered under. More...

Functions

constexpr bool esphome::home_io_control::no_roll_call_pass_holds_request_channel ()
 A broadcast has no pinned conversation to hold a channel for, so HOLD_REQUEST_CHANNEL can never be a valid roll-call listen policy — checked at compile time rather than at every call site.
uint8_t esphome::home_io_control::count_enabled_passes (ScanPowerClasses selection)
 How many of ROLL_CALL_PASSES selection actually calls.
ScanAddResult esphome::home_io_control::add_scan_responder (ScanResponder *responders, uint8_t &count, uint8_t capacity, const IoFrame &frame, int16_t rssi_dbm, uint8_t key_slot, const ScanResponder *&entry)
 Record a responder unless its address is already present.
RollCallAttemptResult esphome::home_io_control::run_roll_call_sweep (ExchangeEngine &engine, const uint8_t *node_id, const uint8_t *key, uint8_t key_slot, const TuningConfig &tuning, ScanState &state, uint8_t &attempt, uint8_t total_attempts)
 Run the full roll-call sweep under one key: every enabled pass on every channel.
std::string esphome::home_io_control::format_roll_call_responder (const ScanResponder &responder, const std::string &device_id, const IoDevice *registered, const RollCallReplyKeys &keys, RollCallKeyDisplay display)
 Format one roll-call responder's report line(s).
std::string esphome::home_io_control::build_hub_key_pull_report (const PulledKeyReportInfo &info, const ScanState &state, DeviceRegistry &registry)
 Build the report for a pull that returned the hub's own key from a node no platform drives.
std::string esphome::home_io_control::build_pulled_key_report (const PulledKeyReportInfo &info, const ScanState &state, DeviceRegistry &registry)
 Build the one report a proven key pull prints after looking for the devices that hold the key.

Variables

constexpr uint8_t esphome::home_io_control::SCAN_MAX_REPLIES = 24
 Maximum distinct responders reported by one scan_paired_devices() call.
constexpr uint32_t esphome::home_io_control::SCAN_CHANNELS [] = {FREQ_CH2, FREQ_CH1, FREQ_CH3}
 Channels scan_paired_devices() transmits its roll-call request on, one attempt per channel, per pass (see ROLL_CALL_PASSES).
constexpr uint8_t esphome::home_io_control::SCAN_CHANNEL_COUNT = sizeof(SCAN_CHANNELS) / sizeof(SCAN_CHANNELS[0])
constexpr RollCallPass esphome::home_io_control::ROLL_CALL_PASSES []
 The roll-call's two fixed frame shapes, low-power first.

Detailed Description

The roll-call sweep: one keyed 0x2A broadcast, repeated over channels and power classes.

Scan Paired Devices and (in a later change) a pull-key pairing both ask "which devices answer a roll-call under this key?". This module is that question, with the key passed in explicitly: the frame shapes, the channels, the reply decoding and the de-duplication live here once.

Definition in file roll_call.h.