How
to Configure the Speed and Data Format: Tutorial
This tutorial shows the basic steps to perform any serial port
configuration through the RComm API.
- Load the CSY and
open a port.
- Get the capabilities
of the port by calling RComm::Caps()
- The capabilities
of the port are in the TCommCaps structure. For example, TCommCapsV01.iStopBits specifies
the number of stop bits the port can manage.
Note: Port capabilities are never exclusive. A port that can manage
a speed of 50 bps may also be able to manage faster speeds as well. Most fields
in TCommsCaps are bit fields which bitmasks must be used
to determine all the capabilities. An example bitmask for the TCommCapsV01.iRate field
is KCapsBps19200.
These same fields in the configuration class TCommConfig are
enumerations. For example, TCommCapsV01.iRate is a TUint since
it is a bitfield. TCommConfigV01.iRate is an enumeration
of type TBps.
Create an object of type TCommConfigV01.
Call RComm::Config() with the aConfig parameter
set to the TCommConfigV01 object to get the port configuration.
Set the fields that must be changed in the TCommConfigV01 object.
For example, set the iSIREnable flag to enable Infrared.
Call RComm::Config() with the TCommConfigV01 object
as the aConfig parameter.
The port is now configured.
Tip: In cases where the application is written for a specific
device, the application may skip the capability check since the capabilities
are known at the time of manufacture.
Example
The following code uses Caps() to
find out if its desired port configuration of 19200 bps and 8 data bits with
no parity and one stop bit is possible:
TCommCaps ourCapabilities;
commPort.Caps (ourCapabilities);
if (((ourCapabilities ().iRate & KCapsBps19200) == 0)||
((ourCapabilities ().iDataBits & KCapsData8) == 0)||
((ourCapabilities ().iStopBits & KCapsStop1) == 0)||
((ourCapabilities ().iParity & KCapsParityNone) == 0))
User::Leave (KErrNotSupported) ;
The following code configures the speed settings for a port.
TCommConfig portSettings;
commPort.Config (portSettings);
portSettings ().iRate = EBps19200;
portSettings ().iParity = EParityNone;
portSettings ().iDataBits = EData8;
portSettings ().iStopBits = EStop1;
r = commPort.SetConfig (portSettings);
User::LeaveIfError (r);