diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2015-02-08 06:53:24 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2015-02-08 06:53:24 -0600 |
commit | baf972771e52416fbcddc05da8630bd65f530414 (patch) | |
tree | 05a418f1944c8106fee9b3ca17e967e7ce7db6be /nuttx/drivers | |
parent | 3531542145cc60792cf3f1134de9966a8313a7f6 (diff) | |
download | px4-nuttx-baf972771e52416fbcddc05da8630bd65f530414.tar.gz px4-nuttx-baf972771e52416fbcddc05da8630bd65f530414.tar.bz2 px4-nuttx-baf972771e52416fbcddc05da8630bd65f530414.zip |
SYSLOG: Add an option to use the syslog'ing device as the system consolution. This option enables a low-level, write-only console device at /dev/console (similar to the low-level UART console device). From Pierre-noel Bouteville.
Diffstat (limited to 'nuttx/drivers')
-rw-r--r-- | nuttx/drivers/syslog/Kconfig | 12 | ||||
-rw-r--r-- | nuttx/drivers/syslog/Make.defs | 6 | ||||
-rw-r--r-- | nuttx/drivers/syslog/syslog_console.c | 139 |
3 files changed, 157 insertions, 0 deletions
diff --git a/nuttx/drivers/syslog/Kconfig b/nuttx/drivers/syslog/Kconfig index 0d07bf4b2..8264f786e 100644 --- a/nuttx/drivers/syslog/Kconfig +++ b/nuttx/drivers/syslog/Kconfig @@ -71,3 +71,15 @@ config RAMLOG_NPOLLWAITERS The maximum number of threads that may be waiting on the poll method. endif + +config SYSLOG_CONSOLE + bool "Use SYSLOG for /dev/console" + default n + depends on DEV_CONSOLE + ---help--- + Use the syslog logging device as a system console. If this feature is enabled + (along with DEV_CONSOLE), then all console output will be re-directed to syslog + output (syslog_putc). This is useful, for example, if the only console is a Telnet + console. Then in that case, console output from non-Telnet threads will go to + the syslog output. + diff --git a/nuttx/drivers/syslog/Make.defs b/nuttx/drivers/syslog/Make.defs index aa0ab19b8..c9aa7a024 100644 --- a/nuttx/drivers/syslog/Make.defs +++ b/nuttx/drivers/syslog/Make.defs @@ -47,6 +47,12 @@ ifeq ($(CONFIG_RAMLOG),y) CSRCS += ramlog.c endif +# (Add other SYSLOG_CONSOLE drivers here) + +ifeq ($(CONFIG_SYSLOG_CONSOLE),y) + CSRCS += syslog_console.c +endif + # Include SYSLOG build support DEPPATH += --dep-path syslog diff --git a/nuttx/drivers/syslog/syslog_console.c b/nuttx/drivers/syslog/syslog_console.c new file mode 100644 index 000000000..4c846b342 --- /dev/null +++ b/nuttx/drivers/syslog/syslog_console.c @@ -0,0 +1,139 @@ +/**************************************************************************** + * drivers/syslog/syslog_console.c + * + * Copyright (C) 2015 Pierre-noel Bouteville. All rights reserved. + * Author: Pierre-noel Bouteville <pnb990@gmail.com> + * + * 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 <sys/types.h> +#include <errno.h> +#include <debug.h> + +#include <nuttx/arch.h> +#include <nuttx/fs/fs.h> +#include <nuttx/syslog/syslog.h> + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/* The architecture must provide syslog_putc for this driver */ + +#if defined(CONFIG_SYSLOG) + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +static ssize_t syslog_console_read(FAR struct file *filep, FAR char *buffer, + size_t buflen); +static ssize_t syslog_console_write(FAR struct file *filep, + FAR const char *buffer, size_t buflen); +static int syslog_console_ioctl(FAR struct file *filep, int cmd, + unsigned long arg); + +/**************************************************************************** + * Private Variables + ****************************************************************************/ + +static const struct file_operations g_consoleops = +{ + 0, /* open */ + 0, /* close */ + syslog_console_read, /* read */ + syslog_console_write, /* write */ + 0, /* seek */ + syslog_console_ioctl /* ioctl */ +#ifndef CONFIG_DISABLE_POLL + , 0 /* poll */ +#endif +}; + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: syslog_console_ioctl + ****************************************************************************/ + +static int syslog_console_ioctl(FAR struct file *filep, int cmd, + unsigned long arg) +{ + return -ENOTTY; +} + +/**************************************************************************** + * Name: syslog_console_read + ****************************************************************************/ + +static ssize_t syslog_console_read(FAR struct file *filep, FAR char *buffer, + size_t buflen) +{ + return 0; +} + +/**************************************************************************** + * Name: syslog_console_write + ****************************************************************************/ + +static ssize_t syslog_console_write(FAR struct file *filep, + FAR const char *buffer, size_t buflen) +{ + ssize_t ret = buflen; + + for (; buflen; buflen--) + { + syslog_putc(*buffer++); + } + + return ret; +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: syslog_console_init +****************************************************************************/ + +void syslog_console_init(void) +{ + (void)register_driver("/dev/console", &g_consoleops, 0666, NULL); +} +#endif /* CONFIG_SYSLOG */ |