编辑: xwl西瓜xym 2019-11-18
此主题相关图片 图2 Symbian OS的通讯组件 ETEL是一个电话通讯服务器,用于应用程序访问各种电话硬件和服务,例如GSM手机、模拟调制解调器和传真通讯服务.

这个服务器使用可动态装载的插入式模块--电话通讯服务器模块(TSYs),把硬件特定的信息转化为应用程序可理解的格式. 这个服务器的客户端应用编程接口定义在etel.h头文件中,它主要由RTelServer、RPhone、RLine和RCall类组成. 串行通讯服务器 串行通讯服务器(C32)为它的客户端提供一个串行端口应用编程接口.这个服务器使用通讯服务器插入式模块(CSYs)处理实际的通讯协议.Symbian OS提供多个CSY模块,例如处理RS232和红外线串行通讯.应用程序开发者还可以使用串行协议模块应用编程接口来开发自定义CSY模块,自定义CSY模块定义在cs_port.h头文件中. 串行通讯服务器使用方法都是很相似的,不管是否使用了CSY模块.首先在初始化阶段,客户端加载所需要的驱动程序,打开服务器并且装载CSY模块.在实际的设备已经打开并且配置之后,服务器准备发送并接收数据.最后,需要释放所有的资源. 串行通讯服务器的客户端应用编程接口定义在c32comm.h头文件中,主要由RComm和RCommServ类组成. 下面的代码是一个红外线串行通讯初始化阶段的示例. // Load device drivers TInt err = User::LoadPhysicalDevice( _L("EUART1") );

if ( err != KErrNone && err != KErrAlreadyExists ) User::Leave( err );

err = User::LoadLogicalDevice( _L("ECOMM") );

if ( err != KErrNone && err != KErrAlreadyExists ) User::Leave(err);

// Start serial communications server of type RCommServ User::LeaveIfError( iServer.Connect() );

// Load CSY module for IrComm User::LeaveIfError( iServer.LoadCommModule( _L("IRCOMM") ) );

// Open port of type RComm User::LeaveIfError( iPort.Open( iServer, _L(""IRCOMM::0""),ECommExclusive ) );

? 上面的示例代码可以通过加载ECUART CSY模块来从IRCOMM模式切换到RS232,同时使用COMM:0端口代替IRCOMM:0. RComm::Open中的ECommExclusive枚举防止其他的RComm客户端使用这个端口. 可以使用RComm:Write和RComm::Read方法向端口写数据和从端口读取数据,它们都是使用一个TRequestStatus和一个描述符作为参数. 当传递完成时,生成一个事件作为活动对象,这个事件的TRequestStatus被传送到传递方法,这就使活动对象的RunL被调用.描述符参数通常是一个8位描述符,因此如果被传送的数据是文本的话,这个描述符需要被转换为Unicode. 数据传送方法可能还使用其它的一些参数,指定数据传送的最大长度或者时间等特征. 对于应用程序来说,使用红外线进行通讯是一个很简易的方法,但是支持IrComm的主要原因便于以前的应用程序的转化,使之可以更容易地使用串行端口来进行通讯.和其它IrDA协议相比,IrComm不利的一面是它不提供所有的IrDA服务. 例如,使用IrComm的最大数据传送速度只有9600比特/秒,这显然对于众多传送大量数据的终端游戏来说是不够快的. NOKIA的手机很喜欢使用pop-port口,因为可以通过这个接口进行各种扩展,所以也倍受用户的喜欢,不过有的时候也带来很多不变,为了让大家对pop-port接口有所了解.我们诺基亚手机论坛的网友为大家分享了"诺基亚pop-port的一些技巧".欢迎大家来专业的诺基亚手机交流区来进行讨论交流.

一、pop-port各触点作用: NOKIA Pop-Port接囗总共有14个接触点, 有些机友会误解接触点只有13个,因迟算了分开了的1个,那也是Pop-Port 14个接触点的第1个,而我们经常用到的只有

