From 8e5a631211a5a71d07fcb9c70cebd82bfc1f7c94 Mon Sep 17 00:00:00 2001 From: ShikyC Date: Tue, 2 Jan 2024 19:30:50 -0800 Subject: [PATCH 1/7] CI/CD test --- src/bnusio.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index cab2448..e782522 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -31,10 +31,10 @@ Keybindings CARD_INSERT_1 = {}; Keybindings CARD_INSERT_2 = {}; Keybindings QR_CARD_READ = {}; Keybindings QR_DATA_READ = {.keycodes = {'Q'}}; -Keybindings P1_LEFT_BLUE = {.keycodes = {'D'}, .axis = {SDL_AXIS_LTRIGGER_DOWN}}; -Keybindings P1_LEFT_RED = {.keycodes = {'F'}, .buttons = {SDL_CONTROLLER_BUTTON_LEFTSTICK}}; -Keybindings P1_RIGHT_RED = {.keycodes = {'J'}, .buttons = {SDL_CONTROLLER_BUTTON_RIGHTSTICK}}; -Keybindings P1_RIGHT_BLUE = {.keycodes = {'K'}, .axis = {SDL_AXIS_RTRIGGER_DOWN}}; +Keybindings P1_LEFT_BLUE = {.keycodes = {'D'}, .axis = {SDL_AXIS_LEFT_DOWN}}; +Keybindings P1_LEFT_RED = {.keycodes = {'F'}, .axis = {SDL_AXIS_LEFT_RIGHT}}; +Keybindings P1_RIGHT_RED = {.keycodes = {'J'}, .axis = {SDL_AXIS_RIGHT_RIGHT}}; +Keybindings P1_RIGHT_BLUE = {.keycodes = {'K'}, .axis = {SDL_AXIS_RIGHT_DOWN}}; Keybindings P2_LEFT_BLUE = {}; Keybindings P2_LEFT_RED = {}; Keybindings P2_RIGHT_RED = {}; From 70c6e68676ad4c9a35fd357ad7ed85931b4cf302 Mon Sep 17 00:00:00 2001 From: ShikyC Date: Tue, 2 Jan 2024 20:41:11 -0800 Subject: [PATCH 2/7] Analog test --- src/bnusio.cpp | 77 ++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index e782522..c8cf1ae 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -102,48 +102,55 @@ u16 buttonWaitPeriodP2 = 0; std::queue buttonQueueP1; std::queue buttonQueueP2; +bool useTaikoController; +u8 analogBindings[] = {SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_RIGHT_RIGHT, SDL_AXIS_RIGHT_DOWN}; + u16 bnusio_GetAnalogIn (u8 which) { - auto button = analogButtons[which]; - if (which == 0) { - if (buttonWaitPeriodP1 > 0) buttonWaitPeriodP1--; - if (buttonWaitPeriodP2 > 0) buttonWaitPeriodP2--; - } - bool isP1 = which / 4 == 0; - if ((isP1 && !buttonQueueP1.empty ()) || (!isP1 && !buttonQueueP2.empty ())) { - if ((isP1 && buttonQueueP1.front () == which && buttonWaitPeriodP1 == 0) || (!isP1 && buttonQueueP2.front () == which && buttonWaitPeriodP2 == 0)) { - if (isP1) { - buttonQueueP1.pop (); - buttonWaitPeriodP1 = drumWaitPeriod; - } else { - buttonQueueP2.pop (); - buttonWaitPeriodP2 = drumWaitPeriod; - } + if (useTaikoController) { + return (int)(65535 * ControllerAxisIsDown (analogBindings[which])); + } else { + auto button = analogButtons[which]; + if (which == 0) { + if (buttonWaitPeriodP1 > 0) buttonWaitPeriodP1--; + if (buttonWaitPeriodP2 > 0) buttonWaitPeriodP2--; + } + bool isP1 = which / 4 == 0; + if ((isP1 && !buttonQueueP1.empty ()) || (!isP1 && !buttonQueueP2.empty ())) { + if ((isP1 && buttonQueueP1.front () == which && buttonWaitPeriodP1 == 0) || (!isP1 && buttonQueueP2.front () == which && buttonWaitPeriodP2 == 0)) { + if (isP1) { + buttonQueueP1.pop (); + buttonWaitPeriodP1 = drumWaitPeriod; + } else { + buttonQueueP2.pop (); + buttonWaitPeriodP2 = drumWaitPeriod; + } + lastHitValue++; + if (lastHitValue >= drumMax) lastHitValue = drumMin; + return lastHitValue; + } + if (IsButtonTapped (*button)) { + if (isP1) buttonQueueP1.push (which); + else buttonQueueP2.push (which); + } + return 0; + } else if (IsButtonTapped (*button)) { + if (isP1 && buttonWaitPeriodP1 > 0) { + buttonQueueP1.push (which); + return 0; + } else if (!isP1 && buttonWaitPeriodP2 > 0) { + buttonQueueP2.push (which); + return 0; + } + if (isP1) buttonWaitPeriodP1 = drumWaitPeriod; + else buttonWaitPeriodP2 = drumWaitPeriod; lastHitValue++; if (lastHitValue >= drumMax) lastHitValue = drumMin; return lastHitValue; - } - if (IsButtonTapped (*button)) { - if (isP1) buttonQueueP1.push (which); - else buttonQueueP2.push (which); - } - return 0; - } else if (IsButtonTapped (*button)) { - if (isP1 && buttonWaitPeriodP1 > 0) { - buttonQueueP1.push (which); - return 0; - } else if (!isP1 && buttonWaitPeriodP2 > 0) { - buttonQueueP2.push (which); + } else { return 0; } - if (isP1) buttonWaitPeriodP1 = drumWaitPeriod; - else buttonWaitPeriodP2 = drumWaitPeriod; - lastHitValue++; - if (lastHitValue >= drumMax) lastHitValue = drumMin; - return lastHitValue; - } else { - return 0; } } @@ -313,6 +320,8 @@ Init () { if (config) { auto drum = openConfigSection (config, "drum"); if (drum) drumWaitPeriod = readConfigInt (drum, "wait_period", drumWaitPeriod); + auto taikoController = openConfigSection (config, "controller"); + if (taikoController) useTaikoController = readConfigBool (taikoController, "analog", useTaikoController); toml_free (config); } From a9b48ab8ef555b693baf498d9a4758a1a381f86a Mon Sep 17 00:00:00 2001 From: ShikyC Date: Tue, 2 Jan 2024 22:31:04 -0800 Subject: [PATCH 3/7] Minor fix --- src/bnusio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index c8cf1ae..3ec49d9 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -103,7 +103,7 @@ std::queue buttonQueueP1; std::queue buttonQueueP2; bool useTaikoController; -u8 analogBindings[] = {SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_RIGHT_RIGHT, SDL_AXIS_RIGHT_DOWN}; +SDLAxis analogBindings[] = {SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_RIGHT_RIGHT, SDL_AXIS_RIGHT_DOWN}; u16 bnusio_GetAnalogIn (u8 which) { From ca6959c8e8a8801a1d17f24d51bd373f56366d9b Mon Sep 17 00:00:00 2001 From: ShikyC Date: Thu, 4 Jan 2024 17:57:12 -0800 Subject: [PATCH 4/7] Preliminary analog input fix --- src/bnusio.cpp | 85 +++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index 3ec49d9..4606a22 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -90,8 +90,8 @@ bnusio_GetFirmwareVersion () { return 126; } -u16 drumMin = 10000; -u16 drumMax = 20000; +u16 drumMin = 15000; +u16 drumMax = 30000; u16 drumWaitPeriod = 4; u16 lastHitValue = drumMin; @@ -107,50 +107,54 @@ SDLAxis analogBindings[] = {SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_RI u16 bnusio_GetAnalogIn (u8 which) { + u16 analogValue; if (useTaikoController) { - return (int)(65535 * ControllerAxisIsDown (analogBindings[which])); - } else { - auto button = analogButtons[which]; - if (which == 0) { - if (buttonWaitPeriodP1 > 0) buttonWaitPeriodP1--; - if (buttonWaitPeriodP2 > 0) buttonWaitPeriodP2--; + analogValue = (u16)(32768 * ControllerAxisIsDown (analogBindings[which])); + if (analogValue > 100) { + return analogValue; } - bool isP1 = which / 4 == 0; - if ((isP1 && !buttonQueueP1.empty ()) || (!isP1 && !buttonQueueP2.empty ())) { - if ((isP1 && buttonQueueP1.front () == which && buttonWaitPeriodP1 == 0) || (!isP1 && buttonQueueP2.front () == which && buttonWaitPeriodP2 == 0)) { - if (isP1) { - buttonQueueP1.pop (); - buttonWaitPeriodP1 = drumWaitPeriod; - } else { - buttonQueueP2.pop (); - buttonWaitPeriodP2 = drumWaitPeriod; - } + return 0; + } + auto button = analogButtons[which]; + if (which == 0) { + if (buttonWaitPeriodP1 > 0) buttonWaitPeriodP1--; + if (buttonWaitPeriodP2 > 0) buttonWaitPeriodP2--; + } + bool isP1 = which / 4 == 0; + if ((isP1 && !buttonQueueP1.empty ()) || (!isP1 && !buttonQueueP2.empty ())) { + if ((isP1 && buttonQueueP1.front () == which && buttonWaitPeriodP1 == 0) || (!isP1 && buttonQueueP2.front () == which && buttonWaitPeriodP2 == 0)) { + if (isP1) { + buttonQueueP1.pop (); + buttonWaitPeriodP1 = drumWaitPeriod; + } else { + buttonQueueP2.pop (); + buttonWaitPeriodP2 = drumWaitPeriod; + } - lastHitValue++; - if (lastHitValue >= drumMax) lastHitValue = drumMin; - return lastHitValue; - } - if (IsButtonTapped (*button)) { - if (isP1) buttonQueueP1.push (which); - else buttonQueueP2.push (which); - } - return 0; - } else if (IsButtonTapped (*button)) { - if (isP1 && buttonWaitPeriodP1 > 0) { - buttonQueueP1.push (which); - return 0; - } else if (!isP1 && buttonWaitPeriodP2 > 0) { - buttonQueueP2.push (which); - return 0; - } - if (isP1) buttonWaitPeriodP1 = drumWaitPeriod; - else buttonWaitPeriodP2 = drumWaitPeriod; lastHitValue++; if (lastHitValue >= drumMax) lastHitValue = drumMin; return lastHitValue; - } else { + } + if (IsButtonTapped (*button)) { + if (isP1) buttonQueueP1.push (which); + else buttonQueueP2.push (which); + } + return 0; + } else if (IsButtonTapped (*button)) { + if (isP1 && buttonWaitPeriodP1 > 0) { + buttonQueueP1.push (which); + return 0; + } else if (!isP1 && buttonWaitPeriodP2 > 0) { + buttonQueueP2.push (which); return 0; } + if (isP1) buttonWaitPeriodP1 = drumWaitPeriod; + else buttonWaitPeriodP2 = drumWaitPeriod; + lastHitValue++; + if (lastHitValue >= drumMax) lastHitValue = drumMin; + return lastHitValue; + } else { + return 0; } } @@ -321,7 +325,10 @@ Init () { auto drum = openConfigSection (config, "drum"); if (drum) drumWaitPeriod = readConfigInt (drum, "wait_period", drumWaitPeriod); auto taikoController = openConfigSection (config, "controller"); - if (taikoController) useTaikoController = readConfigBool (taikoController, "analog", useTaikoController); + if (taikoController) { + printf("Using analog input mode. All other input has been disabled.\n"); + useTaikoController = readConfigBool (taikoController, "analog", useTaikoController); + } toml_free (config); } From d5f35642cb8288f875a5c2f32f59a2d5ee3feb83 Mon Sep 17 00:00:00 2001 From: ShikyC Date: Thu, 4 Jan 2024 18:26:45 -0800 Subject: [PATCH 5/7] Bugfix --- src/bnusio.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index 4606a22..9a02e5f 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -326,8 +326,10 @@ Init () { if (drum) drumWaitPeriod = readConfigInt (drum, "wait_period", drumWaitPeriod); auto taikoController = openConfigSection (config, "controller"); if (taikoController) { - printf("Using analog input mode. All other input has been disabled.\n"); useTaikoController = readConfigBool (taikoController, "analog", useTaikoController); + if (useTaikoController) { + printf("Using analog input mode. All other input has been disabled.\n"); + } } toml_free (config); } From e9127140de5f395cf77d6e6a71071ba693d08388 Mon Sep 17 00:00:00 2001 From: ShikyC Date: Thu, 4 Jan 2024 20:51:03 -0800 Subject: [PATCH 6/7] Fix minor typo --- src/bnusio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index 9a02e5f..6eabf24 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -328,7 +328,7 @@ Init () { if (taikoController) { useTaikoController = readConfigBool (taikoController, "analog", useTaikoController); if (useTaikoController) { - printf("Using analog input mode. All other input has been disabled.\n"); + printf("Using analog input mode. All the keyboard drum inputs have been disabled.\n"); } } toml_free (config); From 08dab85b13817c65ab7c8a99aaa8d97cc8e9e842 Mon Sep 17 00:00:00 2001 From: ShikyC Date: Fri, 5 Jan 2024 01:20:52 -0800 Subject: [PATCH 7/7] Update to support 2P drum analog input --- src/bnusio.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bnusio.cpp b/src/bnusio.cpp index 9a02e5f..2a05a0c 100644 --- a/src/bnusio.cpp +++ b/src/bnusio.cpp @@ -103,7 +103,10 @@ std::queue buttonQueueP1; std::queue buttonQueueP2; bool useTaikoController; -SDLAxis analogBindings[] = {SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_RIGHT_RIGHT, SDL_AXIS_RIGHT_DOWN}; +SDLAxis analogBindings[] = { + SDL_AXIS_LEFT_LEFT, SDL_AXIS_LEFT_RIGHT, SDL_AXIS_LEFT_DOWN, SDL_AXIS_LEFT_UP, // P1: LB, LR, RR, RB + SDL_AXIS_RIGHT_LEFT, SDL_AXIS_RIGHT_RIGHT, SDL_AXIS_RIGHT_DOWN, SDL_AXIS_RIGHT_UP, // P2: LB, LR, RR, RB +}; u16 bnusio_GetAnalogIn (u8 which) {