From 23c35dac882d8e9697d4cf0d6b40cc98d0e892a6 Mon Sep 17 00:00:00 2001 From: Toxa Date: Sat, 11 Mar 2023 01:13:29 +0300 Subject: [PATCH] update to the latest Pico SDK/LWIP/TinyUSB; remove submodules; use PIO instead of SPI --- .gitignore | 3 +- .gitmodules | 10 ----- CMakeLists.txt | 15 +++---- build/pico_gb_printer.uf2 | Bin 1218048 -> 1224704 bytes include/globals.h | 13 ------ include/linkcable.h | 29 +++++++++++++ include/lwipopts.h | 12 +++++- include/tusb_config.h | 65 +++++++++++++++-------------- include/tusb_lwip_glue.h | 9 +++-- lwip | 1 - pico-sdk | 1 - pico_sdk_import.cmake | 73 +++++++++++++++++++++++++++++++++ src/linkcable.c | 27 +++++++++++++ src/linkcable.pio | 51 +++++++++++++++++++++++ src/pico_gb_printer.c | 83 +++++++++++--------------------------- src/tusb_lwip_glue.c | 53 +++++++++++++----------- src/usb_descriptors.c | 37 +++++++++++++---- tinyusb | 1 - 18 files changed, 321 insertions(+), 162 deletions(-) create mode 100644 include/linkcable.h delete mode 160000 lwip delete mode 160000 pico-sdk create mode 100644 pico_sdk_import.cmake create mode 100644 src/linkcable.c create mode 100644 src/linkcable.pio delete mode 160000 tinyusb diff --git a/.gitignore b/.gitignore index 08538d7..f33c2ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vscode build makefsdata -unused \ No newline at end of file +unused +gen_build.bat \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index c3e4b4f..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,10 +0,0 @@ -[submodule "tinyusb"] - path = tinyusb - url = https://github.com/raspberrypi/tinyusb.git - branch = pico -[submodule "pico-sdk"] - path = pico-sdk - url = https://github.com/raspberrypi/pico-sdk.git -[submodule "lwip"] - path = lwip - url = https://git.savannah.nongnu.org/git/lwip.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d0da75..382079c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,12 @@ cmake_minimum_required(VERSION 3.13) -# We prefer to have all linked submodules at toplevel -set(PICO_TINYUSB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/tinyusb) - -include(pico-sdk/pico_sdk_init.cmake) +include(pico_sdk_import.cmake) project(pico_gb_printer) #set(PICO_CXX_ENABLE_EXCEPTIONS 1) pico_sdk_init() # LWIP -set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lwip) +set(LWIP_DIR ${PICO_SDK_PATH}/lib/lwip) set (LWIP_INCLUDE_DIRS "include" "${LWIP_DIR}/src/include" @@ -18,16 +15,20 @@ set (LWIP_INCLUDE_DIRS include(${LWIP_DIR}/src/Filelists.cmake) # Extra stuff from TinyUSB, that is not part of tinyusb_device library +set(PICO_TINYUSB_PATH ${PICO_SDK_PATH}/lib/tinyusb) set(TINYUSB_LIBNETWORKING_SOURCES ${PICO_TINYUSB_PATH}/lib/networking/dhserver.c + ${PICO_TINYUSB_PATH}/lib/networking/dnserver.c ${PICO_TINYUSB_PATH}/lib/networking/rndis_reports.c ) -add_executable(${PROJECT_NAME} src/pico_gb_printer.c src/gb_printer.c src/tusb_lwip_glue.c src/usb_descriptors.c ${TINYUSB_LIBNETWORKING_SOURCES}) +add_executable(${PROJECT_NAME} src/pico_gb_printer.c src/linkcable.c src/gb_printer.c src/tusb_lwip_glue.c src/usb_descriptors.c ${TINYUSB_LIBNETWORKING_SOURCES}) + +pico_generate_pio_header(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/src/linkcable.pio) pico_enable_stdio_usb(${PROJECT_NAME} 0) pico_enable_stdio_uart(${PROJECT_NAME} 0) target_include_directories(${PROJECT_NAME} PRIVATE ${LWIP_INCLUDE_DIRS} ${PICO_TINYUSB_PATH}/src ${PICO_TINYUSB_PATH}/lib/networking) -target_link_libraries(${PROJECT_NAME} pico_stdlib pico_multicore pico_unique_id hardware_spi tinyusb_device lwipallapps lwipcore hardware_flash) +target_link_libraries(${PROJECT_NAME} pico_stdlib hardware_pio pico_unique_id tinyusb_device lwipallapps lwipcore hardware_flash) pico_add_extra_outputs(${PROJECT_NAME}) target_compile_definitions(${PROJECT_NAME} PRIVATE PICO_ENTER_USB_BOOT_ON_EXIT=1) diff --git a/build/pico_gb_printer.uf2 b/build/pico_gb_printer.uf2 index 1f7a24c962c6f9d678ceb5a8e26cd3bec2ff8f9d..a645c0f8d31a451b443cee748bedc130dc96bb3a 100644 GIT binary patch delta 124876 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 LHaY9|^(p@kaBCcD delta 119408 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