2、

3、

5、

6、

7、

8、

9、

10、

11、

12、

13、14. 下面为各个触点的原理: 1? V In 2? Gnd 地线 3? ACI 中断线-耳机上的挂机键 4? V Out? 5? USB PwrDet 接USB 电源 6? F-Bus Rx USB 接收信号 7? F-Bus Tx USB 发射信号 8? Gnd USB 地线 9? XMic N 麦克风-?

10 XMic P 麦克风+

11 HS Ear L N 耳机 左声道-

12 HS Ear L P 耳机 左声道+

13 HS Ear R N 耳机 右声道-

14 HS Ear R P 耳机 右声道+

二、pop-port的工作原理: 凡是用Pop-Port接囗的NOKIA手机,只要把2和3相连(3和11,3和13也可以,因11 13是耳机的地线,是和2是相通的)手机就会认别为接上耳机. 而各个触点的作用相对固定,所以在各种设备上可以通过触点进行简单的设计连接设备的线路.

三、利用pop-port可以实现那些事情:

1、自制耳机转接线: 现在动辄几十元的耳机转接线的确让我们很是头痛,那么能不能利用现有的东西来制作转接器.找一个pop-port插口和一个耳机母头,就可以连接成一个转接器.

2、自制USB连接线 根据

5、

6、

7、8的功能及顺序,用pop-port连接上一个USB头,就自治了一条USB连接线.

3、自制调频收音机 现在购买一个小型收音机的价格并不贵,但是如果购买NOKIA的HS-2R收音耳机可不便宜. 实际上你用一个小的收音设备(可以不带液晶显示屏),利用pop-port供电,根据耳机的连接特点就可以制作一款收音耳机!

4、车载系统 NOKIA的车载系统也价格不菲,几百元的投入也不一定很完美. 根据pop-port的连接情况,加上一个手机座,制作一个个性的车载系统也可以. 总之只有你想不到,没有你做不到,NOKIA可以做的,我们也可以DIY!但是你要有足够的电子知识. The RComm API can be used to transfer data over USB serial connection. On S60 3rd Edition, loading of physical (PDD) and logical (LDD) device drivers is not required. Only the CSY module ECACM should be loaded. The port name available for USB communication is usually "ACM::1". Some devices may support multiple ACM ports. The first port (ACM::0) is reserved for fax/modem process, but ACM::1 and onwards can be used in other applications. A simplified example for initializing the serial port: _LIT(CSYMOD, "ECACM");

_LIT(KACMPort1, "ACM::1");

// RComm is a client to the RCommServ Comms server // Start this service before any connections are made. TInt ret = StartC32();

if ( ret != KErrNone && ret != KErrAlreadyExists ) { User::Leave ( ret );

} // Connect to CommServer RCommServ server;

User::LeaveIfError( server.Connect() );

// Load CSY Module User::LeaveIfError( server.LoadCommModule( CSYMOD ) );

TBuf16 portName;

portName.Copy( KACMPort1 );

// Open the comm. port RComm commPort;

User::LeaveIfError( commPort.Open( server, portName, ECommShared ) );

// Verify capabilities of the port and configure it TCommCaps portCaps;

commPort.Caps( portCaps );

if (((portCaps().iRate & KCapsBps115200) == 0) || ((portCaps().iDataBits & KCapsData8) == 0) || ((portCaps().iStopBits & KCapsStop1) == 0) || ((portCaps().iParity & KCapsParityNone) == 0)) { User::Leave( KErrNotSupported );

} TCommConfig portCfg;

commPort.Config( portCfg );

portCfg().iRate = EBps115200;

portCfg().iParity = EParityNone;

portCfg().iDataBits = EData8;

portCfg().iStopBits = EStop1;

portCfg().iHandshake = 0;

User::LeaveIfError( commPort.SetConfig( portCfg ) );

After this you can read from and write to the port. An application listening to the port should be running on the host (PC).

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题