我的外围设备要求我将十六进制值0x0001写入CCCD描述符以启用通知。当我尝试使用.notify属性将值写入特征时,出现以下错误:
Cannot invoke 'writeValue' with an argument list of type '(Data:String, for: CBCharacteristic)'
如何将值写入特性,以便接收通知?
我试图删除.writeValue行并仅保留.setNotifyValue行,但是当我从设备发送数据时,不会收到通知。收到通知后,我是否必须读取该值?通知是否应该将值写入我的输出中?
if characteristic.properties.contains(.notify) {
print("\(characteristic.uuid): properties contains .notify")
NUB5.writeValue(Data: "0x0001", for: characteristic)
NUB5.setNotifyValue(true, for: characteristic)
}
// BL652要求将0x0001的值写入TX CCCD以通知我们数据。
答案 0 :(得分:0)
setNotifyValue(true, for: characteristic)
应该足够了。
您是否实现了peripheral(_:didUpdateValueFor:error:)
方法?您能显示代码吗?
writeValue
接受Data
输入,但是您尝试传递String
。您需要对其进行编码,例如:
let encodedString = "Lorem ipsum".data(using: .utf8)
let number = 1
let encodedNumber = withUnsafeBytes(of: number) { Data($0) }
答案 1 :(得分:0)
根据Fayer的回答,我不得不对数据进行编码。以下代码在.writeValue之前对我有用:
var TxNotify:UInut=0001
let enableBytes = NSData(bytes: &TxNotify, length:8)
NUB5.writeValue(enableBytes as Data, for: characteristic, type: .withResponse)
NUB5.setNotifyValue(true, for: characteristic)