Skip to content

Commit fa62bff

Browse files
committed
Add ble hal define for max allowed advertising data length
1 parent 2ea798e commit fa62bff

File tree

6 files changed

+20
-22
lines changed

6 files changed

+20
-22
lines changed

hal/src/nRF52840/ble_hal_impl.h

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
#define BLE_MAX_ADV_DATA_LEN_EXT BLE_GAP_SCAN_BUFFER_EXTENDED_MAX_SUPPORTED
8686
#define BLE_MAX_ADV_DATA_LEN_EXT_CONNECTABLE BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED
8787

88+
#define BLE_MAX_SUPPORTED_ADV_DATA_LEN BLE_MAX_ADV_DATA_LEN_EXT
89+
8890
/* Connection Parameters limits */
8991
#define BLE_CONN_PARAMS_SLAVE_LATENCY_ERR 5
9092
#define BLE_CONN_PARAMS_TIMEOUT_ERR 100

hal/src/rtl872x/ble_hal_impl.h

+2
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@
8181
/* Maximum length of advertising and scan response data */
8282
#define BLE_MAX_ADV_DATA_LEN 31
8383

84+
#define BLE_MAX_SUPPORTED_ADV_DATA_LEN BLE_MAX_ADV_DATA_LEN
85+
8486
/* Maximum length of the buffer to store scan report data */
8587
#define BLE_MAX_SCAN_REPORT_BUF_LEN 255 /* Must support extended length for CODED_PHY scanning */
8688

