Rating:
Remon Spekreijse (view profile) February 8, 2000 |
In the newgroups there are many questions about serial communication so I thought: make it public! It's freeware. The only thing I expect from users is that they drop me a mail. All modifications on this class are free, but please let me know if it solves a bug or adds some good features. Also comment your code and don't let me solve your bugs!
Target:
The class is not intended to use as a baseclass for modemcommunication but more for driving hardware or reading hardware via the serial port.From the classes included there is only one class important: CSerialPort. The other classes are only there to illustrate the use of this class.
Usage:
In your software you only need to create an instance of the CSerialPort class and call InitPort.// the owner (CWnd) of the port (receives message) BOOL CSerialPort::InitPort(CWnd* pPortOwner, UINT portnr, // portnumber (1..4) UINT baud, // baudrate char parity, // parity UINT databits, // databits UINT stopbits, // stopbits DWORD dwCommEvents, // EV_RXCHAR, EV_CTS etc UINT writebuffersize) // size of the writebuffer
The dwCommEvents flag can be used for communication with the owner of this class.
The flags can be one of the following (or combined with |):
- WM_COMM_BREAK_DETECTED A break was detected on input.
- WM_COMM_CTS_DETECTED The CTS (clear-to-send) signal changed state.
- WM_COMM_DSR_DETECTED The DSR (data-set-ready) signal changed state.
- WM_COMM_ERR_DETECTED A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
- WM_COMM_RING_DETECTED A ring indicator was detected.
- WM_COMM_RLSD_DETECTED The RLSD (receive-line-signal-detect) signal changed state.
- WM_COMM_RXCHAR A character was received and placed in the input buffer.
- WM_COMM_RXFLAG_DETECTED The event character was received and placed in the input buffer.
Accept the first parameter all parameters are optional. The standard values are:
portnr = 1 baud = 19200 parity = 'N' databits = 8, stopsbits = 1, dwCommEvents = EV_RXCHAR | EV_CTS, nBufferSize = 512);
So the follwing code is enough to make communication possible:
in the header of the owner:
CSerialPort m_Serial;
in the code:
m_Serial.InitPort(this);
m_Serial.StartMonitoring();
m_Serial.InitPort(this); m_Serial.StartMonitoring();
Then the tread that watches the port is started and all events on the port are send to the owner. The receive a character the owner needs a messageentry in the messagemap:
BEGIN_MESSAGE_MAP(CCommtestDlg, CDialog)
//{{AFX_MSG_MAP(CCommtestDlg)
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
ON_MESSAGE(WM_COMM_CTS_DETECTED, OnCTSDetected)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
and they must be handled: LONG CCommtestDlg::OnCommunication(WPARAM ch, LPARAM port) { // do something with the received character return 0; }
This is it for reading. Writing can be done with WriteChar or WriteToPort
Downloads : http://www.codeguru.com/
'WORK > Sotfware' 카테고리의 다른 글
클래스/Class (0) | 2008.06.03 |
---|---|
다중 쓰레드와 C++ (0) | 2008.06.02 |
AfxBeginThread 사용하기 (0) | 2008.06.02 |
Edit Clear (0) | 2008.06.02 |
RS232 통신 (0) | 2008.06.02 |
댓글