int ad_data_contains_uuid16(uint8_t ad_len, uint8_t * ad_data, uint16_t uuid16){ ad_context_t context; for (ad_iterator_init(&context, ad_len, ad_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 i; uint8_t ad_uuid128[16], uuid128_bt[16]; switch (data_type){ case IncompleteList16: case CompleteList16: for (i=0; i<data_len; i+=2){ uint16_t uuid = little_endian_read_16(data, i); if ( uuid == uuid16 ) return 1; } break; case IncompleteList128: case CompleteList128: uuid_add_bluetooth_prefix(ad_uuid128, uuid16); reverse_128(ad_uuid128, uuid128_bt); for (i=0; i<data_len; i+=16){ if (memcmp(uuid128_bt, &data[i], 16) == 0) return 1; } break; default: break; } } return 0; }
int ad_data_contains_uuid16(uint8_t ad_len, const uint8_t * ad_data, uint16_t uuid16){ ad_context_t context; for (ad_iterator_init(&context, ad_len, ad_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); const uint8_t * data = ad_iterator_get_data(&context); int i; uint8_t ad_uuid128[16], uuid128_bt[16]; switch (data_type){ case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS: for (i=0; i<data_len; i+=2){ uint16_t uuid = little_endian_read_16(data, i); if ( uuid == uuid16 ) return 1; } break; case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: uuid_add_bluetooth_prefix(ad_uuid128, uuid16); reverse_128(ad_uuid128, uuid128_bt); for (i=0; i<data_len; i+=16){ if (memcmp(uuid128_bt, &data[i], 16) == 0) return 1; } break; default: break; } } return 0; }