This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
rc2007-soccer/source/ct-Bot/include/log.h
2007-02-11 18:32:03 +00:00

172 lines
5.2 KiB
C
Raw Permalink Blame History

/*
* c't-Sim - Robotersimulator fuer den c't-Bot
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your
* option) any later version.
* This program is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307, USA.
*
*/
/*! @file log.c
* @brief Routinen zum Loggen von Informationen. Es sollten ausschliesslich nur
* die Log-Makros: LOG_DEBUG(), LOG_INFO(), LOG_WARN(), LOG_ERROR() und LOG_FATAL()
* verwendet werden.
* Eine Ausgabe kann wie folgt erzeugt werden:
* LOG_DEBUG(("Hallo Welt!"));
* LOG_INFO(("Wert x=%d", x));
* Wichtig ist die doppelte Klammerung. Bei den Ausgaben kann auf ein Line Feed
* '\n' am Ende des Strings verzichtet werden, da dies automatisch angeh<65>ngt
* hinzugefuegt wird.
*
* <pre>
* Die Logausgaben werden generell mit der Definition von LOG_AVAILABLE eingeschaltet
* und sind ansonsten nicht aktiv.
*
* Loggings auf dem PC:
* --------------------
* Hier stehen drei Arten der Ausgabeschnittstellen zur Verfuegung.
* 1. Logging ueber ct-Sim: LOG_CTSIM_AVAILABLE muss definiert sein.
* 2. Logging ueber Display: LOG_DISPLAY_AVAILABLE muss definiert sein, sowie
* DISPLAY_AVAILABLE und DISPLAY_SCREENS_AVAILABLE.
* Logging erfolgt auf Screen 5.
* 3. Logging ueber Konsole: Es muss LOG_STDOUT_AVAILABLE definiert sein.
*
* LOG_UART_AVAILABLE steht auf dem PC nicht zur Verfuegung.
*
* Loggings auf dem MCU:
* ---------------------
* Hier stehen drei Arten der Ausgabeschnittstellen zur Verfuegung.
* 1. Logging ueber UART: LOG_UART_AVAILABLE muss definiert sein.
* Es darf BOT_2_PC_AVAILABLE nicht definiert sein, da ansonsten
* diese Kommunikation ueber den UART laeuft.
* 2. Logging ueber ct-Sim: LOG_CTSIM_AVAILABLE muss definiert sein.
* BOT_2_PC_AVAILABLE muss zusaetzlich definiert sein.
* 3. Logging ueber Display: LOG_DISPLAY_AVAILABLE muss definiert sein, sowie
* DISPLAY_AVAILABLE und DISPLAY_SCREENS_AVAILABLE.
* Logging erfolgt auf Screen 5.
* </pre>
*
* @author Andreas Merkle (mail@blue-andi.de)
* @date 27.02.06
*/
#ifndef LOG_H_
#define LOG_H_
#include "ct-Bot.h"
#ifdef LOG_AVAILABLE
/*!
* Allgemeines Debugging (Methode DiesUndDas wurde mit Parameter SoUndSo
* aufgerufen ...)
*/
#define LOG_DEBUG(__dbg) log_begin(__FILE__, __LINE__, LOG_TYPE_DEBUG), \
log_printf __dbg, \
log_end()
/*!
* Allgemeine Informationen (Programm gestartet, Programm beendet, Verbindung
* zu Host Foo aufgebaut, Verarbeitung dauerte SoUndSoviel Sekunden ...)
*/
#define LOG_INFO(__dbg) log_begin(__FILE__, __LINE__, LOG_TYPE_INFO), \
log_printf __dbg, \
log_end()
/*!
* Auftreten einer unerwarteten Situation.
*/
#define LOG_WARN(__dbg) log_begin(__FILE__, __LINE__, LOG_TYPE_WARN), \
log_printf __dbg, \
log_end()
/*!
* Fehler aufgetreten, Bearbeitung wurde alternativ fortgesetzt.
*/
#define LOG_ERROR(__dbg) log_begin(__FILE__, __LINE__, LOG_TYPE_ERROR), \
log_printf __dbg, \
log_end()
/*!
* Kritischer Fehler, Programmabbruch.
*/
#define LOG_FATAL(__dbg) log_begin(__FILE__, __LINE__, LOG_TYPE_FATAL), \
log_printf __dbg, \
log_end()
#else
/*!
* Allgemeines Debugging (Methode DiesUndDas wurde mit Parameter SoUndSo
* aufgerufen ...)
*/
#define LOG_DEBUG(__dbg)
/*!
* Allgemeine Informationen (Programm gestartet, Programm beendet, Verbindung
* zu Host Foo aufgebaut, Verarbeitung dauerte SoUndSoviel Sekunden ...)
*/
#define LOG_INFO(__dbg)
/*!
* Auftreten einer unerwarteten Situation.
*/
#define LOG_WARN(__dbg)
/*!
* Fehler aufgetreten, Bearbeitung wurde alternativ fortgesetzt.
*/
#define LOG_ERROR(__dbg)
/*!
* Kritischer Fehler, Programmabbruch.
*/
#define LOG_FATAL(__dbg)
#endif /* LOG_AVAILABLE */
/*! Dieser Typ definiert die Typen der Log-Ausgaben. */
typedef enum {
LOG_TYPE_DEBUG = 0, /*!< Allgemeines Debugging */
LOG_TYPE_INFO, /*!< Allgemeine Informationen */
LOG_TYPE_WARN, /*!< Auftreten einer unerwarteten Situation */
LOG_TYPE_ERROR, /*!< Fehler aufgetreten */
LOG_TYPE_FATAL /*!< Kritischer Fehler */
} LOG_TYPE;
#ifdef LOG_AVAILABLE
/*!
* Schreibt Angaben ueber Datei, Zeilennummer und den Log-Typ in den Puffer.
* Achtung, Mutex wird gelockt und muss explizit durch log_end() wieder
* freigegeben werden!
* @param filename Dateiname
* @param line Zeilennummer
* @param log_type Log-Typ
*/
extern void log_begin(char *filename, unsigned int line, LOG_TYPE log_type);
/*!
* Schreibt die eigentliche Ausgabeinformation in den Puffer.
* @param format Format
*/
extern void log_printf(char *format, ...);
/*!
* Gibt den Puffer entsprechend aus.
*/
extern void log_end(void);
#endif /* LOG_AVAILABLE */
#endif /*LOG_H_*/