当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]如何编写Windows CE.net的usb驱动程序(1)

随着USB设备的普及,摆在开发人员面前的驱动开发任务也是越来越繁重了,特别是对于一些嵌入式开发厂商来讲,由于设备所采用的操作系统不同,相应的硬件接口也是不一样的,开发相关的USB驱动程序更是难上加难。WindowsCE.NET是微软推出的功能强大的嵌入式操作系统,国内采用此操作系统的厂商已经很多了,本文就以windowsce.net为例,简单介绍一下如何开发windowsce.net下的USB驱动程序。

首先要熟悉一些USB的基本概念,当然最好把USB1.1的协议看一遍,(当然现在2。0的协议都已经有了)http://www.usb.org

上可以下载,我记得好像有个中文版的,翻译的还可以,http://www.driverdevolep.com

上有的,具体位置记不太清楚了,中文版的协议可以快速翻一边,了解一些基本的概念,但是设计到一些关键性的东西最好还是看英文版的心里比较清楚些。

这里我就不介绍USB的基本协议了,假设用户已经熟悉了USB设备的一些基本的概念,并且对WinowsCE.NET的开发有一定的了解。

下面简略介绍一下WindowsCE.NET中USB设备驱动开发的一些基础知识。

WindowsCE.NET的USB系统软件分为两层:USBClient设备驱动程序和底层的WindowsCE实现的函数层。USB设备驱动程序主要负责利用系统提供的底层接口配置设备,和设备进行通讯。底层的函数提本身又由两部分组成,通用串行总线驱动程序(USBD)模块和较低的主控制器驱动程序(HCD)模块。HCD负责最最底层的处理,USBD模块实现较高的USBD函数接口。USB设备驱动主要利用USBD接口函数和他们的外围设备打交道。

USB设备驱动程序主要和USBD打交道,所以我们必须详细的了解USBD提供的函数。

主要的传输函数有:

AbourtTransferIssueControlTransfer

CloseTransferIssueInterrupTransfer

GetIsochResultIssueIsochTransfer

GetTransferStatusIstransferComplete

IssueBulkTransferIssueVendorTransfer

主要的用于打开和关闭USBD和USB设备之间的通信通道的函数有:

AbortPipeTransfersClosePipe

IsDefaultPipeHaltedIsPipeHalted

OpenPipeResetDefaultPipe

ResetPipe

相应的打包函数接口有:

GetFrameLengthGetFrameNumberReleaseFrameLengthControl

SetFrameLengthTakeFrameLengthControl

取得设置设备配置函数:

ClearFeatureSetDescriptor

GetDescriptorSetFeature

GetInterfaceSetInterface

GetStatusSyncFrame

与USB进行交互的实现方法相关的多任务函数:

FindInterfaceRegisterClientDeviceId

GetDeviceInfoRegisterClientSettings

GetUSBDVersionRegisterNotificationRoutine

LoadGenericInterfaceDriverTranslateStringDescr

OpenClientRegisterKeyUnRegisterNotificationRoutine

常见的WindowsCE.NET下USB的设备驱动程序的编写有以下几种方法:

●流式接口函数

这种驱动程序主要呈现流式函数接口,主要输出XXX_Init,XXX_Deinit,XXX_Open,XXX_Close,XXX_Open,XXX_Close,XXX_Read,XXX_Write,

XXX_Seek,XXX_IOControl,XXX_PowerUp,XXX_PowerDown等流式接口,注意上述的几个接口一定都要输出,另外XXX必须为三个字符,否则会出错。但是此类的驱动程序不是通过设备管理接口来加载的,所以必须手工的调用RegisterDevice()和DeregisterDevice()函数来加载和卸载驱动程序。用户可以将此类的设备作为标准的文件来操作,只要调用相应的文件操作就可以和驱动程序打交道。

●使用现有的WindowCE.NET的应用程序接口

此类设备主要是利用WindowsCE.NET中已经有了现成的函数接口,例如USBMassStorageDisk,它主要利用现有的WindowsCE.Net中已经有的可安装文件系统接口,呈现给系统可用的文件系统,对于用户来讲,它是透明的,用户仅仅感觉在操作一个文件夹。

●创建指定到特定的USBD的用户指定的API

这种方法在USBD呈现设备时不需要任何限制,主要是特制的提供API给用户,一般不太常见。

USB设备驱动程序必须输出的函数有:

●USBDeviecAttach

当USB设备连接到计算机上时,USBD模块就会调用此函数,这个函数主要用于初始化USB设备,取得USB设备信息,配置USB设备,并且申请必需的资源。

●USBInstallDriver

主要用于创建一个驱动程序加载所需的注册表信息,例如读写超时,设备名称等。

●USBUninstallDriver

主要用于释放驱动程序所占用的资源,以及删除USBInstallDriver函数创建的注册表等。

