5#ifndef ELEC_C7222_BLE_H_
6#define ELEC_C7222_BLE_H_
193 return security_manager_;
200 return security_manager_;
241 return hci_logging_enabled_;
261 return attribute_server_;
268 return attribute_server_;
283 callback_on_ble_stack_on_ = std::move(handler);
290 callback_on_ble_stack_on_ = handler;
296 template <
typename T>
298 callback_on_ble_stack_on_ = std::function<void()>(std::bind(method,
object));
304 template <
typename T>
306 callback_on_ble_stack_on_ = std::function<void()>(std::bind(method,
object));
313 callback_on_ble_stack_off_ = std::move(handler);
320 callback_on_ble_stack_off_ = handler;
326 template <
typename T>
328 callback_on_ble_stack_off_ = std::function<void()>(std::bind(method,
object));
334 template <
typename T>
336 callback_on_ble_stack_off_ = std::function<void()>(std::bind(method,
object));
516 if(security_manager_ !=
nullptr){
524 return security_manager_ !=
nullptr && security_manager_->
RemoveEventHandler(handler);
530 if(security_manager_ !=
nullptr){
538 return security_manager_ !=
nullptr && security_manager_->
RemoveEventHandler(handler);
544 if(security_manager_ !=
nullptr) {
590 return security_manager_ !=
nullptr ? security_manager_->
ConfirmJustWorks(con_handle)
604 return security_manager_ !=
nullptr ? security_manager_->
ProvidePasskey(con_handle, passkey)
611 return security_manager_ !=
nullptr ? security_manager_->
RequestPairing(con_handle)
618 return security_manager_ !=
nullptr ? security_manager_->
SetAuthorization(con_handle, result)
632 const uint8_t* packet_data,
633 uint16_t packet_data_size);
643 static Ble* instance_;
652 std::string device_name_;
656 uint8_t advertisement_flags_ = 0;
660 std::function<void()> callback_on_ble_stack_on_{};
664 std::function<void()> callback_on_ble_stack_off_{};
672 SecurityManager* security_manager_ =
nullptr;
676 AttributeServer* attribute_server_ =
nullptr;
680 bool hci_logging_enabled_ =
false;
684 bool turned_on_ =
false;
689 void* context_ =
nullptr;
695 void EnsureSmEventHandlerRegistered();
Builder for assembling a complete advertising payload.
Definition advertisement_data.hpp:304
Encapsulates the ATT attribute server for the Pico W BLE stack.
Definition attribute_server.hpp:138
BLE address container with an associated address type.
Definition ble_address.hpp:43
Singleton entry point for BLE configuration and events.
Definition ble.hpp:159
void SetAdvertisingData(const uint8_t *data, size_t size)
Set raw advertising data.
Definition ble.hpp:411
void RemoveGapEventHandler(const Gap::EventHandler &handler)
Remove a GAP event handler.
Definition ble.hpp:386
BleError SetSecurityIoCapability(SecurityManager::IoCapability capability)
Set Security Manager IO capability.
Definition ble.hpp:558
void StartAdvertising()
Start advertising.
Definition ble.hpp:447
BleError RequestConnectionParameterUpdate(ConnectionHandle con_handle, const Gap::PreferredConnectionParameters ¶ms)
Request a connection parameter update.
Definition ble.hpp:471
void SetAdvertisingData()
Set advertising data from the current builder state.
Definition ble.hpp:429
void SetOnBleStackOffCallback(T *object, void(T::*method)())
Register BLE stack-off callback from an object/member function.
Definition ble.hpp:327
void SetScanResponseData(uint8_t length, const uint8_t *data)
Set scan response data.
Definition ble.hpp:435
void StopAdvertising()
Stop advertising.
Definition ble.hpp:453
virtual BleError DispatchBleHciPacket(uint8_t packet_type, uint8_t channel, const uint8_t *packet_data, uint16_t packet_data_size)
Dispatch raw HCI packets to GAP/AttributeServer/SecurityManager.
static Ble * GetInstance(bool enable_hci_logging=false)
Get the singleton instance.
SecurityManager * GetSecurityManager()
Access the underlying Security Manager instance.
Definition ble.hpp:192
void SetOnBleStackOnCallback(void(*handler)())
Register BLE stack-on callback from a function pointer.
Definition ble.hpp:289
static void DumpAttributeServerContext()
Dump the platform attribute server context (platform-dependent).
BleError TurnOn()
Power on the BLE stack and controller.
BleError SetAuthorization(ConnectionHandle con_handle, SecurityManager::AuthorizationResult result)
Provide an authorization decision.
Definition ble.hpp:617
AttributeServer * EnableAttributeServer(const void *context)
Enable and access the Attribute Server instance.
BleError SetSecurityBondable(bool bondable)
Enable or disable bonding in the Security Manager.
Definition ble.hpp:576
void TurnOff()
Power off the BLE stack and controller.
void ClearGapEventHandlers()
Remove all GAP event handlers.
Definition ble.hpp:392
BleError ConfirmJustWorks(ConnectionHandle con_handle)
Confirm "Just Works" pairing.
Definition ble.hpp:589
void AddSecurityEventHandler(const SecurityManager::EventHandler *handler)
Add a Security Manager event handler pointer.
Definition ble.hpp:529
void SetOnBleStackOffCallback(std::function< void()> handler)
Register BLE stack-off callback (non-working state).
Definition ble.hpp:312
BleError SetSecurityKeySizeRange(uint8_t min_key_size, uint8_t max_key_size)
Set Security Manager encryption key size range.
Definition ble.hpp:570
const Gap * GetGap() const
Access the underlying GAP instance (const).
Definition ble.hpp:185
const AttributeServer * GetAttributeServer() const
Access the Attribute Server instance (const).
Definition ble.hpp:267
void EnableAdvertising(bool enabled)
Enable or disable advertising.
Definition ble.hpp:441
SecurityManager * EnableSecurityManager(const SecurityManager::SecurityParameters ¶ms)
Enable and access the Security Manager instance.
BleError Disconnect(ConnectionHandle con_handle)
Disconnect an active connection.
Definition ble.hpp:491
void SetAdvertisementFlags(uint8_t flags)
Set the advertising flags (e.g., general discoverable).
BleError UpdateConnectionParameters(ConnectionHandle con_handle, const Gap::PreferredConnectionParameters ¶ms)
Apply new connection parameters.
Definition ble.hpp:478
void ClearSecurityEventHandlers()
Remove all Security Manager event handlers.
Definition ble.hpp:543
void AddSecurityEventHandler(const SecurityManager::EventHandler &handler)
Add a Security Manager event handler.
Definition ble.hpp:515
AdvertisementDataBuilder & GetAdvertisementDataBuilder()
Access the advertising data builder.
Definition ble.hpp:497
bool RemoveSecurityEventHandler(const SecurityManager::EventHandler &handler)
Remove a Security Manager event handler.
Definition ble.hpp:523
BleError SetSecuritySecureConnectionsOnly(bool enabled)
Enable or disable Secure Connections only mode.
Definition ble.hpp:582
void AddGapEventHandler(const Gap::EventHandler &handler)
Add a GAP event handler.
Definition ble.hpp:380
void SetOnBleStackOffCallback(const T *object, void(T::*method)() const)
Register BLE stack-off callback from a const object/member function.
Definition ble.hpp:335
void SetAdvertisingData(const AdvertisementDataBuilder &data_builder)
Set advertising data from a builder.
Definition ble.hpp:423
void SetOnBleStackOffCallback(void(*handler)())
Register BLE stack-off callback from a function pointer.
Definition ble.hpp:319
bool IsConnected() const
Check whether a GAP connection is active.
Definition ble.hpp:465
void SetOnBleStackOnCallback(std::function< void()> handler)
Register BLE stack-on callback (HCI_STATE_WORKING).
Definition ble.hpp:282
bool RemoveSecurityEventHandler(const SecurityManager::EventHandler *handler)
Remove a Security Manager event handler pointer.
Definition ble.hpp:537
BleError RequestPairing(ConnectionHandle con_handle)
Request pairing with the peer device.
Definition ble.hpp:610
Gap * GetGap()
Access the underlying GAP instance.
Definition ble.hpp:178
const AdvertisementDataBuilder & GetAdvertisementDataBuilder() const
Access the advertising data builder (const).
Definition ble.hpp:503
void SetOnBleStackOnCallback(const T *object, void(T::*method)() const)
Register BLE stack-on callback from a const object/member function.
Definition ble.hpp:305
void SetRandomAddress(const BleAddress &address)
Set the random device address.
Definition ble.hpp:399
const SecurityManager * GetSecurityManager() const
Access the underlying Security Manager instance (const).
Definition ble.hpp:199
BleError ProvidePasskey(ConnectionHandle con_handle, uint32_t passkey)
Provide passkey for keyboard input role.
Definition ble.hpp:603
void SetAdvertisingParameters(const Gap::AdvertisementParameters ¶ms)
Set advertising parameters.
Definition ble.hpp:405
bool IsHCILoggingEnabled() const
Check whether HCI logging is enabled.
Definition ble.hpp:240
BleError ReadRssi(ConnectionHandle con_handle)
Read RSSI for an active connection.
Definition ble.hpp:485
AttributeServer * GetAttributeServer()
Access the Attribute Server instance.
Definition ble.hpp:260
bool IsAdvertisingEnabled() const
Check whether advertising is enabled.
Definition ble.hpp:459
void SetAdvertisingData(const std::vector< uint8_t > &data)
Set advertising data from a vector.
Definition ble.hpp:417
BleError ConfigureSecurity(const SecurityManager::SecurityParameters ¶ms)
Configure the Security Manager parameters.
Definition ble.hpp:552
void EnableHCILoggingToStdout()
Enable HCI event logging to stdout (platform-dependent).
void DisableHCILoggingToStdout()
Disable HCI event logging to stdout (platform-dependent).
bool IsTurnedOn() const
Check whether BLE stack is marked as working.
Definition ble.hpp:358
void SetOnBleStackOnCallback(T *object, void(T::*method)())
Register BLE stack-on callback from an object/member function.
Definition ble.hpp:297
void SetDeviceName(const std::string &name)
Set the GAP device name.
BleError SetSecurityAuthenticationRequirements(SecurityManager::AuthenticationRequirement auth)
Set Security Manager authentication requirements.
Definition ble.hpp:564
BleError ConfirmNumericComparison(ConnectionHandle con_handle, bool accept)
Confirm numeric comparison pairing.
Definition ble.hpp:596
Manages Generic Access Profile (GAP) functionality for BLE.
Definition gap.hpp:210
void SetScanResponseData(uint8_t length, const uint8_t *data)
Set scan response data payload (ADV_SCAN_IND).
BleError Disconnect(ConnectionHandle con_handle)
Disconnect a connection by handle.
bool IsConnected() const
Check if a connection is active.
Definition gap.hpp:1199
void StartAdvertising()
Convenience helpers for starting/stopping advertising.
BleError UpdateConnectionParameters(ConnectionHandle con_handle, const PreferredConnectionParameters ¶ms)
Update connection parameters (central role).
void ClearEventHandlers()
Clear all registered event handlers.
BleError ReadRssi(ConnectionHandle con_handle)
Read the RSSI for a connection.
void EnableAdvertising(bool enabled)
Enable or disable advertising.
void SetRandomAddress(const BleAddress &address)
Set a fixed random address for advertising.
AdvertisementDataBuilder & GetAdvertisementDataBuilder()
Access the internal advertisement data builder.
Definition gap.hpp:1241
void SetAdvertisingParameters(const AdvertisementParameters ¶ms)
Configure legacy advertising parameters.
bool IsAdvertisingEnabled() const
Check if advertising is currently enabled.
Definition gap.hpp:1174
void SetAdvertisingData(const uint8_t *data, size_t size)
Set legacy advertising data payload.
void AddEventHandler(const EventHandler &handler)
Register an event handler.
BleError RequestConnectionParameterUpdate(ConnectionHandle con_handle, const PreferredConnectionParameters ¶ms)
Request a connection parameter update (peripheral role).
bool RemoveEventHandler(const EventHandler &handler)
Unregister an event handler.
Disable both copy and move operations.
Definition non_copyable.hpp:75
Manages BLE security configuration and pairing-related events.
Definition security_manager.hpp:100
BleError RequestPairing(ConnectionHandle con_handle)
Initiate pairing as a client or server.
BleError SetBondable(bool bondable)
Enable or disable bonding.
void AddEventHandler(const EventHandler &handler)
Add an event handler (stored as a pointer).
BleError SetEncryptionKeySizeRange(uint8_t min_key_size, uint8_t max_key_size)
Set minimum and maximum encryption key sizes.
BleError SetSecureConnectionsOnly(bool enabled)
Enable or disable Secure Connections only mode.
AuthenticationRequirement
Authentication requirement flags.
Definition security_manager.hpp:171
AuthorizationResult
Authorization decision.
Definition security_manager.hpp:223
bool RemoveEventHandler(const EventHandler &handler)
Remove an event handler.
IoCapability
Local device IO capabilities used during pairing.
Definition security_manager.hpp:143
BleError ConfirmJustWorks(ConnectionHandle con_handle)
Confirm a "Just Works" pairing request.
BleError SetAuthenticationRequirements(AuthenticationRequirement auth)
Set authentication requirement bitfield.
BleError SetAuthorization(ConnectionHandle con_handle, AuthorizationResult result)
Provide an authorization decision for the given connection.
void ClearEventHandlers()
Remove all registered event handlers.
BleError ConfirmNumericComparison(ConnectionHandle con_handle, bool accept)
Accept or reject a numeric comparison pairing request.
BleError Configure(const SecurityParameters ¶ms)
Apply a full configuration object at once.
BleError SetIoCapability(IoCapability capability)
Set the local IO capability.
BleError ProvidePasskey(ConnectionHandle con_handle, uint32_t passkey)
Provide a passkey for keyboard input role.
Provides a C++ wrapper for the BTstack Generic Access Profile (GAP).
C7222 course abstractions namespace.
Definition ble.hpp:20
uint16_t ConnectionHandle
Definition gap.hpp:23
BleError
BLE error codes used across HCI/L2CAP/ATT/GATT and BTstack helpers.
Definition ble_error.hpp:19
Base classes to control copy/move semantics.
BLE Security Manager configuration and events.
Security Manager event callback interface.
Definition security_manager.hpp:331
Cached security configuration parameters.
Definition security_manager.hpp:284