Large file sending by using react-native-ble-plx

生来就可爱ヽ(ⅴ<●) 提交于 2020-05-17 06:23:11

问题


I'm trying to write in a characteristic that sends a binary file as the value, this value is large, it's 19215 bytes which is not a problem because i negociated the mtu using :

           device.connect({ requestMTU: 260 }) 

i've divided the file into 240 bytes for each element and each time encode the element to base64 and i use the function writeCharacteristicWithResponseForDevice() in order to write that element,

the issue is i successfully wrote the whole file 19215 bytes using a loop to write each time an element, but while i tried to read the characteristic i can only read the last written element

Example:

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

when i read the Characteristic using

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

i get as a value :

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

it should be element1+ element2 + element3

-

here is my code for writing :

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

  }

here is the function to read characteristic:

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

}

Can anybody help please by providing a working example in how to send large package files, because the problem can be while writing, the function erases the older value maybe.

Thanks

来源:https://stackoverflow.com/questions/61386613/large-file-sending-by-using-react-native-ble-plx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!