Отправка больших файлов с использованием response-native-ble-plx - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь записать в характеристику c, которая отправляет двоичный файл в качестве значения, это значение большое, это 19215 байт, что не проблема, потому что я связал mtu с помощью:

           device.connect({ requestMTU: 260 }) 

Я разделил файл на 240 байт для каждого элемента и каждый раз кодировал элемент в base64, и я использую функцию writeCharacteristicWithResponseForDevice () для записи этого элемента,

проблема в том, что я успешно написал весь файл 19215 байт, используя al oop каждый раз для записи элемента, но пока я пытался прочитать характеристики c, я могу прочитать только последний записанный элемент

Пример:

           this.manager.writeCharacteristicWithResponseForDevice(device.id,"1111", "40E1ED56-EC4A-4DC6-A6BD-30377F186B77", base64.encode(element1)

           this.manager.writeCharacteristicWithResponseForDevice(device.id,"1111", "40E1ED56-EC4A-4DC6-A6BD-30377F186B77", base64.encode(element2)) 

           this.manager.writeCharacteristicWithResponseForDevice(device.id,"1111", "40E1ED56-EC4A-4DC6-A6BD-30377F186B77", base64.encode(element3))

когда я читаю характеристики c, используя

          device.readCharacteristicForService("1111", "40E1ED56-EC4A-4DC6-A6BD-30377F186B77")

, я получаю в качестве значения:

        console.log(base64.decode(characteristic.value) => element3

это должен быть element1 + element2 + element3

-

вот мой код для записи:

  WriteIncaracteristic() {

   // this.state.fileSize is calculated in another function
      const nbPackages = Math.floor(this.state.fileSize/240) + 1

      var fileArray = []

     for (let i = 0; i <= nbPackages; i++) {

      // this.state.fileContent is created in another function
      fileArray.push(this.state.fileContent.slice(0, 240))
      this.state.fileContent = this.Remove(this.state.fileContent, 0, 240)

     }

     for (let j = 0; j <= fileArray.length; j++) {

       if (fileArray[j]) {

       const device = this.state.myDevice

           this.manager.writeCharacteristicWithResponseForDevice(device.id,"1111","40E1ED56-EC4A-4DC6-A6BD-30377F186B77", base64.encode(fileArray[j]))

            .then((characteristic) => {
              console.log(base64.decode(characteristic.value));

              return 
            }) .catch((error) => {
              this.createTAlert("writing", error.message  )
            });
     }}

  }

вот функция чтения характеристик c:

     ReadCaracteristic() {

          const device = this.state.myDevice

          device.readCharacteristicForService("1111", "40E1ED56-EC4A-4DC6-A6BD-30377F186B77")
          .then((characteristic) => {

               console.log(base64.decode(characteristic.value));
               console.log(characteristic );

            return 
           }) .catch((error) => {
               // Handle errors
               this.createTAlert("Reading", error.message  )
           });

}

Может кто-нибудь помочь, предоставив рабочий пример того, как отправлять большие файлы пакета, потому что проблема может быть во время записи, функция стирает старое значение, может быть.

Спасибо

...