diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2013-09-09 15:02:33 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2013-09-09 15:02:33 -0600 |
commit | 91becdb75746f65f27d6e87bd8d3d9f926ddbefe (patch) | |
tree | f1a77cb8abe7b31cea329a0ef13897a88bf27645 | |
parent | 845f1694727937478ab8487d2b7a2150ad0cc858 (diff) | |
download | nuttx-91becdb75746f65f27d6e87bd8d3d9f926ddbefe.tar.gz nuttx-91becdb75746f65f27d6e87bd8d3d9f926ddbefe.tar.bz2 nuttx-91becdb75746f65f27d6e87bd8d3d9f926ddbefe.zip |
USB monitor extended so that it can also be used with USB host trace data
-rw-r--r-- | apps/ChangeLog.txt | 2 | ||||
-rw-r--r-- | apps/system/usbmonitor/Kconfig | 23 | ||||
-rw-r--r-- | apps/system/usbmonitor/usbmonitor.c | 86 | ||||
-rw-r--r-- | nuttx/arch/arm/src/sama5/sam_usbhost.c | 22 | ||||
-rw-r--r-- | nuttx/configs/sama5d3x-ek/src/sama5d3x-ek.h | 15 | ||||
-rw-r--r-- | nuttx/drivers/usbhost/Kconfig | 11 |
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 |