From 73e68ce209860370217ed62c78d826349a39071f Mon Sep 17 00:00:00 2001 From: Urban Wallasch Date: Sat, 27 Jul 2019 17:08:27 +0200 Subject: [PATCH] * Added time to next rest stop to telemetry and display. --- dash.html | 51 ++++++++++++++++++++++++++++++++++----------------- telehttpd.c | 1 + telelogger.c | 7 +++++++ telemetry.h | 1 + teleshmem.cpp | 1 + 5 files changed, 44 insertions(+), 17 deletions(-) diff --git a/dash.html b/dash.html index 719fa1f..19d69ad 100644 --- a/dash.html +++ b/dash.html @@ -57,7 +57,7 @@ x-boxright { float:right; } x-bar { display: none; clear: both; - width: 100%; + width: 90%; padding: 0.2em; margin: 0.1em; border: none; @@ -95,6 +95,7 @@ x-bar { - km - eta + - ttr @@ -131,6 +132,27 @@ function s2hm(s) { + 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"); @@ -144,6 +166,7 @@ function loadDoc() { 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"); @@ -153,18 +176,12 @@ function loadDoc() { 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); @@ -178,10 +195,7 @@ function loadDoc() { 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); @@ -191,6 +205,9 @@ function loadDoc() { 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"; diff --git a/telehttpd.c b/telehttpd.c index 0f861e5..b8229d0 100644 --- a/telehttpd.c +++ b/telehttpd.c @@ -89,6 +89,7 @@ static void write_telejson( int fd ) { 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 diff --git a/telelogger.c b/telelogger.c index 17ad221..a4c744f 100644 --- a/telelogger.c +++ b/telelogger.c @@ -20,6 +20,12 @@ static const char *s2hms( int s ) { 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; @@ -64,6 +70,7 @@ static int log_console(void) { 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(""); diff --git a/telemetry.h b/telemetry.h index 97ccb5f..b1dba1d 100644 --- a/telemetry.h +++ b/telemetry.h @@ -41,6 +41,7 @@ struct telemetry_state_t { float nav_dist; // navigation distance in m float nav_eta; // navigation time in s float nav_slimit; // navigation speed limit in m/s + int next_rest; // time to next rest stop in minutes }; #endif /* TELEMETRY_H_ */ diff --git a/teleshmem.cpp b/teleshmem.cpp index 039b64f..2982bc3 100644 --- a/teleshmem.cpp +++ b/teleshmem.cpp @@ -454,6 +454,7 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in 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. -- 2.30.2