Skip to content

Commit

Permalink
[BouffaloLab][BLE]Add BLE ManagerImpl ShutDown Function (#28600)
Browse files Browse the repository at this point in the history
* Add BLE ManagerImpl ShutDown Function

* Restyled by whitespace

* Restyled by clang-format

---------

Co-authored-by: Restyled.io <[email protected]>
  • Loading branch information
shchen-Lab and restyled-commits authored Aug 9, 2023
1 parent 75609c4 commit 392d054
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
22 changes: 20 additions & 2 deletions src/platform/bouffalolab/common/BLEManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ CHIP_ERROR BLEManagerImpl::_Init()
return CHIP_NO_ERROR;
}

void BLEManagerImpl::_Shutdown()
{
// Release BLE Stack resources
mFlags.Set(Flags::kChipoBleShutDown);
}

void BLEManagerImpl::DriveBLEState(intptr_t arg)
{
BLEMgrImpl().DriveBLEState();
Expand Down Expand Up @@ -435,7 +441,7 @@ CHIP_ERROR BLEManagerImpl::HandleGAPDisconnect(const ChipDeviceEvent * event)
{
case BT_HCI_ERR_REMOTE_USER_TERM_CONN:
// Do not treat proper connection termination as an error and exit.
VerifyOrExit(!ConfigurationMgr().IsFullyProvisioned(), );
VerifyOrExit(!ConfigurationMgr().IsFullyProvisioned(), BLEMgrImpl()._Shutdown());
disconReason = BLE_ERROR_REMOTE_DEVICE_DISCONNECTED;
break;
case BT_HCI_ERR_LOCALHOST_TERM_CONN:
Expand All @@ -457,7 +463,19 @@ CHIP_ERROR BLEManagerImpl::HandleGAPDisconnect(const ChipDeviceEvent * event)
ChipDeviceEvent disconnectEvent;
disconnectEvent.Type = DeviceEventType::kCHIPoBLEConnectionClosed;
ReturnErrorOnFailure(PlatformMgr().PostEvent(&disconnectEvent));

if (mFlags.Has(Flags::kChipoBleShutDown))
{
int ret = bt_disable();
if (ret)
{
ChipLogError(DeviceLayer, "CHIPoBLE Shutdown faild =%d", ret);
}
else
{
mFlags.Clear(Flags::kChipoBleShutDown);
}
return CHIP_NO_ERROR;
}
// Force a reconfiguration of advertising in case we switched to non-connectable mode when
// the BLE connection was established.
mFlags.Set(Flags::kAdvertisingRefreshNeeded);
Expand Down
3 changes: 2 additions & 1 deletion src/platform/bouffalolab/common/BLEManagerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla
std::conditional_t<std::is_same<bt_gatt_indicate_func_t, void (*)(bt_conn *, bt_gatt_indicate_params *, uint8_t)>::value,
bt_gatt_indicate_params *, const bt_gatt_attr *>;
CHIP_ERROR _Init(void);
void _Shutdown() {}
void _Shutdown();
bool _IsAdvertisingEnabled(void);
CHIP_ERROR _SetAdvertisingEnabled(bool val);
bool _IsAdvertising(void);
Expand Down Expand Up @@ -85,6 +85,7 @@ class BLEManagerImpl final : public BLEManager, private BleLayer, private BlePla
kAdvertisingRefreshNeeded =
0x0010, /**< The advertising state/configuration has changed, but the SoftDevice has yet to be updated. */
kChipoBleGattServiceRegister = 0x0020, /**< The system has currently CHIPoBLE GATT service registered. */
kChipoBleShutDown = 0x0040, /**< The system has disable ble stack. */
};

struct ServiceData;
Expand Down
12 changes: 11 additions & 1 deletion src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,17 @@ ConfigurationManagerImpl & ConfigurationManagerImpl::GetDefaultInstance()
static ConfigurationManagerImpl sInstance;
return sInstance;
}

bool ConfigurationManagerImpl::IsFullyProvisioned()
{
return
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
ConnectivityMgr().IsWiFiStationProvisioned() &&
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
ConnectivityMgr().IsThreadProvisioned() &&
#endif
true;
}
CHIP_ERROR ConfigurationManagerImpl::Init()
{
CHIP_ERROR err;
Expand Down
1 change: 1 addition & 0 deletions src/platform/bouffalolab/common/ConfigurationManagerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp
CHIP_ERROR StoreRebootCount(uint32_t rebootCount);
CHIP_ERROR GetTotalOperationalHours(uint32_t & totalOperationalHours);
CHIP_ERROR StoreTotalOperationalHours(uint32_t totalOperationalHours);
bool IsFullyProvisioned();

private:
// ===== Members that implement the ConfigurationManager private interface.
Expand Down

0 comments on commit 392d054

Please sign in to comment.