18#ifndef NIMBLE_CPP_SCAN_H_
19#define NIMBLE_CPP_SCAN_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_OBSERVER)
24# include "NimBLEAdvertisedDevice.h"
25# include "NimBLEUtils.h"
27# if defined(CONFIG_NIMBLE_CPP_IDF)
28# include "host/ble_gap.h"
30# include "nimble/nimble/host/include/host/ble_gap.h"
37class NimBLEAdvertisedDevice;
38class NimBLEScanCallbacks;
48class NimBLEScanResults {
52 const NimBLEAdvertisedDevice* getDevice(uint32_t idx)
const;
53 const NimBLEAdvertisedDevice* getDevice(
const NimBLEAddress& address)
const;
54 std::vector<NimBLEAdvertisedDevice*>::const_iterator begin()
const;
55 std::vector<NimBLEAdvertisedDevice*>::const_iterator end()
const;
59 std::vector<NimBLEAdvertisedDevice*> m_deviceVec;
69 bool start(uint32_t duration,
bool isContinue =
false,
bool restart =
true);
71 void setScanCallbacks(NimBLEScanCallbacks* pScanCallbacks,
bool wantDuplicates =
false);
72 void setActiveScan(
bool active);
73 void setInterval(uint16_t intervalMs);
74 void setWindow(uint16_t windowMs);
75 void setDuplicateFilter(uint8_t enabled);
76 void setLimitedOnly(
bool enabled);
77 void setFilterPolicy(uint8_t filter);
80 NimBLEScanResults getResults();
81 NimBLEScanResults getResults(uint32_t duration,
bool is_continue =
false);
82 void setMaxResults(uint8_t maxResults);
84 void erase(
const NimBLEAdvertisedDevice* device);
86# if MYNEWT_VAL(BLE_EXT_ADV)
87 enum Phy { SCAN_1M = 0x01, SCAN_CODED = 0x02, SCAN_ALL = 0x03 };
88 void setPhy(Phy phyMask);
89 void setPeriod(uint32_t periodMs);
97 static int handleGapEvent(ble_gap_event* event,
void* arg);
100 NimBLEScanCallbacks* m_pScanCallbacks;
101 ble_gap_disc_params m_scanParams;
102 NimBLEScanResults m_scanResults;
104 uint8_t m_maxResults;
106# if MYNEWT_VAL(BLE_EXT_ADV)
107 uint8_t m_phy{SCAN_ALL};
108 uint16_t m_period{0};
115class NimBLEScanCallbacks {
117 virtual ~NimBLEScanCallbacks() {}
123 virtual void onDiscovered(
const NimBLEAdvertisedDevice* advertisedDevice);
129 virtual void onResult(
const NimBLEAdvertisedDevice* advertisedDevice);
136 virtual void onScanEnd(
const NimBLEScanResults& scanResults,
int reason);
A BLE device address.
Definition NimBLEAddress.h:42
A model of a BLE Device from which all the BLE roles are created.
Definition NimBLEDevice.h:116
A structure to hold data for a task that is waiting for a response.
Definition NimBLEUtils.h:45