system/src/ble_provisioning_mode_handler.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,15 @@ int BleProvisioningModeHandler::cacheUserConfigurations() {
129129
LOG_DEBUG(TRACE, "Cache user's BLE configurations.");
130130
CHECK_FALSE(exited_, SYSTEM_ERROR_INVALID_STATE);
131131

132-
Vector<uint8_t> tempAdvData(BLE_MAX_ADV_DATA_LEN);
133-
Vector<uint8_t> tempSrData(BLE_MAX_ADV_DATA_LEN);
132+
Vector<uint8_t> tempAdvData(BLE_MAX_SUPPORTED_ADV_DATA_LEN);
133+
Vector<uint8_t> tempSrData(BLE_MAX_SUPPORTED_ADV_DATA_LEN);
134134

135135
// Advertising data set by user application
136-
size_t len = CHECK(hal_ble_gap_get_advertising_data(tempAdvData.data(), BLE_MAX_ADV_DATA_LEN, nullptr));
136+
size_t len = CHECK(hal_ble_gap_get_advertising_data(tempAdvData.data(), BLE_MAX_SUPPORTED_ADV_DATA_LEN, nullptr));
137137
tempAdvData.resize(len);
138138

139139
// Scan response data set by user application
140-
len = CHECK(hal_ble_gap_get_scan_response_data(tempSrData.data(), BLE_MAX_ADV_DATA_LEN, nullptr));
140+
len = CHECK(hal_ble_gap_get_scan_response_data(tempSrData.data(), BLE_MAX_SUPPORTED_ADV_DATA_LEN, nullptr));
141141
tempSrData.resize(len);
142142

143143
// Advertising and connection parameters set by user application

user/applications/tinker/src/burnin_test.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,8 @@ bool BurninTest::testBleScan() {
296296
Log.info("Found %d beacons", count);
297297

298298
for (int ii = 0; ii < count; ii++) {
299-
uint8_t buf[BLE_MAX_ADV_DATA_LEN];
300-
size_t len = scanResults[ii].advertisingData().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, buf, BLE_MAX_ADV_DATA_LEN);
299+
uint8_t buf[BLE_MAX_SUPPORTED_ADV_DATA_LEN];
300+
size_t len = scanResults[ii].advertisingData().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, buf, sizeof(buf));
301301
Log.info("Beacon %d: rssi %d Advertising Data Len %u", ii, scanResults[ii].rssi(), len);
302302
if (len > 0) {
303303
Log.print("Advertising Data: ");

wiring/inc/spark_wiring_ble.h

-1
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,6 @@ class BleAdvertisingData {
491491
static size_t locate(const uint8_t* buf, size_t len, BleAdvertisingDataType type, size_t* offset);
492492

493493
Vector<uint8_t> selfData_;
494-
size_t maxAdvertisingDataLen_;
495494
};
496495

497496

wiring/src/spark_wiring_ble.cpp

+10-15
Original file line numberDiff line numberDiff line change
@@ -562,11 +562,6 @@ BleAdvertisingData::BleAdvertisingData()
562562
: selfData_() {
563563
uint8_t flag = BLE_SIG_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
564564
append(BleAdvertisingDataType::FLAGS, &flag, sizeof(uint8_t));
565-
#if HAL_PLATFORM_RTL872X
566-
maxAdvertisingDataLen_ = BLE_MAX_ADV_DATA_LEN;
567-
#else
568-
maxAdvertisingDataLen_ = BLE_MAX_ADV_DATA_LEN_EXT;
569-
#endif
570565
}
571566

572567
BleAdvertisingData::BleAdvertisingData(const iBeacon& beacon)
@@ -580,7 +575,7 @@ size_t BleAdvertisingData::set(const uint8_t* buf, size_t len) {
580575
return selfData_.size();
581576
}
582577
selfData_.clear();
583-
len = std::min(len, (size_t)BLE_MAX_ADV_DATA_LEN_EXT);
578+
len = std::min(len, (size_t)BLE_MAX_SUPPORTED_ADV_DATA_LEN);
584579
CHECK_TRUE(selfData_.append(buf, len), 0);
585580
return selfData_.size();
586581
}
@@ -592,7 +587,7 @@ size_t BleAdvertisingData::set(const iBeacon& beacon) {
592587
return selfData_.size();
593588
}
594589

595-
CHECK_TRUE(selfData_.reserve(maxAdvertisingDataLen_), 0);
590+
CHECK_TRUE(selfData_.reserve(BLE_MAX_SUPPORTED_ADV_DATA_LEN), 0);
596591
selfData_.append(0x02);
597592
selfData_.append(BLE_SIG_AD_TYPE_FLAGS);
598593
selfData_.append(BLE_SIG_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
@@ -630,7 +625,7 @@ size_t BleAdvertisingData::append(BleAdvertisingDataType type, const uint8_t* bu
630625
size_t adsLen = locate(selfData_.data(), selfData_.size(), type, &offset);
631626
if (!force && adsLen > 0) {
632627
// Update the existing AD structure.
633-
if ((selfData_.size() - adsLen + len + 2) <= maxAdvertisingDataLen_) {
628+
if ((selfData_.size() - adsLen + len + 2) <= BLE_MAX_SUPPORTED_ADV_DATA_LEN) {
634629
// Firstly, remove the existing AD structure.
635630
selfData_.removeAt(offset, adsLen);
636631
// Secondly, Update the AD structure.
@@ -643,7 +638,7 @@ size_t BleAdvertisingData::append(BleAdvertisingDataType type, const uint8_t* bu
643638
selfData_.insert(offset + 2, buf, len);
644639
}
645640
}
646-
else if ((selfData_.size() + len + 2) <= maxAdvertisingDataLen_) {
641+
else if ((selfData_.size() + len + 2) <= BLE_MAX_SUPPORTED_ADV_DATA_LEN) {
647642
// Append the AD structure at the and of advertising data.
648643
CHECK_TRUE(selfData_.reserve(selfData_.size() + len + 2), selfData_.size());
649644
selfData_.append(len + 1);
@@ -672,7 +667,7 @@ size_t BleAdvertisingData::appendAppearance(ble_sig_appearance_t appearance) {
672667
}
673668

674669
size_t BleAdvertisingData::resize(size_t size) {
675-
selfData_.resize(std::min(size, (size_t)maxAdvertisingDataLen_));
670+
selfData_.resize(std::min(size, (size_t)BLE_MAX_SUPPORTED_ADV_DATA_LEN));
676671
return selfData_.size();
677672
}
678673

@@ -733,7 +728,7 @@ size_t BleAdvertisingData::deviceName(char* buf, size_t len) const {
733728

734729
String BleAdvertisingData::deviceName() const {
735730
String name;
736-
char buf[maxAdvertisingDataLen_];
731+
char buf[BLE_MAX_SUPPORTED_ADV_DATA_LEN];
737732
size_t len = deviceName(buf, sizeof(buf));
738733
if (len > 0) {
739734
for (size_t i = 0; i < len; i++) {
@@ -2256,7 +2251,7 @@ ssize_t BleLocalDevice::getAdvertisingData(BleAdvertisingData* advertisingData)
22562251
advParams.size = sizeof(hal_ble_adv_params_t);
22572252
hal_ble_gap_get_advertising_parameters(&advParams, nullptr);
22582253
advertisingData->clear();
2259-
CHECK_TRUE(advertisingData->resize((advParams.primary_phy == BLE_PHYS_CODED) ? BLE_MAX_ADV_DATA_LEN_EXT : BLE_MAX_ADV_DATA_LEN), SYSTEM_ERROR_NO_MEMORY);
2254+
CHECK_TRUE(advertisingData->resize((advParams.primary_phy == BLE_PHYS_CODED) ? BLE_MAX_ADV_DATA_LEN_EXT : BLE_MAX_ADV_DATA_LEN), SYSTEM_ERROR_NO_MEMORY);// TODO:?
22602255
size_t len = CHECK(hal_ble_gap_get_advertising_data(advertisingData->data(), advertisingData->length(), nullptr));
22612256
advertisingData->resize(len);
22622257
return len;
@@ -2271,7 +2266,7 @@ ssize_t BleLocalDevice::getScanResponseData(BleAdvertisingData* scanResponse) co
22712266
return SYSTEM_ERROR_INVALID_ARGUMENT;
22722267
}
22732268
scanResponse->clear();
2274-
CHECK_TRUE(scanResponse->resize(BLE_MAX_ADV_DATA_LEN), SYSTEM_ERROR_NO_MEMORY);
2269+
CHECK_TRUE(scanResponse->resize(BLE_MAX_SUPPORTED_ADV_DATA_LEN), SYSTEM_ERROR_NO_MEMORY);
22752270
size_t len = CHECK(hal_ble_gap_get_scan_response_data(scanResponse->data(), scanResponse->length(), nullptr));
22762271
scanResponse->resize(len);
22772272
return len;
@@ -2525,8 +2520,8 @@ class BleScanDelegator {
25252520
size_t filterCustomDatalen;
25262521
const uint8_t* filterCustomData = filter_.customData(&filterCustomDatalen);
25272522
if (filterCustomData != nullptr && filterCustomDatalen > 0) {
2528-
size_t srLen = result.scanResponse().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, nullptr, BLE_MAX_ADV_DATA_LEN);
2529-
size_t advLen = result.advertisingData().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, nullptr, BLE_MAX_ADV_DATA_LEN_EXT);
2523+
size_t srLen = result.scanResponse().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, nullptr, BLE_MAX_SUPPORTED_ADV_DATA_LEN);
2524+
size_t advLen = result.advertisingData().get(BleAdvertisingDataType::MANUFACTURER_SPECIFIC_DATA, nullptr, BLE_MAX_SUPPORTED_ADV_DATA_LEN);
25302525
if (srLen != filterCustomDatalen && advLen != filterCustomDatalen) {
25312526
LOG_DEBUG(TRACE, "Custom data mismatched.");
25322527
return false;

0 commit comments

Comments
 (0)