paulzhang81
驱动牛犊
驱动牛犊
  • 注册日期2006-05-19
  • 最后登录2007-09-01
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望43点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
阅读:65202回复: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
guoxu9702
驱动牛犊
驱动牛犊
  • 注册日期2007-08-12
  • 最后登录2007-08-12
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-12 15:06
宿舍
oushengfen
驱动牛犊
驱动牛犊
  • 注册日期2007-06-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分747分
  • 威望124点
  • 贡献值1点
  • 好评度82点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-12 16:19
值得学习
amulet1905
驱动牛犊
驱动牛犊
  • 注册日期2006-10-11
  • 最后登录2007-09-18
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-13 09:56
引用第0楼paulzhang81于2007-08-12 12:19发表的 转发以前的旧帖:EZ-USB FX2 的control panel 源代码讲解 :
此处是被引用的隐藏贴


学习学习
sky_sun_wei
驱动牛犊
驱动牛犊
  • 注册日期2006-08-03
  • 最后登录2008-01-04
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-13 11:40

ShowhowYoung
驱动牛犊
驱动牛犊
  • 注册日期2003-05-13
  • 最后登录2015-04-28
  • 粉丝0
  • 关注0
  • 积分39分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-13 12:04
看看,有用吗?
wgy0323
驱动牛犊
驱动牛犊
  • 注册日期2005-08-15
  • 最后登录2022-04-25
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望90点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-08-13 12:31
好好学习!
zsxzy317
驱动牛犊
驱动牛犊
  • 注册日期2007-07-17
  • 最后登录2008-09-06
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-08-13 12:33
ding
给别人的比别人期待的多一些
cricri
驱动牛犊
驱动牛犊
  • 注册日期2006-07-29
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-08-13 14:18
xu yao
fairyangel
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2007-08-17
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-13 16:41
let me see
larva0816
驱动牛犊
驱动牛犊
  • 注册日期2007-04-18
  • 最后登录2009-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-08-13 19:06
help me
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
11楼#
发布于:2007-08-13 20:13
看一眼
mcu_boy
liulang2450
驱动牛犊
驱动牛犊
  • 注册日期2006-08-08
  • 最后登录2008-03-01
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-08-14 09:37
like it!
guanbenben1984
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2007-09-21
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-08-14 10:05
sdddddddddd
daemone
驱动牛犊
驱动牛犊
  • 注册日期2006-02-23
  • 最后登录2009-06-18
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望48点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-08-14 13:30

    ,我看看
gaochzh
驱动牛犊
驱动牛犊
  • 注册日期2006-09-13
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-08-14 14:12
ddddddddddddddddd
tianxiapdw
驱动牛犊
驱动牛犊
  • 注册日期2005-09-27
  • 最后登录2009-07-06
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-08-14 22:00
看看,谢谢楼主
rushhour
驱动牛犊
驱动牛犊
  • 注册日期2007-07-30
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分550分
  • 威望56点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-08-15 00:44
学习学习!
albertddd
驱动牛犊
驱动牛犊
  • 注册日期2005-12-31
  • 最后登录2010-01-12
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-08-15 09:57
我是新手,我要看看
escene
驱动牛犊
驱动牛犊
  • 注册日期2005-09-13
  • 最后登录2010-04-14
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-08-15 10:30
good
上一页
游客

返回顶部