mirror of
https://github.com/thegecko/web-bluetooth-dfu.git
synced 2025-12-13 04:28:13 +08:00
Use definitions for op codes to make message sequence state easy to follow.
This commit is contained in:
27
dist/dfu.js
vendored
27
dist/dfu.js
vendored
@@ -280,7 +280,7 @@
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
controlChar.addEventListener('characteristicvaluechanged', handleControl);
|
controlChar.addEventListener('characteristicvaluechanged', handleControl);
|
||||||
log("sending imagetype: " + imageType);
|
log("sending imagetype: " + imageType);
|
||||||
return controlChar.writeValue(new Uint8Array([1, imageType]));
|
return controlChar.writeValue(new Uint8Array([OPCODE.START_DFU, imageType]));
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
log("sent start");
|
log("sent start");
|
||||||
@@ -295,11 +295,10 @@
|
|||||||
view.setUint32(4, bootLength, LITTLE_ENDIAN);
|
view.setUint32(4, bootLength, LITTLE_ENDIAN);
|
||||||
view.setUint32(8, appLength, LITTLE_ENDIAN);
|
view.setUint32(8, appLength, LITTLE_ENDIAN);
|
||||||
|
|
||||||
// Set firmware length
|
|
||||||
return packetChar.writeValue(view);
|
return packetChar.writeValue(view);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
log("sent buffer size: " + arrayBuffer.byteLength);
|
log("sent image size: " + arrayBuffer.byteLength);
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
error = "start error: " + error;
|
error = "start error: " + error;
|
||||||
@@ -317,7 +316,7 @@
|
|||||||
|
|
||||||
if (opCode === OPCODE.RESPONSE_CODE) {
|
if (opCode === OPCODE.RESPONSE_CODE) {
|
||||||
if (resp_code !== 1) {
|
if (resp_code !== 1) {
|
||||||
var err = "error from control: " + resp_code;
|
var err = "error from control point notification, resp_code: " + resp_code;
|
||||||
log(err);
|
log(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
@@ -330,15 +329,15 @@
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([2,0]))
|
controlChar.writeValue(new Uint8Array([OPCODE.INITIALIZE_DFU_PARAMETERS, 0]))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return packetChar.writeValue(generateInitPacket());
|
return packetChar.writeValue(generateInitPacket());
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return controlChar.writeValue(new Uint8Array([2,1]));
|
return controlChar.writeValue(new Uint8Array([OPCODE.INITIALIZE_DFU_PARAMETERS, 1]));
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
error = "error writing init: " + error;
|
error = "error writing dfu init parameters: " + error;
|
||||||
log(error);
|
log(error);
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
@@ -348,13 +347,13 @@
|
|||||||
|
|
||||||
var buffer = new ArrayBuffer(3);
|
var buffer = new ArrayBuffer(3);
|
||||||
view = new DataView(buffer);
|
view = new DataView(buffer);
|
||||||
view.setUint8(0, 8);
|
view.setUint8(0, OPCODE.PACKET_RECEIPT_NOTIFICATION_REQUEST);
|
||||||
view.setUint16(1, interval, LITTLE_ENDIAN);
|
view.setUint16(1, interval, LITTLE_ENDIAN);
|
||||||
|
|
||||||
controlChar.writeValue(view)
|
controlChar.writeValue(view)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
log("sent packet count: " + interval);
|
log("sent packet count: " + interval);
|
||||||
return controlChar.writeValue(new Uint8Array([3]));
|
return controlChar.writeValue(new Uint8Array([OPCODE.RECEIVE_FIRMWARE_IMAGE]));
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
log("sent receive");
|
log("sent receive");
|
||||||
@@ -369,7 +368,7 @@
|
|||||||
case OPCODE.RECEIVE_FIRMWARE_IMAGE:
|
case OPCODE.RECEIVE_FIRMWARE_IMAGE:
|
||||||
log('check length');
|
log('check length');
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([7]))
|
controlChar.writeValue(new Uint8Array([OPCODE.REPORT_RECEIVED_IMAGE_SIZE]))
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
error = "error checking length: " + error;
|
error = "error checking length: " + error;
|
||||||
log(error);
|
log(error);
|
||||||
@@ -377,11 +376,11 @@
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case OPCODE.REPORT_RECEIVED_IMAGE_SIZE:
|
case OPCODE.REPORT_RECEIVED_IMAGE_SIZE:
|
||||||
var byteCount = view.getUint32(3, LITTLE_ENDIAN);
|
var bytesReceived = view.getUint32(3, LITTLE_ENDIAN);
|
||||||
log('length: ' + byteCount);
|
log('length: ' + bytesReceived);
|
||||||
log('validate...');
|
log('validate...');
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([4]))
|
controlChar.writeValue(new Uint8Array([OPCODE.VALIDATE_FIRMWARE]))
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
error = "error validating: " + error;
|
error = "error validating: " + error;
|
||||||
log(error);
|
log(error);
|
||||||
@@ -396,7 +395,7 @@
|
|||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
controlChar.writeValue(new Uint8Array([5]))
|
controlChar.writeValue(new Uint8Array([OPCODE.ACTIVATE_IMAGE_AND_RESET]))
|
||||||
.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.
|
||||||
|
|||||||
Reference in New Issue
Block a user