all floats by double in telemetry_state_t struct and related code.
* Increased floating point output precision in tele2json() to 12 digits.
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;
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_ */
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)
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)
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)
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) {