diff options
Diffstat (limited to 'apps/nshlib')
-rw-r--r-- | apps/nshlib/README.txt | 21 | ||||
-rw-r--r-- | apps/nshlib/nsh.h | 53 | ||||
-rw-r--r-- | apps/nshlib/nsh_consolemain.c | 4 | ||||
-rw-r--r-- | apps/nshlib/nsh_usbdev.c | 35 |
4 files changed, 99 insertions, 14 deletions
diff --git a/apps/nshlib/README.txt b/apps/nshlib/README.txt index 42e831ddc..4f2a27239 100644 --- a/apps/nshlib/README.txt +++ b/apps/nshlib/README.txt @@ -935,13 +935,20 @@ NSH-Specific Configuration Settings CONFIG_NSH_UBSDEV_MINOR The minor device number of the USB device. Default: 0 - If USB tracing is enabled, then NSH will initialize USB - tracing as requested by the following: - - CONFIG_NSH_UBSDEV_TRACEINIT - Bit set with each bit enabling a trace option (see - include/nuttx/usb/usbdev_trace.h). Default: Only USB errors - are traced. + If USB tracing is enabled (CONFIG_USBDEV_TRACE), then NSH will + initialize USB tracing as requested by the following. Default: + Only USB errors are traced. + + CONFIG_NSH_USBDEV_TRACEINIT + Show initialization events + CONFIG_NSH_USBDEV_TRACECLASS + Show class driver events + CONFIG_NSH_USBDEV_TRACETRANSFERS + Show data transfer events + CONFIG_NSH_USBDEV_TRACECONTROLLER + Show controller events + CONFIG_NSH_USBDEV_TRACEINTERRUPTS + Show interrupt-related events. * CONFIG_NSH_CONDEV If CONFIG_NSH_CONSOLE is set to 'y', then CONFIG_NSH_CONDEV diff --git a/apps/nshlib/nsh.h b/apps/nshlib/nsh.h index babdedd91..e31fa20f1 100644 --- a/apps/nshlib/nsh.h +++ b/apps/nshlib/nsh.h @@ -109,17 +109,50 @@ # define CONFIG_NSH_UBSDEV_MINOR 0 # endif -/* USB trace settings */ - -# ifndef CONFIG_NSH_UBSDEV_TRACEINIT -# define CONFIG_NSH_UBSDEV_TRACEINIT (TRACE_DEVERROR_BIT|TRACE_CLSERROR_BIT) -# endif - /* The default console device is always /dev/console */ # ifndef CONFIG_NSH_USBCONDEV # define CONFIG_NSH_USBCONDEV "/dev/console" # endif + +/* USB trace settings */ + +#ifdef CONFIG_NSH_USBDEV_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) + +#ifdef CONFIG_NSH_USBDEV_TRACECLASS +# define TRACE_CLASS_BITS (TRACE_CLASS_BIT|TRACE_CLASSAPI_BIT|TRACE_CLASSSTATE_BIT) +#else +# define TRACE_CLASS_BITS (0) +#endif + +#ifdef CONFIG_NSH_USBDEV_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_NSH_USBDEV_TRACECONTROLLER +# define TRACE_CONTROLLER_BITS (TRACE_EP_BIT|TRACE_DEV_BIT) +#else +# define TRACE_CONTROLLER_BITS (0) +#endif + +#ifdef CONFIG_NSH_USBDEV_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 /* If Telnet is selected for the NSH console, then we must configure @@ -400,6 +433,14 @@ void nsh_freefullpath(char *relpath); void nsh_dumpbuffer(FAR struct nsh_vtbl_s *vtbl, const char *msg, const uint8_t *buffer, ssize_t nbytes); +/* USB debug support */ + +#if defined(CONFIG_USBDEV_TRACE) && defined(HAVE_USB_CONSOLE) +void nsh_usbtrace(void); +#else +# define nsh_usbtrace() +#endif + /* Shell command handlers */ #ifndef CONFIG_NSH_DISABLE_ECHO diff --git a/apps/nshlib/nsh_consolemain.c b/apps/nshlib/nsh_consolemain.c index a6e28c051..baf2e74b4 100644 --- a/apps/nshlib/nsh_consolemain.c +++ b/apps/nshlib/nsh_consolemain.c @@ -124,6 +124,10 @@ int nsh_consolemain(int argc, char *argv[]) for (;;) { + /* For the case of debugging the USB console... dump collected USB trace data */ + + nsh_usbtrace(); + /* Display the prompt string */ fputs(g_nshprompt, pstate->cn_outstream); diff --git a/apps/nshlib/nsh_usbdev.c b/apps/nshlib/nsh_usbdev.c index 40e35d5f4..3d123532a 100644 --- a/apps/nshlib/nsh_usbdev.c +++ b/apps/nshlib/nsh_usbdev.c @@ -44,6 +44,7 @@ #include <unistd.h> #include <fcntl.h> #include <assert.h> +#include <debug.h> #ifdef CONFIG_CDCACM # include <nuttx/usb/cdcacm.h> @@ -61,6 +62,12 @@ * Definitions ****************************************************************************/ +#if defined(CONFIG_DEBUG) || defined(CONFIG_NSH_USBCONSOLE) +# define trmessage lib_lowprintf +#else +# define trmessage printf +#endif + /**************************************************************************** * Private Types ****************************************************************************/ @@ -82,6 +89,18 @@ ****************************************************************************/ /**************************************************************************** + * Name: nsh_tracecallback + ****************************************************************************/ + +#ifdef CONFIG_USBDEV_TRACE +static int nsh_tracecallback(struct usbtrace_s *trace, void *arg) +{ + usbtrace_trprintf((trprintf_t)trmessage, trace->event, trace->value); + return 0; +} +#endif + +/**************************************************************************** * Public Functions ****************************************************************************/ @@ -100,7 +119,9 @@ int nsh_usbconsole(void) /* Initialize any USB tracing options that were requested */ - usbtrace_enable(CONFIG_NSH_UBSDEV_TRACEINIT); +#ifdef CONFIG_USBDEV_TRACE + usbtrace_enable(TRACE_BITSET); +#endif /* Don't start the NSH console until the console device is ready. Chances * are, we get here with no functional console. The USB console will not @@ -207,4 +228,16 @@ int nsh_usbconsole(void) } #endif /* HAVE_USB_CONSOLE */ + +/**************************************************************************** + * Name: nsh_usbtrace + ****************************************************************************/ + +#if defined(CONFIG_USBDEV_TRACE) && defined(HAVE_USB_CONSOLE) +void nsh_usbtrace(void) +{ + (void)usbtrace_enumerate(nsh_tracecallback, NULL); +} +#endif + #endif /* CONFIG_USBDEV */ |