From 99bb88a035fb04a532e86c3d1afd63bf6794378b Mon Sep 17 00:00:00 2001 From: Paul Dino Jones Date: Mon, 16 Mar 2026 17:40:13 -0400 Subject: [PATCH] Refactor to provide siminfo to help decide if and how a device can be initialize --- src/monocoque/devices/serialdevice.c | 22 +++- src/monocoque/devices/simdevice.c | 10 +- src/monocoque/devices/simdevice.h | 8 +- src/monocoque/devices/sounddevice.c | 160 ++++++++++++++---------- src/monocoque/devices/usbdevice.c | 9 +- src/monocoque/devices/usbhapticdevice.c | 8 +- src/monocoque/devices/usbhapticdevice.h | 2 +- src/monocoque/gameloop/gameloop.c | 42 +++---- src/monocoque/gameloop/loopdata.h | 5 +- src/monocoque/helper/confighelper.h | 13 +- src/monocoque/monocoque.c | 8 +- src/monocoque/simulatorapi/simapi | 2 +- 12 files changed, 164 insertions(+), 125 deletions(-) diff --git a/src/monocoque/devices/serialdevice.c b/src/monocoque/devices/serialdevice.c index 30e6d5e..78f9b18 100644 --- a/src/monocoque/devices/serialdevice.c +++ b/src/monocoque/devices/serialdevice.c @@ -219,7 +219,7 @@ int serial_wheel_free(SimDevice* this) return 0; } -int serialdev_init(SerialDevice* serialdevice, DeviceSettings* ds) +int serialdev_init(SerialDevice* serialdevice, DeviceSettings* ds, SimInfo* siminfo) { slogi("initializing serial device on port %s to %i...", ds->serialdevsettings.portdev, ds->serialdevsettings.baud); int error = 0; @@ -276,7 +276,7 @@ static const vtable arduino_simwind_vtable = { &arduino_simwind_update, &seriald static const vtable arduino_simhaptic_vtable = { &arduino_simhaptic_update, &serialdev_free }; static const vtable serialwheel_vtable = { &serial_wheel_update, &serial_wheel_free }; -SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) { +SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo) { SerialDevice* this = (SerialDevice*) malloc(sizeof(SerialDevice)); @@ -285,6 +285,7 @@ SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) { this->m.derived = this; this->m.vtable = &serial_simdevice_vtable; this->type = SERIALDEV_ARDUINO; + int error = 0; slogt("Attempting to configure arduino device with subtype: %i", ds->dev_subtype); switch (ds->dev_subtype) { @@ -325,6 +326,10 @@ SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) { slogi("Initializing custom arduino device."); break; case (SIMDEVTYPE_SERIALHAPTIC): + if(siminfo->SimSupportsHapticEffects == false) + { + error = MONOCOQUE_ERROR_UNSUPPORTED_SIM_FEATURE; + } this->devicetype = ARDUINODEV__HAPTIC; this->m.vtable = &arduino_simhaptic_vtable; this->u.simhapticdata.motor1 = 0; @@ -359,7 +364,7 @@ SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) { } } - if(this->devicetype == ARDUINODEV__HAPTIC) + if(this->devicetype == ARDUINODEV__HAPTIC && error == 0) { this->m.hapticeffect.threshold = ds->threshold; this->m.hapticeffect.effecttype = ds->effect_type; @@ -370,10 +375,15 @@ SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms) { this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; } - int error = serialdev_init(this, ds); - - if (error < 0) + if(error == 0) { + slogi("Starting serial device initialization"); + error = serialdev_init(this, ds, siminfo); + } + + if (error != 0) + { + slogw("Did not initialize usb device due to error code %i", error); free(this); return NULL; } diff --git a/src/monocoque/devices/simdevice.c b/src/monocoque/devices/simdevice.c index 06bf2e1..aca9fec 100644 --- a/src/monocoque/devices/simdevice.c +++ b/src/monocoque/devices/simdevice.c @@ -24,9 +24,9 @@ int devupdate(SimDevice* this, SimData* simdata) return 0; } -int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, MonocoqueSettings* ms) +int devinit(SimDevice* simdevices, SimInfo* siminfo, int numdevices, DeviceSettings* ds, MonocoqueSettings* ms) { - slogi("initializing simdevices..."); + slogi("initializing simdevices for simapi %i...", siminfo->simulatorapi); int devices = 0; for (int j = 0; j < numdevices; j++) @@ -34,7 +34,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque simdevices[j].initialized = false; if (ds[j].dev_type == SIMDEV_USB) { - USBDevice* sim = new_usb_device(&ds[j], ms); + USBDevice* sim = new_usb_device(&ds[j], ms, siminfo); if (sim != NULL) { simdevices[j] = sim->m; @@ -56,7 +56,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque } else { - SoundDevice* sim = new_sound_device(&ds[j], ms); + SoundDevice* sim = new_sound_device(&ds[j], ms, siminfo); if (sim != NULL) { @@ -75,7 +75,7 @@ int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, Monocoque if (ds[j].dev_type == SIMDEV_SERIAL) { - SerialDevice* sim = new_serial_device(&ds[j], ms); + SerialDevice* sim = new_serial_device(&ds[j], ms, siminfo); if (sim != NULL) { simdevices[j] = sim->m; diff --git a/src/monocoque/devices/simdevice.h b/src/monocoque/devices/simdevice.h index 2f06f8c..cec1329 100644 --- a/src/monocoque/devices/simdevice.h +++ b/src/monocoque/devices/simdevice.h @@ -82,7 +82,7 @@ int arduino_simwind_update(SimDevice* this, SimData* simdata); int arduino_simhaptic_update(SimDevice* this, SimData* simdata); int serialdev_free(SimDevice* this); -SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms); +SerialDevice* new_serial_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo); /********* USB HID Devices *****/ typedef enum @@ -112,7 +112,7 @@ USBDevice; int usbdev_update(SimDevice* this, SimData* simdata); int usbdev_free(SimDevice* this); -USBDevice* new_usb_device(DeviceSettings* ds, MonocoqueSettings* ms); +USBDevice* new_usb_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo); /********* Sound Devices *****/ @@ -137,7 +137,7 @@ int sounddev_gearshift_update(SimDevice* this, SimData* simdata); int sounddev_tyreslip_update(SimDevice* this, SimData* simdata); int sounddev_free(SimDevice* this); -SoundDevice* new_sound_device(DeviceSettings* ds, MonocoqueSettings* ms); +SoundDevice* new_sound_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo); /***** Generic Methods *********/ @@ -145,7 +145,7 @@ int update(SimDevice* simdevice, SimData* simdata); int devupdate(SimDevice* simdevice, SimData* simdata); -int devinit(SimDevice* simdevices, int numdevices, DeviceSettings* ds, MonocoqueSettings* ms); +int devinit(SimDevice* simdevices, SimInfo* siminfo, int numdevices, DeviceSettings* ds, MonocoqueSettings* ms); int devfree(SimDevice* simdevices, int numdevices); diff --git a/src/monocoque/devices/sounddevice.c b/src/monocoque/devices/sounddevice.c index e123f07..09ec995 100644 --- a/src/monocoque/devices/sounddevice.c +++ b/src/monocoque/devices/sounddevice.c @@ -231,88 +231,112 @@ static const vtable tyrelock_sound_simdevice_vtable = { &sounddev_tyrelock_updat static const vtable absbrakes_sound_simdevice_vtable = { &sounddev_absbrakes_update, &sounddev_free }; static const vtable suspension_sound_simdevice_vtable = { &sounddev_suspension_update, &sounddev_free }; -SoundDevice* new_sound_device(DeviceSettings* ds, MonocoqueSettings* ms) { +SoundDevice* new_sound_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo) { SoundDevice* this = (SoundDevice*) malloc(sizeof(SoundDevice)); this->m.update = &update; this->m.free = &simdevfree; this->m.derived = this; + int error = 0; - slogt("Attempting to configure sound device with subtype: %i", ds->effect_type); - switch (ds->effect_type) { - case (EFFECT_ENGINERPM): - this->m.hapticeffect.effecttype = EFFECT_ENGINERPM; - this->m.vtable = &engine_sound_simdevice_vtable; - slogi("Initializing sound device for engine vibrations."); - break; - case (EFFECT_GEARSHIFT): - this->m.hapticeffect.effecttype = EFFECT_GEARSHIFT; - this->m.vtable = &gear_sound_simdevice_vtable; - slogi("Initializing sound device for gear shift vibrations."); - break; + switch (ds->effect_type) + { case (EFFECT_TYRESLIP): - this->m.hapticeffect.effecttype = EFFECT_TYRESLIP; - this->m.hapticeffect.threshold = ds->threshold; - - this->m.hapticeffect.threshold = ds->threshold; - slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); - this->m.hapticeffect.tyre = ds->tyre; - this->m.hapticeffect.useconfig = ms->useconfig; - this->m.hapticeffect.configcheck = &ms->configcheck; - this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; - - this->m.vtable = &tyreslip_sound_simdevice_vtable; - slogi("Initializing sound device for tyre slip vibrations."); - break; case (EFFECT_TYRELOCK): - this->m.hapticeffect.effecttype = EFFECT_TYRELOCK; - this->m.hapticeffect.threshold = ds->threshold; - - this->m.hapticeffect.threshold = ds->threshold; - slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); - this->m.hapticeffect.tyre = ds->tyre; - this->m.hapticeffect.useconfig = ms->useconfig; - this->m.hapticeffect.configcheck = &ms->configcheck; - this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; - - this->m.vtable = &tyrelock_sound_simdevice_vtable; - slogi("Initializing sound device for tyre slip vibrations."); - break; case (EFFECT_ABSBRAKES): - this->m.hapticeffect.effecttype = EFFECT_ABSBRAKES; - this->m.hapticeffect.threshold = ds->threshold; - - this->m.hapticeffect.threshold = ds->threshold; - slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); - this->m.hapticeffect.tyre = ds->tyre; - this->m.hapticeffect.useconfig = ms->useconfig; - this->m.hapticeffect.configcheck = &ms->configcheck; - this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; - - this->m.vtable = &absbrakes_sound_simdevice_vtable; - slogi("Initializing sound device for abs vibrations."); - break; - case (EFFECT_SUSPENSION): - this->m.hapticeffect.effecttype = EFFECT_SUSPENSION; - this->m.hapticeffect.threshold = ds->threshold; - - this->m.hapticeffect.threshold = ds->threshold; - slogt("Haptic effect: %i %i on tyre %i", this->m.hapticeffect.effecttype, ds->effect_type, ds->tyre); - this->m.hapticeffect.tyre = ds->tyre; - this->m.hapticeffect.useconfig = ms->useconfig; - this->m.hapticeffect.configcheck = &ms->configcheck; - this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; - - this->m.vtable = &suspension_sound_simdevice_vtable; - slogi("Initializing sound device for suspension vibrations."); - break; + if(siminfo->SimSupportsHapticEffects == false) + { + slogw("Skipping sound effect setup because sim does not support haptic effects"); + error = MONOCOQUE_ERROR_UNSUPPORTED_SIM_FEATURE; + } + defaut: + error = 0; } - slogt("Attempting to use sound device %s", ds->sounddevsettings.dev); - int error = sounddev_init(this, ds->sounddevsettings.dev, ds->tyre, ds->sounddevsettings); + if(error == 0) + { + slogt("Attempting to configure sound device with subtype: %i", ds->effect_type); + switch (ds->effect_type) + { + case (EFFECT_ENGINERPM): + this->m.hapticeffect.effecttype = EFFECT_ENGINERPM; + this->m.vtable = &engine_sound_simdevice_vtable; + slogi("Initializing sound device for engine vibrations."); + break; + case (EFFECT_GEARSHIFT): + this->m.hapticeffect.effecttype = EFFECT_GEARSHIFT; + this->m.vtable = &gear_sound_simdevice_vtable; + slogi("Initializing sound device for gear shift vibrations."); + break; + case (EFFECT_TYRESLIP): + this->m.hapticeffect.effecttype = EFFECT_TYRESLIP; + this->m.hapticeffect.threshold = ds->threshold; + + this->m.hapticeffect.threshold = ds->threshold; + slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); + this->m.hapticeffect.tyre = ds->tyre; + this->m.hapticeffect.useconfig = ms->useconfig; + this->m.hapticeffect.configcheck = &ms->configcheck; + this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; + + this->m.vtable = &tyreslip_sound_simdevice_vtable; + slogi("Initializing sound device for tyre slip vibrations."); + break; + case (EFFECT_TYRELOCK): + this->m.hapticeffect.effecttype = EFFECT_TYRELOCK; + this->m.hapticeffect.threshold = ds->threshold; + + this->m.hapticeffect.threshold = ds->threshold; + slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); + this->m.hapticeffect.tyre = ds->tyre; + this->m.hapticeffect.useconfig = ms->useconfig; + this->m.hapticeffect.configcheck = &ms->configcheck; + this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; + + this->m.vtable = &tyrelock_sound_simdevice_vtable; + slogi("Initializing sound device for tyre slip vibrations."); + break; + case (EFFECT_ABSBRAKES): + this->m.hapticeffect.effecttype = EFFECT_ABSBRAKES; + this->m.hapticeffect.threshold = ds->threshold; + + this->m.hapticeffect.threshold = ds->threshold; + slogt("Haptic effect: %i %i", this->m.hapticeffect.effecttype, ds->effect_type); + this->m.hapticeffect.tyre = ds->tyre; + this->m.hapticeffect.useconfig = ms->useconfig; + this->m.hapticeffect.configcheck = &ms->configcheck; + this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; + + this->m.vtable = &absbrakes_sound_simdevice_vtable; + slogi("Initializing sound device for abs vibrations."); + break; + + case (EFFECT_SUSPENSION): + this->m.hapticeffect.effecttype = EFFECT_SUSPENSION; + this->m.hapticeffect.threshold = ds->threshold; + + this->m.hapticeffect.threshold = ds->threshold; + slogt("Haptic effect: %i %i on tyre %i", this->m.hapticeffect.effecttype, ds->effect_type, ds->tyre); + this->m.hapticeffect.tyre = ds->tyre; + this->m.hapticeffect.useconfig = ms->useconfig; + this->m.hapticeffect.configcheck = &ms->configcheck; + this->m.hapticeffect.tyrediameterconfig = ms->tyre_diameter_config; + + this->m.vtable = &suspension_sound_simdevice_vtable; + slogi("Initializing sound device for suspension vibrations."); + break; + } + } + + if(error == 0) + { + slogt("Attempting to use sound device %s", ds->sounddevsettings.dev); + error = sounddev_init(this, ds->sounddevsettings.dev, ds->tyre, ds->sounddevsettings); + } + if (error != 0) { free(this); diff --git a/src/monocoque/devices/usbdevice.c b/src/monocoque/devices/usbdevice.c index ad080bf..8317489 100644 --- a/src/monocoque/devices/usbdevice.c +++ b/src/monocoque/devices/usbdevice.c @@ -54,7 +54,7 @@ int usbdev_free(SimDevice* this) return 0; } -int usbdev_init(USBDevice* usbdevice, DeviceSettings* ds) +int usbdev_init(USBDevice* usbdevice, DeviceSettings* ds, SimInfo* siminfo) { slogi("initializing usb device..."); int error = 0; @@ -70,7 +70,7 @@ int usbdev_init(USBDevice* usbdevice, DeviceSettings* ds) error = wheeldev_init(usbdevice, ds); break; case USBDEV_GENERICHAPTIC : - error = usbhapticdev_init(&usbdevice->u.hapticdevice, ds); + error = usbhapticdev_init(&usbdevice->u.hapticdevice, ds, siminfo); break; } @@ -79,7 +79,7 @@ int usbdev_init(USBDevice* usbdevice, DeviceSettings* ds) static const vtable usb_simdevice_vtable = { &usbdev_update, &usbdev_free }; -USBDevice* new_usb_device(DeviceSettings* ds, MonocoqueSettings* ms) { +USBDevice* new_usb_device(DeviceSettings* ds, MonocoqueSettings* ms, SimInfo* siminfo) { USBDevice* this = (USBDevice*) malloc(sizeof(USBDevice)); @@ -112,10 +112,11 @@ USBDevice* new_usb_device(DeviceSettings* ds, MonocoqueSettings* ms) { this->type = USBDEV_GENERICHAPTIC; } - int error = usbdev_init(this, ds); + int error = usbdev_init(this, ds, siminfo); if (error != 0) { + slogw("Did not initialize usb device due to error code %i", error); free(this); return NULL; } diff --git a/src/monocoque/devices/usbhapticdevice.c b/src/monocoque/devices/usbhapticdevice.c index c130122..89db1b5 100644 --- a/src/monocoque/devices/usbhapticdevice.c +++ b/src/monocoque/devices/usbhapticdevice.c @@ -67,8 +67,14 @@ int usbhapticdev_free(USBGenericHapticDevice* usbhapticdevice) return 0; } -int usbhapticdev_init(USBGenericHapticDevice* usbhapticdevice, DeviceSettings* ds) +int usbhapticdev_init(USBGenericHapticDevice* usbhapticdevice, DeviceSettings* ds, SimInfo* siminfo) { + if(siminfo->SimSupportsHapticEffects == false) + { + slogi("This sim does not support haptic effects"); + return MONOCOQUE_ERROR_UNSUPPORTED_SIM_FEATURE; + } + int error = 0; usbhapticdevice->state = 0; usbhapticdevice->value0 = ds->usbdevsettings.value0; diff --git a/src/monocoque/devices/usbhapticdevice.h b/src/monocoque/devices/usbhapticdevice.h index bbc86ec..edcc4f0 100644 --- a/src/monocoque/devices/usbhapticdevice.h +++ b/src/monocoque/devices/usbhapticdevice.h @@ -31,7 +31,7 @@ USBGenericHapticDevice; int usbhapticdev_update(USBGenericHapticDevice* hapticdevice, SimData* simdata, int tyre, int useconfig, int* configcheck, char* configfile); -int usbhapticdev_init(USBGenericHapticDevice* hapticdevice, DeviceSettings* ds); +int usbhapticdev_init(USBGenericHapticDevice* hapticdevice, DeviceSettings* ds, SimInfo* siminfo); int usbhapticdev_free(USBGenericHapticDevice* hapticdevice); #endif diff --git a/src/monocoque/gameloop/gameloop.c b/src/monocoque/gameloop/gameloop.c index 6b565c6..16407b0 100644 --- a/src/monocoque/gameloop/gameloop.c +++ b/src/monocoque/gameloop/gameloop.c @@ -225,7 +225,6 @@ void devicetimercallback(uv_timer_t* handle) SimData* simdata = f->simdata; SimDevice* device = f->simdevice; device->update(device, simdata); - } void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata) @@ -233,18 +232,18 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata) if (doui == true) { - slogi("looking for ui config %s pass 1", ms->config_str); - int confignum = getconfigtouse2(ms->config_str, simdata->car, f->sim); + slogi("looking for ui config %s pass 1 simapi %i", ms->config_str, f->siminfo.simulatorapi); + int confignum = getconfigtouse2(ms->config_str, simdata->car, f->siminfo.simulatorapi); slogi("first pass finished"); if(confignum == -1) { slogi("looking for ui config %s pass 2", ms->config_str); - confignum = getconfigtouse1(ms->config_str, simdata->car, f->sim); + confignum = getconfigtouse1(ms->config_str, simdata->car, f->siminfo.simulatorapi); } if(confignum == -1) { slogi("looking for ui config %s pass 3", ms->config_str); - confignum = getconfigtouse(ms->config_str, simdata->car, f->sim); + confignum = getconfigtouse(ms->config_str, simdata->car, f->siminfo.simulatorapi); } int configureddevices; @@ -259,7 +258,8 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata) } f->simdevices = malloc(f->numdevices * sizeof(SimDevice)); - int initdevices = devinit(f->simdevices, configureddevices, ds, ms); + int initdevices = devinit(f->simdevices, &f->siminfo, configureddevices, ds, ms); + slogi("initialized %i devices", initdevices); for( int i = 0; i < configureddevices; i++) { @@ -364,7 +364,7 @@ void releaseloop(loop_data* f, SimData* simdata, SimMap* simmap) // uv_close((uv_handle_t*)&recv_socket, NULL); //} slogi("releasing devices, please wait"); - + //attempt tyre diameter saving if(hasTyreDiameter(simdata) == true) { @@ -446,11 +446,11 @@ void shmdatamapcallback(uv_timer_t* handle) //appstate = 2; if (appstate == 2) { - simapi_datamap(simdata, simmap, f->map, false, NULL); + simapi_datamap(simdata, simmap, f->siminfo.mapapi, false, NULL); looprun(ms, f, simdata); } - if (f->simstate == false || simdata->simstatus <= 1 || appstate <= 1) + if (f->siminfo.isSimOn == false || simdata->simstatus <= 1 || appstate <= 1) { releaseloop(f, simdata, simmap); } @@ -483,11 +483,11 @@ static void on_udp_recv(uv_udp_t* handle, ssize_t nread, const uv_buf_t* rcvbuf, if (appstate == 2) { - simapi_datamap(simdata, simmap, f->map, true, a); + simapi_datamap(simdata, simmap, f->siminfo.mapapi, true, a); looprun(ms, f, simdata); } - if (f->simstate == false || simdata->simstatus <= 1 || appstate <= 1) + if (f->siminfo.isSimOn == false || simdata->simstatus <= 1 || appstate <= 1) { releaseloop(f, simdata, simmap); } @@ -511,7 +511,7 @@ void udpstart(MonocoqueSettings* sms, loop_data* f, SimData* simdata, SimMap* si { if (appstate == 2) { - simapi_datamap(simdata, simmap, f->sim, true, NULL); + simapi_datamap(simdata, simmap, f->siminfo.simulatorapi, true, NULL); if (doui == true) { looprun(sms, f, simdata); @@ -528,19 +528,14 @@ void datacheckcallback(uv_timer_t* handle) if ( appstate == 1 ) { - SimInfo si = simapi_get_sim(simdata, simmap, f->ms->force_udp_mode, startudp, false); - //TODO: move all this to a siminfo struct in loop_data - f->simstate = si.isSimOn; - f->sim = si.simulatorapi; - f->map = si.mapapi; - f->use_udp = si.SimUsesUDP; + f->siminfo = simapi_get_sim(simdata, simmap, f->ms->force_udp_mode, startudp, false); if(f->ms->force_udp_mode == true) { f->use_udp = true; } } - if (f->simstate == true && simdata->simstatus >= 2) + if (f->siminfo.isSimOn == true && simdata->simstatus >= 2) { if ( appstate == 1 ) { @@ -569,8 +564,8 @@ void datacheckcallback(uv_timer_t* handle) } if(appstate == 2) { - SimInfo si = simapi_get_sim(simdata, simmap, f->ms->force_udp_mode, NULL, false); - if(si.isSimOn == false) + f->siminfo = simapi_get_sim(simdata, simmap, f->ms->force_udp_mode, NULL, false); + if(f->siminfo.isSimOn == false) { appstate = 1; releaseloop(f, simdata, simmap); @@ -638,10 +633,9 @@ int monocoque_mainloop(MonocoqueSettings* ms) baton->simmap = simmap; baton->simdata = simdata; baton->ms = ms; - baton->simstate = false; baton->uion = false; baton->releasing = false; - baton->sim = 0; + baton->use_udp = false; baton->req.data = (void*) baton; simapi_set_log_info(simapilib_loginfo); @@ -728,7 +722,7 @@ int tester(SimDevice* devices, int numdevices) sleep(1); fprintf(stdout, "Revving rpm from 1000 to 8000 and back\n"); - + // TODO: look into this, my serial leds make this hang for (int r = 0; r < 8000; r += 3) { simdata->rpms = 1000 + r; diff --git a/src/monocoque/gameloop/loopdata.h b/src/monocoque/gameloop/loopdata.h index d2d37ce..85e5acf 100644 --- a/src/monocoque/gameloop/loopdata.h +++ b/src/monocoque/gameloop/loopdata.h @@ -13,18 +13,17 @@ typedef struct device_loop_data uv_work_t req; SimData* simdata; SimDevice* simdevice; + SimInfo siminfo; } device_loop_data; typedef struct loop_data { uv_work_t req; - SimulatorAPI sim; - SimulatorAPI map; bool use_udp; - bool simstate; bool uion; bool releasing; int numdevices; + SimInfo siminfo; MonocoqueSettings* ms; SimData* simdata; SimMap* simmap; diff --git a/src/monocoque/helper/confighelper.h b/src/monocoque/helper/confighelper.h index f9792df..81ac684 100644 --- a/src/monocoque/helper/confighelper.h +++ b/src/monocoque/helper/confighelper.h @@ -109,12 +109,13 @@ MonocoqueGear; typedef enum { - MONOCOQUE_ERROR_NONE = 0, - MONOCOQUE_ERROR_UNKNOWN = 1, - MONOCOQUE_ERROR_INVALID_SIM = 2, - MONOCOQUE_ERROR_INVALID_DEV = 3, - MONOCOQUE_ERROR_NODATA = 4, - MONOCOQUE_ERROR_UNKNOWN_DEV = 5 + MONOCOQUE_ERROR_NONE = 0, + MONOCOQUE_ERROR_UNKNOWN = 1, + MONOCOQUE_ERROR_INVALID_SIM = 2, + MONOCOQUE_ERROR_INVALID_DEV = 3, + MONOCOQUE_ERROR_NODATA = 4, + MONOCOQUE_ERROR_UNKNOWN_DEV = 5, + MONOCOQUE_ERROR_UNSUPPORTED_SIM_FEATURE = 6, } MonocoqueError; diff --git a/src/monocoque/monocoque.c b/src/monocoque/monocoque.c index a05da88..b75447c 100644 --- a/src/monocoque/monocoque.c +++ b/src/monocoque/monocoque.c @@ -193,6 +193,8 @@ int main(int argc, char** argv) SimDevice* tachdev = malloc(sizeof(SimDevice)); tachdev->initialized = false; SimData* sdata = malloc(sizeof(SimData)); + SimInfo* siminfo = malloc(sizeof(SimInfo)); + simapi_set_faux_siminfo(siminfo); DeviceSettings* ds = malloc(sizeof(DeviceSettings)); error = devsetup("USB", "Tachometer", "None", ms, ds, NULL); @@ -205,7 +207,7 @@ int main(int argc, char** argv) { int devices = 0; - devices = devinit(tachdev, 1, ds, ms); + devices = devinit(tachdev, siminfo, 1, ds, ms); if(devices < 1) { error = MONOCOQUE_ERROR_INVALID_DEV; @@ -288,7 +290,9 @@ int main(int argc, char** argv) int numdevices = uiloadconfig(ms->config_str, confignum, configureddevices, ms, ds); SimDevice* simdevices = malloc(numdevices * sizeof(SimDevice)); - int initdevices = devinit(simdevices, configureddevices, ds, ms); + SimInfo* siminfo = malloc(sizeof(SimInfo)); + simapi_set_faux_siminfo(siminfo); + int initdevices = devinit(simdevices, siminfo, configureddevices, ds, ms); for( int i = 0; i < configureddevices; i++) { settingsfree(ds[i]); diff --git a/src/monocoque/simulatorapi/simapi b/src/monocoque/simulatorapi/simapi index 1617ffc..9f732a7 160000 --- a/src/monocoque/simulatorapi/simapi +++ b/src/monocoque/simulatorapi/simapi @@ -1 +1 @@ -Subproject commit 1617ffc8c2b26d219945a1713060e1fae0917005 +Subproject commit 9f732a735d35b77aff4ce564f8f792e0ad7628d2