From ad24bdcb16d2c44ff51eac491cf65993472cd821 Mon Sep 17 00:00:00 2001 From: CrazyRedMachine Date: Fri, 24 Sep 2021 23:44:33 +0200 Subject: [PATCH] Pocket SDVX Pico Configuration --- README.md | 4 +-- build_uf2/Pico_Game_Controller.uf2 | Bin 52736 -> 52736 bytes build_uf2/README.md | 4 ++- src/controller_config.h | 23 +++++++------ src/pico_game_controller.c | 16 ++++++++- src/usb_descriptors.c | 52 ++++++++++++----------------- src/usb_descriptors.h | 12 +++---- 7 files changed, 59 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 85e5fbf..16792aa 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # 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. +This branch was developed with SDVX in mind. Capable of handling 7 LEDs, 1 WS2812B RGB strip, and 2 encoders. -Demo of this firmware running on Pocket SDVX Pico, purchasable at https://discord.gg/MmuKd73XbY +Demo of this firmware running on Pocket SDVX Pico v4, purchasable at https://discord.gg/MmuKd73XbY ![Pocket SDVX Pico](demo.gif) diff --git a/build_uf2/Pico_Game_Controller.uf2 b/build_uf2/Pico_Game_Controller.uf2 index a55d45e1da832a30787266597908e5d2b722f928..ea0f40a94ec2731ee0c267b9f26163610192ab50 100644 GIT binary patch delta 7287 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 REACTIVE_TIMEOUT_MAX) { if (!gpio_get(SW_GPIO[i])) { gpio_put(LED_GPIO[i], 1); @@ -86,6 +86,20 @@ void update_lights() { gpio_put(LED_GPIO[i], 1); } } + /* start button sw_val index is offset by two with respect to LED_GPIO */ + if (time_us_64() - reactive_timeout_timestamp >= REACTIVE_TIMEOUT_MAX) { + if (!gpio_get(SW_GPIO[LED_GPIO_SIZE + 1])) { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 1); + } else { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 0); + } + } else { + if (lights_report.lights.buttons[LED_GPIO_SIZE - 1] == 0) { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 0); + } else { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 1); + } + } } } diff --git a/src/usb_descriptors.c b/src/usb_descriptors.c index 3ce3276..0c0aaaa 100644 --- a/src/usb_descriptors.c +++ b/src/usb_descriptors.c @@ -34,10 +34,6 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors @@ -51,8 +47,8 @@ tusb_desc_device_t const desc_device_joy = { .bDeviceProtocol = 0x00, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, + .idVendor = 0x1ccf, + .idProduct = 0x101c, .bcdDevice = 0x0100, .iManufacturer = 0x01, @@ -70,8 +66,8 @@ tusb_desc_device_t const desc_device_key = { .bDeviceProtocol = 0x00, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, + .idVendor = 0x1ccf, + .idProduct = 0x101c, .bcdDevice = 0x0100, .iManufacturer = 0x01, @@ -92,14 +88,12 @@ uint8_t const* tud_descriptor_device_cb(void) { uint8_t const desc_hid_report_joy[] = { GAMECON_REPORT_DESC_JOYSTICK(HID_REPORT_ID(REPORT_ID_JOYSTICK)), - GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS)) -}; + GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS))}; uint8_t const desc_hid_report_key[] = { GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS)), GAMECON_REPORT_DESC_NKRO(HID_REPORT_ID(REPORT_ID_KEYBOARD)), - TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)) -}; + TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE))}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor @@ -131,7 +125,6 @@ uint8_t const desc_configuration_joy[] = { sizeof(desc_hid_report_joy), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 1)}; - uint8_t const desc_configuration_key[] = { // Config number, interface count, string index, total length, attribute, // power in mA @@ -159,25 +152,22 @@ uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { // array of pointer to string descriptors char const* string_desc_arr[] = { (const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409) - "SpeedyPotato", // 1: Manufacturer - "Pico Game Controller", // 2: Product + "Konami Amusement", // 1: Manufacturer + "SOUND VOLTEX controller", // 2: Product "123456", // 3: Serials, should use chip ID - "Button 1", - "Button 2", - "Button 3", - "Button 4", - "Button 5", - "Button 6", - "Button 7", - "Button 8", - "Button 9", - "Button 10", - "Red 1", - "Green 1", - "Blue 1", - "Red 2", - "Green 2", - "Blue 2", + "BT-A", + "BT-B", + "BT-C", + "BT-D", + "FX-L", + "FX-R", + "Start", + "Left R", + "Left G", + "Left B", + "Right R", + "Right G", + "Right B", }; static uint16_t _desc_str[64]; diff --git a/src/usb_descriptors.h b/src/usb_descriptors.h index 9d30995..d9b601c 100644 --- a/src/usb_descriptors.h +++ b/src/usb_descriptors.h @@ -2,8 +2,8 @@ #define USB_DESCRIPTORS_H_ #include "common/tusb_common.h" -#include "device/usbd.h" #include "controller_config.h" +#include "device/usbd.h" enum { REPORT_ID_JOYSTICK = 1, @@ -27,10 +27,10 @@ enum { HID_USAGE(HID_USAGE_DESKTOP_JOYSTICK), \ HID_COLLECTION(HID_COLLECTION_APPLICATION), \ __VA_ARGS__ HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), \ - HID_USAGE_MAX(SW_GPIO_SIZE), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_COUNT(SW_GPIO_SIZE), \ - HID_REPORT_SIZE(1), HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(16 - SW_GPIO_SIZE), /*Padding*/\ + HID_USAGE_MAX(SW_GPIO_SIZE), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), \ + HID_REPORT_COUNT(SW_GPIO_SIZE), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_REPORT_COUNT(1), \ + HID_REPORT_SIZE(16 - SW_GPIO_SIZE), /*Padding*/ \ HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_LOGICAL_MIN(0x00), \ HID_LOGICAL_MAX_N(0x00ff, 2), \ @@ -45,7 +45,7 @@ enum { __VA_ARGS__ HID_REPORT_COUNT(LED_GPIO_SIZE + (WS2812B_LED_ZONES * 3)), \ HID_REPORT_SIZE(8), HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0x00ff, 2), \ HID_USAGE_PAGE(HID_USAGE_PAGE_ORDINAL), HID_STRING_MINIMUM(4), \ - HID_STRING_MAXIMUM(16), HID_USAGE_MIN(1), HID_USAGE_MAX(16), \ + HID_STRING_MAXIMUM(16), HID_USAGE_MIN(1), HID_USAGE_MAX(13), \ HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_REPORT_COUNT(1), \ HID_REPORT_SIZE(8), /*Padding*/ \ HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \