/*************************************************************************** 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 using namespace std; /** @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