我试图写到ble特征。但返回错误是"不允许写入"。
这是为了发现特征。在发现指定服务的特征时调用。
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
if ([service.UUID isEqual:[CBUUID UUIDWithString:DEVICE_SERVICE_UUID]]) {
for (CBCharacteristic *aChar in service.characteristics)
{
if ([aChar.UUID isEqual:dev2appcharacteristicsUUID]) {
[devicePeripheral setNotifyValue:YES forCharacteristic:aChar];
NSLog(@"Found R-Motion device with characteristics: %@n", aChar);
dev2appCharacteristic = aChar;
}
if ([aChar.UUID isEqual:app2devcharacteristicsUUID]) {
//[devicePeripheral setNotifyValue:NO forCharacteristic:aChar];
NSLog(@"Found R-Motion device with characteristics: %@n", aChar);
app2devCharacteristic = aChar;
}
}
}
}
我可以正确发现。并尝试写入 app2devCharacteristic。它有_properties unsigned long long 4
和_isNotifying bool false
.
我试图将字节数组写为
- (IBAction)RequestResult:(id)sender {
unsigned char bytes[] = {0x00, 0xCC, 0xFF};//{0xFF, 0xCC, 0x00};//
NSData *transactData = [NSData dataWithBytes:bytes length:3];
[devicePeripheral writeValue:transactData forCharacteristic:app2devCharacteristic type:CBCharacteristicWriteWithResponse];
}
我在didWriteValueForCharacteristic
返回时出现错误"Writing is not permitted"
如果我更改为没有响应
- (IBAction)RequestResult:(id)sender {
unsigned char bytes[] = {0x00, 0xCC, 0xFF};//{0xFF, 0xCC, 0x00};//
NSData *transactData = [NSData dataWithBytes:bytes length:3];
[devicePeripheral writeValue:transactData forCharacteristic:app2devCharacteristic type:CBCharacteristicWriteWithoutResponse];
}
没有返回任何错误。但是我的外围设备什么也收不到。
外设为每个特征设置权限。读取权限和写入权限是分开的。不允许写入仅表示不允许写入,无论加密级别如何。
如果使用不响应的写入,则不会根据规范传递错误消息。
编辑:嗯,假设_properties参考蓝牙核心规范中的特征属性表,第 3 卷 G 部分第 3.3.1.1 节 a 4 表示应允许无响应写入,但不允许使用响应写入。