Windows CE中实现蓝牙串口驱动程序

Windows CE中实现蓝牙串口驱动程序


[日期:2006-10-19]

来源:互联网  作者:佚名

[字体:大 中 小]

    Windows CE作为一种典型的嵌入式操作系统,通过将蓝牙应用移植到Widows CE中,对于如pSOS+、Nucleus等其它嵌入式系统,具有典型意义。由于OBEX上的文件传输应用建立在RFCOMM实现的蓝牙仿真串口上,本文介绍OBEX文件传输的蓝牙虚拟串口驱动程序的实现。
  
  1 Windows CE设备驱动程序概述
  
  Windows CE支持广泛的基于各种CE平台的设备驱动程序。目前,它提供了四种设备模型,其中两种是专用于Windows CE的模型,另外两种外部模型来自其它操作系统。基于Windows CE的两种模型是本机的设备驱动程序和流接口驱动程序。两种外部模型用于通用串行总线(USB)和网络驱动器接口标准(NDIS)的驱动程序。
  
  由于蓝牙协议是在无线技术下的仿真串口,蓝牙中OBEX的许多应用正是基于蓝牙仿真串口。而流接口驱动程序通过一组流接口函数使得应用程序可以通过文件系统中的特殊文件而与设备接口,因此蓝牙仿真串口的功能性更适合流接口驱动程序的结构。
   
  
  2 Windows CE下蓝牙串口驱动程序的实现
  
  虽然蓝牙设备驱动程序的实现采用流接口驱动程序设计,但由于两种驱动程序的基本结构与原理相似,所以下文从本机设备驱动程序结构开始,可以更清楚地认识蓝牙设备驱动程序的实现原理。
  
  2.1 本机设备驱动程序结构
  
  Windows CE中包含的样本设备驱动程序分为两种类型:单片驱动程序(Monolithic device driver)和分层的驱动程序(Layered Devicedriver)。单片驱动程序基于单个码片,该码片直接把硬件设备的功能性通过设备驱动程序接口传递给操作系统。与单片驱动程序相比,分层的驱动程序由两个设置好的层组成:上层是模型设备驱动程序(MDD),下层是依赖平台的驱动程序(PDD)。本文采用分层的驱动程序来连接蓝牙硬件和上面的文件传输应用。图1说明了两种驱动程序是如何在Windows CE操作系统中集成的。
  
  设备驱动程序接口(DDI)是在MDD中实现的函数集,GWES模块通过这个接口调用设备驱动程序;设备驱动程序服务器提供接口(DDSI)是在PDD中实现的函数集并由MDD调用。由于微软提供了所有与MDD模块相关的源代码,所以对这部分不用做任何改动,只需将自己的PDD模块与MDD模块链结成一个公用库。
  
  理解了本机设备驱动程序的结构后,从图1右边不难看出,流接口驱动程序只是把流接口作为它们的DDI使用。在这种情况下,不必要把这些驱动程序与GWES模块逻接起来。它们以普通的DLL方式存在并根据需要被调用。
  
  2.2 蓝牙仿真串口驱动程序实现
  
  蓝牙仿真串口是用蓝牙RFCOMM协议实现无电缆的无线串口通信,与本机设备驱动程序一样,实现流接口的串口驱动程序同样只需实现蓝牙的PDD模块。
  
  PDD模块包括四部分:第一部分是必须自己实现的所有DDSI接口;第二部分是蓝牙协议栈包括FRCOMM、SDP、L2CAP以及HCI实体;第三部分是HCI传输层通过UART或者USB接口连接到蓝牙硬件;最后一部分是为蓝牙应用提供的图形界面接口和控制端口模块,用来对整个协议栈初始化、蓝牙硬件初始化、搜索附近的蓝牙设备以及发现指定设备上的服务。如图2所示。
  
  在图2所示的蓝牙仿真串口驱动程序的系统结构中,设备管理程序是用户层的程序,在基于Windows CE的平台上不停地运行着。设备管理程序不是内核的一部分,但它是与内核、注册表和注接口驱动程序DLL有相互影响的单独部分。它主要执行以下任务:
  
  HWOBJ BluetoothObj={ /*描述蓝牙仿真串口特征*/
  
  (PDEVICE_LIST)&SerDL,
  
  THREAD_IN_PDD,/*中断处理全部由PDD层处理*/
  
  0,
  
  NULL,
  
  (PHW_VTBL)&BluetoothVTbl/*包含需要实现的所有标准串口DDSI函数的列表*/
  
  };
  
  HWOBJ BluetoothCTRLObj={/*描述蓝牙控制端口特征*/
  
  (PDEVICE_LIST)&SerDL,
  
  THREAD_IN_PDD,
  
  0,
  
  NULL,
  
  (PHW_VTBL)&CTRLVTb1
  
  };
  
  PHWOBJ rgpHWObjects[]={/*包含两个PDD实例的数组*/
  
  &BluetoothObj,
  
  &BluetoothCTRLObj
  
  };
  
  DEVICE_LIST SerDL={/*存储设备驱动程序中所有串口设备*/
  
  “CESerial.dll”,/*串口驱动程序的名字*/
  
  sizeof(rgpHWObjects)/sizeof(PHWOBJ),/*串口设备的数目*/
  
  regHWObjects
  
  };
  
  PDEVICE_LIST GetSerialObject(VOID)
  
  {
  
  return (&SerDL);
  
  }
  
  
  在串口驱动程序中注册了两个串口设备后,就要实现这两个PDD实例对应的流接口函数。微软为要实现的串口PDD模块提供了一个HWOBJ(Haredware Object)类型的串行对象表,这个结构列出了实现串口驱动的所有接口函数指针。见下面的描述:
  
  typedef struct _HW_VTBL{
  
  PVOID(*HWInit)(ULONG Identifier,PVOID pMDDCon-text,PHWOBJ pHWObj);
  
  …,
  
  …,
  
  BOOL(*HWIoct1)(PVOID pHead,DWORD dwCode,
  
  PBYTE pBufIn,DWORD dwLenIn,PBYTE pBufOut,DWORD
  
  DwLenOut,PDWORDpdwActualOut);
  
  } HW_VTBL,*PHW_VTBL;
  
  用户通过修改串行口PDD的串行对象表改变函数集或函数名。下面的结构BluetoothVTbl的定义了蓝牙仿真串口DDSI函数的名称。
  
  Const HW_VTBL BluetoothVTbl={
  
  BluetoothInitSerial,
  
  …,
  
  …,
  
  BluetoothIoctl
  
  };
  
  同样用结构变量CTRLVTbl定义了控制端口的DDSI函数名列表。由于这个串口设备用作内部实现特殊的功能,下面只列出了需要关心的主要函数名。
  
  Const HW_VTBL CTRLVTbl={
  
  CTRLInitSerial,
  
  CTRLDeinit,
  
  CTRLOpen,
  
  CTRLClose,
  
  …,
  
  …,
  
  CTRLIoctl
  
  };
  
  蓝牙作为一个驱动新经济的引擎,将会 对以嵌入式系统为主的“后PC机”时代的到来产生巨大的推动作用,同时它还将面临来自象IrDA、802.11、HomeRF等无线通信技术的挑战。而将OBEX成功引入蓝牙,使得在嵌入式系统下工作的蓝牙通信设备上传输文件、同步、打印等应用成为可能,因此在蓝牙中起着举足轻重的作用。

 

 

