У меня есть устройство bluetooth с двойным типом bluetooth. При чтении данных с устройства проблем нет, но когда я использую CBCharacteristicWriteWithResponse или CBCharacteristicWriteWithoutResponse для записи значений, значение на устройстве не меняется. Для android он работает нормально с характеристиками ответа или без него c type.
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
Я установил для notify значение YES. Я не отправляю данные размером более 20 байт. Все та же проблема.
if ([command isKindOfClass:[NSData class]]) {
NSData *cmdData = (NSData *)command;
command = [[NSString alloc] initWithData:cmdData encoding:NSASCIIStringEncoding];
}
command = [command stringByAppendingString:@"\r\n"];
while ([command length] != 0) {
NSString* str = command;
if ([command length] > 20) {
str = [command substringToIndex:20];
}
DebugLog(@"SENT:%@",str);
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
[self.discoveredPeripheral writeValue:data forCharacteristic:self.selectedCharacteristic type:CBCharacteristicWriteWithResponse];
command = [command substringFromIndex:[str length]];
}
Я использую этот метод для отладки.
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
if (error) {
DebugLog(@"didWriteValueForCharacteristic ERROR: %@",error);
}
else {
DebugLog(@"didWriteValueForCharacteristic: %@",characteristic.UUID.UUIDString);
}
}
Получение этой ошибки при записи характеристик.
error NSError * domain: @"CBATTErrorDomain" - code: 3
0x14db57d0 _userInfo __NSDictionaryI * 1 key/value pair
0x14d66550 [0] (null)
@"NSLocalizedDescription" : @"Writing is not permitted." key
__NSCFConstantString * @"NSLocalizedDescription" 0x376b3cf4 value
__NSCFConstantString * @"Writing is not permitted." 0x37d109e4