我有两个应用程序,一个作为外围设备(在运行iOS 7的iPad第四代上),另一个作为中央设备(在运行iOS 7的iPhone 5c上)。
我希望在外围设备中有一个可写特征,中央设备可以向其中写入一些字节(大约4个字节,但每次执行可能会有所不同)。
我正在按照以下方式配置外围设备:
-(void)startPeripheral
{
CBMutableService *service = [[CBMutableService alloc]initWithType:[CBUUID UUIDWithString:kMyServiceUUID] primary:YES];
CBMutableCharacteristic *ch = [[CBMutableCharacteristic alloc]initWithType:[CBUUID UUIDWithString:kMyWriteUUID] properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];
service.characteristics = @[ch];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@[[CBUUID UUIDWithString:kMyServiceUUID]], CBAdvertisementDataServiceUUIDsKey, @"My Peripheral", CBAdvertisementDataLocalNameKey, nil];
[self.peripheralManager addService:service];
[self.peripheralManager startAdvertising:dict];
NSLog(@"Service = %@",service);
}
一开始,所有的东西似乎都正常运行,外设会广告服务,我的中心可以扫描、发现服务和特征,并找到它感兴趣的特征。然而,当我尝试写入特征时就出现了问题。
在中心设备上,我有以下方法:
-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
NSLog(@"Service/Characteristics = %@",service.characteristics);
for(CBCharacteristic *ch in service.characteristics)
{
NSLog(@"Characteristic properties = %x",ch.properties);
NSLog(@"Characterisctic = %@",ch.UUID);
if([ch.UUID isEqual:[CBUUID UUIDWithString:kMyWriteUUID]])
{
// We've found our write characteristic
NSLog(@"Writing data to characteristic %@",ch.UUID);
NSData *data = [NSData dataWithBytes:(Byte[]){1,2,3,4} length:4];
[peripheral writeValue:data forCharacteristic:ch type:CBCharacteristicWriteWithResponse];
}
}
}
我收到了一个回调,指示错误:
Error Domain=CBATTErrorDomain Code=14 "不太可能的错误。"
但这并不是很有帮助。
有人能发现问题或提供任何解决方案吗?
谢谢,Rich