2016-02-15 5 views
0

Я создаю приложение iOS (в Swift), которое выступает в качестве периферийного и центрального периферийного устройства Bluetooth. Мне нужно определить txPower периферийного устройства, но мне не обязательно отправлять его в центральное устройство другого устройства (хотя это было бы замечательно); Я был бы счастлив просто определить txPower периферии на самом устройстве-отправителе.Найти TxPower на периферийной периферии iOS Bluetooth

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

Это, как я создал мой периферийное:

peripheral = CBPeripheralManager(delegate: self, queue: nil) 
myService = CBMutableService(type: CBUUID(string: "109F17E4-EF68-43FC-957D-502BB0EFCF47"), primary: true) 
peripheral.addService(myService) 

Это, как я создал мой центральный:

centralManager.scanForPeripheralsWithServices([myCustomServiceUUID], options: nil) 

Тогда в peripheralManagerDidUpdateState:

if peripheral.state == CBPeripheralManagerState.PoweredOn { 

     self.peripheral.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [myService.UUID] ])} 

... в centralManagerDidUpdateState:

if central.state == CBCentralManagerState.PoweredOn { 

     centralManager.scanForPeripheralsWithServices([myCustomServiceUUID], options: [ 
      CBCentralManagerScanOptionAllowDuplicatesKey : NSNumber(bool: true) 
      ])} 

И полученный advertisementData NSDictionary в didDiscoverPeripheral делегата:

["kCBAdvDataServiceUUIDs": (
"109F17E4-EF68-43FC-957D-502BB0EFCF47"), "kCBAdvDataIsConnectable": 1] 

Опять же, любое решение, которое позволяет мне добавить Производитель конкретных данных в рекламном пакете моего Peripheral, либо позволяет мне читать Производитель Периферического Удельным Данные или txPower на отправляющем устройстве были бы действительно потрясающими. Большое спасибо заранее!

+0

Я создаю код, чтобы найти расстояние от устройства BLE. и я получаю немного данных в рекламе. а не ключ kCBAdvDataTxPowerLevel. так как найти значение TxPower? вы еще это выяснили? или любой другой способ его найти? – Moxarth

ответ

1

По моему опыту, невозможно получить уровень мощности TX или любые данные изготовителя от других периферийных устройств iOS, используя API CoreBluetooth, поскольку он удаляется от результата сканирования, который вы получаете при обратном вызове didDiscoverPeripheral. Однако вы можете получить значение RSSI периферийного устройства, возможно, вы можете использовать его в зависимости от того, чего вы хотите достичь.

Я не уверен, как вы хотели бы определить уровень мощности TX из данных производителя. Спецификация BLE определяет отдельную характеристику для нее.

Надеюсь, это поможет!

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

using this method , you can get all the data which are the peripheral is advertising . 

try to look what you are getting in response .this will allow you to read data. 

NSString * abc = [RSSI stringValue] ; 

NSLog(@" \n I see an advertisement with \n identifer: %@, \n state: %@ , \n name: %@, \n services: %@, \n RSSI : %@ \n ,\n description: %@ \n", 
      [peripheral identifier], 
      [peripheral state], 
      [peripheral name], 
      [peripheral services], 
      abc, 
      [advertisementData description]); 

in advertisementData description log , you will get the key with its value like this 
description: 
{ 
    kCBAdvDataIsConnectable = 1; 
    kCBAdvDataLocalName = givenName;`` 
    kCBAdvDataManufacturerData = <given data>; 
    kCBAdvDataServiceUUIDs = (0536); 
    kCBAdvDataTxPowerLevel = some value ; 
} 

hope you got what you are looking for . 

txpower is what you will be advertising from device under CBAdvertisementDataTxPowerLevelKey . 
look for this 
CB_EXTERN NSString * const CBAdvertisementDataTxPowerLevelKey; 
Смежные вопросы