Skip to content

Commit

Permalink
Merge pull request project-chip#146 from shchen-Lab/bl616_bouffalo_sdk
Browse files Browse the repository at this point in the history
Add BLE MangerImpl ShutDown Function
  • Loading branch information
shchen-Lab authored Aug 9, 2023
2 parents fbd89cc + b465eaf commit 200f7b8
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 7 deletions.
25 changes: 22 additions & 3 deletions src/platform/bouffalolab/common/BLEManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,13 @@ 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 +442,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 +464,20 @@ 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 Expand Up @@ -592,7 +612,6 @@ void BLEManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
case DeviceEventType::kPlatformZephyrBleC2IndDoneEvent:
err = HandleTXCharComplete(event);
break;

default:
break;
}
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
13 changes: 11 additions & 2 deletions src/platform/bouffalolab/common/ConfigurationManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,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 Expand Up @@ -198,7 +208,6 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg)

hal_reboot();
}

ConfigurationManager & ConfigurationMgrImpl()
{
return ConfigurationManagerImpl::GetDefaultInstance();
Expand Down
2 changes: 1 addition & 1 deletion src/platform/bouffalolab/common/ConfigurationManagerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +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 200f7b8

Please sign in to comment.