Swift bluetooth le, напиши сообщение и жди ответа - PullRequest
0 голосов
/ 04 июля 2018

Приложение может в данный момент написать сообщение,

// Write call 
peripheral.writeValue(messageToData, for: charac, type: .withResponse)

// Which calls
public func peripheral(_ peripheral: CBPeripheral, didWriteValueFor 
characteristic: CBCharacteristic, error: Error?) {
    if error != nil {
        print("messagesent")
    }
}

Также, когда характеристика была установлена ​​для периферийного устройства, я установил для уведомления значение true

peripheral.setNotifyValue(true, for: characteristic)

Когда я отправляю сообщение о записи, я получаю ответ от устройства Bluetooth, который идет "OK" или "ERR", который запускается с помощью метода периферийного делегата didUpdateValueFor.

Так что приложение может писать и читать ответы с моего устройства. Однако я хочу иметь возможность создать функцию, которая пишет сообщение и ждет или проверяет ответ «ОК» или «ОШИБКА». При необходимости все функции CORE BLuetooth могут использовать моих собственных делегатов протокола.

Я смотрю на что-то вроде:

func writeAndCheckResponse(message: String){
// Write to device
bluetooth.writeToPeripheral(message: "Test", peripheral: bluetooth.connectedDevice!, writeCharacteristic: bluetooth.characteristic!)
// need to add a way to check whether a notification has been recevied and that the message has been written
}

Я думал об использовании обратных вызовов или DispatchGroup, но так как быстрый Bluetooth является асинхронным, я не совсем уверен, как это осуществить.

...