1 つは周辺機器 (iOS 7 を実行する iPad 第 4 世代) として、もう 1 つは中央 (iOS 7 を実行する iPhone 5c) としての 2 つのアプリケーションがあります。
中央が一握りのバイト (約 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];
}
}
}
エラーを示す didWriteValueForCharacteristic へのコールバックを取得します。
エラー ドメイン = CBATTErrorDomain コード = 14 「ありそうもないエラーです。」
これはあまり役に立ちません。
誰かが問題を見つけたり、解決策を提案したりできますか?
ありがとう、リッチ