阅读:2187回复:8
关于EZ-USB通用驱动程序的问题
如果使用EZ-USB的通用驱动程序ezusb.sys,如何编写应用程序呢?
我知道用CreateFile、DeviceIoControl等,但如何控制数据读写的端口呢?比如从EP0读设备状态,从EP2读BULK方式的数据。 哎,实在是太菜了。在这里先谢谢各位了。 |
|
最新喜欢:spry97 |
沙发#
发布于:2005-06-09 15:33
;)呵呵,我知道了,哎,这个论坛就是好啊
|
|
板凳#
发布于:2005-06-14 02:12
我晕,楼上的大虾,你怎么就自己就明白了,是自己想通还是有人秘密的告诉你啊,能不能也透露一点给小弟啊??如果可以请发到sun3h@163.com其他哪位也想明白的话我帮你转发,如何???
|
|
地板#
发布于:2005-06-16 17:06
能否给我也发一份阿,我也很想弄清楚这个问题,多谢多谢啊!我的邮箱:coolcat0710@163.com
|
|
地下室#
发布于:2005-06-17 16:39
帮帮忙!也转发给我一份吧!谢谢
likangmao@yahoo.com.cn |
|
5楼#
发布于:2005-06-17 17:50
BULK_TRANSFER_CONTROL bulkControl;
WORD outPacketSize, inPacketSize; UCHAR outBuffer[64], inBuffer[64]; bulkControl.pipeNum=2; outPacketSize=4; if( ! DeviceIoControl (hDeviceHandle, IOCTL_EZUSB_BULK_WRITE, &bulkControl, sizeof(BULK_TRANSFER_CONTROL), &outBuffer[0], outPacketSize, &nBytes, NULL) ) |
|
6楼#
发布于:2005-06-18 23:13
不要发邮件嘛,就在这里写出来多好,可以让大家也共享嘛
|
|
|
7楼#
发布于:2005-06-20 10:45
搜啊,论坛有搜索功能!
干吗不用???? 应用程序的源代码cy已经提供了 叫EzMr,我说的是2。0的控制程序,1。1有类似的 去参考源代码写自己的代码 |
|
8楼#
发布于:2005-06-23 15:41
不好意思,各位,最近太忙了,今天刚有时间整理一下,只是我的个人经验,不全面,可能还有理解上的错误,权作抛砖引玉了。
=========================================== 现在回过头来看,发现挺简单的,为了让更多与我同样曾经困惑过的人都清楚,在这里总结一下吧: 1)样例程序可以参考\Cypress\USB\Examples\EzUsb\bulktest、Cypress\USB\Examples\EzUsb,最好再 看看Cypress\USB\Util中的程序。 2)对EP0的控制需用到VENDOR_REQUEST_IN结构,我的程序是这样写的: VENDOR_REQUEST_IN myRequest, myRequest2; .... if (OpenDriver(&hDevice,sDriverName)) { myRequest.bRequest = bRequest;//是控制命令代码,可以由参数传入,如0XB2,0XA0等 myRequest.wValue = 0x7F92; myRequest.wIndex = 0x00; myRequest.wLength = 0x01; myRequest.bData = 0; myRequest.direction = 1;//0x00; //0:代表传输方向是向主机传送 //1:代表传输方向是向设备传送 bResult = DeviceIoControl (hDevice, IOCTL_Ezusb_VENDOR_REQUEST, &myRequest, sizeof(VENDOR_REQUEST_IN), &myRequest2,//NULL, 因为固件设计了一个返回值,所以定义了一个myRequest2,在它的bRequest字段 里存放返回值,这与固件的设计有关,如果没有返回值,用NULL就可以,当然下一个参数也就可以是0了 sizeof(VENDOR_REQUEST_IN),//0, &nBytes, NULL); 3)如果要从EP0端口返回多个数据(小于16BYTE),程序如下: VENDOR_OR_CLASS_REQUEST_CONTROL myRequest; //必须用这个结构,EZMr中就是这样用的 ..... myRequest.request = 0xB3; myRequest.value = 0x7F92; myRequest.index = 0x00; myRequest.direction = 1;//0:代表传输方向是向主机传送 //1:代表传输方向是向设备传送 myRequest.requestType=2; // 1:class, 2:vendor myRequest.recepient=0; // 0:device, 1:interface, 2:endpoint, 3:other ...... bResult = DeviceIoControl (hDevice, IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST, &myRequest, sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL), buf,//返回的数据在这里 5,//返回数据的字节数 &nBytes, NULL); 4)从端口EPn用Bulk传输,程序如下:(以下是读数据的程序,因为我的项目只要求读,其实写数据好像 差不多) BULK_TRANSFER_CONTROL btc; ...... bResult = DeviceIoControl (hDevice, IOCTL_EZUSB_BULK_READ, &btc, sizeof(BULK_TRANSFER_CONTROL), m_temp, 512,//通用驱动定义的包最大为512 (unsigned long *)&nBytes,// NULL); |
|