From 6c18cee5ec670ce4e75fbeaff3147e061cd05012 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 14 Mar 2025 15:05:19 -0500 Subject: [PATCH] USB mouse works! --- .gitmodules | 6 ++++++ CMakeLists.txt | 18 ++++++++++++++---- include/tusb_config.h | 4 ++++ lib/Pico-PIO-USB | 1 + lib/tinyusb | 1 + src/hid.c | 2 +- src/main.c | 15 +++++++++++++-- 7 files changed, 40 insertions(+), 7 deletions(-) create mode 160000 lib/Pico-PIO-USB create mode 160000 lib/tinyusb diff --git a/.gitmodules b/.gitmodules index 0e239de..2cfb244 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "external/no-OS-FatFS-SD-SPI-RPi-Pico"] path = external/no-OS-FatFS-SD-SPI-RPi-Pico url = https://github.com/evansm7/no-OS-FatFS-SD-SPI-RPi-Pico.git +[submodule "lib/tinyusb"] + path = lib/tinyusb + url = https://github.com/hathach/tinyusb +[submodule "lib/Pico-PIO-USB"] + path = lib/Pico-PIO-USB + url = https://github.com/tannewt/Pico-PIO-USB diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a2c61e..8b019ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,9 @@ cmake_minimum_required(VERSION 3.13) # Note: to build for fruit jam: # cmake -DPICO_BOARD=pico2 -DUSE_HSTX=1 -S . -B build_hstx -DPICO_SDK_PATH=../pico-sdk +set(PICO_TINYUSB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/tinyusb) +set(PIOUSB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/Pico-PIO-USB) + option(USE_SD "Build in SD support" OFF) set(SD_TX 3 CACHE STRING "SD SPI TX pin") set(SD_RX 4 CACHE STRING "SD SPI RX pin") @@ -71,8 +74,6 @@ pico_sdk_init() set(FAMILY rp2040) set(BOARD raspberry_pi_pico) -set(TINYUSB_PATH ${PICO_SDK_PATH}/lib/tinyusb) - # umac subproject (and Musashi sub-subproject) set(UMAC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/external/umac) set(UMAC_MUSASHI_PATH ${UMAC_PATH}/external/Musashi) @@ -128,6 +129,8 @@ endif() add_compile_definitions(PIN_USB_HOST_DP=${PIN_USB_HOST_DP}) add_compile_definitions(PIN_USB_HOST_DM=${PIN_USB_HOST_DM}) +add_compile_definitions(PICO_DEFAULT_PIO_USB_DP_PIN=${PIN_USB_HOST_DP}) +add_compile_definitions(PICO_DEFAULT_PIO_USB_DM_PIN=${PIN_USB_HOST_DM}) if (TARGET tinyusb_device) add_executable(firmware @@ -137,6 +140,11 @@ if (TARGET tinyusb_device) src/hid.c ${EXTRA_SD_SRC} + ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c + ${PIOUSB_PATH}/src/pio_usb.c + ${PIOUSB_PATH}/src/pio_usb_host.c + ${PIOUSB_PATH}/src/usb_crc.c + ${UMAC_SOURCES} ) @@ -163,10 +171,12 @@ if (TARGET tinyusb_device) target_include_directories(firmware PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include - ${TINYUSB_PATH}/hw - ${TINYUSB_PATH}/src + ${PICO_TINYUSB_PATH}/hw + ${PICO_TINYUSB_PATH}/src ${UMAC_INCLUDE_PATHS} + ${PIOUSB_PATH}/src incbin + ${CMAKE_CURRENT_LIST_DIR} ) pico_enable_stdio_uart(firmware 1) diff --git a/include/tusb_config.h b/include/tusb_config.h index cbe8523..88be64d 100644 --- a/include/tusb_config.h +++ b/include/tusb_config.h @@ -89,6 +89,10 @@ #define CFG_TUH_HID_EPIN_BUFSIZE 64 #define CFG_TUH_HID_EPOUT_BUFSIZE 64 +#ifndef BOARD_TUH_RHPORT +#define BOARD_TUH_RHPORT 1 +#endif + #ifdef __cplusplus } #endif diff --git a/lib/Pico-PIO-USB b/lib/Pico-PIO-USB new file mode 160000 index 0000000..1862cc0 --- /dev/null +++ b/lib/Pico-PIO-USB @@ -0,0 +1 @@ +Subproject commit 1862cc008e026cbd07b97b28e29eafb5f38b35fb diff --git a/lib/tinyusb b/lib/tinyusb new file mode 160000 index 0000000..5333d04 --- /dev/null +++ b/lib/tinyusb @@ -0,0 +1 @@ +Subproject commit 5333d042f9384ec1cc0663a2708c0ca7cb5cdc32 diff --git a/src/hid.c b/src/hid.c index caae549..6f74eeb 100644 --- a/src/hid.c +++ b/src/hid.c @@ -24,7 +24,7 @@ * THE SOFTWARE. */ -#include "bsp/rp2040/board.h" +#include "bsp/rp2040/boards/adafruit_fruit_jam/board.h" #include "tusb.h" #include "kbd.h" diff --git a/src/main.c b/src/main.c index 42c18f6..3418a03 100644 --- a/src/main.c +++ b/src/main.c @@ -40,7 +40,8 @@ #include "video.h" #include "kbd.h" -#include "bsp/rp2040/board.h" +#include "pio_usb_configuration.h" +#include "bsp/rp2040/boards/adafruit_fruit_jam/board.h" #include "tusb.h" #include "umac.h" @@ -275,9 +276,19 @@ int main() printf("Starting, init usb\n"); pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; + pio_cfg.tx_ch = 2; + pio_cfg.pin_dp = PICO_DEFAULT_PIO_USB_DP_PIN; + +//#ifdef PICO_DEFAULT_PIO_USB_VBUSEN_PIN + gpio_init(PICO_DEFAULT_PIO_USB_VBUSEN_PIN); + gpio_set_dir(PICO_DEFAULT_PIO_USB_VBUSEN_PIN, GPIO_OUT); + gpio_put(PICO_DEFAULT_PIO_USB_VBUSEN_PIN, PICO_DEFAULT_PIO_USB_VBUSEN_STATE); +//#endif + +#if 0 _Static_assert(PIN_USB_HOST_DP + 1 == PIN_USB_HOST_DM || PIN_USB_HOST_DP - 1 == PIN_USB_HOST_DM, "Permitted USB D+/D- configuration"); pio_cfg.pinout = PIN_USB_HOST_DP + 1 == PIN_USB_HOST_DM ? PIO_USB_PINOUT_DPDM : PIO_USB_PINOUT_DMDP; - pio_cfg.pin_dp = PIN_USB_HOST_DP; +#endif tuh_configure(BOARD_TUH_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg); tuh_init(BOARD_TUH_RHPORT);