SHARE
Facebook X Pinterest WhatsApp

A communication class for serial port

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 […]

Written By
thumbnail
CodeGuru Staff
CodeGuru Staff
Feb 8, 2000
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

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();

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

Download sample project – 66K

Recommended for you...

Configuring Security Rules In Azure Firewall
Tapas Pal
May 7, 2022
Implementing Circuit Breaker Using Polly
Tapas Pal
Jan 26, 2022
Cloud Computing Types Overview
Zaher Talab
Oct 7, 2021
“Some Day”: 1984: An Editorial on the Future of Computers
Bradley L. Jones
Aug 24, 2021
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2025 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.