Files
2026-05-15 10:08:21 +01:00

422 lines
22 KiB
HTML
Vendored

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- Add custom CSS here -->
<link href="css/sb-admin.css" rel="stylesheet">
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
</head>
<body>
<div id="wrapper">
<!-- Sidebar -->
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="nav-centered">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav side-nav">
<li class="active"><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i>&nbsp;&nbsp;Status</a></li>
<li>
<a href="#configmenu" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">
<i style="color: yellow;" class="fa fa-cogs"></i> Config
<span class="caret pull-right"></span>
</a>
<ul id="configmenu" class="nav collapse">
<li><a href="configgui.htm"><i style="color: yellow;" class="fa fa-sliders"></i> GUI</a></li>
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Editor</a></li>
</ul>
</li>
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i>&nbsp;&nbsp;File Manager</a></li>
<li>
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
<i style="color: yellow;" class="fa fa-gear"></i> Settings
<span class="caret pull-right"></span>
</a>
<ul id="settings" class="nav collapse">
<li>
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
<span class="caret pull-right"></span>
</a>
<ul id="ota" class="nav collapse">
<li><a href="ota-esp32.htm">ESP32</a></li>
<li><a href="ota-rp2350.htm">RP2350</a></li>
</ul>
</li>
<li %SK_WIFINAVVISIBLE%>
<a href="wifimanager.htm">
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
</a>
</li>
<li>
<a href="personality.htm">
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
</a>
</li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right navbar-user">
<li class="dropdown user-dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
<ul class="dropdown-menu">
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
<li class="divider"></li>
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right navbar-user">
<li class="dropdown user-dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
<ul class="dropdown-menu">
<li style="margin-left: 1em;"><b>Action Menu</b></li>
<li class="divider"></li>
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (<span class="rp-floppy1">%SK_FLOPPY1%</span>)</span></a></li>
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (<span class="rp-floppy2">%SK_FLOPPY2%</span>)</span></a></li>
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (<span class="rp-qdisk">%SK_QDDISK%</span>)</span></a></li>
<hr style="margin-top: 10px; margin-bottom: 10px;">
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.nav-centered -->
</nav>
<div id="page-wrapper">
<div class="row">
<div class="col-lg-12">
<h1>Status </h1>
<ol class="breadcrumb">
<li class="active"><i class="fa fa-dashboard"></i> Status</li>
</ol>
<!--
<div class="alert alert-success alert-dismissable justify">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<p>This built-in web app allows configuration of the host, emulated processor, virtual interfaces, <u>O</u>ver <u>T</u>he <u>A</u>ir firmware updates and more.</p>
</div>
-->
</div>
</div><!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa %SK_NETPANELICON%"></i> %SK_NETPANELTITLE%</h3>
</div>
<div class="panel-body">
<div class="table-responsive">
<div %SK_WIFINAVVISIBLE% id="wifiCfg%SK_WIFIMODEAP%">
<table class="table table-borderless table-sm" style="width:auto;">
<tbody>
<tr style="display: compact;">
<td>SSID:</td><td><span style="color: blue;">%SK_APSSID%</span></td>
<td style="padding-left:20px;">TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
</tr>
<tr style="display: compact;">
<td>Password:</td><td><span style="color: blue;">%SK_APPWD%</span></td>
</tr>
<tr>
<td>IP (AP):</td><td><span class="wifi-ip-live" style="color: blue;">%SK_CURRENTIP%</span></td>
<td style="padding-left:20px;">NETMASK:</td><td><span class="wifi-nm-live" style="color: blue;">%SK_CURRENTNM%</span></td>
<td style="padding-left:20px;">GATEWAY:</td><td><span class="wifi-gw-live" style="color: blue;">%SK_CURRENTGW%</span></td>
</tr>
</tbody>
</table>
</div>
<div %SK_WIFINAVVISIBLE% id="wifiCfg0%SK_WIFIMODECLIENT%">
<table class="table table-borderless table-sm" style="width:auto;">
<tbody>
<tr style="display: compact;">
<td>SSID:</td><td><span style="color: blue;">%SK_CLIENTSSID%</span></td>
<td style="padding-left:20px;">TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
<td style="padding-left:20px;">RSSI:</td><td><span class="rssi-live" style="color: blue;">%SK_RSSI% dBm</span></td>
</tr>
<tr style="display: compact;" id="wifiCfg1%SK_CLIENTDHCPON%">
<td>DHCP:</td><td><span style="color: blue;">Enabled</span></td>
</tr>
<tr id="wifiCfg3%SK_CLIENTDHCPON%">
<td>IP (assigned):</td><td><span class="wifi-ip-live" style="color: blue;">%SK_CURRENTIP%</span></td>
<td style="padding-left:20px;">NETMASK:</td><td><span class="wifi-nm-live" style="color: blue;">%SK_CURRENTNM%</span></td>
<td style="padding-left:20px;">GATEWAY:</td><td><span class="wifi-gw-live" style="color: blue;">%SK_CURRENTGW%</span></td>
</tr>
<tr id="wifiCfg3%SK_CLIENTDHCPOFF%">
<td>IP (fixed):</td><td><span class="wifi-ip-live" style="color: blue;">%SK_CURRENTIP%</span></td>
<td style="padding-left:20px;">NETMASK:</td><td><span class="wifi-nm-live" style="color: blue;">%SK_CURRENTNM%</span></td>
<td style="padding-left:20px;">GATEWAY:</td><td><span class="wifi-gw-live" style="color: blue;">%SK_CURRENTGW%</span></td>
</tr>
</tbody>
</table>
</div>
<div %SK_USBNCMVISIBLE%>
<table class="table table-borderless table-sm" style="width:auto;">
<tbody>
<tr>
<td>Connection:</td><td><span style="color: blue;">USB (CDC-NCM)</span></td>
<td style="padding-left:20px;">IP:</td><td><span style="color: blue;">%SK_USBNCMIP%</span></td>
<td style="padding-left:20px;">NETMASK:</td><td><span style="color: blue;">%SK_USBNCMNM%</span></td>
<td style="padding-left:20px;">GATEWAY:</td><td><span style="color: blue;">%SK_USBNCMIP%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div><!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-dashboard"></i> System Status</h3>
</div>
<div class="panel-body">
<div class="table-responsive">
<table class="table table-borderless table-sm" style="margin-bottom:0; width:auto;">
<tbody>
<tr>
<td style="width:140px; padding-right:4px;">Firmware Version:</td><td style="width:200px;"><span class="rp-fwversion" style="color:#5bf;">%SK_FWVERSION%</span></td>
<td style="width:140px; padding-right:4px;">ESP32 Version:</td><td style="width:200px;"><span style="color:#5bf;">%SK_ESPVERSION%</span></td>
</tr>
<tr>
<td>RP2350 Clock:</td><td><span class="rp-clock" style="color:#5bf;">%SK_CPUCLOCK%</span></td>
<td>ESP32 Clock:</td><td><span style="color:#5bf;">%SK_ESP32CLOCK%</span></td>
</tr>
<tr>
<td>RP2350 Flash:</td><td><span class="rp-flash" style="color:#5bf;">%SK_RP2350FLASH%</span></td>
<td>ESP32 Flash:</td><td><span style="color:#5bf;">%SK_ESP32FLASH%</span></td>
</tr>
<tr>
<td>RP2350 PSRAM:</td><td><span class="rp-psram" style="color:#5bf;">%SK_RP2350PSRAM%</span></td>
<td>ESP32 PSRAM:</td><td><span style="color:#5bf;">%SK_ESP32PSRAM%</span></td>
</tr>
<tr>
<td>PSRAM Clock:</td><td><span class="rp-psramclk" style="color:#5bf;">%SK_PSRAMCLOCK%</span></td>
<td>SD Card:</td><td><span style="color:#5bf;">%SK_SDCARD%</span></td>
</tr>
<tr>
<td>FilePack:</td><td><span style="color:#5bf;">%SK_FILEPACK%</span></td>
<td>Uptime:</td><td><span style="color:#5bf;" id="sys-uptime">%SK_UPTIME%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div><!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-microchip"></i> Active Personality</h3>
</div>
<div class="panel-body">
<div class="table-responsive">
<table class="table table-borderless table-sm" style="margin-bottom:0; width:auto;">
<tbody>
<tr>
<td style="width:140px; padding-right:4px;">Personality:</td><td style="width:200px;"><span class="rp-persona" style="color:#5bf;">%SK_PERSONA%</span></td>
<td style="padding-left:20px; width:140px;">Processor:</td><td style="width:200px;"><span style="color:#5bf;">%SK_PROCESSOR%</span></td>
</tr>
<tr>
<td>Active Partition:</td><td><span class="rp-partition" style="color:#5bf;">%SK_ACTIVEPARTITION%</span></td>
<td style="padding-left:20px;">Host Clock:</td><td><span class="rp-hostclk" style="color:#5bf;">N/A</span></td>
</tr>
<tr>
<td>Emulation Speed:</td><td><span class="rp-emulspeed" style="color:#5bf;">N/A</span></td>
<td style="padding-left:20px;">Drivers:</td><td><span class="rp-drivers" style="color:#5bf;">%SK_ACTIVEDRIVERS%</span></td>
</tr>
<tr>
<td>Floppy 1:</td><td><span class="rp-floppy1" style="color:#5bf;">%SK_FLOPPY1%</span></td>
<td style="padding-left:20px;">Floppy 2:</td><td><span class="rp-floppy2" style="color:#5bf;">%SK_FLOPPY2%</span></td>
</tr>
<tr>
<td>Quick Disk:</td><td><span class="rp-qdisk" style="color:#5bf;">%SK_QDDISK%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div><!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-file"></i> Version Information</h3>
</div>
<div class="panel-body">
<div class="table-responsive">
<div id="title" style="font-size:16px;padding-bottom:25px;">%SK_PRODNAME% v%SK_PRODVERSION% &copy; P.D. Smart, 2018-26</div>
<div id="esp32-info" style="font-size:12px;padding-top:8px;padding-bottom:8px;"><b>ESP32 Partitions</b></div>
<div id="esp32-partitions-area" style="padding-left:25px;">
<table class="table table-borderless table-sm">
<thead>
<tr>
<th><b>Partition Name</b></th>
<th><b>Type</b></th>
<th><b>Sub-Type</b></th>
<th><b>Address</b></th>
<th><b>Size</b></th>
<th><b>Version</b></th>
<th><b>Timestamp</b></th>
<th><b>Active (Running)</b></th>
</tr>
</thead>
<tbody>
%SK_PARTITIONS%
</tbody>
</table>
</div>
<div id="rp2350-info" style="font-size:12px;padding-top:8px;padding-bottom:8px;"><b>RP2350 Partitions</b></div>
<div id="rp2350-partitions-area" style="padding-left:25px;">
<table class="table table-borderless table-sm">
<thead>
<tr>
<th><b>Partition</b></th>
<th><b>Addr</b></th>
<th><b>Size</b></th>
<th><b>CheckSum</b></th>
<th><b>Active (Running)</b></th>
<th><b>License</b></th>
<th><b>Author</b></th>
<th><b>Description</b></th>
<th><b>Version</b></th>
<th><b>Date</b></th>
<th><b>Copyright</b></th>
</tr>
</thead>
<tbody id="rp-partitions-body">
%SK_RP_PARTITIONS%
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div><!-- /.row -->
</div><!-- /#page-wrapper -->
</div><!-- /#wrapper -->
<!-- JavaScript -->
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script>
// Store the name of the active and secondary interfaces.
const activeInterface = "%SK_CURRENTIF%";
const secondaryInterface = "%SK_SECONDIF%"
</script>
<script src="js/index.js"></script>
<script src="js/actions.js"></script>
<script src="js/common.js"></script>
<script>
// Mark that the index page runs its own comprehensive poller so common.js skips its lighter one.
window._statusPollActive = true;
// Live WiFi/network status polling (updates every 3 seconds).
(function pollWifiStatus() {
$.getJSON("/data/wifistatus", function(data) {
$(".rssi-live").text(data.rssi + " dBm");
$(".txpower-live").text(data.txPower.toFixed(1) + " dBm");
if (data.connected) {
var r = data.rssi;
var color = r >= -50 ? "green" : r >= -70 ? "blue" : r >= -80 ? "orange" : "red";
$(".rssi-live").css("color", color);
} else {
$(".rssi-live").text("N/A").css("color", "gray");
}
// Update IP/Netmask/Gateway dynamically (WiFi may connect after page load).
if (data.ip) {
$(".wifi-ip-live").text(data.ip || "");
$(".wifi-nm-live").text(data.netmask || "");
$(".wifi-gw-live").text(data.gateway || "");
}
// Update uptime.
if (data.uptime) {
$("#sys-uptime").text(data.uptime);
}
// Update RP2350 fields (populated by INF IPC, may arrive after page load).
var na = "N/A";
$(".rp-fwversion").text(data.fwVersion ? data.fwVersion + " (" + data.fwDate + ")" : na);
$(".rp-clock").text(data.rp2350Clock !== null ? data.rp2350Clock + " MHz" : na);
$(".rp-psramclk").text(data.psramClock !== null ? data.psramClock + " MHz" : na);
$(".rp-flash").text(data.rp2350Flash !== null ? data.rp2350Flash + " MB" : na);
$(".rp-psram").text(data.rp2350Psram !== null ? data.rp2350Psram + " MB" : na);
$(".rp-persona").text(data.persona || na);
$(".rp-partition").text(data.activePartition !== null ? data.activePartition : na);
$(".rp-drivers").text(data.drivers || na);
if (data.hostClkHz !== null && data.hostClkHz > 0) {
var mhz = (data.hostClkHz / 1000000).toFixed(3);
$(".rp-hostclk").text(mhz + " MHz");
} else {
$(".rp-hostclk").text(na);
}
if (data.emulSpeedHz !== null && data.emulSpeedHz > 0) {
var emhz = (data.emulSpeedHz / 1000000).toFixed(3);
$(".rp-emulspeed").text(emhz + " MHz");
} else {
$(".rp-emulspeed").text(na);
}
// Update RP2350 partition table.
if (data.rpPartitions) {
$("#rp-partitions-body").html(data.rpPartitions);
}
// Update disk image names.
if (data.floppy1) $(".rp-floppy1").text(data.floppy1);
if (data.floppy2) $(".rp-floppy2").text(data.floppy2);
if (data.qdisk) $(".rp-qdisk").text(data.qdisk);
}).always(function() {
setTimeout(pollWifiStatus, 3000);
});
})();
</script>
</body>
</html>