Я реализовал ниже функцию записи прошивки на периферийное устройство.Когда я отлаживаю код с точками останова, он успешно обновляет микропрограмму, но когда я удаляю точки останова или не отлаживаю, он не возвращает ответ и возвращает неверное обновление файла.
CBPeripheral!.writeValue(data, for: BluetoothManager.SharedInstance.characteristic!, type: CBCharacteristicWriteType.withResponse)
func makeFWBLOCK (fwpos : Int){
totalCallCount = totalCallCount + 1
print("total Call Count ----- ",totalCallCount)
var txlen = 128 // 448 //448
if ((byteArray.count - fwpos) < 128) // < 64) // // 448) //448)
{
txlen = byteArray.count - fwpos
}
let dataForPayloadSize = NSData(bytes: [6 + txlen], length: 2) // 454
var resultPayloadSize = [UInt8](repeating: 0, count: 2)
dataForPayloadSize.getBytes(&resultPayloadSize, length: 2)
let dataForMajor = NSData(bytes: [4], length: 1) // NSData(bytes: [majorVersion], length: 1)
var resultMajor = [UInt8](repeating: 0, count: 1)
dataForMajor.getBytes(&resultMajor, length: 1)
//let dataForMinor = NSData(bytes: [1], length: 1)
let dataForMinor = NSData(bytes: [5], length: 1) //NSData(bytes: [minorversion], length: 1)
var resultMinor = [UInt8](repeating: 0, count: 1)
dataForMinor.getBytes(&resultMinor, length: 1)
let dataForSuffix = NSData(bytes: [65], length: 1) //NSData(bytes: [sufixVersion], length: 1)
var resultSuffix = [UInt8](repeating: 0, count: 1)
dataForSuffix.getBytes(&resultSuffix, length: 1)
// outbuf[6] = (byte) ((length / 64) + (((length % 64) > 0) ? 1 : 0));
let numberOfChunks = (txlen / 64) + (((txlen % 64) > 0) ? 1 : 0)
let dataForNumberOfChunks = NSData(bytes: [numberOfChunks], length: 1)
var resultNumberOfChunks = [UInt8](repeating: 0, count: 1)
dataForNumberOfChunks.getBytes(&resultNumberOfChunks, length: 1)
let offset = fwpos / 64
let dataForOffset = NSData(bytes: [offset], length: 2)
var resultOffset = [UInt8](repeating: 0, count: 2)
dataForOffset.getBytes(&resultOffset, length: 2)
var value: [UInt8] = [0x02];
value.append(UInt8(resultPayloadSize[0]))
value.append(UInt8(resultPayloadSize[1]))
value.append(UInt8(resultMajor[0]))
value.append(UInt8(resultMinor[0]))
value.append(UInt8(resultSuffix[0]))
value.append(UInt8(resultNumberOfChunks[0]))
value.append(UInt8(resultOffset[0]))
value.append(UInt8(resultOffset[1]))
let start = offset*64
let end = start + txlen - 1
value.append(contentsOf:byteArray[start...end])
let remaining = (byteArray.count - 1) - end
print("remaining:",remaining)
let data = Data(bytes:value)
self.fwpos1 = self.fwpos1 + txlen
self.pheripharal_To_Connect!.writeValue(data, for: BluetoothManager.SharedInstance.characteristic!, type: CBCharacteristicWriteType.withResponse)
}
Я пытался вызвать эту функцию в главном потоке, но все еще не удалось.
Любой, пожалуйста, руководство.
Заранее спасибо.