Alex_rcpilot
驱动牛犊
驱动牛犊
  • 注册日期2004-06-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2490回复:2

USB WDM驱动入门……我原是搞硬件的

楼主#
更多 发布于:2009-12-30 17:40
  发这个帖子主要是想介绍一下自己的情况,一来为交些新朋友,二来也希望诸位能帮我纠正一些误区,指明一个方向。

  我本科是学机械设计专业的,从大一下学期开始玩硬件,到现在大学毕业三年多了。做的行业也都是电子方面的,与机械设计没有太大关系。以前用过CY7C68013A、CY7C63813和STM32系列片子上的USB模块,借助系统内置的USB驱动上的手。已经实现过摇杆、键盘、鼠标以Composite Device等功能。通过这些实验已经对USB 协议方面有了一定的了解,固件方面基本可以做到根据需求量体裁衣,只是我所需要的产品并非标准设备。我希望实现更复杂的功能,无奈我PC端软件底子很薄,硬逼着自己写,撞得鼻青脸肿在所难免,因此我做了足够的心理准备,要么苦学一段时间,要么外包,我干些别的活挣些钱来犒劳人家。



  我正在做的产品大致结构是这样,一个Composite Device,包含两个HID Joystick和一个HID类的自定义设备。均使用Interrupt传输。

  每个Joystick有超过32个button,系统默认的Property Sheet显示不全。因此不能使用Windows内置驱动,需要自己写驱动,并且自定义控制面板里游戏控制器的Property Sheet。这两个Joystick都要兼容DirectX中的DirectInput。(我查了相关信息,DirectInput在使用自定义驱动时可以支持超过32个button。而且我发现在使用系统自带驱动时也是支持的,只是Property Sheet里面没有显示出来)

  HID类自定义设备是一个输出设备,负责将应用程序中的数据传送到硬件的LCD上显示出来。



  该系统是我自己的项目,我希望尽快完成,但是我有权杜绝揠苗助长的现象。因此我不追求不切实际的“速成学习法”,我只力求高效率。另外我英语比较好,看中英文的技术文档都没问题。如果某个资料国内没有译文,原文可以照样看。

  这套软件发布以后,对于用户来讲可能就是一个几十M的安装包,但我明白它背后涉及很多东西,目前我电脑上装的是Visual Studio 2005 + DDK + DirectX SDK,Driver Studio 3.2暂时没装,硬盘里也有WDK没装,我想DDK玩熟了之后需要编写WDF驱动的时候再装。以前的VB经验用不上了,在硬件平台上写了几年的C代码,对C++只是初步了解,没有太多机会使用。VC++的环境也没怎么用过,只是熟悉过VS的开发界面使用方式与编译流程。

  我买了电子工业出版社那本张帆等人编著的《Windows驱动开发技术详解》,黑皮的。C++、VC++方面的书也有几本,最近有事没事就看看。也经常翻DDK的范例,或者上pudn、CSDN找几个范例项目看看。目前这个项目才启动一周时间。我反复运行过十几个相关范例,对开发流程有了初步的认识。只是细看每个范例都有太多陌生的概念,一时很难抓住主线,典型的初学者心理——茫然。好在我有硬件方面的学习历程做参考,现在的学习能力已经比几年前要强了,也知道学习过程中会出现什么样的心理变化过程。希望可以听听大家的看法:针对项目本身,从软件构造的角度,我应该如何拆分这个项目?针对我的学习方法,有没有推荐的参考资料、检索、练习方法?

  大家回复即是对我的支持。以上疑问太多,诸位想到什么就说什么即可,随便交流而已,不求面面俱到。
物以类聚,狼以群居。
weizhiheng
驱动牛犊
驱动牛犊
  • 注册日期2005-10-19
  • 最后登录2016-09-26
  • 粉丝0
  • 关注0
  • 积分182分
  • 威望30点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-01-03 03:03
兄弟感觉应该还可以,驱动开发猛一听老吓人,做过了就明白了,不过是个流程
关键了解PC的底层处理过程,然后结合DriverStudio进行一个流程即可……

很佩服你打算从DDK学起的勇气,但是,对于做硬件的,我个人意见没有必要
因为我觉得,如果你把DDK摸透了,差不多软件也出师了……当然也很费时间

个人建议先找个例子,如鼠标的,看懂了,然后扩展出2个鼠标,然后,然后……
N个鼠标,不知道是不是等于32个按钮了……

呵呵,本人研毕业设计做USB固件和PC驱动,一些粗浅看法,呵呵,见谅……
Alex_rcpilot
驱动牛犊
驱动牛犊
  • 注册日期2004-06-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-01-03 13:27
回 1楼(weizhiheng) 的帖子
多谢鼓励。我跑过十几个范例之后稍微有了些体会:和以前做的其它类型开发一样,入门阶段,先学的往往不是代码本身,而是工具的使用流程。

我从环境搭建、配置到范例代码的学习过程都做了完整的文档记录,现在仍然在不断扩充文档规模。我也感觉没有必要把DDK摸得非常透,学个够用即可。不过现在我是有项目在身,并且不知道学多少才算够,所以只能摸着石头过河,先探探深浅了。

同很多DDK初学者的情况不同,他们很多都有软件程序员的工作经验,背景知识比较丰富。而我几乎在C++语言、Visual Studio.NET环境、Windows系统基础知识这些方面都是菜鸟。因此现在天天都在看书、看视频、跑范例练习。写文档做笔记,在本子上写备忘,在白纸上画抽象概念的层次关系示意图图……

这几天都在看Win32项目和MFC的范例,熟悉一下基本结构,常用的头文件和函数,以及开发流程。接下来就是按照你的建议,找些基本的鼠标、键盘、摇杆等范例看一看。不过我从固件的角度来看,鼠标与摇杆上的按钮没有必然联系的。USB Usage Tables里面对二者都有定义,呵呵。

多谢回复,希望今后可以多探讨。我有很多疑问,不过我相信多数都可以自己找到答案,只是需要耐心。
物以类聚,狼以群居。
游客

返回顶部