diff --git a/src/main/vigem-iidxio/config.c b/src/main/vigem-iidxio/config.c index 1c8ff5c..5e05acd 100644 --- a/src/main/vigem-iidxio/config.c +++ b/src/main/vigem-iidxio/config.c @@ -5,48 +5,83 @@ #include "util/log.h" -#define VIGEM_IIDXIO_CONFIG_ENABLE_KEYLIGHT_KEY "vigem.iidxio.enable_keylight" -#define VIGEM_IIDXIO_CONFIG_RELATIVE_ANALOG_KEY "vigem.iidxio.use_relative_analog" -#define VIGEM_IIDXIO_CONFIG_ENABLE_CAB_LIGHT_MODE_KEY "vigem.iidxio.cab_light_mode" -#define VIGEM_IIDXIO_CONFIG_TEXT_16SEG_KEY "vigem.iidxio.text_16seg" -#define VIGEM_IIDXIO_CONFIG_TEXT_SCROLL_CYCLE_TIME_MS_KEY "vigem.iidxio.text_scroll_cycle_time_ms" +#define VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_KEY "vigem.iidxio.tt.anlog.relative" +#define VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_SENSITIVITY_KEY "vigem.iidxio.tt.anlog.relative_sensitivity" +#define VIGEM_IIDXIO_CONFIG_TT_BUTTON_DEBOUNCE_KEY "vigem.iidxio.tt.button.debounce" +#define VIGEM_IIDXIO_CONFIG_TT_BUTTON_THRESHOLD_KEY "vigem.iidxio.tt.button.threshold" +#define VIGEM_IIDXIO_CONFIG_TT_DEBUG_OUTPUT_KEY "vigem.iidxio.tt.debug_output" +#define VIGEM_IIDXIO_CONFIG_CAB_LIGHT_ENABLE_KEYLIGHT_KEY "vigem.iidxio.cab_light.enable_keylight" +#define VIGEM_IIDXIO_CONFIG_CAB_LIGHT_LIGHT_MODE_KEY "vigem.iidxio.cab_light.light_mode" +#define VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_16SEG_KEY "vigem.iidxio.cab_light.text_16seg" +#define VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_KEY "vigem.iidxio.cab_light.text_scroll_cycle_time_ms" -#define VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_KEYLIGHT_VALUE true -#define VIGEM_IIDXIO_CONFIG_DEFAULT_RELATIVE_ANALOG_VALUE false -#define VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_CAB_LIGHT_MODE_VALUE 0 -#define VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_16SEG_VALUE "" -#define VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE 500 +#define VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_VALUE false +#define VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_SENSITIVITY_VALUE 1024 +#define VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_DEBOUNCE_VALUE 20 +#define VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_THRESHOLD_VALUE 2 +#define VIGEM_IIDXIO_CONFIG_DEFAULT_TT_DEBUG_OUTPUT_VALUE false +#define VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_ENABLE_KEYLIGHT_VALUE true +#define VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_LIGHT_MODE_VALUE 0 +#define VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_16SEG_VALUE "" +#define VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE 500 static void _vigem_iidxio_config_init(struct cconfig *config) { cconfig_util_set_bool( config, - VIGEM_IIDXIO_CONFIG_ENABLE_KEYLIGHT_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_KEYLIGHT_VALUE, - "Enable input based key lighting"); - - cconfig_util_set_bool( - config, - VIGEM_IIDXIO_CONFIG_RELATIVE_ANALOG_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_RELATIVE_ANALOG_VALUE, - "Use relative mode analog mapping"); + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_VALUE, + "Use relative mode analog mapping instead of absolute analog values"); cconfig_util_set_int( config, - VIGEM_IIDXIO_CONFIG_ENABLE_CAB_LIGHT_MODE_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_CAB_LIGHT_MODE_VALUE, + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_SENSITIVITY_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_SENSITIVITY_VALUE, + "Sensitivity value for relative mode (1 to 32767). Tweak if you are having issues with " + "jittering/misfiring/unresponsiveness"); + + cconfig_util_set_int( + config, + VIGEM_IIDXIO_CONFIG_TT_BUTTON_DEBOUNCE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_DEBOUNCE_VALUE, + "Button turntable: \"debounce\" value (1 to 50, recommend 20). Tweak if you are having "\ + "issues with TT button misfiring/unresponsiveness"); + + cconfig_util_set_int( + config, + VIGEM_IIDXIO_CONFIG_TT_BUTTON_THRESHOLD_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_THRESHOLD_VALUE, + "Button turntable: minimum ticks required within (debounce * 2) ms to register movement " + "(1 to 4, recommend 2). Tweak if you button input is too (un-) responsive"); + + cconfig_util_set_bool( + config, + VIGEM_IIDXIO_CONFIG_TT_DEBUG_OUTPUT_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_DEBUG_OUTPUT_VALUE, + "Print verbose debug output to the console for debugging turntable sensitivity issues"); + + cconfig_util_set_bool( + config, + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_ENABLE_KEYLIGHT_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_ENABLE_KEYLIGHT_VALUE, + "Enable input based key lighting"); + + cconfig_util_set_int( + config, + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_LIGHT_MODE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_LIGHT_MODE_VALUE, "Different cabinet light modes: 0 = off, 1 = neons sequence, 2 = neons flash on TT spin"); cconfig_util_set_str( config, - VIGEM_IIDXIO_CONFIG_TEXT_16SEG_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_16SEG_VALUE, - "Display text on 16seg. If text exceeds 9 char display limit, it will scroll"); + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_16SEG_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_16SEG_VALUE, + "Display text on 16seg. If text exceeds 9 char display limit, it will scroll + cycle"); cconfig_util_set_int( config, - VIGEM_IIDXIO_CONFIG_TEXT_SCROLL_CYCLE_TIME_MS_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE, + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE, "Cycle time/scroll speed for text exceeding 16seg display length (9) to scroll from right"); } @@ -55,63 +90,112 @@ static void _vigem_iidxio_config_get( { if (!cconfig_util_get_bool( config, - VIGEM_IIDXIO_CONFIG_ENABLE_KEYLIGHT_KEY, - &vigem_config->enable_keylight, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_KEYLIGHT_VALUE)) { + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_KEY, + &vigem_config->tt.analog.relative, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " "to default '%d'", - VIGEM_IIDXIO_CONFIG_ENABLE_KEYLIGHT_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_KEYLIGHT_VALUE); + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_VALUE); + } + + if (!cconfig_util_get_int( + config, + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_SENSITIVITY_KEY, + &vigem_config->tt.analog.relative_sensitivity, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_SENSITIVITY_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + VIGEM_IIDXIO_CONFIG_TT_ANALOG_RELATIVE_SENSITIVITY_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_ANALOG_RELATIVE_SENSITIVITY_VALUE); + } + + if (!cconfig_util_get_int( + config, + VIGEM_IIDXIO_CONFIG_TT_BUTTON_DEBOUNCE_KEY, + &vigem_config->tt.button.debounce, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_DEBOUNCE_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + VIGEM_IIDXIO_CONFIG_TT_BUTTON_DEBOUNCE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_DEBOUNCE_VALUE); + } + + if (!cconfig_util_get_int( + config, + VIGEM_IIDXIO_CONFIG_TT_BUTTON_THRESHOLD_KEY, + &vigem_config->tt.button.threshold, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_THRESHOLD_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + VIGEM_IIDXIO_CONFIG_TT_BUTTON_THRESHOLD_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_BUTTON_THRESHOLD_VALUE); } if (!cconfig_util_get_bool( config, - VIGEM_IIDXIO_CONFIG_RELATIVE_ANALOG_KEY, - &vigem_config->relative_analog, - VIGEM_IIDXIO_CONFIG_DEFAULT_RELATIVE_ANALOG_VALUE)) { + VIGEM_IIDXIO_CONFIG_TT_DEBUG_OUTPUT_KEY, + &vigem_config->tt.debug_output, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_DEBUG_OUTPUT_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " "to default '%d'", - VIGEM_IIDXIO_CONFIG_RELATIVE_ANALOG_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_RELATIVE_ANALOG_VALUE); + VIGEM_IIDXIO_CONFIG_TT_DEBUG_OUTPUT_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_TT_DEBUG_OUTPUT_VALUE); + } + + + if (!cconfig_util_get_bool( + config, + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_ENABLE_KEYLIGHT_KEY, + &vigem_config->cab_light.enable_keylight, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_ENABLE_KEYLIGHT_VALUE)) { + log_warning( + "Invalid value for key '%s' specified, fallback " + "to default '%d'", + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_ENABLE_KEYLIGHT_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_ENABLE_KEYLIGHT_VALUE); } if (!cconfig_util_get_int( config, - VIGEM_IIDXIO_CONFIG_ENABLE_CAB_LIGHT_MODE_KEY, - &vigem_config->cab_light_mode, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_CAB_LIGHT_MODE_VALUE)) { + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_LIGHT_MODE_KEY, + &vigem_config->cab_light.light_mode, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_LIGHT_MODE_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " "to default '%d'", - VIGEM_IIDXIO_CONFIG_ENABLE_CAB_LIGHT_MODE_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_ENABLE_CAB_LIGHT_MODE_VALUE); + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_LIGHT_MODE_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_LIGHT_MODE_VALUE); } if (!cconfig_util_get_str( config, - VIGEM_IIDXIO_CONFIG_TEXT_16SEG_KEY, - vigem_config->text_16seg, - sizeof(vigem_config->text_16seg), - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_16SEG_VALUE)) { + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_16SEG_KEY, + vigem_config->cab_light.text_16seg, + sizeof(vigem_config->cab_light.text_16seg), + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_16SEG_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " "to default '%s'", - VIGEM_IIDXIO_CONFIG_TEXT_16SEG_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_16SEG_VALUE); + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_16SEG_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_16SEG_VALUE); } if (!cconfig_util_get_int( config, - VIGEM_IIDXIO_CONFIG_TEXT_SCROLL_CYCLE_TIME_MS_KEY, - &vigem_config->text_scroll_cycle_time_ms, - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE)) { + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_KEY, + &vigem_config->cab_light.text_scroll_cycle_time_ms, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " "to default '%d'", - VIGEM_IIDXIO_CONFIG_TEXT_SCROLL_CYCLE_TIME_MS_KEY, - VIGEM_IIDXIO_CONFIG_DEFAULT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE); + VIGEM_IIDXIO_CONFIG_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_KEY, + VIGEM_IIDXIO_CONFIG_DEFAULT_CAB_LIGHT_TEXT_SCROLL_CYCLE_TIME_MS_VALUE); } } diff --git a/src/main/vigem-iidxio/config.h b/src/main/vigem-iidxio/config.h index 4803fae..f94afbd 100644 --- a/src/main/vigem-iidxio/config.h +++ b/src/main/vigem-iidxio/config.h @@ -6,11 +6,26 @@ #include "cconfig/cconfig.h" struct vigem_iidxio_config { - bool enable_keylight; - bool relative_analog; - int32_t cab_light_mode; - char text_16seg[1024 + 1]; - int32_t text_scroll_cycle_time_ms; + struct tt { + struct analog { + bool relative; + int32_t relative_sensitivity; + } analog; + + struct button { + int32_t debounce; + int32_t threshold; + } button; + + bool debug_output; + } tt; + + struct cab_light { + bool enable_keylight; + int32_t light_mode; + char text_16seg[1024 + 1]; + int32_t text_scroll_cycle_time_ms; + } cab_light; }; bool vigem_iidxio_config_get(struct vigem_iidxio_config *config_out);