windows平台USB驱动接口开发之libusb以及pyUSB安装使用要点

     最近在帮助我们芯片组开发一个新的工具,最重要的是USB控制接口和python脚本解释器的嵌入,USB接口按照之前的做法是使用如下函数:


BOOL WINAPI DeviceIoControl(
  _In_        HANDLE       hDevice,
  _In_        DWORD        dwIoControlCode,
  _In_opt_    LPVOID       lpInBuffer,
  _In_        DWORD        nInBufferSize,
  _Out_opt_   LPVOID       lpOutBuffer,
  _In_        DWORD        nOutBufferSize,
  _Out_opt_   LPDWORD      lpBytesReturned,
  _Inout_opt_ LPOVERLAPPED lpOverlapped
);

当时能够使用这个接口满足我们的需求是因为如下对应关系:

lpInBuffer[0] ->bmRequest

lpInBuffer[1] ->windex

lpInBuffer[2] ->。。。(记不清楚了 ^_^)

由于芯片版本的更新导致之前做法不能实现,从而考虑使用其它方法,当前考虑两种做法:

做法1:使用libusb生成dll,再通过python 的ctypes导入调用

做法2:直接使用python 自己的库pyUSB,通过pip安装后导入调用

这两种做法初期都很顺利,一旦涉及到open device或者usb.core.find都会报错,libusb会报权限错误,而pyUSB会报No Backend available错误,二者其实都是驱动问题,网上搜罗很多,一般敢写在网上的都是自己尝试过对的做法,但是不一定是最简单方便的做法,让我感觉最烦的就是install-filter这种恶心要命的方式,但是好在这家伙有命令行可以调用,也就是说你可以将他嵌入在程序中,不用用户自己单独操作,关于install-filter的使用这里不多做介绍,网上一搜一堆;

      但是如果不需要考虑这种情况时候,最好的方式就是使用Zadig.exe,直接可以选择操作USB所需要的所有类型的驱动,比如

     libusb-1.0.lib/libusb.h  ->  WinUSB(v6.1.7600.16385)

     pyUSB -> libusb-win32

     这两个问题都能解决 ,关于Zadig.exe具体用法,网上很容易搜到 

你可能感兴趣的:(USB驱动开发)