图3 ttyBTmgr的消息通信机制
(1)ttyBT设备发送消息 当一个ttyBT设备被打开、关闭、写数据等的时候,它要向蓝牙协议模块发送消息。在笔者的设计中,ttyBT设备不是和蓝牙协议模块直接通信的,而是通过ttyBTmgr设备和蓝牙协议模块通信的。在ttyBT设备的数据结构中,维护了一个消息链表,所有的ttyBT设备要向协议模块发送的消息都要先插入到这个消息链表中 。
(2)ttyBT设备接收消息 当蓝牙协议模块给ttyBTmgr设备发送了消息,则ttyBTmgr设备需要将这些消息转发给ttyBT设备。由于ttyBTmgr设备和ttyBT设备的驱动程序都是编译成内核模块,运行在内核空间,它们可以共享那些全局变量,这样ttyBTmgr直接修改 ttyBT的全局变量就实现了消息的转发。
(3)蓝牙协议模块发送消息 如果蓝牙协议模块要向虚拟串口设备发消息,它使用ioctl( )系统调用发送消息。这个ioctl命令是自定义的,其类型是W32IF_FROM_RFCOMM,在这里面有三种消息:DRV2UI_OPEN_RESULT_IND 指示串口设备打开结果
DRV2UI_SEND_DATA_COMPLETE 指示数据发送完毕
DRV2UI_REMOTE_DATA_IND 指示收到远程数据
(4)蓝牙协议模块接收消息 在蓝牙协议模块中,专门有一个线程来接收来自驱动程序的消息。前面讲过,这些消息不是直接来自ttyBT设备而是来自ttyBTmgr。协议模块用select( )系统调用来等待消息,如果当前消息队列里有消息,或一旦有消息被添加到消息队列,则select( )系统调用会成功返回。然后协议模块调用read( )系统调用将消息从ttyBTmgr设备中读出,然后根据消息类型进行相应的处理。
5. 测试实验
为了验证本文的蓝牙驱动层框架是有效的,鲁棒的,笔者搭建了嵌入式蓝牙网关的测试系统,由笔者研发出的嵌入式蓝牙网关和蓝牙数据终端组成。蓝牙数据终端是由PC机、USB蓝牙适配器、BlueSoleil组成的蓝牙PC。依据本文提出的蓝牙驱动层框架所编写的嵌入式蓝牙网关端的蓝牙驱动程序,实现了蓝牙硬件模块和蓝牙主机(Au1000硬件平台)之间HCI传送功能,使该嵌入式蓝牙网关实现了局域网接入访问服务。试验结果表明,蓝牙PC能成功连接到嵌入式蓝牙网关,并能搜索到嵌入式蓝牙网关提供的蓝牙网络接入服务,从而使蓝牙PC能通过该嵌入式蓝牙网关访问Internet和局域网。
6.结束语
本文针对基于MIZI-linux操作系统的嵌入式蓝牙网关中蓝牙驱动层框架设计给予详细阐述,并描述了驱动层框架的函数实现方法,同时,对以往tty驱动模型提出了相应的改进措施,达到了便于管理蓝牙虚拟串口设备以及与蓝牙协议模块进行交互的目的。实验证明,基于上述技术所研制的嵌入式蓝牙网关是有效的,鲁棒的。
7.参考文献
[1] 李远伟,姜雪辉等.应用蓝牙技术组建家庭无线局域网[J].中国科技信息, 2006-05 :109.
[2] 冯庆胜,李红等.基于蓝牙技术组建无线家庭网络[J]. 微计算机信息 , 2006-08 :59.
[3] 袁宇恒,叶芝慧等.基于蓝牙技术的家庭网络控制子网设计与研制[J]. 东大学报 , 2006-01 .
[4] NicolasRouhana,Eric Horlait.Bluetooth Web Internet Gateway[J]. Proceedings of Seventh International Symposium on Computers and Communications, July 2002:679-684.
[5] 马建仓,罗亚军等.蓝牙核心技术及应用[M].北京:科学出版社,2003:99-103.
[6] David Johnson.Hardware and Software Implications of Creating Bluetooth Scatternet Devices[J].AFRICON Conference in Africa,Volume 1,2004:211- 215.
[7] 郑灵翔.嵌入式系统设计与应用开发[M].北京:北京航空航天大学出版社,2006:78-82.
[8] Jonatban Corbet, Alessandro Rubini.Linux Device Drivers[M].南京:东南大学出版社,2005:538-566.
[9] David Kammert等著,李静等译.蓝牙应用开发指南.北京:科学出版社,2003:130-159.
[10] Robert Love.Linux Kernel Development[M].2nd Edition.Novell Press,2005.
基金编号:江苏省高校自然科学计划项目 06KJD520037
上一篇:嵌入式单片机PPP协议的应用