10000 Changes for #337 · chegewara/esp32-snippets@1ce0938 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1ce0938

Browse files
committed
Changes for nkolban#337
1 parent 307868b commit 1ce0938

File tree

3 files changed

+54
-11
lines changed

3 files changed

+54
-11
lines changed

cpp_utils/BLEAdvertising.cpp

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ void BLEAdvertisementData::addData(std::string data) {
259259
void BLEAdvertisementData::setAppearance(uint16_t appearance) {
260260
char cdata[2];
261261
cdata[0] = 3;
262-
cdata[1] = ESP_BLE_AD_TYPE_APPEARANCE;
262+
cdata[1] = ESP_BLE_AD_TYPE_APPEARANCE; // 0x19
263263
addData(std::string(cdata, 2) + std::string((char *)&appearance,2));
264264
} // setAppearance
265265

@@ -274,23 +274,23 @@ void BLEAdvertisementData::setCompleteServices(BLEUUID uuid) {
274274
case 16: {
275275
// [Len] [0x02] [LL] [HH]
276276
cdata[0] = 3;
277-
cdata[1] = ESP_BLE_AD_TYPE_16SRV_CMPL;
277+
cdata[1] = ESP_BLE_AD_TYPE_16SRV_CMPL; // 0x03
278278
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid16,2));
279279
break;
280280
}
281281

282282
case 32: {
283283
// [Len] [0x04] [LL] [LL] [HH] [HH]
284284
cdata[0] = 5;
285-
cdata[1] = ESP_BLE_AD_TYPE_32SRV_CMPL;
285+
cdata[1] = ESP_BLE_AD_TYPE_32SRV_CMPL; // 0x05
286286
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid32,4));
287287
break;
288288
}
289289

290290
case 128: {
291291
// [Len] [0x04] [0] [1] ... [15]
292292
cdata[0] = 17;
293-
cdata[1] = ESP_BLE_AD_TYPE_128SRV_CMPL;
293+
cdata[1] = ESP_BLE_AD_TYPE_128SRV_CMPL; // 0x07
294294
addData(std::string(cdata, 2) + std::string((char *)uuid.getNative()->uuid.uuid128,16));
295295
break;
296296
}
@@ -315,7 +315,7 @@ void BLEAdvertisementData::setCompleteServices(BLEUUID uuid) {
315315
void BLEAdvertisementData::setFlags(uint8_t flag) {
316316
char cdata[3];
317317
cdata[0] = 2;
318-
cdata[1] = ESP_BLE_AD_TYPE_FLAG;
318+
cdata[1] = ESP_BLE_AD_TYPE_FLAG; // 0x01
319319
cdata[2] = flag;
320320
addData(std::string(cdata, 3));
321321
} // setFlag
@@ -330,7 +330,7 @@ void BLEAdvertisementData::setManufacturerData(std::string data) {
330330
ESP_LOGD("BLEAdvertisementData", ">> setManufacturerData");
331331
char cdata[2];
332332
cdata[0] = data.length() + 1;
333-
cdata[1] = ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE;
333+
cdata[1] = ESP_BLE_AD_MANUFACTURER_SPECIFIC_TYPE; // 0xff
334334
addData(std::string(cdata, 2) + data);
335335
ESP_LOGD("BLEAdvertisementData", "<< setManufacturerData");
336336
} // setManufacturerData
@@ -344,7 +344,7 @@ void BLEAdvertisementData::setName(std::string name) {
344344
ESP_LOGD("BLEAdvertisementData", ">> setName: %s", name.c_str());
345345
char cdata[2];
346346
cdata[0] = name.length() + 1;
347-
cdata[1] = ESP_BLE_AD_TYPE_NAME_CMPL;
347+
cdata[1] = ESP_BLE_AD_TYPE_NAME_CMPL; // 0x09
348348
addData(std::string(cdata, 2) + name);
349349
ESP_LOGD("BLEAdvertisementData", "<< setName");
350350
} // setName
@@ -360,23 +360,23 @@ void BLEAdvertisementData::setPartialServices(BLEUUID uuid) {
360360
case 16: {
361361
// [Len] [0x02] [LL] [HH]
362362
cdata[0] = 3;
363-
cdata[1] = ESP_BLE_AD_TYPE_16SRV_PART;
363+
cdata[1] = ESP_BLE_AD_TYPE_16SRV_PART; // 0x02
364364
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid16,2));
365365
break;
366366
}
367367

