From faf4e377d759f8a7371046643f52e474fd848669 Mon Sep 17 00:00:00 2001 From: chopster44 Date: Mon, 1 Dec 2025 18:33:48 +0000 Subject: [PATCH] trying a different way to confirm mtu size --- src/index.ts | 117 +++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8f112ad..f17aca6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,7 @@ export default class Updater { public file: Int8Array; private _fileSize: number; private _fileProgress: number = 0; - + private _packetSize: number; constructor(archiveURL: string = "/", feedType: string = "atom", bleObject?: BLECentralPlugin.BLECentralPluginStatic, packetSize: number = 512) { @@ -208,7 +208,7 @@ export default class Updater { } private async sendNextPacket(): Promise { - let packet = this.file.slice(this._fileProgress, this._fileProgress+this._packetSize); + let packet = this.file.slice(this._fileProgress, this._fileProgress + this._packetSize); this._fileProgress += this._packetSize; return new Promise((resolve, reject) => { this.bleObject.writeWithoutResponse(this.bleDeviceId, this._updaterServiceUUID, this._updateFileCharacteristicUUID, packet.buffer, @@ -241,62 +241,67 @@ export default class Updater { // write file length return new Promise(async (resolve, reject) => { // set mtu - this._packetSize = await this.bleObject.withPromises.requestMtu(this.bleDeviceId, this._packetSize); - // start notify - this.bleObject.startNotification(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, - (rawData: ArrayBuffer): void => { - let dataView = new Uint8Array(rawData); - console.log(dataView); - if (dataView[0] == 1) { - // send file - this.sendNextPacket(); - progressCallback(`MTU: ${this._packetSize}; Sending (${Math.floor((this._fileProgress *100)/this._fileSize)}%), ${this._fileProgress} / ${this._fileSize}`); - } else if (dataView[0] == 2) { - // done logic - console.log(`progress >= filesize: ${this._fileProgress} vs ${this._fileSize}`); - if (this._fileProgress >= this._fileSize) { - console.log("true"); - // send agree - this.sendEndCmd(true); - progressCallback(`Complete!`); - this.bleObject.stopNotification(this.bleDeviceId, - this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, - () => { - // success - resolve(true); - }, - (error) => { - reject("Error: Failed to stop notify"); - } - ); - } else { - console.log("False"); - // send disagree - this.sendEndCmd(false); - progressCallback(`Error, starting over: ${this._fileProgress} / ${this._fileSize}`); - this._fileProgress = 0; + this.bleObject.requestMtu(this.bleDeviceId, this._packetSize, (mtu: number) => { + this._packetSize = mtu; + this.bleObject.startNotification(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, + (rawData: ArrayBuffer): void => { + let dataView = new Uint8Array(rawData); + console.log(dataView); + if (dataView[0] == 1) { + // send file + this.sendNextPacket(); + progressCallback(`MTU: ${this._packetSize}; Sending (${Math.floor((this._fileProgress * 100) / this._fileSize)}%), ${this._fileProgress} / ${this._fileSize}`); + } else if (dataView[0] == 2) { + // done logic + console.log(`progress >= filesize: ${this._fileProgress} vs ${this._fileSize}`); + if (this._fileProgress >= this._fileSize) { + console.log("true"); + // send agree + this.sendEndCmd(true); + progressCallback(`Complete!`); + this.bleObject.stopNotification(this.bleDeviceId, + this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, + () => { + // success + resolve(true); + }, + (error) => { + reject("Error: Failed to stop notify"); + } + ); + } else { + console.log("False"); + // send disagree + this.sendEndCmd(false); + progressCallback(`Error, starting over: ${this._fileProgress} / ${this._fileSize}`); + this._fileProgress = 0; + } + } else if (dataView[0] == 15) { + // error cmd + progressCallback(`Error on remote: ${this._fileProgress} / ${this._fileSize}`); + reject("Error on remote"); + } else if (dataView[0] == 0) { + // ignore no command + progressCallback(`Board is on`); } - } else if (dataView[0] == 15) { - // error cmd - progressCallback(`Error on remote: ${this._fileProgress} / ${this._fileSize}`); - reject("Error on remote"); - } else if (dataView[0] == 0) { - // ignore no command - progressCallback(`Board is on`); - } - else { - // no command - progressCallback(`Error on remote`); - reject("Error: command does not exist"); + else { + // no command + progressCallback(`Error on remote`); + reject("Error: command does not exist"); + } + }, (error) => { + reject("Error: Failed to start notify"); + console.error(error); } - }, (error) => { reject("Error: Failed to start notify"); - console.error(error); - } - ); - const buffer = new ArrayBuffer(4) - let view = new Int32Array(buffer); - view[0] = this._fileSize; - this.bleObject.withPromises.write(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, buffer); + ); + const buffer = new ArrayBuffer(4) + let view = new Int32Array(buffer); + view[0] = this._fileSize; + this.bleObject.withPromises.write(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, buffer); + }); + + // start notify + }); } }