forked from espressif/arduino-esp32
BLE5 features to use with C3/S3 (#5085)
Added new BLE5 features to use on C3/S3 family: extended scan, extended/multi advertising New code is not fancy (no feedback from events), but i think it is functional. To get feedback from events i am suggesting to use custom GAP callback, which is already implemented in BLEDevice.
This commit is contained in:
@ -19,9 +19,21 @@
|
||||
|
||||
class BLEAdvertisedDevice;
|
||||
class BLEAdvertisedDeviceCallbacks;
|
||||
class BLEExtAdvertisingCallbacks;
|
||||
class BLEClient;
|
||||
class BLEScan;
|
||||
class BLEPeriodicScanCallbacks;
|
||||
|
||||
struct esp_ble_periodic_adv_sync_estab_param_t {
|
||||
uint8_t status; /*!< periodic advertising sync status */
|
||||
uint16_t sync_handle; /*!< periodic advertising sync handle */
|
||||
uint8_t sid; /*!< periodic advertising sid */
|
||||
esp_ble_addr_type_t adv_addr_type; /*!< periodic advertising address type */
|
||||
esp_bd_addr_t adv_addr; /*!< periodic advertising address */
|
||||
esp_ble_gap_phy_t adv_phy; /*!< periodic advertising phy type */
|
||||
uint16_t period_adv_interval; /*!< periodic advertising interval */
|
||||
uint8_t adv_clk_accuracy; /*!< periodic advertising clock accuracy */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The result of having performed a scan.
|
||||
@ -62,13 +74,25 @@ public:
|
||||
BLEScanResults getResults();
|
||||
void clearResults();
|
||||
|
||||
#ifdef CONFIG_BT_BLE_50_FEATURES_SUPPORTED
|
||||
void setExtendedScanCallback(BLEExtAdvertisingCallbacks* cb);
|
||||
void setPeriodicScanCallback(BLEPeriodicScanCallbacks* cb);
|
||||
|
||||
esp_err_t stopExtScan();
|
||||
esp_err_t setExtScanParams();
|
||||
esp_err_t setExtScanParams(esp_ble_ext_scan_params_t* ext_scan_params);
|
||||
esp_err_t startExtScan(uint32_t duration, uint16_t period);
|
||||
private:
|
||||
BLEExtAdvertisingCallbacks* m_pExtendedScanCb = nullptr;
|
||||
BLEPeriodicScanCallbacks* m_pPeriodicScanCb = nullptr;
|
||||
#endif // CONFIG_BT_BLE_50_FEATURES_SUPPORTED
|
||||
|
||||
private:
|
||||
BLEScan(); // One doesn't create a new instance instead one asks the BLEDevice for the singleton.
|
||||
friend class BLEDevice;
|
||||
void handleGAPEvent(
|
||||
esp_gap_ble_cb_event_t event,
|
||||
esp_ble_gap_cb_param_t* param);
|
||||
void parseAdvertisement(BLEClient* pRemoteDevice, uint8_t *payload);
|
||||
|
||||
|
||||
esp_ble_scan_params_t m_scan_params;
|
||||
@ -81,5 +105,18 @@ private:
|
||||
void (*m_scanCompleteCB)(BLEScanResults scanResults);
|
||||
}; // BLEScan
|
||||
|
||||
class BLEPeriodicScanCallbacks {
|
||||
public:
|
||||
virtual ~BLEPeriodicScanCallbacks() {}
|
||||
|
||||
virtual void onCreateSync(esp_bt_status_t status) {}
|
||||
virtual void onCancelSync(esp_bt_status_t status) {}
|
||||
virtual void onTerminateSync(esp_bt_status_t status) {}
|
||||
virtual void onLostSync(uint16_t sync_handle) {}
|
||||
virtual void onSync(esp_ble_periodic_adv_sync_estab_param_t) {}
|
||||
virtual void onReport(esp_ble_gap_periodic_adv_report_t params) {}
|
||||
virtual void onStop(esp_bt_status_t status) {}
|
||||
};
|
||||
|
||||
#endif /* CONFIG_BLUEDROID_ENABLED */
|
||||
#endif /* COMPONENTS_CPP_UTILS_BLESCAN_H_ */
|
||||
|
Reference in New Issue
Block a user