Я пытаюсь записать в характеристику 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 )
});
}
Может кто-нибудь помочь, предоставив рабочий пример того, как отправлять большие файлы пакета, потому что проблема может быть во время записи, функция стирает старое значение, может быть.
Спасибо