2014-09-14 1 views
2

J'ai actuellement mon application OSX (centrale) envoyant une image 4Kb à mon application iOS (périphérique) à travers une caractéristique inscriptible en utilisant writeValue.Améliorer la vitesse de transfert de fichiers en utilisant CoreBluetooth

Parce que la taille de l'image dépasse la limite, j'utilise WriteValue plusieurs fois avec la fonction suivante:

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) 
} 

Mon problème est que cela prend beaucoup plus longtemps que ce que je dois à environ 30 secondes. La chose étrange est, même si j'utilise CBCharacteristicWriteType.WithoutResponse lors de l'envoi de l'image, je reçois des réponses pour eux, je me demande si cela rend la lenteur.

Voilà comment j'ai ma configuration caractéristique sur le côté périphérique:

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) 

J'ai essayé différentes valeurs pour NOTIFY_MTU, allant de 20 à 900, mais plus il est élevé, moins de fois WriteValue est exécuté, mais plus chaque paquet prend de temps pour arriver.

J'ai vu des transferts effectuer beaucoup plus rapidement, des suggestions sur la façon de l'améliorer?

Merci

Répondre

3

j'ai pu le ramener à 3 secondes en changeant CBCharacteristicProperties à WriteWithoutResponse.

Les paquets sont transférés incroyablement plus rapidement mais j'ai perdu la réponse pour savoir quand ils ont été livrés, donc j'ai dû mettre en œuvre ma propre réponse pour savoir quand le transfert est terminé.

À part ça, ça marche très bien!

+0

Merci qui m'a vraiment aidé! –

Questions connexes