1

我正在使用核心蓝牙。我正在做简单的写操作。在外围方面,将该值放入:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests 

但是当我实现上述方法时,写入值花费了太多时间。我在中央收到警告:

 CoreBluetooth[WARNING] Unknown error: 241

这很奇怪,因为当我查看文档时,我发现错误代码只是从 0 到 17 。有没有人有解决这个问题的方法?

4

4 回答 4

2

2410xF1在蓝牙属性协议 (ATT) 的“应用程序错误”范围内,请参阅第 3 卷 F 部分,蓝牙 4.0 规范的 3.4.1 错误处理。不幸的是,Apple 没有记录这些的使用。

我的经验也是,iOS 会0xF1代表应用程序自动响应 ATT 错误响应,以防它没有及时调用-[peripheralManager respondToRequest:withResult:],以响应-peripheralManager:didReceiveReadRequest:委托回调。

于 2015-10-09T12:01:45.010 回答
1

确保您正在调用:

迅速:

func respondToRequest(request: CBATTRequest!, withResult result: CBATTError)

目标-C:

- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result

成功时通过 CBATTError.Success 并仅调用该函数一次。来自委托回调的 EG:

func peripheralManager(peripheral: CBPeripheralManager!, didReceiveWriteRequests requests: AnyObject[]!)

称呼:

peripheral.respondToRequest(requests[0] as CBATTRequest, withResult: CBATTError.Success)

这为我们解决了这个问题。

于 2014-06-27T00:55:25.157 回答
1

我还没有清除那个错误代码。但现在解决了这个问题。我已经创建了具有属性的特征,CBCharacteristicPropertyWriteWithoutResponse因此删除了上述错误。数据也可以顺利写入外设。但还是想知道那个错误。

于 2013-07-17T06:25:42.700 回答
1

我同意迈克尔的观点。我以前也遇到过同样的问题,终于解决了。

如果中央设备向外围设备写入数据,它可以在CBCharacteristicPropertyWriteWithoutResponse模式或CBCharacteristicPropertyWriteWithResponse模式下工作。第一个不需要外围设备响应,但第二个需要。如果中央设备在请求时没有收到外围设备的响应,则会发生此错误。由于中央设备只等待几秒钟,您应该调用该方法

- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result

响应写操作只要委托方法

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests 

叫做。

如果写入数据很大,外设可能会收到多个 CBATTRequest。记住只响应 requests 数组的第一个请求。

于 2014-10-25T16:05:00.157 回答