Files
RNode_Flasher/index.html
2024-07-14 19:10:40 +12:00

148 lines
4.2 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RNode Flasher</title>
<script src="./rnode.js"></script>
<script src="./nrf52_dfu_flasher.js"></script>
<script src="./zip.min.js"></script>
<!-- tailwind css -->
<script src="https://cdn.tailwindcss.com?plugins=forms"></script>
<!-- vue js -->
<script src="https://unpkg.com/vue@3"></script>
</head>
<body>
<div id="app" class="space-y-1">
<div>
<button @click="enterDfuMode" class="border px-2 bg-gray-100 hover:bg-gray-200 rounded">
Enter DFU Mode
</button>
</div>
<div>
<input ref="file" type="file"/>
<button @click="flash" class="border px-2 bg-gray-100 hover:bg-gray-200 rounded">
Flash
</button>
</div>
<div>
<button @click="detect" class="border px-2 bg-gray-100 hover:bg-gray-200 rounded">
Detect
</button>
</div>
</div>
<script>
Vue.createApp({
data() {
return {
};
},
mounted() {
},
methods: {
async askForSerialPort() {
if(!navigator.serial){
alert("Web Serial is not supported in this browser");
return null;
}
// ask user to select device
return await navigator.serial.requestPort({
filters: [],
});
},
async enterDfuMode() {
// ask for serial port
const serialPort = await this.askForSerialPort();
if(!serialPort){
return;
}
// enter dfu mode
const flasher = new Nrf52DfuFlasher(serialPort);
await flasher.enterDfuMode();
},
async flash() {
// ensure firmware file selected
const file = this.$refs["file"].files[0];
if(!file){
alert("Select a firmware file first");
return;
}
// ask for serial port
const serialPort = await this.askForSerialPort();
if(!serialPort){
return;
}
// flash file
const flasher = new Nrf52DfuFlasher(serialPort);
await flasher.flash(file);
},
async detect() {
// ask for serial port
const serialPort = await this.askForSerialPort();
if(!serialPort){
return;
}
// check if device is an rnode
const rnode = await RNode.fromSerialPort(serialPort);
const isRNode = await rnode.detect();
if(!isRNode){
alert("Selected device is not an RNode!");
return;
}
const firmwareVersion = await rnode.getFirmwareVersion();
alert("RNode has firmware v" + firmwareVersion);
console.log({
firmware_version: await rnode.getFirmwareVersion(),
platform: await rnode.getPlatform(),
mcu: await rnode.getMcu(),
board: await rnode.getBoard(),
device_hash: await rnode.getDeviceHash(),
firmware_hash_target: await rnode.getTargetFirmwareHash(),
firmware_hash: await rnode.getFirmwareHash(),
// rom: await rnode.getRom(),
frequency: await rnode.getFrequency(),
bandwidth: await rnode.getBandwidth(),
tx_power: await rnode.getTxPower(),
spreading_factor: await rnode.getSpreadingFactor(),
coding_rate: await rnode.getCodingRate(),
radio_state: await rnode.getRadioState(),
rx_stat: await rnode.getRxStat(),
tx_stat: await rnode.getTxStat(),
rssi_stat: await rnode.getRssiStat(),
});
await rnode.close();
},
},
}).mount('#app');
</script>
</body>
</html>