Приложение может в данный момент написать сообщение,
// 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 является асинхронным, я не совсем уверен, как это осуществить.