incubator-nuttx/include/nuttx/syslog/ramlog.h

151 lines
5.2 KiB
C

/****************************************************************************
* include/nuttx/syslog/ramlog.h
* The RAM logging driver
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/* The RAM logging driver is a driver that was intended to support debugging
* output (syslogging) when the normal serial output is not available. For
* example, if you are using a Telnet or USB serial console, the debug
* output will get lost.
*
* The RAM logging driver is similar to a pipe in that it saves the
* debugging output in a FIFO in RAM. It differs from a pipe in numerous
* details as needed to support logging.
*
* This driver is built when CONFIG_RAMLOG is defined in the NuttX
* configuration.
*/
#ifndef __INCLUDE_NUTTX_SYSLOG_RAMLOG_H
#define __INCLUDE_NUTTX_SYSLOG_RAMLOG_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/syslog/syslog.h>
#ifdef CONFIG_RAMLOG
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
/* CONFIG_RAMLOG - Enables the RAM logging feature
* CONFIG_RAMLOG_SYSLOG - Use the RAM logging device for the syslogging
* interface. If this feature is enabled then all debug output (only)
* will be re-directed to the circular buffer in RAM. This RAM log can
* be viewed from NSH using the 'dmesg' command. NOTE: Unlike the
* limited, generic character driver SYSLOG device, the RAMLOG *can* be
* used to generate debug output from interrupt level handlers.
* CONFIG_RAMLOG_NPOLLWAITERS - The number of threads than can be waiting
* for this driver on poll(). Default: 4
*
* If CONFIG_RAMLOG_SYSLOG is selected, then the following may also be
* provided:
*
* CONFIG_RAMLOG_BUFSIZE - Size of the console RAM log. Default: 1024
*/
#if defined(CONFIG_RAMLOG_SYSLOG) && !defined(CONFIG_SYSLOG_DEVPATH)
# define CONFIG_SYSLOG_DEVPATH "/dev/ramlog"
#endif
#ifndef CONFIG_RAMLOG_NPOLLWAITERS
# define CONFIG_RAMLOG_NPOLLWAITERS 4
#endif
#ifndef CONFIG_RAMLOG_BUFSIZE
# define CONFIG_RAMLOG_BUFSIZE 1024
#endif
/****************************************************************************
* Public Data
****************************************************************************/
#ifndef __ASSEMBLY__
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: ramlog_register
*
* Description:
* Create the RAM logging device and register it at the specified path.
* Mostly likely this path will be /dev/console.
*
* This interface is not normally used but can be made available is
* someone just wants to tinker with the RAM log as a generic character
* device. Normally both CONFIG_CONSOLE_SYSLOG and CONFIG_RAMLOG_SYSLOG
* would be set (to capture all output in the log) -OR- just
* CONFIG_RAMLOG_SYSLOG would be set to capture debug output only
* in the log.
*
****************************************************************************/
int ramlog_register(FAR const char *devpath,
FAR char *buffer, size_t buflen);
/****************************************************************************
* Name: ramlog_syslog_register
*
* Description:
* Create the RAM logging device and register it at the specified path.
* Mostly likely this path will be CONFIG_SYSLOG_DEVPATH
*
****************************************************************************/
#ifdef CONFIG_RAMLOG_SYSLOG
void ramlog_syslog_register(void);
#endif
/****************************************************************************
* Name: ramlog_putc
*
* Description:
* This is the low-level system logging interface.
*
****************************************************************************/
#ifdef CONFIG_RAMLOG_SYSLOG
int ramlog_putc(int ch);
#endif
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* CONFIG_RAMLOG */
#endif /* __INCLUDE_NUTTX_SYSLOG_RAMLOG_H */