mirror of
https://github.com/esphome/esphome.git
synced 2026-08-23 06:36:23 +00:00
Address review: quiet stack-down teardown, pin bitfield widths
- The stack-down settle resets the stream latches directly instead of calling release_services(): the dying stack invalidates its own cache, and the newly checked cache_clean would warn on every OTA or ble.disable with a live connection - static_asserts pin the exactly-sized state bitfields so a future enumerator truncates loudly at compile time
This commit is contained in:
@@ -49,7 +49,10 @@ void BluedroidGattClient::loop() {
|
||||
// frees its slot, then re-register the app on the next enable.
|
||||
auto down_st = this->state();
|
||||
if (down_st != ClientState::IDLE && down_st != ClientState::INIT) {
|
||||
this->release_services();
|
||||
// The dying stack invalidates its own cache; a cache_clean would just
|
||||
// warn against a disabled stack. Reset the stream latches directly.
|
||||
this->service_total_ = 0;
|
||||
this->services_released_ = true;
|
||||
this->set_idle_();
|
||||
this->listener_->on_connection_state(false, 0, ble_device_base::GATT_ERR_NOT_CONNECTED);
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@ class BluedroidGattClient final : public esp32_ble_tracker::ESPBTClient, public
|
||||
bool mtu_failed_ : 1 {false};
|
||||
// Search issued at OPEN_EVT overlaps the MTU exchange; discover_services()
|
||||
// completes from it. Reset by set_idle_().
|
||||
static_assert(static_cast<uint8_t>(SearchState::REPORT_PENDING) < (1 << 4), "search_state_ bitfield too narrow");
|
||||
SearchState search_state_ : 4 {SearchState::NONE};
|
||||
// esp_gatt_status_t of the completed search, held until claimed.
|
||||
uint8_t search_status_{0};
|
||||
|
||||
@@ -148,6 +148,9 @@ class BluetoothConnection final : public ble_device_base::GattClientListener {
|
||||
char address_str_[MAC_ADDRESS_PRETTY_BUFFER_SIZE]{};
|
||||
|
||||
// Group 5: bit-packed tail; within 2 bytes the 8-aligned object stays 48.
|
||||
static_assert(static_cast<uint8_t>(ClientState::ESTABLISHED) < (1 << 3), "state_ bitfield too narrow");
|
||||
static_assert(static_cast<uint8_t>(ConnectionType::V3_WITHOUT_CACHE) < (1 << 2),
|
||||
"connection_type_ bitfield too narrow");
|
||||
ClientState state_ : 3 {ClientState::IDLE};
|
||||
bool paired_ : 1 {false};
|
||||
ConnectionType connection_type_ : 2 {ConnectionType::V1};
|
||||
|
||||
Reference in New Issue
Block a user