diff --git a/src/monocoque/helper/confighelper.c b/src/monocoque/helper/confighelper.c index 7d51f40..82353dc 100644 --- a/src/monocoque/helper/confighelper.c +++ b/src/monocoque/helper/confighelper.c @@ -19,6 +19,11 @@ int strtogame(const char* game, MonocoqueSettings* ms) slogd("Setting simulator to Assetto Corsa"); ms->sim_name = SIMULATOR_ASSETTO_CORSA; } + else if (strcmp(game, "rf2") == 0) + { + slogd("Setting simulator to RFactor 2"); + ms->sim_name = SIMULATOR_RFACTOR2; + } else if (strcmp(game, "test") == 0) { diff --git a/src/monocoque/helper/confighelper.h b/src/monocoque/helper/confighelper.h index 0ef4910..ee1177d 100644 --- a/src/monocoque/helper/confighelper.h +++ b/src/monocoque/helper/confighelper.h @@ -29,7 +29,9 @@ DeviceSubType; typedef enum { SIMULATOR_MONOCOQUE_TEST = 0, - SIMULATOR_ASSETTO_CORSA = 1 + SIMULATOR_ASSETTO_CORSA = 1, + SIMULATOR_RFACTOR = 2, + SIMULATOR_RFACTOR2 = 3 } Simulator; diff --git a/src/monocoque/simulatorapi/rf2.h b/src/monocoque/simulatorapi/rf2.h new file mode 100644 index 0000000..583fe41 --- /dev/null +++ b/src/monocoque/simulatorapi/rf2.h @@ -0,0 +1,21 @@ +#ifndef _RF2_H +#define _RF2_H + +#include +#include "simapi/rf2data.h" + +#define RF2_TELEMETRY_FILE "rFactor2SMMP_Telemetry" +#define RF2_SCORING_FILE "rFactor2SMMP_Scoring" + +typedef struct +{ + bool has_telemetry; + bool has_scoring; + void* telemetry_map_addr; + void* scoring_map_addr; + struct rF2Telemetry rf2_telemetry; + //struct rF2Scoring rf2_scoring; +} +RF2Map; + +#endif diff --git a/src/monocoque/simulatorapi/simapi b/src/monocoque/simulatorapi/simapi index 5faf120..04fd2ca 160000 --- a/src/monocoque/simulatorapi/simapi +++ b/src/monocoque/simulatorapi/simapi @@ -1 +1 @@ -Subproject commit 5faf120d84378cdbe3bd8a0347f38fb9d0e9a87e +Subproject commit 04fd2ca8ed590f562ad6423d9cf9f076daa28b95 diff --git a/src/monocoque/simulatorapi/simmapper.c b/src/monocoque/simulatorapi/simmapper.c index e451106..ce81fd4 100644 --- a/src/monocoque/simulatorapi/simmapper.c +++ b/src/monocoque/simulatorapi/simmapper.c @@ -2,15 +2,19 @@ #include #include #include +#include +#include #include "simmapper.h" #include "simdata.h" #include "test.h" #include "ac.h" +#include "rf2.h" #include "../helper/confighelper.h" #include "../slog/slog.h" #include "simapi/acdata.h" +#include "simapi/rf2data.h" int simdatamap(SimData* simdata, SimMap* simmap, Simulator simulator) @@ -32,9 +36,18 @@ int simdatamap(SimData* simdata, SimMap* simmap, Simulator simulator) simdata->velocity = simmap->d.ac.ac_physics.speedKmh; simdata->altitude = 1; break; + case SIMULATOR_RFACTOR2 : + memcpy(&simmap->d.rf2.rf2_telemetry, simmap->d.rf2.telemetry_map_addr, sizeof(simmap->d.rf2.rf2_telemetry)); + + simdata->velocity = abs(ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mLocalVel.z * 3.6)); + simdata->rpms = ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mEngineRPM); + simdata->gear = simmap->d.rf2.rf2_telemetry.mVehicles[0].mGear; + simdata->maxrpm - ceil(simmap->d.rf2.rf2_telemetry.mVehicles[0].mEngineMaxRPM); + break; } } + int siminit(SimData* simdata, SimMap* simmap, Simulator simulator) { slogi("searching for simulator data..."); @@ -91,6 +104,28 @@ int siminit(SimData* simdata, SimMap* simmap, Simulator simulator) slogi("found data for Assetto Corsa..."); break; + + case SIMULATOR_RFACTOR2 : + + simmap->d.rf2.has_telemetry=false; + simmap->d.rf2.has_scoring=false; + simmap->fd = shm_open(RF2_TELEMETRY_FILE, O_RDONLY, S_IRUSR | S_IWUSR); + if (simmap->fd == -1) + { + slogd("could not open RFactor2 Telemetry engine"); + return MONOCOQUE_ERROR_NODATA; + } + simmap->d.rf2.telemetry_map_addr = mmap(NULL, sizeof(simmap->d.rf2.rf2_telemetry), PROT_READ, MAP_SHARED, simmap->fd, 0); + if (simmap->d.rf2.telemetry_map_addr == MAP_FAILED) + { + slogd("could not retrieve RFactor2 telemetry data"); + return 30; + } + simmap->d.rf2.has_telemetry=true; + + + slogi("found data for RFactor2..."); + break; } return error; diff --git a/src/monocoque/simulatorapi/simmapper.h b/src/monocoque/simulatorapi/simmapper.h index 96ba785..981b050 100644 --- a/src/monocoque/simulatorapi/simmapper.h +++ b/src/monocoque/simulatorapi/simmapper.h @@ -1,12 +1,14 @@ #ifndef _SIMMAPPER_H -#define _SIMMAPPEE_H +#define _SIMMAPPER_H #include "ac.h" +#include "rf2.h" #include "simdata.h" #include "../helper/confighelper.h" #include "simapi/acdata.h" +#include "simapi/rf2data.h" typedef struct { @@ -15,6 +17,7 @@ typedef struct union { ACMap ac; + RF2Map rf2; } d; } SimMap;