虽然作者的英语水平有限,但希望读者能够理解本文的内容。如果有任何疑问,作者愿意回答。如果读者发现错误,请帮助作者纠正,以提高其英语水平。
大多数新型手机和掌上电脑都配备了红外数据传输端口(IRDA)。为什么不利用这个红外连接来实现这两种设备之间的通信呢?
本文介绍的掌上电脑2002应用程序展示了如何与手机通信,它可以读取手机的制造商信息、型号识别以及通讯录,并将其传输到掌上电脑中。
作者仅在HP jornada 565掌上电脑上测试了这个应用程序,使用的是Nokia 5210、Siemens S55和Siemens S25手机。作者希望这个应用程序也能与其他手机兼容。
要与手机通信,需要使用一些特殊的命令,称为AT命令。这些命令需要通过掌上电脑的IRDA端口发送到手机上,手机会对此做出响应。如果手机支持接收到的AT命令,它会发送一个有效的响应;否则,它会发送一个错误响应。
AT命令具有通用的结构,例如:
AT+CGMI
这个命令用于请求手机制造商的识别。例如,Nokia 5210会发送以下响应:
Nokia
如果手机不支持接收到的AT命令,它会发送一个错误响应。
可以在以下网站找到关于AT命令的详细文档:
该应用程序是一个基于对话框的MFC应用程序,包含一些简单的API调用。
为了实现红外通信,作者编写了一个名为CIrdaPort的简单类。这个类支持打开和关闭IRDA端口的一些功能,以及读写操作的一些功能。
要打开IRDA端口,请使用以下函数:
BOOL CIrdaPort::Open(UINT uiPort);
这个函数将打开IRDA端口,uiPort参数定义了IRDA端口的索引(1代表COM1,2代表COM2,3代表COM3)。返回值TRUE表示成功,FALSE表示失败。
要查看注册表中IRDA端口的索引,请使用以下函数:
UINT CIrdaPort::FindPortIndex();
如果函数在注册表中找到了IRDA端口的索引,它将返回这个索引;否则,返回值是0。
如果想向IRDA端口写入一些字符,可以使用以下函数:
BOOL CIrdaPort::Send(const CString& strSend) const;
这个函数将字符串strSend发送到手机。返回值FALSE表示失败,TRUE表示成功。
要等待响应,可以使用以下函数:
BOOL CIrdaPort::WaitForResponse(CString& strResponse, DWORD dwTimeout) const;
这个函数等待手机的响应strResponse,或者如果超时dwTimeout发生,则返回FALSE。
完成所有读写操作后,必须使用以下函数关闭端口:
void CIrdaPort::Close();
这个函数将关闭IRDA端口。
当点击对话框上的“读取...”按钮时,应用程序会尝试连接到手机并读取一些关于手机的信息,如制造商和型号识别(例如:Nokia Mobile Phones, Nokia 5210或SIEMENS, S55)。之后,它尝试读取手机的所有通讯录条目,并在对话框的列表框中显示。
不要忘记激活手机的红外端口!
在测试掌上电脑和手机之间的通信之前,必须激活手机的红外(IRDA)端口。大多数手机都有自己的菜单项来激活红外端口。例如,对于Nokia手机,需要选择菜单 -> 红外。激活红外端口后,会在Nokia手机的显示屏左上角看到以下符号:
[红外端口已激活]
一些手机,如Nokia手机,在红外连接上几分钟没有数据交换后会禁用红外端口。因此,在开始通信之前,请检查手机并重新激活红外端口(如果必要的话)。同时,请确保掌上电脑的红外传感器和手机之间有直接连接,并且两者之间没有任何可以阻挡通信的物体。
在作者发布本文后,收到很多关于如何通过蓝牙将掌上电脑与手机连接的问题。作者目前没有蓝牙手机或蓝牙掌上电脑,但是João Paulo Figueira尝试了并找到了答案:
将通信端口的名称从COMx:更改为BTC1:,并注释掉以下行:
VERIFY(SetupComm(m_hPort, 2048, 2048));
还可以将端口速度提高到115200。
João Paulo Figueira还找到了包含端口名称的注册表键,但他不知道这是否是标准的。所以,如果有这方面的信息,请发送给作者或João Paulo Figueira。
他找到的包含端口名称的注册表键是:
HKEY_LOCAL_MACHINE\ExtModems\BtDialupModem
如果在示例应用程序中遇到问题,或者需要更多关于Pocket PC上的RAW红外通信的信息,请访问Ruud en Frida Vermeij的主页:
在这个网站上,可以找到许多关于Pocket PC上的RAW红外通信的有用技巧和窍门。
如果对Pocket PC和桌面PC设备上的红外Winsock通信(IrSock)感兴趣,请访问作者在Pocket PC Developer Network上的IRDA文章。这篇文章将展示如何简单地将红外支持实现到Windows应用程序中。它提供了一个小型的服务器/客户端示例,帮助将消息从Pocket PC应用程序发送到桌面Windows应用程序。可以使用这个示例作为自己应用程序的基础,这将使应用程序能够直接从应用程序中交换不同设备之间的数据。
自从作者在今年1月发布本文以来,论坛和邮件中最常见的问题之一是如何在普通Windows操作系统(如Windows 2000或XP)下实现示例应用程序。
所以,作者现在花时间在普通Windows操作系统(如Windows 2000或XP)下实现了本文的示例应用程序。
现在,可以在本文顶部下载IrdaMobile应用程序的工作可执行文件和整个源代码。
在普通Windows操作系统(Windows 2000或XP)下运行示例应用程序,只需要一个虚拟COM端口驱动程序,如IrCOMM2k(Windows 2000/XP的虚拟红外COM端口)。