[esp32_ble_tracker] Retire the scanner-state listener interface (#18179)

This commit is contained in:
J. Nick Koston
2026-08-08 20:58:48 -05:00
committed by GitHub
parent 2bb01853e0
commit 862b13c8dd
5 changed files with 3 additions and 57 deletions
@@ -66,12 +66,9 @@ def _get_required_features() -> set[BLEFeatures]:
# Slot counters sizing the tracker's StaticVector storage; one request per
# registered listener, client, or scanner state listener.
# registered listener or client.
_request_listener_slot = cg.slot_counter("ESPHOME_ESP32_BLE_TRACKER_LISTENER_COUNT")
_request_client_slot = cg.slot_counter("ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT")
_request_scanner_state_listener_slot = cg.slot_counter(
"ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT"
)
def register_ble_features(features: set[BLEFeatures]) -> None:
@@ -386,17 +383,3 @@ async def register_raw_client(
paren = await cg.get_variable(config[CONF_ESP32_BLE_ID])
cg.add(paren.register_client(var))
return var
async def register_scanner_state_listener(
var: cg.SafeExpType, config: ConfigType
) -> cg.SafeExpType:
"""Register a listener for scanner state changes.
The slot request here is what sizes the tracker's listener storage; a
build with no registrations compiles the storage out entirely.
"""
_request_scanner_state_listener_slot()
paren = await cg.get_variable(config[CONF_ESP32_BLE_ID])
cg.add(paren.add_scanner_state_listener(var))
return var
@@ -392,11 +392,6 @@ void ESP32BLETracker::set_scanner_state_(ScannerState state) {
this->scanner_state_callback_.invoke(state);
}
#endif
#ifdef ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT
for (auto *listener : this->scanner_state_listeners_) {
listener->on_scanner_state(state);
}
#endif
}
void ESP32BLETracker::dump_config() {
@@ -89,16 +89,6 @@ using ble_device_base::client_state_to_string;
// Neutral scanner lifecycle re-exported for backward compatibility.
using ScannerState = ble_device_base::ScannerState;
/** Listener interface for BLE scanner state changes.
*
* Components can implement this interface to receive scanner state updates
* without the overhead of std::function callbacks.
*/
class BLEScannerStateListener {
public:
virtual void on_scanner_state(ScannerState state) = 0;
};
/// Base class for BLE GATT clients that connect to remote devices.
///
/// State Change Tracking Design:
@@ -226,15 +216,6 @@ class ESP32BLETracker final : public Component,
void on_ota_global_state(ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) override;
#endif
#ifdef ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT
/// Add a listener for scanner state changes. Only compiled when a consumer
/// requested a slot in codegen: register through
/// esp32_ble_tracker.register_scanner_state_listener() in your component's
/// to_code, which requests the slot and emits this call.
void add_scanner_state_listener(BLEScannerStateListener *listener) {
this->scanner_state_listeners_.push_back(listener);
}
#endif
ScannerState get_scanner_state() const { return this->scanner_state_; }
protected:
@@ -300,10 +281,6 @@ class ESP32BLETracker final : public Component,
#endif
#ifdef ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT
StaticVector<ESPBTClient *, ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT> clients_;
#endif
#ifdef ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT
StaticVector<BLEScannerStateListener *, ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT>
scanner_state_listeners_;
#endif
// Parsed listeners registered through the neutral BLEHub contract (migrated
// sensors); dispatched alongside listeners_.
-1
View File
@@ -307,7 +307,6 @@
#define USE_ESP32_BLE_SERVER_ON_DISCONNECT
#define ESPHOME_ESP32_BLE_TRACKER_LISTENER_COUNT 1
#define ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT 1
#define ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT 1
#define ESPHOME_BLE_DEVICE_BASE_LISTENER_COUNT 1
#define ESPHOME_ESP32_BLE_GAP_EVENT_HANDLER_COUNT 2
#define ESPHOME_ESP32_BLE_GAP_SCAN_EVENT_HANDLER_COUNT 1
@@ -94,11 +94,7 @@ def test_esp32_tracker_handler_counts(
assert get_define_value("ESPHOME_ESP32_BLE_GATTC_EVENT_HANDLER_COUNT") == "1"
assert get_define_value("ESPHOME_ESP32_BLE_BLE_STATUS_EVENT_HANDLER_COUNT") == "1"
assert get_define_value("ESPHOME_ESP32_BLE_GATTS_EVENT_HANDLER_COUNT") is None
# No consumer subscribed to scanner state, so the storage compiles out.
assert (
get_define_value("ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT")
is None
)
# No advertisement listener or client is registered, so both storages compile out.
assert get_define_value("ESPHOME_ESP32_BLE_TRACKER_LISTENER_COUNT") is None
assert get_define_value("ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT") is None
@@ -109,12 +105,8 @@ def test_esp32_bluetooth_proxy_requests_client_slots_only(
) -> None:
"""The proxy requests a client slot per connection (three by default with
active: true); advertisements and scanner state arrive through the hub
callbacks, so no listener or scanner-state slot exists."""
callbacks, so no listener slot exists."""
generate_main(component_config_path("esp32_bluetooth_proxy.yaml"))
assert (
get_define_value("ESPHOME_ESP32_BLE_TRACKER_SCANNER_STATE_LISTENER_COUNT")
is None
)
assert get_define_value("ESPHOME_ESP32_BLE_TRACKER_LISTENER_COUNT") is None
assert get_define_value("ESPHOME_ESP32_BLE_TRACKER_CLIENT_COUNT") == "3"