mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-15 23:13:07 +01:00
add web install tools
This commit is contained in:
151
webinstall/install.js
Normal file
151
webinstall/install.js
Normal file
@@ -0,0 +1,151 @@
|
||||
import {XtermOutputHandler} from "./installUtil.js";
|
||||
import ESPInstaller from "./installUtil.js";
|
||||
(function(){
|
||||
let espLoaderTerminal;
|
||||
let espInstaller;
|
||||
let releaseData={};
|
||||
const addEl=ESPInstaller.addEl; //shorter typing
|
||||
let showConsole;
|
||||
let hideConsole;
|
||||
const enableConsole=(enable,disableBoth)=>{
|
||||
if (showConsole) showConsole.disabled=!enable || disableBoth;
|
||||
if (hideConsole) hideConsole.disabled=enable || disableBoth;
|
||||
}
|
||||
const showError=(txt)=>{
|
||||
let hFrame=document.querySelector('.heading');
|
||||
if (hFrame){
|
||||
hFrame.textContent=txt;
|
||||
hFrame.classList.add("error");
|
||||
}
|
||||
else{
|
||||
alert(txt);
|
||||
}
|
||||
}
|
||||
const buildHeading=(user,repo,element)=>{
|
||||
let hFrame=document.querySelector(element||'.heading');
|
||||
if (! hFrame) return;
|
||||
hFrame.textContent='';
|
||||
let h=addEl('h2',undefined,hFrame,`ESP32 Install ${user}:${repo}`)
|
||||
}
|
||||
const checkChip=(chipFamily,assetName)=>{
|
||||
//for now only ESP32
|
||||
if (chipFamily != "ESP32"){
|
||||
throw new Error(`unexpected chip family ${chipFamily}, expected ESP32`);
|
||||
}
|
||||
return assetName;
|
||||
}
|
||||
const baudRates=[1200,
|
||||
2400,
|
||||
4800,
|
||||
9600,
|
||||
14400,
|
||||
19200,
|
||||
28800,
|
||||
38400,
|
||||
57600,
|
||||
115200,
|
||||
230400,
|
||||
460800];
|
||||
const buildConsoleButtons=(element)=>{
|
||||
let bFrame=document.querySelector(element||'.console');
|
||||
if (! bFrame) return;
|
||||
bFrame.textContent='';
|
||||
let cLine=addEl('div','buttons',bFrame);
|
||||
let bSelect=addEl('select','consoleBaud',cLine);
|
||||
baudRates.forEach((baud)=>{
|
||||
let v=addEl('option',undefined,bSelect,baud+'');
|
||||
v.setAttribute('value',baud);
|
||||
});
|
||||
bSelect.value=115200;
|
||||
showConsole=addEl('button','showConsole',cLine,'ShowConsole');
|
||||
showConsole.addEventListener('click',async()=>{
|
||||
enableConsole(false);
|
||||
await espInstaller.startConsole(bSelect.value);
|
||||
})
|
||||
hideConsole=addEl('button','hideConsole',cLine,'HideConsole');
|
||||
hideConsole.addEventListener('click',async()=>{
|
||||
await espInstaller.stopConsole();
|
||||
enableConsole(true);
|
||||
})
|
||||
}
|
||||
const buildButtons=(user,repo,element)=>{
|
||||
let bFrame=document.querySelector(element||'.content');
|
||||
if (! bFrame) return;
|
||||
bFrame.textContent='';
|
||||
if (!releaseData.assets) return;
|
||||
let version=releaseData.name;
|
||||
if (! version){
|
||||
alert("no version found in release data");
|
||||
return;
|
||||
}
|
||||
addEl('div','version',bFrame,`Version: ${version}`);
|
||||
let items={};
|
||||
releaseData.assets.forEach((asset)=>{
|
||||
let name=asset.name;
|
||||
let base=name.replace(/-all\.bin/,'').replace(/-update\.bin/,'');
|
||||
if (items[base] === undefined){
|
||||
items[base]={};
|
||||
}
|
||||
let item=items[base];
|
||||
item.label=base.replace(/-[0-9][0-9]*/,'');
|
||||
if (name.match(/-update\./)){
|
||||
item.update=name;
|
||||
}
|
||||
else{
|
||||
item.basic=name;
|
||||
}
|
||||
});
|
||||
for (let k in items){
|
||||
let item=items[k];
|
||||
let line=addEl('div','item',bFrame);
|
||||
addEl('div','itemTitle',line,item.label);
|
||||
let btLine=addEl('div','buttons',line);
|
||||
let tb=addEl('button','installButton',line,'Initial');
|
||||
tb.addEventListener('click',async ()=>{
|
||||
enableConsole(false,true);
|
||||
await espInstaller.installClicked(
|
||||
true,
|
||||
user,
|
||||
repo,
|
||||
version,
|
||||
4096,
|
||||
(chip)=>checkChip(chip,item.basic)
|
||||
)
|
||||
enableConsole(true);
|
||||
});
|
||||
tb=addEl('button','installButton',line,'Update');
|
||||
tb.addEventListener('click',async ()=>{
|
||||
enableConsole(false,true);
|
||||
await espInstaller.installClicked(
|
||||
false,
|
||||
user,
|
||||
repo,
|
||||
version,
|
||||
65536,
|
||||
(chip)=>checkChip(chip,item.update)
|
||||
)
|
||||
enableConsole(true);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
window.onload = async () => {
|
||||
if (! ESPInstaller.checkAvailable()){
|
||||
showError("your browser does not support the ESP flashing (no serial)");
|
||||
return;
|
||||
}
|
||||
let user = window.gitHubUser||ESPInstaller.getParam('user');
|
||||
let repo = window.gitHubRepo || ESPInstaller.getParam('repo');
|
||||
if (!user || !repo) {
|
||||
alert("missing parameter user or repo");
|
||||
}
|
||||
try {
|
||||
espLoaderTerminal = new XtermOutputHandler('terminal');
|
||||
espInstaller = new ESPInstaller(espLoaderTerminal);
|
||||
buildHeading(user, repo);
|
||||
buildConsoleButtons();
|
||||
releaseData = await espInstaller.getReleaseInfo(user, repo);
|
||||
buildButtons(user, repo);
|
||||
} catch(error){alert("unable to query release info for user "+user+", repo "+repo+": "+error)};
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user