diff --git a/platform/fatfs/usbh_fatfs.c b/platform/fatfs/usbh_fatfs.c index 1d7aff38..abb7181b 100644 --- a/platform/fatfs/usbh_fatfs.c +++ b/platform/fatfs/usbh_fatfs.c @@ -34,7 +34,7 @@ int USB_disk_read(BYTE *buff, LBA_t sector, UINT count) uint8_t *align_buf; align_buf = (uint8_t *)buff; -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buff & (CONFIG_USB_ALIGN_SIZE - 1)) { align_buf = (uint8_t *)aligned_alloc(CONFIG_USB_ALIGN_SIZE, count * active_msc_class->blocksize); if (!align_buf) { @@ -42,19 +42,19 @@ int USB_disk_read(BYTE *buff, LBA_t sector, UINT count) return -USB_ERR_NOMEM; } } -#endif + ret = usbh_msc_scsi_read10(active_msc_class, sector, align_buf, count); if (ret < 0) { ret = RES_ERROR; } else { ret = RES_OK; } -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buff & (CONFIG_USB_ALIGN_SIZE - 1)) { usb_memcpy(buff, align_buf, count * active_msc_class->blocksize); free(align_buf); } -#endif + return ret; } @@ -64,7 +64,7 @@ int USB_disk_write(const BYTE *buff, LBA_t sector, UINT count) uint8_t *align_buf; align_buf = (uint8_t *)buff; -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buff & (CONFIG_USB_ALIGN_SIZE - 1)) { align_buf = (uint8_t *)aligned_alloc(CONFIG_USB_ALIGN_SIZE, count * active_msc_class->blocksize); if (!align_buf) { @@ -73,18 +73,18 @@ int USB_disk_write(const BYTE *buff, LBA_t sector, UINT count) } usb_memcpy(align_buf, buff, count * active_msc_class->blocksize); } -#endif + ret = usbh_msc_scsi_write10(active_msc_class, sector, align_buf, count); if (ret < 0) { ret = RES_ERROR; } else { ret = RES_OK; } -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buff & (CONFIG_USB_ALIGN_SIZE - 1)) { free(align_buf); } -#endif + return ret; } diff --git a/platform/rtthread/usbd_serial.c b/platform/rtthread/usbd_serial.c index aeb53a9b..2f6d484b 100644 --- a/platform/rtthread/usbd_serial.c +++ b/platform/rtthread/usbd_serial.c @@ -76,9 +76,8 @@ static rt_err_t usbd_serial_open(struct rt_device *dev, rt_uint16_t oflag) serial = (struct usbd_serial *)dev; - if (!usb_device_is_configured(serial->busid)) { - USB_LOG_ERR("USB device is not configured\n"); - return -RT_EPERM; + while(!usb_device_is_configured(serial->busid)) { + rt_thread_mdelay(10); } usbd_ep_start_read(serial->busid, serial->out_ep, @@ -123,9 +122,8 @@ static rt_ssize_t usbd_serial_write(struct rt_device *dev, } align_buf = (rt_uint8_t *)buffer; -#ifdef CONFIG_USB_DCACHE_ENABLE if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { - align_buf = rt_malloc_align(size, CONFIG_USB_ALIGN_SIZE); + align_buf = rt_malloc_align(USB_ALIGN_UP(size, CONFIG_USB_ALIGN_SIZE), CONFIG_USB_ALIGN_SIZE); if (!align_buf) { USB_LOG_ERR("serial get align buf failed\n"); return 0; @@ -133,7 +131,7 @@ static rt_ssize_t usbd_serial_write(struct rt_device *dev, usb_memcpy(align_buf, buffer, size); } -#endif + usb_osal_sem_reset(serial->tx_done); usbd_ep_start_write(serial->busid, serial->in_ep, align_buf, size); ret = usb_osal_sem_take(serial->tx_done, 3000); @@ -144,11 +142,9 @@ static rt_ssize_t usbd_serial_write(struct rt_device *dev, ret = size; } -#ifdef CONFIG_USB_DCACHE_ENABLE if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { rt_free_align(align_buf); } -#endif return ret; } diff --git a/platform/rtthread/usbh_dfs.c b/platform/rtthread/usbh_dfs.c index 1344f539..77846665 100644 --- a/platform/rtthread/usbh_dfs.c +++ b/platform/rtthread/usbh_dfs.c @@ -38,7 +38,7 @@ static rt_ssize_t rt_udisk_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_uint8_t *align_buf; align_buf = (rt_uint8_t *)buffer; -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { align_buf = rt_malloc_align(size * msc_class->blocksize, CONFIG_USB_ALIGN_SIZE); if (!align_buf) { @@ -47,18 +47,18 @@ static rt_ssize_t rt_udisk_read(rt_device_t dev, rt_off_t pos, void *buffer, } } else { } -#endif + ret = usbh_msc_scsi_read10(msc_class, pos, (uint8_t *)align_buf, size); if (ret < 0) { rt_kprintf("usb mass_storage read failed\n"); return 0; } -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { usb_memcpy(buffer, align_buf, size * msc_class->blocksize); rt_free_align(align_buf); } -#endif + return size; } @@ -70,7 +70,7 @@ static rt_ssize_t rt_udisk_write(rt_device_t dev, rt_off_t pos, const void *buff rt_uint8_t *align_buf; align_buf = (rt_uint8_t *)buffer; -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { align_buf = rt_malloc_align(size * msc_class->blocksize, CONFIG_USB_ALIGN_SIZE); if (!align_buf) { @@ -80,17 +80,16 @@ static rt_ssize_t rt_udisk_write(rt_device_t dev, rt_off_t pos, const void *buff usb_memcpy(align_buf, buffer, size * msc_class->blocksize); } -#endif + ret = usbh_msc_scsi_write10(msc_class, pos, (uint8_t *)align_buf, size); if (ret < 0) { rt_kprintf("usb mass_storage write failed\n"); return 0; } -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { rt_free_align(align_buf); } -#endif return size; } diff --git a/platform/rtthread/usbh_serial.c b/platform/rtthread/usbh_serial.c index cbfbc49e..912258e0 100644 --- a/platform/rtthread/usbh_serial.c +++ b/platform/rtthread/usbh_serial.c @@ -193,9 +193,9 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, serial = (struct usbh_serial *)dev; align_buf = (rt_uint8_t *)buffer; -#ifdef CONFIG_USB_DCACHE_ENABLE + if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { - align_buf = rt_malloc_align(size, CONFIG_USB_ALIGN_SIZE); + align_buf = rt_malloc_align(USB_ALIGN_UP(size, CONFIG_USB_ALIGN_SIZE), CONFIG_USB_ALIGN_SIZE); if (!align_buf) { USB_LOG_ERR("serial get align buf failed\n"); return 0; @@ -203,7 +203,6 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, usb_memcpy(align_buf, buffer, size); } -#endif switch (serial->type) { #if defined(PKG_CHERRYUSB_HOST_CDC_ACM) || defined(RT_CHERRYUSB_HOST_CDC_ACM) @@ -211,10 +210,7 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, ret = usbh_cdc_acm_bulk_out_transfer((struct usbh_cdc_acm *)dev->user_data, (uint8_t *)align_buf, size, RT_WAITING_FOREVER); if (ret < 0) { USB_LOG_ERR("usbh_cdc_acm_bulk_out_transfer failed: %d\n", ret); -#ifdef CONFIG_USB_DCACHE_ENABLE - rt_free_align(align_buf); -#endif - return 0; + ret = 0; } break; #endif @@ -223,10 +219,7 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, ret = usbh_ftdi_bulk_out_transfer((struct usbh_ftdi *)dev->user_data, (uint8_t *)align_buf, size, RT_WAITING_FOREVER); if (ret < 0) { USB_LOG_ERR("usbh_ftdi_bulk_out_transfer failed: %d\n", ret); -#ifdef CONFIG_USB_DCACHE_ENABLE - rt_free_align(align_buf); -#endif - return 0; + ret = 0; } break; #endif @@ -235,10 +228,7 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, ret = usbh_ch34x_bulk_out_transfer((struct usbh_ch34x *)dev->user_data, (uint8_t *)align_buf, size, RT_WAITING_FOREVER); if (ret < 0) { USB_LOG_ERR("usbh_ch34x_bulk_out_transfer failed: %d\n", ret); -#ifdef CONFIG_USB_DCACHE_ENABLE - rt_free_align(align_buf); -#endif - return 0; + ret = 0; } break; #endif @@ -247,10 +237,7 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, ret = usbh_pl2303_bulk_out_transfer((struct usbh_pl2303 *)dev->user_data, (uint8_t *)align_buf, size, RT_WAITING_FOREVER); if (ret < 0) { USB_LOG_ERR("usbh_pl2303_bulk_out_transfer failed: %d\n", ret); -#ifdef CONFIG_USB_DCACHE_ENABLE - rt_free_align(align_buf); -#endif - return 0; + ret = 0; } break; #endif @@ -258,11 +245,9 @@ static rt_ssize_t usbh_serial_write(struct rt_device *dev, break; } -#ifdef CONFIG_USB_DCACHE_ENABLE if ((uint32_t)buffer & (CONFIG_USB_ALIGN_SIZE - 1)) { rt_free_align(align_buf); } -#endif return ret; }