2021-04-18 17:46:46 +00:00
|
|
|
const connectButton = document.getElementById("connectButton");
|
|
|
|
const disconnectButton = document.getElementById("disconnectButton");
|
2021-05-30 14:47:40 +00:00
|
|
|
const resetButton = document.getElementById("resetButton");
|
|
|
|
const consoleStartButton = document.getElementById("consoleStartButton");
|
|
|
|
const consoleStopButton = document.getElementById("consoleStopButton");
|
|
|
|
const eraseButton = document.getElementById("eraseButton");
|
|
|
|
const programButton = document.getElementById("programButton");
|
|
|
|
const filesDiv = document.getElementById("files");
|
2021-04-18 17:46:46 +00:00
|
|
|
const terminal = document.getElementById("terminal");
|
2021-05-30 14:47:40 +00:00
|
|
|
const programDiv = document.getElementById("program");
|
|
|
|
const consoleDiv = document.getElementById("console");
|
|
|
|
|
2021-04-18 17:46:46 +00:00
|
|
|
|
|
|
|
//import { Transport } from './cp210x-webusb.js'
|
|
|
|
import { Transport } from './webserial.js'
|
|
|
|
import { ESPLoader } from './ESPLoader.js'
|
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
let term = new Terminal({cols:120, rows:40});
|
2021-04-18 17:46:46 +00:00
|
|
|
term.open(terminal);
|
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
let device = null;
|
|
|
|
let transport;
|
2021-04-18 17:46:46 +00:00
|
|
|
let chip;
|
2021-05-03 04:00:25 +00:00
|
|
|
let esploader;
|
2021-05-30 14:47:40 +00:00
|
|
|
let file1 = null, file2 = null, file3 = null;
|
|
|
|
let connected = false;
|
|
|
|
|
|
|
|
disconnectButton.style.display = "none";
|
|
|
|
consoleStopButton.style.display = "none";
|
|
|
|
filesDiv.style.display = "none";
|
|
|
|
|
|
|
|
|
|
|
|
function convertUint8ArrayToBinaryString(u8Array) {
|
|
|
|
var i, len = u8Array.length, b_str = "";
|
|
|
|
for (i=0; i<len; i++) {
|
|
|
|
b_str += String.fromCharCode(u8Array[i]);
|
|
|
|
}
|
|
|
|
return b_str;
|
|
|
|
}
|
|
|
|
|
|
|
|
function convertBinaryStringToUint8Array(bStr) {
|
|
|
|
var i, len = bStr.length, u8_array = new Uint8Array(len);
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
|
u8_array[i] = bStr.charCodeAt(i);
|
|
|
|
}
|
|
|
|
return u8_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleFileSelect1(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;
|
2021-04-18 17:46:46 +00:00
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
};
|
|
|
|
})(file);
|
|
|
|
|
|
|
|
reader.readAsBinaryString(file);
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleFileSelect2(evt) {
|
2021-05-03 04:00:25 +00:00
|
|
|
var file = evt.target.files[0];
|
|
|
|
console.log(file);
|
|
|
|
var reader = new FileReader();
|
|
|
|
|
|
|
|
reader.onload = (function(theFile) {
|
|
|
|
return function(e) {
|
2021-05-30 14:47:40 +00:00
|
|
|
file2 = e.target.result;
|
2021-05-03 04:00:25 +00:00
|
|
|
};
|
|
|
|
})(file);
|
|
|
|
|
|
|
|
reader.readAsBinaryString(file);
|
|
|
|
}
|
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
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);
|
2021-04-18 17:46:46 +00:00
|
|
|
function _sleep(ms) {
|
|
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
|
|
}
|
|
|
|
|
|
|
|
connectButton.onclick = async () => {
|
|
|
|
// device = await navigator.usb.requestDevice({
|
|
|
|
// filters: [{ vendorId: 0x10c4 }]
|
|
|
|
// });
|
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
if (device === null) {
|
|
|
|
device = await navigator.serial.requestPort({
|
|
|
|
filters: [{ usbVendorId: 0x10c4 }]
|
|
|
|
});
|
|
|
|
transport = new Transport(device);
|
|
|
|
}
|
2021-04-18 17:46:46 +00:00
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
try {
|
2021-05-03 04:00:25 +00:00
|
|
|
esploader = new ESPLoader(transport, term);
|
2021-05-30 14:47:40 +00:00
|
|
|
connected = true;
|
2021-04-18 17:46:46 +00:00
|
|
|
|
|
|
|
await esploader.main_fn();
|
|
|
|
|
2021-05-30 14:47:40 +00:00
|
|
|
console.log("Flash ID 1");
|
2021-05-03 04:00:25 +00:00
|
|
|
await esploader.flash_id();
|
2021-05-30 14:47:40 +00:00
|
|
|
} catch(e) {
|
|
|
|
console.log(e);
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("Settings done");
|
2021-04-18 17:46:46 +00:00
|
|
|
connectButton.style.display = "none";
|
|
|
|
disconnectButton.style.display = "initial";
|
2021-05-30 14:47:40 +00:00
|
|
|
filesDiv.style.display = "initial";
|
|
|
|
consoleDiv.style.display = "none";
|
|
|
|
}
|
|
|
|
|
|
|
|
resetButton.onclick = async () => {
|
|
|
|
if (device === null) {
|
|
|
|
device = await navigator.serial.requestPort({
|
|
|
|
filters: [{ usbVendorId: 0x10c4 }]
|
|
|
|
});
|
|
|
|
transport = new Transport(device);
|
|
|
|
}
|
|
|
|
|
|
|
|
await transport.setDTR(false);
|
|
|
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
|
|
await transport.setDTR(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
eraseButton.onclick = async () => {
|
|
|
|
eraseButton.disabled = true;
|
|
|
|
console.log("Erase Flash");
|
|
|
|
await esploader.erase_flash();
|
|
|
|
eraseButton.disabled = false;
|
|
|
|
}
|
2021-04-18 17:46:46 +00:00
|
|
|
|
|
|
|
disconnectButton.onclick = async () => {
|
2021-05-30 14:47:40 +00:00
|
|
|
await transport.disconnect();
|
2021-04-18 17:46:46 +00:00
|
|
|
term.clear();
|
2021-05-30 14:47:40 +00:00
|
|
|
connected = false;
|
2021-04-18 17:46:46 +00:00
|
|
|
connectButton.style.display = "initial";
|
|
|
|
disconnectButton.style.display = "none";
|
2021-05-30 14:47:40 +00:00
|
|
|
filesDiv.style.display = "none";
|
|
|
|
consoleDiv.style.display = "initial";
|
2021-04-18 17:46:46 +00:00
|
|
|
};
|
2021-05-30 14:47:40 +00:00
|
|
|
|
|
|
|
consoleStartButton.onclick = async () => {
|
|
|
|
if (device === null) {
|
|
|
|
device = await navigator.serial.requestPort({
|
|
|
|
filters: [{ usbVendorId: 0x10c4 }]
|
|
|
|
});
|
|
|
|
transport = new Transport(device);
|
|
|
|
}
|
|
|
|
|
|
|
|
consoleStartButton.style.display = "none";
|
|
|
|
consoleStopButton.style.display = "initial";
|
|
|
|
programDiv.style.display = "none";
|
|
|
|
|
|
|
|
await transport.connect();
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
let val = await transport.rawRead();
|
|
|
|
if (typeof val !== 'undefined') {
|
|
|
|
term.write(val);
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log("quitting console");
|
|
|
|
}
|
|
|
|
|
|
|
|
consoleStopButton.onclick = async () => {
|
|
|
|
await transport.disconnect();
|
|
|
|
term.clear();
|
|
|
|
consoleStartButton.style.display = "initial";
|
|
|
|
consoleStopButton.style.display = "none";
|
|
|
|
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});
|
|
|
|
}
|
|
|
|
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'});
|
|
|
|
}
|