Как исключить определенные устройства из поискового запроса BLE? - PullRequest
0 голосов
/ 06 июня 2018

Я пишу пользовательский разъем Bluetooth и хочу, чтобы поисковый запрос был точным, как стандартное приложение Bluetooth в Mac OS.Как я могу этого достичь?Я использую платформы CoreBluetooth и IOBluetooth для достижения этой цели, но получаю все виды устройств, включая телевизоры и т. Д.

Из документов Я понял, что есть определенные услуги, которые я хочу предоставить в

.scanForPeripherals(withServices: [CBUUID], options: nil)

Но какие услуги?Я также нашел разъем Xcode Bluetooth по умолчанию, но он не включает исходный код.

На данный момент мой код:

let cbuuids = [CBUUID(string: "0x180A"), CBUUID(string: "0x1801"), CBUUID(string: "0x1800"), CBUUID(string: "0x1812")]

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    switch central.state {
    case .poweredOn:
        print("powered on")
        central.scanForPeripherals(withServices: cbuuids, options: nil)
    case .unknown:
        print("state unknown")
    case .resetting:
        print("resetting")
    case .unsupported:
        print("unsupported")
    case .unauthorized:
        print("unauthorized")
    case .poweredOff:
        print("powered off")
    }
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    print(peripheral.name)
    devices.append(peripheral)
    devices = devices.unique

    tableView.reloadData()
    scrubber.reloadData()

}

И я загружаю поисковый запрос на сенсорной панелискруббер, но дело не в этом.

Есть ли способ сопоставить оригинальный список устройств в стандартном приложении?Любой совет приветствуется.

1 Ответ

0 голосов
/ 06 июня 2018

Ваш код выглядит нормально, но

let cbuuids = [CBUUID(string: "0x180A"), CBUUID(string: "0x1801"), CBUUID(string: "0x1800"), CBUUID(string: "0x1812")]

вы включаете UUID по умолчанию, такие как 0x180A , служба информации об устройстве который, я думаю, включен во все объявления об устройствах.

Так что при поиске с этим UUID все устройства обнаруживаются в обнаружении.Подробнее здесь об услугах Gatt

Таким образом, решение заключается в добавлении пользовательских UUID пользовательских служб в ваш поиск.

Также обратите внимание, что UUID должны быть включены врекламные пакеты вашего устройства, которые вы пытаетесь найти в поиске.Вы можете узнать больше о рекламных данных здесь

...