与手机进行红外通信






4.89/5 (81投票s)
学习如何让你的 Pocket PC 与你的手机进行通信。
- 下载 Pocket PC 应用程序的源代码 - 42.8 KB
- 下载 Pocket PC (ARM) 的可执行文件 - 74.5 KB
- 下载 PC 应用程序的源代码 - 42.3 KB
- 下载 PC 的可执行文件 - 125 KB
引言
我的英语不太好,希望大家能理解这篇文章。如果还有疑问,我很乐意解答。如果有人发现错误,请将正确的文本发给我 - 感谢您帮助我提高英语水平 ;-)
为了数据交换,大多数新型手机和 Pocket PC 都配备了红外(IRDA)端口。那么,为什么不利用这种红外连接来沟通这两个设备呢?
这款简单的 Pocket PC 2002 应用程序展示了如何与您的手机进行通信,它将读取您手机的制造商、型号识别信息以及电话簿内容到您的 Pocket PC。
我用我的 HP jornada 565 上的 Pocket PC 应用程序只测试了诺基亚 5210、我的新西门子 S55 和一款非常老的西门子 S25 手机。所以,我希望这款应用程序也能适用于其他手机。
如何与手机通话?
要与您的手机通信,您必须使用一些特殊的命令,称为 AT 命令。您需要通过 Pocket PC 的 IRDA 端口将这些命令发送到手机,手机会给您回应。如果手机支持收到的 AT 命令,它会发送一个有效的响应给您,否则它会发送一个错误响应。
AT 命令具有通用结构,例如,请看下图
<CR> ... 回车符
此命令用于请求手机的制造商识别信息。例如,诺基亚 5210 将会给您以下响应
<CR> ... 回车符
<LF> ... 换行符
如果手机不支持收到的 AT 命令,它将向您发送一个错误响应
<CR> ... 回车符
<LF> ... 换行符
您可以在以下网站找到关于 AT 命令的详细文档
- AT 命令页面
- AT-Kommandos für GSM-Geräte (供德语读者阅读)
- AT Command Set for Nokia GSM Products (at_commands.pdf)
- AT Command Set for Nokia GSM Products (AT-help.pdf)
- 谷歌搜索...
代码
该应用程序是一个简单的基于对话框的 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)。之后,它会尝试读取您手机的所有电话簿条目,并将其显示在对话框的列表框中。
别忘了激活您的手机红外端口!
在测试您的 Pocket PC 和手机之间的通信之前,您必须激活您手机的红外(IRDA)端口。大多数手机都有自己的菜单项来激活红外端口。例如,对于诺基亚手机,您需要选择菜单 -> 红外。激活红外端口后,您将在诺基亚手机显示屏的左上角看到以下符号 ,这表明红外端口已启用。
一些手机,如诺基亚手机,如果在红外连接上没有数据交换,会在几分钟后禁用红外端口。因此,在开始通信之前,请查看您的手机,并在必要时重新激活红外端口。同时也要确保您的 Pocket PC 和手机的红外传感器之间有直接连接,并且两个设备之间没有任何可以阻止通信的障碍物。
Pocket PC 和手机之间的蓝牙连接
发布此文章后,我收到了许多关于如何通过蓝牙连接 Pocket PC 和手机的问题。由于我目前没有蓝牙手机或蓝牙 Pocket PC,我无法亲自测试,但 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 的主页,网址为 http://vermeij.filternet.nl/programmer/rawir.html。在这个网站上,您可以找到关于 Pocket PC 上 RAW 红外通信的许多有用技巧。
如果您对 Pocket PC 和桌面 PC 设备上的红外 Winsock 通信 (IrSock) 感兴趣,请查看我在 Pocket PC Developer Network 上的 IRDA 文章。这篇文章将演示如何轻松地将红外支持集成到您的 Windows 应用程序中。它提供了一个小的服务器/客户端示例,您可以借助它将消息从您的 Pocket PC 应用程序发送到桌面 Windows 应用程序。您可以将此示例作为您自己的应用程序的基础,这些应用程序将提供能力,从您的应用程序中直接与其他设备交换数据。
IrdaMobile 在普通 Windows 操作系统(Windows 2000 或 XP)下
自今年一月我发布这篇文章以来,论坛和邮件中最常被问到的问题之一是如何在普通 Windows 操作系统(如 Windows 2000 或 XP)下实现此示例应用程序。
所以,现在我花时间在普通 Windows 操作系统(如 Windows 2000 或 XP)下实现了本文的示例应用程序。
现在,您可以在本文顶部下载适用于普通 Windows 操作系统的 IrdaMobile 应用程序的可执行文件以及完整的源代码。
要在您的普通 Windows 操作系统(Windows 2000 或 XP)下运行示例应用程序,您只需要一个虚拟 COM 端口驱动程序,例如 IrCOMM2k(Windows 2000/XP 的虚拟红外 COM 端口)。IrCOMM2k 是一个适用于 Windows 2000 和 XP 的驱动程序,它模拟一个串行端口,可用于通过 IrDA 与移动设备交换数据。有关此主题的更多信息,请查看此驱动程序的“技术细节”,网址为 http://www.ircomm2k.de/。
错误和评论
如果您有任何评论或发现任何错误,我很乐意收到并改进代码。
发布历史
-
18.12.2003
为普通 Windows 操作系统(Windows 2000 或 XP)添加了 IrdaMobile 示例。
-
31.10.2003
对
CIrdaPort::FindPortIndex()
函数进行了一些更改。 -
14.09.2003
向文章中添加了“Pocket PC 和手机之间的蓝牙连接”部分(感谢 João Paulo Figueira)。
-
09.09.2003
修正了
CIrdaPort::FindPortIndex()
函数的错误实现(感谢 Ruud en Frida Vermeij)。 -
24.01.2003
从源代码档案中删除了 APS 文件(感谢 Johann Gerell)。
-
22.01.2003
在 CodeProject 中首次发布。