CBPeripheral WriteValue не вызывает метод делегата без точек останова - PullRequest
0 голосов
/ 11 мая 2018

Я реализовал ниже функцию записи прошивки на периферийное устройство.Когда я отлаживаю код с точками останова, он успешно обновляет микропрограмму, но когда я удаляю точки останова или не отлаживаю, он не возвращает ответ и возвращает неверное обновление файла.

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

Я пытался вызвать эту функцию в главном потоке, но все еще не удалось.

Любой, пожалуйста, руководство.

Заранее спасибо.

...