* AdvertDataHelpers: reverting parsing logic, but changed meanings of 'battery' and 'temperature' to just two generic uint16 'feature' properties
This commit is contained in:
@@ -8,6 +8,14 @@
|
|||||||
memcpy(&app_data[i], &_lat, 4); i += 4;
|
memcpy(&app_data[i], &_lat, 4); i += 4;
|
||||||
memcpy(&app_data[i], &_lon, 4); i += 4;
|
memcpy(&app_data[i], &_lon, 4); i += 4;
|
||||||
}
|
}
|
||||||
|
if (_extra1) {
|
||||||
|
app_data[0] |= ADV_FEAT1_MASK;
|
||||||
|
memcpy(&app_data[i], &_extra1, 2); i += 2;
|
||||||
|
}
|
||||||
|
if (_extra2) {
|
||||||
|
app_data[0] |= ADV_FEAT2_MASK;
|
||||||
|
memcpy(&app_data[i], &_extra2, 2); i += 2;
|
||||||
|
}
|
||||||
if (_name && *_name != 0) {
|
if (_name && *_name != 0) {
|
||||||
app_data[0] |= ADV_NAME_MASK;
|
app_data[0] |= ADV_NAME_MASK;
|
||||||
const char* sp = _name;
|
const char* sp = _name;
|
||||||
@@ -23,12 +31,19 @@
|
|||||||
_lat = _lon = 0;
|
_lat = _lon = 0;
|
||||||
_flags = app_data[0];
|
_flags = app_data[0];
|
||||||
_valid = false;
|
_valid = false;
|
||||||
|
_extra1 = _extra2 = 0;
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
if (_flags & ADV_LATLON_MASK) {
|
if (_flags & ADV_LATLON_MASK) {
|
||||||
memcpy(&_lat, &app_data[i], 4); i += 4;
|
memcpy(&_lat, &app_data[i], 4); i += 4;
|
||||||
memcpy(&_lon, &app_data[i], 4); i += 4;
|
memcpy(&_lon, &app_data[i], 4); i += 4;
|
||||||
}
|
}
|
||||||
|
if (_flags & ADV_FEAT1_MASK) {
|
||||||
|
memcpy(&_extra1, &app_data[i], 2); i += 2;
|
||||||
|
}
|
||||||
|
if (_flags & ADV_FEAT2_MASK) {
|
||||||
|
memcpy(&_extra2, &app_data[i], 2); i += 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (app_data_len >= i) {
|
if (app_data_len >= i) {
|
||||||
int nlen = 0;
|
int nlen = 0;
|
||||||
|
|||||||
@@ -19,14 +19,16 @@ class AdvertDataBuilder {
|
|||||||
uint8_t _type;
|
uint8_t _type;
|
||||||
const char* _name;
|
const char* _name;
|
||||||
int32_t _lat, _lon;
|
int32_t _lat, _lon;
|
||||||
|
uint16_t _extra1 = 0;
|
||||||
|
uint16_t _extra2 = 0;
|
||||||
public:
|
public:
|
||||||
AdvertDataBuilder(uint8_t adv_type) : _type(adv_type), _name(NULL), _lat(0), _lon(0) { }
|
AdvertDataBuilder(uint8_t adv_type) : _type(adv_type), _name(NULL), _lat(0), _lon(0) { }
|
||||||
AdvertDataBuilder(uint8_t adv_type, const char* name) : _type(adv_type), _name(name), _lat(0), _lon(0) { }
|
AdvertDataBuilder(uint8_t adv_type, const char* name) : _type(adv_type), _name(name), _lat(0), _lon(0) { }
|
||||||
AdvertDataBuilder(uint8_t adv_type, const char* name, double lat, double lon) :
|
AdvertDataBuilder(uint8_t adv_type, const char* name, double lat, double lon) :
|
||||||
_type(adv_type), _name(name), _lat(lat * 1E6), _lon(lon * 1E6) { }
|
_type(adv_type), _name(name), _lat(lat * 1E6), _lon(lon * 1E6) { }
|
||||||
|
|
||||||
void setFeat1(bool enabled) { if (enabled) _type |= ADV_FEAT1_MASK; else _type &= ~ADV_FEAT1_MASK; }
|
void setFeat1(uint16_t extra) { _extra1 = extra; }
|
||||||
void setFeat2(bool enabled) { if (enabled) _type |= ADV_FEAT2_MASK; else _type &= ~ADV_FEAT2_MASK; }
|
void setFeat2(uint16_t extra) { _extra2 = extra; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief encode the given advertisement data.
|
* \brief encode the given advertisement data.
|
||||||
@@ -41,13 +43,15 @@ class AdvertDataParser {
|
|||||||
bool _valid;
|
bool _valid;
|
||||||
char _name[MAX_ADVERT_DATA_SIZE];
|
char _name[MAX_ADVERT_DATA_SIZE];
|
||||||
int32_t _lat, _lon;
|
int32_t _lat, _lon;
|
||||||
|
uint16_t _extra1;
|
||||||
|
uint16_t _extra2;
|
||||||
public:
|
public:
|
||||||
AdvertDataParser(const uint8_t app_data[], uint8_t app_data_len);
|
AdvertDataParser(const uint8_t app_data[], uint8_t app_data_len);
|
||||||
|
|
||||||
bool isValid() const { return _valid; }
|
bool isValid() const { return _valid; }
|
||||||
uint8_t getType() const { return _flags & 0x0F; }
|
uint8_t getType() const { return _flags & 0x0F; }
|
||||||
bool hasFeat1() const { return (_flags & ADV_FEAT1_MASK) != 0; }
|
uint16_t getFeat1() const { return _extra1; }
|
||||||
bool hasFeat2() const { return (_flags & ADV_FEAT2_MASK) != 0; }
|
uint16_t getFeat2() const { return _extra2; }
|
||||||
|
|
||||||
bool hasName() const { return _name[0] != 0; }
|
bool hasName() const { return _name[0] != 0; }
|
||||||
const char* getName() const { return _name; }
|
const char* getName() const { return _name; }
|
||||||
|
|||||||
Reference in New Issue
Block a user