esp-nimble-cpp 2.3.2
Loading...
Searching...
No Matches
NimBLEExtAdvertising.h
1/*
2 * Copyright 2020-2025 Ryan Powell <ryan@nable-embedded.io> and
3 * esp-nimble-cpp, NimBLE-Arduino contributors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef NIMBLE_CPP_EXTADVERTISING_H_
19#define NIMBLE_CPP_EXTADVERTISING_H_
20
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_EXT_ADV)
23
24# if defined(CONFIG_NIMBLE_CPP_IDF)
25# include "host/ble_gap.h"
26# else
27# include "nimble/nimble/host/include/host/ble_gap.h"
28# endif
29
30/**** FIX COMPILATION ****/
31# undef min
32# undef max
33/**************************/
34
35# include "NimBLEAddress.h"
36
37# include <string>
38# include <vector>
39
40class NimBLEExtAdvertisingCallbacks;
41class NimBLEUUID;
42
46class NimBLEExtAdvertisement {
47 public:
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);
75 bool addTxPower();
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);
84 void setDirectedPeer(const NimBLEAddress& addr);
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);
89 void setAddress(const NimBLEAddress& addr);
90 void enableScanRequestCallback(bool enable);
91 void clearData();
92 int getDataLocation(uint8_t type) const;
93 bool removeData(uint8_t type);
94 size_t getDataSize() const;
95 std::string toString() const;
96
97 private:
98 friend class NimBLEExtAdvertising;
99
100 bool setServices(bool complete, uint8_t size, const std::vector<NimBLEUUID>& uuids);
101
102 std::vector<uint8_t> m_payload{};
103 ble_gap_ext_adv_params m_params{};
104 NimBLEAddress m_advAddress{};
105}; // NimBLEExtAdvertisement
106
110class NimBLEExtAdvertising {
111 public:
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);
118 bool removeAll();
119 bool stop(uint8_t instId);
120 bool stop();
121 bool isActive(uint8_t instId);
122 bool isAdvertising();
123 void setCallbacks(NimBLEExtAdvertisingCallbacks* callbacks, bool deleteCallbacks = true);
124
125 private:
126 friend class NimBLEDevice;
127 friend class NimBLEServer;
128
129 void onHostSync();
130 static int handleGapEvent(struct ble_gap_event* event, void* arg);
131
132 bool m_deleteCallbacks;
133 NimBLEExtAdvertisingCallbacks* m_pCallbacks;
134 std::vector<bool> m_advStatus;
135};
136
140class NimBLEExtAdvertisingCallbacks {
141 public:
142 virtual ~NimBLEExtAdvertisingCallbacks() {};
143
150 virtual void onStopped(NimBLEExtAdvertising* pAdv, int reason, uint8_t instId);
151
159 virtual void onScanRequest(NimBLEExtAdvertising* pAdv, uint8_t instId, NimBLEAddress addr);
160}; // NimBLEExtAdvertisingCallbacks
161
162#endif // CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_EXT_ADV)
163#endif // NIMBLE_CPP_EXTADVERTISING_H_
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