add default arguments to the constructor for URIBeacon; and minor renames.
parent
2586b27aaf
commit
07b87a6412
|
@ -22,39 +22,39 @@
|
|||
class URIBeacon2Service {
|
||||
public:
|
||||
// ee0c2080-8786-40ba-ab96-99b91ac981d8
|
||||
URIBeacon2Service(BLEDevice &ble_, const char *urldata) : ble(ble_), payloadIndex(0), payload() {
|
||||
URIBeacon2Service(BLEDevice &ble_, const char *urldata, uint8_t flags = 0, uint8_t power = 0) : ble(ble_), payloadIndex(0), serviceDataPayload() {
|
||||
const uint8_t BEACON_UUID[] = {0xD8, 0xFE};
|
||||
|
||||
payload[payloadIndex++] = BEACON_UUID[0];
|
||||
payload[payloadIndex++] = BEACON_UUID[1];
|
||||
payload[payloadIndex++] = 0x00; /* flags */
|
||||
payload[payloadIndex++] = 0x20; /* power */
|
||||
serviceDataPayload[payloadIndex++] = BEACON_UUID[0];
|
||||
serviceDataPayload[payloadIndex++] = BEACON_UUID[1];
|
||||
serviceDataPayload[payloadIndex++] = flags;
|
||||
serviceDataPayload[payloadIndex++] = power;
|
||||
|
||||
size_t sizeofURLData = strlen(urldata);
|
||||
size_t encodedBytes = encodeURIData(urldata, sizeofURLData);
|
||||
size_t encodedBytes = encodeServiceData(urldata, sizeofURLData);
|
||||
|
||||
ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, BEACON_UUID, sizeof(BEACON_UUID));
|
||||
ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, payload, encodedBytes + 4);
|
||||
ble.accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, serviceDataPayload, encodedBytes + 4);
|
||||
}
|
||||
|
||||
void dumpEncoded() {
|
||||
void dumpEncodedSeviceData() const {
|
||||
printf("encoded: '");
|
||||
for (unsigned i = 0; i < payloadIndex; i++) {
|
||||
printf(" %02x", payload[i]);
|
||||
printf(" %02x", serviceDataPayload[i]);
|
||||
}
|
||||
printf("'\r\n");
|
||||
}
|
||||
|
||||
private:
|
||||
size_t encodeURIData(const char *urldata, size_t sizeofURLData) {
|
||||
size_t encodeServiceData(const char *urldata, size_t sizeofURLData) {
|
||||
if (sizeofURLData == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return encodePrefix(urldata, sizeofURLData) + copyURLCheckingForSuffixes(urldata, sizeofURLData);
|
||||
return encodeURISchemePrefix(urldata, sizeofURLData) + encodeURI(urldata, sizeofURLData);
|
||||
}
|
||||
|
||||
size_t encodePrefix(const char *&urldata, size_t &sizeofURLData) {
|
||||
size_t encodeURISchemePrefix(const char *&urldata, size_t &sizeofURLData) {
|
||||
const char *prefixes[] = {
|
||||
"http://www.",
|
||||
"https://www.",
|
||||
|
@ -68,7 +68,7 @@ private:
|
|||
for (unsigned i = 0; i < NUM_PREFIXES; i++) {
|
||||
size_t prefixLen = strlen(prefixes[i]);
|
||||
if (strncmp(urldata, prefixes[i], prefixLen) == 0) {
|
||||
payload[payloadIndex++] = i;
|
||||
serviceDataPayload[payloadIndex++] = i;
|
||||
encodedBytes = 1;
|
||||
|
||||
urldata += prefixLen;
|
||||
|
@ -80,7 +80,7 @@ private:
|
|||
return encodedBytes;
|
||||
}
|
||||
|
||||
size_t copyURLCheckingForSuffixes(const char *urldata, size_t sizeofURLData) {
|
||||
size_t encodeURI(const char *urldata, size_t sizeofURLData) {
|
||||
const char *suffixes[] = {
|
||||
".com/",
|
||||
".org/",
|
||||
|
@ -110,7 +110,7 @@ private:
|
|||
}
|
||||
|
||||
if (strncmp(urldata, suffixes[i], suffixLen) == 0) {
|
||||
payload[payloadIndex++] = i;
|
||||
serviceDataPayload[payloadIndex++] = i;
|
||||
++encodedBytes;
|
||||
urldata += suffixLen;
|
||||
sizeofURLData -= suffixLen;
|
||||
|
@ -119,7 +119,7 @@ private:
|
|||
}
|
||||
/* This is the default case where we've got an ordinary character which doesn't match a suffix. */
|
||||
if (i == NUM_SUFFIXES) {
|
||||
payload[payloadIndex++] = *urldata;
|
||||
serviceDataPayload[payloadIndex++] = *urldata;
|
||||
++encodedBytes;
|
||||
++urldata;
|
||||
--sizeofURLData;
|
||||
|
@ -155,7 +155,7 @@ private:
|
|||
BLEDevice &ble;
|
||||
|
||||
size_t payloadIndex;
|
||||
uint8_t payload[MAX_SIZEOF_PAYLOAD];
|
||||
uint8_t serviceDataPayload[MAX_SIZEOF_PAYLOAD];
|
||||
// uint8_t batteryLevel;
|
||||
// GattCharacteristic batteryLevelCharacteristic;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue