我试着写下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
。
我尝试将Byte数组写为
- (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];
}
没有返回错误。但我的外围设备没有收到任何东西。
答案 0 :(得分:0)
外围设备为每个特征设置权限。读写权限是分开的。不允许写入只是意味着不管加密级别如何都不允许写入。
如果您使用write而不响应,则不会按照规范传递错误消息。
编辑:hmm假设_properties引用蓝牙核心规范中的特性属性表,第3卷第G部分3.3.1.1 a 4表示应该允许不响应写但不允许写响应。