Merge commit '049c93446561c6ad3e59183c139f3916230ddee5' into nuttx-merge-5596

This merges NuttX 6.25 with one post-release bugfix.
This commit is contained in:
px4dev
2013-02-06 21:38:33 -08:00
153 changed files with 6072 additions and 2343 deletions
+4
View File
@@ -34,3 +34,7 @@ endmenu
menu "Sysinfo"
source "$APPSDIR/system/sysinfo/Kconfig"
endmenu
menu "USB Monitor"
source "$APPSDIR/system/usbmonitor/Kconfig"
endmenu
+3
View File
@@ -66,3 +66,6 @@ ifeq ($(CONFIG_SYSTEM_SYSINFO),y)
CONFIGURED_APPS += system/sysinfo
endif
ifeq ($(CONFIG_SYSTEM_USBMONITOR),y)
CONFIGURED_APPS += system/usbmonitor
endif
+1 -1
View File
@@ -37,7 +37,7 @@
# Sub-directories containing system task
SUBDIRS = free i2c install readline poweroff ramtron sdcard sysinfo
SUBDIRS = free i2c install readline poweroff ramtron sdcard sysinfo usbmonitor
# Create the list of installed runtime modules (INSTALLED_DIRS)
-6
View File
@@ -1,6 +0,0 @@
This application provides UNIX style memory free information.
Source: NuttX
Author: Gregory Nutt <gnutt@nuttx.org>
Date: 17. March 2011
+36 -16
View File
@@ -132,23 +132,33 @@ static inline int readline_rawgetc(int infd)
nread = read(infd, &buffer, 1);
/* Return EOF if the end of file (0) or error (-1) occurs. */
/* Check for end-of-file. */
if (nread < 1)
if (nread == 0)
{
/* Return zero on end-of-file */
return 0;
}
/* Check if an error occurred */
else if (nread < 0)
{
/* EINTR is not really an error; it simply means that a signal we
* received while watiing for intput.
*/
if (nread == 0 || errno != EINTR)
int errcode = errno;
if (errcode != EINTR)
{
return EOF;
return -errcode;
}
}
}
while (nread < 1);
/* On success, returnt he character that was read */
/* On success, return the character that was read */
return (int)buffer;
}
@@ -275,9 +285,29 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
int ch = readline_rawgetc(infd);
/* Check for end-of-file or read error */
if (ch <= 0)
{
/* Did we already received some data? */
if (nch > 0)
{
/* Yes.. Terminate the line (which might be zero length)
* and return the data that was received. The end-of-file
* or error condition will be reported next time.
*/
buf[nch] = '\0';
return nch;
}
return ch;
}
/* Are we processing a VT100 escape sequence */
if (escape)
else if (escape)
{
/* Yes, is it an <esc>[, 3 byte sequence */
@@ -366,16 +396,6 @@ ssize_t readline(FAR char *buf, int buflen, FILE *instream, FILE *outstream)
return nch;
}
/* Check for end-of-file */
else if (ch == EOF)
{
/* Terminate the line (which might be zero length) */
buf[nch] = '\0';
return nch;
}
/* Otherwise, check if the character is printable and, if so, put the
* character in the line buffer
*/
+67
View File
@@ -0,0 +1,67 @@
#
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
config SYSTEM_USBMONITOR
bool "USB Monitor"
default n
depends on USBDEV && USBDEV_TRACE && SYSLOG
---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 SYSTEM_USBMONITOR
config SYSTEM_USBMONITOR_STACKSIZE
int "USB Monitor daemon stack size"
default 2048
---help---
The stack size to use the the USB monitor daemon. Default: 2048
config SYSTEM_USBMONITOR_PRIORITY
int "USB Monitor daemon priority"
default 50
---help---
The priority to use the the USB monitor daemon. Default: 50
config SYSTEM_USBMONITOR_INTERVAL
int "USB Monitor dump frequency"
default 2
---help---
The rate in seconds that the USB monitor will wait before dumping
the next set of buffered USB trace data. Default: 2 seconds.
config SYSTEM_USBMONITOR_TRACEINIT
bool "Show initialization events"
default n
---help---
Show initialization events
config SYSTEM_USBMONITOR_TRACECLASS
bool "Show class driver events"
default n
---help---
Show class driver events
config SYSTEM_USBMONITOR_TRACETRANSFERS
bool "Show data transfer events"
default n
---help---
Show data transfer events
config SYSTEM_USBMONITOR_TRACECONTROLLER
bool "Show controller events"
default n
---help---
Show controller events
config SYSTEM_USBMONITOR_TRACEINTERRUPTS
bool "Show interrupt-related events"
default n
---help---
Show interrupt-related events
endif
+117
View File
@@ -0,0 +1,117 @@
############################################################################
# apps/system/usbmonitor/Makefile
#
# Copyright (C) 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name NuttX nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
-include $(TOPDIR)/.config
-include $(TOPDIR)/Make.defs
include $(APPDIR)/Make.defs
ifeq ($(WINTOOL),y)
INCDIROPT = -w
endif
# USB Monitor Application
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 768
ASRCS =
CSRCS = usbmonitor.c
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS)
OBJS = $(AOBJS) $(COBJS)
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
BIN = ..\..\libapps$(LIBEXT)
else
ifeq ($(WINTOOL),y)
BIN = ..\\..\\libapps$(LIBEXT)
else
BIN = ../../libapps$(LIBEXT)
endif
endif
ROOTDEPPATH = --dep-path .
# Common build
VPATH =
all: .built
.PHONY: context depend clean distclean
$(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
$(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
.built: $(OBJS)
$(call ARCHIVE, $(BIN), $(OBJS))
$(Q) touch .built
# Register application
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
$(BUILTIN_REGISTRY)$(DELIM)usbmonitor_start.bdat: $(DEPCONFIG) Makefile
$(call REGISTER,"usbmon_start",$(PRIORITY),$(STACKSIZE),usbmonitor_start)
$(BUILTIN_REGISTRY)$(DELIM)usbmonitor_stop.bdat: $(DEPCONFIG) Makefile
$(call REGISTER,"usbmon_stop",$(PRIORITY),$(STACKSIZE),usbmonitor_stop)
context: $(BUILTIN_REGISTRY)$(DELIM)usbmonitor_start.bdat $(BUILTIN_REGISTRY)$(DELIM)usbmonitor_stop.bdat
else
context:
endif
# Create dependencies
.depend: Makefile $(SRCS)
$(Q) $(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
$(Q) touch $@
depend: .depend
clean:
$(call DELFILE, .built)
$(call CLEAN)
distclean: clean
$(call DELFILE, Make.dep)
$(call DELFILE, .depend)
-include Make.dep
+234
View File
@@ -0,0 +1,234 @@
/****************************************************************************
* apps/system/usbmonitor/usbmonitor.c
*
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/progmem.h>
#include <sys/types.h>
#include <stdbool.h>
#include <unistd.h>
#include <sched.h>
#include <syslog.h>
#include <errno.h>
#include <nuttx/usb/usbdev_trace.h>
#ifdef CONFIG_SYSTEM_USBMONITOR
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define USBMON_PREFIX "USB Monitor: "
/* Configuration ************************************************************/
#ifndef CONFIG_SYSTEM_USBMONITOR_STACKSIZE
# define CONFIG_SYSTEM_USBMONITOR_STACKSIZE 2048
#endif
#ifndef CONFIG_SYSTEM_USBMONITOR_PRIORITY
# define CONFIG_SYSTEM_USBMONITOR_PRIORITY 50
#endif
#ifndef CONFIG_SYSTEM_USBMONITOR_INTERVAL
# 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)
#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)
/****************************************************************************
* Private Types
****************************************************************************/
struct usbmon_state_s
{
volatile bool started;
volatile bool stop;
pid_t pid;
};
/****************************************************************************
* Private Data
****************************************************************************/
static struct usbmon_state_s g_usbmonitor;
/****************************************************************************
* Private Functions
****************************************************************************/
static int usbmonitor_tracecallback(struct usbtrace_s *trace, void *arg)
{
usbtrace_trprintf((trprintf_t)syslog, trace->event, trace->value);
return 0;
}
static int usbmonitor_daemon(int argc, char **argv)
{
syslog(USBMON_PREFIX "Running: %d\n", g_usbmonitor.pid);
/* Loop until we detect that there is a request to stop. */
while (!g_usbmonitor.stop)
{
sleep(CONFIG_SYSTEM_USBMONITOR_INTERVAL);
(void)usbtrace_enumerate(usbmonitor_tracecallback, NULL);
}
/* Stopped */
g_usbmonitor.stop = false;
g_usbmonitor.started = false;
syslog(USBMON_PREFIX "Stopped: %d\n", g_usbmonitor.pid);
return 0;
}
/****************************************************************************
* Public Functions
****************************************************************************/
int usbmonitor_start(int argc, char **argv)
{
/* Has the monitor already started? */
sched_lock();
if (!g_usbmonitor.started)
{
int ret;
/* No.. start it now */
/* First, initialize any USB tracing options that were requested */
usbtrace_enable(TRACE_BITSET);
/* Then start the USB monitoring daemon */
g_usbmonitor.started = true;
g_usbmonitor.stop = false;
ret = TASK_CREATE("USB Monitor", CONFIG_SYSTEM_USBMONITOR_PRIORITY,
CONFIG_SYSTEM_USBMONITOR_STACKSIZE,
(main_t)usbmonitor_daemon, (const char **)NULL);
if (ret < 0)
{
int errcode = errno;
syslog(USBMON_PREFIX
"ERROR: Failed to start the USB monitor: %d\n",
errcode);
}
else
{
g_usbmonitor.pid = ret;
syslog(USBMON_PREFIX "Started: %d\n", g_usbmonitor.pid);
}
sched_unlock();
return 0;
}
sched_unlock();
syslog(USBMON_PREFIX "%s: %d\n",
g_usbmonitor.stop ? "Stopping" : "Running", g_usbmonitor.pid);
return 0;
}
int usbmonitor_stop(int argc, char **argv)
{
/* Has the monitor already started? */
if (g_usbmonitor.started)
{
/* Stop the USB monitor. The next time the monitor wakes up,
* it will see the the stop indication and will exist.
*/
syslog(USBMON_PREFIX "Stopping: %d\n", g_usbmonitor.pid);
g_usbmonitor.stop = true;
/* We may as well disable tracing since there is no listener */
usbtrace_enable(0);
}
syslog(USBMON_PREFIX "Stopped: %d\n", g_usbmonitor.pid);
return 0;
}
#endif /* CONFIG_SYSTEM_USBMONITOR */