Skip to content

Commit 69eee69

Browse files
paul-szczepanek-armDonatien Garnier
authored andcommitted
don't remake sets
1 parent eb6b496 commit 69eee69

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

BLE_PeriodicAdvertising/source/main.cpp

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
7878

7979
ble_error_t error = _ble.init(this, &PeriodicDemo::on_init_complete);
8080
if (error) {
81-
print_error(error, "Error returned by BLE::init");
81+
print_error(error, "Error returned by BLE::init\r\n");
8282
return;
8383
}
8484

@@ -94,13 +94,13 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
9494
void on_init_complete(BLE::InitializationCompleteCallbackContext *event)
9595
{
9696
if (event->error) {
97-
print_error(event->error, "Error during the initialisation");
97+
print_error(event->error, "Error during the initialisation\r\n");
9898
return;
9999
}
100100

101101
if (!_gap.isFeatureSupported(ble::controller_supported_features_t::LE_EXTENDED_ADVERTISING) ||
102102
!_gap.isFeatureSupported(ble::controller_supported_features_t::LE_PERIODIC_ADVERTISING)) {
103-
printf("Periodic advertising not supported, cannot run example.");
103+
printf("Periodic advertising not supported, cannot run example.\r\n");
104104
return;
105105
}
106106

@@ -125,8 +125,10 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
125125
_is_scanner = !_is_scanner;
126126

127127
if (_is_scanner) {
128+
if (_adv_handle != ble::INVALID_ADVERTISING_HANDLE) _ble.gap().stopAdvertising(_adv_handle);
128129
_event_queue.call(this, &PeriodicDemo::scan);
129130
} else {
131+
_ble.gap().stopScan();
130132
_event_queue.call(this, &PeriodicDemo::advertise);
131133
}
132134
}
@@ -135,20 +137,25 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
135137
/** Set up and start advertising */
136138
void advertise()
137139
{
140+
ble_error_t error;
141+
138142
ble::AdvertisingParameters adv_params;
139143
adv_params.setUseLegacyPDU(false);
140144

141-
/* create the advertising set with its parameter */
142-
ble_error_t error = _gap.createAdvertisingSet(
143-
&_adv_handle,
144-
adv_params
145-
);
145+
/* create the advertising set with its parameter if we haven't yet */
146+
if (_adv_handle == ble::INVALID_ADVERTISING_HANDLE) {
147+
error = _gap.createAdvertisingSet(
148+
&_adv_handle,
149+
adv_params
150+
);
146151

147-
if (error) {
148-
print_error(error, "Gap::createAdvertisingSet() failed");
149-
return;
152+
if (error) {
153+
print_error(error, "Gap::createAdvertisingSet() failed\r\n");
154+
return;
155+
}
150156
}
151157

158+
_adv_data_builder.clear();
152159
_adv_data_builder.setFlags();
153160
_adv_data_builder.setName(DEVICE_NAME);
154161

@@ -159,7 +166,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
159166
);
160167

161168
if (error) {
162-
print_error(error, "Gap::setAdvertisingPayload() failed");
169+
print_error(error, "Gap::setAdvertisingPayload() failed\r\n");
163170
return;
164171
}
165172

@@ -170,12 +177,13 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
170177
ble::adv_duration_t random_duration(random_duration_ms);
171178

172179
error = _ble.gap().startAdvertising(
173-
_adv_handle,
174-
random_duration
180+
_adv_handle/*,
181+
random_duration*/
182+
);
175183
);
176184

177185
if (error) {
178-
print_error(error, "Gap::startAdvertising() failed");
186+
print_error(error, "Gap::startAdvertising() failed\r\n");
179187
return;
180188
}
181189

@@ -190,7 +198,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
190198
ble_error_t error = _gap.startAdvertising(_adv_handle);
191199

192200
if (error) {
193-
print_error(error, "Gap::startAdvertising() failed");
201+
print_error(error, "Gap::startAdvertising() failed\r\n");
194202
return;
195203
}
196204

@@ -201,7 +209,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
201209
);
202210

203211
if (error) {
204-
print_error(error, "Gap::setPeriodicAdvertisingParameters() failed");
212+
print_error(error, "Gap::setPeriodicAdvertisingParameters() failed\r\n");
205213
return;
206214
}
207215

@@ -211,7 +219,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
211219
error = _gap.startPeriodicAdvertising(_adv_handle);
212220

213221
if (error) {
214-
print_error(error, "Gap::startPeriodicAdvertising() failed");
222+
print_error(error, "Gap::startPeriodicAdvertising() failed\r\n");
215223
return;
216224
}
217225

@@ -230,7 +238,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
230238
);
231239

232240
if (error) {
233-
print_error(error, "AdvertisingDataBuilder::setFlags() failed");
241+
print_error(error, "AdvertisingDataBuilder::setFlags() failed\r\n");
234242
return;
235243
}
236244

@@ -242,7 +250,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
242250
);
243251

244252
if (error) {
245-
print_error(error, "Gap::setPeriodicAdvertisingPayload() failed");
253+
print_error(error, "Gap::setPeriodicAdvertisingPayload() failed\r\n");
246254
return;
247255
}
248256
}
@@ -257,7 +265,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
257265
);
258266

259267
if (error) {
260-
print_error(error, "Error caused by Gap::setScanParameters");
268+
print_error(error, "Error caused by Gap::setScanParameters\r\n");
261269
return;
262270
}
263271

@@ -266,7 +274,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
266274
);
267275

268276
if (error) {
269-
print_error(error, "Error caused by Gap::startScan");
277+
print_error(error, "Error caused by Gap::startScan\r\n");
270278
return;
271279
}
272280

@@ -280,7 +288,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
280288
ble_error_t error = _gap.startScan();
281289

282290
if (error) {
283-
print_error(error, "Error caused by Gap::startScan");
291+
print_error(error, "Error caused by Gap::startScan\r\n");
284292
return;
285293
}
286294

@@ -408,7 +416,7 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
408416
if (event.getStatus() == BLE_ERROR_NONE) {
409417
printf("Synced with periodic advertising\r\n");
410418
} else {
411-
_event_queue.call(this, &PeriodicDemo::scan_periodic);
419+
_sync_handle = event.getSyncHandle();
412420
}
413421
}
414422

@@ -440,6 +448,8 @@ class PeriodicDemo : private mbed::NonCopyable<PeriodicDemo>, public ble::Gap::E
440448
virtual void onPeriodicAdvertisingSyncLoss(
441449
const ble::PeriodicAdvertisingSyncLoss &event
442450
) {
451+
printf("Sync to periodic advertising lost\r\n");
452+
_sync_handle = ble::INVALID_ADVERTISING_HANDLE;
443453
_event_queue.call(this, &PeriodicDemo::scan_periodic);
444454
}
445455

0 commit comments

Comments
 (0)