3

我目前有我的 OSX 应用程序(中央)通过使用 writeValue 的可写特征向我的 iOS 应用程序(外围)发送 4Kb 图像。

由于图像大小超出限制,我多次使用 writeValue 和以下函数:

func sendData() {
    while (self.sendDataIndex < self.dataToSend.length) {
        var amountToSend = self.dataToSend.length - self.sendDataIndex!

        if (amountToSend > NOTIFY_MTU) {
            amountToSend = NOTIFY_MTU
        }

        // Copy out the data we want
        var chunk = self.dataToSend.subdataWithRange(NSMakeRange(self.sendDataIndex!, amountToSend))

        // Send it
        self.discoveredPeripheral?.writeValue(chunk, forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithoutResponse)

        // It did send, so update our index
        self.sendDataIndex = self.sendDataIndex!+amountToSend;

    }
    self.discoveredPeripheral?.writeValue("EOM".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true), forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithResponse)
}

我的问题是它需要的时间比我需要的要长得多,大约 30 秒。

奇怪的是,即使我在发送图像时使用 CBCharacteristicWriteType.WithoutResponse ,我也会得到他们的响应,我想知道这是否会使其变慢。

这就是我在外围设备方面的特色设置:

var cbProperties = CBCharacteristicProperties.Read|CBCharacteristicProperties.Write|CBCharacteristicProperties.Notify
var cbPermissions = CBAttributePermissions.Readable|CBAttributePermissions.Writeable
var transferCharacteristic = CBMutableCharacteristic(type: CBUUID.UUIDWithString(SETUP_CHARACTERISTIC_UUID), properties: cbProperties, value: nil, permissions: cbPermissions)

我为 NOTIFY_MTU 尝试了不同的值,范围从 20 到 900,但它越高,writeValue 执行的次数越少,但每个包到达所需的时间越长。

我已经看到传输执行得更快,关于如何改进它的任何建议?

谢谢

4

1 回答 1

4

通过将 CBCharacteristicProperties 更改为 WriteWithoutResponse,我能够将其缩短到 3 秒。

包裹的传输速度非常快,但是我失去了知道它们何时交付的响应,因此我必须实现自己的响应才能知道传输何时完成。

除此之外,它工作得很好!

于 2014-09-23T03:54:14.127 回答