gpt4 book ai didi

ios - 为什么 CBCharacteristics 接收写入值比更新值花费的时间更长?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:59:26 26 4
gpt4 key购买 nike

我在我的一个应用程序中启用了 CoreBluetooth。有一个中央 iOS 设备,以及最多 2 个可以连接到中央的外围 iOS 设备。

我通过使用中央订阅的外围设备上的一个特性实现了上游通信,我通过使用中央存储和写入的外围设备上的另一个特性实现了下游通信使用 writeValue:forCharacteristic:type :

这些在外设中是这样设置的:

upstream = [[CBMutableCharacteristic alloc] initWithType:pipeUUID properties:CBCharacteristicPropertyNotify value:nil permissions:0];
downstream = [[CBMutableCharacteristic alloc] initWithType:downstreamUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];

向下游发送数据时,通常如下所示:

NSData* data = [[NSString stringWithFormat:@"%d,%d", AppStateID, SomeValue] dataUsingEncoding:NSUTF8StringEncoding];
[_peripheral1 writeValue:data forCharacteristic:_peripheral1Downstream type:CBCharacteristicWriteWithResponse];

这个实现确实有效,而且效果很好,但我注意到有时会出现一些问题。

当我通过上游特性从外围设备向中央设备发送数据时,中央设备几乎立即接收到数据,通常是在同一帧上。但是,当我通过下游特征从中央向外围设备发送数据时,外围设备可能需要 0.5 秒到 5 秒才能接收数据。

这不是什么大问题,但如果用户沟通的时间不那么长,肯定会更好。


所以我的问题是:

  1. 首先我的实现有什么问题吗?
  2. 如果是,执行此操作的正确方法是什么?
  3. 如果不是,是否有任何方法可以优化从中央到外围设备的通信,或者是否有类似的通知特性,我可以使用它向下游而不是上游发送数据?

如果它是相关的,我会注意到我确实从写请求中得到了一个重复出现的错误,即使它们确实成功了。

Write error: Error Domain=CBATTErrorDomain Code=241 "Unknown ATT error." UserInfo={NSLocalizedDescription=Unknown ATT error.}

最佳答案

您的实现看起来不错,但在外设端代码中,您需要成功响应写请求,否则中央将超时并在 5 秒左右后给出错误 - 您在上面得到的那个。该值仍会在 Peripheral 上更新,但中央无法知道,除非您像 (Swift) 那样回应:

self.peripheralManager.respondToRequest(request, withResult: CBATTError.Success)

关于ios - 为什么 CBCharacteristics 接收写入值比更新值花费的时间更长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com