x-bar {
display: none;
clear: both;
- width: 100%;
+ width: 90%;
padding: 0.2em;
margin: 0.1em;
border: none;
<x-boxleft id="odo" class="cont">
<x-boxright class="clear"><span class="small" id="nav_dist">-</span><span class="tiny"> km</span></x-boxright>
<x-boxright class="clear"><span class="small" id="nav_eta">-</span><span class="tiny"> eta</span></x-boxright>
+ <x-boxright class="clear"><span class="small" id="next_rest">-</span><span class="tiny"> ttr</span></x-boxright>
<x-boxleft class="clear">
<svg width="50" height="50">
<circle cx="25" cy="25" r="22" stroke="red" stroke-width="6" fill="white" id="nav_slimitsign"/>
+ pad2( Math.floor(s % 3600 / 60) );
}
+function m2hm(s) {
+ return pad2( Math.floor(s / 60) ) + ':'
+ + pad2( Math.floor(s % 60) );
+}
+
+function warn(elem, lvl) {
+ if ( lvl == 0 ) {
+ elem.classList.remove("warn1");
+ elem.classList.remove("warn2");
+ }
+ else if ( lvl == 1 ) {
+ elem.classList.remove("warn2");
+ elem.classList.add("warn1");
+ }
+ else {
+ elem.classList.remove("warn1");
+ elem.classList.add("warn2");
+ }
+}
+
+
function loadDoc() {
xhttp.onreadystatechange = function() {
var speed = document.getElementById("speed");
var nav_dist = document.getElementById("nav_dist");
var nav_eta = document.getElementById("nav_eta");
var nav_slimit = document.getElementById("nav_slimit");
+ var next_rest = document.getElementById("next_rest");
var nav_slimitsign = document.getElementById("nav_slimitsign")
var errbar = document.getElementById("errbar");
var tele = JSON.parse(this.responseText);
speed.innerHTML = Math.round(tele.speed * 3.6);
- if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.075 ) {
- speed.classList.remove("warn1");
- speed.classList.add("warn2");
- }
- else if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.005 ) {
- speed.classList.remove("warn2");
- speed.classList.add("warn1");
- }
- else {
- speed.classList.remove("warn1");
- speed.classList.remove("warn2");
- }
+ if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.075 )
+ warn( speed, 2 );
+ else if ( tele.nav_slimit > 0 && tele.speed > tele.nav_slimit * 1.005 )
+ warn( speed, 1 );
+ else
+ warn( speed, 0 );
cctrl.innerHTML = Math.round(tele.cctrl * 3.6);
odometer.innerHTML = Math.round(tele.odometer);
fuel.innerHTML = Math.round(tele.fuel);
- if ( tele.fuel_warn )
- fuel.classList.add("warn1");
- else
- fuel.classList.remove("warn1");
+ warn( fuel, tele.fuel_warn ? 1 : 0 );
fuel_range.innerHTML = Math.round(tele.fuel_range);
nav_eta.innerHTML = s2hm(tele.nav_eta);
+ next_rest.innerHTML = m2hm(tele.next_rest);
+ warn( next_rest, tele.next_rest < 1 ? 2 : tele.next_rest < 97 ? 1 : 0 );
+
if ( tele.nav_slimit > 0 ) {
nav_slimit.innerHTML = Math.round(tele.nav_slimit * 3.6);
nav_slimitsign.style.visibility = "visible";
write(fd, buf, sprintf( buf, " \"nav_dist\": %f,\n", telemetry->nav_dist ) );
write(fd, buf, sprintf( buf, " \"nav_eta\": %f,\n", telemetry->nav_eta ) );
write(fd, buf, sprintf( buf, " \"nav_slimit\": %f,\n", telemetry->nav_slimit ) );
+ write(fd, buf, sprintf( buf, " \"next_rest\": %d,\n", telemetry->next_rest ) );
// add more here
return buf;
}
+static const char *m2hm( int m ) {
+ static char buf[50];
+ sprintf( buf, "%02d:%02d", m / 60, m % 60 );
+ return buf;
+}
+
static int log_console(void) {
bool last_paused = telemetry->paused;
uint64_t last_timestamp = telemetry->timestamp;
printf( "nav dist: %.1f km\n", telemetry->nav_dist / 1000 );
printf( "nav eta: %s\n", s2hms( telemetry->nav_eta ) );
printf( "nav limit: %.1f km/h\n", telemetry->nav_slimit * 3.6 );
+ printf( "next rest: %s\n", m2hm( telemetry->next_rest ) );
puts("");
version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_distance, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->nav_dist);
version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_time, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->nav_eta);
version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_speed_limit, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->nav_slimit);
+ version_params->register_for_channel(SCS_TELEMETRY_CHANNEL_next_rest_stop, SCS_U32_NIL, SCS_VALUE_TYPE_s32, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_s32, &telemetry->next_rest);
// Set the structure with defaults.