mirror of
https://github.com/thegecko/web-bluetooth-dfu.git
synced 2025-12-12 20:18:13 +08:00
Use switch statement for DFU OTA message sequence instead of if else.
This commit is contained in:
161
dist/dfu.js
vendored
161
dist/dfu.js
vendored
@@ -321,86 +321,95 @@
|
|||||||
log(err);
|
log(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(req_opcode) {
|
||||||
|
case OPCODE.START_DFU:
|
||||||
|
log('write init packet');
|
||||||
|
|
||||||
|
if(majorVersion >= 6) { // init packet is not used in SDK v6 (so not used in mbed).
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
controlChar.writeValue(new Uint8Array([2,0]))
|
||||||
|
.then(() => {
|
||||||
|
return packetChar.writeValue(generateInitPacket());
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
return controlChar.writeValue(new Uint8Array([2,1]));
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
error = "error writing init: " + error;
|
||||||
|
log(error);
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case OPCODE.INITIALIZE_DFU_PARAMETERS:
|
||||||
|
log('send packet count');
|
||||||
|
|
||||||
if (req_opcode === OPCODE.START_DFU && majorVersion > 6) {
|
var buffer = new ArrayBuffer(3);
|
||||||
log('write init packet');
|
view = new DataView(buffer);
|
||||||
|
view.setUint8(0, 8);
|
||||||
|
view.setUint16(1, interval, LITTLE_ENDIAN);
|
||||||
|
|
||||||
|
controlChar.writeValue(view)
|
||||||
|
.then(() => {
|
||||||
|
log("sent packet count: " + interval);
|
||||||
|
return controlChar.writeValue(new Uint8Array([3]));
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
log("sent receive");
|
||||||
|
return writePacket(packetChar, arrayBuffer, 0);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
error = "error sending packet count: " + error;
|
||||||
|
log(error);
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case OPCODE.RECEIVE_FIRMWARE_IMAGE:
|
||||||
|
log('check length');
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([2,0]))
|
controlChar.writeValue(new Uint8Array([7]))
|
||||||
.then(() => {
|
.catch(error => {
|
||||||
return packetChar.writeValue(generateInitPacket());
|
error = "error checking length: " + error;
|
||||||
})
|
log(error);
|
||||||
.then(() => {
|
reject(error);
|
||||||
return controlChar.writeValue(new Uint8Array([2,1]));
|
});
|
||||||
})
|
break;
|
||||||
.catch(error => {
|
case OPCODE.REPORT_RECEIVED_IMAGE_SIZE:
|
||||||
error = "error writing init: " + error;
|
var byteCount = view.getUint32(3, LITTLE_ENDIAN);
|
||||||
log(error);
|
log('length: ' + byteCount);
|
||||||
reject(error);
|
log('validate...');
|
||||||
});
|
|
||||||
|
controlChar.writeValue(new Uint8Array([4]))
|
||||||
} else if (req_opcode === OPCODE.START_DFU || req_opcode === OPCODE.INITIALIZE_DFU_PARAMETERS) {
|
.catch(error => {
|
||||||
log('complete, send packet count');
|
error = "error validating: " + error;
|
||||||
|
log(error);
|
||||||
var buffer = new ArrayBuffer(3);
|
reject(error);
|
||||||
view = new DataView(buffer);
|
});
|
||||||
view.setUint8(0, 8);
|
break;
|
||||||
view.setUint16(1, interval, LITTLE_ENDIAN);
|
case OPCODE.VALIDATE_FIRMWARE:
|
||||||
|
log('complete, reset...');
|
||||||
controlChar.writeValue(view)
|
|
||||||
.then(() => {
|
|
||||||
log("sent packet count: " + interval);
|
|
||||||
return controlChar.writeValue(new Uint8Array([3]));
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
log("sent receive");
|
|
||||||
return writePacket(packetChar, arrayBuffer, 0);
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
error = "error sending packet count: " + error;
|
|
||||||
log(error);
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (req_opcode === OPCODE.RECEIVE_FIRMWARE_IMAGE) {
|
|
||||||
log('complete, check length');
|
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([7]))
|
|
||||||
.catch(error => {
|
|
||||||
error = "error checking length: " + error;
|
|
||||||
log(error);
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (req_opcode === OPCODE.REPORT_RECEIVED_IMAGE_SIZE) {
|
|
||||||
var byteCount = view.getUint32(3, LITTLE_ENDIAN);
|
|
||||||
log('length: ' + byteCount);
|
|
||||||
log('complete, validate...');
|
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([4]))
|
|
||||||
.catch(error => {
|
|
||||||
error = "error validating: " + error;
|
|
||||||
log(error);
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (req_opcode === OPCODE.VALIDATE_FIRMWARE) {
|
|
||||||
log('complete, reset...');
|
|
||||||
/*
|
/*
|
||||||
// Disconnect event currently not implemented
|
// Disconnect event currently not implemented
|
||||||
controlChar.service.device.addEventListener("gattserverdisconnected", () => {
|
controlChar.service.device.addEventListener("gattserverdisconnected", () => {
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
controlChar.writeValue(new Uint8Array([5]))
|
controlChar.writeValue(new Uint8Array([5]))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
log('image activated and dfu target reset');
|
log('image activated and dfu target reset');
|
||||||
resolve(); // TODO: Resolve in disconnect event handler when implemented in Web Bluetooth API.
|
resolve(); // TODO: Resolve in disconnect event handler when implemented in Web Bluetooth API.
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
error = "error resetting: " + error;
|
error = "error resetting: " + error;
|
||||||
log(error);
|
log(error);
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
log('unexpected req opCode - ERROR');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (opCode === OPCODE.PACKET_RECEIPT_NOTIFICATION) {
|
} else if (opCode === OPCODE.PACKET_RECEIPT_NOTIFICATION) {
|
||||||
|
|||||||
Reference in New Issue
Block a user