feat(platform/nuttx): update fs & net & cdcacm support
Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
@@ -3,25 +3,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/irq.h>
|
||||
#include <nuttx/kmalloc.h>
|
||||
#include <nuttx/signal.h>
|
||||
#include <nuttx/arch.h>
|
||||
#include <nuttx/wqueue.h>
|
||||
#include <nuttx/scsi.h>
|
||||
#include <nuttx/fs/fs.h>
|
||||
#include <nuttx/mutex.h>
|
||||
|
||||
#include "usbh_core.h"
|
||||
#include "usbh_msc.h"
|
||||
@@ -38,6 +20,57 @@
|
||||
|
||||
#define DEV_FORMAT "/dev/sd%c"
|
||||
|
||||
static int nuttx_errorcode(int error)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
switch (error) {
|
||||
case -USB_ERR_NOMEM:
|
||||
err = -EIO;
|
||||
break;
|
||||
case -USB_ERR_INVAL:
|
||||
err = -EINVAL;
|
||||
break;
|
||||
case -USB_ERR_NODEV:
|
||||
err = -ENODEV;
|
||||
break;
|
||||
case -USB_ERR_NOTCONN:
|
||||
err = -ENOTCONN;
|
||||
break;
|
||||
case -USB_ERR_NOTSUPP:
|
||||
err = -EIO;
|
||||
break;
|
||||
case -USB_ERR_BUSY:
|
||||
err = -EBUSY;
|
||||
break;
|
||||
case -USB_ERR_RANGE:
|
||||
err = -ERANGE;
|
||||
break;
|
||||
case -USB_ERR_STALL:
|
||||
err = -EPERM;
|
||||
break;
|
||||
case -USB_ERR_NAK:
|
||||
err = -EAGAIN;
|
||||
break;
|
||||
case -USB_ERR_DT:
|
||||
err = -EIO;
|
||||
break;
|
||||
case -USB_ERR_IO:
|
||||
err = -EIO;
|
||||
break;
|
||||
case -USB_ERR_SHUTDOWN:
|
||||
err = -ESHUTDOWN;
|
||||
break;
|
||||
case -USB_ERR_TIMEOUT:
|
||||
err = -ETIMEDOUT;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
static int usbhost_open(FAR struct inode *inode);
|
||||
static int usbhost_close(FAR struct inode *inode);
|
||||
static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer,
|
||||
@@ -90,18 +123,14 @@ static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer,
|
||||
DEBUGASSERT(inode->i_private);
|
||||
msc_class = (struct usbh_msc *)inode->i_private;
|
||||
|
||||
if (msc_class->hport && msc_class->hport->connected) {
|
||||
ret = usbh_msc_scsi_read10(msc_class, startsector, (uint8_t *)buffer, nsectors);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
} else {
|
||||
#ifdef CONFIG_ARCH_DCACHE
|
||||
up_invalidate_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize));
|
||||
#endif
|
||||
return nsectors;
|
||||
}
|
||||
ret = usbh_msc_scsi_read10(msc_class, startsector, (uint8_t *)buffer, nsectors);
|
||||
if (ret < 0) {
|
||||
return nuttx_errorcode(ret);
|
||||
} else {
|
||||
return -ENODEV;
|
||||
#if defined(CONFIG_ARCH_DCACHE) && !defined(CONFIG_USB_DCACHE_ENABLE)
|
||||
up_invalidate_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize));
|
||||
#endif
|
||||
return nsectors;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,18 +144,14 @@ static ssize_t usbhost_write(FAR struct inode *inode,
|
||||
DEBUGASSERT(inode->i_private);
|
||||
msc_class = (struct usbh_msc *)inode->i_private;
|
||||
|
||||
if (msc_class->hport && msc_class->hport->connected) {
|
||||
#ifdef CONFIG_ARCH_DCACHE
|
||||
up_flush_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize));
|
||||
#if defined(CONFIG_ARCH_DCACHE) && !defined(CONFIG_USB_DCACHE_ENABLE)
|
||||
up_clean_dcache((uintptr_t)buffer, (uintptr_t)(buffer + nsectors * msc_class->blocksize));
|
||||
#endif
|
||||
ret = usbh_msc_scsi_write10(msc_class, startsector, (uint8_t *)buffer, nsectors);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
} else {
|
||||
return nsectors;
|
||||
}
|
||||
ret = usbh_msc_scsi_write10(msc_class, startsector, (uint8_t *)buffer, nsectors);
|
||||
if (ret < 0) {
|
||||
return nuttx_errorcode(ret);
|
||||
} else {
|
||||
return -ENODEV;
|
||||
return nsectors;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +172,7 @@ static int usbhost_geometry(FAR struct inode *inode,
|
||||
geometry->geo_nsectors = msc_class->blocknum;
|
||||
geometry->geo_sectorsize = msc_class->blocksize;
|
||||
|
||||
uinfo("nsectors: %" PRIdOFF " sectorsize: %" PRIi16 "\n",
|
||||
USB_LOG_DBG("nsectors: %ld, sectorsize: %ld\n",
|
||||
geometry->geo_nsectors, geometry->geo_sectorsize);
|
||||
return OK;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user