Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions examples/host/bare_api/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,8 @@ if(FAMILY STREQUAL "rp2040")

# due to warnings from Pico-PIO-USB
target_compile_options(${PROJECT} PUBLIC
-Wno-error=shadow
-Wno-error=cast-align
-Wno-error=cast-qual
-Wno-error=redundant-decls
-Wno-error=sign-conversion
-Wno-error=conversion
-Wno-error=unused-function
)
endif()
4 changes: 0 additions & 4 deletions examples/host/cdc_msc_hid/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,8 @@ if(FAMILY STREQUAL "rp2040")

# due to warnings from Pico-PIO-USB
target_compile_options(${PROJECT} PUBLIC
-Wno-error=shadow
-Wno-error=cast-align
-Wno-error=cast-qual
-Wno-error=redundant-decls
-Wno-error=sign-conversion
-Wno-error=conversion
-Wno-error=unused-function
)
endif()
4 changes: 0 additions & 4 deletions examples/host/hid_controller/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,8 @@ if(FAMILY STREQUAL "rp2040")

# due to warnings from Pico-PIO-USB
target_compile_options(${PROJECT} PUBLIC
-Wno-error=shadow
-Wno-error=cast-align
-Wno-error=cast-qual
-Wno-error=redundant-decls
-Wno-error=sign-conversion
-Wno-error=conversion
-Wno-error=unused-function
)
endif()
4 changes: 0 additions & 4 deletions examples/host/msc_file_explorer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,8 @@ if(FAMILY STREQUAL "rp2040")

# due to warnings from Pico-PIO-USB
target_compile_options(${PROJECT} PUBLIC
-Wno-error=shadow
-Wno-error=cast-align
-Wno-error=cast-qual
-Wno-error=redundant-decls
-Wno-error=sign-conversion
-Wno-error=conversion
-Wno-error=unused-function
)
endif()
2 changes: 1 addition & 1 deletion hw/mcu/raspberry_pi/Pico-PIO-USB
2 changes: 1 addition & 1 deletion src/common/tusb_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ enum {

typedef enum
{
XFER_RESULT_SUCCESS,
XFER_RESULT_SUCCESS = 0,
XFER_RESULT_FAILED,
XFER_RESULT_STALLED,
XFER_RESULT_TIMEOUT,
Expand Down
24 changes: 19 additions & 5 deletions src/host/usbh.c
Original file line number Diff line number Diff line change
Expand Up @@ -620,9 +620,7 @@ static void _xfer_complete(uint8_t daddr, xfer_result_t result)
.user_data = _ctrl_xfer.user_data
};

usbh_lock();
_ctrl_xfer.stage = CONTROL_STAGE_IDLE;
usbh_unlock();
_set_control_xfer_stage(CONTROL_STAGE_IDLE);

if (xfer_temp.complete_cb)
{
Expand Down Expand Up @@ -1182,12 +1180,28 @@ static void enum_full_complete(void);
// process device enumeration
static void process_enumeration(tuh_xfer_t* xfer)
{
// Retry a few times with transfers in enumeration since device can be unstable when starting up
enum {
ATTEMPT_COUNT_MAX = 3,
ATTEMPT_DELAY_MS = 100
};
static uint8_t failed_count = 0;

if (XFER_RESULT_SUCCESS != xfer->result)
{
// stop enumeration, maybe we could retry this
enum_full_complete();
// retry if not reaching max attempt
if ( failed_count < ATTEMPT_COUNT_MAX )
{
failed_count++;
osal_task_delay(ATTEMPT_DELAY_MS); // delay a bit
TU_ASSERT(tuh_control_xfer(xfer), );
}else
{
enum_full_complete();
}
return;
}
failed_count = 0;

uint8_t const daddr = xfer->daddr;
uintptr_t const state = xfer->user_data;
Expand Down
12 changes: 8 additions & 4 deletions src/host/usbh.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,15 @@ struct tuh_xfer_s
{
uint8_t daddr;
uint8_t ep_addr;

uint8_t TU_RESERVED; // reserved
xfer_result_t result;

uint32_t actual_len; // excluding setup packet

union
{
tusb_control_request_t const* setup; // setup packet pointer if control transfer
uint32_t buflen; // expected length if not control transfer (not available in callback)
uint32_t buflen; // expected length if not control transfer (not available in callback)
};

uint8_t* buffer; // not available in callback if not control transfer
Expand All @@ -80,10 +81,13 @@ enum

//TU_ATTR_WEAK uint8_t tuh_attach_cb (tusb_desc_device_t const *desc_device);

// Invoked when device is mounted (configured)
// Invoked when a device is mounted (configured)
TU_ATTR_WEAK void tuh_mount_cb (uint8_t daddr);

/// Invoked when device is unmounted (bus reset/unplugged)
// Invoked when a device failed to mount during enumeration process
// TU_ATTR_WEAK void tuh_mount_failed_cb (uint8_t daddr);

/// Invoked when a device is unmounted (detached)
TU_ATTR_WEAK void tuh_umount_cb(uint8_t daddr);

//--------------------------------------------------------------------+
Expand Down