* Added time to next rest stop to telemetry and display.
authorUrban Wallasch <urban.wallasch@freenet.de>
Sat, 27 Jul 2019 15:08:27 +0000 (17:08 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sat, 27 Jul 2019 15:08:27 +0000 (17:08 +0200)
dash.html
telehttpd.c
telelogger.c
telemetry.h
teleshmem.cpp

index 719fa1f05c68ecca1ab5117f8c47b0ed8625d5fa..19d69ad06b7e2fb3a3440bad54941276bbad70d2 100644 (file)
--- 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 {
 <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"/>
@@ -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";
index 0f861e5d63f0bc26728764fc47e47ec025dd7551..b8229d0a18b9295f30d6b071737584e4630923e5 100644 (file)
@@ -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
 
index 17ad2216e28750290cf5467eba42d85649418e2b..a4c744fdde692c67dd4b88a5a2fe460d2050cc0e 100644 (file)
@@ -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("");
 
index 97ccb5fead22809ab025e1c8e1fb71f2b65335cc..b1dba1d82b96cf95733e260bc2f641d4d20a5fd4 100644 (file)
@@ -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_ */
index 039b64fe8886332c2a98c4ac5fbf9c263f6547ee..2982bc32a3b67801403164a93c670c7c95da635e 100644 (file)
@@ -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.