Add support for the USB trace cability in NSH when a USB console is used

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4774 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-05-26 18:05:26 +00:00
parent cdac847a4d
commit bf760f29b4
6 changed files with 101 additions and 14 deletions

View File

@ -237,3 +237,5 @@
* apps/nshlib/nsh_usbdev.c: User now has to press ENTER 3 times before * apps/nshlib/nsh_usbdev.c: User now has to press ENTER 3 times before
USB console will start. Otherwise, the USB console starts before there USB console will start. Otherwise, the USB console starts before there
is anyone at the other end to listen. is anyone at the other end to listen.
* apps/nshilib/nsh_usbdev.c and nsh_consolemain.c: Add support for the USB
capability when a USB console is used.

View File

@ -71,6 +71,7 @@
# define COUNTER_NEEDED 1 # define COUNTER_NEEDED 1
# endif # endif
#endif #endif
#ifdef CONFIG_EXAMPLES_USBSERIAL_TRACEINIT #ifdef CONFIG_EXAMPLES_USBSERIAL_TRACEINIT
# define TRACE_INIT_BITS (TRACE_INIT_BIT) # define TRACE_INIT_BITS (TRACE_INIT_BIT)
#else #else
@ -106,7 +107,6 @@
#define TRACE_BITSET (TRACE_INIT_BITS|TRACE_ERROR_BITS|TRACE_CLASS_BITS|\ #define TRACE_BITSET (TRACE_INIT_BITS|TRACE_ERROR_BITS|TRACE_CLASS_BITS|\
TRACE_TRANSFER_BITS|TRACE_CONTROLLER_BITS|TRACE_INTERRUPT_BITS) TRACE_TRANSFER_BITS|TRACE_CONTROLLER_BITS|TRACE_INTERRUPT_BITS)
#ifdef CONFIG_CPP_HAVE_VARARGS #ifdef CONFIG_CPP_HAVE_VARARGS
# ifdef CONFIG_DEBUG # ifdef CONFIG_DEBUG
# define message(...) lib_lowprintf(__VA_ARGS__) # define message(...) lib_lowprintf(__VA_ARGS__)

View File

@ -935,13 +935,20 @@ NSH-Specific Configuration Settings
CONFIG_NSH_UBSDEV_MINOR CONFIG_NSH_UBSDEV_MINOR
The minor device number of the USB device. Default: 0 The minor device number of the USB device. Default: 0
If USB tracing is enabled, then NSH will initialize USB If USB tracing is enabled (CONFIG_USBDEV_TRACE), then NSH will
tracing as requested by the following: initialize USB tracing as requested by the following. Default:
Only USB errors are traced.
CONFIG_NSH_UBSDEV_TRACEINIT CONFIG_NSH_USBDEV_TRACEINIT
Bit set with each bit enabling a trace option (see Show initialization events
include/nuttx/usb/usbdev_trace.h). Default: Only USB errors CONFIG_NSH_USBDEV_TRACECLASS
are traced. 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 * CONFIG_NSH_CONDEV
If CONFIG_NSH_CONSOLE is set to 'y', then CONFIG_NSH_CONDEV If CONFIG_NSH_CONSOLE is set to 'y', then CONFIG_NSH_CONDEV

View File

@ -109,17 +109,50 @@
# define CONFIG_NSH_UBSDEV_MINOR 0 # define CONFIG_NSH_UBSDEV_MINOR 0
# endif # 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 */ /* The default console device is always /dev/console */
# ifndef CONFIG_NSH_USBCONDEV # ifndef CONFIG_NSH_USBCONDEV
# define CONFIG_NSH_USBCONDEV "/dev/console" # define CONFIG_NSH_USBCONDEV "/dev/console"
# endif # 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 #endif
/* If Telnet is selected for the NSH console, then we must configure /* 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, void nsh_dumpbuffer(FAR struct nsh_vtbl_s *vtbl, const char *msg,
const uint8_t *buffer, ssize_t nbytes); 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 */ /* Shell command handlers */
#ifndef CONFIG_NSH_DISABLE_ECHO #ifndef CONFIG_NSH_DISABLE_ECHO

View File

@ -124,6 +124,10 @@ int nsh_consolemain(int argc, char *argv[])
for (;;) for (;;)
{ {
/* For the case of debugging the USB console... dump collected USB trace data */
nsh_usbtrace();
/* Display the prompt string */ /* Display the prompt string */
fputs(g_nshprompt, pstate->cn_outstream); fputs(g_nshprompt, pstate->cn_outstream);

View File

@ -44,6 +44,7 @@
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <assert.h> #include <assert.h>
#include <debug.h>
#ifdef CONFIG_CDCACM #ifdef CONFIG_CDCACM
# include <nuttx/usb/cdcacm.h> # include <nuttx/usb/cdcacm.h>
@ -61,6 +62,12 @@
* Definitions * Definitions
****************************************************************************/ ****************************************************************************/
#if defined(CONFIG_DEBUG) || defined(CONFIG_NSH_USBCONSOLE)
# define trmessage lib_lowprintf
#else
# define trmessage printf
#endif
/**************************************************************************** /****************************************************************************
* Private Types * Private Types
****************************************************************************/ ****************************************************************************/
@ -81,6 +88,18 @@
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
/****************************************************************************
* 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 * Public Functions
****************************************************************************/ ****************************************************************************/
@ -100,7 +119,9 @@ int nsh_usbconsole(void)
/* Initialize any USB tracing options that were requested */ /* 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 /* 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 * 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 */ #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 */ #endif /* CONFIG_USBDEV */