From b2ac355beb0b84b680849aa681780d00216cc804 Mon Sep 17 00:00:00 2001 From: Liz Date: Tue, 8 Oct 2024 15:13:37 -0400 Subject: [PATCH] gamepad turbo button arduino code Arduino code for the gamepad turbo button project. also including a gamepad device report example with uf2 --- .../.feather_rp2040_usbhost_tinyusb.test.only | 0 .../Arduino_USB_Host_Turbo_Button_Gamepad.ino | 291 +++++++++++++++++ .../gamepad_reports.h | 54 ++++ .../usbh_helper.h | 103 ++++++ .../.feather_rp2040_usbhost_tinyusb.test.only | 0 ...evice_report-adafruit_feather_usb_host.uf2 | Bin 0 -> 220672 bytes .../gamepad_device_report.ino | 306 ++++++++++++++++++ .../gamepad_device_report/usbh_helper.h | 103 ++++++ 8 files changed, 857 insertions(+) create mode 100644 USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/.feather_rp2040_usbhost_tinyusb.test.only create mode 100644 USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad.ino create mode 100644 USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/gamepad_reports.h create mode 100644 USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/usbh_helper.h create mode 100644 USB_Host_Turbo_Button_Gamepad/gamepad_device_report/.feather_rp2040_usbhost_tinyusb.test.only create mode 100644 USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report-adafruit_feather_usb_host.uf2 create mode 100644 USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report.ino create mode 100644 USB_Host_Turbo_Button_Gamepad/gamepad_device_report/usbh_helper.h diff --git a/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/.feather_rp2040_usbhost_tinyusb.test.only b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/.feather_rp2040_usbhost_tinyusb.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad.ino b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad.ino new file mode 100644 index 000000000..974481121 --- /dev/null +++ b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad.ino @@ -0,0 +1,291 @@ +// SPDX-FileCopyrightText: 2024 Liz Clark for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +/********************************************************************* + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + Copyright (c) 2019 Ha Thach for Adafruit Industries + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +/* This example demonstrates use of both device and host, where + * - Device runs on native USB controller (roothub port0) + * - Host depends on MCU: + * - rp2040: bit-banging 2 GPIOs with Pico-PIO-USB library (roothub port1) + * + * Requirements: + * - For rp2040: + * - Pico-PIO-USB library + * - 2 consecutive GPIOs: D+ is defined by PIN_USB_HOST_DP, D- = D+ +1 + * - Provide VBus (5v) and GND for peripheral + * - CPU Speed must be either 120 or 240 MHz. Selected via "Menu -> CPU Speed" + */ + +// USBHost is defined in usbh_helper.h +#include "usbh_helper.h" +#include "tusb.h" +#include "Adafruit_TinyUSB.h" +#include "gamepad_reports.h" + +// HID report descriptor using TinyUSB's template +// Single Report (no ID) descriptor +uint8_t const desc_hid_report[] = { + TUD_HID_REPORT_DESC_GAMEPAD() +}; + +// USB HID object +Adafruit_USBD_HID usb_hid; + +// Report payload defined in src/class/hid/hid.h +// - For Gamepad Button Bit Mask see hid_gamepad_button_bm_t +// - For Gamepad Hat Bit Mask see hid_gamepad_hat_t +hid_gamepad_report_t gp; + +bool combo_active = false; + +void setup() { + if (!TinyUSBDevice.isInitialized()) { + TinyUSBDevice.begin(0); + } + Serial.begin(115200); + // Setup HID + usb_hid.setPollInterval(2); + usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report)); + usb_hid.begin(); + + // If already enumerated, additional class driverr begin() e.g msc, hid, midi won't take effect until re-enumeration + if (TinyUSBDevice.mounted()) { + TinyUSBDevice.detach(); + delay(10); + TinyUSBDevice.attach(); + } +} + +#if defined(ARDUINO_ARCH_RP2040) +//--------------------------------------------------------------------+ +// For RP2040 use both core0 for device stack, core1 for host stack +//--------------------------------------------------------------------// + +//------------- Core0 -------------// +void loop() { +} + +//------------- Core1 -------------// +void setup1() { + // configure pio-usb: defined in usbh_helper.h + rp2040_configure_pio_usb(); + + // run host stack on controller (rhport) 1 + // Note: For rp2040 pico-pio-usb, calling USBHost.begin() on core1 will have most of the + // host bit-banging processing works done in core1 to free up core0 for other works + USBHost.begin(1); +} + +void loop1() { + USBHost.task(); + Serial.flush(); + if (combo_active) { + turbo_button(); + } +} +#endif + +//--------------------------------------------------------------------+ +// HID Host Callback Functions +//--------------------------------------------------------------------+ + +void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_report, uint16_t desc_len) +{ + Serial.printf("HID device mounted (address %d, instance %d)\n", dev_addr, instance); + + // Start receiving HID reports + if (!tuh_hid_receive_report(dev_addr, instance)) + { + Serial.printf("Error: cannot request to receive report\n"); + } +} + +void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) +{ + Serial.printf("HID device unmounted (address %d, instance %d)\n", dev_addr, instance); +} + +void turbo_button() { + if (combo_active) { + while (!usb_hid.ready()) { + yield(); + } + Serial.println("A"); + gp.buttons = GAMEPAD_BUTTON_A; + usb_hid.sendReport(0, &gp, sizeof(gp)); + Serial.println("off"); + delay(2); + gp.buttons = 0; + usb_hid.sendReport(0, &gp, sizeof(gp)); + delay(2); + } +} + +void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len) { + // Known report when the combo is pressed + //uint8_t combo_report[] = { 0x80, 0x7F, 0x80, 0x7F, 0x28, 0x03, 0x00, 0xFF }; + // Check if the incoming report matches the combo report + bool combo_detected = ((report[4] == combo_report[4]) && (report[5] == combo_report[5]));// len == sizeof(combo_report)) && (memcmp(report, combo_report, sizeof(combo_report)) == 0); + + // Manage the combo state and print messages + if (combo_detected && !combo_active) { + combo_active = true; + Serial.println("combo!"); + } else if (combo_detected && combo_active) { + combo_active = false; + Serial.println("combo released!"); + } + if (!(combo_active)) { + if (!(report[BYTE_LEFT_STICK_X] == LEFT_STICK_X_NEUTRAL)) { + int16_t leftStickX = report[BYTE_LEFT_STICK_X]; + Serial.print("left stick X: "); + Serial.println(leftStickX); + int16_t new_leftStickX = map(leftStickX, 0, 255, -127, 127); + gp.x = new_leftStickX; + } else { + gp.x = 0; + } + if (!(report[BYTE_LEFT_STICK_Y] == LEFT_STICK_Y_NEUTRAL)) { + int16_t leftStickY = report[BYTE_LEFT_STICK_Y]; + Serial.print("left stick Y: "); + Serial.println(leftStickY); + int16_t new_leftStickY = map(leftStickY, 0, 255, -127, 127); + gp.y = new_leftStickY; + } else { + gp.y = 0; + } + if (!(report[BYTE_RIGHT_STICK_X] == RIGHT_STICK_X_NEUTRAL)) { + int8_t rightStickX = report[BYTE_RIGHT_STICK_X]; + Serial.print("right stick X: "); + Serial.println(rightStickX); + int16_t new_rightStickX = map(rightStickX, 0, 255, 127, -127); + gp.z = new_rightStickX; + } else { + gp.z = 0; + } + if (!(report[BYTE_RIGHT_STICK_Y] == RIGHT_STICK_Y_NEUTRAL)) { + int8_t rightStickY = report[BYTE_RIGHT_STICK_Y]; + Serial.print("right stick Y: "); + Serial.println(rightStickY); + int16_t new_rightStickY = map(rightStickY, 0, 255, -127, 127); + gp.rz = new_rightStickY; + } else { + gp.rz = 0; + } + if (!(report[BYTE_DPAD_BUTTONS] == DPAD_NEUTRAL)) { + // D-Pad is active + uint8_t buttonsSelect = report[BYTE_DPAD_BUTTONS]; + switch (buttonsSelect) { + case BUTTON_X: + Serial.println("x"); + gp.buttons = GAMEPAD_BUTTON_X; + break; + case BUTTON_A: + Serial.println("a"); + gp.buttons = GAMEPAD_BUTTON_A; + break; + case BUTTON_B: + Serial.println("b"); + gp.buttons = GAMEPAD_BUTTON_B; + break; + case BUTTON_Y: + Serial.println("y"); + gp.buttons = GAMEPAD_BUTTON_Y; + break; + } + } else { + gp.hat = 0; + gp.buttons = 0; + } + if (!(report[BYTE_DPAD_BUTTONS] == DPAD_NEUTRAL)) { + // D-Pad is active + uint8_t dpadDirection = report[BYTE_DPAD_BUTTONS]; + switch (dpadDirection) { + case DPAD_UP: + Serial.println("up"); + gp.hat = 1; // GAMEPAD_HAT_UP; + break; + case DPAD_UP_RIGHT: + Serial.println("up/right"); + gp.hat = 2; + break; + case DPAD_RIGHT: + Serial.println("right"); + gp.hat = 3; + break; + case DPAD_DOWN_RIGHT: + Serial.println("down/right"); + gp.hat = 4; + break; + case DPAD_DOWN: + Serial.println("down"); + gp.hat = 5; + break; + case DPAD_DOWN_LEFT: + Serial.println("down/left"); + gp.hat = 6; + break; + case DPAD_LEFT: + Serial.println("left"); + gp.hat = 7; + break; + case DPAD_UP_LEFT: + Serial.println("up/left"); + gp.hat = 8; + break; + } + } else { + gp.hat = 0; + } + if (!(report[BYTE_MISC_BUTTONS] == MISC_NEUTRAL)) { + // misc are active + uint8_t miscDirection = report[BYTE_MISC_BUTTONS]; + switch (miscDirection) { + case BUTTON_LEFT_PADDLE: + Serial.println("left paddle"); + gp.buttons = GAMEPAD_BUTTON_TL; + break; + case BUTTON_RIGHT_PADDLE: + Serial.println("right paddle"); + gp.buttons = GAMEPAD_BUTTON_TR; + break; + case BUTTON_LEFT_TRIGGER: + Serial.println("left trigger"); + gp.buttons = GAMEPAD_BUTTON_TL2; + break; + case BUTTON_RIGHT_TRIGGER: + Serial.println("right trigger"); + gp.buttons = GAMEPAD_BUTTON_TR2; + break; + case BUTTON_BACK: + Serial.println("back"); + gp.buttons = GAMEPAD_BUTTON_SELECT; + break; + case BUTTON_START: + Serial.println("start"); + gp.buttons = GAMEPAD_BUTTON_START; + break; + } + } + } else { + gp.buttons = GAMEPAD_BUTTON_A; + } + while (!usb_hid.ready()) { + yield(); + } + usb_hid.sendReport(0, &gp, sizeof(gp)); + // Continue to receive the next report + if (!tuh_hid_receive_report(dev_addr, instance)) { + Serial.println("Error: cannot request to receive report"); + } +} diff --git a/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/gamepad_reports.h b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/gamepad_reports.h new file mode 100644 index 000000000..167aefde6 --- /dev/null +++ b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/gamepad_reports.h @@ -0,0 +1,54 @@ +// SPDX-FileCopyrightText: 2024 Liz Clark for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +// HID reports for Logitech Gamepad F310 +// Update defines and combo_report for your gamepad and/or combo! + +uint8_t combo_report[] = { 0x80, 0x7F, 0x80, 0x7F, 0x28, 0x03, 0x00, 0xFF }; + +// Byte indices for the gamepad report +#define BYTE_LEFT_STICK_X 0 // Left analog stick X-axis +#define BYTE_LEFT_STICK_Y 1 // Left analog stick Y-axis +#define BYTE_RIGHT_STICK_X 2 // Right analog stick X-axis +#define BYTE_RIGHT_STICK_Y 3 // Right analog stick Y-axis +#define BYTE_DPAD_BUTTONS 4 // D-Pad and face buttons +#define BYTE_MISC_BUTTONS 5 // Miscellaneous buttons (triggers, paddles, start, back) +#define BYTE_UNUSED 6 // Unused +#define BYTE_STATUS 7 // Status byte (usually constant) + +// Button masks for Byte[4] (DPAD and face buttons) +#define DPAD_MASK 0x07 // Bits 0-2 for D-Pad direction +#define DPAD_NEUTRAL 0x08 // Bit 3 set when D-Pad is neutral + +// D-Pad directions (use when DPAD_NEUTRAL is not set) +#define DPAD_UP 0x00 // 0000 +#define DPAD_UP_RIGHT 0x01 // 0001 +#define DPAD_RIGHT 0x02 // 0010 +#define DPAD_DOWN_RIGHT 0x03 // 0011 +#define DPAD_DOWN 0x04 // 0100 +#define DPAD_DOWN_LEFT 0x05 // 0101 +#define DPAD_LEFT 0x06 // 0110 +#define DPAD_UP_LEFT 0x07 // 0111 + +// Face buttons (Byte[4] bits 4-7) +#define BUTTON_X 0x18 +#define BUTTON_A 0x28 +#define BUTTON_B 0x48 +#define BUTTON_Y 0x88 + +// Button masks for Byte[5] (MISC buttons) +#define MISC_NEUTRAL 0x00 + +// Miscellaneous buttons (Byte[5]) +#define BUTTON_LEFT_PADDLE 0x01 +#define BUTTON_RIGHT_PADDLE 0x02 +#define BUTTON_LEFT_TRIGGER 0x04 +#define BUTTON_RIGHT_TRIGGER 0x08 +#define BUTTON_BACK 0x10 +#define BUTTON_START 0x20 + +#define LEFT_STICK_X_NEUTRAL 0x80 +#define LEFT_STICK_Y_NEUTRAL 0x7F +#define RIGHT_STICK_X_NEUTRAL 0x80 +#define RIGHT_STICK_Y_NEUTRAL 0x7F diff --git a/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/usbh_helper.h b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/usbh_helper.h new file mode 100644 index 000000000..107f5c09f --- /dev/null +++ b/USB_Host_Turbo_Button_Gamepad/Arduino_USB_Host_Turbo_Button_Gamepad/usbh_helper.h @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: 2024 Ha Thach for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +/********************************************************************* + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + Copyright (c) 2019 Ha Thach for Adafruit Industries + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +#ifndef USBH_HELPER_H +#define USBH_HELPER_H + +#ifdef ARDUINO_ARCH_RP2040 + // pio-usb is required for rp2040 host + #include "pio_usb.h" + + // Pin D+ for host, D- = D+ + 1 + #ifndef PIN_USB_HOST_DP + #define PIN_USB_HOST_DP 16 + #endif + + // Pin for enabling Host VBUS. comment out if not used + #ifndef PIN_5V_EN + #define PIN_5V_EN 18 + #endif + + #ifndef PIN_5V_EN_STATE + #define PIN_5V_EN_STATE 1 + #endif +#endif // ARDUINO_ARCH_RP2040 + +#include "Adafruit_TinyUSB.h" + +#if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 + // USB Host using MAX3421E: SPI, CS, INT + #include "SPI.h" + + #if defined(ARDUINO_METRO_ESP32S2) + Adafruit_USBH_Host USBHost(&SPI, 15, 14); + #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2) + Adafruit_USBH_Host USBHost(&SPI, 33, 15); + #else + // Default CS and INT are pin 10, 9 + Adafruit_USBH_Host USBHost(&SPI, 10, 9); + #endif +#else + // Native USB Host such as rp2040 + Adafruit_USBH_Host USBHost; +#endif + +//--------------------------------------------------------------------+ +// Helper Functions +//--------------------------------------------------------------------+ + +#ifdef ARDUINO_ARCH_RP2040 +static void rp2040_configure_pio_usb(void) { + //while ( !Serial ) delay(10); // wait for native usb + Serial.println("Core1 setup to run TinyUSB host with pio-usb"); + + // Check for CPU frequency, must be multiple of 120Mhz for bit-banging USB + uint32_t cpu_hz = clock_get_hz(clk_sys); + if (cpu_hz != 120000000UL && cpu_hz != 240000000UL) { + while (!Serial) { + delay(10); // wait for native usb + } + Serial.printf("Error: CPU Clock = %lu, PIO USB require CPU clock must be multiple of 120 Mhz\r\n", cpu_hz); + Serial.printf("Change your CPU Clock to either 120 or 240 Mhz in Menu->CPU Speed \r\n"); + while (1) { + delay(1); + } + } + +#ifdef PIN_5V_EN + pinMode(PIN_5V_EN, OUTPUT); + digitalWrite(PIN_5V_EN, PIN_5V_EN_STATE); +#endif + + pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; + pio_cfg.pin_dp = PIN_USB_HOST_DP; + +#if defined(ARDUINO_RASPBERRY_PI_PICO_W) + // For pico-w, PIO is also used to communicate with cyw43 + // Therefore we need to alternate the pio-usb configuration + // details https://github.com/sekigon-gonnoc/Pico-PIO-USB/issues/46 + pio_cfg.sm_tx = 3; + pio_cfg.sm_rx = 2; + pio_cfg.sm_eop = 3; + pio_cfg.pio_rx_num = 0; + pio_cfg.pio_tx_num = 1; + pio_cfg.tx_ch = 9; +#endif + + USBHost.configure_pio_usb(1, &pio_cfg); +} +#endif + +#endif diff --git a/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/.feather_rp2040_usbhost_tinyusb.test.only b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/.feather_rp2040_usbhost_tinyusb.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report-adafruit_feather_usb_host.uf2 b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report-adafruit_feather_usb_host.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..746c92aa37c63ca372e29172f929b8eeb0fee1d9 GIT binary patch literal 220672 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 ib9AZ4?L&QUSo5R@px{FCO;rvh= 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 A_J#Til7_u!DfjP4l(WgV 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 rIF5=TrpoYZ!15GtDGmPz5)Nw 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 aRlJno)+hTeq%VBA>`VWDdF2wI{QnnZ$s33O literal 0 HcmV?d00001 diff --git a/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report.ino b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report.ino new file mode 100644 index 000000000..977ce97ce --- /dev/null +++ b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/gamepad_device_report.ino @@ -0,0 +1,306 @@ +// SPDX-FileCopyrightText: 2024 Liz Clark for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +/********************************************************************* + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + Copyright (c) 2019 Ha Thach for Adafruit Industries + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +/* This example demonstrates use of both device and host, where + * - Device runs on native USB controller (roothub port0) + * - Host depends on MCU: + * - rp2040: bit-banging 2 GPIOs with Pico-PIO-USB library (roothub port1) + * - samd21/51, nrf52840, esp32: using MAX3421e controller (host shield) + * + * Requirements: + * - For rp2040: + * - Pico-PIO-USB library + * - 2 consecutive GPIOs: D+ is defined by PIN_USB_HOST_DP, D- = D+ +1 + * - Provide VBus (5v) and GND for peripheral + * - CPU Speed must be either 120 or 240 MHz. Selected via "Menu -> CPU Speed" + * - For samd21/51, nrf52840, esp32: + * - Additional MAX2341e USB Host shield or featherwing is required + * - SPI instance, CS pin, INT pin are correctly configured in usbh_helper.h + */ + +/* Host example will get device descriptors of attached devices and print it out via + * device CDC (Serial) as follows: + * Device 1: ID 046d:c52f + Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 0200 + bDeviceClass 0 + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 8 + idVendor 0x046d + idProduct 0xc52f + bcdDevice 2200 + iManufacturer 1 Logitech + iProduct 2 USB Receiver + iSerialNumber 0 + bNumConfigurations 1 + * + */ + +// USBHost is defined in usbh_helper.h +#include "usbh_helper.h" +#include "tusb.h" + +// Language ID: English +#define LANGUAGE_ID 0x0409 + +typedef struct { + tusb_desc_device_t desc_device; + uint16_t manufacturer[32]; + uint16_t product[48]; + uint16_t serial[16]; + bool mounted; +} dev_info_t; + +// CFG_TUH_DEVICE_MAX is defined by tusb_config header +dev_info_t dev_info[CFG_TUH_DEVICE_MAX] = { 0 }; + +void setup() { + Serial.begin(115200); + +#if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 + // init host stack on controller (rhport) 1 + // For rp2040: this is called in core1's setup1() + USBHost.begin(1); +#endif + + Serial.println("TinyUSB Dual Device Info Example with HID Report"); +} + +#if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 +//--------------------------------------------------------------------+ +// Using Host shield MAX3421E controller +//--------------------------------------------------------------------+ +void loop() { + USBHost.task(); + Serial.flush(); +} + +#elif defined(ARDUINO_ARCH_RP2040) +//--------------------------------------------------------------------+ +// For RP2040 use both core0 for device stack, core1 for host stack +//--------------------------------------------------------------------// + +//------------- Core0 -------------// +void loop() { +} + +//------------- Core1 -------------// +void setup1() { + // configure pio-usb: defined in usbh_helper.h + rp2040_configure_pio_usb(); + + // run host stack on controller (rhport) 1 + // Note: For rp2040 pico-pio-usb, calling USBHost.begin() on core1 will have most of the + // host bit-banging processing works done in core1 to free up core0 for other works + USBHost.begin(1); +} + +void loop1() { + USBHost.task(); + Serial.flush(); +} +#endif + +//--------------------------------------------------------------------+ +// TinyUSB Host callbacks +//--------------------------------------------------------------------+ +void print_device_descriptor(tuh_xfer_t *xfer); + +void utf16_to_utf8(uint16_t *temp_buf, size_t buf_len); + +void print_lsusb(void) { + bool no_device = true; + for (uint8_t daddr = 1; daddr < CFG_TUH_DEVICE_MAX + 1; daddr++) { + // TODO can use tuh_mounted(daddr), but tinyusb has a bug + // use local connected flag instead + dev_info_t *dev = &dev_info[daddr - 1]; + if (dev->mounted) { + Serial.printf("Device %u: ID %04x:%04x %s %s\r\n", daddr, + dev->desc_device.idVendor, dev->desc_device.idProduct, + (char *) dev->manufacturer, (char *) dev->product); + + no_device = false; + } + } + + if (no_device) { + Serial.println("No device connected (except hub)"); + } +} + +// Invoked when device is mounted (configured) +void tuh_mount_cb(uint8_t daddr) { + Serial.printf("Device attached, address = %d\r\n", daddr); + + dev_info_t *dev = &dev_info[daddr - 1]; + dev->mounted = true; + + // Get Device Descriptor + tuh_descriptor_get_device(daddr, &dev->desc_device, 18, print_device_descriptor, 0); +} + +/// Invoked when device is unmounted (bus reset/unplugged) +void tuh_umount_cb(uint8_t daddr) { + Serial.printf("Device removed, address = %d\r\n", daddr); + dev_info_t *dev = &dev_info[daddr - 1]; + dev->mounted = false; + + // print device summary + print_lsusb(); +} + +void print_device_descriptor(tuh_xfer_t *xfer) { + if (XFER_RESULT_SUCCESS != xfer->result) { + Serial.printf("Failed to get device descriptor\r\n"); + return; + } + + uint8_t const daddr = xfer->daddr; + dev_info_t *dev = &dev_info[daddr - 1]; + tusb_desc_device_t *desc = &dev->desc_device; + + Serial.printf("Device %u: ID %04x:%04x\r\n", daddr, desc->idVendor, desc->idProduct); + Serial.printf("Device Descriptor:\r\n"); + Serial.printf(" bLength %u\r\n" , desc->bLength); + Serial.printf(" bDescriptorType %u\r\n" , desc->bDescriptorType); + Serial.printf(" bcdUSB %04x\r\n" , desc->bcdUSB); + Serial.printf(" bDeviceClass %u\r\n" , desc->bDeviceClass); + Serial.printf(" bDeviceSubClass %u\r\n" , desc->bDeviceSubClass); + Serial.printf(" bDeviceProtocol %u\r\n" , desc->bDeviceProtocol); + Serial.printf(" bMaxPacketSize0 %u\r\n" , desc->bMaxPacketSize0); + Serial.printf(" idVendor 0x%04x\r\n" , desc->idVendor); + Serial.printf(" idProduct 0x%04x\r\n" , desc->idProduct); + Serial.printf(" bcdDevice %04x\r\n" , desc->bcdDevice); + + // Get String descriptor using Sync API + Serial.printf(" iManufacturer %u ", desc->iManufacturer); + if (XFER_RESULT_SUCCESS == + tuh_descriptor_get_manufacturer_string_sync(daddr, LANGUAGE_ID, dev->manufacturer, sizeof(dev->manufacturer))) { + utf16_to_utf8(dev->manufacturer, sizeof(dev->manufacturer)); + Serial.printf((char *) dev->manufacturer); + } + Serial.printf("\r\n"); + + Serial.printf(" iProduct %u ", desc->iProduct); + if (XFER_RESULT_SUCCESS == + tuh_descriptor_get_product_string_sync(daddr, LANGUAGE_ID, dev->product, sizeof(dev->product))) { + utf16_to_utf8(dev->product, sizeof(dev->product)); + Serial.printf((char *) dev->product); + } + Serial.printf("\r\n"); + + Serial.printf(" iSerialNumber %u ", desc->iSerialNumber); + if (XFER_RESULT_SUCCESS == + tuh_descriptor_get_serial_string_sync(daddr, LANGUAGE_ID, dev->serial, sizeof(dev->serial))) { + utf16_to_utf8(dev->serial, sizeof(dev->serial)); + Serial.printf((char *) dev->serial); + } + Serial.printf("\r\n"); + + Serial.printf(" bNumConfigurations %u\r\n", desc->bNumConfigurations); + + // print device summary + print_lsusb(); +} + +//--------------------------------------------------------------------+ +// String Descriptor Helper +//--------------------------------------------------------------------+ + +static void _convert_utf16le_to_utf8(const uint16_t *utf16, size_t utf16_len, uint8_t *utf8, size_t utf8_len) { + // TODO: Check for runover. + (void) utf8_len; + // Get the UTF-16 length out of the data itself. + + for (size_t i = 0; i < utf16_len; i++) { + uint16_t chr = utf16[i]; + if (chr < 0x80) { + *utf8++ = chr & 0xff; + } else if (chr < 0x800) { + *utf8++ = (uint8_t) (0xC0 | (chr >> 6 & 0x1F)); + *utf8++ = (uint8_t) (0x80 | (chr >> 0 & 0x3F)); + } else { + // TODO: Verify surrogate. + *utf8++ = (uint8_t) (0xE0 | (chr >> 12 & 0x0F)); + *utf8++ = (uint8_t) (0x80 | (chr >> 6 & 0x3F)); + *utf8++ = (uint8_t) (0x80 | (chr >> 0 & 0x3F)); + } + // TODO: Handle UTF-16 code points that take two entries. + } +} + +// Count how many bytes a utf-16-le encoded string will take in utf-8. +static int _count_utf8_bytes(const uint16_t *buf, size_t len) { + size_t total_bytes = 0; + for (size_t i = 0; i < len; i++) { + uint16_t chr = buf[i]; + if (chr < 0x80) { + total_bytes += 1; + } else if (chr < 0x800) { + total_bytes += 2; + } else { + total_bytes += 3; + } + // TODO: Handle UTF-16 code points that take two entries. + } + return total_bytes; +} + +void utf16_to_utf8(uint16_t *temp_buf, size_t buf_len) { + size_t utf16_len = ((temp_buf[0] & 0xff) - 2) / sizeof(uint16_t); + size_t utf8_len = _count_utf8_bytes(temp_buf + 1, utf16_len); + + _convert_utf16le_to_utf8(temp_buf + 1, utf16_len, (uint8_t *) temp_buf, buf_len); + ((uint8_t *) temp_buf)[utf8_len] = '\0'; +} + +//--------------------------------------------------------------------+ +// HID Host Callback Functions +//--------------------------------------------------------------------+ + +void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_report, uint16_t desc_len) +{ + Serial.printf("HID device mounted (address %d, instance %d)\n", dev_addr, instance); + + // Start receiving HID reports + if (!tuh_hid_receive_report(dev_addr, instance)) + { + Serial.printf("Error: cannot request to receive report\n"); + } +} + +void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) +{ + Serial.printf("HID device unmounted (address %d, instance %d)\n", dev_addr, instance); +} + +void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len) +{ + Serial.printf("Received HID report from device %d instance %d: ", dev_addr, instance); + for (uint16_t i = 0; i < len; i++) + { + Serial.printf("%02X ", report[i]); + } + Serial.printf("\n"); + + // Continue to receive the next report + if (!tuh_hid_receive_report(dev_addr, instance)) + { + Serial.printf("Error: cannot request to receive report\n"); + } +} diff --git a/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/usbh_helper.h b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/usbh_helper.h new file mode 100644 index 000000000..107f5c09f --- /dev/null +++ b/USB_Host_Turbo_Button_Gamepad/gamepad_device_report/usbh_helper.h @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: 2024 Ha Thach for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +/********************************************************************* + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + Copyright (c) 2019 Ha Thach for Adafruit Industries + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +#ifndef USBH_HELPER_H +#define USBH_HELPER_H + +#ifdef ARDUINO_ARCH_RP2040 + // pio-usb is required for rp2040 host + #include "pio_usb.h" + + // Pin D+ for host, D- = D+ + 1 + #ifndef PIN_USB_HOST_DP + #define PIN_USB_HOST_DP 16 + #endif + + // Pin for enabling Host VBUS. comment out if not used + #ifndef PIN_5V_EN + #define PIN_5V_EN 18 + #endif + + #ifndef PIN_5V_EN_STATE + #define PIN_5V_EN_STATE 1 + #endif +#endif // ARDUINO_ARCH_RP2040 + +#include "Adafruit_TinyUSB.h" + +#if defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421 + // USB Host using MAX3421E: SPI, CS, INT + #include "SPI.h" + + #if defined(ARDUINO_METRO_ESP32S2) + Adafruit_USBH_Host USBHost(&SPI, 15, 14); + #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2) + Adafruit_USBH_Host USBHost(&SPI, 33, 15); + #else + // Default CS and INT are pin 10, 9 + Adafruit_USBH_Host USBHost(&SPI, 10, 9); + #endif +#else + // Native USB Host such as rp2040 + Adafruit_USBH_Host USBHost; +#endif + +//--------------------------------------------------------------------+ +// Helper Functions +//--------------------------------------------------------------------+ + +#ifdef ARDUINO_ARCH_RP2040 +static void rp2040_configure_pio_usb(void) { + //while ( !Serial ) delay(10); // wait for native usb + Serial.println("Core1 setup to run TinyUSB host with pio-usb"); + + // Check for CPU frequency, must be multiple of 120Mhz for bit-banging USB + uint32_t cpu_hz = clock_get_hz(clk_sys); + if (cpu_hz != 120000000UL && cpu_hz != 240000000UL) { + while (!Serial) { + delay(10); // wait for native usb + } + Serial.printf("Error: CPU Clock = %lu, PIO USB require CPU clock must be multiple of 120 Mhz\r\n", cpu_hz); + Serial.printf("Change your CPU Clock to either 120 or 240 Mhz in Menu->CPU Speed \r\n"); + while (1) { + delay(1); + } + } + +#ifdef PIN_5V_EN + pinMode(PIN_5V_EN, OUTPUT); + digitalWrite(PIN_5V_EN, PIN_5V_EN_STATE); +#endif + + pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; + pio_cfg.pin_dp = PIN_USB_HOST_DP; + +#if defined(ARDUINO_RASPBERRY_PI_PICO_W) + // For pico-w, PIO is also used to communicate with cyw43 + // Therefore we need to alternate the pio-usb configuration + // details https://github.com/sekigon-gonnoc/Pico-PIO-USB/issues/46 + pio_cfg.sm_tx = 3; + pio_cfg.sm_rx = 2; + pio_cfg.sm_eop = 3; + pio_cfg.pio_rx_num = 0; + pio_cfg.pio_tx_num = 1; + pio_cfg.tx_ch = 9; +#endif + + USBHost.configure_pio_usb(1, &pio_cfg); +} +#endif + +#endif