From 1d0cde9daaa30225429155fcad846c826f91af2e Mon Sep 17 00:00:00 2001 From: Matthias Ringwald <matthias@ringwald.ch> Date: Mon, 31 Oct 2016 16:05:07 +0100 Subject: [PATCH] use new Data Type defines from bluetooth_data_types --- example/gap_inquiry.c | 6 ++-- example/gap_le_advertisements.c | 53 +++++++++++++++++---------------- src/ad_parser.c | 26 +++++++--------- 3 files changed, 40 insertions(+), 45 deletions(-) diff --git a/example/gap_inquiry.c b/example/gap_inquiry.c index 86ff85e77..657a483d2 100644 --- a/example/gap_inquiry.c +++ b/example/gap_inquiry.c @@ -199,9 +199,9 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe const uint8_t * data = ad_iterator_get_data(&context); // Prefer Complete Local Name over Shortend Local Name switch (data_type){ - case 0x08: // Shortened Local Name + case BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME: if (devices[deviceCount].state == REMOTE_NAME_FETCHED) break; - case 0x09: // Complete Local Name + case BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME: devices[deviceCount].state = REMOTE_NAME_FETCHED; memcpy(name_buffer, data, data_size); name_buffer[data_size] = 0; @@ -215,7 +215,7 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe (unsigned int) devices[deviceCount].classOfDevice, devices[deviceCount].pageScanRepetitionMode, devices[deviceCount].clockOffset); if (event >= HCI_EVENT_INQUIRY_RESULT_WITH_RSSI){ - printf(", rssi 0x%02x: ", devices[deviceCount].rssi); + printf(", rssi 0x%02x", devices[deviceCount].rssi); } if (devices[deviceCount].state == REMOTE_NAME_FETCHED){ printf(", name '%s'", name_buffer); diff --git a/example/gap_le_advertisements.c b/example/gap_le_advertisements.c index 93e6655c1..bf8fb98b0 100644 --- a/example/gap_le_advertisements.c +++ b/example/gap_le_advertisements.c @@ -144,7 +144,7 @@ static void dump_advertisement_data(const uint8_t * adv_data, uint8_t adv_size){ // Assigned Numbers GAP switch (data_type){ - case 0x01: // Flags + case BLUETOOTH_DATA_TYPE_FLAGS: // show only first octet, ignore rest for (i=0; i<8;i++){ if (data[0] & (1<<i)){ @@ -153,64 +153,65 @@ static void dump_advertisement_data(const uint8_t * adv_data, uint8_t adv_size){ } break; - case 0x02: // Incomplete List of 16-bit Service Class UUIDs - case 0x03: // Complete List of 16-bit Service Class UUIDs - case 0x14: // List of 16-bit Service Solicitation UUIDs + case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_LIST_OF_16_BIT_SERVICE_SOLICITATION_UUIDS: for (i=0; i<size;i+=2){ printf("%02X ", little_endian_read_16(data, i)); } break; - case 0x04: // Incomplete List of 32-bit Service Class UUIDs - case 0x05: // Complete List of 32-bit Service Class UUIDs + case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_LIST_OF_32_BIT_SERVICE_SOLICITATION_UUIDS: for (i=0; i<size;i+=4){ printf("%04"PRIX32, little_endian_read_32(data, i)); } break; - case 0x06: // Incomplete List of 128-bit Service Class UUIDs - case 0x07: // Complete List of 128-bit Service Class UUIDs - case 0x15: // List of 128-bit Service Solicitation UUIDs + case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_LIST_OF_128_BIT_SERVICE_SOLICITATION_UUIDS: reverse_128(data, uuid_128); printf("%s", uuid128_to_str(uuid_128)); break; - case 0x08: // Shortened Local Name - case 0x09: // Complete Local Name + case BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME: + case BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME: for (i=0; i<size;i++){ printf("%c", (char)(data[i])); } break; - case 0x0A: // Tx Power Level + case BLUETOOTH_DATA_TYPE_TX_POWER_LEVEL: printf("%d dBm", *(int8_t*)data); break; - case 0x12: // Slave Connection Interval Range + case BLUETOOTH_DATA_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE: printf("Connection Interval Min = %u ms, Max = %u ms", little_endian_read_16(data, 0) * 5/4, little_endian_read_16(data, 2) * 5/4); break; - case 0x16: // Service Data + case BLUETOOTH_DATA_TYPE_SERVICE_DATA: printf_hexdump(data, size); break; - case 0x17: // Public Target Address - case 0x18: // Random Target Address + case BLUETOOTH_DATA_TYPE_PUBLIC_TARGET_ADDRESS: + case BLUETOOTH_DATA_TYPE_RANDOM_TARGET_ADDRESS: reverse_bd_addr(data, address); printf("%s", bd_addr_to_str(address)); break; - case 0x19: // Appearance + case BLUETOOTH_DATA_TYPE_APPEARANCE: // https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml printf("%02X", little_endian_read_16(data, 0) ); break; - case 0x1A: // Advertising Interval + case BLUETOOTH_DATA_TYPE_ADVERTISING_INTERVAL: printf("%u ms", little_endian_read_16(data, 0) * 5/8 ); break; - case 0x3D: // 3D Information Data + case BLUETOOTH_DATA_TYPE_3D_INFORMATION_DATA: printf_hexdump(data, size); break; - case 0xFF: // Manufacturer Specific Data + case BLUETOOTH_DATA_TYPE_MANUFACTURER_SPECIFIC_DATA: // Manufacturer Specific Data break; - case 0x0D: // Class of Device (3B) - case 0x0E: // Simple Pairing Hash C (16B) - case 0x0F: // Simple Pairing Randomizer R (16B) - case 0x10: // Device ID - case 0x11: // Security Manager TK Value (16B) + case BLUETOOTH_DATA_TYPE_CLASS_OF_DEVICE: + case BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C: + case BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R: + case BLUETOOTH_DATA_TYPE_DEVICE_ID: + case BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS: default: - printf("Unknown Advertising Data Type"); + printf("Advertising Data Type 0x%2x not handled yet", data_type); break; } printf("\n"); diff --git a/src/ad_parser.c b/src/ad_parser.c index f18d6eea4..9505325b0 100644 --- a/src/ad_parser.c +++ b/src/ad_parser.c @@ -47,20 +47,14 @@ #include <stdlib.h> #include <string.h> +#include "bluetooth_data_types.h" #include "btstack_util.h" #include "classic/sdp_util.h" +#include "hci.h" #include "hci_cmd.h" -#include "hci.h" #include "ad_parser.h" -typedef enum { - IncompleteList16 = 0x02, - CompleteList16 = 0x03, - IncompleteList128 = 0x06, - CompleteList128 = 0x07 -} UUID_TYPE; - void ad_iterator_init(ad_context_t *context, uint8_t ad_len, const uint8_t * ad_data){ context->data = ad_data; context->length = ad_len; @@ -104,15 +98,15 @@ int ad_data_contains_uuid16(uint8_t ad_len, const uint8_t * ad_data, uint16_t uu uint8_t ad_uuid128[16], uuid128_bt[16]; switch (data_type){ - case IncompleteList16: - case CompleteList16: + 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 IncompleteList128: - case CompleteList128: + 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); @@ -142,8 +136,8 @@ int ad_data_contains_uuid128(uint8_t ad_len, const uint8_t * ad_data, const uint switch (data_type){ - case IncompleteList16: - case CompleteList16: + 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 uuid16 = little_endian_read_16(data, i); uuid_add_bluetooth_prefix(ad_uuid128, uuid16); @@ -152,8 +146,8 @@ int ad_data_contains_uuid128(uint8_t ad_len, const uint8_t * ad_data, const uint } break; - case IncompleteList128: - case CompleteList128: + case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: + case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS: for (i=0; i<data_len; i+=16){ if (memcmp(uuid128_le, &data[i], 16) == 0) return 1; }