上述的三个函数接口是所有的USB驱动程序必须提供的,缺一不可。

另外比较重要的是USB设备驱动程序的注册表配置,一般的USB设备驱动程序的注册表配置在HKEY_LOCAL_MACHINEDriversUSBLoadClients下,每个驱动程序的子键都有Group1_IDGroup2_IDGroup3_IDDriverName格式,如果注册表信息与USB设备信息符合,USBD就会加载此驱动程序。否则设备的子键应该由供应商,设备类和协议信息通过下划线组成。

具体的配置举个例子:

例如你有个PDA设备,它具有一个USB接口,它的供应厂商ID假设为0x0888,设备ID为0x0999,没有使用特殊的协议,那么它的加载注册表应该写为:

[HKEY_LOCAL_MACHINEDriversUSBLoadClients2184_2457DefaultDefaultPDA]"DLL"="pdausb.dll"

需要注意的是注册表构成都是十进制数值来标识的,注意一下十进制和十六进制的转换。

再举个USB鼠标的例子,USB鼠标是标准的HID设备,它的协议为:InterfaceClassCode为3(HID类),InterfaceSubclassCode为1(引导接口类),InterfaceProtocolCode为2(鼠标协议类),所以它的注册如下:

[HKEY_LOCAL_MACHINEDriversUSBLoadClientsDefaultDefault3_1_2USBMouse]"DLL"="usbmouse.dll"

到此为止,我们可以看出,其实驱动开发无非做两件事情,一件是和硬件打交道,另外一件是和操作系统打交道。举个简单的例子,例如:我们需要开发一个USB鼠标驱动程序,我们就需要了解USB鼠标硬件上是怎么发送数据的?操作系统怎么才能得到鼠标的控制事件?其实USB鼠标是有一个中断PIPE的,用于传送鼠标产生的数据,WindwosCE.NET中有个接口函数叫做mouse_event(),专门用于产生鼠标事件,但是它是不关心具体什么硬件的,甚至我们自己在应用程序中调用这个函数都可以实现模拟鼠标,对应的有个keybd_event(),用于产生键盘事件,知道了这个就好办多了,只要将相应的数据转换一下,调用一下mouse_event()即可

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

深圳2024年4月17日 /美通社/ -- 今日,华为举办全球分析师大会,在"加速迈向网络智能化"主题论坛中,华为数据通信产品线副总裁赵志鹏发表了主题演讲,阐述了华为全面引入AI技术,从组件级、任务级...

关键字: NET 华为 智能化 网络

德国斯图加特和加利福尼亚州普莱森顿2024年4月16日 /美通社/ -- 全球高科技设施设计、工程和交付的领先企业Exyte宣布,计划收购全球领先的安装服务、设备和技术设施管理提供商—Kinetics集团(简称"Kine...

关键字: NET TI TE IC

好用、高效的多合一传感器开发工具,支持给新一代高科技 MEMS 传感器产品开发应用软件

关键字: 传感器 Windows MacOS

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

今天,小编将在这篇文章中为大家带来Windows 11系统的有关报道,通过阅读这篇文章,大家可以对Windows 11系统具备清晰的认识,主要内容如下。

关键字: Windows 操作系统

(全球TMT2023年9月8日讯)亚马逊云科技日前在一年一度的存储服务创新日上宣布推出诸多亚马逊云科技存储服务的新功能,其中重点包括为支持人工智能/机器学习、大数据分析等数据密集型工作负载进一步提升Amazon Ela...

关键字: 亚马逊 FOR IC Windows

(全球TMT2023年8月24日讯)第三十届北京国际广播电影电视展览会(BIRTV2023)正在北京如火如荼地进行中。在展会上,成都索贝数码科技股份有限公司与深圳市洲明科技股份有限公司宣布签署战略合作协议,双方将携手布...

关键字: 模型 TV 编写 网络视频

此芯科技自去年加入Linaro Windows on Arm工作组之后,发起成立了Client PC合作项目,旨在推动基于UEFI + ACPI标准的Arm PC启动架构标准化,通过统一的系统固件支持Windows和Li...

关键字: Arm PC生态 Windows Linux操作系统

北京2023年3月13日 /美通社/ -- 近日,亚马逊云科技宣布针对其广泛的存储服务推出诸多可帮助客户进一步优化成本的新功能,功能更新涵盖Amazon Simple Storage Service(Amazo...

关键字: 亚马逊 STORAGE LM Windows

妇科大咖云集 共话日间诊疗新模式 北京2023年3月7日 /美通社/ -- 为进一步推广由郎景和院士牵头,朱兰教授等我国多位著名妇科医学专家共同编著《日间宫腔镜手术中心设置及管理流程中国专家共识》,普及日间宫腔镜诊疗理...

关键字: 东风 内窥镜 编写 调试
关闭
关闭