From c8566a6b5e8f1be3ece36f2370595a1bc0bce892 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Sun, 24 May 2015 22:21:42 +0200 Subject: [PATCH] implemented BLEAdvertisement::hasNamePrefix(..) --- platforms/arduino/BTstack.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/platforms/arduino/BTstack.cpp b/platforms/arduino/BTstack.cpp index 66e580ba9..d86422b2b 100644 --- a/platforms/arduino/BTstack.cpp +++ b/platforms/arduino/BTstack.cpp @@ -387,7 +387,24 @@ bool BLEAdvertisement::containsService(UUID * service){ return ad_data_contains_uuid128(data_length, data, (uint8_t*) service->getUuid()); } -bool BLEAdvertisement::nameHasPrefix(const char * namePrefix){ +bool BLEAdvertisement::nameHasPrefix(const char * name_prefix){ + ad_context_t context; + int name_prefix_len = strlen(name_prefix); + for (ad_iterator_init(&context, data_length, data) ; ad_iterator_has_more(&context) ; ad_iterator_next(&context)){ + uint8_t data_type = ad_iterator_get_data_type(&context); + uint8_t data_len = ad_iterator_get_data_len(&context); + uint8_t * data = ad_iterator_get_data(&context); + int compare_len = name_prefix_len; + switch(data_type){ + case 8: // shortented local name + case 9: // complete local name + if (compare_len > data_len) compare_len = data_len; + if (strncmp(name_prefix, (const char*) data, compare_len) == 0) return true; + break; + default: + break; + } + } return false; };