CoreBluetooth特性值

Eth*_*urn 5 iphone ios core-bluetooth

我对CBMutableCharacteristic的特征值有多长时间感到困惑.如果我有一个存档的对象数组,我可以将特征值设置为此存档数组吗?或者我最好为阵列中的每个存档对象分别设置一个特性?

all*_*rog 5

该规范将特征值的最大长度限制为512个八位字节(蓝牙规范V4.0第3卷第3部分第3.2.9节).在中央,您可以使用readValueForCharacteristic:API 启动读取请求.然后在外围端,您会收到相应的回调:

CBMutableCharacteristic *characteristic = // the characteristic with long data

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
  // Ensure offset is in the valid range
  if (request.offset > characteristic.value.length) {
   // respond with error
   [self.peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset];  
   return;
  }

  NSRange range = NSMakeRange(request.offset, characteristic.value.length - request.offset);
  request.value = [characteristic.value subdataWithRange:range];

  [self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];  
}
Run Code Online (Sandbox Code Playgroud)

offset只要响应不小于最大可传输单元(MTU),就会以增加的值调用回调.MTU由系统协商,您无法提前查询.因此,range设置为一直延伸到数据长度,以便系统可以决定将多少数据发送到中心.默认情况下,它是20,但iOS 7有一些调整,可以实现更大的尺寸.查看WWDC视频以获取更多详细信息.

有了这些信息,您应该能够找到一种方法来公开您的数据.请记住,您拥有的服务和特征越多,发现所需的时间就越长.使用长读和长写只是一种方便.

  • 512个八位字节转换成多少字节? (2认同)