mirror of
https://github.com/thegecko/web-bluetooth-dfu.git
synced 2025-12-13 04:28:13 +08:00
Make message sequence of DFU process more readable.
This commit is contained in:
33
dist/dfu.js
vendored
33
dist/dfu.js
vendored
@@ -71,6 +71,20 @@
|
|||||||
softdevice: 0xFFFE,
|
softdevice: 0xFFFE,
|
||||||
crc: 0x0000
|
crc: 0x0000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var OPCODE = {
|
||||||
|
RESERVED: 0,
|
||||||
|
START_DFU: 1,
|
||||||
|
INITIALIZE_DFU_PARAMETERS: 2,
|
||||||
|
RECEIVE_FIRMWARE_IMAGE: 3,
|
||||||
|
VALIDATE_FIRMWARE: 4,
|
||||||
|
ACTIVATE_IMAGE_AND_RESET: 5,
|
||||||
|
RESET_SYSTEM: 6,
|
||||||
|
REPORT_RECEIVED_IMAGE_SIZE: 7,
|
||||||
|
PACKET_RECEIPT_NOTIFICATION_REQUEST: 8,
|
||||||
|
RESPONSE_CODE: 16,
|
||||||
|
PACKET_RECEIPT_NOTIFICATION: 17
|
||||||
|
};
|
||||||
|
|
||||||
var loggers = [];
|
var loggers = [];
|
||||||
function addLogger(loggerFn) {
|
function addLogger(loggerFn) {
|
||||||
@@ -299,18 +313,19 @@
|
|||||||
function handleControl(event) {
|
function handleControl(event) {
|
||||||
var data = event.target.value;
|
var data = event.target.value;
|
||||||
var view = new DataView(data);
|
var view = new DataView(data);
|
||||||
|
|
||||||
var opCode = view.getUint8(0);
|
var opCode = view.getUint8(0);
|
||||||
|
var req_opcode = view.getUint8(1);
|
||||||
|
var resp_code = view.getUint8(2);
|
||||||
|
|
||||||
if (opCode === 16) { // response
|
if (opCode === 16) { // Response Code.
|
||||||
var resp_code = view.getUint8(2);
|
|
||||||
if (resp_code !== 1) {
|
if (resp_code !== 1) {
|
||||||
var error = "error from control: " + resp_code;
|
var error = "error from control: " + resp_code;
|
||||||
log(error);
|
log(error);
|
||||||
return reject(error);
|
return reject(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
var req_opcode = view.getUint8(1);
|
if (req_opcode === OPCODE.START_DFU && majorVersion > 6) {
|
||||||
if (req_opcode === 1 && majorVersion > 6) {
|
|
||||||
log('write init packet');
|
log('write init packet');
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([2,0]))
|
controlChar.writeValue(new Uint8Array([2,0]))
|
||||||
@@ -326,7 +341,7 @@
|
|||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if (req_opcode === 1 || req_opcode === 2) {
|
} else if (req_opcode === OPCODE.START_DFU || req_opcode === OPCODE.INITIALIZE_DFU_PARAMETERS) {
|
||||||
log('complete, send packet count');
|
log('complete, send packet count');
|
||||||
|
|
||||||
var buffer = new ArrayBuffer(3);
|
var buffer = new ArrayBuffer(3);
|
||||||
@@ -349,7 +364,7 @@
|
|||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if (req_opcode === 3) {
|
} else if (req_opcode === OPCODE.RECEIVE_FIRMWARE_IMAGE) {
|
||||||
log('complete, check length');
|
log('complete, check length');
|
||||||
|
|
||||||
controlChar.writeValue(new Uint8Array([7]))
|
controlChar.writeValue(new Uint8Array([7]))
|
||||||
@@ -359,7 +374,7 @@
|
|||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if (req_opcode === 7) {
|
} else if (req_opcode === OPCODE.REPORT_RECEIVED_IMAGE_SIZE) {
|
||||||
var byteCount = view.getUint32(3, LITTLE_ENDIAN);
|
var byteCount = view.getUint32(3, LITTLE_ENDIAN);
|
||||||
log('length: ' + byteCount);
|
log('length: ' + byteCount);
|
||||||
log('complete, validate...');
|
log('complete, validate...');
|
||||||
@@ -371,7 +386,7 @@
|
|||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
} else if (req_opcode === 4) {
|
} else if (req_opcode === OPCODE.VALIDATE_FIRMWARE) {
|
||||||
log('complete, reset...');
|
log('complete, reset...');
|
||||||
/*
|
/*
|
||||||
// Disconnect event currently not implemented
|
// Disconnect event currently not implemented
|
||||||
@@ -394,7 +409,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (opCode === 17) {
|
} else if (opCode === OPCODE.PACKET_RECEIPT_NOTIFICATION) { // Packet Receipt Notification.
|
||||||
var bytes = view.getUint32(1, LITTLE_ENDIAN);
|
var bytes = view.getUint32(1, LITTLE_ENDIAN);
|
||||||
log('transferred: ' + bytes);
|
log('transferred: ' + bytes);
|
||||||
writePacket(packetChar, arrayBuffer, 0);
|
writePacket(packetChar, arrayBuffer, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user