From 45f0af6a7fe0cebba62e5d5ca85aaab35e28e19c Mon Sep 17 00:00:00 2001 From: Adwait Patankar Date: Wed, 4 Aug 2021 19:45:21 +0530 Subject: [PATCH] Layout and UX changes. Added a few validations --- ESPLoader.js | 1 + assets/esp-logo.png | Bin 0 -> 18976 bytes index.html | 75 ++++++++++++------- index.js | 179 +++++++++++++++++++++++++++++++------------- 4 files changed, 174 insertions(+), 81 deletions(-) create mode 100644 assets/esp-logo.png diff --git a/ESPLoader.js b/ESPLoader.js index 12a2d22..ac2c341 100644 --- a/ESPLoader.js +++ b/ESPLoader.js @@ -1254,6 +1254,7 @@ class ESPLoader { await this.run_stub(); await this.change_baud(); + return chip; } diff --git a/assets/esp-logo.png b/assets/esp-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cb4387d26e8e4b1041a754741a841d924aa870 GIT binary patch literal 18976 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 LNkvXXu0mjf3?#kw literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 3118f90..3bd78d5 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@ ESP Tool + + + -

ESP Tool

-
+

ESP Tool

+

A Serial Flasher utility for Espressif chips

+
+
-

Program

- +

Program

+ + - - + + + + +

+ + +
-
- -
- - - -
- - - -
- - - -
- + + + + + + + + + + + + + + + +
Flash AddressSelected FileRemove
+ +
-

-

Console

- - - +

Console

