使用CoreBluetooth提高文件传输速度

时间:2014-09-14 22:50:54

标签: ios core-bluetooth cbcentralmanager cbperipheral

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

由于图像大小超出限制,我使用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的次数越少,但每个包到达的时间越长。

我看到转移的速度要快得多,有关如何改进转移的建议吗?

由于

1 个答案:

答案 0 :(得分:3)

我可以通过将CBCharacteristicProperties更改为WriteWithoutResponse将其降低到3秒。

软件包传输速度更快,但是我知道它们何时交付时我没有回复,所以我必须实现自己的响应以了解传输何时完成。

除此之外它工作得很好!