mirror of
https://github.com/esphome/esphome.git
synced 2026-05-27 03:36:19 +08:00
[bluetooth_proxy] Partial revert of loop() → set_interval migration (#15992)
This commit is contained in:
@@ -30,19 +30,6 @@ void BluetoothProxy::setup() {
|
|||||||
this->configured_scan_active_ = this->parent_->get_scan_active();
|
this->configured_scan_active_ = this->parent_->get_scan_active();
|
||||||
|
|
||||||
this->parent_->add_scanner_state_listener(this);
|
this->parent_->add_scanner_state_listener(this);
|
||||||
|
|
||||||
this->set_interval(100, [this]() {
|
|
||||||
if (api::global_api_server->is_connected() && this->api_connection_ != nullptr) {
|
|
||||||
this->flush_pending_advertisements_();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (uint8_t i = 0; i < this->connection_count_; i++) {
|
|
||||||
auto *connection = this->connections_[i];
|
|
||||||
if (connection->get_address() != 0 && !connection->disconnect_pending()) {
|
|
||||||
connection->disconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BluetoothProxy::on_scanner_state(esp32_ble_tracker::ScannerState state) {
|
void BluetoothProxy::on_scanner_state(esp32_ble_tracker::ScannerState state) {
|
||||||
@@ -133,6 +120,25 @@ void BluetoothProxy::dump_config() {
|
|||||||
YESNO(this->active_), this->connection_count_);
|
YESNO(this->active_), this->connection_count_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BluetoothProxy::loop() {
|
||||||
|
// Run advertisement flush / connection cleanup every 100ms
|
||||||
|
uint32_t now = App.get_loop_component_start_time();
|
||||||
|
if (now - this->last_advertisement_flush_time_ < 100)
|
||||||
|
return;
|
||||||
|
this->last_advertisement_flush_time_ = now;
|
||||||
|
|
||||||
|
if (api::global_api_server->is_connected() && this->api_connection_ != nullptr) {
|
||||||
|
this->flush_pending_advertisements_();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (uint8_t i = 0; i < this->connection_count_; i++) {
|
||||||
|
auto *connection = this->connections_[i];
|
||||||
|
if (connection->get_address() != 0 && !connection->disconnect_pending()) {
|
||||||
|
connection->disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
esp32_ble_tracker::AdvertisementParserType BluetoothProxy::get_advertisement_parser_type() {
|
esp32_ble_tracker::AdvertisementParserType BluetoothProxy::get_advertisement_parser_type() {
|
||||||
return esp32_ble_tracker::AdvertisementParserType::RAW_ADVERTISEMENTS;
|
return esp32_ble_tracker::AdvertisementParserType::RAW_ADVERTISEMENTS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class BluetoothProxy final : public esp32_ble_tracker::ESPBTDeviceListener,
|
|||||||
bool parse_devices(const esp32_ble::BLEScanResult *scan_results, size_t count) override;
|
bool parse_devices(const esp32_ble::BLEScanResult *scan_results, size_t count) override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
void setup() override;
|
void setup() override;
|
||||||
|
void loop() override;
|
||||||
esp32_ble_tracker::AdvertisementParserType get_advertisement_parser_type() override;
|
esp32_ble_tracker::AdvertisementParserType get_advertisement_parser_type() override;
|
||||||
|
|
||||||
void register_connection(BluetoothConnection *connection) {
|
void register_connection(BluetoothConnection *connection) {
|
||||||
@@ -176,6 +177,9 @@ class BluetoothProxy final : public esp32_ble_tracker::ESPBTDeviceListener,
|
|||||||
// BLE advertisement batching
|
// BLE advertisement batching
|
||||||
api::BluetoothLERawAdvertisementsResponse response_;
|
api::BluetoothLERawAdvertisementsResponse response_;
|
||||||
|
|
||||||
|
// Group 3: 4-byte types
|
||||||
|
uint32_t last_advertisement_flush_time_{0};
|
||||||
|
|
||||||
// Pre-allocated response message - always ready to send
|
// Pre-allocated response message - always ready to send
|
||||||
api::BluetoothConnectionsFreeResponse connections_free_response_;
|
api::BluetoothConnectionsFreeResponse connections_free_response_;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user