3

現在、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 の実行回数は少なくなりますが、各パッケージの到着に時間がかかります。

転送がはるかに高速に実行されるのを見てきましたが、それを改善する方法について何か提案はありますか?

ありがとう

4

1 に答える 1

4

CBCharacteristicProperties を WriteWithoutResponse に変更することで、3 秒に短縮できました。

パッケージは非常に速く転送されますが、いつ配達されたかを知るための応答を失ったので、転送がいつ終了したかを知るために独自の応答を実装する必要がありました.

それ以外は大活躍です!

于 2014-09-23T03:54:14.127 に答える