diff --git a/TODO b/TODO index f6185cbf892..7ea91bce865 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,4 @@ -NuttX TODO List (Last updated May 3, 2015) +NuttX TODO List (Last updated May 9, 2015) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This file summarizes known NuttX bugs, limitations, inconsistencies with @@ -17,7 +17,7 @@ nuttx/ (4) C++ Support (6) Binary loaders (binfmt/) (12) Network (net/, drivers/net) - (4) USB (drivers/usbdev, drivers/usbhost) + (5) USB (drivers/usbdev, drivers/usbhost) (12) Libraries (libc/, libm/) (11) File system/Generic drivers (fs/, drivers/) (8) Graphics subsystem (graphics/) @@ -1096,6 +1096,40 @@ o USB (drivers/usbdev, drivers/usbhost) Status: Open Priority: Medium-Low + Title: USB CDC/ACM HOST CLASS DRIVER + Desciption: A CDC/ACM host class driver has been added. This has been + testing by running the USB CDC/ACM host on an Olimex + LPC1766STK and using the configs/stm3210e-eval/usbserial + configuration (using the CDC/ACM device side driver). There + are several unresolved issues that prevent the host driver + from being usable: + + - The driver works fine when configured for BULK-ONLY + operation. + - Testing has not been performed with the interrupt IN channel + enabled (ie., I have not enabled FLOW control nor do I have + a test case that used the interrupt IN channel). I can see + that the polling for interrupt IN data is occurring + initially. + - I test for incoming data by doing 'nsh> cat /dev/ttyACM0' on + the Olimex LPC1766STK host. The bulk data reception still + works okay whether or not the interupt IN channel is enabled. + If the interrupt IN channel is enabled, then polling of that + channel appears to stop when the bulk in channel becomes + active. + - The RX reception logic uses the low priority work queue. + However, that logic never returns and so blocks other use of + the work queue thread. This is probably okay but means that + the RX reception logic probably should be moved to its own + dedicated thread. + - When the cable connecting the STM3110E-EVAL device is + removed, the software on the Olimex LPC1766STK crashes. The + crash is due to corruption of the OHCI bDoneHead pointer. + + Most of these problems are unique to the Olimex LPC1766STK DCD; some are probably design problems in the CDC/ACM host driver. The bottom line is that the host CDC/ACM driver is immature and you should probably not use it unless you want to invest some effort. + Status: Open + Priority: Medium-Low unless you really need host CDC/ACM support. + o Libraries (libc/) ^^^^^^^^^^^^^^^^^ diff --git a/configs/olimex-lpc1766stk/hidkbd/setenv.sh b/configs/olimex-lpc1766stk/hidkbd/setenv.sh index 19323b6e350..b2efd42686f 100755 --- a/configs/olimex-lpc1766stk/hidkbd/setenv.sh +++ b/configs/olimex-lpc1766stk/hidkbd/setenv.sh @@ -52,6 +52,7 @@ fi # the CodeSourcery toolchain in any other location # export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin" export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin" +#export TOOLCHAIN_BIN="/cygdrive/c/Users/MyName/MentorGraphics/Sourcery_CodeBench_Lite_for_ARM_EABI/bin" # These are the Cygwin paths to the locations where I installed the Atollic # toolchain under windows. You will also have to edit this if you install diff --git a/drivers/usbhost/usbhost_cdcacm.c b/drivers/usbhost/usbhost_cdcacm.c index 3a94bccc65f..792e427d3d5 100644 --- a/drivers/usbhost/usbhost_cdcacm.c +++ b/drivers/usbhost/usbhost_cdcacm.c @@ -745,7 +745,7 @@ static void usbhost_notification_work(FAR void *arg) ret = DRVR_ASYNCH(hport->drvr, priv->intin, (FAR uint8_t *)priv->notification, MAX_NOTIFICATION, usbhost_notification_callback, - &priv->usbclass); + priv); if (ret < 0) { udbg("ERROR: DRVR_ASYNCH failed: %d\n", ret); @@ -2008,7 +2008,7 @@ static int usbhost_connect(FAR struct usbhost_class_s *usbclass, ret = DRVR_ASYNCH(hport->drvr, priv->intin, (FAR uint8_t *)priv->notification, MAX_NOTIFICATION, usbhost_notification_callback, - &priv->usbclass); + priv); if (ret < 0) { udbg("ERROR: DRVR_ASYNCH failed: %d\n", ret); @@ -2088,7 +2088,7 @@ static int usbhost_disconnected(struct usbhost_class_s *usbclass) int ret = DRVR_CANCEL(hport->drvr, priv->intin); if (ret < 0) { - udbg("WARNING: DRVR_CANCEL failed: %d\n", ret); + udbg("ERROR: DRVR_CANCEL failed: %d\n", ret); } } #endif