将错误写入 iOS 中的 ble 特征



我试图写到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 表示应允许无响应写入,但不允许使用响应写入。

相关内容

  • 没有找到相关文章

最新更新