C++实现用掌上电脑遥控电视

C++实现用掌上电脑遥控电视,第1张

C++实现用掌上电脑遥控电视,第2张

1 .简介

您是否想过通过PDA上的红外端口来控制电视、高保真音响或其他视频?本文将介绍如何使用PDA中的IR端口来编程和控制电视。

2.背景

我最近几天丢失了我的旧索尼电视的遥控器。没毛病,因为我反而买了新的遥控器。但是,当电视失去设定色彩时,我就遇到了问题,因为它只能显示黑白,而且新的遥控器没有色彩调节按钮。我决定在我的旧Jornada 525 PDA上写一个程序,使用红外端口向电视发送正确的代码。

有三种主要协议可用于向设备发送IR代码。索尼使用“脉冲编码”方法,需要发送由空网格分隔的“1”位和“0”位的数据流,包含报头位。这些位被调制成40KHz载波信号。其中头长2200 μs,' 1 '位110 μs,' 0 '位550 μs空信元550μs静默。索尼设备大多使用12位数据,分为6位地址(设备类型)和6位命令。所以数据看起来是这样的:hxxxxxxyyyyyy,其中H是第一位,xxxxxx是6位命令(msb优先),yyyyyy是6位地址。这个我就不细说了,因为网上有很多资源描述这个协议,并列出了不同设备的代码。一些新的索尼设备使用19位代码,我相信其他制造商也使用与我描述的相同的格式。也可以为使用“空间编码”或“移位编码”协议的设备编写类似的类。

我用嵌入式C++写了一个类CirPulse,封装了从一台运行Windows CE 3.0的Jornada 525 PC上控制索尼及其配套设备的功能。估计可以配合其他配套设备和操作系统使用,但是需要你去实验!

3.实施过程分析。

这个CIrPulse类公开了几个函数,使得发送IR代码变得尽可能容易。在声明CIrPulse类时,应该调用FindIrPort()一次,它返回一个描述IrDA端口端口号的UINT,这个UINT是通过搜索注册表得到的。该端口号用于以后的调用,以打开IrDA端口进行串行通信。


uint cir pulse::findirport()
{
/查询注册表中的IR端口号
HKEY hKey = NULL;
if(RegOpenKeyEx(HKEY _ LOCAL _ MACHINE,_T("Comm\IrDA "),0,0,& HKEY)= = ERROR _ SUCCESS)
{
DWORD dwType = 0;
DWORD dw data = 0;
DWORD dwSize = sizeof(dw data);
if (RegQueryValueEx(hKey,_T("Port "),NULL,&dwType,(LPBYTE) &dwData,& dwSize)= = ERROR _ SUCCESS)
{
if(dwType = = REG _ DWORD & & dwSize = = sizeof(dw data))
{
RegCloseKey(hKey);
返回(UINT)dw data;
}
}
RegCloseKey(hKey);
}
返回0;
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++实现用掌上电脑遥控电视

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情