Skip to content

Commit 86b538b

Browse files
committed
Reset advertisment vectors when changing their data.
* Add method to erase all service UUIDS.
1 parent 6934e87 commit 86b538b

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

src/NimBLEAdvertising.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ void NimBLEAdvertising::addServiceUUID(const char* serviceUUID) {
9696

9797

9898
/**
99-
* @brief Add a service uuid to exposed list of services.
100-
* @param [in] serviceUUID The UUID of the service to expose.
99+
* @brief Remove a service UUID from the advertisment.
100+
* @param [in] serviceUUID The UUID of the service to remove.
101101
*/
102102
void NimBLEAdvertising::removeServiceUUID(const NimBLEUUID &serviceUUID) {
103103
for(auto it = m_serviceUUIDs.begin(); it != m_serviceUUIDs.end(); ++it) {
@@ -110,6 +110,15 @@ void NimBLEAdvertising::removeServiceUUID(const NimBLEUUID &serviceUUID) {
110110
} // addServiceUUID
111111

112112

113+
/**
114+
* @brief Remove all service UUIDs from the advertisment.
115+
*/
116+
void NimBLEAdvertising::removeServices() {
117+
std::vector<NimBLEUUID>().swap(m_serviceUUIDs);
118+
m_advDataSet = false;
119+
} // removeServices
120+
121+
113122
/**
114123
* @brief Set the device appearance in the advertising data.
115124
* @param [in] appearance The appearance of the device in the advertising data.
@@ -135,7 +144,7 @@ void NimBLEAdvertising::addTxPower() {
135144
* @param [in] name The name to advertise.
136145
*/
137146
void NimBLEAdvertising::setName(const std::string &name) {
138-
m_name.assign(name.begin(), name.end());
147+
std::vector<uint8_t>(name.begin(), name.end()).swap(m_name);
139148
m_advData.name = &m_name[0];
140149
m_advData.name_len = m_name.size();
141150
m_advDataSet = false;
@@ -147,7 +156,7 @@ void NimBLEAdvertising::setName(const std::string &name) {
147156
* @param [in] data The data to advertise.
148157
*/
149158
void NimBLEAdvertising::setManufacturerData(const std::string &data) {
150-
m_mfgData.assign(data.begin(), data.end());
159+
std::vector<uint8_t>(data.begin(), data.end()).swap(m_mfgData);
151160
m_advData.mfg_data = &m_mfgData[0];
152161
m_advData.mfg_data_len = m_mfgData.size();
153162
m_advDataSet = false;
@@ -171,7 +180,7 @@ void NimBLEAdvertising::setManufacturerData(const std::vector<uint8_t> &data) {
171180
* @param [in] uri The URI to advertise.
172181
*/
173182
void NimBLEAdvertising::setURI(const std::string &uri) {
174-
m_uri.assign(uri.begin(), uri.end());
183+
std::vector<uint8_t>(uri.begin(), uri.end()).swap(m_uri);
175184
m_advData.uri = &m_uri[0];
176185
m_advData.uri_len = m_uri.size();
177186
m_advDataSet = false;
@@ -187,23 +196,26 @@ void NimBLEAdvertising::setURI(const std::string &uri) {
187196
void NimBLEAdvertising::setServiceData(const NimBLEUUID &uuid, const std::string &data) {
188197
switch (uuid.bitSize()) {
189198
case 16: {
190-
m_svcData16.assign((uint8_t*)&uuid.getNative()->u16.value, (uint8_t*)&uuid.getNative()->u16.value + 2);
199+
std::vector<uint8_t>((uint8_t*)&uuid.getNative()->u16.value,
200+
(uint8_t*)&uuid.getNative()->u16.value + 2).swap(m_svcData16);
191201
m_svcData16.insert(m_svcData16.end(), data.begin(), data.end());
192202
m_advData.svc_data_uuid16 = (uint8_t*)&m_svcData16[0];
193203
m_advData.svc_data_uuid16_len = (data.length() > 0) ? m_svcData16.size() : 0;
194204
break;
195205
}
196206

197207
case 32: {
198-
m_svcData32.assign((uint8_t*)&uuid.getNative()->u32.value, (uint8_t*)&uuid.getNative()->u32.value + 4);
208+
std::vector<uint8_t>((uint8_t*)&uuid.getNative()->u32.value,
209+
(uint8_t*)&uuid.getNative()->u32.value + 4).swap(m_svcData32);
199210
m_svcData32.insert(m_svcData32.end(), data.begin(), data.end());
200211
m_advData.svc_data_uuid32 = (uint8_t*)&m_svcData32[0];
201212
m_advData.svc_data_uuid32_len = (data.length() > 0) ? m_svcData32.size() : 0;
202213
break;
203214
}
204215

205216
case 128: {
206-
m_svcData128.assign(uuid.getNative()->u128.value, uuid.getNative()->u128.value + 16);
217+
std::vector<uint8_t>(uuid.getNative()->u128.value,
218+
uuid.getNative()->u128.value + 16).swap(m_svcData128);
207219
m_svcData128.insert(m_svcData128.end(), data.begin(), data.end());
208220
m_advData.svc_data_uuid128 = (uint8_t*)&m_svcData128[0];
209221
m_advData.svc_data_uuid128_len = (data.length() > 0) ? m_svcData128.size() : 0;

src/NimBLEAdvertising.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class NimBLEAdvertising {
9898
void addServiceUUID(const char* serviceUUID);
9999
void removeServiceUUID(const NimBLEUUID &serviceUUID);
100100
bool start(uint32_t duration = 0, advCompleteCB_t advCompleteCB = nullptr, NimBLEAddress* dirAddr = nullptr);
101+
void removeServices();
101102
bool stop();
102103
void setAppearance(uint16_t appearance);
103104
void setName(const std::string &name);

0 commit comments

Comments
 (0)