Skip to content

Update tinyusb submodule to track mainline #85

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 23, 2023
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
22 changes: 17 additions & 5 deletions cores/arduino/usb/USB.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,17 +281,17 @@ void _usbhs_interrupt_handler(void)

#if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
tuh_int_handler(1);
tuh_task();
#endif

#if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
tud_int_handler(1);
#endif
tud_task();
#endif
}

extern "C" {
void tud_set_irq_usbfs(IRQn_Type q);
void tud_set_irq_usbhs(IRQn_Type q);
void tusb_rusb2_set_irqnum(uint8_t rhport, int32_t irqnum);
}

__attribute__((weak)) void configure_usb_mux() {}
Expand Down Expand Up @@ -324,7 +324,11 @@ void __USBStart() {
usb_irq_cfg.address_of_handler = (uint32_t)_usbfs_interrupt_handler;
usb_irq_cfg.first_irq_number = FSP_INVALID_VECTOR;
IRQManager::getInstance().addPeripheral(IRQ_USB,(void*)&usb_irq_cfg);
tud_set_irq_usbfs((IRQn_Type)(usb_irq_cfg.first_irq_number));
#if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
tusb_rusb2_set_irqnum(BOARD_TUD_RHPORT, usb_irq_cfg.first_irq_number);
#else
tusb_rusb2_set_irqnum(BOARD_TUH_RHPORT, usb_irq_cfg.first_irq_number);
#endif
#endif
#endif

Expand All @@ -334,7 +338,11 @@ void __USBStart() {
usb_irq_cfg.address_of_handler = (uint32_t)_usbhs_interrupt_handler;
usb_irq_cfg.first_irq_number = FSP_INVALID_VECTOR;
IRQManager::getInstance().addPeripheral(IRQ_USB_HS,(void*)&usb_irq_cfg);
tud_set_irq_usbhs((IRQn_Type)(usb_irq_cfg.first_irq_number));
#if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
tusb_rusb2_set_irqnum(BOARD_TUD_RHPORT, usb_irq_cfg.first_irq_number);
#else
tusb_rusb2_set_irqnum(BOARD_TUH_RHPORT, usb_irq_cfg.first_irq_number);
#endif
#endif
#endif

Expand All @@ -353,6 +361,10 @@ void __USBStart() {
/* init device port*/
tud_init(BOARD_TUD_RHPORT);

#ifdef VUSB_LDO_ENABLE
((R_USB_FS0_Type*)R_USB_FS0_BASE)->USBMC_b.VDCEN = 1;
#endif

#if 0 //defined(AZURE_RTOS_THREADX)
static TX_BYTE_POOL byte_pool_0;
static TX_THREAD thread;
Expand Down
2 changes: 1 addition & 1 deletion extras/tinyusb
Submodule tinyusb updated 517 files
28 changes: 8 additions & 20 deletions libraries/UsbHostMsd/UsbHostMsd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,16 +113,10 @@ int USBHostMSD::write(const void *buffer, bd_addr_t addr, bd_size_t size) {
block_number = addr / block_size;
count = size / block_size;

for (uint32_t b = block_number; b < block_number + count; b++) {
in_progress = true;
if(tuh_msc_write10(usb_host_msd_get_device_address(), get_lun(), buf, b, 1, complete_cb, 0)) {
while(in_progress) {
delay(10);
}
buf += block_size;
}
else {
return -1;
in_progress = true;
if(tuh_msc_write10(usb_host_msd_get_device_address(), get_lun(), buf, block_number, count, complete_cb, 0)) {
while (in_progress) {
tuh_task();
}
}
return 0;
Expand All @@ -145,16 +139,10 @@ int USBHostMSD::read(void *buffer, bd_addr_t addr, bd_size_t size)
block_number = addr / block_size;
count = size / block_size;

for (uint32_t b = block_number; b < block_number + count; b++) {
in_progress = true;
if(tuh_msc_read10(usb_host_msd_get_device_address(), get_lun(), buf, b, 1, complete_cb, 0)) {
while(in_progress) {
delay(10);
}
buf += block_size;
}
else {
return -1;
in_progress = true;
if(tuh_msc_read10(usb_host_msd_get_device_address(), get_lun(), buf, block_number, count, complete_cb, 0)) {
while (in_progress) {
tuh_task();
}
}
return 0;
Expand Down
30 changes: 15 additions & 15 deletions libraries/UsbHostMsd/tu_msc.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,39 +78,41 @@ void usb_host_msd_attach_mnt_cbk(void (*fnc)(void)) {
//--------------------------------------------------------------------+
static scsi_inquiry_resp_t inquiry_resp;

bool inquiry_complete_cb(uint8_t dev_addr, msc_cbw_t const* cbw, msc_csw_t const* csw)
bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_data)
{
msc_cbw_t const* cbw = cb_data->cbw;
msc_csw_t const* csw = cb_data->csw;

if (csw->status != 0)
{
printf("Inquiry failed\r\n");
TU_LOG2("Inquiry failed\r\n");
return false;
}

// Print out Vendor ID, Product ID and Rev
printf("%.8s %.16s rev %.4s\r\n", inquiry_resp.vendor_id, inquiry_resp.product_id, inquiry_resp.product_rev);
TU_LOG2("%.8s %.16s rev %.4s\r\n", inquiry_resp.vendor_id, inquiry_resp.product_id, inquiry_resp.product_rev);

// Get capacity of device
uint32_t const block_count = tuh_msc_get_block_count(dev_addr, cbw->lun);
uint32_t const block_size = tuh_msc_get_block_size(dev_addr, cbw->lun);

printf("Disk Size: %lu MB\r\n", block_count / ((1024*1024)/block_size));
printf("Block Count = %lu, Block Size: %lu\r\n", block_count, block_size);
TU_LOG2("Disk Size: %lu MB\r\n", block_count / ((1024*1024)/block_size));
TU_LOG2("Block Count = %lu, Block Size: %lu\r\n", block_count, block_size);

return true;
}

//------------- IMPLEMENTATION -------------//
void tuh_msc_mount_cb(uint8_t dev_addr) {
#ifdef USB_DEBUG
mylogadd("[EVENT]: Mass Storage Device - MOUNT -> device address %i", dev_addr);
#endif
TU_LOG2("[EVENT]: Mass Storage Device - MOUNT -> device address %i", dev_addr);

uint8_t const lun = 0;
tuh_msc_inquiry(dev_addr, lun, &inquiry_resp, inquiry_complete_cb, 0);

max_lun = tuh_msc_get_maxlun(dev_addr);

#ifdef USB_DEBUG
mylogadd(" : Max LUN %i", dev_addr);
#endif

TU_LOG2(" : Max LUN %i", dev_addr);

if(max_lun > 0) {
if(usb_msc_device != NULL) {
free(usb_msc_device);
Expand Down Expand Up @@ -157,9 +159,7 @@ void tuh_msc_mount_cb(uint8_t dev_addr) {

void tuh_msc_umount_cb(uint8_t dev_addr) {
(void) dev_addr;
#ifdef USB_DEBUG
mylogadd("[CALL]: tuh_msc_umount_cb %i --------- UMOUNT", dev_addr);
#endif
TU_LOG2("[CALL]: tuh_msc_umount_cb %i --------- UMOUNT", dev_addr);
if(usb_msc_device != NULL) {
free(usb_msc_device);
usb_msc_device = NULL;
Expand Down
2 changes: 2 additions & 0 deletions variants/MINIMA/pins_arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ static const uint8_t SS = PIN_SPI_CS;
#define USB_PID (0x0069)
#define USB_NAME "UNO R4 Minima"

#define VUSB_LDO_ENABLE 1

/* EEPROM DEFINES */

#define ARDUINO_FLASH_TYPE LP_FLASH
Expand Down
5 changes: 5 additions & 0 deletions variants/PORTENTA_C33/tusb_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
#define CFG_TUD_DFU_RUNTIME 1

#define CFG_TUH_MSC 1
#define CFG_TUH_HUB 1
#define CFG_TUH_DEVICE_MAX (3*CFG_TUH_HUB + 1)
#define CFG_TUH_ENDPOINT_MAX 8
#define CFG_TUH_API_EDPT_XFER 1


// CDC FIFO size of TX and RX
#define CFG_TUD_CDC_RX_BUFSIZE ((TUD_OPT_HIGH_SPEED ? 512 : 64) * 8)
Expand Down
2 changes: 2 additions & 0 deletions variants/UNOWIFIR4/pins_arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ static const uint8_t SS = PIN_SPI_CS;
#define USB_PID (0x006D)
#define USB_NAME "UNO R4 WiFi"

#define VUSB_LDO_ENABLE 1

/* EEPROM DEFINES */

#define ARDUINO_FLASH_TYPE LP_FLASH
Expand Down