# Pico-Game-Controller Code for a keyboard or game controller using a Raspberry Pi Pico. Capable of handling 11 buttons, 10 LEDs, 1 WS2812B RGB strip, and 2 encoders. Developed with SDVX and IIDX in mind - see branches release/pocket-sdvx-pico and release/pocket-iidx for preconfigured versions. Demo of this firmware running on Pocket SDVX Pico, purchasable at https://discord.gg/MmuKd73XbY ![Pocket SDVX Pico](demo.gif) Currently working/fixed: - Gamepad mode - default boot mode - NKRO Keyboard & Mouse Mode - hold first button(gpio4) to enter kb mode - HID LEDs with Reactive LED fallback - ws2812b rgb on second core - 2 ws2812b hid descriptor zones - sdvx/iidx spoof - Tested on EAC - checkout branches release/pocket-sdvx-pico or release/pocket-iidx - 1000hz polling - Reversable Encoders with debouncing - Switch debouncing - 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 - HID LEDs now have labels, thanks CrazyRedMachine TODO: - refactor ws2812b into a seperate file for cleaner code & implement more RGB modes - store configuration settings in a text file? consider implementing littlefs https://github.com/littlefs-project/littlefs https://www.raspberrypi.org/forums/viewtopic.php?t=313009 https://www.raspberrypi.org/forums/viewtopic.php?p=1894014#p1894014 - Store last mode in flash memory (probably implement into above TODO if possible) https://www.raspberrypi.org/forums/viewtopic.php?t=305570 How to Use: - For basic flashing, see README in build_uf2 - Otherwise, setup the C++ environment for the Pi Pico as per https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf - Build pico-examples directory once to ensure all the tinyusb and other libraries are there. You might have to move the pico-sdk folder into pico-examples/build for it to play nice. - Move pico-sdk back outside to the same level directory as Pico-Game-Controller. - Open Pico-Game-Controller in VSCode(assuming this is setup for the Pi Pico) and see if everything builds. - Tweakable parameters are in controller_config.h Thanks to: - Everyone in the Cons & Stuff Discord for providing near instant support to questions. - https://github.com/hathach/tinyusb/tree/master/examples/device/hid_composite - https://github.com/mdxtinkernick/pico_encoders for encoders which performed better than both interrupts and polling. - My SE buddies who helped come up with a solution for the encoder rollover edge case scenario. - https://github.com/Drewol/rp2040-gamecon for usb gamepad descriptor info. - https://github.com/veroxzik/arduino-konami-spoof for konami spoof usb descriptor info. - https://github.com/veroxzik/roxy-firmware for nkro descriptor and logic info. - KyubiFox for bringing clkdiv to my attention for encoder debouncing