/***************************************************************************
                          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
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif