5#ifndef ELEC_C7222_BLE_GAP_H_
6#define ELEC_C7222_BLE_GAP_H_
385 enum class Phy : uint8_t {
716 uint8_t data_length)
const {}
744 uint16_t conn_interval,
745 uint16_t conn_latency,
746 uint16_t supervision_timeout)
const {}
762 uint16_t min_interval,
763 uint16_t max_interval,
765 uint16_t supervision_timeout)
const {}
780 uint16_t conn_interval,
781 uint16_t conn_latency,
782 uint16_t supervision_timeout)
const {}
795 uint8_t reason)
const {}
836 uint16_t rx_size)
const {}
905 const uint8_t* c_192,
906 const uint8_t* r_192,
907 const uint8_t* c_256,
908 const uint8_t* r_256)
const {}
923 bool initiator)
const {}
936 uint8_t status)
const {}
1079 bool ok = advertisement_data_builder_.
Build();
1080 assert(ok &&
"AdvertisementDataBuilder contains invalid data or is empty");
1159 return event_handlers_;
1175 return advertisement_enabled_;
1186 return advertising_;
1193 return advertising_params_set_;
1215 return random_address_set_;
1232 return advertisement_data_builder_.
data();
1242 return advertisement_data_builder_;
1249 return advertisement_data_builder_;
1256 return advertising_data_set_;
1265 return scan_response_data_;
1272 return scan_response_data_set_;
1281 return connection_parameters_;
1298 const uint8_t* packet_data,
1299 uint16_t packet_data_size);
1311 const uint8_t* event_data,
1312 uint16_t event_data_size);
1316 Gap(
const Gap&) =
delete;
1317 Gap& operator=(
const Gap&) =
delete;
1326 static Gap* instance_;
1331 bool advertisement_enabled_ =
false;
1336 bool advertising_ =
false;
1340 bool advertising_params_set_ =
false;
1349 bool connected_ =
false;
1358 bool random_address_set_ =
false;
1363 AdvertisementParameters advertising_params_{};
1367 bool advertising_data_set_ =
false;
1372 std::vector<uint8_t> scan_response_data_{};
1376 bool scan_response_data_set_ =
false;
1381 std::map<ConnectionHandle, ConnectionParameters> connection_parameters_;
1385 std::list<const EventHandler*> event_handlers_;
1399 return static_cast<uint8_t
>(lhs) |
static_cast<uint8_t
>(rhs);
1402 uint8_t ret = lhs |
static_cast<uint8_t
>(rhs);
1407 uint8_t ret = lhs |
static_cast<uint8_t
>(rhs);
1412 uint8_t ret =
static_cast<uint8_t
>(lhs) | rhs;
1419 return static_cast<uint8_t
>(lhs) &
static_cast<uint8_t
>(rhs);
1423 uint8_t ret = lhs &
static_cast<uint8_t
>(rhs);
1429 uint8_t ret = lhs &
static_cast<uint8_t
>(rhs);
1435 uint8_t ret =
static_cast<uint8_t
>(lhs) & rhs;
1441 uint8_t ret = lhs ^
static_cast<uint8_t
>(rhs);
1446 uint8_t ret = lhs ^
static_cast<uint8_t
>(rhs);
1451 uint8_t ret =
static_cast<uint8_t
>(lhs) & rhs;
BLE GAP advertisement data builder.
Builder for assembling a complete advertising payload.
Definition advertisement_data.hpp:304
bool Build()
Build the raw payload from stored AD structures.
const std::vector< uint8_t > & data() const
Return the raw advertising payload bytes.
BLE address container with an associated address type.
Definition ble_address.hpp:43
Manages Generic Access Profile (GAP) functionality for BLE.
Definition gap.hpp:210
DirectAddressType
Direct address type for directed advertising.
Definition gap.hpp:429
bool IsScanResponseDataSet() const
Check if scan response data has been set.
Definition gap.hpp:1271
AdvertisingFilterPolicy
Advertising filter policy.
Definition gap.hpp:465
@ kScanAnyConnectWhitelist
@ kScanWhitelistConnectWhitelist
@ kScanWhitelistConnectAny
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.
virtual BleError DispatchBleHciPacket(uint8_t packet_type, const uint8_t *packet_data, uint16_t packet_data_size)
Dispatch a raw HCI packet into the GAP event pipeline.
bool IsAdvertising() const
Check if advertising is currently running on the controller.
Definition gap.hpp:1185
BleError UpdateConnectionParameters(ConnectionHandle con_handle, const PreferredConnectionParameters ¶ms)
Update connection parameters (central role).
bool GetConnectionParameters(ConnectionHandle con_handle, ConnectionParameters &out) const
Get cached connection parameters for a handle.
void SetAdvertisingData(const AdvertisementDataBuilder &data_builder)
Set legacy advertising data payload from an AdvertisementDataBuilder.
void ClearEventHandlers()
Clear all registered event handlers.
BleError ReadRssi(ConnectionHandle con_handle)
Read the RSSI for a connection.
bool IsAdvertisingDataSet() const
Check if advertising data has been set.
Definition gap.hpp:1255
void SetAdvertisingData()
Set legacy advertising data payload from the internal builder.
Definition gap.hpp:1078
bool GetRandomAddress(BleAddress &address) const
Get the random address if set.
void EnableAdvertising(bool enabled)
Enable or disable advertising.
std::list< const EventHandler * > GetEventHandlers() const
Get the list of registered event handlers.
Definition gap.hpp:1158
void SetRandomAddress(const BleAddress &address)
Set a fixed random address for advertising.
bool IsAdvertisingParametersSet() const
Check if advertising parameters have been set.
Definition gap.hpp:1192
AdvertisingChannelMap
Advertising channel map bitfield.
Definition gap.hpp:443
AdvertisingType
Legacy advertising types for LE advertising parameters.
Definition gap.hpp:407
AdvertisementDataBuilder & GetAdvertisementDataBuilder()
Access the internal advertisement data builder.
Definition gap.hpp:1241
bool GetAdvertisingParameters(AdvertisementParameters ¶ms) const
Get the current advertising parameters.
void SetLocalAddress(BleAddress &address)
Read the local device address.
const std::vector< uint8_t > & GetAdvertisingData() const
Get the advertising data payload.
Definition gap.hpp:1231
const std::map< ConnectionHandle, ConnectionParameters > & GetConnectionParameters() const
Access the cached connection parameter map.
Definition gap.hpp:1280
void SetAdvertisingParameters(const AdvertisementParameters ¶ms)
Configure legacy advertising parameters.
AdvertisingEventType
Extended advertising event properties (bitfield).
Definition gap.hpp:351
void SetAdvertisingData(const std::vector< uint8_t > &data)
Set legacy advertising data payload from a vector.
Definition gap.hpp:1061
static Gap * GetInstance()
Get the singleton instance.
virtual BleError DispatchEvent(EventId event_id, const uint8_t *event_data, uint16_t event_data_size)
Dispatch a mapped GAP event to registered handlers.
bool IsAdvertisingEnabled() const
Check if advertising is currently enabled.
Definition gap.hpp:1174
Phy
LE PHY values reported in extended advertising reports.
Definition gap.hpp:385
const AdvertisementDataBuilder & GetAdvertisementDataBuilder() const
Access the internal advertisement data builder (const).
Definition gap.hpp:1248
bool IsRandomAddressSet() const
Check if a random address has been set.
Definition gap.hpp:1214
const std::vector< uint8_t > & scan_response_data() const
Get the scan response data payload.
Definition gap.hpp:1264
void SetAdvertisingData(const uint8_t *data, size_t size)
Set legacy advertising data payload.
EventId
Event IDs used by Gap::EventHandler.
Definition gap.hpp:215
@ kLeConnectionUpdateComplete
@ kLeEnhancedConnectionComplete
@ kExtendedAdvertisingReport
@ kLePeriodicAdvertisingReport
@ kLePeriodicAdvertisingSyncEstablished
@ kDedicatedBondingCompleted
@ kLeRemoteConnectionParameterRequest
@ kL2capConnectionParameterUpdateRequest
@ kLePeriodicAdvertisingSyncLost
@ kLeAdvertisingSetTerminated
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
constexpr uint8_t operator&=(uint8_t lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1428
constexpr uint8_t operator^(uint8_t lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1440
constexpr uint8_t operator&(c7222::Gap::AdvertisingChannelMap lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1417
constexpr uint8_t operator|=(uint8_t lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1406
std::ostream & operator<<(std::ostream &os, c7222::Gap::AdvertisingEventType type)
constexpr uint8_t operator|(c7222::Gap::AdvertisingChannelMap lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1397
constexpr uint8_t operator^=(uint8_t lhs, c7222::Gap::AdvertisingChannelMap rhs)
Definition gap.hpp:1445
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.
AdvertisementParameters()
Construct typical connectable undirected advertising parameters.
Definition gap.hpp:992
BleAddress direct_address
Direct target address for directed advertising.
Definition gap.hpp:965
DirectAddressType direct_address_type
Direct address type used for directed advertising.
Definition gap.hpp:958
uint8_t channel_map
Advertising channel map bitfield.
Definition gap.hpp:979
uint16_t min_interval
Minimum advertising interval (unit: 0.625 ms).
Definition gap.hpp:969
AdvertisingType advertising_type
Legacy advertising type (ADV_IND, ADV_SCAN_IND, etc.).
Definition gap.hpp:952
AdvertisingFilterPolicy filter_policy
Advertising filter policy.
Definition gap.hpp:985
uint16_t max_interval
Maximum advertising interval (unit: 0.625 ms).
Definition gap.hpp:973
uint8_t data_length
Definition gap.hpp:504
AdvertisingEventType advertising_event_type
Definition gap.hpp:488
BleAddress address
Definition gap.hpp:492
int8_t rssi
Definition gap.hpp:496
friend std::ostream & operator<<(std::ostream &os, const AdvertisingReport &ar)
const uint8_t * data
Definition gap.hpp:500
uint16_t interval
Current connection interval (unit: 1.25 ms).
Definition gap.hpp:1027
uint16_t latency
Current slave latency (number of connection events to skip).
Definition gap.hpp:1031
uint16_t supervision_timeout
Current supervision timeout (unit: 10 ms).
Definition gap.hpp:1035
virtual void OnUpdateConnectionParametersRequest(ConnectionHandle con_handle, uint16_t min_interval, uint16_t max_interval, uint16_t latency, uint16_t supervision_timeout) const
Definition gap.hpp:761
virtual void OnDedicatedBondingCompleted(uint8_t status, const BleAddress &address) const
Definition gap.hpp:863
virtual void OnReadPhy(uint8_t status, ConnectionHandle con_handle, Phy tx_phy, Phy rx_phy) const
Definition gap.hpp:808
virtual void OnPrivacyEnabled() const
Definition gap.hpp:843
virtual void OnInquiryResult(const InquiryResult &result) const
Definition gap.hpp:872
virtual void OnScanRequestReceived(uint8_t advertising_handle, const BleAddress &scanner_address) const
GAP event callback interface.
Definition gap.hpp:633
virtual void OnConnectionComplete(uint8_t status, ConnectionHandle con_handle, const BleAddress &address, uint16_t conn_interval, uint16_t conn_latency, uint16_t supervision_timeout) const
Definition gap.hpp:741
virtual void OnDisconnectionComplete(uint8_t status, ConnectionHandle con_handle, uint8_t reason) const
Definition gap.hpp:793
virtual void OnInquiryComplete(uint8_t status) const
Definition gap.hpp:881
virtual void OnDataLengthChange(ConnectionHandle con_handle, uint16_t tx_size, uint16_t rx_size) const
Definition gap.hpp:834
virtual void OnRssiMeasurement(ConnectionHandle con_handle, int8_t rssi) const
Definition gap.hpp:891
virtual void OnExtendedAdvertisingReport(const ExtendedAdvertisingReport &report) const
Definition gap.hpp:676
virtual void OnPhyUpdateComplete(uint8_t status, ConnectionHandle con_handle, Phy tx_phy, Phy rx_phy) const
Definition gap.hpp:820
virtual void OnConnectionParametersUpdateComplete(uint8_t status, ConnectionHandle con_handle, uint16_t conn_interval, uint16_t conn_latency, uint16_t supervision_timeout) const
Definition gap.hpp:778
virtual void OnAdvertisingStart(uint8_t status) const
Definition gap.hpp:643
virtual void OnPeriodicAdvertisingSyncEstablished(uint8_t status, ConnectionHandle sync_handle) const
Definition gap.hpp:696
virtual void OnPairingComplete(ConnectionHandle con_handle, const BleAddress &address, uint8_t status) const
Definition gap.hpp:934
virtual void OnAdvertisingEnd(uint8_t status, ConnectionHandle connection_handle) const
Definition gap.hpp:658
virtual void OnScanTimeout(uint8_t status) const
Definition gap.hpp:685
virtual void OnPairingStarted(ConnectionHandle con_handle, const BleAddress &address, bool ssp, bool initiator) const
Definition gap.hpp:920
virtual void OnLocalOobData(bool oob_data_present, const uint8_t *c_192, const uint8_t *r_192, const uint8_t *c_256, const uint8_t *r_256) const
Definition gap.hpp:904
virtual void OnPeriodicAdvertisingSyncLoss(ConnectionHandle sync_handle) const
Definition gap.hpp:725
virtual void OnSecurityLevel(ConnectionHandle con_handle, uint8_t security_level) const
Definition gap.hpp:853
virtual void OnAdvertisingReport(const AdvertisingReport &report) const
Definition gap.hpp:667
virtual void OnPeriodicAdvertisingReport(ConnectionHandle sync_handle, int8_t tx_power, int8_t rssi, uint8_t data_status, const uint8_t *data, uint8_t data_length) const
Definition gap.hpp:711
const uint8_t * data
Definition gap.hpp:548
uint8_t advertising_sid
Definition gap.hpp:528
AdvertisingEventType advertising_event_type
Definition gap.hpp:512
Phy primary_phy
Definition gap.hpp:520
BleAddress address
Definition gap.hpp:516
int8_t tx_power
Definition gap.hpp:532
uint16_t periodic_advertising_interval
Definition gap.hpp:540
Phy secondary_phy
Definition gap.hpp:524
int8_t rssi
Definition gap.hpp:536
uint8_t data_length
Definition gap.hpp:552
BleAddress direct_address
Definition gap.hpp:544
friend std::ostream & operator<<(std::ostream &os, const ExtendedAdvertisingReport &ear)
uint16_t device_id_vendor_id
Definition gap.hpp:592
uint8_t name_len
Definition gap.hpp:612
bool name_available
Definition gap.hpp:604
const uint8_t * name
Definition gap.hpp:608
uint32_t class_of_device
Definition gap.hpp:568
friend std::ostream & operator<<(std::ostream &os, const InquiryResult &ir)
uint16_t device_id_version
Definition gap.hpp:600
int8_t rssi
Definition gap.hpp:580
bool rssi_available
Definition gap.hpp:576
BleAddress address
Definition gap.hpp:560
uint16_t device_id_vendor_id_source
Definition gap.hpp:588
uint16_t device_id_product_id
Definition gap.hpp:596
bool device_id_available
Definition gap.hpp:584
uint8_t page_scan_repetition_mode
Definition gap.hpp:564
uint16_t clock_offset
Definition gap.hpp:572
uint16_t max_interval
Maximum connection interval (unit: 1.25 ms).
Definition gap.hpp:1010
uint16_t slave_latency
Slave latency (number of connection events to skip).
Definition gap.hpp:1014
uint16_t min_interval
Minimum connection interval (unit: 1.25 ms).
Definition gap.hpp:1006
uint16_t supervision_timeout
Supervision timeout (unit: 10 ms).
Definition gap.hpp:1020