13#include <zephyr/bluetooth/addr.h>
14#include <zephyr/bluetooth/conn.h>
15#include <zephyr/bluetooth/gatt.h>
16#include <zephyr/kernel.h>
17#include <zephyr/sys/ring_buffer.h>
18#include <zephyr/sys/slist.h>
74 constexpr static auto kRecoveryIntervalSec = 1;
75 constexpr static auto kRecoveryMaxIntervalSec = CONFIG_BRIDGE_BT_RECOVERY_MAX_INTERVAL;
77 constexpr static auto kRecoveryScanTimeoutMs = CONFIG_BRIDGE_BT_RECOVERY_SCAN_TIMEOUT_MS;
79 struct ListItem :
public sys_snode_t {
85 ~Recovery() { CancelTimer(); }
86 void NotifyProviderToRecover(BLEBridgedDeviceProvider *provider);
89 static bool EntryExists(BLEBridgedDeviceProvider *provider, sys_slist_t *list);
90 static BLEBridgedDeviceProvider *GetProvider(sys_slist_t *list);
91 static bool PutProvider(BLEBridgedDeviceProvider *provider, sys_slist_t *list);
92 bool IsNeeded() {
return !sys_slist_is_empty(&mListToRecover); }
94 void CancelTimer() { k_timer_stop(&mRecoveryTimer); }
95 void RemoveRecovered(BLEBridgedDeviceProvider *provider);
96 uint16_t GetFailedRecoveryAttempts();
98 static void TimerTimeoutCallback(k_timer *timer);
100 sys_slist_t mListToRecover;
101 sys_slist_t mListToReconnect;
102 k_timer mRecoveryTimer;
105 struct DiscoveryHandlerCtx {
106 BLEBridgedDeviceProvider *mProvider;
107 bt_gatt_dm *mDiscoveryData;
128 CHIP_ERROR
Init(
const bt_uuid **serviceUuids, uint8_t serviceUuidsCount);
248#ifdef CONFIG_BRIDGE_FORCE_BT_CONNECTION_PARAMS
249 static bool ParamChangeRequestHandler(
struct bt_conn *conn,
struct bt_le_conn_param *param);
257 static void PairingFailed(
struct bt_conn *conn,
enum bt_security_err reason);
276 bt_le_conn_param *GetScannedDeviceConnParams(bt_addr_le_t address);
277 State GetCurrentState();
278 void UpdateStateFlag(
State state,
bool enabled);
279 void UpdateRecovery();
282 uint8_t mStateBitmask = 0;
285 uint8_t mScannedDevicesCounter;
286 uint8_t mConnectedProvidersCounter;
291 uint8_t mServicesUuidCount;
293 void *mScanDoneCallbackContext;
Definition ble_bridged_device.h:32
static void PairingComplete(struct bt_conn *conn, bool bonded)
static void PairingFailed(struct bt_conn *conn, enum bt_security_err reason)
static void ScanTimeoutHandle(intptr_t context)
static constexpr uint16_t kMaxScannedDevices
Definition ble_connectivity_manager.h:30
static void DiscoveryError(bt_conn *conn, int err, void *context)
static void ScanTimeoutCallback(k_timer *timer)
CHIP_ERROR PrepareFilterForAddress(bt_addr_le_t *addr)
static constexpr uint16_t kScanTimeoutMs
Definition ble_connectivity_manager.h:29
CHIP_ERROR(*)(bool success, void *context) DeviceConnectedCallback
Definition ble_connectivity_manager.h:111
static void PasskeyEntry(struct bt_conn *conn)
static void DiscoveryCompletedHandler(bt_gatt_dm *dm, void *context)
static void FilterMatch(bt_scan_device_info *device_info, bt_scan_filter_match *filter_match, bool connectable)
static constexpr uint16_t kMaxConnectedDevices
Definition ble_connectivity_manager.h:32
State
Definition ble_connectivity_manager.h:47
@ Idle
Definition ble_connectivity_manager.h:47
@ Scanning
Definition ble_connectivity_manager.h:47
@ Pairing
Definition ble_connectivity_manager.h:47
@ LostDevice
Definition ble_connectivity_manager.h:47
@ Unknown
Definition ble_connectivity_manager.h:47
@ Start
Definition ble_connectivity_manager.h:47
@ Connected
Definition ble_connectivity_manager.h:47
@ End
Definition ble_connectivity_manager.h:47
CHIP_ERROR Init(const bt_uuid **serviceUuids, uint8_t serviceUuidsCount)
Initialize BLEConnectivityManager instance.
void RegisterStateCallback(StateChangedCallback callback)
Register a callback to notify application about current status change.
Definition ble_connectivity_manager.h:233
static BLEConnectivityManager & Instance()
Definition ble_connectivity_manager.h:268
static void ConnectionHandler(bt_conn *conn, uint8_t conn_err)
CHIP_ERROR Scan(ScanDoneCallback callback, void *context, uint32_t scanTimeoutMs=kScanTimeoutMs)
Start scanning for Bluetooth LE peripheral devices advertising service UUIDs passed in Init method.
void(*)(void *context) ConnectionSecurityRequestCallback
Definition ble_connectivity_manager.h:113
static void AuthenticationCancel(struct bt_conn *conn)
void(*)(ScanResult &result, void *context) ScanDoneCallback
Definition ble_connectivity_manager.h:112
static void DiscoveryNotFound(bt_conn *conn, void *context)
BLEBridgedDeviceProvider * FindBLEProvider(bt_addr_le_t address)
Get BLE provider that uses the specified connection object.
static void DisconnectionHandler(bt_conn *conn, uint8_t reason)
CHIP_ERROR Connect(BLEBridgedDeviceProvider *provider, ConnectionSecurityRequest *request=nullptr)
Create connection to the Bluetooth LE device, managed by BLEBridgedDeviceProvider object....
CHIP_ERROR GetScannedDeviceAddress(bt_addr_le_t *address, uint8_t index)
Gets Bluetooth LE address of a device that was scanned before.
static constexpr uint8_t kMaxServiceUuids
Definition ble_connectivity_manager.h:33
void(*)(State state) StateChangedCallback
Callback to indicate the bridge's Bluetooth LE connectivity state of the highest priority.
Definition ble_connectivity_manager.h:56
CHIP_ERROR PrepareFilterForUuid()
void SetPincode(bt_addr_le_t addr, unsigned int pincode)
Set authentication pincode to confirm the specific Bluetooth LE connection.
CHIP_ERROR RemoveBLEProvider(bt_addr_le_t address)
Remove the BLE provider from the manager's list.
CHIP_ERROR Reconnect(BLEBridgedDeviceProvider *provider)
Create connection to the first Bluetooth LE device on the mProvidersToRecover recovery list.
CHIP_ERROR GetScannedDeviceUuid(uint16_t &uuid, uint8_t index)
Gets Bluetooth LE service UUID of a device that was scanned before.
static int StartGattDiscovery(bt_conn *conn, BLEBridgedDeviceProvider *provider)
void Recover(BLEBridgedDeviceProvider *provider)
Recover connection with the specified BLE provider. It is necessary to first add the provider to the ...
Definition ble_connectivity_manager.h:223
CHIP_ERROR StopScan()
Stop scanning operation.
static void SecurityChangedHandler(struct bt_conn *conn, bt_security_t level, enum bt_security_err err)
static void ReScanCallback(ScanResult &result, void *context)
CHIP_ERROR AddBLEProvider(BLEBridgedDeviceProvider *provider)
Add the BLE provider's address to the manager's list.
Definition ble_connectivity_manager.h:27
Definition ble_connectivity_manager.h:21
Definition ble_bridged_device.h:22
void * mContext
Definition ble_connectivity_manager.h:117
ConnectionSecurityRequestCallback mCallback
Definition ble_connectivity_manager.h:116
Definition ble_connectivity_manager.h:115
ScannedDevice * mDevices
Definition ble_connectivity_manager.h:65
uint8_t mCount
Definition ble_connectivity_manager.h:66
Definition ble_connectivity_manager.h:64
bt_addr_le_t mAddr
Definition ble_connectivity_manager.h:59
bt_le_conn_param mConnParam
Definition ble_connectivity_manager.h:60
uint16_t mUuid
Definition ble_connectivity_manager.h:61
Definition ble_connectivity_manager.h:58
Structure containing device data needed to establish connection and advertising information.
Definition scan.h:286
Structure for setting the filter status.
Definition scan.h:263