说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于IrDA在WINDOWS/NT/XP下的编程实现

编辑:说三道四文库 发布时间:2017-11-23 01:29
HTML文档下载 WORD文档下载 PDF文档下载
各位大虾:
   我想实现在WINDOWS/NT/XP下的标准IrDA的编码,但是不知具体怎样实现,请赐教!
和串口没有什么区别,因为所有的东东在驱动的时候都已经做好了。
windows的socket已经包装了红外通信。
你首先用winsock建立一个红外套接字,然后便可用socket的读写函数如send, recv等进行对红外端口的读写操作了。
能不能说得详细一点,最好能提供原程序,谢谢!
The following code shows the steps necessary to build a server that listens for incoming IrCOMM
connections:
#define IAS_SET_ATTRIB_MAX_LEN 32
// buffer for IAS set
BYTE IASSetBuff[sizeof(IAS_SET) - 3 + IAS_SET_ATTRIB_MAX_LEN];
Int IASSetLen = sizeof(IASSetBuff);
PIAS_SET pIASSet = (PIAS_SET) &IASSetBuff;
// for the setsockopt call to enable 9 wire IrCOMM
int Enable9WireMode = 1;
// server sockaddr with IrCOMM name
SOCKADDR_IRDA ServSockAddr = { AF_IRDA, 0, 0, 0, 0, "IrDA:IrCOMM" };
SOCKADDR_IRDA PeerSockAddr;
int sizeofSockAddr;
SOCKET ServSock;
SOCKET NewSock;
if ((ServSock = socket(AF_IRDA, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
// WSAGetLastError
}
// add IrCOMM IAS attributes for 3 wire cooked and 9 wire raw, see IrCOMM spec
memcpy(&pIASSet->irdaClassName[0], "IrDA:IrCOMM", 12);
memcpy(&pIASSet->irdaAttribName[0], "Parameters", 11);
pIASSet->irdaAttribType = IAS_ATTRIB_OCTETSEQ;
pIASSet->irdaAttribute.irdaAttribOctetSeq.Len = 6;
memcpy(&pIASSet->irdaAttribute.irdaAttribOctetSeq.OctetSeq[0],
"\000\001\006\001\001\001", 6);
if (setsockopt(ServSock, SOL_IRLMP, IRLMP_IAS_SET, (const char *) pIASSet, IASSetLen)
== SOCKET_ERROR)
{
// WSAGetLastError
}
// enable 9wire mode before bind()
if (setsockopt(ServSock, SOL_IRLMP, IRLMP_9WIRE_MODE, (const char *) &Enable9WireMode,
sizeof(int)) == SOCKET_ERROR)
{
// WSAGetLastError
}
if (bind(ServSock, (const struct sockaddr *) &ServSockAddr, sizeof(SOCKADDR_IRDA))
== SOCKET_ERROR)
{
// WSAGetLastError
}
// nothing special for IrCOMM from now on...
if (listen(ServSock, SERV_BACKLOG) == SOCKET_ERROR)
{
// WSAGetLastError
}
The following code shows the steps necessary to build a client that connects via 9 Wire IrCOMM:
#define DEVICE_LIST_LEN 5
// discovery buffer
BYTE DevListBuff[sizeof(DEVICELIST) - sizeof(IRDA_DEVICE_INFO) +
(sizeof(IRDA_DEVICE_INFO) * DEVICE_LIST_LEN)];
int DevListLen = sizeof(DevListBuff);
PDEVICELIST pDevList = (PDEVICELIST) &DevListBuff;
int DevNum;
#define IAS_QUERY_ATTRIB_MAX_LEN 32
// buffer for IAS query
BYTE IASQueryBuff[sizeof(IAS_QUERY) - 3 + IAS_QUERY_ATTRIB_MAX_LEN];
Int IASQueryLen = sizeof(IASQueryBuff);
PIAS_QUERY pIASQuery = (PIAS_QUERY) &IASQueryBuff;
// for searching through peers IAS response
BOOL Found = FALSE;
UCHAR *pPI, *pPL, *pPV;
// for the setsockopt call to enbale 9 wire IrCOMM
int Enable9WireMode = 1;
SOCKADDR_IRDA DstAddrIR = { AF_IRDA, 0, 0, 0, 0, "IrDA:IrCOMM" };
if ((pConn->Sock = socket(AF_IRDA, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
// WSAGetLastError
}
// search for the peer device
pDevList->numDevice = 0;
if (getsockopt(pConn->Sock, SOL_IRLMP, IRLMP_ENUMDEVICES, (CHAR *) pDevList, &DevListLen)
== SOCKET_ERROR)
{
// WSAGetLastError
}
// if (pDevList->numDevice == 0)
{
// no devices found, tell the user
}
// assume first device, we should have a common dialog here
memcpy(&DstAddrIR.irdaDeviceID[0], &pDevList->Device[0].irdaDeviceID[0], 4);
// query the peer to check for 9wire IrCOMM support
memcpy(&pIASQuery->irdaDeviceID[0], &pDevList->Device[0].irdaDeviceID[0], 4);
// IrCOMM IAS attributes
memcpy(&pIASQuery->irdaClassName[0], "IrDA:IrCOMM", 12);
memcpy(&pIASQuery->irdaAttribName[0], "Parameters", 11);
if (getsockopt(pConn->Sock, SOL_IRLMP, IRLMP_IAS_QUERY, (char *) pIASQuery,
&IASQueryLen) == SOCKET_ERROR)
{
// WSAGetLastError
}
if (pIASQuery->irdaAttribType != IAS_ATTRIB_OCTETSEQ)
{
// peer's IAS database entry for IrCOMM is bad
// error
}
if (pIASQuery->irdaAttribute.irdaAttribOctetSeq.Len < 3)
{
// peer's IAS database entry for IrCOMM is bad
// error
}
// search for the PI value 0x00 and check 9 wire, see IrCOMM spec.
pPI = pIASQuery->irdaAttribute.irdaAttribOctetSeq.OctetSeq;
pPL = pPI + 1;
pPV = pPI + 2;
while (1)
{
if (*pPI == 0 && (*pPV & 0x04))
{
Found = TRUE;
break;
}
if (pPL + *pPL >= pIASQuery->irdaAttribute.irdaAttribOctetSeq.OctetSeq +
pIASQuery->irdaAttribute.irdaAttribOctetSeq.Len)
{
break;
}
pPI = pPL + *pPL;
pPL = pPI + 1;
pPV = pPI + 2;
}
if (! Found)
{
// peer doesn't support 9 wire mode
// error
}
// enable 9wire mode before connect()
if (setsockopt(ServSock, SOL_IRLMP, IRLMP_9WIRE_MODE, (const char *) &Enable9WireMode,
sizeof(int)) == SOCKET_ERROR)
{
// WSAGetLastError
}
// nothing special for IrCOMM from now on...
if (connect(pConn->Sock, (const struct sockaddr *) &DstAddrIR, sizeof(SOCKADDR_IRDA))
== SOCKET_ERROR)
{
// WSAGetLastError
}
上面两段源码分别是实现服务器端和客户端的过程,用这两段代码再经过加工一下应该就可以实现你想要的功能了。
LBS应用新星、“司机好助手”微车借力移动互联网,志在打造车主的个人移动门户 新一代IDE Light Table开源:让编程工作更简单 图片应用也能高大上,看Cooliris如何玩转无人机 拥抱Spark,机遇无限——Spark Summit 2013精彩回顾 1月10日:改变世界的iPhone七岁了,你是传奇! 同洲电子推出首款手机操作系统960OS 免费授权使用 如何在Windows 8.1的IE11中打开同步选项卡? 25年老对手评价微软:换CEO可行,但是太迟了 【PPT集萃】十位一线专家分享Spark现状与未来(三) 万元奖品等你拿!2014创客118新年大Party! Firefox OS的2013回顾和2014展望 Strom8 CEO:搞好手游开发,合伙人很重要 2013年Q4全球PC出货量同比下滑6.9% 已连续下滑七个季度 一周消息树:2013年十大产品、图书、公司盘点 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势 研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 iis那里有下载 MM,给你分! 提个小问题 把J2SE学好后,再学J2EE会很容易吗? 袁飞进!如何用你的屏幕取词控件取日文假名和俄文字母符号? 用JDBC连接ORACLE数据库出错?各位帮我看看该怎么处理。谢了 水晶报表的SQL字段 在系统盘那里有iis加上asp 聊天室在机子上怎么设置才能进入(2000 系统) 水晶报表字段显示的问题 关于大数据量查询问题,请各位大侠帮忙 asp聊天室在机子上怎么设置才能进入(2000 系统) 客户端怎样绑定服务器 CheckListBox里怎样禁止用鼠标同时选中多项???、 关于邮件乱码! 程序员... 没落的贵族! 打开.doc文档失败!为何??? 是否必须选择ANSI C? 谁有 opengl超级宝典 的电子版 asp.net 中 TextBox 控件出现的奇怪问题,百思不解 怎么样把一个DataTable的 一个 DataRow 复制到一个 相同结构的DataTable中? 200分求 网路精灵XP V2.0.7 简体中文版 的注册机? 有关VB打包下载的问题 200分求 网路精灵XP V2.0.7 简体中文版 的注册机? 200分求 网路精灵XP V2.0.7 简体中文版 的注册机? 200分求 网路精灵XP V2.0.7 简体中文版 的注册机? 请问用VBSCRIPT怎么写这个正则表达式,在线等, JB做打印可以吗? lz32.dll 基于MIDP1.0的CS结构有没有好的解决方案 200分求 网路精灵XP V2.0.7 简体中文版 的注册机? 关于不同包package内的静态变量访问的问题,帮忙解答 求crystal report enterprise8.5的keycode,谢谢 Windows Server 2003 Enterprise Edition 激活问题 好学生通宵学习。遇到问题! 如何得到N个月以前的年、月 大家都来说说从记事起到现在有哪些经典的歌曲曾经红遍大街小巷,我开FTP,大家帮着搜集一下 ““struct”类型重定义”” 是什么意思? 哈稀表如何遍历一边? ie突然打不开ftp网络了 谁能帮我解决这个对我来说的难题!!!(分数不够可以再加) 大家对2008奥运标志有什么看法?? 第一次在LINUX下使用GCC.... ie突然打不开ftp网络了 好久没来了 来看看 最优三角剖析的问题 why squid can not start? 关于字符串的问题,数组和指针有什么区别? 这个日历是怎么搞出来的,比较实用,怎么做一个 一个调用存储过程小问题 来看看 六年级的竞选班长的演讲稿字数在100字左右 f(n)=sin nπ/6,n∈Z,求f(1)+f(2)+f(3)+……+f(2010) 红白细胞都是正常值的十分之一 是什么病? 这题用泰勒公式怎么写? Software Support Engineer是个什么职位负责怎样的工作呢?需要写代码吗 ‘‘唐宋八大家’’他们是古文运动倡导者和实行者,主张文学革新,成为后人小法的典范、他们是谁? engineer high lever是什么软件 the purchase and disposal of subsidiary companies 美国将继续对中日消毒剂进行贸易救济调美政府官员首度为医改网站故障道歉欧盟多瑙河战略年度论坛在罗马尼亚落幕美国得州一男子五地疯狂射杀 致其母在北京“最牛违建”拆除进度缓慢 房主称中央巡视组年底前对军队巡查 在武警设民警枪击米粉店主 传因“不卖奶茶”越南网络活跃人士因散播不利于政府消息美媒称美无人机炸死索马里青年党高官福建莆田仙游县与福州永泰县交界发生4民建提议京籍准入实行积分制 取代户籍大企业大集团和高成长企业培育计划信息网络经济北仑客运站到宁波火车站“未放警示标,导致本车撞”苹果、通用、微软要大出血了洗脚客人发难,打伤了足浴店老板娘和女不会开车没驾照的帮工师傅太阳公公快现身,家里衣架不够用啦《查理周刊》编辑:下期“很可能不会”今年要摘掉黑臭帽子别人家的歌是怎么来的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