18#ifndef NIMBLE_CPP_EXTADVERTISING_H_
19#define NIMBLE_CPP_EXTADVERTISING_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_EXT_ADV)
24# if defined(CONFIG_NIMBLE_CPP_IDF)
25# include "host/ble_gap.h"
27# include "nimble/nimble/host/include/host/ble_gap.h"
35# include "NimBLEAddress.h"
40class NimBLEExtAdvertisingCallbacks;
46class NimBLEExtAdvertisement {
48 NimBLEExtAdvertisement(uint8_t priPhy = BLE_HCI_LE_PHY_1M, uint8_t secPhy = BLE_HCI_LE_PHY_1M);
49 bool setAppearance(uint16_t appearance);
50 bool addServiceUUID(
const NimBLEUUID& serviceUUID);
51 bool addServiceUUID(
const char* serviceUUID);
52 bool removeServiceUUID(
const NimBLEUUID& serviceUUID);
53 bool removeServiceUUID(
const char* serviceUUID);
54 bool removeServices();
55 bool setCompleteServices(
const NimBLEUUID& uuid);
56 bool setCompleteServices16(
const std::vector<NimBLEUUID>& uuids);
57 bool setCompleteServices32(
const std::vector<NimBLEUUID>& uuids);
58 bool setFlags(uint8_t flag);
59 bool setManufacturerData(
const uint8_t* data,
size_t length);
60 bool setManufacturerData(
const std::string& data);
61 bool setManufacturerData(
const std::vector<uint8_t>& data);
62 bool setURI(
const std::string& uri);
63 bool setName(
const std::string& name,
bool isComplete =
true);
64 bool setPartialServices(
const NimBLEUUID& uuid);
65 bool setPartialServices16(
const std::vector<NimBLEUUID>& uuids);
66 bool setPartialServices32(
const std::vector<NimBLEUUID>& uuids);
67 bool setServiceData(
const NimBLEUUID& uuid,
const uint8_t* data,
size_t length);
68 bool setServiceData(
const NimBLEUUID& uuid,
const std::string& data);
69 bool setServiceData(
const NimBLEUUID& uuid,
const std::vector<uint8_t>& data);
70 bool setShortName(
const std::string& name);
71 bool setData(
const uint8_t* data,
size_t length);
72 bool addData(
const uint8_t* data,
size_t length);
73 bool addData(
const std::string& data);
74 bool setPreferredParams(uint16_t min, uint16_t max);
76 void setLegacyAdvertising(
bool enable);
77 void setConnectable(
bool enable);
78 void setScannable(
bool enable);
79 void setMinInterval(uint32_t mininterval);
80 void setMaxInterval(uint32_t maxinterval);
81 void setPrimaryPhy(uint8_t phy);
82 void setSecondaryPhy(uint8_t phy);
83 void setScanFilter(
bool scanRequestWhitelistOnly,
bool connectWhitelistOnly);
85 void setDirected(
bool enable,
bool high_duty =
true);
86 void setAnonymous(
bool enable);
87 void setPrimaryChannels(
bool ch37,
bool ch38,
bool ch39);
88 void setTxPower(int8_t dbm);
90 void enableScanRequestCallback(
bool enable);
92 int getDataLocation(uint8_t type)
const;
93 bool removeData(uint8_t type);
94 size_t getDataSize()
const;
95 std::string toString()
const;
98 friend class NimBLEExtAdvertising;
100 bool setServices(
bool complete, uint8_t size,
const std::vector<NimBLEUUID>& uuids);
102 std::vector<uint8_t> m_payload{};
103 ble_gap_ext_adv_params m_params{};
110class NimBLEExtAdvertising {
112 NimBLEExtAdvertising();
113 ~NimBLEExtAdvertising();
114 bool start(uint8_t instId,
int duration = 0,
int maxEvents = 0);
115 bool setInstanceData(uint8_t instId, NimBLEExtAdvertisement& adv);
116 bool setScanResponseData(uint8_t instId, NimBLEExtAdvertisement& data);
117 bool removeInstance(uint8_t instId);
119 bool stop(uint8_t instId);
121 bool isActive(uint8_t instId);
122 bool isAdvertising();
123 void setCallbacks(NimBLEExtAdvertisingCallbacks* callbacks,
bool deleteCallbacks =
true);
127 friend class NimBLEServer;
130 static int handleGapEvent(
struct ble_gap_event* event,
void* arg);
132 bool m_deleteCallbacks;
133 NimBLEExtAdvertisingCallbacks* m_pCallbacks;
134 std::vector<bool> m_advStatus;
140class NimBLEExtAdvertisingCallbacks {
142 virtual ~NimBLEExtAdvertisingCallbacks() {};
150 virtual void onStopped(NimBLEExtAdvertising* pAdv,
int reason, uint8_t instId);
159 virtual void onScanRequest(NimBLEExtAdvertising* pAdv, uint8_t instId,
NimBLEAddress addr);
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 model of a BLE UUID.
Definition NimBLEUUID.h:41