发新帖我要提问
12
返回列表
打印
[应用相关]

自定义USB设备开发详细流程讲解(基于libusb)

[复制链接]
楼主: gaonaiweng
手机看帖
扫描二维码
随时随地手机跟帖
21
gaonaiweng|  楼主 | 2021-11-29 15:57 | 只看该作者 回帖奖励 |倒序浏览
到此,PC端的驱动程序编写基本完成,下面就是驱动程序的测试,我们可以把之前这个程序生成为一个dll文件,然后单独建立一个测试工程来测试这个dll文件中的函数,测试程序如下:

// USB_DriverTest.cpp : 定义控制台应用程序的入口点。
            

             //
            

               
            

             #include "stdafx.h"
            

               
            

             #define        EP1_OUT_SIZE        64
            

             #define        EP1_IN_SIZE        64
            

               
            

             int
              _tmain(
             int
              argc, _TCHAR* argv[])
            

             {
            

                     
             int
              DevNum;
            

                     
             int
              ret;
            

                     
             char
              WriteTestData[256]={1,2,3,4,5,6,7,8,9};
            

                     
             char
              ReadTestData[256]={0};
            

                     
             for
             (
             int
              i=0;i<256;i++){
            

                             
             WriteTestData[i] = i;
            

                     
             }
            

                     
             //扫描设备连接数,需要初始化
            

                     
             DevNum = USBScanDev(1);
            

                     
             printf
             (
             "设备连接数为:%d\n"
             ,DevNum);
            

                     
             //打开设备0
            

                     
             ret = USBOpenDev(0);
            

                     
             if
             (ret == SEVERITY_ERROR){
            

                             
             printf
             (
             "打开设备失败!\n"
             );
            

                             
             return
              SEVERITY_ERROR;
            

                     
             }
             else
             {
            

                             
             printf
             (
             "打开设备成功!\n"
             );
            

                     
             }
            

               
            

                     
             //端点1写数据
            

                     
             ret = USBBulkWriteData(0,EP1_OUT,WriteTestData,EP1_OUT_SIZE,500);
            

                     
             if
             (ret != EP1_OUT_SIZE){
            

                             
             printf
             (
             "端点1写数据失败!%d\n"
             ,ret);
            

                             
             return
              SEVERITY_ERROR;
            

                     
             }
             else
             {
            

                             
             printf
             (
             "端点1写数据成功!\n"
             );
            

                     
             }
            

                     
             //端点1读数据
            

                     
             ret = USBBulkReadData(0,EP1_IN,ReadTestData,EP1_IN_SIZE,500);
            

                     
             if
             (ret != EP1_IN_SIZE){
            

                             
             printf
             (
             "端点1读数据失败!%d\n"
             ,ret);
            

                             
             return
              SEVERITY_ERROR;
            

                     
             }
             else
             {
            

                             
             printf
             (
             "端点1读数据成功!\n"
             );
            

                             
             for
             (
             int
              i=0;i<EP1_IN_SIZE;i++){
            

                                    
             printf
             (
             "%02X "
             ,ReadTestData[i]);
            

                                    
             if
             (((i+1)%16)==0){
            

                                             
             printf
             (
             "\n"
             );
            

                                    
             }
            

                             
             }
            

                             
             printf
             (
             "\n"
             );
            

                     
             }
            

                     
             Sleep(100);
            

                     
             //端点2写数据
            

                     
             ret = USBBulkWriteData(0,EP2_OUT,WriteTestData+64,64,500);
            

                     
             if
             (ret != 64){
            

                             
             printf
             (
             "端点2写数据失败!%d\n"
             ,ret);
            

                             
             return
              SEVERITY_ERROR;
            

                     
             }
             else
             {
            

                             
             printf
             (
             "端点2写数据成功!\n"
             );
            

                     
             }
            

                     
             //端点2读数据
            

                     
             ret = USBBulkReadData(0,EP2_IN,ReadTestData,64,500);
            

                     
             if
             (ret != 64){
            

                             
             printf
             (
             "端点2读数据失败!%d\n"
             ,ret);
            

                             
             return
              SEVERITY_ERROR;
            

                     
             }
             else
             {
            

                             
             printf
             (
             "端点2读数据成功!\n"
             );
            

                             
             for
             (
             int
              i=0;i<64;i++){
            

                                    
             printf
             (
             "%02X "
             ,ReadTestData[i]);
            

                                    
             if
             (((i+1)%16)==0){
            

                                             
             printf
             (
             "\n"
             );
            

                                    
             }
            

                             
             }
            

                             
             printf
             (
             "\n"
             );
            

                     
             }
            

                     
             getchar
             ();
            

                     
             return
              0;
            

             }
            

使用特权

评论回复
22
gaonaiweng|  楼主 | 2021-11-29 15:58 | 只看该作者
到此,整个开发流程基本完成,下面是本套程序的测试图片

串口打印输出


PC端测试程序输出


Bus Hound抓取到的USB数据

使用特权

评论回复
23
gaonaiweng|  楼主 | 2021-11-29 15:58 | 只看该作者
000000

使用特权

评论回复
24
gaonaiweng|  楼主 | 2021-11-29 16:00 | 只看该作者
程序源码下载链接被黑的也差不多了,没办法放出来。实在抱歉

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则