时间: 2024-09-20 17:28:11

Windows CE中实现蓝牙串口驱动程序的相关文章

winform windows ce 中 怎么获取DataGrid的行数

问题描述 winform windows ce 中 怎么获取DataGrid的行数 在 winform windows ce 中 怎么获取DataGrid的行数 解决方案 直接获取数据源的数据数量 Adodc1.Recordset.Recordcount 解决方案二: DataGrid.Rows.Count 不行? 解决方案三: 下面的代码示例输出位于指定行和索引处的单元格所包含的值. private void PrintCellValues(DataGrid myGrid){ int iRow

Windows CE嵌入式导航系统研究(内核相关)

1.1 嵌入式车载导航系统的软件设计流程 嵌入式车载系统软件主要包括系统内核.驱动程序.应用程序三部分.设计的过程当中,我们采用瀑布模型进行设计,首先制定Windows CE5.0系统内核,再次编写相关设备驱动,最后编写或移植应用程序. 制定内核时,我们采用SunSaung2440 BSP(板级支持包)进行制定,同时提交组建保证系统支持网络通讯.文件系统.CAB包安装.汉语支持等功能.不仅如此,为方便系统应用程序开发,内核制定之后,我们发布相应的SDK. 图 5.1 软件设计流程 1.2 Win

Windows CE嵌入式导航系统研究(应用程序相关)

1.1.1 TCPMP多媒体播放器 本系统中采用的多媒体播放器是TCPMP,TCPMP播放器播放速度很快且支持多达几十中多媒体格式.TCPMP开源项目,同时支持Windows CE操作系统,而且提供很好的扩展性,例如需要重新编写TCPMP界面只需重新编写interface.plg即可.TCPMP提供全部的源代码,移植非常方便,只需编译后将生成的文件拷贝到目标机器运行即可.TCPMP多媒体播放器界面非常简洁,如图 5.35所示. 图 5.37 TCPMP软件界面 另外.TCPMP还支持应用集成,可

Windows ce的体系结构和功能

                             Windows ce体系结构图   操作系统层 操作系统的基本功能被放在多个独立的进程(exe)里面实现.在运行的时候,这些进程大致有如下几个: l         内核NK.EXE l         图形系统GWES.EXE l         对象存储FILESYS.EXE l         设备管理系统DEVICE.EXE l         服务SERVICES.EXE   系统调用与CoreDLL.DLL CoreDLL.D

Windows CE系统开发,BSP包中的几个常见文件详解

Windows CE系统开发,BSP包中的几个常见文件详解 BSP介绍(Board Support Package)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括: (1)      单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持: (2)      为操作系统提供设备驱动程序和系统中断服务程序: (3)      定制操作系统的功能,为软件系统提供一个实时多任务的运行环境: (4)      初始化操作系统,为操作

在Windows 7 RC系统中为老设备安装驱动程序

Windows 7 RC虽然自带了大量的硬件驱动程序,但是对于一些比较老的即插即用的外围设备的支持却是有限的. 笔者试图通过努力让一款老掉牙的摄像头在Windows 7中运行.这个摄像头是2004年的山寨产品(品牌为"不见不散"),要下载到官方的For Windows 7的驱动显然是天方夜谭了.在Windows 7中插入该摄像头后,果然无法被系统正确识别,设备管理器显示为黄色惊叹号即无法找到驱动.虽然知道摄像头的芯片是301P,但是301P芯片的摄像头驱动还没有For Windows

Windows 7中怎么彻底删除打印机驱动程序

1..在windows 7左下角点击"开始-设备和打印机"然后找到一个打印机点击,之后再点击"打印机服务器属性"具体步骤如下图所示:   2. 然后在弹出的"打印服务器属性"对话框中我们点击"驱动程序"在此下面列表就会看到有你安装的打印机驱动程序了,现在我们找到要删除打印机驱动程序,然后我们选择删除驱动程序和驱动程序包,点确定:   3. 如果我们在删除时提示无法正常删除驱动,我们可以先停止print spooler服务 具体

Windows CE下驱动开发基础

这是我从1月6日开始主持天极网论坛嵌入式开发版以来第一次发表文章,加上以前琐碎的文章共计30篇.研究的越多就越感觉自己懂的太少,其实在驱动开发方面我还是个菜鸟,我是想再次抛砖引玉,让做驱动有N年经验的人奉献一点出来,让大家减少一些研究驱动源码而又缺少注释所带来的痛苦. 我想即使读者看过微软的关于驱动开发的培训教材和CE帮助文档中的驱动部分,头脑中仍然一片茫然.要想真正了解驱动程序必须结合一些驱动程序源码,在此我以串口驱动程序(COM16550)中初始化过程为线索简单讲一讲驱动开发的基础知识. W

基于PPP协议的Linux与Windows CE网络

本文介绍了通过网络实现 Linux 主机与 Windows CE 设备协同工作的方法.本文首先利用PPP 协议在 Linux 主机与 Windows CE 设备之间建立起连接,然后在 Windows CE 设备上运行一个 FTP服务器使得 Linux 主机能够访问 Windows CE 设备上的资源.本文所介绍的解决方案,对 Windows 9x/2000/NT 主机同样适用. 背景介绍 Linux是一个类似于UNIX 的操作系统,它起源于芬兰一个名为Linus Torvalds 的业余爱好,但