Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
485a3489a9 | |
|
|
aeaced3676 |
|
|
@ -33,28 +33,35 @@ int showstats(SimData* simdata)
|
|||
|
||||
int speed = simdata->velocity;
|
||||
int digits = 0;
|
||||
while (speed > 0)
|
||||
if (speed > 0)
|
||||
{
|
||||
int mod = speed % 10;
|
||||
speed = speed / 10;
|
||||
digits++;
|
||||
while (speed > 0)
|
||||
{
|
||||
int mod = speed % 10;
|
||||
speed = speed / 10;
|
||||
digits++;
|
||||
}
|
||||
speed = simdata->velocity;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (speed > 0)
|
||||
{
|
||||
int mod = speed % 10;
|
||||
s[digit] = mod;
|
||||
speed = speed / 10;
|
||||
digit++;
|
||||
}
|
||||
speed = simdata->velocity;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
}
|
||||
}
|
||||
speed = simdata->velocity;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (speed > 0)
|
||||
else
|
||||
{
|
||||
int mod = speed % 10;
|
||||
s[digit] = mod;
|
||||
speed = speed / 10;
|
||||
digit++;
|
||||
}
|
||||
speed = simdata->velocity;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
fputc('0', stdout);
|
||||
}
|
||||
fputc(' ', stdout);
|
||||
}
|
||||
|
|
@ -69,28 +76,35 @@ int showstats(SimData* simdata)
|
|||
|
||||
int rpms = simdata->rpms;
|
||||
int digits = 0;
|
||||
while (rpms > 0)
|
||||
if (rpms > 0)
|
||||
{
|
||||
int mod = rpms % 10;
|
||||
rpms = rpms / 10;
|
||||
digits++;
|
||||
while (rpms > 0)
|
||||
{
|
||||
int mod = rpms % 10;
|
||||
rpms = rpms / 10;
|
||||
digits++;
|
||||
}
|
||||
rpms = simdata->rpms;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (rpms > 0)
|
||||
{
|
||||
int mod = rpms % 10;
|
||||
s[digit] = mod;
|
||||
rpms = rpms / 10;
|
||||
digit++;
|
||||
}
|
||||
rpms = simdata->rpms;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
}
|
||||
}
|
||||
rpms = simdata->rpms;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (rpms > 0)
|
||||
else
|
||||
{
|
||||
int mod = rpms % 10;
|
||||
s[digit] = mod;
|
||||
rpms = rpms / 10;
|
||||
digit++;
|
||||
}
|
||||
rpms = simdata->rpms;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
fputc('0', stdout);
|
||||
}
|
||||
fputc(' ', stdout);
|
||||
}
|
||||
|
|
@ -115,28 +129,35 @@ int showstats(SimData* simdata)
|
|||
|
||||
int alt = simdata->altitude;
|
||||
int digits = 0;
|
||||
while (alt > 0)
|
||||
if (alt > 0)
|
||||
{
|
||||
int mod = alt % 10;
|
||||
alt = alt / 10;
|
||||
digits++;
|
||||
while (alt > 0)
|
||||
{
|
||||
int mod = alt % 10;
|
||||
alt = alt / 10;
|
||||
digits++;
|
||||
}
|
||||
alt = simdata->altitude;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (alt > 0)
|
||||
{
|
||||
int mod = alt % 10;
|
||||
s[digit] = mod;
|
||||
alt = alt / 10;
|
||||
digit++;
|
||||
}
|
||||
alt = simdata->altitude;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
}
|
||||
}
|
||||
alt = simdata->altitude;
|
||||
int s[digits];
|
||||
int digit = 0;
|
||||
while (alt > 0)
|
||||
else
|
||||
{
|
||||
int mod = alt % 10;
|
||||
s[digit] = mod;
|
||||
alt = alt / 10;
|
||||
digit++;
|
||||
}
|
||||
alt = simdata->altitude;
|
||||
digit = digits;
|
||||
while (digit > 0)
|
||||
{
|
||||
fputc(s[digit-1]+'0', stdout);
|
||||
digit--;
|
||||
fputc('0', stdout);
|
||||
}
|
||||
fputc(' ', stdout);
|
||||
}
|
||||
|
|
@ -208,7 +229,8 @@ int looper(SimDevice* devices[], int numdevices, Simulator simulator)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stdout, "\n");
|
||||
fflush(stdout);
|
||||
tcsetattr(0, TCSANOW, &canonicalmode);
|
||||
|
||||
free(simdata);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef _RF2_H
|
||||
#define _RF2_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#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
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 5faf120d84378cdbe3bd8a0347f38fb9d0e9a87e
|
||||
Subproject commit 04fd2ca8ed590f562ad6423d9cf9f076daa28b95
|
||||
|
|
@ -2,15 +2,19 @@
|
|||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue