打算尝试一下和手机作同步,在 Windows 下开发,语言显然只能选择 Python 了。首先下载了 fMA 的源代码(它是用 Delphi 写的),找到可能和 Irda 相关的文件,仔细看了看它的代码和注释,然后又从注释里面找到了 MSDN 关于红外编程的链接。
查找 Windows 下开发方法的同时也参考了 MultiSync 中关于红外部分的代码。现在可以确认无论是在 Linux 下还是在 Windows 下,操作红外 IrCOMM 都是通过 socket 完成的,下面展示一下 win32 获取红外设备列表的代码。
-
from socket import *
-
from struct import *
-
-
#imports from WIrCOMMSocket.pas
-
SOL_IRLMP = 0xFF
-
IRLMP_ENUMDEVICES = 0x00000010
-
-
DeviceInfoSize = 29
-
DeviceList = []
-
-
IrdaSocket = socket(AF_IRDA, SOCK_STREAM)
-
IrdaInfo = IrdaSocket.getsockopt(SOL_IRLMP, IRLMP_ENUMDEVICES, 1024)
-
DeviceNum = unpack('i', IrdaInfo[:4])[0]
-
print DeviceNum
-
DeviceListInfo = IrdaInfo[4:]
-
for i in range(0, len(DeviceListInfo), 29):
-
DeviceInfo = DeviceListInfo[i:i+29]
-
DeviceInfo = unpack('i22sccc', DeviceInfo)
-
DeviceList.append(DeviceInfo)
-
-
IrdaSocket.close()
-
-
if len(DeviceList):
-
print "DeviceID :", DeviceList[0][0]
-
print "DeviceName: " + DeviceList[0][1].strip('\x00')
Topic:
技术
最新评论