Я новичок в Bluetooth и CoreBluetooth и пытаюсь создать тестовое приложение, которое:
- использует устройство iOS в качестве вещателя GAP
- использует то же самое iOS Устройство для обнаружения других iOS устройств, передающих ту же услугу
- , любое приложение, передающее услугу, может динамически обновлять характеристики услуги c и другое количество устройств, чтобы динамически видеть обновленную характеристику c.
Динамическая природа c не обязательно должна быть немедленной / реальной, но близкой к реальной было бы неплохо. Интерактив будет бонусом.
По сути, id любит локальный многоадресный эквивалент, не полагаясь на какие-либо соединения или централи. В моем случае использования приложения нет необходимости в центральном и периферийном устройстве для согласования соединения. Все данные передаются, анонимизируются и предназначены только для чтения.
Однако всякий раз, когда я пытаюсь запросить услугу с обнаруженного периферийного устройства - его службы равны нулю, и он говорит, что мне нужно подключиться к нему, чтобы обнаружить его. характеристики.
2020-03-19 12:27:15.842128-0400 no-go[374:89822] [CoreBluetooth] API MISUSE: <CBPeripheral: 0x17d925b0, identifier = <UUID HERE>, name = SERVICE_NAME, state = disconnected> can only accept commands while in the connected state
Можно ли создать службу GAP широковещательного режима с динамическими c обновлениями на iOS и их динамическое обновление?
Или я неправильно понимаю центральные узлы и соединения, и можно ли делать сверхлегкие соединения, возникающие многократно и динамично?
Моя текущая попытка настроена:
- 1 UUID с «жестко заданным» сервисом, который все широковещательные iOS устройства совместно используют
2 «жестко закодированные» характеристики c UUID, с которым все широковещательно iOS совместно используют устройство
Каждое широковещательное iOS устройство создает CBMutableCharacteristic
для идентификаторов c идентификаторов - каждый с только для чтения и нулевыми значениями в ожидании, что он будет обновляться динамически позже.
Каждое устройство создает CBPeripheralManager
для трансляции услуги
- Каждое устройство создает
CBCentralManager
для поиска других вещателей для указанного c UUID
Код обнаружения:
self.centralManager.scanForPeripherals(withServices: [ self.service ], options: nil)
print("Started Listening")
Устройства обнаруживают, когда друг друга становятся активными (запуск приложения) - с помощью метода центрального делегата:
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
Однако мой обнаруженный периферийное не может быть Я обнаружил ошибку, не связанную выше.
Любые указатели приветствуются