/*************************************************************************** cserial.h - description ------------------- begin : Mit Mai 28 2003 copyright : (C) 2003 by Markus Raab email : markus.raab@aon.at ***************************************************************************/ #ifndef CSERIAL_H #define CSERIAL_H #include#include #include #include #include #include #include /** @author Markus Raab Diese Klasse bietet ihnen Zugriff auf die seriellen Schnittstellen unter allen unix-ähnlichen Betriebsystemen. Die Verwendung ähnelt sehr stark dem Konzept von den c++-Streams (wie iostream,...). Folgende Seiten können ihnen weitere Tipps zu der serielle Schnittstelle geben: http://www.easysw.com/~mike/serial/serial.html http://en.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html*/ class CSerial { /**Methoden zum öffnen und Schließen der serielle Schnittstelle*/ public: CSerial (); /**Konstruktor der auch gleich die serielle Schnittstelle öffnet. Zu beachten ist, dass in diesem Fall die Defaulteinstellung für die Übertragungsraten verwendet werden müssen.*/ CSerial (const char * port); /**Öffnet die serielle schnittstelle mit den aktuellen Einstellungen. Für port ist je nach verwendeten Betriebsystem und gewünschte Schnittstelle: IRIX® /dev/ttyf1 /dev/ttyf2 HP-UX /dev/tty1p0 /dev/tty2p0 Solaris®/SunOS® /dev/ttya /dev/ttyb Linux® /dev/ttyS0 /dev/ttyS1 Digital UNIX® /dev/tty01 /dev/tty02 */ int open (const char * port); /**Setzt die Optionen neu im offnen Filedeskriptor*/ int reopen (); /**Führe den Initalisierungsprozess unabhängig von dem Konstruktor aus.*/ void init(); ~CSerial (); int close(); /**Methoden zum Setzen von Optionen.*/ public: /**Setzt die Baudrate auf einen bestimmten Wert. Gültig sind folgende Werte: - #define B0 0000000 // hang up - #define B50 0000001 - #define B75 0000002 - #define B110 0000003 - #define B134 0000004 - #define B150 0000005 - #define B200 0000006 - #define B300 0000007 - #define B600 0000010 - #define B1200 0000011 - #define B1800 0000012 - #define B2400 0000013 - #define B4800 0000014 - #define B9600 0000015 - #define B19200 0000016 - #define B38400 0000017 welche in der Datei bits/termios.h definiert sind. Wenn sie Systemunabhängig bleiben wollen, ist es ratsam die Konstante zu verwenden, und nicht den Zahlenwert!*/ int setBaud (speed_t Baudrate = B9600); /**Gibt an, wie viele Bits verwendet werden sollen. Möglich sind Werte von 5 bis 8 - #define CS5 0000000 - #define CS6 0000020 - #define CS7 0000040 - #define CS8 0000060 welche in der Datei bits/termios.h definiert sind. Wenn sie Systemunabhängig bleiben wollen, ist es ratsam die Konstante zu verwenden, und nicht den Zahlenwert!*/ int setBits (tcflag_t Bits = CS8); /**Gibt an, ob sie zwei Stoppbits oder nur einen haben wollen*/ int setStop (bool TwoStopBits = false); /**Gibt an, ob sie mit Parität arbeiten wollen, oder nicht*/ int setPari (bool Parity = false); /**Schaltet zusätliche Ausgabe, welche nützlich für das Testen von Programmen ist, ein oder aus*/ int setDebug (bool Debug = false); /**Sollte ein Microcontroller nicht mitlesen können, kann man kurze Wartezeiten beim senden einbauen Die Zeit ist in Microsekunden angegeben. Wenn sie diese Funktion in Anspruch nehmen, sollten sie aber nur send_char und empfange_char verwenden, da bei den anderen Typen, mehere Bytes hintereinander gesendet werden, bis die zur nächste Wartepause.*/ int setWait (int TimeToWaitInMicroSec); /**Zusätliche diverse Methoden*/ public: /**Gibt einen Wert in allen gängigen Zahlenformate aus (Okt, Hex, Dez, char). Dies wird automatisch ausgeführt, wenn Debug eingeschalten ist.*/ void ausgeben (const unsigned char * buffer, const int length, const char modus ); int send_char (const unsigned char wert); /**Das universelle Ausgeben der Klasse.*/ void send (void * buffer, int length); unsigned char empfange_char (); void empfange (void * buffer, int length); int empfange_string (string str); void warte_kurz (); /**Streamoperatoren für Ein- und Ausgabe*/ public: /**Ausgabe*/ CSerial & operator << (const char); CSerial & operator << (const int); CSerial & operator << (const long int); #if defined __GNUC__ CSerial & operator << (const long long); #endif CSerial & operator << (const float); CSerial & operator << (const double); #if _G_HAVE_BOOL CSerial & operator << (const bool); #endif CSerial & operator << (const char *); CSerial & operator << (string); /**Eingabe*/ CSerial & operator >> (char); CSerial & operator >> (int); CSerial & operator >> (long int); #if defined __GNUC__ CSerial & operator >> (long long); #endif CSerial & operator >> (float); CSerial & operator >> (double); #if _G_HAVE_BOOL CSerial & operator >> (bool); #endif CSerial & operator >> (char *); CSerial & operator >> (string); private: /**Filedeskriptor für serielle Schnittstelle -1 wenn nicht geöffnet sonst >2*/ int Cfd; /**Gibt wenn gesetzt exakte Informationen auf stderr (da stderr ungepuffert) über den Vorgang aus.*/ int CDebug; /**Sollte ein Microcontroller nicht mitlesen können, kann man kurze Wartezeiten beim senden einbauen*/ int CWait; /**Gesetzte Optionen*/ struct termios options; }; #endif