[英]Find TxPower on iOS Bluetooth Peripheral
我正在构建一个iOS应用程序(在Swift中),该应用程序既可以用作Core Bluetooth外围设备,也可以用作中央设备。 我需要确定外围设备的txPower,但不一定需要将其发送到另一台设备的中央设备(尽管那会很棒)。 我很乐意确定发送设备本身上的外围设备的txPower。
我知道我可以从制造商特定数据中确定txPower,但是我无法弄清楚如何读取设备的制造商特定数据,而我中心正在获取的adsData仅包括外围设备的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)
])}
在didDiscoverPeripheral委托中得到的advertData NSDictionary是:
["kCBAdvDataServiceUUIDs": (
"109F17E4-EF68-43FC-957D-502BB0EFCF47"), "kCBAdvDataIsConnectable": 1]
同样,任何允许我在外围设备的广告包中添加制造商特定数据,或允许我在发送设备上读取外围设备的制造商特定数据或txPower的解决方案,都将是很棒的。 非常感谢!
根据我的经验,使用CoreBluetooth API无法从其他iOS外围设备完全获得TX功率水平或任何制造商数据,因为它与您在didDiscoverPeripheral回调中收到的扫描结果相去甚远。 但是,您可以获取外围设备的RSSI值,也许您可以根据要实现的目的使用它。
我不确定您如何通过制造商数据确定TX功率水平。 BLE规范为其定义了单独的特性。
希望这可以帮助!
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
使用此方法,您可以获得外围设备正在通告的所有数据。
尝试看看您得到的回应。 这将允许您读取数据。
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]);
在advertiseData描述日志中,您将获得具有其值的键,如下所示:
{
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = givenName;
kCBAdvDataManufacturerData = <given data>;
kCBAdvDataServiceUUIDs = (0536);
kCBAdvDataTxPowerLevel = some value ;
}
希望您得到了想要的东西。
txpower是您将从CBAdvertisementDataTxPowerLevelKey
下的设备进行CBAdvertisementDataTxPowerLevelKey
。 寻找这个
CB_EXTERN NSString * const CBAdvertisementDataTxPowerLevelKey;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.