* Replaced all integer types by their fixed-width equivalents and
authorUrban Wallasch <urban.wallasch@freenet.de>
Sat, 3 Aug 2019 16:57:00 +0000 (18:57 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sat, 3 Aug 2019 16:57:00 +0000 (18:57 +0200)
  all floats by double in telemetry_state_t struct and related code.
* Increased floating point output precision in tele2json() to 12 digits.

tele2json.c
telemetry.h
teleshmem.cpp

index 1c1cf2cd6e53694994bfdcf3e456e4e5fdfdded9..7560830ae1ada73ec5822540ef225898d0a228fa 100644 (file)
@@ -16,50 +16,50 @@ size_t tele2json( char *buf, size_t size, const struct telemetry_state_t *tele )
     n += snprintf( buf+n, size-n, "  \"tele_flags\": %"PRIu32",\n", tele->flags ); CHKSIZE;
 
     n += snprintf( buf+n, size-n, "  \"game_id\": \"%s\",\n", tele->game_id ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"game_major_ver\": %u,\n", tele->game_major_ver ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"game_minor_ver\": %u,\n", tele->game_minor_ver ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"game_ver_warn\": %d,\n", (int)tele->game_ver_warn ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"game_major_ver\": %"PRIu32",\n", tele->game_major_ver ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"game_minor_ver\": %"PRIu32",\n", tele->game_minor_ver ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"game_ver_warn\": %"PRIu32",\n", (int)tele->game_ver_warn ); CHKSIZE;
 
-    n += snprintf( buf+n, size-n, "  \"paused\": %d,\n", (int)tele->paused ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"paused\": %"PRIi32",\n", (int)tele->paused ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"timestamp\": %"PRIu64",\n", tele->timestamp ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"game_time\": %u,\n", tele->game_time ); CHKSIZE;
-
-    n += snprintf( buf+n, size-n, "  \"x\": %f,\n", tele->x ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"y\": %f,\n", tele->y ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"z\": %f,\n", tele->z ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"heading\": %f,\n", tele->heading ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"pitch\": %f,\n", tele->pitch ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"roll\": %f,\n", tele->roll ); CHKSIZE;
-
-    n += snprintf( buf+n, size-n, "  \"speed\": %f,\n", tele->speed ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"cctrl\": %f,\n", tele->cctrl ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"rpm\": %f,\n", tele->rpm ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"gear\": %d,\n", tele->gear ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"gear_disp\": %d,\n", tele->gear_disp ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"gear_fwdcnt\": %u,\n", tele->truck_fwd_gear_cnt ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"clutch_eff\": %f,\n", tele->clutch_eff ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"shifter\": %d,\n", tele->shifter ); CHKSIZE;
-
-    n += snprintf( buf+n, size-n, "  \"fuel\": %f,\n", tele->fuel ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"fuel_warn\": %d,\n", (int)tele->fuel_warn ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"fuel_avg\": %f,\n", tele->fuel_avg ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"fuel_range\": %f,\n", tele->fuel_range ); CHKSIZE;
-
-    n += snprintf( buf+n, size-n, "  \"odometer\": %f,\n", tele->odometer ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"nav_dist\": %f,\n", tele->nav_dist ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"nav_eta\": %f,\n", tele->nav_eta ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"nav_slimit\": %f,\n", tele->nav_slimit ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"next_rest\": %d,\n", tele->next_rest ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"game_time\": %"PRIu32",\n", tele->game_time ); CHKSIZE;
+
+    n += snprintf( buf+n, size-n, "  \"x\": %.12f,\n", tele->x ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"y\": %.12f,\n", tele->y ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"z\": %.12f,\n", tele->z ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"heading\": %.12f,\n", tele->heading ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"pitch\": %.12f,\n", tele->pitch ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"roll\": %.12f,\n", tele->roll ); CHKSIZE;
+
+    n += snprintf( buf+n, size-n, "  \"speed\": %.12f,\n", tele->speed ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"cctrl\": %.12f,\n", tele->cctrl ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"rpm\": %.12f,\n", tele->rpm ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"gear\": %"PRIi32",\n", tele->gear ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"gear_disp\": %"PRIi32",\n", tele->gear_disp ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"gear_fwdcnt\": %"PRIu32",\n", tele->truck_fwd_gear_cnt ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"clutch_eff\": %.12f,\n", tele->clutch_eff ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"shifter\": %"PRIi32",\n", tele->shifter ); CHKSIZE;
+
+    n += snprintf( buf+n, size-n, "  \"fuel\": %.12f,\n", tele->fuel ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"fuel_warn\": %"PRIi32",\n", (int)tele->fuel_warn ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"fuel_avg\": %.12f,\n", tele->fuel_avg ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"fuel_range\": %.12f,\n", tele->fuel_range ); CHKSIZE;
+
+    n += snprintf( buf+n, size-n, "  \"odometer\": %.12f,\n", tele->odometer ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"nav_dist\": %.12f,\n", tele->nav_dist ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"nav_eta\": %.12f,\n", tele->nav_eta ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"nav_slimit\": %.12f,\n", tele->nav_slimit ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"next_rest\": %"PRIi32",\n", tele->next_rest ); CHKSIZE;
 
     n += snprintf( buf+n, size-n, "  \"truck_brand\": \"%s\",\n", tele->truck_brand ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"truck_name\": \"%s\",\n", tele->truck_name ); CHKSIZE;
 
-    n += snprintf( buf+n, size-n, "  \"trailer_cnt\": %u,\n", tele->trailer_cnt ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"trailer_cnt\": %"PRIu32",\n", tele->trailer_cnt ); CHKSIZE;
 
-    n += snprintf( buf+n, size-n, "  \"job_isvalid\": %d,\n", (int)tele->job_isvalid ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"job_deltime\": %u,\n", tele->job_deltime ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"job_isvalid\": %"PRIi32",\n", (int)tele->job_isvalid ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"job_deltime\": %"PRIu32",\n", tele->job_deltime ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"job_income\": %"PRIu64",\n", tele->job_income ); CHKSIZE;
-    n += snprintf( buf+n, size-n, "  \"job_cargo_mass\": %f,\n", tele->job_cargo_mass ); CHKSIZE;
+    n += snprintf( buf+n, size-n, "  \"job_cargo_mass\": %.12f,\n", tele->job_cargo_mass ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"job_cargo\": \"%s\",\n", tele->job_cargo ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"job_source_city\": \"%s\",\n", tele->job_source_city ); CHKSIZE;
     n += snprintf( buf+n, size-n, "  \"job_destination_city\": \"%s\",\n", tele->job_destination_city ); CHKSIZE;
index 90d558ad9b40cbeec42e629d7bf08a605609f2da..aad946efc33b6403ac751de15bbd18aed10062ee 100644 (file)
@@ -17,59 +17,59 @@ struct telemetry_state_t {
     uint32_t flags;
 
     char game_id[10];
-    unsigned game_major_ver;
-    unsigned game_minor_ver;
-    bool game_ver_warn;
-    bool paused;
+    uint32_t game_major_ver;
+    uint32_t game_minor_ver;
+    bool     game_ver_warn;
+    bool     paused;
 
     uint64_t timestamp;
     uint64_t raw_rendering_timestamp;
     uint64_t raw_simulation_timestamp;
     uint64_t raw_paused_simulation_timestamp;
 
-    unsigned game_time; // minutes since beginning of first in-game day
+    uint32_t game_time; // minutes since beginning of first in-game day
 
     // truck placement and orientation
-    bool    placement_available;
-    double  x;
-    double  y;
-    double  z;
-    double  heading;
-    double  pitch;
-    double  roll;
-
-    float   speed;      // truck speed in m/s
-    float   cctrl;      // cruise_control in m/s
-    float   rpm;        // engine rpm
-    int     gear;       // engine gear
-    int     gear_disp;  // displayed gear
-    float   clutch_eff; // effective clutch
-    int     shifter;    // 0 = automatic, 1 = manual
-
-    float   fuel;       // fuel amount in l
-    bool    fuel_warn;  // fuel low warning
-    float   fuel_avg;   // fuel consumption average in l/km
-    float   fuel_range; // estimated range in km
-
-    float   odometer;   // odometer reading
-    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
+    bool     placement_available;
+    double   x;
+    double   y;
+    double   z;
+    double   heading;
+    double   pitch;
+    double   roll;
+
+    double   speed;      // truck speed in m/s
+    double   cctrl;      // cruise_control in m/s
+    double   rpm;        // engine rpm
+    int32_t  gear;       // engine gear
+    int32_t  gear_disp;  // displayed gear
+    double   clutch_eff; // effective clutch
+    int32_t  shifter;    // 0 = automatic, 1 = manual
+
+    double   fuel;       // fuel amount in l
+    bool     fuel_warn;  // fuel low warning
+    double   fuel_avg;   // fuel consumption average in l/km
+    double   fuel_range; // estimated range in km
+
+    double   odometer;   // odometer reading
+    double   nav_dist;   // navigation distance in m
+    double   nav_eta;    // navigation time in s
+    double   nav_slimit; // navigation speed limit in m/s
+    int32_t  next_rest;  // time to next rest stop in minutes
 
     char     truck_brand[TELE_STRLEN]; // truck brand name
     char     truck_name[TELE_STRLEN];  // truck model name
-    unsigned truck_fwd_gear_cnt;       // truck number of forward gears
+    uint32_t truck_fwd_gear_cnt;       // truck number of forward gears
 
     bool     job_isvalid; // job info is current, i.e. job is in progress
-    unsigned job_deltime; // job deadline in minutes (see game_time)
+    uint32_t job_deltime; // job deadline in minutes (see game_time)
     uint64_t job_income;  // job reward without penalties in in-game currency
-    float    job_cargo_mass; // cargo mass in kg
+    double   job_cargo_mass; // cargo mass in kg
     char     job_cargo[TELE_STRLEN];    // job cargo name
     char     job_source_city[TELE_STRLEN];    // job source city name
     char     job_destination_city[TELE_STRLEN];    // job destination city name
 
-    unsigned trailer_cnt; // number of active trailers
+    uint32_t trailer_cnt; // number of active trailers
 };
 
 #endif /* TELEMETRY_H_ */
index 10e7c90b26c7c13b6d6cfe558ca851e892c84d13..706061727155a28b8b864aea48eb85c8c9d4f386 100644 (file)
@@ -428,27 +428,27 @@ SCSAPI_VOID telemetry_store_dplacement(const scs_string_t name, const scs_u32_t
     tele->roll = value->value_dplacement.orientation.roll;
 }
 
-SCSAPI_VOID telemetry_store_float(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
+SCSAPI_VOID telemetry_store_double(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
 {
     // The SCS_TELEMETRY_CHANNEL_FLAG_no_value flag was not provided during registration
     // so this callback is only called when a valid value is available.
 
     assert(value);
-    assert(value->type == SCS_VALUE_TYPE_float);
+    assert(value->type == SCS_VALUE_TYPE_double);
     assert(context);
-    *static_cast<float *>(context) = value->value_float.value;
+    *static_cast<double *>(context) = value->value_double.value;
 }
 
-SCSAPI_VOID telemetry_store_float_nz(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
+SCSAPI_VOID telemetry_store_double_nz(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
 {
     // The SCS_TELEMETRY_CHANNEL_FLAG_no_value flag was not provided during registration
     // so this callback is only called when a valid value is available.
 
     assert(value);
-    assert(value->type == SCS_VALUE_TYPE_float);
+    assert(value->type == SCS_VALUE_TYPE_double);
     assert(context);
-    if (value->value_float.value)
-        *static_cast<float *>(context) = value->value_float.value;
+    if (value->value_double.value)
+        *static_cast<double *>(context) = value->value_double.value;
 }
 
 SCSAPI_VOID telemetry_store_s32(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
@@ -459,7 +459,7 @@ SCSAPI_VOID telemetry_store_s32(const scs_string_t name, const scs_u32_t index,
     assert(value);
     assert(value->type == SCS_VALUE_TYPE_s32);
     assert(context);
-    *static_cast<int *>(context) = value->value_s32.value;
+    *static_cast<int32_t *>(context) = value->value_s32.value;
 }
 
 SCSAPI_VOID telemetry_store_u32(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
@@ -470,7 +470,7 @@ SCSAPI_VOID telemetry_store_u32(const scs_string_t name, const scs_u32_t index,
     assert(value);
     assert(value->type == SCS_VALUE_TYPE_u32);
     assert(context);
-    *static_cast<int *>(context) = value->value_u32.value;
+    *static_cast<uint32_t *>(context) = value->value_u32.value;
 }
 
 SCSAPI_VOID telemetry_store_bool(const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context)
@@ -585,20 +585,20 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in
     const bool channels_registered =
            (version_params->register_for_channel(SCS_TELEMETRY_CHANNEL_game_time, SCS_U32_NIL, SCS_VALUE_TYPE_u32, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_u32, &telemetry->game_time) == SCS_RESULT_ok)
         && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_world_placement, SCS_U32_NIL, SCS_VALUE_TYPE_dplacement, SCS_TELEMETRY_CHANNEL_FLAG_no_value, telemetry_store_dplacement, telemetry) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_speed, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->speed) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_cruise_control, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->cctrl) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_engine_rpm, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->rpm) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_speed, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->speed) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_cruise_control, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->cctrl) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_engine_rpm, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->rpm) == SCS_RESULT_ok)
         && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_engine_gear, SCS_U32_NIL, SCS_VALUE_TYPE_s32, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_s32, &telemetry->gear) == SCS_RESULT_ok)
         && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_displayed_gear, SCS_U32_NIL, SCS_VALUE_TYPE_s32, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_s32, &telemetry->gear_disp) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_effective_clutch, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->clutch_eff) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->fuel) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_effective_clutch, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->clutch_eff) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->fuel) == SCS_RESULT_ok)
         && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel_warning, SCS_U32_NIL, SCS_VALUE_TYPE_bool, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_bool, &telemetry->fuel_warn) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel_average_consumption, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float_nz, &telemetry->fuel_avg) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel_range, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->fuel_range) == SCS_RESULT_ok)
-        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_odometer, SCS_U32_NIL, SCS_VALUE_TYPE_float, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_float, &telemetry->odometer) == SCS_RESULT_ok)
-        && (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) == SCS_RESULT_ok)
-        && (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) == SCS_RESULT_ok)
-        && (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) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel_average_consumption, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double_nz, &telemetry->fuel_avg) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_fuel_range, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->fuel_range) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_odometer, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->odometer) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_distance, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->nav_dist) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_time, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->nav_eta) == SCS_RESULT_ok)
+        && (version_params->register_for_channel(SCS_TELEMETRY_TRUCK_CHANNEL_navigation_speed_limit, SCS_U32_NIL, SCS_VALUE_TYPE_double, SCS_TELEMETRY_CHANNEL_FLAG_none, telemetry_store_double, &telemetry->nav_slimit) == SCS_RESULT_ok)
         && (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) == SCS_RESULT_ok)
         ;
     if ( !channels_registered) {