Files
web-bluetooth-dfu/example_web.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>