2013-09-09 3 views
15

Я реализовал пример Bluetooth LE bluetooth, который нашел монитор сердечного ритма и подключился к нему. Тем не менее, этот пример имеет класс, который определяет профиль ГАТТ как это:Поиск профилей Bluetooth Bluetooth GATT

private static HashMap<String, String> attributes = new HashMap(); 
public static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb"; 
public static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; 

static { 
    // Sample Services. 
    attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heart Rate Service"); 
    attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information Service"); 
    // Sample Characteristics. 
    attributes.put(HEART_RATE_MEASUREMENT, "Heart Rate Measurement"); 
    attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String"); 
} 

public static String lookup(String uuid, String defaultName) { 
    String name = attributes.get(uuid); 
    return name == null ? defaultName : name; 
} 

Теперь, что я хочу сделать, это изменить его так, чтобы эта программа находит любое устройство с Bluetooth-файла, но я не знаю, как Google получил информацию для измерения сердечного ритма конфигурации клиента.

Есть ли сайт где-нибудь со всей этой информацией, которую я не могу найти?

ответ

49

связи Bluetooth SIG поддерживает список "Assigned Numbers", который включает в себя те UUID,, найденные в примере приложения: https://www.bluetooth.org/en-us/specification/assigned-numbers

Хотя UUID, 128 бит в длину, присвоенные номера для Bluetooth LE перечислены как 16-битные шестнадцатеричные значения, потому что более низкие 96 бит согласованы по классу атрибутов.

Например, все BLE характерные UUID, имеют вид:

0000XXXX-0000-1000-8000-00805f9b34fb 

Присвоенный номер для характерного UUID Измерение пульса указана в качестве 0x2A37, который является, как разработчик образца кода может прибыть по адресу:

00002a37-0000-1000-8000-00805f9b34fb 
+5

Я просто хочу сказать, что я провел пару недель программирования с BLE и это никогда не объяснял везде, где я когда-либо видел. Я действительно ценю, что вы пишете этот ответ, потому что это сделало мою жизнь бесконечно легче. – deadbabykitten

+0

Это очень полезно, спасибо – kdgwill

3

в дополнение к ответу @Godfrey герцога, вот метод я использую, чтобы извлечь значительные биты UUID:

private static int getAssignedNumber(UUID uuid) { 
    // Keep only the significant bits of the UUID 
    return (int) ((uuid.getMostSignificantBits() & 0x0000FFFF00000000L) >> 32); 
} 

Пример использования:

// See https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.heart_rate.xml 
    private static final int GATT_SERVICE_HEART_RATE = 0x180D; 

    (...) 

     for (BluetoothGattService service : services) { 
      if (getAssignedNumber(service.getUuid()) == GATT_SERVICE_HEART_RATE) { 
       // Found heart rate service 
       onHeartRateServiceFound(service); 
       found = true; 
       break; 
      } 
     }