#ifndef __TMrbSerialComm_h__
#define __TMrbSerialComm_h__
#include "Rtypes.h"
#include "TNamed.h"
#include "TString.h"
class TMrbSerialComm : public TNamed {
public:
enum EMrbParity { kMrbParityNone,
kMrbParityOdd,
kMrbParityEven
};
public:
TMrbSerialComm() {};
TMrbSerialComm(const Char_t * Device);
virtual ~TMrbSerialComm() { this->Close(); };
void Setup( Int_t BaudRate,
Int_t NofDataBits = 8,
EMrbParity Parity = kMrbParityNone,
Int_t NofStopBits = 1,
Bool_t UseRtsCts = kFALSE,
Bool_t IgnoreCR = kTRUE);
Bool_t Open();
Bool_t Close();
Int_t ReadData(TString & Data);
Int_t WriteData(const Char_t * Data);
Int_t WriteSingleBytes(const Char_t * Data, Double_t Delay = -1);
Int_t WriteWithDelay(const Char_t * Data, Double_t Delay = -1);
inline void UseRtsCts(Bool_t Flag) { fUseRtsCts = Flag; };
inline void IgnoreCR(Bool_t Flag) { fIgnoreCR = Flag; };
inline void SetBaudRate(Int_t BaudRate) { fBaudRate = BaudRate; };
inline void SetBits(Int_t DataBits, Int_t StopBits) { fNofDataBits = DataBits; fNofStopBits = StopBits; };
inline void SetParity(EMrbParity Parity) { fParity = Parity; };
inline void SetDelay(Double_t Delay) { fDelay = Delay; };
inline void SetLineTerm1(Char_t Term) { fLineTerm1 = Term; };
inline void SetLineTerm2(Char_t Term) { fLineTerm2 = Term; };
inline void SetPrefix(const Char_t * Prefix) { fPrefix = Prefix; };
inline void SetPostfix(const Char_t * Postfix, Bool_t CrFlag = kTRUE) { fPostfix = Postfix; if (CrFlag) fPostfix += "\r"; };
inline const Char_t * GetPort() const { return(this->GetTitle()); };
inline Bool_t IsOpen() const { return(fFd != -1); };
void Print(Option_t * Option) const { TObject::Print(Option); }
virtual void Print() const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
Int_t ReadDataRaw(UChar_t * Data, Int_t nbytes);
Int_t WriteDataRaw(const UChar_t * Data, Int_t nbytes);
Bool_t GetDsr();
Bool_t GetDtr();
void SetDtr();
void ResetDtr();
Bool_t GetCts();
Bool_t GetRts();
void SetRts();
void ResetRts();
void SetRtsAndDtr();
void ToggleDtr();
Bool_t SetModemBaudRate(Int_t baudrate = 0);
Bool_t SetRaw();
Bool_t SetSpaceParity();
protected:
const Char_t * MakePrintable(TString & PrintString, const Char_t * String) const;
protected:
Int_t fFd;
void * fOldTIO;
void * fNewTIO;
Int_t fBaudRate;
Bool_t fUseRtsCts;
Int_t fNofDataBits;
Int_t fNofStopBits;
EMrbParity fParity;
Bool_t fIgnoreCR;
Double_t fDelay;
Char_t fLineTerm1;
Char_t fLineTerm2;
TString fPrefix;
TString fPostfix;
Int_t fBytesReceived;
Int_t fBytesTransmitted;
ClassDef(TMrbSerialComm, 1)
};
#endif