串行通信是一种用于两台设备间(典型情况下是距离较近)传输数据的低级别点对点技术。Series60支持红外线和蓝牙上的串行通信。Series60实现的中心是串行通信服务器(Serial Communication Server,又称Comms服务器或C32)。它使用Symbian OS客户端/服务器框架,提供对串行硬件的访问,并且是通用的和共享的。通用是指红外线和蓝牙串行通信使用相同的API,共享是指多个客户端线程可以安全地并发使用同一个串行端口。
Series60中所有的串行通信都使用下列基本步骤实现:
1.装载串行设备驱动器
2.启动Comms服务器
3.连接到Comms服务器
4.装载一个comms模块(又称CSY: “Comms SYstem”)----Comms服务器的插件,它将决定使用哪种类型的串行端口(红外线or蓝牙)
5.打开一个串行端口
6.配置此串行端口
7.从端口读写数据
8.最后关闭端口
通信过程中会涉及到几个重要的类,下面简单介绍之:
1.RCommServ
串行通信服务器会话类。它描述了同Comms服务器的会话。提供了连接到服务器函数、装载/卸载不同comms模块函数、查询有效端口名字和数量函数等。
同comms服务器间的会话是不可共享的。此类不能被继承。继承自RSessionBase。
Members
Defined in RCommServ:
Connect(), CreateThreadInCommProc(), GetPortInfo(), LoadCommModule(), NumPorts(), RCommServ(), UnloadCommModule(), Version(), __DbgCheckHeap(), __DbgFailNext(), __DbgMarkEnd(), __DbgMarkHeap(), __DbgSetTraceMask()
Inherited from RHandleBase:
Attributes(), Close(), Duplicate(), FullName(), Handle(), HandleInfo(), Name(), SetHandle(), SetHandleNC(), iHandle
Inherited from RSessionBase:
CreateSession(), EAutoAttach, EExplicitAttach, Open(), Send(), SendReceive(), SetReturnedHandle(), ShareAuto(), ShareProtected(), TAttachMode
2.RComm
继承自RSubSessionBase,描述了一个子会话,使用某一个端口同C32服务器通信。提供的函数均通过操作端口来实现通信,包括打开、关闭、读写、端口配置和性能检测等。一旦使用了某端口来通信,就不能再改变此端口。
下面是串行通信步骤的详解:
1.装载串行设备驱动器
有两个部分需要装载:一个物理驱动器(直接与硬件交互)和一个逻辑驱动器(提供物理驱动器上的API)。它们的名字是固定的,在这里属于全局性定义。注意,用于模拟器生成(WINS)的物理设备驱动器和用于目标生成的不同。
// Physical device driver names
#if defined (__WINS__)
_LIT (KPddName, "ECDRV");
#else
_LIT (KPddName, "EUART1");
#endif
// Logical device driver names
_LIT (KLddName, "ECOMM");