2016-08-02 2 views
1

Как я могу получить все доступные функции с моего устройства с помощью Core Bluetooth.iOS Core bluetooth получить описание всех функций с устройства

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

Итак, первый шаг - сканирование для всех периферийных устройств scanForPeripheralsWithServices через CBCentralManager. В делегат обратного вызова:

- (void)centralManager:(CBCentralManager *)central 
didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
        RSSI:(NSNumber *)RSSI 

мы можем сохранить периферический идентификатор и сохранить периферийными справиться с этим в будущем, как изменение некоторых характеристики, включение/выключение и т.д.

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

Позвольте мне описать ситуацию. Например, у меня есть звуковой плеер с некоторыми опциями, где я могу обрабатывать громкость звука через Bluetooth.

Так что мне нужно сначала получить периферийное устройство, а затем обнаружить сервис, а затем обнаружить характеристику, чтобы найти объем «свойство», но как я могу его найти, как я должен понимать, какой минимальный/максимальный объем тома, где можно найти эту информацию , Например, мы можем передать 0 как минимальное количество и 1 как максимум. Но он также может находиться в диапазоне от 0 до 1000 или любого другого. Как обнаружить эту информацию?

ответ

1

Вы не можете быть уверены, что найти «документацию» для каждой характеристики, как то, что возможные значения и т.д.
Если услуги & в Характеристики соответствуют документации Bluetooth и сами по себе «документированы», а просто следуют документу, это here. Теоретически тезисы «хорошо известных» служб и персонажей должны иметь UUID типа «0x0000».
Пример: Battery service - 0x180F, Battery Level - 0x2A19, а возможные значения имеют определенный протокол.

Для других пользовательских услуг/характеристик это сложнее. У каждого есть своя документация, а UUID длиннее (если она разработана в соответствии с правилами). Если установлено, вы можете прочитать CBDescriptor, чтобы получить дополнительную информацию.

Во всех случаях вы должны либо обратиться к документации по низкоэнергетической технологии Bluetooth, либо если она является обычаем для производителя. Либо мудрый, это все об обратном преобразовании.

+0

ОК, как я понял, я должен запросить UUID каждого признака от производителя, не так ли? поскольку они могут указывать любые 128 бит UUID для характеристики. Спасибо за ответ! –

+0

Это когда вы просматриваете службы и характеристики, если их UUID попадают в «классические», тогда вы можете знать, что делать, иначе он настроен производителем (и это может быть что угодно). – Larme

0

Вы можете сослаться на этот демонстрационный проект here.

С помощью следующего фрагмента вы можете получить все характеристики, связанные с любым периферийным устройством, поддерживаемым iOS.

BabyBluetooth *objBluetooth = [BabyBluetooth shareBabyBluetooth]; 
objBluetooth.scanForPeripherals().begin(); 

Вы можете установить обратные вызовы делегатов таким образом.

-(void)babyDelegate{ 

    //If any peripheral discovered 
    [objBluetooth setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) { 
     NSLog(@"搜索到了设备:%@",peripheral.name); 
    }]; 


    //Set the filtration criteria for the bluetooth peripherals 
    [objBluetooth setFilterOnDiscoverPeripherals:^BOOL(NSString *peripheralName, NSDictionary *advertisementData, NSNumber *RSSI) { 

     //if ([peripheralName hasPrefix:@"Pxxxx"]) { 
     // return YES; 
     //} 
     //return NO; 
     if (peripheralName.length >1) { 
      return YES; 
     } 
     return NO; 
    }]; 

    //and so on. 
} 

После периферийное фильтруется, вы можете получить его из массива, а затем использовать это:

objBluetooth.having(peripheralFromArray).then.connectToPeripherals().discoverServices().discoverCharacteristics().begin(); 

[_channelForaD40 setBlockOnDiscoverCharacteristics:^(CBPeripheral *peripheral, CBService *service, NSError *error) { 

// получить описание характеристики здесь }];

[_channelForaD40 setBlockOnReadValueForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristics, NSError *error) { 

// Читает значение ваших характеристик здесь }];

затем, наконец, вы можете сравнить свои характеристики с Bluetooth standards.

+0

спасибо, например, но где я могу найти информацию о том, что на самом деле должны делать каждая характеристика. Я знаю, что каждое периферийное устройство содержит имя. Но как насчет характеристики? –

+0

Я использую для этого библиотеку YMSCB, но не могу понять, как получить всю доступную функцию для изменения и в каком диапазоне я должен ее изменить. –

+0

См. Мой обновленный ответ – itechnician

Смежные вопросы