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/ct-Bot.h

273 lines
8.3 KiB
C
Raw Permalink Normal View 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 ct-Bot.h
* @brief Demo-Hauptprogramm
* @author Benjamin Benz (bbe@heise.de)
* @date 26.12.05
*/
#ifndef CT_BOT_H_DEF
#define CT_BOT_H_DEF
#ifndef MMC_LOW_H_
#include "global.h" // denn in mmc-low.S sind typedefs unerwuenscht
#endif
/************************************************************
* Module switches, to make code smaller if features are not needed
************************************************************/
//#define LOG_CTSIM_AVAILABLE /*!< Logging ueber das ct-Sim (PC und MCU) */
//#define LOG_DISPLAY_AVAILABLE /*!< Logging ueber das LCD-Display (PC und MCU) */
//#define LOG_UART_AVAILABLE /*!< Logging ueber UART (NUR für MCU) */
#define LOG_STDOUT_AVAILABLE /*!< Logging auf die Konsole (NUR für PC) */
#define LED_AVAILABLE /*!< LEDs for local control */
#define IR_AVAILABLE /*!< Infrared Remote Control */
#define RC5_AVAILABLE /*!< Key-Mapping for IR-RC */
#define BOT_2_PC_AVAILABLE /*!< Soll der Bot mit dem PC kommunmizieren? */
//#define TIME_AVAILABLE /*!< Gibt es eine Systemzeit im s und ms? */
#define DISPLAY_AVAILABLE /*!< Display for local control */
#define DISPLAY_REMOTE_AVAILABLE /*!< Sende LCD Anzeigedaten an den Simulator */
#define DISPLAY_SCREENS_AVAILABLE /*!< Ermoeglicht vier verschiedene Screen */
//#define DISPLAY_SCREEN_RESETINFO /*!< Zeigt auf Screen 4 Informationen ueber Resets an */
//#define DISPLAY_ODOMETRIC_INFO /*!< Zeigt auf Screen 4 Positions- und Geschwindigkeitsdaten */
//#define DISPLAY_REGELUNG_AVAILABLE 3 /*!< Zeigt Reglerdaten auf Screen 4, wenn SPEED_CONTROL_AVAILABLE gesetzt ist*/
#define DISPLAY_MMC_INFO /*!< Zeigt auf Screen 4 die Daten der MMC-Karte an */
//#define DISPLAY_BEHAVIOUR_AVAILABLE /*!< Anzeige der Verhalten im Display Screen 3, ersetzt Counteranzeige */
#define DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE /*!< Zustandsaenderungen der Verhalten sind direkt unter Umgehung der Puffervar sichtbar */
#define MEASURE_MOUSE_AVAILABLE /*!< Geschwindigkeiten werden aus den Maussensordaten berechnet */
//#define MEASURE_COUPLED_AVAILABLE /*!< Geschwindigkeiten werden aus Maus- und Encoderwerten ermittelt und gekoppelt */
//#define WELCOME_AVAILABLE /*!< kleiner Willkommensgruss */
#define ADC_AVAILABLE /*!< A/D-Converter */
#define MAUS_AVAILABLE /*!< Maus Sensor */
#define ENA_AVAILABLE /*!< Enable-Leitungen */
#define SHIFT_AVAILABLE /*!< Shift Register */
//#define TEST_AVAILABLE_ANALOG /*!< Sollen die LEDs die analoge Sensorwerte anzeigen */
#define TEST_AVAILABLE_DIGITAL /*!< Sollen die LEDs die digitale Sensorwerte anzeigen */
//#define TEST_AVAILABLE_MOTOR /*!< Sollen die Motoren ein wenig drehen */
//#define TEST_AVAILABLE_COUNTER /*!< Gibt einen Endlos-Counter auf Screen 3 aus und aktiviert Screen 3 */
//#define DOXYGEN /*!< Nur zum Erzeugen der Doku, wenn dieser schalter an ist, jammert der gcc!!! */
#define BEHAVIOUR_AVAILABLE /*!< Nur wenn dieser Parameter gesetzt ist, exisitiert das Verhaltenssystem */
#define MAP_AVAILABLE /*!< Aktiviere die Kartographie */
//#define SPEED_CONTROL_AVAILABLE /*!< Aktiviert die Motorregelung */
//#define SRF10_AVAILABLE /*!< Ultraschallsensor SRF10 vorhanden */
#define MMC_AVAILABLE /*!< haben wir eine MMC/SD-Karte zur Verfuegung */
#define MINI_FAT_AVAILABLE /*!< koennen wir sektoren in FAT-systemen finden */
//#define MMC_VM_AVAILABLE /*!< Virtual Memory Management mit MMC / SD-Card oder PC-Emulation */
/************************************************************
* Some Dependencies!!!
************************************************************/
#ifdef DOXYGEN
#define PC /*!< Beim generieren der Doku alles anschalten */
#define MCU /*!< Beim generieren der Doku alles anschalten */
#define TEST_AVAILABLE_MOTOR /*!< Beim generieren der Doku alles anschalten */
#endif
#ifndef DISPLAY_AVAILABLE
#undef WELCOME_AVAILABLE
#undef DISPLAY_REMOTE_AVAILABLE
#undef DISPLAY_SCREENS_AVAILABLE
#undef DISPLAY_SCREEN_RESETINFO
#endif
#ifndef IR_AVAILABLE
#undef RC5_AVAILABLE
#endif
#ifndef MAUS_AVAILABLE
#undef MEASURE_MOUSE_AVAILABLE
#undef MEASURE_COUPLED_AVAILABLE
#endif
#ifdef PC
#ifndef DOXYGEN
#undef UART_AVAILABLE
#undef BOT_2_PC_AVAILABLE
#undef SRF10_AVAILABLE
#undef TWI_AVAILABLE
#undef SPEED_CONTROL_AVAILABLE // Deaktiviere die Motorregelung
#undef MMC_AVAILABLE
#endif
#define COMMAND_AVAILABLE /*!< High-Level Communication */
#undef DISPLAY_SCREEN_RESETINFO
#undef TEST_AVAILABLE_COUNTER
#endif
#ifdef MCU
#ifdef LOG_CTSIM_AVAILABLE
#define BOT_2_PC_AVAILABLE
#endif
#ifdef BOT_2_PC_AVAILABLE
#define UART_AVAILABLE /*!< Serial Communication */
#define COMMAND_AVAILABLE /*!< High-Level Communication */
#endif
// #undef MAP_AVAILABLE
#endif
#ifdef TEST_AVAILABLE_MOTOR
#define TEST_AVAILABLE /*!< brauchen wir den Testkrams */
#define TEST_AVAILABLE_DIGITAL /*!< Sollen die LEDs die digitale Sensorwerte anzeigen */
#endif
#ifdef TEST_AVAILABLE_DIGITAL
#define TEST_AVAILABLE /*!< brauchen wir den Testkrams */
#undef TEST_AVAILABLE_ANALOG
#endif
#ifdef TEST_AVAILABLE_ANALOG
#define TEST_AVAILABLE /*!< brauchen wir den Testkrams */
#endif
#ifdef TEST_AVAILABLE_COUNTER
#define TEST_AVAILABLE /*!< brauchen wir den Testkrams */
#define DISPLAY_SCREENS_AVAILABLE
#define DISPLAY_SCREEN_RESETINFO
#endif
#ifdef DISPLAY_ODOMETRIC_INFO
#undef DISPLAY_SCREEN_RESETINFO /*!< Wenn Odometrieinfos, dann keine Resetinfos */
#endif
#ifndef SPEED_CONTROL_AVAILABLE
#undef DISPLAY_REGELUNG_AVAILABLE
#endif
#ifdef LOG_UART_AVAILABLE
#define LOG_AVAILABLE
#endif
#ifdef LOG_CTSIM_AVAILABLE
#define LOG_AVAILABLE
#endif
#ifdef LOG_DISPLAY_AVAILABLE
#define LOG_AVAILABLE
#endif
#ifdef LOG_STDOUT_AVAILABLE
#define LOG_AVAILABLE
#endif
#ifndef MMC_AVAILABLE
#undef MINI_FAT_AVAILABLE
#ifdef MCU
#undef MMC_VM_AVAILABLE
#endif
#endif
#ifdef LOG_AVAILABLE
#ifdef PC
/* Auf dem PC gibts kein Logging ueber UART. */
#undef LOG_UART_AVAILABLE
#endif
#ifdef MCU
/* Mit Bot zu PC Kommunikation auf dem MCU gibts kein Logging ueber UART.
* Ohne gibts keine Kommunikation ueber ct-Sim.
*/
#undef LOG_STDOUT_AVAILABLE /*!< MCU hat kein STDOUT */
#ifdef BOT_2_PC_AVAILABLE
#undef LOG_UART_AVAILABLE
#else
#undef LOG_CTSIM_AVAILABLE
#endif
#endif
/* Ohne Display gibts auch keine Ausgaben auf diesem. */
#ifndef DISPLAY_AVAILABLE
#undef LOG_DISPLAY_AVAILABLE
#endif
/* Logging aufs Display ist nur moeglich, wenn mehrere Screens
* unterstuetzt werden.
*/
#ifndef DISPLAY_SCREENS_AVAILABLE
#undef LOG_DISPLAY_AVAILABLE
#endif
/* Es kann immer nur ueber eine Schnittstelle geloggt werden. */
#ifdef LOG_UART_AVAILABLE
#define UART_AVAILABLE
#undef LOG_CTSIM_AVAILABLE
#undef LOG_DISPLAY_AVAILABLE
#undef LOG_STDOUT_AVAILABLE
#endif
#ifdef LOG_CTSIM_AVAILABLE
#undef LOG_DISPLAY_AVAILABLE
#undef LOG_STDOUT_AVAILABLE
#endif
#ifdef LOG_DISPLAY_AVAILABLE
#undef LOG_STDOUT_AVAILABLE
#endif
// Wenn keine sinnvolle Log-Option mehr uebrig, loggen wir auch nicht
#ifndef LOG_CTSIM_AVAILABLE
#ifndef LOG_DISPLAY_AVAILABLE
#ifndef LOG_UART_AVAILABLE
#ifndef LOG_STDOUT_AVAILABLE
#undef LOG_AVAILABLE
#endif
#endif
#endif
#endif
#endif
#ifdef SRF10_AVAILABLE
#define TWI_AVAILABLE /*!< TWI-Schnittstelle (I2C) nutzen */
#endif
#define F_CPU 16000000L /*!< Crystal frequency in Hz */
#define XTAL F_CPU /*!< Crystal frequency in Hz */
#define LINE_FEED "\n\r" /*!< Windows und Linux unterscheiden beim Linefeed. Windows erwarten \n\r, Linux nur \n */
#ifdef MCU
#ifndef MMC_LOW_H_
#include <avr/interrupt.h>
#endif
#ifdef SIGNAL
#define NEW_AVR_LIB
#endif
#endif
#endif