From 641cacb899758b920ed3c8942eea6c84f07db99c Mon Sep 17 00:00:00 2001 From: Nicholas G Date: Tue, 20 Jul 2021 00:35:13 -0400 Subject: [PATCH] Bugfix for reactive timeout --- README.md | 5 +++-- build_uf2/Pico_Game_Controller.uf2 | Bin 71168 -> 71168 bytes src/pico_game_controller.c | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6b210f3..f087570 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,18 @@ Currently working/fixed: - Gamepad mode - untested on EAC - default boot mode - Keyboard & Mouse Mode - limited to 6KRO - hold btn-a to enter kb mode -- HID LEDs with Reactive LED fallback - untested +- HID LEDs with Reactive LED fallback - sdvx/iidx spoof - untested on EAC - 1000hz polling -- Fix 0-~71% encoder rollover in gamepad mode, uint32 max val isn't divisible evenly by ppr\*4 for joystick - thanks friends - Switch and LED pins are now staggered for easier wiring +- Fix 0-~71% encoder rollover in gamepad mode, uint32 max val isn't divisible evenly by ppr\*4 for joystick - thanks friends TODO: - Store last mode in flash memory https://www.raspberrypi.org/forums/viewtopic.php?t=305570 - nkro - debounce +- ws2812b rgb on second core? - split input updating into pi pico's second core? How to Use: diff --git a/build_uf2/Pico_Game_Controller.uf2 b/build_uf2/Pico_Game_Controller.uf2 index 05ecc1ae13b63bb1bacc8969038ab8f9348f4e18..7fee644f2f57b871556acb1e462cea327afb5762 100644 GIT binary patch delta 7710 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 diff --git a/src/pico_game_controller.c b/src/pico_game_controller.c index a4be11a..38e5df8 100644 --- a/src/pico_game_controller.c +++ b/src/pico_game_controller.c @@ -24,7 +24,7 @@ #define ENC_PPR 600 // Encoder PPR #define ENC_PULSE (ENC_PPR * 4) // 4 pulses per PPR #define ENC_ROLLOVER (ENC_PULSE * 2) // Delta Rollover threshold -#define REACTIVE_TIMEOUT_MAX 1000 // Cycles before HID falls back to reactive +#define REACTIVE_TIMEOUT_MAX 100000 // Cycles before HID falls back to reactive // MODIFY KEYBINDS HERE, MAKE SURE LENGTHS MATCH SW_GPIO_SIZE const uint8_t SW_KEYCODE[] = {HID_KEY_D, HID_KEY_F, HID_KEY_J, HID_KEY_K, @@ -61,6 +61,9 @@ struct lights_report { * HID/Reactive Lights **/ void update_lights() { + if (reactive_timeout_count < REACTIVE_TIMEOUT_MAX) { + reactive_timeout_count++; + } if (leds_changed) { for (int i = 0; i < SW_GPIO_SIZE; i++) { if (reactive_timeout_count >= REACTIVE_TIMEOUT_MAX) {