From 56d9bdd39ed36c36e9a61411b86c76d5228b2133 Mon Sep 17 00:00:00 2001 From: sicarius Date: Sun, 11 Feb 2007 18:32:03 +0000 Subject: Added lot's of code-files used during work --- source/ct-Bot/include/log.h | 172 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 source/ct-Bot/include/log.h (limited to 'source/ct-Bot/include/log.h') diff --git a/source/ct-Bot/include/log.h b/source/ct-Bot/include/log.h new file mode 100644 index 0000000..eb6a35f --- /dev/null +++ b/source/ct-Bot/include/log.h @@ -0,0 +1,172 @@ +/* + * 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�ngt + * hinzugefuegt wird. + * + *
+ * 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.
+ * 
+ * + * @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_*/ -- cgit v1.2.3