trying a different way to confirm mtu size

This commit is contained in:
2025-12-01 18:33:48 +00:00
parent ed4890818f
commit faf4e377d7

View File

@@ -23,7 +23,7 @@ export default class Updater {
public file: Int8Array; public file: Int8Array;
private _fileSize: number; private _fileSize: number;
private _fileProgress: number = 0; private _fileProgress: number = 0;
private _packetSize: number; private _packetSize: number;
constructor(archiveURL: string = "/", feedType: string = "atom", bleObject?: BLECentralPlugin.BLECentralPluginStatic, packetSize: number = 512) { constructor(archiveURL: string = "/", feedType: string = "atom", bleObject?: BLECentralPlugin.BLECentralPluginStatic, packetSize: number = 512) {
@@ -208,7 +208,7 @@ export default class Updater {
} }
private async sendNextPacket(): Promise<boolean> { private async sendNextPacket(): Promise<boolean> {
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; this._fileProgress += this._packetSize;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.bleObject.writeWithoutResponse(this.bleDeviceId, this._updaterServiceUUID, this._updateFileCharacteristicUUID, packet.buffer, this.bleObject.writeWithoutResponse(this.bleDeviceId, this._updaterServiceUUID, this._updateFileCharacteristicUUID, packet.buffer,
@@ -241,62 +241,67 @@ export default class Updater {
// write file length // write file length
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
// set mtu // set mtu
this._packetSize = await this.bleObject.withPromises.requestMtu(this.bleDeviceId, this._packetSize); this.bleObject.requestMtu(this.bleDeviceId, this._packetSize, (mtu: number) => {
// start notify this._packetSize = mtu;
this.bleObject.startNotification(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, this.bleObject.startNotification(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID,
(rawData: ArrayBuffer): void => { (rawData: ArrayBuffer): void => {
let dataView = new Uint8Array(rawData); let dataView = new Uint8Array(rawData);
console.log(dataView); console.log(dataView);
if (dataView[0] == 1) { if (dataView[0] == 1) {
// send file // send file
this.sendNextPacket(); this.sendNextPacket();
progressCallback(`MTU: ${this._packetSize}; Sending (${Math.floor((this._fileProgress *100)/this._fileSize)}%), ${this._fileProgress} / ${this._fileSize}`); progressCallback(`MTU: ${this._packetSize}; Sending (${Math.floor((this._fileProgress * 100) / this._fileSize)}%), ${this._fileProgress} / ${this._fileSize}`);
} else if (dataView[0] == 2) { } else if (dataView[0] == 2) {
// done logic // done logic
console.log(`progress >= filesize: ${this._fileProgress} vs ${this._fileSize}`); console.log(`progress >= filesize: ${this._fileProgress} vs ${this._fileSize}`);
if (this._fileProgress >= this._fileSize) { if (this._fileProgress >= this._fileSize) {
console.log("true"); console.log("true");
// send agree // send agree
this.sendEndCmd(true); this.sendEndCmd(true);
progressCallback(`Complete!`); progressCallback(`Complete!`);
this.bleObject.stopNotification(this.bleDeviceId, this.bleObject.stopNotification(this.bleDeviceId,
this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID,
() => { () => {
// success // success
resolve(true); resolve(true);
}, },
(error) => { (error) => {
reject("Error: Failed to stop notify"); reject("Error: Failed to stop notify");
} }
); );
} else { } else {
console.log("False"); console.log("False");
// send disagree // send disagree
this.sendEndCmd(false); this.sendEndCmd(false);
progressCallback(`Error, starting over: ${this._fileProgress} / ${this._fileSize}`); progressCallback(`Error, starting over: ${this._fileProgress} / ${this._fileSize}`);
this._fileProgress = 0; 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) { else {
// error cmd // no command
progressCallback(`Error on remote: ${this._fileProgress} / ${this._fileSize}`); progressCallback(`Error on remote`);
reject("Error on remote"); reject("Error: command does not exist");
} else if (dataView[0] == 0) { }
// ignore no command }, (error) => {
progressCallback(`Board is on`); reject("Error: Failed to start notify");
} console.error(error);
else {
// no command
progressCallback(`Error on remote`);
reject("Error: command does not exist");
} }
}, (error) => { reject("Error: Failed to start notify"); );
console.error(error); const buffer = new ArrayBuffer(4)
} let view = new Int32Array(buffer);
); view[0] = this._fileSize;
const buffer = new ArrayBuffer(4) this.bleObject.withPromises.write(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, buffer);
let view = new Int32Array(buffer); });
view[0] = this._fileSize;
this.bleObject.withPromises.write(this.bleDeviceId, this._updaterServiceUUID, this._updaterCommandCharacterisitcUUID, buffer); // start notify
}); });
} }
} }