source: SVN/cambria/redboot/host/tools/Utils/common/eCosSerial.h @ 1

Last change on this file since 1 was 1, checked in by Tim Harvey, 2 years ago

restored latest version of files from server backup

Signed-off-by: Tim Harvey <tharvey@…>

File size: 5.5 KB
Line 
1//####COPYRIGHTBEGIN####
2//                                                                         
3// ----------------------------------------------------------------------------
4// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
5//
6// This program is part of the eCos host tools.
7//
8// This program is free software; you can redistribute it and/or modify it
9// under the terms of the GNU General Public License as published by the Free
10// Software Foundation; either version 2 of the License, or (at your option)
11// any later version.
12//
13// This program is distributed in the hope that it will be useful, but WITHOUT
14// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
16// more details.
17//
18// You should have received a copy of the GNU General Public License along with
19// this program; if not, write to the Free Software Foundation, Inc.,
20// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21//
22// ----------------------------------------------------------------------------
23//                                                                         
24//####COPYRIGHTEND####
25//=================================================================
26//
27//        eCosSerial.h
28//
29//        Serial test class
30//
31//=================================================================
32//=================================================================
33//#####DESCRIPTIONBEGIN####
34//
35// Author(s):     sdf
36// Contributors:  sdf
37// Date:          1999-04-01
38// Description:   This class abstracts the serial port
39// Usage:
40//
41//
42//####DESCRIPTIONEND####
43
44#ifndef _CECOSSERIAL_H
45#define _CECOSSERIAL_H
46#include "eCosStd.h"
47#include "eCosSocket.h"
48#include "Collections.h"
49//=================================================================
50// This class is a host-independent interface to a serial port
51//=================================================================
52class CeCosSerial {
53    friend CeCosSocket::SSReadResult CeCosSocket::SSRead (CeCosSerial &serial,CeCosSocket &socket,void *pBuf,unsigned int nSize,unsigned int &nRead,bool *pbStop);
54
55public:
56    enum StopBitsType { ONE_STOP_BIT, ONE_POINT_FIVE_STOP_BITS, TWO_STOP_BITS };
57    CeCosSerial(LPCTSTR pszPort,int nBaud); // ctor and open all in one go
58    CeCosSerial();                          // Call Open() later
59    virtual ~CeCosSerial();
60
61    // Open the port with given baud rate.  Result indicates how successful we've been
62    bool Open(LPCTSTR pszPort,int nBaud);
63
64    // Set various line characteristics.  This can be done with the line open or closed.
65    // In each case the "bApplySettingsNow" argument indicates whether to perform the action now,
66    // or to hold off until a call of ApplySettings().
67
68    bool SetBaud(unsigned int nBaud,bool bApplySettingsNow=true);
69    bool SetParity(bool bParityOn,bool bApplySettingsNow=true);
70    bool SetDataBits(int n,bool bApplySettingsNow=true);
71    bool SetStopBits(StopBitsType n,bool bApplySettingsNow=true);
72    bool SetXONXOFFFlowControl(bool b,bool bApplySettingsNow=true);
73    bool SetRTSCTSFlowControl(bool b,bool bApplySettingsNow=true);
74    bool SetDSRDTRFlowControl(bool b,bool bApplySettingsNow=true);
75    bool SetReadTimeOuts(int nTotal,int nBetweenChars,bool bApplySettingsNow=true);  // Times are in mSec
76    bool SetWriteTimeOuts(int nTotal,int nBetweenChars,bool bApplySettingsNow=true); // Times are in mSec
77
78    bool ApplySettings();
79   
80    // Query the settings:
81    int  GetParity() const { return m_bParity; }
82    int  GetDataBits() const { return m_nDataBits; }
83    StopBitsType GetStopBits() const { return m_nStopBits; }
84    bool GetXONXOFFFlowControl() const { return m_bXONXOFFFlowControl; }
85    bool GetRTSCTSFlowControl() const { return m_bRTSCTSFlowControl; }
86    bool GetDSRDTRFlowControl() const { return m_bDSRDTRFlowControl; }
87    unsigned int GetBaud() const { return m_nBaud; }
88    bool GetReadTimeOuts(int &nTotal,int &nBetweenChars) const {nTotal=m_nTotalReadTimeout; nBetweenChars=m_nInterCharReadTimeout; return true; }// mSec
89    bool GetWriteTimeOuts(int &nTotal,int &nBetweenChars) const {nTotal=m_nTotalWriteTimeout; nBetweenChars=m_nInterCharWriteTimeout; return true; }// mSec
90    bool GetBlockingReads() const { return m_bBlockingReads; }
91    bool Close();
92
93    // Clear the serial buffer:
94    bool Flush (void);
95
96    // Use to test success after opening with the ctor:
97    bool Ok() const { return 0!=m_pHandle; }
98
99    // Will read up to the length provided:
100    bool Read (void *pBuf,unsigned int nSize,unsigned int &nRead);
101    bool Write(void *pBuf,unsigned int nSize,unsigned int &nWritten);
102
103    // Use in the event of an error that needs to be cleared before the next operation:
104    bool ClearError();
105
106    // Set blocking/non-blocking
107    bool SetBlockingReads(bool b,bool bApplySettingsNow=true);
108
109    // Return last error
110    int Error() const { return m_nErr; }
111
112    // Return last error, translated to a string
113    String ErrString() const;
114
115protected:
116    // The last error:
117    int m_nErr
118      ;
119    // Remember the error
120    void SaveError() { 
121        #ifdef _WIN32
122        m_nErr=WSAGetLastError();
123        #else // UNIX
124        m_nErr=errno;
125        #endif
126    }
127
128    // Line characteristics:
129    void *m_pHandle;
130    int m_nDataBits;
131    StopBitsType m_nStopBits;
132    bool m_bXONXOFFFlowControl;
133    bool m_bRTSCTSFlowControl;
134    bool m_bDSRDTRFlowControl;
135    bool m_bParity;
136    unsigned int m_nBaud;
137    int m_nTotalReadTimeout,m_nTotalWriteTimeout;
138    int m_nInterCharReadTimeout,m_nInterCharWriteTimeout; 
139    bool m_bBlockingReads;
140    String m_strPort;
141};
142#endif
Note: See TracBrowser for help on using the repository browser.