summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/ChangeLog.txt2
-rw-r--r--apps/system/usbmonitor/Kconfig23
-rw-r--r--apps/system/usbmonitor/usbmonitor.c86
-rw-r--r--nuttx/arch/arm/src/sama5/sam_usbhost.c22
-rw-r--r--nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h15
-rw-r--r--nuttx/drivers/usbhost/Kconfig11
6 files changed, 107 insertions, 52 deletions
diff --git a/apps/ChangeLog.txt b/apps/ChangeLog.txt
index 4d076afa1..6ae95a206 100644
--- a/apps/ChangeLog.txt
+++ b/apps/ChangeLog.txt
@@ -641,4 +641,6 @@
a pthread, but we are stuck with that for now. The work-around
is the msconn now daemonizes itself so that it so taht the pthread
is created in a different task group (2013-9-7).
+ * apps/system/usbmonitor: The USB monitor has been extended so
+ that it can be used with USB device or host trace data (2013-9-9).
diff --git a/apps/system/usbmonitor/Kconfig b/apps/system/usbmonitor/Kconfig
index bb784b299..6b298309e 100644
--- a/apps/system/usbmonitor/Kconfig
+++ b/apps/system/usbmonitor/Kconfig
@@ -6,12 +6,12 @@
config SYSTEM_USBMONITOR
bool "USB Monitor"
default n
- depends on USBDEV && USBDEV_TRACE
+ depends on (USBDEV && USBDEV_TRACE) || (USBHOST && USBHOST_TRACE)
---help---
- If USB device tracing is enabled (USBDEV_TRACE), then this option
- will select the USB monitor. The USB monitor is a daemon that will
- periodically collect the buffered USB trace data and dump it to the
- SYSLOG device.
+ If USB device tracing (USBDEV_TRACE) AND/OR USB host tracing
+ (USBHOST_TRACE) are enabled then this option will select the USB
+ monitor. The USB monitor is a daemon that will periodically collect
+ the buffered USB trace data and dump it to the SYSLOG device.
if SYSTEM_USBMONITOR
@@ -34,34 +34,37 @@ config SYSTEM_USBMONITOR_INTERVAL
The rate in seconds that the USB monitor will wait before dumping
the next set of buffered USB trace data. Default: 2 seconds.
+if USBDEV && USBDEV_TRACE
config SYSTEM_USBMONITOR_TRACEINIT
- bool "Show initialization events"
+ bool "Show USB device initialization events"
default n
---help---
Show initialization events
config SYSTEM_USBMONITOR_TRACECLASS
- bool "Show class driver events"
+ bool "Show USB device class driver events"
default n
---help---
Show class driver events
config SYSTEM_USBMONITOR_TRACETRANSFERS
- bool "Show data transfer events"
+ bool "Show USB device data transfer events"
default n
---help---
Show data transfer events
config SYSTEM_USBMONITOR_TRACECONTROLLER
- bool "Show controller events"
+ bool "Show USB device controller events"
default n
---help---
Show controller events
config SYSTEM_USBMONITOR_TRACEINTERRUPTS
- bool "Show interrupt-related events"
+ bool "Show USB device interrupt-related events"
default n
---help---
Show interrupt-related events
+
+endif
endif
diff --git a/apps/system/usbmonitor/usbmonitor.c b/apps/system/usbmonitor/usbmonitor.c
index 7823eb5e7..447bff57b 100644
--- a/apps/system/usbmonitor/usbmonitor.c
+++ b/apps/system/usbmonitor/usbmonitor.c
@@ -48,6 +48,7 @@
#include <errno.h>
#include <nuttx/usb/usbdev_trace.h>
+#include <nuttx/usb/usbhost_trace.h>
#ifdef CONFIG_SYSTEM_USBMONITOR
@@ -71,46 +72,50 @@
# define CONFIG_SYSTEM_USBMONITOR_INTERVAL 2
#endif
-#ifdef CONFIG_SYSTEM_USBMONITOR_TRACEINIT
-# define TRACE_INIT_BITS (TRACE_INIT_BIT)
-#else
-# define TRACE_INIT_BITS (0)
-#endif
-
-#define TRACE_ERROR_BITS (TRACE_DEVERROR_BIT|TRACE_CLSERROR_BIT)
+/* USB device trace selection */
-#ifdef CONFIG_SYSTEM_USBMONITOR_TRACECLASS
-# define TRACE_CLASS_BITS (TRACE_CLASS_BIT|TRACE_CLASSAPI_BIT|\
- TRACE_CLASSSTATE_BIT)
-#else
-# define TRACE_CLASS_BITS (0)
-#endif
+#ifdef USBDEV_TRACE
+# ifdef CONFIG_SYSTEM_USBMONITOR_TRACEINIT
+# define TRACE_INIT_BITS (TRACE_INIT_BIT)
+# else
+# define TRACE_INIT_BITS (0)
+# endif
-#ifdef CONFIG_SYSTEM_USBMONITOR_TRACETRANSFERS
-# define TRACE_TRANSFER_BITS (TRACE_OUTREQQUEUED_BIT|TRACE_INREQQUEUED_BIT|\
- TRACE_READ_BIT|TRACE_WRITE_BIT|\
- TRACE_COMPLETE_BIT)
-#else
-# define TRACE_TRANSFER_BITS (0)
-#endif
-
-#ifdef CONFIG_SYSTEM_USBMONITOR_TRACECONTROLLER
-# define TRACE_CONTROLLER_BITS (TRACE_EP_BIT|TRACE_DEV_BIT)
-#else
-# define TRACE_CONTROLLER_BITS (0)
-#endif
+# define TRACE_ERROR_BITS (TRACE_DEVERROR_BIT|TRACE_CLSERROR_BIT)
-#ifdef CONFIG_SYSTEM_USBMONITOR_TRACEINTERRUPTS
-# define TRACE_INTERRUPT_BITS (TRACE_INTENTRY_BIT|TRACE_INTDECODE_BIT|\
- TRACE_INTEXIT_BIT)
-#else
-# define TRACE_INTERRUPT_BITS (0)
+# ifdef CONFIG_SYSTEM_USBMONITOR_TRACECLASS
+# define TRACE_CLASS_BITS (TRACE_CLASS_BIT|TRACE_CLASSAPI_BIT|\
+ TRACE_CLASSSTATE_BIT)
+# else
+# define TRACE_CLASS_BITS (0)
+# endif
+
+# ifdef CONFIG_SYSTEM_USBMONITOR_TRACETRANSFERS
+# define TRACE_TRANSFER_BITS (TRACE_OUTREQQUEUED_BIT|TRACE_INREQQUEUED_BIT|\
+ TRACE_READ_BIT|TRACE_WRITE_BIT|\
+ TRACE_COMPLETE_BIT)
+# else
+# define TRACE_TRANSFER_BITS (0)
+# endif
+
+# ifdef CONFIG_SYSTEM_USBMONITOR_TRACECONTROLLER
+# define TRACE_CONTROLLER_BITS (TRACE_EP_BIT|TRACE_DEV_BIT)
+# else
+# define TRACE_CONTROLLER_BITS (0)
+# endif
+
+# ifdef CONFIG_SYSTEM_USBMONITOR_TRACEINTERRUPTS
+# define TRACE_INTERRUPT_BITS (TRACE_INTENTRY_BIT|TRACE_INTDECODE_BIT|\
+ TRACE_INTEXIT_BIT)
+# else
+# define TRACE_INTERRUPT_BITS (0)
+# endif
+
+# define TRACE_BITSET (TRACE_INIT_BITS|TRACE_ERROR_BITS|\
+ TRACE_CLASS_BITS|TRACE_TRANSFER_BITS|\
+ TRACE_CONTROLLER_BITS|TRACE_INTERRUPT_BITS)
#endif
-#define TRACE_BITSET (TRACE_INIT_BITS|TRACE_ERROR_BITS|\
- TRACE_CLASS_BITS|TRACE_TRANSFER_BITS|\
- TRACE_CONTROLLER_BITS|TRACE_INTERRUPT_BITS)
-
/****************************************************************************
* Private Types
****************************************************************************/
@@ -132,11 +137,13 @@ static struct usbmon_state_s g_usbmonitor;
* Private Functions
****************************************************************************/
+#ifdef CONFIG_USBDEV_TRACE
static int usbmonitor_tracecallback(struct usbtrace_s *trace, void *arg)
{
usbtrace_trprintf((trprintf_t)syslog, trace->event, trace->value);
return 0;
}
+#endif
static int usbmonitor_daemon(int argc, char **argv)
{
@@ -147,7 +154,12 @@ static int usbmonitor_daemon(int argc, char **argv)
while (!g_usbmonitor.stop)
{
sleep(CONFIG_SYSTEM_USBMONITOR_INTERVAL);
+#ifdef CONFIG_USBDEV_TRACE
(void)usbtrace_enumerate(usbmonitor_tracecallback, NULL);
+#endif
+#ifdef CONFIG_USBHOST_TRACE
+ (void)usbhost_trdump();
+#endif
}
/* Stopped */
@@ -174,9 +186,11 @@ int usbmonitor_start(int argc, char **argv)
/* No.. start it now */
+#ifdef CONFIG_USBDEV_TRACE
/* First, initialize any USB tracing options that were requested */
usbtrace_enable(TRACE_BITSET);
+#endif
/* Then start the USB monitoring daemon */
@@ -222,9 +236,11 @@ int usbmonitor_stop(int argc, char **argv)
syslog(USBMON_PREFIX "Stopping: %d\n", g_usbmonitor.pid);
g_usbmonitor.stop = true;
+#ifdef CONFIG_USBDEV_TRACE
/* We may as well disable tracing since there is no listener */
usbtrace_enable(0);
+#endif
}
syslog(USBMON_PREFIX "Stopped: %d\n", g_usbmonitor.pid);
diff --git a/nuttx/arch/arm/src/sama5/sam_usbhost.c b/nuttx/arch/arm/src/sama5/sam_usbhost.c
index 5b3ee84e7..2a9db446d 100644
--- a/nuttx/arch/arm/src/sama5/sam_usbhost.c
+++ b/nuttx/arch/arm/src/sama5/sam_usbhost.c
@@ -62,6 +62,10 @@
#define TRENTRY(id,ehci,fmt1,string) {string}
+#ifndef NULL
+# define NULL ((FAR void *)0)
+#endif
+
/********************************************************************************************
* Private Types
********************************************************************************************/
@@ -139,15 +143,25 @@ static const struct sam_usbhost_trace_s g_trace2[TRACE2_NSTRINGS] =
FAR const char *usbhost_trformat1(uint16_t id)
{
int ndx = TRACE1_INDEX(id);
- DEBUGASSERT(ndx < TRACE1_NSTRINGS);
- return g_trace1[ndx].string;
+
+ if (ndx < TRACE1_NSTRINGS)
+ {
+ return g_trace1[ndx].string;
+ }
+
+ return NULL;
}
FAR const char *usbhost_trformat2(uint16_t id)
{
int ndx = TRACE2_INDEX(id);
- DEBUGASSERT(ndx < TRACE2_NSTRINGS);
- return g_trace2[ndx].string;
+
+ if (ndx < TRACE2_NSTRINGS)
+ {
+ return g_trace2[ndx].string;
+ }
+
+ return NULL;
}
#endif /* CONFIG_USBHOST_TRACE || CONFIG_DEBUG && CONFIG_DEBUG_USB */
diff --git a/nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h b/nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h
index bfcb272f2..8bfddb337 100644
--- a/nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h
+++ b/nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h
@@ -172,8 +172,19 @@
/* Check if we should enable the USB monitor before starting NSH */
-#if !defined(HAVE_USBDEV) || !defined(CONFIG_USBDEV_TRACE) || \
- !defined(CONFIG_SYSTEM_USBMONITOR)
+#ifndef CONFIG_SYSTEM_USBMONITOR
+# undef HAVE_USBMONITOR
+#endif
+
+#ifndef HAVE_USBDEV
+# undef CONFIG_USBDEV_TRACE
+#endif
+
+#ifndef HAVE_USBHOST
+# undef CONFIG_USBHOST_TRACE
+#endif
+
+#if !defined(CONFIG_USBDEV_TRACE) && !defined(CONFIG_USBHOST_TRACE)
# undef HAVE_USBMONITOR
#endif
diff --git a/nuttx/drivers/usbhost/Kconfig b/nuttx/drivers/usbhost/Kconfig
index b33bbf887..b8c23fc0c 100644
--- a/nuttx/drivers/usbhost/Kconfig
+++ b/nuttx/drivers/usbhost/Kconfig
@@ -121,9 +121,18 @@ config USBHOST_TRACE
Enables USB tracing for debug. Only supported for the HCD and,
further, no supported by all HCD implementations.
+if USBHOST_TRACE
+
config USBHOST_TRACE_NRECORDS
int "Number of trace entries to remember"
default 128
- depends on USBHOST_TRACE
---help---
Number of trace entries to remember.
+
+config USBHOST_TRACE_VERBOSE
+ bool "Enable verbose debug trace"
+ default n
+ ---help---
+ Number of verbose trace output if supported by the platform.
+
+endif \ No newline at end of file