>YU%2Cv#JfZrVj-d&c9^AhWa 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 diff --git a/include/globals.h b/include/globals.h index 23483e8..f7a1239 100644 --- a/include/globals.h +++ b/include/globals.h @@ -17,19 +17,6 @@ #define LED_TOGGLE #endif -// SPI -#define SPI_BAUDRATE 64 * 1024 * 8 - -#define SPI_PORT spi0 -#define PIN_SPI_SIN 0 -#define PIN_SPI_SCK 2 -#define PIN_SPI_SOUT 3 - -//#define SPI_PORT spi1 -//#define PIN_SPI_SCK 10 -//#define PIN_SPI_SOUT 11 -//#define PIN_SPI_SIN 12 - // "Tear" button pin, define to 0 to disable #define PIN_KEY 23 diff --git a/include/linkcable.h b/include/linkcable.h new file mode 100644 index 0000000..966edf6 --- /dev/null +++ b/include/linkcable.h @@ -0,0 +1,29 @@ +#ifndef _LINKCABLE_H_INCLUDE_ +#define _LINKCABLE_H_INCLUDE_ + +#include "hardware/pio.h" + +#define LINKCABLE_PIO pio0 +#define LINKCABLE_SM 0 + +#define LINKCABLE_BITS 8 + +#define PIN_SIN 0 +#define PIN_SCK 2 +#define PIN_SOUT 3 + +static inline uint8_t linkcable_receive(void) { + return pio_sm_get(LINKCABLE_PIO, LINKCABLE_SM); +} + +static inline void linkcable_send(uint8_t data) { + pio_sm_put(LINKCABLE_PIO, LINKCABLE_SM, data); +} + +static inline void linkcable_reset(void) { + pio_sm_restart(LINKCABLE_PIO, LINKCABLE_SM); +} + +void linkcable_init(irq_handler_t onReceive); + +#endif \ No newline at end of file diff --git a/include/lwipopts.h b/include/lwipopts.h index 87ebdce..7e56d4e 100644 --- a/include/lwipopts.h +++ b/include/lwipopts.h @@ -42,11 +42,14 @@ #define LWIP_ICMP 1 #define LWIP_UDP 1 #define LWIP_TCP 1 +#define LWIP_IPV4 1 +#define LWIP_IPV6 0 #define ETH_PAD_SIZE 0 #define LWIP_IP_ACCEPT_UDP_PORT(p) ((p) == PP_NTOHS(67)) #define TCP_MSS (1500 /*mtu*/ - 20 /*iphdr*/ - 20 /*tcphhr*/) #define TCP_SND_BUF (2 * TCP_MSS) +#define TCP_WND (TCP_MSS) #define ETHARP_SUPPORT_STATIC_ENTRIES 1 @@ -67,8 +70,13 @@ #define HTTPD_USE_CUSTOM_FSDATA 0 #define HTTPD_FSDATA_FILE "pico_printer_fs.c" -#define LWIP_SINGLE_NETIF 1 - #define HTTPD_ADDITIONAL_CONTENT_TYPES {"bin", HTTP_CONTENT_TYPE("application/pico-printer-binary-log")} +#define LWIP_SINGLE_NETIF 1 + +#define PBUF_POOL_SIZE 2 +#define LWIP_MULTICAST_PING 1 +#define LWIP_BROADCAST_PING 1 +#define LWIP_IPV6_MLD 0 +#define LWIP_IPV6_SEND_ROUTER_SOLICIT 0 #endif /* __LWIPOPTS_H__ */ diff --git a/include/tusb_config.h b/include/tusb_config.h index 262d4eb..69c549a 100644 --- a/include/tusb_config.h +++ b/include/tusb_config.h @@ -30,46 +30,46 @@ extern "C" { #endif -//-------------------------------------------------------------------- -// COMMON CONFIGURATION -//-------------------------------------------------------------------- +//--------------------------------------------------------------------+ +// Board Specific Configuration +//--------------------------------------------------------------------+ -// defined by board.mk -#ifndef CFG_TUSB_MCU - #error CFG_TUSB_MCU must be defined +#ifndef CFG_TUSB_RHPORT0_MODE +#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) #endif // RHPort number used for device can be defined by board.mk, default to port 0 -#ifndef BOARD_DEVICE_RHPORT_NUM - #define BOARD_DEVICE_RHPORT_NUM 0 +#ifndef BOARD_TUD_RHPORT +#define BOARD_TUD_RHPORT 0 #endif // RHPort max operational speed can defined by board.mk -// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed -#ifndef BOARD_DEVICE_RHPORT_SPEED - #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ - CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56) - #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_HIGH_SPEED - #else - #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED - #endif +#ifndef BOARD_TUD_MAX_SPEED +#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED #endif -// Device mode with rhport and speed defined by board.mk -#if BOARD_DEVICE_RHPORT_NUM == 0 - #define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#elif BOARD_DEVICE_RHPORT_NUM == 1 - #define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) -#else - #error "Incorrect RHPort configuration" +//-------------------------------------------------------------------- +// Common Configuration +//-------------------------------------------------------------------- + +// defined by compiler flags for flexibility +#ifndef CFG_TUSB_MCU +#error CFG_TUSB_MCU must be defined #endif #ifndef CFG_TUSB_OS -#define CFG_TUSB_OS OPT_OS_NONE +#define CFG_TUSB_OS OPT_OS_NONE +#endif + +#ifndef CFG_TUSB_DEBUG +#define CFG_TUSB_DEBUG 0 #endif -// CFG_TUSB_DEBUG is defined by compiler in DEBUG build -// #define CFG_TUSB_DEBUG 0 +// Enable Device stack +#define CFG_TUD_ENABLED 1 + +// Default is max speed that hardware controller could support with on-chip PHY +#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. * Tinyusb use follows macros to declare transferring memory so that they can be put @@ -83,7 +83,7 @@ #endif #ifndef CFG_TUSB_MEM_ALIGN -#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) #endif //-------------------------------------------------------------------- @@ -95,12 +95,11 @@ #endif //------------- CLASS -------------// -#define CFG_TUD_CDC 0 -#define CFG_TUD_MSC 0 -#define CFG_TUD_HID 0 -#define CFG_TUD_MIDI 0 -#define CFG_TUD_VENDOR 0 -#define CFG_TUD_NET 1 + +// Network class has 2 drivers: ECM/RNDIS and NCM. +// Only one of the drivers can be enabled +#define CFG_TUD_ECM_RNDIS 0 +#define CFG_TUD_NCM (1-CFG_TUD_ECM_RNDIS) #ifdef __cplusplus } diff --git a/include/tusb_lwip_glue.h b/include/tusb_lwip_glue.h index 0c4e9c3..ae87cad 100644 --- a/include/tusb_lwip_glue.h +++ b/include/tusb_lwip_glue.h @@ -12,10 +12,11 @@ #include "lwip/timeouts.h" #include "lwip/apps/httpd.h" -void init_lwip(); -void wait_for_netif_is_up(); -void dhcpd_init(); -void service_traffic(); +void init_lwip(void); +void wait_for_netif_is_up(void); +void dhcpd_init(void); +void dns_init(void); +void service_traffic(void); #ifdef __cplusplus } diff --git a/lwip b/lwip deleted file mode 160000 index 0056522..0000000 --- a/lwip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0056522cc974d2be2005c324f37187b5b3695765 diff --git a/pico-sdk b/pico-sdk deleted file mode 160000 index fc10a97..0000000 --- a/pico-sdk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fc10a97c386f65c1a44c68684fe52a56aaf50df0 diff --git a/pico_sdk_import.cmake b/pico_sdk_import.cmake new file mode 100644 index 0000000..65f8a6f --- /dev/null +++ b/pico_sdk_import.cmake @@ -0,0 +1,73 @@ +# This is a copy of /external/pico_sdk_import.cmake + +# This can be dropped into an external project to help locate this SDK +# It should be include()ed prior to project() + +if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) + set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) + message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) + set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) + message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) + set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) + message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") +endif () + +set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") +set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") +set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") + +if (NOT PICO_SDK_PATH) + if (PICO_SDK_FETCH_FROM_GIT) + include(FetchContent) + set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) + if (PICO_SDK_FETCH_FROM_GIT_PATH) + get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") + endif () + # GIT_SUBMODULES_RECURSE was added in 3.17 + if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0") + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + GIT_SUBMODULES_RECURSE FALSE + ) + else () + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + ) + endif () + + if (NOT pico_sdk) + message("Downloading Raspberry Pi Pico SDK") + FetchContent_Populate(pico_sdk) + set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) + endif () + set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) + else () + message(FATAL_ERROR + "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." + ) + endif () +endif () + +get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +if (NOT EXISTS ${PICO_SDK_PATH}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") +endif () + +set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) +if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") +endif () + +set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + +include(${PICO_SDK_INIT_CMAKE_FILE}) diff --git a/src/linkcable.c b/src/linkcable.c new file mode 100644 index 0000000..f76c7ec --- /dev/null +++ b/src/linkcable.c @@ -0,0 +1,27 @@ +#include + +#include "hardware/pio.h" +#include "hardware/irq.h" + +#include "linkcable.h" +#include "linkcable.pio.h" + +static irq_handler_t linkcable_irq_handler = NULL; + +static void linkcable_isr(void) { + if (linkcable_irq_handler) linkcable_irq_handler(); + if (pio_interrupt_get(LINKCABLE_PIO, 0)) pio_interrupt_clear(LINKCABLE_PIO, 0); +} + +void linkcable_init(irq_handler_t onDataReceive) { + linkcable_program_init(LINKCABLE_PIO, LINKCABLE_SM, pio_add_program(LINKCABLE_PIO, &linkcable_program), PIN_SIN); +// pio_sm_put_blocking(LINKCABLE_PIO, LINKCABLE_SM, LINKCABLE_BITS - 1); + pio_enable_sm_mask_in_sync(LINKCABLE_PIO, (1u << LINKCABLE_SM)); + + if (onDataReceive) { + linkcable_irq_handler = onDataReceive; + pio_set_irq0_source_enabled(LINKCABLE_PIO, pis_interrupt0, true); + irq_set_exclusive_handler(PIO0_IRQ_0, linkcable_isr); + irq_set_enabled(PIO0_IRQ_0, true); + } +} \ No newline at end of file diff --git a/src/linkcable.pio b/src/linkcable.pio new file mode 100644 index 0000000..23f86ec --- /dev/null +++ b/src/linkcable.pio @@ -0,0 +1,51 @@ +; Program name +.program linkcable + +.wrap_target + wait 0 pin 2 ; wait for falling edge + + pull noblock ; pull value for transmission from pico + out null, 24 ; shift left by 24 + + out pins, 1 ; out the MSB bit + + wait 1 pin 2 ; wait for rising edge + + in pins, 1 ; input MSB bit + + set x, 6 +bitloop: + wait 0 pin 2 ; wait for falling edge + + out pins, 1 ; output rest of the bits one by one + + wait 1 pin 2 ; wait for rising edge + + in pins, 1 ; input rest of the bits one by one + jmp x-- bitloop ; loop through the rest of the bits + + push noblock ; push the received value to pico + irq 0 +.wrap + +% c-sdk { +static inline void linkcable_program_init(PIO pio, uint sm, uint offset, uint pin) { + pio_sm_config c = linkcable_program_get_default_config(offset); + + sm_config_set_in_pins(&c, pin); + pio_sm_set_consecutive_pindirs(pio, sm, pin, 3, false); + sm_config_set_in_shift(&c, false, false, LINKCABLE_BITS); + + sm_config_set_out_pins(&c, pin + 3, 1); + pio_sm_set_consecutive_pindirs(pio, sm, pin + 3, 1, true); + sm_config_set_out_shift(&c, false, false, LINKCABLE_BITS); + +// sm_config_set_clkdiv(&c, 5); // Set clock division (Commented out, this one runs at full speed) + + for (uint i = 0; i != 4; i++) pio_gpio_init(pio, pin + i); + + pio_sm_init(pio, sm, offset, &c); + +// pio_sm_set_enabled(pio, sm, true); // Set the state machine running (commented out, I'll start this in the C) +} +%} \ No newline at end of file diff --git a/src/pico_gb_printer.c b/src/pico_gb_printer.c index f51b687..2369880 100644 --- a/src/pico_gb_printer.c +++ b/src/pico_gb_printer.c @@ -1,17 +1,17 @@ #include "pico/stdlib.h" #include "pico/bootrom.h" -#include "pico/multicore.h" #include "hardware/timer.h" #include "hardware/gpio.h" #include "hardware/irq.h" -#include "hardware/spi.h" #include "hardware/resets.h" +#include "hardware/pio.h" #include "globals.h" #include "lwip/apps/fs.h" #include "tusb_lwip_glue.h" #include "gb_printer.h" +#include "linkcable.h" bool debug_enable = ENABLE_DEBUG; bool speed_240_MHz = false; @@ -22,7 +22,7 @@ uint8_t receive_data[BUFFER_SIZE_KB * 1024]; // buffer length is 96K uint8_t json_buffer[1024] = {0}; // buffer for rendering of status json -void receive_data_reset() { +void receive_data_reset(void) { receive_data_pointer = 0; } @@ -31,7 +31,20 @@ void receive_data_write(uint8_t b) { receive_data[receive_data_pointer++] = b; } -void receive_data_commit() { +void receive_data_commit(void) { +} + +// link cable +uint64_t last_receive_ts; +void link_cable_ISR(void) { + linkcable_send(protocol_data_process(linkcable_receive())); + last_receive_ts = time_us_64(); +} + +void link_cable_process_warchdog(void) { + // reset if idle more than 300ms + uint64_t current_time = time_us_64(); + if ((current_time - last_receive_ts) > MS(300)) linkcable_reset(), last_receive_ts = current_time; } // key button @@ -43,58 +56,6 @@ static void key_callback(uint gpio, uint32_t events) { } #endif -// SPI polling loop and routines -static inline void spi_disable(spi_inst_t *spi) { - hw_clear_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); -} -static inline void spi_enable(spi_inst_t *spi) { - hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); -} -static inline bool spi_busy(spi_inst_t *spi) { - return (spi_get_hw(spi)->sr & SPI_SSPSR_BSY_BITS); -} -static inline bool spi_fifo_empty(spi_inst_t *spi) { - return (spi_get_hw(spi)->sr & SPI_SSPSR_TFE_BITS); -} - -void spi_slave_reinit(spi_inst_t *spi, uint32_t baudrate, uint8_t initial_value) { - reset_block(spi == spi0 ? RESETS_RESET_SPI0_BITS : RESETS_RESET_SPI1_BITS); - unreset_block_wait(spi == spi0 ? RESETS_RESET_SPI0_BITS : RESETS_RESET_SPI1_BITS); - - spi_set_baudrate(spi, baudrate); - spi_set_format(spi, 8, SPI_CPOL_1, SPI_CPHA_1, SPI_MSB_FIRST); - hw_set_bits(&spi_get_hw(spi)->dmacr, SPI_SSPDMACR_TXDMAE_BITS | SPI_SSPDMACR_RXDMAE_BITS); - spi_set_slave(spi, true); - - spi_get_hw(spi)->dr = initial_value; - - hw_set_bits(&spi_get_hw(spi)->cr1, SPI_SSPCR1_SSE_BITS); -} - -void core1_context() { - irq_set_mask_enabled(0xffffffff, false); - - // init SPI - gpio_set_function(PIN_SPI_SCK, GPIO_FUNC_SPI), gpio_pull_up(PIN_SPI_SCK); -// gpio_set_function(PIN_SPI_CS, GPIO_FUNC_SPI), gpio_pull_down(PIN_SPI_CS); - gpio_set_function(PIN_SPI_SIN, GPIO_FUNC_SPI); - gpio_set_function(PIN_SPI_SOUT, GPIO_FUNC_SPI); - - spi_slave_reinit(SPI_PORT, SPI_BAUDRATE, protocol_data_init()); - - uint64_t last_readable = time_us_64(); - while (true) { - uint64_t time_us_now = time_us_64(); - if (spi_is_readable(SPI_PORT)) { - spi_get_hw(SPI_PORT)->dr = protocol_data_process(spi_get_hw(SPI_PORT)->dr); - last_readable = time_us_now; - } else if ((time_us_now - last_readable) > MS(300)) { - spi_slave_reinit(SPI_PORT, SPI_BAUDRATE, protocol_data_init()); - last_readable = time_us_now; - } - } -} - // Webserver dynamic handling #define ROOT_PAGE "/index.shtml" #define IMAGE_FILE "/image.bin" @@ -195,7 +156,7 @@ void fs_close_custom(struct fs_file *file) { } // main loop -int main() { +int main(void) { speed_240_MHz = set_sys_clock_khz(240000, false); // For toggle_led @@ -212,15 +173,17 @@ int main() { gpio_set_irq_enabled_with_callback(PIN_KEY, GPIO_IRQ_EDGE_RISE, true, &key_callback); #endif - // Initialize tinyusb, lwip, dhcpd and httpd + // Initialize tinyusb, lwip, dhcpd, dnsd and httpd init_lwip(); + wait_for_netif_is_up(); dhcpd_init(); + dns_init(); httpd_init(); http_set_cgi_handlers(cgi_handlers, LWIP_ARRAYSIZE(cgi_handlers)); http_set_ssi_handler(ssi_handler, ssi_tags, LWIP_ARRAYSIZE(ssi_tags)); - multicore_launch_core1(core1_context); + linkcable_init(link_cable_ISR); LED_OFF; @@ -229,6 +192,8 @@ int main() { tud_task(); // process WEB service_traffic(); + // linkcable watchdog + link_cable_process_warchdog(); } return 0; diff --git a/src/tusb_lwip_glue.c b/src/tusb_lwip_glue.c index 75c1566..6ed56ea 100644 --- a/src/tusb_lwip_glue.c +++ b/src/tusb_lwip_glue.c @@ -54,12 +54,12 @@ static dhcp_entry_t entries[] = { }; static const dhcp_config_t dhcp_config = { - .router = IPADDR4_INIT_BYTES(0, 0, 0, 0), /* router address (if any) */ - .port = 67, /* listen port */ - .dns = IPADDR4_INIT_BYTES(0, 0, 0, 0), /* dns server (if any) */ - .domain = "picoprinter", /* dns suffix */ - .num_entry = TU_ARRAY_SIZE(entries), /* num entry */ - .entries = entries /* entries */ + .router = IPADDR4_INIT_BYTES(0, 0, 0, 0), /* router address (if any) */ + .port = 67, /* listen port */ + .dns = IPADDR4_INIT_BYTES(192, 168, 7, 1), /* dns server (if any) */ + .domain = "printer", /* dns suffix */ + .num_entry = TU_ARRAY_SIZE(entries), /* num entry */ + .entries = entries /* entries */ }; static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) { @@ -70,7 +70,7 @@ static err_t linkoutput_fn(struct netif *netif, struct pbuf *p) { if (!tud_ready()) return ERR_USE; /* if the network driver can accept another packet, we make it happen */ - if (tud_network_can_xmit()) { + if (tud_network_can_xmit(p->tot_len)) { tud_network_xmit(p, 0 /* unused for this example */); return ERR_OK; } @@ -99,16 +99,10 @@ static err_t netif_init_cb(struct netif *netif) { void init_lwip(void) { struct netif *netif = &netif_data; - /* Fixup MAC address based on flash serial */ - //pico_unique_board_id_t id; - //pico_get_unique_board_id(&id); - //memcpy( (tud_network_mac_address)+1, id.id, 5); - // Fixing up does not work because tud_network_mac_address is const - - /* Initialize tinyUSB */ + /* initialize TinyUSB */ tusb_init(); - /* Initialize lwip */ + /* LWIP init */ lwip_init(); /* the lwip virtual MAC address must be different from the host's; to ensure this, we toggle the LSbit */ @@ -120,12 +114,13 @@ void init_lwip(void) { netif_set_default(netif); } -void tud_network_init_cb(void) { - /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ - if (received_frame) { - pbuf_free(received_frame); - received_frame = NULL; +/* handle any DNS requests from dns-server */ +bool dns_query_proc(const char *name, ip4_addr_t *addr) { + if (strcmp(name, "gb.printer") == 0) { + *addr = ipaddr; + return true; } + return false; } bool tud_network_recv_cb(const uint8_t *src, uint16_t size) { @@ -175,14 +170,26 @@ void service_traffic(void) { sys_check_timeouts(); } -void dhcpd_init() { +void tud_network_init_cb(void) +{ + /* if the network is re-initializing and we have a leftover packet, we must do a cleanup */ + if (received_frame) { + pbuf_free(received_frame); + received_frame = NULL; + } +} + +void dhcpd_init(void) { while (dhserv_init(&dhcp_config) != ERR_OK); } -void wait_for_netif_is_up() { - while (!netif_is_up(&netif_data)); +void dns_init(void) { + while (dnserv_init(IP_ADDR_ANY, 53, dns_query_proc) != ERR_OK); } +void wait_for_netif_is_up(void) { + while (!netif_is_up(&netif_data)); +} /* lwip platform specific routines for Pico */ auto_init_mutex(lwip_mutex); diff --git a/src/usb_descriptors.c b/src/usb_descriptors.c index 77a97cd..125accb 100644 --- a/src/usb_descriptors.c +++ b/src/usb_descriptors.c @@ -1,4 +1,4 @@ -/* +/* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) @@ -33,7 +33,7 @@ * [MSB] NET | VENDOR | MIDI | 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) | _PID_MAP(NET, 5)) +#define USB_PID (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4) | _PID_MAP(ECM_RNDIS, 5) | _PID_MAP(NCM, 5)) // String Descriptor Index enum { @@ -52,11 +52,16 @@ enum { }; enum { +#if CFG_TUD_ECM_RNDIS CONFIG_ID_RNDIS = 0, CONFIG_ID_ECM = 1, +#else + CONFIG_ID_NCM = 0, +#endif CONFIG_ID_COUNT }; + //--------------------------------------------------------------------+ // Device Descriptors //--------------------------------------------------------------------+ @@ -69,7 +74,7 @@ tusb_desc_device_t const desc_device = { .bDeviceClass = TUSB_CLASS_MISC, .bDeviceSubClass = MISC_SUBCLASS_COMMON, .bDeviceProtocol = MISC_PROTOCOL_IAD, - + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, .idVendor = 0xCafe, @@ -94,6 +99,7 @@ uint8_t const * tud_descriptor_device_cb(void) { //--------------------------------------------------------------------+ #define MAIN_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_RNDIS_DESC_LEN) #define ALT_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_ECM_DESC_LEN) +#define NCM_CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_NCM_DESC_LEN) #if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number @@ -102,7 +108,7 @@ uint8_t const * tud_descriptor_device_cb(void) { #define EPNUM_NET_OUT 0x02 #define EPNUM_NET_IN 0x82 -#elif CFG_TUSB_MCU == OPT_MCU_SAMG +#elif CFG_TUSB_MCU == OPT_MCU_SAMG || CFG_TUSB_MCU == OPT_MCU_SAMX7X // SAMG doesn't support a same endpoint number with different direction IN and OUT // e.g EP1 OUT & EP1 IN cannot exist together #define EPNUM_NET_NOTIF 0x81 @@ -115,9 +121,11 @@ uint8_t const * tud_descriptor_device_cb(void) { #define EPNUM_NET_IN 0x82 #endif +#if CFG_TUD_ECM_RNDIS + static uint8_t const rndis_configuration[] = { // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS + 1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_RNDIS+1, ITF_NUM_TOTAL, 0, MAIN_CONFIG_TOTAL_LEN, 0, 100), // Interface number, string index, EP notification address and size, EP data address (out, in) and size. TUD_RNDIS_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, EPNUM_NET_NOTIF, 8, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE), @@ -125,20 +133,35 @@ static uint8_t const rndis_configuration[] = { static uint8_t const ecm_configuration[] = { // Config number (index+1), interface count, string index, total length, attribute, power in mA - TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM + 1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_ECM+1, ITF_NUM_TOTAL, 0, ALT_CONFIG_TOTAL_LEN, 0, 100), // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. TUD_CDC_ECM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), }; +#else + +static uint8_t const ncm_configuration[] = { + // Config number (index+1), interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(CONFIG_ID_NCM+1, ITF_NUM_TOTAL, 0, NCM_CONFIG_TOTAL_LEN, 0, 100), + + // Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size. + TUD_CDC_NCM_DESCRIPTOR(ITF_NUM_CDC, STRID_INTERFACE, STRID_MAC, EPNUM_NET_NOTIF, 64, EPNUM_NET_OUT, EPNUM_NET_IN, CFG_TUD_NET_ENDPOINT_SIZE, CFG_TUD_NET_MTU), +}; + +#endif + // Configuration array: RNDIS and CDC-ECM // - Windows only works with RNDIS // - MacOS only works with CDC-ECM // - Linux will work on both -// Note index is Num-1x static uint8_t const * const configuration_arr[CONFIG_ID_COUNT] = { +#if CFG_TUD_ECM_RNDIS [CONFIG_ID_RNDIS] = rndis_configuration, [CONFIG_ID_ECM ] = ecm_configuration +#else + [CONFIG_ID_NCM ] = ncm_configuration +#endif }; // Invoked when received GET CONFIGURATION DESCRIPTOR diff --git a/tinyusb b/tinyusb deleted file mode 160000 index 11c23f8..0000000 --- a/tinyusb +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11c23f88bf42f64ce14b8a7b0b2a4e207dc4dd12