368368
case 32: {
369369
// [Len] [0x04] [LL] [LL] [HH] [HH]
370370
cdata[0] = 5;
371-
cdata[1] = ESP_BLE_AD_TYPE_32SRV_PART;
371+
cdata[1] = ESP_BLE_AD_TYPE_32SRV_PART; // 0x04
372372
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid32,4));
373373
break;
374374
}
375375

376376
case 128: {
377377
// [Len] [0x04] [0] [1] ... [15]
378378
cdata[0] = 17;
379-
cdata[1] = ESP_BLE_AD_TYPE_128SRV_PART;
379+
cdata[1] = ESP_BLE_AD_TYPE_128SRV_PART; // 0x06
380380
addData(std::string(cdata, 2) + std::string((char *)uuid.getNative()->uuid.uuid128,16));
381381
break;
382382
}
@@ -387,6 +387,44 @@ void BLEAdvertisementData::setPartialServices(BLEUUID uuid) {
387387
} // setPartialServices
388388

389389

390+
/**
391+
* @brief Set the service data (UUID + data)
392+
* @param [in] uuid The UUID to set with the service data. Size of UUID will be used.
393+
* @param [in] data The data to be associated with the service data advert.
394+
*/
395+
void BLEAdvertisementData::setServiceData(BLEUUID uuid, std::string data) {
396+
char cdata[2];
397+
switch(uuid.bitSize()) {
398+
case 16: {
399+
// [Len] [0x16] [UUID16] data
400+
cdata[0] = data.length() + 3;
401+
cdata[1] = ESP_BLE_AD_TYPE_SERVICE_DATA; // 0x16
402+
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid16,2) + data);
403+
break;
404+
}
405+
406+
case 32: {
407+
// [Len] [0x20] [UUID32] data
408+
cdata[0] = data.length() + 5;
409+
cdata[1] = ESP_BLE_AD_TYPE_32SERVICE_DATA; // 0x20
410+
addData(std::string(cdata, 2) + std::string((char *)&uuid.getNative()->uuid.uuid32,4) + data);
411+
break;
412+
}
413+
414+
case 128: {
415+
// [Len] [0x21] [UUID128] data
416+
cdata[0] = data.length() + 17;
417+
cdata[1] = ESP_BLE_AD_TYPE_128SERVICE_DATA; // 0x21
418+
addData(std::string(cdata, 2) + std::string((char *)uuid.getNative()->uuid.uuid128,16) + data);
419+
break;
420+
}
421+
422+
default:
423+
return;
424+
}
425+
} // setServiceData
426+
427+
390428
/**
391429
* @brief Set the short name.
392430
* @param [in] The short name of the device.
@@ -395,7 +433,7 @@ void BLEAdvertisementData::setShortName(std::string name) {
395433
ESP_LOGD("BLEAdvertisementData", ">> setShortName: %s", name.c_str());
396434
char cdata[2];
397435
cdata[0] = name.length() + 1;
398-
cdata[1] = ESP_BLE_AD_TYPE_NAME_SHORT;
436+
cdata[1] = ESP_BLE_AD_TYPE_NAME_SHORT; // 0x08
399437
addData(std::string(cdata, 2) + name);
400438
ESP_LOGD("BLEAdvertisementData", "<< setShortName");
401439
} // setShortName

cpp_utils/BLEAdvertising.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class BLEAdvertisementData {
5656
void setManufacturerData(std::string data);
5757
void setName(std::string name);
5858
void setPartialServices(BLEUUID uuid);
59+
void setServiceData(BLEUUID uuid, std::string data);
5960
void setShortName(std::string name);
6061

6162
private:

cpp_utils/DesignNotes/BLECPP.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ The following advertising types are supported:
4040
|0x07|Complete list of 128 bit service UUIDs
4141
|0x08|Shortened local name
4242
|0x09|Complete local name
43+
|0x16|Service data (16 bit)
4344
|0x19|Appearance
45+
|0x20|Service data (32 bit)
46+
|0x21|Service data (128 bit)
4447
|0xFF|Manufacturer data
4548

4649

@@ -61,5 +64,6 @@ See also:
6164
|0x03, 0x05, 0x07|`setCompleteServices(BLEUUID)`
6265
|0x08|`setShortName(std::string)`
6366
|0x09|`setName(std::string)`
67+
|0x16, 0x20, 0x21|`setServiceData(BLEUUID, std::string)`
6468
|0x19|`setAppearance(uint16_t)`
6569
|0xFF|`setManufacturerData(std::string)`

0 commit comments

Comments
 (0)
0