2014-09-14 2 views
2

В настоящее время у меня есть приложение OSX (центральное), отправляющее изображение 4Kb в мое приложение iOS (периферийное) через записываемую характеристику с использованием writeValue.Улучшение скорости передачи файлов с помощью CoreBluetooth

Поскольку размер изображения превышает предел, я использую 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 является выполненных, но чем дольше каждый пакет принимает, чтобы прибыть.

Я видел, как переводы выполняются намного быстрее, любые предложения о том, как их улучшить?

Благодаря

ответ

3

я смог довести его до 3-х секунд, изменяя CBCharacteristicProperties к WriteWithoutResponse.

Пакеты передаются безумно быстрее, но я потерял ответ, чтобы узнать, когда они были доставлены, поэтому мне пришлось реализовать свой собственный ответ, чтобы узнать, когда передача завершена.

Помимо этого, он отлично работает!

+0

Спасибо, что очень помогли! –

Смежные вопросы