5,427,813 members and growing! (17,173 online)
Email Password   helpLost your password?
General Reading » Hardware & System » Hardware programming     Intermediate

Simple Serial Communication

By Idael Cardoso

A C++ class to allow simple serial communication in Win32 platforms
C++/CLI, VC6, VC7, VC7.1, eVC 4.0, C++, eVC 3.0, eVC, .NET, Mobile, Windows, Win Mobile, CE 2.11, CE 3.0, NT4, Win2K, WinXP, Win2003, MFC, Visual Studio, VS6, Dev

Posted: 24 Jun 2003
Updated: 24 Jun 2003
Views: 96,093
Bookmarked: 35 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
11 votes for this Article.
Popularity: 3.50 Rating: 3.36 out of 5
2 votes, 18.2%
1
0 votes, 0.0%
2
3 votes, 27.3%
3
4 votes, 36.4%
4
2 votes, 18.2%
5

Introduction

This is a proposal for a C++ class to handle simple serial communications, which means send and receive some bytes, and control the state of serial communication signals. In many cases, what one needs is to be able to communicate by a serial port to certain devices or electronic circuits. As simplicity is the main goal in this class, it is developed for synchronous read and write operation instead of overlapped ones and also assuming that there is no hardware (or software) flow control so the communications signals can be freely controlled. If you need an event driven serial communication (overlapped read/write, signals changes controlled by even, etc.) you can look in this site for the article Serial communication for Win32 with modem support By thierrydollar

Using the code

To use the class CSerialPort you must call CSerialPort::Open then does read or write operation, set or test the state of communications signals and closes the port once finished (not mandatory because the destructor does it). The read and write methods make no assumption about type and format of data send or received, you must take into account if you are handling a character or binary format, if there is Unicode, mbcs, etc. The open function if defined as follows:

virtual BOOL Open(LPCTSTR PortName, DWORD BaudRate, BYTE ByteSize, 
BYTE Parity, BYTE StopBits, DWORD DesiredAccess = GENERIC_READ|GENERIC_WRITE);

There is no assumption about communication parameters because they are specific to each serial communication and must be known in order to establish a successful communication. Even, if the most frequent name of serial ports are “COM1:” to “COM4:”, there can be more than 4 serial ports in a machine and the serial driver is not forced to follow the “COMxx” name convention so a serial port can have any name in Win32 platforms. It would be a good idea to have a static function to obtain the names of installed serial ports but, as far as I know, there is not a documented way to do that. There is a simple way to know about installed ports: assuming that ports names follow the “COMxx:” convention they try to open all possible ports and if there is an error and GetLastError() returns ERROR_FILE_NOT_FOUND then the port isn’t installed. There is another way to know installed ports names and it is searching in registry but it is undocumented and platform depend.

With article there is a simple sample of using the mentioned class, the example is a program that reads bar codes from a serial bar code reader. Normally bar code readers send the read bar code ended by carriage return and line feed characters (this can be configured and even could be different for specific manufacturer) and the code is an ASCII string. There is a class (CBarCodeReader ) derived from CSerialPort that encapsulate the described protocol and its read method returns the read bar code (if any) directly in an string. There is not much more to say, the rest is in the code and it is simple (at least should be :-) )

Remarks

Remember that this is a simple instead of complete way of using serial devices. The proposed code can be used in Win32 Platforms and Windows CE versions. Pocket PC developers (I didn’t try others Windows CE versions) must take into account that manufacturers can have specific implementations of serial APIs (as other APIs). Even if it is true that such implementations must agree to Pocket PC implementation, I have found small differences from one device to another. For instance: in a Dell Axim Pocket PC device the signal CD must be externally supplied (the voltage present) in order to read or do any operation with serial port, there is no function errors if you try without that signal on, but you won’t obtain any result. I have tried the same in Compaq iPAQs and it is possible to read without any specific external signal on (as should be).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Idael Cardoso



Occupation: Web Developer
Location: France France

Other popular Hardware & System articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 18 of 18 (Total in Forum: 18) (Refresh)FirstPrevNext
Subject  Author Date 
Generalcan I connect serial port by 2 pcmemberjhonutp19:41 5 Jun '08  
Questioncontrolling a toy carmemberfikree11:46 20 Mar '08  
GeneralNeed help communicating with a Series F4s/D controllermemberLoadSFSU16:35 28 Sep '06  
QuestionXON/XOFF flow control issuememberChitragar20:36 1 Nov '05  
GeneralSimple Serial CommunicationmemberWar War0:30 16 Sep '04  
GeneralRe: Simple Serial CommunicationmemberIdael Cardoso9:32 16 Sep '04  
GeneralCan make communication hang up in one casememberSimon6667:26 15 Sep '04  
GeneralRe: Can make communication hang up in one casememberSimon6668:59 16 Sep '04  
Generaldialog based application interactionmembermoto muzphee0:42 6 Jun '04  
GeneralRe: dialog based application interactionmemberal_yakout2:42 6 Jun '04  
GeneralRe: dialog based application interactionmemberIdael Cardoso10:24 6 Jun '04  
GeneralRe: dialog based application interactionsussSimon6667:07 7 Sep '04  
GeneralRe: dialog based application interactionmemberIdael Cardoso7:45 7 Sep '04  
GeneralRe: dialog based application interactionmemberSimon6668:00 7 Sep '04  
GeneralRe: dialog based application interactionmemberIdael Cardoso6:02 8 Sep '04  
GeneralHow to get serial ports from registrymemberconrad Braam7:44 25 Sep '03  
GeneralRe: Cool article!memberIdael Cardoso0:28 26 Jun '03  
GeneralYeah, you are rightmemberwheregone15:30 25 Jun '03  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 24 Jun 2003
Editor: Nishant Sivakumar
Copyright 2003 by Idael Cardoso
Everything else Copyright © CodeProject, 1999-2008
Web10 | Advertise on the Code Project