+ + + + +
+
-
+ diff --git a/index.js b/index.js index a99aea5..6b8ebef 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,11 @@ const filesDiv = document.getElementById("files"); const terminal = document.getElementById("terminal"); const programDiv = document.getElementById("program"); const consoleDiv = document.getElementById("console"); - +const lblBaudrate = document.getElementById("lblBaudrate"); +const lblConnTo = document.getElementById("lblConnTo"); +const tableBody = document.getElementById("tableBody"); +const table = document.getElementById('fileTable'); +const alertDiv = document.getElementById('alertDiv'); //import { Transport } from './cp210x-webusb.js' import { Transport } from './webserial.js' @@ -21,12 +25,14 @@ term.open(terminal); let device = null; let transport; -let chip; +let chip = "deFault"; let esploader; -let file1 = null, file2 = null, file3 = null; +let file1 = null; let connected = false; +let index = 1; disconnectButton.style.display = "none"; +eraseButton.style.display = "none"; consoleStopButton.style.display = "none"; filesDiv.style.display = "none"; @@ -47,52 +53,23 @@ function convertBinaryStringToUint8Array(bStr) { return u8_array; } -function handleFileSelect1(evt) { +function handleFileSelect(evt) { var file = evt.target.files[0]; - console.log(file); var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { file1 = e.target.result; - + evt.target.data = file1; }; })(file); reader.readAsBinaryString(file); } -function handleFileSelect2(evt) { - var file = evt.target.files[0]; - console.log(file); - var reader = new FileReader(); - reader.onload = (function(theFile) { - return function(e) { - file2 = e.target.result; - }; - })(file); +document.getElementById('selectFile1').addEventListener('change', handleFileSelect, false); - reader.readAsBinaryString(file); -} - -function handleFileSelect3(evt) { - var file = evt.target.files[0]; - console.log(file); - var reader = new FileReader(); - - reader.onload = (function(theFile) { - return function(e) { - file3 = e.target.result; - }; - })(file); - - reader.readAsBinaryString(file); -} - -document.getElementById('selectFile1').addEventListener('change', handleFileSelect1, false); -document.getElementById('selectFile2').addEventListener('change', handleFileSelect2, false); -document.getElementById('selectFile3').addEventListener('change', handleFileSelect3, false); function _sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } @@ -113,15 +90,20 @@ connectButton.onclick = async () => { esploader = new ESPLoader(transport, baudrates.value, term); connected = true; - await esploader.main_fn(); + chip = await esploader.main_fn(); + await esploader.flash_id(); } catch(e) { } - console.log("Settings done"); + console.log("Settings done for :" + chip); + lblBaudrate.style.display = "none"; + lblConnTo.innerHTML = "Connected to device: " + chip; + lblConnTo.style.display = "block"; baudrates.style.display = "none"; connectButton.style.display = "none"; disconnectButton.style.display = "initial"; + eraseButton.style.display = "initial"; filesDiv.style.display = "initial"; consoleDiv.style.display = "none"; } @@ -141,11 +123,57 @@ resetButton.onclick = async () => { eraseButton.onclick = async () => { eraseButton.disabled = true; - console.log("Erase Flash"); await esploader.erase_flash(); eraseButton.disabled = false; } +addFile.onclick = async () => { + var rowCount = table.rows.length; + var row = table.insertRow(rowCount); + + //Column 1 - Offset + var cell1 = row.insertCell(0); + var element1 = document.createElement("input"); + element1.type = "text"; + element1.id = "offset" + rowCount; + element1.setAttribute('value', '0x8000'); + cell1.appendChild(element1); + + // Column 2 - File selector + var cell2 = row.insertCell(1); + var element2 = document.createElement("input"); + element2.type = "file"; + element2.id = "selectFile" + rowCount; + element2.name = "selected_File" + rowCount; + element2.addEventListener('change', handleFileSelect, false); + cell2.appendChild(element2); + + // Column 3 - Remove File + var cell3 = row.insertCell(2); + var element3 = document.createElement("input"); + element3.type = "button"; + var btnName = "button" + rowCount; + element3.name = btnName; + element3.setAttribute('class', "btn"); + element3.setAttribute('value', 'Remove'); // or element1.value = "button"; + element3.onclick = function() { + removeRow(btnName); + } + cell3.appendChild(element3); +} + +function removeRow(btnName) { + var rowCount = table.rows.length; + for (var i = 0; i < rowCount; i++) { + var row = table.rows[i]; + var rowObj = row.cells[2].childNodes[0]; + if (rowObj.name == btnName) { + table.deleteRow(i); + rowCount--; + } + } +} + disconnectButton.onclick = async () => { await transport.disconnect(); term.clear(); @@ -153,7 +181,10 @@ disconnectButton.onclick = async () => { baudrates.style.display = "initial"; connectButton.style.display = "initial"; disconnectButton.style.display = "none"; + eraseButton.style.display = "none"; + lblConnTo.style.display = "none"; filesDiv.style.display = "none"; + alertDiv.style.display = "none"; consoleDiv.style.display = "initial"; }; @@ -164,7 +195,7 @@ consoleStartButton.onclick = async () => { }); transport = new Transport(device); } - + lblConsoleFor.style.display = "block"; consoleStartButton.style.display = "none"; consoleStopButton.style.display = "initial"; programDiv.style.display = "none"; @@ -190,19 +221,61 @@ consoleStopButton.onclick = async () => { programDiv.style.display = "initial"; } -programButton.onclick = async () => { - let fileArr = []; - if (file1 != null) { - let offset1 = parseInt(document.getElementById("offset1").value); - fileArr.push({data:file1, address:offset1}); +function validate_program_inputs() { + let offsetArr = [] + var rowCount = table.rows.length; + var row; + let offset = 0; + let fileData = null; + + // check for mandatory fields + for (let index = 1; index < rowCount; index ++) { + row = table.rows[index]; + + //offset fields checks + var offSetObj = row.cells[0].childNodes[0]; + offset = parseInt(offSetObj.value); + + // Non-numeric or blank offset + if (Number.isNaN(offset)) + return "Offset field in row " + index + " is not a valid address!" + // Repeated offset used + else if (offsetArr.includes(offset)) + return "Offset field in row " + index + " is already in use!"; + else + offsetArr.push(offset); + + var fileObj = row.cells[1].childNodes[0]; + fileData = fileObj.data; + if (fileData == null) + return "No file selected for row: " + index + "!"; + } - if (file2 != null) { - let offset2 = parseInt(document.getElementById("offset2").value); - fileArr.push({data:file2, address:offset2}); - } - if (file3 != null) { - let offset3 = parseInt(document.getElementById("offset3").value); - fileArr.push({data:file3, address:offset3}); - } - await esploader.write_flash({fileArray: fileArr, flash_size: 'keep'}); + return "success" +} + +programButton.onclick = async () => { + var err = validate_program_inputs(); + if (err != "success") { + const alertMsg = document.getElementById("alertmsg"); + alertMsg.innerHTML = "" + err + ""; + alertDiv.style.display = "block"; + return; + } + + let fileArr = []; + let offset = 0x1000; + var rowCount = table.rows.length; + var row; + for (let index = 1; index < rowCount; index ++) { + row = table.rows[index]; + var offSetObj = row.cells[0].childNodes[0]; + offset = parseInt(offSetObj.value); + + var fileObj = row.cells[1].childNodes[0]; + + fileArr.push({data:fileObj.data, address:offset}); + } + esploader.write_flash({fileArray: fileArr, flash_size: 'keep'}); + }