我第一次使用CoreBluetooth,试图找出如何过滤设备列表,只使用RFID扫描仪。我了解到,有pre-defined Service UUIDs为各种类型的设备,但我找不到任何这些服务,明确提到,甚至似乎匹配,RFID扫描仪。
但是,在次要设备类表中,手持式RFID扫描仪的位5-2应为1000
。但我不知道这是怎么回事。设备类部分描述了在定义各种类型的设备时23-0位的用途,所以我知道那些5-2位进入了整个23-0位集合...但我不确定它如何与服务UUID重叠/交互,或者它们是否交互。
例如,我发现的一个常见示例是,Heart Rate service
是用0x180D
的缩短UUID定义的,但这将是32位,而不是像上面的设备类那样的24位。
RFID扫描仪是否有蓝牙服务UUID?如何筛选已发现设备的列表,以便只显示RFID扫描仪?
func startBluetoothScan() {
print("starting bt scan...")
self.centralManager.scanForPeripherals(withServices: nil,
options: [CBCentralManagerScanOptionAllowDuplicatesKey: false]
)
print("started bt scan")
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String: Any], rssi: NSNumber) {
if self.discoveredPeripherals[peripheral.identifier] == nil {
print("did discover bt peripheral (strength: \(rssi)): \(peripheral.name ?? "-") | \(advertisementData[CBAdvertisementDataLocalNameKey] ?? "-")")
self.discoveredPeripherals[peripheral.identifier] = CBPeripheralInfo(peripheral: peripheral, data: advertisementData, rssi: rssi)
}
}
字符串
1条答案
按热度按时间sxpgvts31#
蓝牙SIG定义了一些特定的服务--您给予一个这样的例子;心率服务。这些服务包含在assigned numbers document中。
这些分配的服务使用一个16位值,该值将被替换为
0000xxxx-0000-1000-8000-00805F9B34FB
的基本UUID-心率服务的实际服务代码为0000180d-0000-1000-8000-00805F9B34FB
核心蓝牙识别这些16位服务标识符,并为您做替换。
分配的GATT服务标识在第3.4.1节中列出。
您所指的
1 0 0 0
位位于外围设备类部分,而不是GATT服务部分。似乎没有为RFID扫描仪定义的服务。我怀疑,这样的设备很可能会使用HID蓝牙配置文件,并以键盘的形式出现,在这种情况下,它将无法通过核心蓝牙被iOS应用程序看到。
制造商也可以选择通过其自己的GATT服务来公开其设备;您需要参阅特定设备的文档。