paulzhang81
驱动牛犊
驱动牛犊
  • 注册日期2006-05-19
  • 最后登录2007-09-01
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望43点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
阅读:70062回复:592

转发以前的旧帖:EZ-USB FX2 的control panel 源代码讲解

楼主#
更多 发布于:2007-08-12 12:19
我来简单说一下在这个程序该怎么剥离出有用的东西,其实挺简单的(我靠,谁扔的鸡蛋。。。!),大虾们就别看了,菜鸟可以参考参考,其实我也是菜鸟,呵呵。

1,首先,我们要打开设备,怎么打开呢?当然是用函数了!这还用问。。
我们要用bOpenDriver (HANDLE * phDeviceHandle, PCHAR devname)来打开这个设备获得一个句柄,这个函数你可以在EzMain.cpp文件的第1343行找到,通过这个句柄就可以操作设备了,恩,太简单了!

2,有了这个句柄,下面我们就可以对设备读写了,怎么读写呢?用函数啊。。
打开Control Panel,你会看见界面上方有好多小方块,好像学名叫做“按钮”,每个按钮会对应一个消息,对应的消息在那里呢?从EzMain.cpp的第196行开始(哇,好多。。),每一个Case代表一个按钮事件,也就是说点了那个按钮,程序就会执行到这里(废话。。),下面我们来举例解释具体该怎么操作。

3,以获得设备描述符操作为例,也就是case IDC_GETDEVICEDESCRIPTOR:事件,你会在EzMain.cpp的第545行找到它,步骤如下:
pvBuffer = malloc (sizeof (Usb_Device_Descriptor) + 128);//存放描述符的缓冲区(不明白的找块豆腐撞死吧)
MAINTAIN_OUTPUT_BOX (hOutputBox, nItems);//没用,不理
if (bOpenDriver (&hDevice, pcDriverName) != TRUE)//打开设备获得句柄
{
    EzSendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)"Failed to Open Driver");
    hDevice = NULL;
}
if (hDevice != NULL)//如果句柄不是空的
{// Perform the Get-Descriptor IOCTL//著名的Ioctl函数,什么?你没听说过!
   bResult = DeviceIoControl (hDevice,//句柄,之前已经得到了
          IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR,//CTL_CODE,告诉驱动你要获得描述符
   pvBuffer,//输入数据缓冲区,这里没用
   sizeof (Usb_Device_Descriptor),//输入数据数量
   pvBuffer,//输出缓冲区,接收从设备返回的数据
   sizeof (Usb_Device_Descriptor),//输出缓冲区的长度
   (unsigned long *)&nBytes,//实际返回的数据长度
   NULL);//没用
              
}/* if valid driver handle */

如果上面这个函数执行成功,那么设备描述符数据就会放到pvBuffer中,你要做的就是从缓冲区中析取描述符中的item,然后显示出来即可,根据协议规定很容易的,下面的几行程序就是做这个用的,我就不解释了。

完事后要处理善后,就像上完厕所要冲水一样(好恶心。。)
CloseHandle (hDevice); // 关闭设备句柄
free (pvBuffer); // 释放缓冲区

4,还有15分钟下班,简单讲一下最重要的BULK传输吧,时间不多,简单说一下,嘻嘻。
你会在EzMain。cpp的第666行找到这个case,一个十分吉利的数字!
其他一些建立缓冲区什么设置数据长度什么的都不说了,就说重点的
BULK_TRANSFER_CONTROL bulkControl;
//这个结构里存放了端点的信息,即你要使用哪个端点,这个端点信息是从界面上得到的,下面的几行程序向你展示了如何从界面上获得它。
//然后是分配缓冲区,设置长度等乱七八糟的事
if (bOpenDriver (&hDevice, pcDriverName) != TRUE)//然后是打开设备
if (hDevice != NULL)//判断句柄
PUSBD_PIPE_INFORMATION pPipe = ((PUSBD_INTERFACE_INFORMATION)theApp.m_uInterfaceInfo)->Pipes;//获得端点信息
DWORD ioctl_val = IOCTL_EZUSB_BULK_WRITE;//预设CTL_CODE参数为写,就是向设备写数据
if(pPipe[bulkControl.pipeNum].EndpointAddress >> 7)//如果端点地址的最高位是1,那么是读,就是0x80,0x82什么的
ioctl_val = IOCTL_EZUSB_BULK_READ;//设置CTL_CODE参数为读,就是从设备读取数据
bResult = DeviceIoControl (hDevice,//著名的ioctl函数
       ioctl_val, //CTL_CODE参数,标志你是从设备读数据还是向设备写数据
       &bulkControl,//传入参数,我们此处传入要使用的端点号
       sizeof (BULK_TRANSFER_CONTROL),//传入参数的大小
       buffer,//读写数据的缓冲区
       length,//读写数据的长度
       (unsigned long *)&nBytes,//驱动实际返回的数据长度
       NULL);//没用

//然后下面就是显示数据等乱七八糟的事情了,没啥用,爱看不看
//上完厕所要冲水!
#ifndef USING_MFC
          free(buffer);
#endif
          CloseHandle (hDevice);


其它类似,大家可以自己弄了,根据上面的讲解,如果你想自己写个程序,把里面重要的东西弄出来就OK了,当然,别忘了包含主要的头文件,比如ezusbsys.h,以及把相应的一些结构变量给弄到你的程序里,像我这种只会三斧半VC的人都能搞定,对你们还有啥难的吗?

恩,刚好下班,回家吃饭喽,啦啦啦,今天天气不错!
   
附件名称/大小 下载次数 最后更新
EzMr.rar (145KB)  1016 2007-08-12 12:28
momocaca
驱动牛犊
驱动牛犊
  • 注册日期2011-05-09
  • 最后登录2011-05-13
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-05-13 13:37
自认我的文字没有那么大的力量。但还是回帖了
昨天的明天。顾名思义,就是今天。
不开心的时候,喜欢45度角仰望天空,喜欢十方天士周围静寂的一切。
各种的喜欢很多东西。讨厌很多东西。不解释。这跟别人没有半毛钱关系。而是个性使然。
喜欢假装很哲学。悲观的看这个世界的斗铠,其实内心是个半大孩子,什么都不懂。
喜欢劝别人乐观。喜欢告诉别人人生很美好生活很幸福,可是自己却从没有相信过。
喜欢用排比,喜欢用句号,喜欢修真世界de前言不搭后语,喜欢有人回复。
xiaocai_36
驱动牛犊
驱动牛犊
  • 注册日期2011-04-21
  • 最后登录2011-04-26
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2011-04-26 11:59
have a look!
annhu
驱动牛犊
驱动牛犊
  • 注册日期2010-09-19
  • 最后登录2010-09-19
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-09-19 16:16
折腾了半天 终于能回复了
zhoufang
驱动牛犊
驱动牛犊
  • 注册日期2002-08-15
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望144点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-09-03 09:57
谢谢分享!
lxiny25
驱动牛犊
驱动牛犊
  • 注册日期2010-08-25
  • 最后登录2010-09-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-08-26 22:11
dddddd我来看看
mylovetus
驱动牛犊
驱动牛犊
  • 注册日期2010-04-26
  • 最后登录2010-08-30
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-08-20 08:51
好好学习
79793281
驱动牛犊
驱动牛犊
  • 注册日期2005-12-24
  • 最后登录2011-03-08
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望62点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-08-18 17:45
看看,学习一下
deedbox
驱动牛犊
驱动牛犊
  • 注册日期2005-09-20
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望89点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-08-16 15:23
看下有没有用
zhengsiry
驱动牛犊
驱动牛犊
  • 注册日期2010-04-16
  • 最后登录2011-04-07
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2010-08-11 13:16
源码现在看起来都知道在干什么了,但是模仿它写的一些功能还不能实现
Chialong
驱动牛犊
驱动牛犊
  • 注册日期2010-06-07
  • 最后登录2011-01-31
  • 粉丝0
  • 关注2
  • 积分12分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2010-08-09 17:56
很好..学习一下
augustwp
驱动牛犊
驱动牛犊
  • 注册日期2008-10-17
  • 最后登录2010-09-24
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望52点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2010-08-07 11:28
回 楼主(paulzhang81) 的帖子
我要看看
green945
驱动牛犊
驱动牛犊
  • 注册日期2004-05-13
  • 最后登录2010-09-01
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2010-08-05 23:21
hao
jiangli2010
驱动牛犊
驱动牛犊
  • 注册日期2010-07-22
  • 最后登录2010-08-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2010-08-01 22:05
看看先
jsppas
驱动牛犊
驱动牛犊
  • 注册日期2010-07-14
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2010-07-14 12:46
谢谢分享
clsider
驱动牛犊
驱动牛犊
  • 注册日期2008-04-30
  • 最后登录2021-03-25
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2010-07-13 19:26
rererererere
h_happy
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2010-07-01 23:12
哈哈。抽一下
每天都有一堆一堆的问题出现. 总希望有一个牛人出现在我的面前. 每个工程师的梦想大概也不过如此.
vamos
驱动牛犊
驱动牛犊
  • 注册日期2009-05-09
  • 最后登录2010-08-02
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2010-07-01 17:17
:转发以前的旧帖:EZ-USB FX2 的control panel 源代
qingwen
驱动牛犊
驱动牛犊
  • 注册日期2009-02-20
  • 最后登录2010-07-11
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望381点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2010-06-27 16:26
真的是讲解吗?看看
ljsuda
驱动牛犊
驱动牛犊
  • 注册日期2010-06-26
  • 最后登录2010-06-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2010-06-26 01:46
看看呢!不错!
上一页
游客

返回顶部