mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-13 05:53:06 +01:00
handle and configure a serial device
This commit is contained in:
@@ -36,6 +36,48 @@
|
||||
"default": "true",
|
||||
"description": "convert NMEA0183 from the USB port to NMEA2000"
|
||||
},
|
||||
{
|
||||
"name": "serialDirection",
|
||||
"label": "serial direction",
|
||||
"type": "list",
|
||||
"default": "receive",
|
||||
"list": ["send","receive","off"],
|
||||
"description": "use the serial port to send or receive data",
|
||||
"capabilities":{"serialmode":["UNI"]}
|
||||
},
|
||||
{
|
||||
"name": "serialBaud",
|
||||
"label": "serial baud rate",
|
||||
"type": "list",
|
||||
"default": "115200",
|
||||
"description": "baud rate for the serial port",
|
||||
"list": [1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800],
|
||||
"capabilities":{"serialmode":["RX","TX","UNI","BI"]}
|
||||
},
|
||||
{
|
||||
"name": "sendSerial",
|
||||
"label": "NMEA to Serial",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "send out NMEA data on the serial port",
|
||||
"capabilities":{"serialmode":["TX","BI"]}
|
||||
},
|
||||
{
|
||||
"name": "receiveSerial",
|
||||
"label": "NMEA from Serial",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "receive NMEA data on the serial port",
|
||||
"capabilities":{"serialmode":["RX","BI"]}
|
||||
},
|
||||
{
|
||||
"name": "serialToN2k",
|
||||
"label": "serial to NMEA2000",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "convert NMEA0183 from the serial port to NMEA2000",
|
||||
"capabilities":{"serialmode":["RX","BI","UNI"]}
|
||||
},
|
||||
{
|
||||
"name": "serverPort",
|
||||
"label": "TCP port",
|
||||
@@ -60,14 +102,14 @@
|
||||
},
|
||||
{
|
||||
"name": "readTCP",
|
||||
"label": "TCP to NMEA2000",
|
||||
"label": "NMEA from TCP",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "receive NMEA data from connected TCP clients"
|
||||
},
|
||||
{
|
||||
"name": "tcpToN2k",
|
||||
"label": "NMEA from TCP",
|
||||
"label": "TCP to NMEA2000",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "convert NMEA0183 from TCP clients to NMEA2000"
|
||||
|
||||
112
web/index.html
112
web/index.html
@@ -7,7 +7,9 @@
|
||||
<script type="text/javascript">
|
||||
let self=this;
|
||||
let lastUpdate=(new Date()).getTime();
|
||||
let reloadConfig=false;
|
||||
function alertRestart(){
|
||||
reloadConfig=true;
|
||||
alert("Board reset triggered, reconnect WLAN if necessary");
|
||||
}
|
||||
function getJson(url){
|
||||
@@ -41,6 +43,10 @@
|
||||
}
|
||||
}
|
||||
lastUpdate=(new Date()).getTime();
|
||||
if (reloadConfig){
|
||||
reloadConfig=false;
|
||||
resetForm();
|
||||
}
|
||||
})
|
||||
}
|
||||
function resetForm(ev){
|
||||
@@ -180,53 +186,67 @@
|
||||
return el;
|
||||
}
|
||||
let configDefinitions;
|
||||
function loadConfigDefinitions(){
|
||||
getJson("config.json")
|
||||
.then(function(defs){
|
||||
let frame=document.querySelector('.configFormRows');
|
||||
if (! frame) throw Error("no config form");
|
||||
frame.innerHTML='';
|
||||
configDefinitions=defs;
|
||||
defs.forEach(function(item){
|
||||
if (! item.type) return;
|
||||
let row=document.createElement('div');
|
||||
row.classList.add('row');
|
||||
let label=item.label || item.name;
|
||||
let labelEl=document.createElement('span');
|
||||
labelEl.classList.add('label');
|
||||
labelEl.textContent=label;
|
||||
row.appendChild(labelEl);
|
||||
let valueEl=createInput(item);
|
||||
if (!valueEl) return;
|
||||
valueEl.setAttribute('data-default',item.default);
|
||||
valueEl.addEventListener('change',function(ev){
|
||||
let el=ev.target;
|
||||
checkChange(el);
|
||||
})
|
||||
if (item.check) valueEl.setAttribute('data-check',item.check);
|
||||
row.appendChild(valueEl);
|
||||
let bt=document.createElement('button');
|
||||
bt.classList.add('defaultButton');
|
||||
bt.setAttribute('data-default',item.default);
|
||||
bt.addEventListener('click',function(ev){
|
||||
valueEl.value=valueEl.getAttribute('data-default');
|
||||
checkChange(valueEl);
|
||||
})
|
||||
bt.textContent="X";
|
||||
row.appendChild(bt);
|
||||
bt=document.createElement('button');
|
||||
bt.classList.add('infoButton');
|
||||
bt.addEventListener('click',function(ev){
|
||||
alert(item.description);
|
||||
});
|
||||
bt.textContent="?";
|
||||
row.appendChild(bt);
|
||||
frame.appendChild(row);
|
||||
function loadConfigDefinitions() {
|
||||
getJson("api/capabilities")
|
||||
.then(function (capabilities) {
|
||||
getJson("config.json")
|
||||
.then(function (defs) {
|
||||
let frame = document.querySelector('.configFormRows');
|
||||
if (!frame) throw Error("no config form");
|
||||
frame.innerHTML = '';
|
||||
configDefinitions = defs;
|
||||
defs.forEach(function (item) {
|
||||
if (!item.type) return;
|
||||
if (item.capabilities !== undefined){
|
||||
for (let capability in item.capabilities){
|
||||
let values=item.capabilities[capability];
|
||||
if ( !capabilities[capability]) return;
|
||||
let found =false;
|
||||
values.forEach(function(v){
|
||||
if (capabilities[capability] == v) found=true;
|
||||
});
|
||||
if (! found) return;
|
||||
}
|
||||
}
|
||||
let row = document.createElement('div');
|
||||
row.classList.add('row');
|
||||
let label = item.label || item.name;
|
||||
let labelEl = document.createElement('span');
|
||||
labelEl.classList.add('label');
|
||||
labelEl.textContent = label;
|
||||
row.appendChild(labelEl);
|
||||
let valueEl = createInput(item);
|
||||
if (!valueEl) return;
|
||||
valueEl.setAttribute('data-default', item.default);
|
||||
valueEl.addEventListener('change', function (ev) {
|
||||
let el = ev.target;
|
||||
checkChange(el);
|
||||
})
|
||||
if (item.check) valueEl.setAttribute('data-check', item.check);
|
||||
row.appendChild(valueEl);
|
||||
let bt = document.createElement('button');
|
||||
bt.classList.add('defaultButton');
|
||||
bt.setAttribute('data-default', item.default);
|
||||
bt.addEventListener('click', function (ev) {
|
||||
valueEl.value = valueEl.getAttribute('data-default');
|
||||
checkChange(valueEl);
|
||||
})
|
||||
bt.textContent = "X";
|
||||
row.appendChild(bt);
|
||||
bt = document.createElement('button');
|
||||
bt.classList.add('infoButton');
|
||||
bt.addEventListener('click', function (ev) {
|
||||
alert(item.description);
|
||||
});
|
||||
bt.textContent = "?";
|
||||
row.appendChild(bt);
|
||||
frame.appendChild(row);
|
||||
})
|
||||
resetForm();
|
||||
})
|
||||
})
|
||||
resetForm();
|
||||
})
|
||||
.catch(function(err){alert("unable to load config: "+err)})
|
||||
}
|
||||
.catch(function (err) { alert("unable to load config: " + err) })
|
||||
}
|
||||
window.setInterval(update,1000);
|
||||
window.addEventListener('load',function(){
|
||||
let buttons=document.querySelectorAll('button');
|
||||
|
||||
Reference in New Issue
Block a user