Add support for per device fps settings.
This commit is contained in:
parent
317adf2187
commit
def2bfbb89
|
|
@ -40,6 +40,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque
|
|||
simdevices[j] = sim->m;
|
||||
simdevices[j].initialized = true;
|
||||
simdevices[j].type = SIMDEV_USB;
|
||||
simdevices[j].fps = ds[j].fps;
|
||||
devices++;
|
||||
}
|
||||
else
|
||||
|
|
@ -57,6 +58,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque
|
|||
simdevices[j] = sim->m;
|
||||
simdevices[j].initialized = true;
|
||||
simdevices[j].type = SIMDEV_SOUND;
|
||||
simdevices[j].fps = ds[j].fps;
|
||||
devices++;
|
||||
}
|
||||
else
|
||||
|
|
@ -73,6 +75,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque
|
|||
simdevices[j] = sim->m;
|
||||
simdevices[j].initialized = true;
|
||||
simdevices[j].type = SIMDEV_SERIAL;
|
||||
simdevices[j].fps = ds[j].fps;
|
||||
devices++;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ struct SimDevice
|
|||
int (*free)(SimDevice*);
|
||||
void* derived;
|
||||
int id;
|
||||
int fps;
|
||||
bool initialized;
|
||||
DeviceType type;
|
||||
HapticEffect hapticeffect;
|
||||
|
|
|
|||
|
|
@ -202,6 +202,22 @@ void simapilib_logtrace(char* message)
|
|||
slog_display(SLOG_TRACE, 1, message);
|
||||
}
|
||||
|
||||
void on_timer_close_complete(uv_handle_t* handle)
|
||||
{
|
||||
free(handle);
|
||||
}
|
||||
|
||||
|
||||
void devicetimercallback(uv_timer_t* handle)
|
||||
{
|
||||
void* b = uv_handle_get_data((uv_handle_t*) handle);
|
||||
device_loop_data* f = (device_loop_data*) b;
|
||||
SimData* simdata = f->simdata;
|
||||
SimDevice* device = f->simdevice;
|
||||
device->update(device, simdata);
|
||||
|
||||
}
|
||||
|
||||
void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata)
|
||||
{
|
||||
|
||||
|
|
@ -226,20 +242,42 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata)
|
|||
}
|
||||
free(ds);
|
||||
doui = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
showstats(simdata);
|
||||
SimDevice* devices = f->simdevices;
|
||||
|
||||
|
||||
int numdevices = f->numdevices;
|
||||
SimDevice* devices = f->simdevices;
|
||||
f->device_timers = (malloc(uv_handle_size(UV_TIMER) * numdevices));
|
||||
f->device_batons = (malloc(sizeof(device_loop_data) * numdevices));
|
||||
|
||||
for (int x = 0; x < numdevices; x++)
|
||||
{
|
||||
if (devices[x].initialized == true)
|
||||
{
|
||||
devices[x].update(&devices[x], simdata);
|
||||
device_loop_data* dld = f->device_batons + (sizeof(device_loop_data) * x);
|
||||
dld->simdevice = &devices[x];
|
||||
dld->simdata = simdata;
|
||||
uv_timer_t* dt = (f->device_timers + (uv_handle_size(UV_TIMER) * x));
|
||||
uv_timer_init(uv_default_loop(), dt);
|
||||
uv_handle_set_data((uv_handle_t*) dt, (void*) dld);
|
||||
int interval = 1000/devices[x].fps;
|
||||
uv_timer_start(dt, devicetimercallback, 0, interval);
|
||||
slogi("starting device at %i fps (%i ms ticks)", devices[x].fps, interval);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
showstats(simdata);
|
||||
//SimDevice* devices = f->simdevices;
|
||||
//int numdevices = f->numdevices;
|
||||
//for (int x = 0; x < numdevices; x++)
|
||||
//{
|
||||
// if (devices[x].initialized == true)
|
||||
// {
|
||||
// devices[x].update(&devices[x], simdata);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
void shmdatamapcallback(uv_timer_t* handle)
|
||||
|
|
@ -270,6 +308,21 @@ void shmdatamapcallback(uv_timer_t* handle)
|
|||
// help things spin down
|
||||
simdata->rpms = 0;
|
||||
simdata->velocity = 0;
|
||||
|
||||
for (int x = 0; x < numdevices; x++)
|
||||
{
|
||||
if (devices[x].initialized == true)
|
||||
{
|
||||
uv_timer_t* dt = (uv_timer_t*) f->device_timers + (uv_handle_size(UV_TIMER) * x);
|
||||
slogt("attempting device timer stop and release");
|
||||
slogt("timer active status %i", uv_is_active((uv_handle_t*) dt));
|
||||
uv_timer_stop(dt);
|
||||
//uv_close((uv_handle_t*) dt, on_timer_close_complete);
|
||||
}
|
||||
}
|
||||
free(f->device_batons);
|
||||
free(f->device_timers);
|
||||
slogt("stopped device timers");
|
||||
for (int x = 0; x < numdevices; x++)
|
||||
{
|
||||
if (devices[x].initialized == true)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,12 @@
|
|||
#include "../simulatorapi/simapi/simapi/simdata.h"
|
||||
#include "../simulatorapi/simapi/simapi/simmapper.h"
|
||||
|
||||
typedef struct device_loop_data
|
||||
{
|
||||
uv_work_t req;
|
||||
SimData* simdata;
|
||||
SimDevice* simdevice;
|
||||
} device_loop_data;
|
||||
|
||||
typedef struct loop_data
|
||||
{
|
||||
|
|
@ -23,6 +29,10 @@ typedef struct loop_data
|
|||
SimData* simdata;
|
||||
SimMap* simmap;
|
||||
SimDevice* simdevices;
|
||||
uv_timer_t* device_timers;
|
||||
device_loop_data* device_batons;
|
||||
} loop_data;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -465,6 +465,8 @@ int devsetup(const char* device_type, const char* device_subtype, const char* co
|
|||
}
|
||||
|
||||
|
||||
ds->fps = 60;
|
||||
config_setting_lookup_int(device_settings, "fps", &ds->fps);
|
||||
|
||||
if (ds->dev_subtype == SIMDEVTYPE_TACHOMETER)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ USBDeviceSettings;
|
|||
typedef struct
|
||||
{
|
||||
bool is_valid;
|
||||
int fps;
|
||||
DeviceType dev_type;
|
||||
DeviceSubType dev_subtype;
|
||||
DeviceSubSubType dev_subsubtype;
|
||||
|
|
|
|||
Loading…
Reference in New Issue