/***************************************************************************
                          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