* Prevent average fuel consumption of 0 from being stored
authorvolpol <volpol@packet-gain.de>
Thu, 25 Jul 2019 21:02:39 +0000 (23:02 +0200)
committervolpol <volpol@packet-gain.de>
Thu, 25 Jul 2019 21:02:39 +0000 (23:02 +0200)
telemetry.cpp

index bb8cbedaca04a5e2aa73529fba863de35be1b057..ed7900d80972b598870b3303da4973c7c96dffe6 100644 (file)
@@ -273,6 +273,18 @@ SCSAPI_VOID telemetry_store_float(const scs_string_t name, const scs_u32_t index
     *static_cast<float *>(context) = value->value_float.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)
+{
+    // 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(context);
+    if (value->value_float.value)
+        *static_cast<float *>(context) = value->value_float.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)
 {
     // The SCS_TELEMETRY_CHANNEL_FLAG_no_value flag was not provided during registration
@@ -403,7 +415,7 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in
 
     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);
     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);
-    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, &telemetry->fuel_avg);
+    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);
     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);
 
     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);