diff --git a/src/monocoque/devices/simdevice.h b/src/monocoque/devices/simdevice.h index a5fa53b..5a4d7e7 100644 --- a/src/monocoque/devices/simdevice.h +++ b/src/monocoque/devices/simdevice.h @@ -31,6 +31,7 @@ struct SimDevice int fps; bool initialized; lua_State* L; + char* device_specific_config_file; DeviceType type; HapticEffect hapticeffect; }; diff --git a/src/monocoque/devices/usb/wheels/cammusc12.c b/src/monocoque/devices/usb/wheels/cammusc12.c index 99afd27..c951d04 100644 --- a/src/monocoque/devices/usb/wheels/cammusc12.c +++ b/src/monocoque/devices/usb/wheels/cammusc12.c @@ -96,7 +96,6 @@ int cammusc12_init(USBDevice* wheeldevice, const char* luafile) int res = cammusc12_init_(wheeldevice); if(luafile == NULL) { - return res; } diff --git a/src/monocoque/devices/wheeldevice.c b/src/monocoque/devices/wheeldevice.c index 12ea9a3..732bc85 100644 --- a/src/monocoque/devices/wheeldevice.c +++ b/src/monocoque/devices/wheeldevice.c @@ -48,6 +48,10 @@ int wheeldev_free(USBDevice* usbdevice) break; case WHEELDEV_CAMMUSC12 : cammusc12_update(usbdevice, 0, 0, 0, 0); + if(usbdevice->m.device_specific_config_file != NULL) + { + free(usbdevice->m.device_specific_config_file); + } cammusc12_free(usbdevice); break; } @@ -74,7 +78,8 @@ int wheeldev_init(USBDevice* usbdevice, DeviceSettings* ds) if(ds->has_config == true) { - error = cammusc12_init(usbdevice, ds->specific_config_file); + usbdevice->m.device_specific_config_file = strdup(ds->specific_config_file); + error = cammusc12_init(usbdevice, usbdevice->m.device_specific_config_file); } else { diff --git a/src/monocoque/gameloop/gameloop.c b/src/monocoque/gameloop/gameloop.c index bdff8fe..a5d7802 100644 --- a/src/monocoque/gameloop/gameloop.c +++ b/src/monocoque/gameloop/gameloop.c @@ -237,13 +237,13 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata) slogi("looking for ui config %s pass 3", ms->config_str); confignum = getconfigtouse(ms->config_str, simdata->car, f->sim); } + int configureddevices; configcheck(ms->config_str, confignum, &configureddevices); - DeviceSettings* ds = malloc(configureddevices * sizeof(DeviceSettings)); slogd("loading confignum %i, with %i devices.", confignum, configureddevices); - f->numdevices = uiloadconfig(ms->config_str, confignum, configureddevices, ms, ds); + if(ms->useconfig == 1) { ms->configcheck = 0; @@ -251,12 +251,7 @@ 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 i = 0; - for( i = 0; i < configureddevices; i++) - { - settingsfree(ds[i]); - } - free(ds); + for(int d = 0; d < 10; d++) @@ -285,10 +280,21 @@ void looprun(MonocoqueSettings* ms, loop_data* f, SimData* simdata) 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); + slogi("starting device type %i at id at %i fps (%i ms ticks)", devices[x].type, x, devices[x].fps, interval); + } + else + { + slogw("skipped id %i of type %i", x, devices[x].type); } } + int i = 0; + for( i = 0; i < configureddevices; i++) + { + settingsfree(ds[i]); + } + free(ds); + doui = false; } else diff --git a/src/monocoque/helper/confighelper.c b/src/monocoque/helper/confighelper.c index 376f86c..609b459 100644 --- a/src/monocoque/helper/confighelper.c +++ b/src/monocoque/helper/confighelper.c @@ -712,16 +712,19 @@ int devsetup(const char* device_type, const char* device_subtype, const char* co config_setting_lookup_int(device_settings, "channels", &ds->sounddevsettings.channels); config_setting_lookup_float(device_settings, "duration", &ds->sounddevsettings.duration); - const char* temp; + const char* temp = NULL; int found = 0; found = config_setting_lookup_string(device_settings, "devid", &temp); - if (found == 0) + if (found == CONFIG_FALSE) { ds->sounddevsettings.dev = NULL; } else { - ds->sounddevsettings.dev = strdup(temp); + if(temp != NULL) + { + ds->sounddevsettings.dev = strdup(temp); + } } @@ -808,17 +811,23 @@ int devsetup(const char* device_type, const char* device_subtype, const char* co ds->has_config = false; const char* temp2; int found = config_setting_lookup_string(device_settings, "config", &temp2); - if(strcicmp(temp2, "none") == 0 || found == 0) + if(found == 0) { + fprintf(stderr, "Here?"); slogt("config set to none"); } else { ds->has_config = true; ds->specific_config_file = strdup(temp2); + if(strcicmp(temp2, "none") == 0) + { + ds->has_config = false; + free(ds->specific_config_file); + ds->specific_config_file = NULL; + } slogt("will try to load config file at %s", ds->specific_config_file); } - return error; } @@ -852,17 +861,17 @@ int uiloadconfig(const char* config_file_str, int confignum, int configureddevic config_setting_t* config_device = config_setting_get_elem(config_devices, i); const char* device_type; const char* device_subtype; - const char* device_config_file; + //const char* device_config_file; config_setting_lookup_string(config_device, "device", &device_type); config_setting_lookup_string(config_device, "type", &device_subtype); - config_setting_lookup_string(config_device, "config", &device_config_file); + //config_setting_lookup_string(config_device, "config", &device_config_file); //slogt("device type: %s", device_type); //slogt("device sub type: %s", device_subtype); //slogt("device config file: %s", device_config_file); if (error == MONOCOQUE_ERROR_NONE) { - error = devsetup(device_type, device_subtype, device_config_file, ms, &settings, config_device); + error = devsetup(device_type, device_subtype, NULL, ms, &settings, config_device); } if (error == MONOCOQUE_ERROR_NONE) { @@ -900,6 +909,11 @@ int settingsfree(DeviceSettings ds) } } + if(ds.has_config && ds.specific_config_file != NULL) + { + free(ds.specific_config_file); + } + return 0; }