diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8521369 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,26 @@ +set(lib_name pico_pio_usb) +add_library(${lib_name} INTERFACE) + +set(dir ${CMAKE_CURRENT_LIST_DIR}/src) + +pico_generate_pio_header(${lib_name} ${dir}/usb_tx.pio) +pico_generate_pio_header(${lib_name} ${dir}/usb_rx.pio) + +target_sources(${lib_name} INTERFACE + ${dir}/pio_usb.c + ${dir}/pio_usb_device.c + ${dir}/pio_usb_host.c + ${dir}/usb_crc.c +) + +target_link_libraries(${lib_name} INTERFACE + pico_stdlib + pico_multicore + hardware_pio + hardware_dma +) + +target_include_directories(${lib_name} INTERFACE ${dir}) + +# enable all warnings +target_compile_options(${lib_name} INTERFACE -Wall -Wextra) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 5390b71..c77512f 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -5,6 +5,11 @@ project(pio_usb) pico_sdk_init() +# add pico-pio-usb library for examples +set(PICO_PIO_USB_DIR "${CMAKE_CURRENT_LIST_DIR}/../") +# the second argument to add_subdirectory is needed here because this isn't +# a subdirectory, it's out of tree. +add_subdirectory(${PICO_PIO_USB_DIR} pico_pio_usb) add_subdirectory(capture_hid_report) add_subdirectory(usb_device) diff --git a/example/capture_hid_report/CMakeLists.txt b/example/capture_hid_report/CMakeLists.txt index 4b50f30..d86f617 100755 --- a/example/capture_hid_report/CMakeLists.txt +++ b/example/capture_hid_report/CMakeLists.txt @@ -3,22 +3,13 @@ add_executable(${target_name}) pico_enable_stdio_usb(${target_name} 1) -set(PICO_PIO_USB_SRC "${CMAKE_CURRENT_LIST_DIR}/../../src") - -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_tx.pio) -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_rx.pio) - target_sources(${target_name} PRIVATE capture_hid_report.c - ${PICO_PIO_USB_SRC}/pio_usb.c - ${PICO_PIO_USB_SRC}/pio_usb_device.c - ${PICO_PIO_USB_SRC}/pio_usb_host.c - ${PICO_PIO_USB_SRC}/usb_crc.c ) + +# print memory usage, enable all warnings target_link_options(${target_name} PRIVATE -Xlinker --print-memory-usage) target_compile_options(${target_name} PRIVATE -Wall -Wextra) -target_include_directories(${target_name} PRIVATE ${PICO_PIO_USB_SRC}) -target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore hardware_pio hardware_dma) +target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore pico_pio_usb) pico_add_extra_outputs(${target_name}) - diff --git a/example/host_hid_to_device_cdc/CMakeLists.txt b/example/host_hid_to_device_cdc/CMakeLists.txt index 212cad1..341cbec 100644 --- a/example/host_hid_to_device_cdc/CMakeLists.txt +++ b/example/host_hid_to_device_cdc/CMakeLists.txt @@ -1,24 +1,21 @@ set(target_name host_hid_to_device_cdc) add_executable(${target_name}) -set(PICO_PIO_USB_SRC "${CMAKE_CURRENT_LIST_DIR}/../../src") - -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_tx.pio) -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_rx.pio) - target_sources(${target_name} PRIVATE host_hid_to_device_cdc.c usb_descriptors.c - ${PICO_PIO_USB_SRC}/pio_usb.c - ${PICO_PIO_USB_SRC}/pio_usb_device.c - ${PICO_PIO_USB_SRC}/pio_usb_host.c - ${PICO_PIO_USB_SRC}/usb_crc.c ) + + # print memory usage, enable all warnings target_link_options(${target_name} PRIVATE -Xlinker --print-memory-usage) target_compile_options(${target_name} PRIVATE -Wall -Wextra) -target_include_directories(${target_name} PRIVATE ${PICO_PIO_USB_SRC} ${CMAKE_CURRENT_LIST_DIR}) + +# use tinyusb implementation target_compile_definitions(${target_name} PRIVATE PIO_USB_USE_TINYUSB) -target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore hardware_pio hardware_dma tinyusb_device tinyusb_host) +# needed so tinyusb can find tusb_config.h +target_include_directories(${target_name} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) + +target_link_libraries(${target_name} PRIVATE pico_stdlib pico_pio_usb tinyusb_device tinyusb_host) pico_add_extra_outputs(${target_name}) diff --git a/example/usb_device/CMakeLists.txt b/example/usb_device/CMakeLists.txt index f2ea18b..850e53e 100755 --- a/example/usb_device/CMakeLists.txt +++ b/example/usb_device/CMakeLists.txt @@ -3,22 +3,14 @@ add_executable(${target_name}) pico_enable_stdio_usb(${target_name} 1) -set(PICO_PIO_USB_SRC "${CMAKE_CURRENT_LIST_DIR}/../../src") - -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_tx.pio) -pico_generate_pio_header(${target_name} ${PICO_PIO_USB_SRC}/usb_rx.pio) - target_sources(${target_name} PRIVATE usb_device.c - ${PICO_PIO_USB_SRC}/pio_usb.c - ${PICO_PIO_USB_SRC}/pio_usb_device.c - ${PICO_PIO_USB_SRC}/pio_usb_host.c - ${PICO_PIO_USB_SRC}/usb_crc.c ) + +# print memory usage, enable all warnings target_link_options(${target_name} PRIVATE -Xlinker --print-memory-usage) target_compile_options(${target_name} PRIVATE -Wall -Wextra) -target_include_directories(${target_name} PRIVATE ${PICO_PIO_USB_SRC}) -target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore hardware_pio hardware_dma) +target_link_libraries(${target_name} PRIVATE pico_stdlib pico_multicore pico_pio_usb) pico_add_extra_outputs(${target_name}) diff --git a/src/pio_usb.c b/src/pio_usb.c index 13d19cd..01fbfdd 100644 --- a/src/pio_usb.c +++ b/src/pio_usb.c @@ -14,7 +14,6 @@ #include "hardware/pio.h" #include "hardware/sync.h" #include "pico/bootrom.h" -#include "pico/multicore.h" #include "pico/stdlib.h" #include "pio_usb.h" @@ -152,6 +151,7 @@ int __no_inline_not_in_flash_func(pio_usb_bus_receive_packet_and_handshake)( uint16_t crc_prev = 0xffff; uint16_t crc_prev2 = 0xffff; uint16_t crc_receive = 0xffff; + uint16_t crc_receive_inverse; bool crc_match = false; int16_t t = 240; uint16_t idx = 0; @@ -177,7 +177,8 @@ int __no_inline_not_in_flash_func(pio_usb_bus_receive_packet_and_handshake)( crc = update_usb_crc16(crc, data); pp->usb_rx_buffer[idx++] = data; crc_receive = (crc_receive >> 8) | (data << 8); - crc_match = ((crc_receive ^ 0xffff) == crc_prev2); + crc_receive_inverse = crc_receive ^ 0xffff; + crc_match = (crc_receive_inverse == crc_prev2); } }