[应用相关] 自定义USB设备开发详细流程讲解(基于libusb)

[复制链接]
4497|23
 楼主| gaonaiweng 发表于 2021-11-29 15:57 | 显示全部楼层
到此,PC端的驱动程序编写基本完成,下面就是驱动程序的测试,我们可以把之前这个程序生成为一个dll文件,然后单独建立一个测试工程来测试这个dll文件中的函数,测试程序如下:

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

  3.              //
  4.             

  5.                
  6.             

  7.              #include "stdafx.h"
  8.             

  9.                
  10.             

  11.              #define        EP1_OUT_SIZE        64
  12.             

  13.              #define        EP1_IN_SIZE        64
  14.             

  15.                
  16.             

  17.              int
  18.               _tmain(
  19.              int
  20.               argc, _TCHAR* argv[])
  21.             

  22.              {
  23.             

  24.                      
  25.              int
  26.               DevNum;
  27.             

  28.                      
  29.              int
  30.               ret;
  31.             

  32.                      
  33.              char
  34.               WriteTestData[256]={1,2,3,4,5,6,7,8,9};
  35.             

  36.                      
  37.              char
  38.               ReadTestData[256]={0};
  39.             

  40.                      
  41.              for
  42.              (
  43.              int
  44.               i=0;i<256;i++){
  45.             

  46.                              
  47.              WriteTestData[i] = i;
  48.             

  49.                      
  50.              }
  51.             

  52.                      
  53.              //扫描设备连接数,需要初始化
  54.             

  55.                      
  56.              DevNum = USBScanDev(1);
  57.             

  58.                      
  59.              printf
  60.              (
  61.              "设备连接数为:%d\n"
  62.              ,DevNum);
  63.             

  64.                      
  65.              //打开设备0
  66.             

  67.                      
  68.              ret = USBOpenDev(0);
  69.             

  70.                      
  71.              if
  72.              (ret == SEVERITY_ERROR){
  73.             

  74.                              
  75.              printf
  76.              (
  77.              "打开设备失败!\n"
  78.              );
  79.             

  80.                              
  81.              return
  82.               SEVERITY_ERROR;
  83.             

  84.                      
  85.              }
  86.              else
  87.              {
  88.             

  89.                              
  90.              printf
  91.              (
  92.              "打开设备成功!\n"
  93.              );
  94.             

  95.                      
  96.              }
  97.             

  98.                
  99.             

  100.                      
  101.              //端点1写数据
  102.             

  103.                      
  104.              ret = USBBulkWriteData(0,EP1_OUT,WriteTestData,EP1_OUT_SIZE,500);
  105.             

  106.                      
  107.              if
  108.              (ret != EP1_OUT_SIZE){
  109.             

  110.                              
  111.              printf
  112.              (
  113.              "端点1写数据失败!%d\n"
  114.              ,ret);
  115.             

  116.                              
  117.              return
  118.               SEVERITY_ERROR;
  119.             

  120.                      
  121.              }
  122.              else
  123.              {
  124.             

  125.                              
  126.              printf
  127.              (
  128.              "端点1写数据成功!\n"
  129.              );
  130.             

  131.                      
  132.              }
  133.             

  134.                      
  135.              //端点1读数据
  136.             

  137.                      
  138.              ret = USBBulkReadData(0,EP1_IN,ReadTestData,EP1_IN_SIZE,500);
  139.             

  140.                      
  141.              if
  142.              (ret != EP1_IN_SIZE){
  143.             

  144.                              
  145.              printf
  146.              (
  147.              "端点1读数据失败!%d\n"
  148.              ,ret);
  149.             

  150.                              
  151.              return
  152.               SEVERITY_ERROR;
  153.             

  154.                      
  155.              }
  156.              else
  157.              {
  158.             

  159.                              
  160.              printf
  161.              (
  162.              "端点1读数据成功!\n"
  163.              );
  164.             

  165.                              
  166.              for
  167.              (
  168.              int
  169.               i=0;i<EP1_IN_SIZE;i++){
  170.             

  171.                                     
  172.              printf
  173.              (
  174.              "%02X "
  175.              ,ReadTestData[i]);
  176.             

  177.                                     
  178.              if
  179.              (((i+1)%16)==0){
  180.             

  181.                                              
  182.              printf
  183.              (
  184.              "\n"
  185.              );
  186.             

  187.                                     
  188.              }
  189.             

  190.                              
  191.              }
  192.             

  193.                              
  194.              printf
  195.              (
  196.              "\n"
  197.              );
  198.             

  199.                      
  200.              }
  201.             

  202.                      
  203.              Sleep(100);
  204.             

  205.                      
  206.              //端点2写数据
  207.             

  208.                      
  209.              ret = USBBulkWriteData(0,EP2_OUT,WriteTestData+64,64,500);
  210.             

  211.                      
  212.              if
  213.              (ret != 64){
  214.             

  215.                              
  216.              printf
  217.              (
  218.              "端点2写数据失败!%d\n"
  219.              ,ret);
  220.             

  221.                              
  222.              return
  223.               SEVERITY_ERROR;
  224.             

  225.                      
  226.              }
  227.              else
  228.              {
  229.             

  230.                              
  231.              printf
  232.              (
  233.              "端点2写数据成功!\n"
  234.              );
  235.             

  236.                      
  237.              }
  238.             

  239.                      
  240.              //端点2读数据
  241.             

  242.                      
  243.              ret = USBBulkReadData(0,EP2_IN,ReadTestData,64,500);
  244.             

  245.                      
  246.              if
  247.              (ret != 64){
  248.             

  249.                              
  250.              printf
  251.              (
  252.              "端点2读数据失败!%d\n"
  253.              ,ret);
  254.             

  255.                              
  256.              return
  257.               SEVERITY_ERROR;
  258.             

  259.                      
  260.              }
  261.              else
  262.              {
  263.             

  264.                              
  265.              printf
  266.              (
  267.              "端点2读数据成功!\n"
  268.              );
  269.             

  270.                              
  271.              for
  272.              (
  273.              int
  274.               i=0;i<64;i++){
  275.             

  276.                                     
  277.              printf
  278.              (
  279.              "%02X "
  280.              ,ReadTestData[i]);
  281.             

  282.                                     
  283.              if
  284.              (((i+1)%16)==0){
  285.             

  286.                                              
  287.              printf
  288.              (
  289.              "\n"
  290.              );
  291.             

  292.                                     
  293.              }
  294.             

  295.                              
  296.              }
  297.             

  298.                              
  299.              printf
  300.              (
  301.              "\n"
  302.              );
  303.             

  304.                      
  305.              }
  306.             

  307.                      
  308.              getchar
  309.              ();
  310.             

  311.                      
  312.              return
  313.               0;
  314.             

  315.              }
  316.             
 楼主| gaonaiweng 发表于 2021-11-29 15:58 | 显示全部楼层
到此,整个开发流程基本完成,下面是本套程序的测试图片

串口打印输出


PC端测试程序输出


Bus Hound抓取到的USB数据

 楼主| gaonaiweng 发表于 2021-11-29 15:58 | 显示全部楼层
 楼主| gaonaiweng 发表于 2021-11-29 16:00 | 显示全部楼层
程序源码下载链接被黑的也差不多了,没办法放出来。实在抱歉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部