mirror of
https://github.com/thegecko/web-bluetooth-dfu.git
synced 2025-12-12 12:08:13 +08:00
Minor problems like writeMode bug in mbed and CRC code is just 0x0 for now so will fail for init packet check.
82 lines
2.6 KiB
HTML
82 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>web-bluetooth-dfu</title>
|
|
</head>
|
|
<body>
|
|
<button onclick="setMode()" style="font-size: 20px;">Set Mode</button>
|
|
<button onclick="findDFU()" style="font-size: 20px;">Transfer</button>
|
|
<button onclick="both()" style="font-size: 20px;">Both</button>
|
|
<div id="results"></div>
|
|
|
|
<script src="dist/dfu.js"></script>
|
|
<script src="dist/hex2bin.js"></script>
|
|
|
|
<script>
|
|
var urlMask = "//thegecko.github.io/web-bluetooth-dfu/firmware/NRF51822_{0}_Rob_OTA.hex";
|
|
var urlMask52 = "https://raw.githubusercontent.com/mjdietzx/web-bluetooth-dfu/develop/firmware/ble_app_hrs_with_dfu_nrf52.hex";
|
|
var resultsEl = document.getElementById("results");
|
|
|
|
function log(message) {
|
|
console.log(message);
|
|
resultsEl.innerText += message + "\n";
|
|
}
|
|
dfu.addLogger(log);
|
|
|
|
function download(url) {
|
|
return new Promise(function(resolve, reject) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.addEventListener("load", function() {
|
|
resolve(this.responseText);
|
|
});
|
|
xhr.open("GET", url);
|
|
xhr.send();
|
|
});
|
|
}
|
|
|
|
function transfer(device) {
|
|
return new Promise(function(resolve, reject) {
|
|
//var url = urlMask.replace("{0}", device.name === "Hi_Rob" ? "Bye" : "Hi");
|
|
var url = urlMask52; // nRF52832 application (example BLE heart rate from Nordic SDK) for DFU OTA update.
|
|
|
|
download(url)
|
|
.then(hex => {
|
|
var buffer = hex2bin(hex);
|
|
log("downloaded length: " + buffer.byteLength);
|
|
|
|
return dfu.provision(device, buffer);
|
|
})
|
|
.then(() => {
|
|
log('dfu complete');
|
|
resolve();
|
|
})
|
|
.catch(error => {
|
|
log(error);
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
function setMode() {
|
|
dfu.findDevice({ services: [0x180D] })
|
|
.then(device => dfu.writeMode(device))
|
|
.catch(log);
|
|
}
|
|
|
|
function findDFU() {
|
|
dfu.findDevice({ name: "DfuTarg" })
|
|
.then(device => transfer(device))
|
|
.catch(log);
|
|
}
|
|
|
|
function both() {
|
|
dfu.findDevice({ services: [0x180D] })
|
|
.then(device => dfu.writeMode(device))
|
|
.then(device => transfer(device))
|
|
.catch(log);
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|