use new Data Type defines from bluetooth_data_types

This commit is contained in:
Matthias Ringwald 2016-10-31 16:05:07 +01:00
parent 66fd343250
commit 1d0cde9daa
3 changed files with 40 additions and 45 deletions

View File

@ -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); const uint8_t * data = ad_iterator_get_data(&context);
// Prefer Complete Local Name over Shortend Local Name // Prefer Complete Local Name over Shortend Local Name
switch (data_type){ switch (data_type){
case 0x08: // Shortened Local Name case BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME:
if (devices[deviceCount].state == REMOTE_NAME_FETCHED) break; 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; devices[deviceCount].state = REMOTE_NAME_FETCHED;
memcpy(name_buffer, data, data_size); memcpy(name_buffer, data, data_size);
name_buffer[data_size] = 0; 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, (unsigned int) devices[deviceCount].classOfDevice, devices[deviceCount].pageScanRepetitionMode,
devices[deviceCount].clockOffset); devices[deviceCount].clockOffset);
if (event >= HCI_EVENT_INQUIRY_RESULT_WITH_RSSI){ 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){ if (devices[deviceCount].state == REMOTE_NAME_FETCHED){
printf(", name '%s'", name_buffer); printf(", name '%s'", name_buffer);

View File

@ -144,7 +144,7 @@ static void dump_advertisement_data(const uint8_t * adv_data, uint8_t adv_size){
// Assigned Numbers GAP // Assigned Numbers GAP
switch (data_type){ switch (data_type){
case 0x01: // Flags case BLUETOOTH_DATA_TYPE_FLAGS:
// show only first octet, ignore rest // show only first octet, ignore rest
for (i=0; i<8;i++){ for (i=0; i<8;i++){
if (data[0] & (1<<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; break;
case 0x02: // Incomplete List of 16-bit Service Class UUIDs case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
case 0x03: // Complete List of 16-bit Service Class UUIDs case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
case 0x14: // List of 16-bit Service Solicitation UUIDs case BLUETOOTH_DATA_TYPE_LIST_OF_16_BIT_SERVICE_SOLICITATION_UUIDS:
for (i=0; i<size;i+=2){ for (i=0; i<size;i+=2){
printf("%02X ", little_endian_read_16(data, i)); printf("%02X ", little_endian_read_16(data, i));
} }
break; break;
case 0x04: // Incomplete List of 32-bit Service Class UUIDs case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_32_BIT_SERVICE_CLASS_UUIDS:
case 0x05: // Complete 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){ for (i=0; i<size;i+=4){
printf("%04"PRIX32, little_endian_read_32(data, i)); printf("%04"PRIX32, little_endian_read_32(data, i));
} }
break; break;
case 0x06: // Incomplete List of 128-bit Service Class UUIDs case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
case 0x07: // Complete List of 128-bit Service Class UUIDs case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
case 0x15: // List of 128-bit Service Solicitation UUIDs case BLUETOOTH_DATA_TYPE_LIST_OF_128_BIT_SERVICE_SOLICITATION_UUIDS:
reverse_128(data, uuid_128); reverse_128(data, uuid_128);
printf("%s", uuid128_to_str(uuid_128)); printf("%s", uuid128_to_str(uuid_128));
break; break;
case 0x08: // Shortened Local Name case BLUETOOTH_DATA_TYPE_SHORTENED_LOCAL_NAME:
case 0x09: // Complete Local Name case BLUETOOTH_DATA_TYPE_COMPLETE_LOCAL_NAME:
for (i=0; i<size;i++){ for (i=0; i<size;i++){
printf("%c", (char)(data[i])); printf("%c", (char)(data[i]));
} }
break; break;
case 0x0A: // Tx Power Level case BLUETOOTH_DATA_TYPE_TX_POWER_LEVEL:
printf("%d dBm", *(int8_t*)data); printf("%d dBm", *(int8_t*)data);
break; 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); 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; break;
case 0x16: // Service Data case BLUETOOTH_DATA_TYPE_SERVICE_DATA:
printf_hexdump(data, size); printf_hexdump(data, size);
break; break;
case 0x17: // Public Target Address case BLUETOOTH_DATA_TYPE_PUBLIC_TARGET_ADDRESS:
case 0x18: // Random Target Address case BLUETOOTH_DATA_TYPE_RANDOM_TARGET_ADDRESS:
reverse_bd_addr(data, address); reverse_bd_addr(data, address);
printf("%s", bd_addr_to_str(address)); printf("%s", bd_addr_to_str(address));
break; 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 // https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
printf("%02X", little_endian_read_16(data, 0) ); printf("%02X", little_endian_read_16(data, 0) );
break; break;
case 0x1A: // Advertising Interval case BLUETOOTH_DATA_TYPE_ADVERTISING_INTERVAL:
printf("%u ms", little_endian_read_16(data, 0) * 5/8 ); printf("%u ms", little_endian_read_16(data, 0) * 5/8 );
break; break;
case 0x3D: // 3D Information Data case BLUETOOTH_DATA_TYPE_3D_INFORMATION_DATA:
printf_hexdump(data, size); printf_hexdump(data, size);
break; break;
case 0xFF: // Manufacturer Specific Data case BLUETOOTH_DATA_TYPE_MANUFACTURER_SPECIFIC_DATA: // Manufacturer Specific Data
break; break;
case 0x0D: // Class of Device (3B) case BLUETOOTH_DATA_TYPE_CLASS_OF_DEVICE:
case 0x0E: // Simple Pairing Hash C (16B) case BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_HASH_C:
case 0x0F: // Simple Pairing Randomizer R (16B) case BLUETOOTH_DATA_TYPE_SIMPLE_PAIRING_RANDOMIZER_R:
case 0x10: // Device ID case BLUETOOTH_DATA_TYPE_DEVICE_ID:
case 0x11: // Security Manager TK Value (16B) case BLUETOOTH_DATA_TYPE_SECURITY_MANAGER_OUT_OF_BAND_FLAGS:
default: default:
printf("Unknown Advertising Data Type"); printf("Advertising Data Type 0x%2x not handled yet", data_type);
break; break;
} }
printf("\n"); printf("\n");

View File

@ -47,20 +47,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "bluetooth_data_types.h"
#include "btstack_util.h" #include "btstack_util.h"
#include "classic/sdp_util.h" #include "classic/sdp_util.h"
#include "hci.h"
#include "hci_cmd.h" #include "hci_cmd.h"
#include "hci.h"
#include "ad_parser.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){ void ad_iterator_init(ad_context_t *context, uint8_t ad_len, const uint8_t * ad_data){
context->data = ad_data; context->data = ad_data;
context->length = ad_len; 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]; uint8_t ad_uuid128[16], uuid128_bt[16];
switch (data_type){ switch (data_type){
case IncompleteList16: case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
case CompleteList16: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
for (i=0; i<data_len; i+=2){ for (i=0; i<data_len; i+=2){
uint16_t uuid = little_endian_read_16(data, i); uint16_t uuid = little_endian_read_16(data, i);
if ( uuid == uuid16 ) return 1; if ( uuid == uuid16 ) return 1;
} }
break; break;
case IncompleteList128: case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
case CompleteList128: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
uuid_add_bluetooth_prefix(ad_uuid128, uuid16); uuid_add_bluetooth_prefix(ad_uuid128, uuid16);
reverse_128(ad_uuid128, uuid128_bt); 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){ switch (data_type){
case IncompleteList16: case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
case CompleteList16: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_16_BIT_SERVICE_CLASS_UUIDS:
for (i=0; i<data_len; i+=2){ for (i=0; i<data_len; i+=2){
uint16_t uuid16 = little_endian_read_16(data, i); uint16_t uuid16 = little_endian_read_16(data, i);
uuid_add_bluetooth_prefix(ad_uuid128, uuid16); 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; break;
case IncompleteList128: case BLUETOOTH_DATA_TYPE_INCOMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
case CompleteList128: case BLUETOOTH_DATA_TYPE_COMPLETE_LIST_OF_128_BIT_SERVICE_CLASS_UUIDS:
for (i=0; i<data_len; i+=16){ for (i=0; i<data_len; i+=16){
if (memcmp(uuid128_le, &data[i], 16) == 0) return 1; if (memcmp(uuid128_le, &data[i], 16) == 0) return 1;
} }