mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-21 03:40:52 +00:00
Merge pull request #2571 from hathach/fix-max3421-rp2040-build
fix build with rp2040 + max3421
This commit is contained in:
commit
177b388be0
@ -113,6 +113,7 @@ CFLAGS += -DBOARD_$(BOARD_UPPER)
|
|||||||
ifeq (${MAX3421_HOST},1)
|
ifeq (${MAX3421_HOST},1)
|
||||||
SRC_C += src/portable/analog/max3421/hcd_max3421.c
|
SRC_C += src/portable/analog/max3421/hcd_max3421.c
|
||||||
CFLAGS += -DCFG_TUH_MAX3421=1
|
CFLAGS += -DCFG_TUH_MAX3421=1
|
||||||
|
CMAKE_DEFSYM += -DMAX3421_HOST=1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Log level is mapped to TUSB DEBUG option
|
# Log level is mapped to TUSB DEBUG option
|
||||||
|
1
examples/host/cdc_msc_hid_freertos/skip.txt
Normal file
1
examples/host/cdc_msc_hid_freertos/skip.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
mcu:RP2040
|
@ -79,17 +79,27 @@ set(WARNING_FLAGS_IAR "")
|
|||||||
function(family_filter RESULT DIR)
|
function(family_filter RESULT DIR)
|
||||||
get_filename_component(DIR ${DIR} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
get_filename_component(DIR ${DIR} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
if (EXISTS "${DIR}/only.txt")
|
if (EXISTS "${DIR}/skip.txt")
|
||||||
file(READ "${DIR}/only.txt" ONLYS)
|
file(STRINGS "${DIR}/skip.txt" SKIPS_LINES)
|
||||||
# Replace newlines with semicolon so that it is treated as a list by CMake
|
foreach(MCU IN LISTS FAMILY_MCUS)
|
||||||
string(REPLACE "\n" ";" ONLYS_LINES ${ONLYS})
|
# For each line in only.txt
|
||||||
|
foreach(_line ${SKIPS_LINES})
|
||||||
|
# If mcu:xxx exists for this mcu then skip
|
||||||
|
if (${_line} STREQUAL "mcu:${MCU}" OR ${_line} STREQUAL "board:${BOARD}" OR ${_line} STREQUAL "family:${FAMILY}")
|
||||||
|
set(${RESULT} 0 PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
endif ()
|
||||||
|
|
||||||
# For each mcu
|
if (EXISTS "${DIR}/only.txt")
|
||||||
|
file(STRINGS "${DIR}/only.txt" ONLYS_LINES)
|
||||||
foreach(MCU IN LISTS FAMILY_MCUS)
|
foreach(MCU IN LISTS FAMILY_MCUS)
|
||||||
# For each line in only.txt
|
# For each line in only.txt
|
||||||
foreach(_line ${ONLYS_LINES})
|
foreach(_line ${ONLYS_LINES})
|
||||||
# If mcu:xxx exists for this mcu or board:xxx then include
|
# If mcu:xxx exists for this mcu or board:xxx then include
|
||||||
if (${_line} STREQUAL "mcu:${MCU}" OR ${_line} STREQUAL "board:${BOARD}")
|
if (${_line} STREQUAL "mcu:${MCU}" OR ${_line} STREQUAL "board:${BOARD}" OR ${_line} STREQUAL "family:${FAMILY}")
|
||||||
set(${RESULT} 1 PARENT_SCOPE)
|
set(${RESULT} 1 PARENT_SCOPE)
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
@ -98,29 +108,8 @@ function(family_filter RESULT DIR)
|
|||||||
|
|
||||||
# Didn't find it in only file so don't build
|
# Didn't find it in only file so don't build
|
||||||
set(${RESULT} 0 PARENT_SCOPE)
|
set(${RESULT} 0 PARENT_SCOPE)
|
||||||
|
|
||||||
elseif (EXISTS "${DIR}/skip.txt")
|
|
||||||
file(READ "${DIR}/skip.txt" SKIPS)
|
|
||||||
# Replace newlines with semicolon so that it is treated as a list by CMake
|
|
||||||
string(REPLACE "\n" ";" SKIPS_LINES ${SKIPS})
|
|
||||||
|
|
||||||
# For each mcu
|
|
||||||
foreach(MCU IN LISTS FAMILY_MCUS)
|
|
||||||
# For each line in only.txt
|
|
||||||
foreach(_line ${SKIPS_LINES})
|
|
||||||
# If mcu:xxx exists for this mcu then skip
|
|
||||||
if (${_line} STREQUAL "mcu:${MCU}")
|
|
||||||
set(${RESULT} 0 PARENT_SCOPE)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Didn't find in skip file so build
|
|
||||||
set(${RESULT} 1 PARENT_SCOPE)
|
|
||||||
else()
|
else()
|
||||||
|
# only.txt not exist so build
|
||||||
# Didn't find skip or only file so build
|
|
||||||
set(${RESULT} 1 PARENT_SCOPE)
|
set(${RESULT} 1 PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
4
hw/bsp/rp2040/boards/feather_rp2040_max3421/board.cmake
Normal file
4
hw/bsp/rp2040/boards/feather_rp2040_max3421/board.cmake
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
set(PICO_BOARD adafruit_feather_rp2040)
|
||||||
|
|
||||||
|
# Enable MAX3421E USB Host
|
||||||
|
set(MAX3421_HOST 1)
|
@ -654,7 +654,7 @@ static void xact_generic(uint8_t rhport, max3421_ep_t *ep, bool switch_ep, bool
|
|||||||
|
|
||||||
// status
|
// status
|
||||||
if (ep->buf == NULL || ep->total_len == 0) {
|
if (ep->buf == NULL || ep->total_len == 0) {
|
||||||
uint8_t const hxfr = HXFR_HS | (ep->hxfr_bm.is_out ? HXFR_OUT_NIN : 0);
|
uint8_t const hxfr = (uint8_t) (HXFR_HS | (ep->hxfr & HXFR_OUT_NIN));
|
||||||
peraddr_write(rhport, ep->daddr, in_isr);
|
peraddr_write(rhport, ep->daddr, in_isr);
|
||||||
hxfr_write(rhport, hxfr, in_isr);
|
hxfr_write(rhport, hxfr, in_isr);
|
||||||
return;
|
return;
|
||||||
@ -676,19 +676,18 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t daddr, uint8_t ep_addr, uint8_t * buf
|
|||||||
max3421_ep_t* ep = find_opened_ep(daddr, ep_num, ep_dir);
|
max3421_ep_t* ep = find_opened_ep(daddr, ep_num, ep_dir);
|
||||||
TU_VERIFY(ep);
|
TU_VERIFY(ep);
|
||||||
|
|
||||||
// control transfer can switch direction
|
if (ep_num == 0) {
|
||||||
ep->hxfr_bm.is_out = ep_dir ? 0u : 1u;
|
// control transfer can switch direction
|
||||||
|
ep->hxfr_bm.is_out = ep_dir ? 0 : 1;
|
||||||
|
ep->hxfr_bm.is_setup = 0;
|
||||||
|
ep->data_toggle = 1;
|
||||||
|
}
|
||||||
|
|
||||||
ep->buf = buffer;
|
ep->buf = buffer;
|
||||||
ep->total_len = buflen;
|
ep->total_len = buflen;
|
||||||
ep->xferred_len = 0;
|
ep->xferred_len = 0;
|
||||||
ep->state = EP_STATE_ATTEMPT_1;
|
ep->state = EP_STATE_ATTEMPT_1;
|
||||||
|
|
||||||
if (ep_num == 0) {
|
|
||||||
ep->hxfr_bm.is_setup = 0;
|
|
||||||
ep->data_toggle = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// carry out transfer if not busy
|
// carry out transfer if not busy
|
||||||
if (!atomic_flag_test_and_set(&_hcd_data.busy)) {
|
if (!atomic_flag_test_and_set(&_hcd_data.busy)) {
|
||||||
xact_generic(rhport, ep, true, false);
|
xact_generic(rhport, ep, true, false);
|
||||||
|
@ -64,18 +64,19 @@ def skip_example(example, board):
|
|||||||
skip_file = ex_dir / "skip.txt"
|
skip_file = ex_dir / "skip.txt"
|
||||||
only_file = ex_dir / "only.txt"
|
only_file = ex_dir / "only.txt"
|
||||||
|
|
||||||
if skip_file.exists() and only_file.exists():
|
if skip_file.exists():
|
||||||
raise RuntimeError("Only have a skip or only file. Not both.")
|
|
||||||
elif skip_file.exists():
|
|
||||||
skips = skip_file.read_text().split()
|
skips = skip_file.read_text().split()
|
||||||
return ("mcu:" + mcu in skips or
|
if ("mcu:" + mcu in skips or
|
||||||
"board:" + board in skips or
|
"board:" + board in skips or
|
||||||
"family:" + family in skips)
|
"family:" + family in skips):
|
||||||
elif only_file.exists():
|
return True
|
||||||
|
|
||||||
|
if only_file.exists():
|
||||||
onlys = only_file.read_text().split()
|
onlys = only_file.read_text().split()
|
||||||
return not ("mcu:" + mcu in onlys or
|
if not ("mcu:" + mcu in onlys or
|
||||||
"board:" + board in onlys or
|
"board:" + board in onlys or
|
||||||
"family:" + family in onlys)
|
"family:" + family in onlys):
|
||||||
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user