Skip to content

Integrate CI unit testing #122

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Oct 29, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Extend advertising data allowing insertion of flags and raw data
  • Loading branch information
polldo committed Oct 16, 2020
commit 79a9e2e15c5829d15ff08c56262e9ceb63a7367b
47 changes: 44 additions & 3 deletions src/BLEAdvertisingData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,17 @@

BLEAdvertisingData::BLEAdvertisingData() :
_dataLength(0),
_rawDataLength(0),
_advertisedServiceUuid(NULL),
_manufacturerData(NULL),
_manufacturerDataLength(0),
_manufacturerCompanyId(0),
_hasManufacturerCompanyId(false),
_localName(NULL),
_serviceData(NULL),
_serviceDataLength(0)
_serviceDataLength(0),
_flags(0),
_hasFlags(false)
{
}

Expand Down Expand Up @@ -68,11 +71,28 @@ void BLEAdvertisingData::setLocalName(const char *localName)
_localName = localName;
}

void BLEAdvertisingData::setRawData(const uint8_t* data, uint8_t length)
{
_rawData = data;
_rawDataLength = length;
}

void BLEAdvertisingData::setFlags(uint8_t flags)
{
_hasFlags = true;
_flags = flags;
}

bool BLEAdvertisingData::updateData()
{
// Success indicates whether all the fields have been inserted
bool success = true;
// Reset data
_dataLength = 0;
// Try to add flags into the current advertising packet
if (_hasFlags) {
success &= addFlags(_flags);
}
// Try to add Advertised service uuid into the current advertising packet
if (_advertisedServiceUuid) {
success &= addAdvertisedServiceUuid(_advertisedServiceUuid);
Expand All @@ -93,6 +113,10 @@ bool BLEAdvertisingData::updateData()
if (_localName) {
success &= addLocalName(_localName);
}
// Try to add Raw data
if (_rawDataLength) {
success &= addRawData(_rawData, _rawDataLength);
}
return success;
}

Expand Down Expand Up @@ -123,9 +147,9 @@ bool BLEAdvertisingData::addAdvertisedServiceUuid(const char* advertisedServiceU
int uuidLen = uuid.length();
BLEAdField advField;
if (uuidLen > 2) {
advField = BLEFieldAdvertisedService128;
advField = BLEFieldIncompleteAdvertisedService128;
} else {
advField = BLEFieldAdvertisedService16;
advField = BLEFieldIncompleteAdvertisedService16;
}
return addField(advField, uuid.data(), uuidLen);
}
Expand Down Expand Up @@ -153,6 +177,23 @@ bool BLEAdvertisingData::addAdvertisedServiceData(uint16_t uuid, const uint8_t d
return addField(BLEFieldServiceData, tempData, tempDataLength);
}

bool BLEAdvertisingData::addRawData(const uint8_t* data, uint8_t length)
{
// Bypass addField to add the integral raw data
if (length > (MAX_AD_DATA_LENGTH - _dataLength)) {
// Not enough space
return false;
}
memcpy(&_data[_dataLength], data, length);
_dataLength += length;
return true;
}

bool BLEAdvertisingData::addFlags(uint8_t flags)
{
return addField(BLEFieldFlags, &flags, 1);
}

bool BLEAdvertisingData::addField(BLEAdField field, const char* data)
{
uint8_t dataLength = strlen(data);
Expand Down
30 changes: 26 additions & 4 deletions src/BLEAdvertisingData.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,20 @@

#define MAX_AD_DATA_LENGTH (31)

enum BLEFlags {
BLEFlagsLimitedDiscoverable = 0x01,
BLEFlagsGeneralDiscoverable = 0x02,
BLEFlagsBREDRNotSupported = 0x04
};

enum BLEAdField {
BLEFieldFlags = 0x01,
BLEFieldIncompleteAdvertisedService16 = 0x02,
BLEFieldCompleteAdvertisedService16 = 0x03,
BLEFieldIncompleteAdvertisedService128 = 0x06,
BLEFieldCompleteAdvertisedService128 = 0x07,
BLEFieldShortLocalName = 0x08,
BLEFieldCompleteLocalName = 0x09,
BLEFieldAdvertisedService16 = 0x02,
BLEFieldAdvertisedService128 = 0x06,
BLEFieldServiceData = 0x16,
BLEFieldManufacturerData = 0xFF,

Expand All @@ -46,7 +55,11 @@ class BLEAdvertisingData {
void setManufacturerData(const uint16_t companyId, const uint8_t manufacturerData[], int manufacturerDataLength);
void setLocalName(const char *localName);
void setAdvertisedServiceData(uint16_t uuid, const uint8_t data[], int length);
void setRawData(const uint8_t* data, uint8_t length);
void setFlags(uint8_t flags);

protected:
friend class BLELocalDevice;
bool updateData();
uint8_t* data();
int dataLength() const;
Expand All @@ -57,19 +70,28 @@ class BLEAdvertisingData {
bool addManufacturerData(const uint16_t companyId, const uint8_t manufacturerData[], int manufacturerDataLength);
bool addLocalName(const char *localName);
bool addAdvertisedServiceData(uint16_t uuid, const uint8_t data[], int length);
bool addRawData(const uint8_t* data, uint8_t length);
bool addFlags(uint8_t flags);

bool addField(BLEAdField field, const char* data);
bool addField(BLEAdField field, const uint8_t* data, uint8_t length);

uint8_t _data[MAX_AD_DATA_LENGTH];
int _dataLength;

const char* _advertisedServiceUuid;
const uint8_t* _rawData;
uint8_t _rawDataLength;

uint8_t _flags;
bool _hasFlags;
const char* _localName;

const uint8_t* _manufacturerData;
int _manufacturerDataLength;
uint16_t _manufacturerCompanyId;
bool _hasManufacturerCompanyId;
const char* _localName;

const char* _advertisedServiceUuid;
uint16_t _serviceDataUuid;
const uint8_t* _serviceData;
int _serviceDataLength;
Expand Down
1 change: 1 addition & 0 deletions src/local/BLELocalDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

BLELocalDevice::BLELocalDevice()
{
_advertisingData.setFlags(BLEFlagsGeneralDiscoverable | BLEFlagsBREDRNotSupported);
}

BLELocalDevice::~BLELocalDevice()
Expand Down