From 219ca54df51ca7342f64487e161f5c6aeb3e7b44 Mon Sep 17 00:00:00 2001 From: Hans Date: Sun, 17 May 2015 14:29:31 +0200 Subject: [PATCH] Changed project to VS2012 Added new truck channels telemetry from SDK 1.5 --- ets2-client/C#/Ets2SdkClient.Demo/Form1.cs | 107 ++++++----- ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs | 28 +++ ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs | 26 +++ ets2-telemetry/ets2-telemetry.sln | 26 --- ets2-telemetry/ets2-telemetry.vcproj | 179 ------------------ ets2-telemetry/inc/ets2-telemetry-common.hpp | 14 +- ets2-telemetry/inc/scs_config_handlers.hpp | 4 + ets2-telemetry/inc/sharedmemory.hpp | 4 +- ets2-telemetry/src/ets2-telemetry.cpp | 51 +++-- ets2-telemetry/src/scs_config_handlers.cpp | 41 ++++ ets2-telemetry/src/sharedmemory.cpp | 12 +- ets2-telemetry/vs2012/ets2-telemetry.def | 4 + ets2-telemetry/vs2012/ets2-telemetry.sln | 20 ++ .../{ => vs2012}/ets2-telemetry.vcxproj | 35 +--- .../vs2012/ets2-telemetry.vcxproj.filters | 28 +++ 15 files changed, 279 insertions(+), 300 deletions(-) delete mode 100644 ets2-telemetry/ets2-telemetry.sln delete mode 100644 ets2-telemetry/ets2-telemetry.vcproj create mode 100644 ets2-telemetry/vs2012/ets2-telemetry.def create mode 100644 ets2-telemetry/vs2012/ets2-telemetry.sln rename ets2-telemetry/{ => vs2012}/ets2-telemetry.vcxproj (84%) create mode 100644 ets2-telemetry/vs2012/ets2-telemetry.vcxproj.filters diff --git a/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs b/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs index e046ad9..07ce575 100644 --- a/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs +++ b/ets2-client/C#/Ets2SdkClient.Demo/Form1.cs @@ -28,64 +28,79 @@ public Form1() private void Telemetry_Data(Ets2Telemetry data, bool updated) { - if (this.InvokeRequired) + try { - this.Invoke(new TelemetryData(Telemetry_Data), new object[2] {data, updated}); - return; - } + if (this.InvokeRequired) + { + this.Invoke(new TelemetryData(Telemetry_Data), new object[2] { data, updated }); + return; + } - lbGeneral.Text = "General info:\r\n SDK Version: " + data.Version.SdkPlugin + "\r\n Reported game Version: " + - data.Version.Ets2Major + "." + data.Version.Ets2Minor + "\r\n\r\nTruck: " + data.Truck + " ("+data.TruckId +")\r\nManufacturer: " + data.Manufacturer + "("+data.ManufacturerId+")" + - "\r\nGame Timestamp: " + data.Time + "\r\nPaused? " + data.Paused; - - // Do some magic trickery to display ALL info: - var grps = new object[] + lbGeneral.Text = "General info:\r\n SDK Version: " + data.Version.SdkPlugin + "\r\n Reported game Version: " + + data.Version.Ets2Major + "." + data.Version.Ets2Minor + "\r\n\r\nTruck: " + data.Truck + " (" + data.TruckId + ")\r\nManufacturer: " + data.Manufacturer + "(" + data.ManufacturerId + ")" + + "\r\nGame Timestamp: " + data.Time + "\r\nPaused? " + data.Paused; + + // Do some magic trickery to display ALL info: + var grps = new object[] { data.Drivetrain, data.Physics, data.Controls, data.Axilliary, data.Damage, data.Lights, data.Job }; - foreach (var grp in grps) - { - // Find the right tab page: - var grpName = grp.GetType().Name; - if (grpName.StartsWith("_")) - grpName = grpName.Substring(1); + foreach (var grp in grps) + { + // Find the right tab page: + var grpName = grp.GetType().Name; + if (grpName.StartsWith("_")) + grpName = grpName.Substring(1); - var tabPage = default(TabPage); - var tabFound = false; + var tabPage = default(TabPage); + var tabFound = false; - for (int k = 0; k < telemetryInfo.TabCount; k++) - { - if (telemetryInfo.TabPages[k].Text == grpName) + for (int k = 0; k < telemetryInfo.TabCount; k++) { - tabPage = telemetryInfo.TabPages[k]; - tabFound = true; + if (telemetryInfo.TabPages[k].Text == grpName) + { + tabPage = telemetryInfo.TabPages[k]; + tabFound = true; + } + } + if (!tabFound) + { + tabPage = new CustomTabPage(grpName); + telemetryInfo.TabPages.Add(tabPage); } - } - if (!tabFound) - { - tabPage = new CustomTabPage(grpName); - telemetryInfo.TabPages.Add(tabPage); - } - // All properties; - var props = grp.GetType().GetProperties().OrderBy(x=>x.Name); - var labels = new StringBuilder(); - var vals = new StringBuilder(); - foreach (var prop in props) - { - labels.AppendLine(prop.Name + ":"); - vals.AppendLine(prop.GetValue(grp, null).ToString()); - } + // All properties; + var props = grp.GetType().GetProperties().OrderBy(x => x.Name); + var labels = new StringBuilder(); + var vals = new StringBuilder(); + foreach (var prop in props) + { + labels.AppendLine(prop.Name + ":"); + object val = prop.GetValue(grp, null); + if (val is float[]) + { + vals.AppendLine(string.Join(", ", (val as float[]).Select(x=> x.ToString("0.000")))); + } + else + { + vals.AppendLine(val.ToString()); + } + } - tabPage.Controls.Clear(); - var lbl1 = new Label { Location = new Point(3, 3), Size = new Size(200, tabPage.Height-6) }; - var lbl2 = new Label { Location = new Point(203, 3), Size = new Size(200, tabPage.Height-6) }; - lbl1.Text = labels.ToString(); - lbl2.Text = vals.ToString(); - tabPage. Controls.Add(lbl1); - tabPage.Controls.Add(lbl2); + tabPage.Controls.Clear(); + var lbl1 = new Label { Location = new Point(3, 3), Size = new Size(200, tabPage.Height - 6) }; + var lbl2 = new Label { Location = new Point(203, 3), Size = new Size(1000, tabPage.Height - 6) }; + lbl1.Text = labels.ToString(); + lbl2.Text = vals.ToString(); + lbl2.AutoSize = false; + tabPage.Controls.Add(lbl1); + tabPage.Controls.Add(lbl2); + } + } + catch + { } } } -} +} \ No newline at end of file diff --git a/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs b/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs index 5bc0258..d553cc3 100644 --- a/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs +++ b/ets2-client/C#/Ets2SdkClient/Ets2SdkData.cs @@ -208,6 +208,34 @@ public struct Ets2SdkData [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public byte[] truckModel; + // ***** REVISION 4 ****** // + [FieldOffset(868)] + public float speedLimit; + + [FieldOffset(872)] + public float routeDistance; + + [FieldOffset(876)] + public float routeTime; + + [FieldOffset(880)] + public float fuelRange; + + [FieldOffset(884)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + public float[] gearRatioForward; + + [FieldOffset(980)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public float[] gearRatioReverse; + + [FieldOffset(1012)] + public float gearRatioDifferential; + + [FieldOffset(1016)] + public int gearDashboard; + + public bool GetBool(Ets2SdkBoolean i) { if (i == Ets2SdkBoolean.TrailerAttached) diff --git a/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs b/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs index 8b815c6..0e14de3 100644 --- a/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs +++ b/ets2-client/C#/Ets2SdkClient/Ets2Telemetry.cs @@ -44,6 +44,10 @@ public class _Drivetrain public bool ElectricEnabled { get; internal set; } public int Gear { get; internal set; } + public float[] GearRatiosForward { get; internal set; } + public float[] GearRatiosReverse { get; internal set; } + public float GearRatioDifferential { get; internal set; } + public int GearDashboard { get; internal set; } public int GearsForward { get; internal set; } public int GearsReverse { get; internal set; } public int GearRange { get; internal set; } @@ -57,6 +61,7 @@ public class _Drivetrain public float SpeedMph { get; internal set; } public float Fuel { get; internal set; } + public float FuelRange { get; internal set; } public float FuelMax { get; internal set; } // Deprecated: was never actually functional @@ -114,6 +119,9 @@ public class _Job public string CityDestination { get; internal set; } public string CompanySource { get; internal set; } public string CompanyDestination { get; internal set; } + public float NavigationDistanceLeft { get; internal set; } // meter + public float NavigationTimeLeft { get; internal set; } + public float SpeedLimit { get; internal set; } // meter/second } public class _Axilliary @@ -244,6 +252,7 @@ public Ets2Telemetry(Ets2SdkData raw, Ets2SdkUnmanaged rawUnmanaged) Drivetrain.SpeedMph = Physics.SpeedKmh / 1.6f; Drivetrain.Fuel = raw.fuel; + Drivetrain.FuelRange = raw.fuelRange; Drivetrain.FuelAvgConsumption = raw.fuelAvgConsumption; Drivetrain.FuelMax = raw.fuelCapacity; Drivetrain.FuelRate = raw.fuelRate; @@ -255,6 +264,19 @@ public Ets2Telemetry(Ets2SdkData raw, Ets2SdkUnmanaged rawUnmanaged) Drivetrain.GearsForward = raw.gears; Drivetrain.GearsReverse = raw.gearsReverse; + // Note all gears + var gearFw = raw.gearRatioForward; + var gearRw = raw.gearRatioReverse; + + Array.Resize(ref gearFw, Drivetrain.GearsForward); + Array.Resize(ref gearRw, Drivetrain.GearsReverse); + + Drivetrain.GearRatiosForward = gearFw; + Drivetrain.GearRatiosReverse = gearRw; + Drivetrain.GearRatioDifferential = raw.gearRatioDifferential; + + Drivetrain.GearDashboard =raw.gearDashboard; + Drivetrain.MotorBrake = raw.GetBool(Ets2SdkBoolean.MotorBrake); Drivetrain.OilPressure = raw.oilPressure; Drivetrain.OilTemperature = raw.oilTemperature; @@ -278,6 +300,10 @@ public Ets2Telemetry(Ets2SdkData raw, Ets2SdkUnmanaged rawUnmanaged) Job.TrailerName = Encoding.UTF8.GetString(raw.trailerName).Replace('\0', ' ').Trim(); Job.Cargo = rawUnmanaged.TrailerModel.Replace('\0', ' ').Trim(); + Job.NavigationDistanceLeft = raw.routeDistance; + Job.NavigationTimeLeft = raw.routeTime; + Job.SpeedLimit = raw.speedLimit; + // Axilliary flags Axilliary.AdblueWarning = raw.GetBool(Ets2SdkBoolean.AdblueWarning); Axilliary.AirPressureEmergency = raw.GetBool(Ets2SdkBoolean.AirPressureEmergency); diff --git a/ets2-telemetry/ets2-telemetry.sln b/ets2-telemetry/ets2-telemetry.sln deleted file mode 100644 index 1533521..0000000 --- a/ets2-telemetry/ets2-telemetry.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ets2-telemetry", "ets2-telemetry.vcxproj", "{A682E7F2-5D47-4223-9605-CC75FFCB813C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Debug|Win32.Build.0 = Debug|Win32 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Debug|x64.ActiveCfg = Debug|x64 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Debug|x64.Build.0 = Debug|x64 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Release|Win32.ActiveCfg = Release|Win32 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Release|Win32.Build.0 = Release|Win32 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Release|x64.ActiveCfg = Release|Win32 - {A682E7F2-5D47-4223-9605-CC75FFCB813C}.Release|x64.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/ets2-telemetry/ets2-telemetry.vcproj b/ets2-telemetry/ets2-telemetry.vcproj deleted file mode 100644 index 7693db4..0000000 --- a/ets2-telemetry/ets2-telemetry.vcproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ets2-telemetry/inc/ets2-telemetry-common.hpp b/ets2-telemetry/inc/ets2-telemetry-common.hpp index 7fc163a..166198c 100644 --- a/ets2-telemetry/inc/ets2-telemetry-common.hpp +++ b/ets2-telemetry/inc/ets2-telemetry-common.hpp @@ -7,7 +7,7 @@ // - Shared memory map struct layout // - [..] -#define ETS2_PLUGIN_REVID 3 +#define ETS2_PLUGIN_REVID 4 #define ETS2_PLUGIN_LOGGING_ON 0 #define ETS2_PLUGIN_LOGGING_SHAREDMEMORY 1 @@ -177,6 +177,18 @@ typedef struct ets2TelemetryMap_s } tel_rev3; + struct + { + float speedLimit; + float routeDistance; + float routeTime; + float fuelRange; + float gearRatiosForward[24]; + float gearRatiosReverse[8]; + float gearDifferential; + int gearDashboard; + } tel_rev4; // added in sdk1.5 + } ets2TelemetryMap_t; #endif \ No newline at end of file diff --git a/ets2-telemetry/inc/scs_config_handlers.hpp b/ets2-telemetry/inc/scs_config_handlers.hpp index ed265b7..dab2418 100644 --- a/ets2-telemetry/inc/scs_config_handlers.hpp +++ b/ets2-telemetry/inc/scs_config_handlers.hpp @@ -30,6 +30,10 @@ scsConfigHandle(RpmLimit); scsConfigHandle(FGearCount); scsConfigHandle(RGearCount); +scsConfigHandle(GearDifferential); +scsConfigHandle(GearForwardRatio); +scsConfigHandle(GearReverseRatio); + // Job info scsConfigHandle(JobIncome); scsConfigHandle(JobDeadline); diff --git a/ets2-telemetry/inc/sharedmemory.hpp b/ets2-telemetry/inc/sharedmemory.hpp index 673c678..a09857a 100644 --- a/ets2-telemetry/inc/sharedmemory.hpp +++ b/ets2-telemetry/inc/sharedmemory.hpp @@ -38,7 +38,7 @@ class SharedMemory bool Hooked() { return isSharedMemoryHooked; } void* GetBuffer() { return pBufferPtr; } - SharedMemory(LPCWSTR mapPtr, unsigned int size); + SharedMemory(LPCWSTR newNamePtr, unsigned int size); void Close(); void* getPtrAt(int offset) { return (void*) &(((unsigned char*)pBufferPtr)[offset]); } @@ -46,4 +46,4 @@ class SharedMemory }; -#endif \ No newline at end of file +#endif diff --git a/ets2-telemetry/src/ets2-telemetry.cpp b/ets2-telemetry/src/ets2-telemetry.cpp index 9d4ab3e..d7f8c1d 100644 --- a/ets2-telemetry/src/ets2-telemetry.cpp +++ b/ets2-telemetry/src/ets2-telemetry.cpp @@ -28,7 +28,7 @@ #define UNUSED(x) /** -/* These macro's are a shortcut to register channels inside the scs_telemetry_init function + * These macro's are a shortcut to register channels inside the scs_telemetry_init function * They require the channel definition name (without prefix SCS_TELEMETRY_), type and destination. * Not all channel types are implemented; the handler function for a type should be created like so: * telemetry_store_[Type](const scs_string_t name, const scs_u32_t index, const scs_value_t *const value, const scs_context_t context) @@ -40,7 +40,7 @@ SharedMemory *telemMem; ets2TelemetryMap_t *telemPtr; -LPWSTR ets2MmfName = ETS2_PLUGIN_MMF_NAME; +const wchar_t* ets2MmfName = ETS2_PLUGIN_MMF_NAME; /** * @brief Last timestamp we received. @@ -79,11 +79,11 @@ SCSAPI_VOID telemetry_frame_start(const scs_event_t UNUSED(event), const void *c timestamp += (info->paused_simulation_time - last_timestamp); last_timestamp = info->paused_simulation_time; - + /* Copy over the game timestamp to our telemetry memory */ if (telemPtr != NULL) { - telemPtr->time = timestamp; + telemPtr->time = (unsigned int) timestamp; // Do a non-convential periodic update of this field: telemPtr->tel_rev3.cruiseControl = (telemPtr->tel_rev3.cruiseControlSpeed > 0) ? true : false; @@ -105,7 +105,7 @@ SCSAPI_VOID telemetry_configuration(const scs_event_t event, const void *const e // This method prints all available attributes of the truck. // On configuration change, this function is called. const struct scs_telemetry_configuration_t *const info = static_cast(event_info); - + #ifdef SDK_ENABLE_LOGGING fprintf(log_file,"----\n"); #endif @@ -171,7 +171,7 @@ SCSAPI_VOID telemetry_configuration(const scs_event_t event, const void *const e } fprintf(log_file, "\r\n"); - + fflush(log_file); #endif handleCfg(current); @@ -252,7 +252,7 @@ SCSAPI_VOID telemetry_store_dplacement(const scs_string_t name, const scs_u32_t *(static_cast(context)+0) = (float)value->value_dplacement.position.x; *(static_cast(context)+1) = (float)value->value_dplacement.position.y; *(static_cast(context)+2) = (float)value->value_dplacement.position.z; - + *(static_cast(context)+3) = value->value_dplacement.orientation.heading; *(static_cast(context)+4) = value->value_dplacement.orientation.pitch; *(static_cast(context)+5) = value->value_dplacement.orientation.roll; @@ -264,19 +264,29 @@ SCSAPI_VOID telemetry_store_dplacement(const scs_string_t name, const scs_u32_t * * See scssdk_telemetry.h */ + SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_init_params_t *const params) { // We currently support only one version. - if (version != SCS_TELEMETRY_VERSION_1_00) { return SCS_RESULT_unsupported; } const scs_telemetry_init_params_v100_t *const version_params = static_cast(params); - + + if (version_params == NULL) + { + return SCS_RESULT_generic_error; + } + /*** ACQUIRE SHARED MEMORY BUFFER ***/ telemMem = new SharedMemory(ets2MmfName, ETS2_PLUGIN_MMF_SIZE); + if (telemMem == NULL) + { + return SCS_RESULT_generic_error; + } + if (telemMem->Hooked() == false) { return SCS_RESULT_generic_error; @@ -286,6 +296,12 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in log_file = fopen("telemetry.log", "wt"); #endif telemPtr = (ets2TelemetryMap_t*) (telemMem->GetBuffer()); + + if (telemPtr == NULL) + { + return SCS_RESULT_generic_error; + } + memset(telemPtr, 0, ETS2_PLUGIN_MMF_SIZE); /*** INITIALIZE TELEMETRY MAP TO DEFAULT ***/ @@ -295,7 +311,7 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in telemPtr->tel_revId.ets2_telemetry_plugin_revision = ETS2_PLUGIN_REVID; telemPtr->tel_revId.ets2_version_major = SCS_GET_MAJOR_VERSION(version_params->common.game_version); telemPtr->tel_revId.ets2_version_minor = SCS_GET_MINOR_VERSION(version_params->common.game_version); - + // Model & trailer type are stored in configuration event. // TODO: Invent a better way of sharing strings between plug-in and client application. telemPtr->tel_rev1.modelType[0] = TRUCK_STRING_OFFSET; @@ -308,7 +324,7 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in (version_params->register_for_event(SCS_TELEMETRY_EVENT_frame_start, telemetry_frame_start, NULL) == SCS_RESULT_ok) && (version_params->register_for_event(SCS_TELEMETRY_EVENT_paused, telemetry_pause, NULL) == SCS_RESULT_ok) && (version_params->register_for_event(SCS_TELEMETRY_EVENT_started, telemetry_pause, NULL) == SCS_RESULT_ok); - + // Register configuration event, because it sends data like truck make, etc. version_params->register_for_event(SCS_TELEMETRY_EVENT_configuration, telemetry_configuration, NULL); @@ -316,7 +332,7 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in { return SCS_RESULT_generic_error; } - + /*** REGISTER ALL TELEMETRY CHANNELS TO OUR SHARED MEMORY MAP ***/ registerChannel(TRUCK_CHANNEL_electric_enabled, bool, telemPtr->tel_rev1.engine_enabled); registerChannel(CHANNEL_game_time, u32, telemPtr->tel_rev2.time_abs); @@ -325,8 +341,9 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in registerChannel(TRUCK_CHANNEL_speed, float, telemPtr->tel_rev1.speed); registerChannel(TRUCK_CHANNEL_local_linear_acceleration, fvector, telemPtr->tel_rev1.accelerationX); registerChannel(TRUCK_CHANNEL_world_placement, dplacement, telemPtr->tel_rev1.coordinateX); - + registerChannel(TRUCK_CHANNEL_engine_gear, s32, telemPtr->tel_rev1.gear); + registerChannel(TRUCK_CHANNEL_displayed_gear, s32, telemPtr->tel_rev4.gearDashboard); registerChannel(TRUCK_CHANNEL_engine_rpm, float, telemPtr->tel_rev1.engineRpm); @@ -343,12 +360,12 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in registerChannel(TRUCK_CHANNEL_effective_throttle, float, telemPtr->tel_rev1.gameThrottle); registerChannel(TRUCK_CHANNEL_effective_brake, float, telemPtr->tel_rev1.gameBrake); registerChannel(TRUCK_CHANNEL_effective_clutch, float, telemPtr->tel_rev1.gameClutch); - + // Auxilliary stuff: registerChannel(TRUCK_CHANNEL_retarder_level, u32, telemPtr->tel_rev3.retarderBrake); registerChannel(TRUCK_CHANNEL_hshifter_slot, u32, telemPtr->tel_rev3.shifterSlot); registerChannel(TRUCK_CHANNEL_hshifter_selector, bool, telemPtr->tel_rev3.shifterToggle); - + // Booleans registerChannel(TRUCK_CHANNEL_wipers, bool, telemPtr->tel_rev3.wipers); registerChannel(TRUCK_CHANNEL_parking_brake, bool, telemPtr->tel_rev3.parkBrake); @@ -393,6 +410,10 @@ SCSAPI_RESULT scs_telemetry_init(const scs_u32_t version, const scs_telemetry_in registerChannel(TRAILER_CHANNEL_wear_chassis, float, telemPtr->tel_rev3.wearTrailer); registerChannel(TRUCK_CHANNEL_odometer, float, telemPtr->tel_rev3.truckOdometer); registerChannel(TRUCK_CHANNEL_cruise_control, float, telemPtr->tel_rev3.cruiseControlSpeed); + registerChannel(TRUCK_CHANNEL_navigation_speed_limit, float, telemPtr->tel_rev4.speedLimit); + registerChannel(TRUCK_CHANNEL_navigation_distance, float, telemPtr->tel_rev4.routeDistance); + registerChannel(TRUCK_CHANNEL_navigation_time, float, telemPtr->tel_rev4.routeTime); + registerChannel(TRUCK_CHANNEL_fuel_range, float, telemPtr->tel_rev4.fuelRange); // Set the structure with defaults. diff --git a/ets2-telemetry/src/scs_config_handlers.cpp b/ets2-telemetry/src/scs_config_handlers.cpp index eb6caa1..a3f82cd 100644 --- a/ets2-telemetry/src/scs_config_handlers.cpp +++ b/ets2-telemetry/src/scs_config_handlers.cpp @@ -33,6 +33,11 @@ const scsConfigHandler_t scsConfigTable[] = { { SCS_TELEMETRY_CONFIG_ATTRIBUTE_destination_city, handleCityDst }, { SCS_TELEMETRY_CONFIG_ATTRIBUTE_source_company, handleCompSrc }, { SCS_TELEMETRY_CONFIG_ATTRIBUTE_destination_company, handleCompDst }, + + // Revision 4 / ETS 1.17: + { SCS_TELEMETRY_CONFIG_ATTRIBUTE_forward_ratio, handleGearForwardRatio }, + { SCS_TELEMETRY_CONFIG_ATTRIBUTE_reverse_ratio, handleGearReverseRatio }, + { SCS_TELEMETRY_CONFIG_ATTRIBUTE_differential_ratio, handleGearDifferential }, }; #define NO_OF_CFGS ( sizeof(scsConfigTable)/sizeof(scsConfigHandler_t) ) @@ -205,3 +210,39 @@ scsConfigHandle(CompDst) strncpy(telemPtr->tel_rev2.compDst, current->value.value_string.value, 64); } } + +scsConfigHandle(GearDifferential) +{ + if (telemPtr) + { + telemPtr->tel_rev4.gearDifferential = current->value.value_float.value; + } +} + +scsConfigHandle(GearForwardRatio) +{ + if (telemPtr) + { + int gear = current->index; + float ratio = current->value.value_float.value; + + if (gear < 24) + { + telemPtr->tel_rev4.gearRatiosForward[gear] = ratio; + } + } +} + +scsConfigHandle(GearReverseRatio) +{ + if (telemPtr) + { + int gear = current->index; + float ratio = current->value.value_float.value; + + if (gear < 24) + { + telemPtr->tel_rev4.gearRatiosReverse[gear] = ratio; + } + } +} diff --git a/ets2-telemetry/src/sharedmemory.cpp b/ets2-telemetry/src/sharedmemory.cpp index 85bedeb..e03e062 100644 --- a/ets2-telemetry/src/sharedmemory.cpp +++ b/ets2-telemetry/src/sharedmemory.cpp @@ -15,10 +15,10 @@ void SharedMemory::LogError(const char *logPtr) #endif } -SharedMemory::SharedMemory(LPCWSTR namePtr, unsigned int size) +SharedMemory::SharedMemory(LPCWSTR newNamePtr, unsigned int size) { this->mapsize = size; - this->namePtr = namePtr; + this->namePtr = newNamePtr; this->isSharedMemoryHooked = false; #ifdef SHAREDMEM_LOGGING this->logFilePtr = NULL; @@ -30,14 +30,14 @@ SharedMemory::SharedMemory(LPCWSTR namePtr, unsigned int size) PAGE_READWRITE, // read/write access 0, // maximum object size (high-order DWORD) size, // maximum object size (low-order DWORD) - namePtr); // name of mapping object + this->namePtr); // name of mapping object LogError("Created file map"); if (hMapFile == NULL) { LogError("but it's NULL!"); if(GetLastError() == (DWORD)183) // already exists { - hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, namePtr); + hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, this->namePtr); if (hMapFile == NULL) { LogError("Could not open existing file mapping"); @@ -67,7 +67,7 @@ SharedMemory::SharedMemory(LPCWSTR namePtr, unsigned int size) this->isSharedMemoryHooked = true; LogError("Opened MMF"); } - + } @@ -88,4 +88,4 @@ void SharedMemory::Close(void) isSharedMemoryHooked = false; -} \ No newline at end of file +} diff --git a/ets2-telemetry/vs2012/ets2-telemetry.def b/ets2-telemetry/vs2012/ets2-telemetry.def new file mode 100644 index 0000000..30201af --- /dev/null +++ b/ets2-telemetry/vs2012/ets2-telemetry.def @@ -0,0 +1,4 @@ +LIBRARY ets2-telemetry +EXPORTS +scs_telemetry_init=scs_telemetry_init +scs_telemetry_shutdown=scs_telemetry_shutdown diff --git a/ets2-telemetry/vs2012/ets2-telemetry.sln b/ets2-telemetry/vs2012/ets2-telemetry.sln new file mode 100644 index 0000000..7ad2601 --- /dev/null +++ b/ets2-telemetry/vs2012/ets2-telemetry.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ets2-telemetry", "ets2-telemetry.vcxproj", "{0B739935-E779-415A-B76C-0073EAE72A81}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0B739935-E779-415A-B76C-0073EAE72A81}.Debug|Win32.ActiveCfg = Debug|Win32 + {0B739935-E779-415A-B76C-0073EAE72A81}.Debug|Win32.Build.0 = Debug|Win32 + {0B739935-E779-415A-B76C-0073EAE72A81}.Release|Win32.ActiveCfg = Release|x64 + {0B739935-E779-415A-B76C-0073EAE72A81}.Release|Win32.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ets2-telemetry/ets2-telemetry.vcxproj b/ets2-telemetry/vs2012/ets2-telemetry.vcxproj similarity index 84% rename from ets2-telemetry/ets2-telemetry.vcxproj rename to ets2-telemetry/vs2012/ets2-telemetry.vcxproj index 5f084f3..90db33f 100644 --- a/ets2-telemetry/ets2-telemetry.vcxproj +++ b/ets2-telemetry/vs2012/ets2-telemetry.vcxproj @@ -19,28 +19,12 @@ - - - - - - - - - - - - - - - - - - - + + + - {A682E7F2-5D47-4223-9605-CC75FFCB813C} + {0B739935-E779-415A-B76C-0073EAE72A81} ets2-telemetry Win32Proj @@ -113,7 +97,7 @@ Disabled - ../scs_sdk_1_5/include/;inc/;%(AdditionalIncludeDirectories) + ../../scs_sdk_1_5/include/;../inc/;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;TELEMETRY_EXPORTS;%(PreprocessorDefinitions) true EnableFastChecks @@ -134,13 +118,14 @@ - copy "C:\Projects\Software\ets2-sdk-plugin\ets2-telemetry\Debug\ets2-telemetry.dll" "C:\Program Files (x86)\Steam\SteamApps\common\Euro Truck Simulator 2\bin\win_x86\plugins\ets2-telemetry.dll" + + Disabled - ../scs_sdk_1_5/include/;inc/;%(AdditionalIncludeDirectories) + ../scs_sdk_1_4/include/;inc/;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;TELEMETRY_EXPORTS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL @@ -166,7 +151,7 @@ MaxSpeed true - ..\scs_sdk_1_5\include;inc;%(AdditionalIncludeDirectories) + ..\..\scs_sdk_1_5\include;..\inc;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;TELEMETRY_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -188,7 +173,7 @@ MaxSpeed true - ..\scs_sdk_1_5\include;inc;%(AdditionalIncludeDirectories) + ..\..\scs_sdk_1_5\include;..\inc;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;TELEMETRY_EXPORTS;%(PreprocessorDefinitions) MultiThreadedDLL true diff --git a/ets2-telemetry/vs2012/ets2-telemetry.vcxproj.filters b/ets2-telemetry/vs2012/ets2-telemetry.vcxproj.filters new file mode 100644 index 0000000..5d3ffbb --- /dev/null +++ b/ets2-telemetry/vs2012/ets2-telemetry.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file