|
||
There are a number of distinct steps which it is necessary to take before using a serial port. While the first three of these steps will usually have been taken before any communication software loads up, they are all listed here for completeness to avoid any appearance of complexity in the example code.
Load the physical device driver, which interacts directly with the hardware at the lowest level.
Load the logical device driver, which provides the comms server
with a consistent interface to the hardware. You should note that both these
drivers have automatic .PDD
and .LDD
file extensions
added by their respective loaders, which automatically search the
/System/Libs
directories on all drives.
Since RComm
is to be a client to the
RCommServ
comms server, start this service before any attempt is
made to connect to it. Note that it is only after the device drivers are both
in place that it makes sense to start the comms server.
Connect the RComm
client to the server. This, and
both the following steps, must usually be taken by all software which
instantiates an RComm
object.
Ask the server to use a specific comms module by name. These
.CSY
files are protocol modules that let the server know how it
should handle the port. For instance, sample terminal code uses a standard
RS232 module called ECUART
, while
infra-red code uses a completely different IrDA
module called IrCOMM
.
Finally, open the comms port by name using
RComm:Open()
. You must specify the name of the port, since there
is no reason why a machine with suitable hardware can’t have more than
one serial port open at a time.
#define PDD_NAME _L("EUART1")
#define LDD_NAME _L("ECOMM")
User::LoadPhysicalDevice (PDD_NAME); // step 1
User::LoadLogicalDevice (LDD_NAME); // step 2
StartC32 (); // step 3
RCommServ server;
server.Connect (); // step 4
server.LoadCommModule (_L ("ECUART")); // step 5
RComm commPort;
commPort.Open (server, _L ("COMM::0"), ECommExclusive); // step 6
While the error checking is omitted from this extract as usual,
even production code can safely ignore KErrAlreadyExists
errors on
loading any of the three driver modules.