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,
windows开发平台_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或者find都会报错,libusb会报权限错误,⽽pyUSB会报No Backend available错误,⼆者其实都是驱动问题,⽹上搜罗很多,⼀般敢写在⽹上的都是⾃⼰尝试过对的做法,但是不⼀定是最简单⽅便的做法,让我感觉最烦的就是install-filter这
种恶⼼要命的⽅式,但是好在这家伙有命令⾏可以调⽤,也就是说你可以将他嵌⼊在程序中,不⽤⽤户⾃⼰单独操作,关于install-filter的使⽤这⾥不多做介绍,⽹上⼀搜⼀堆;
但是如果不需要考虑这种情况时候,最好的⽅式就是使⽤,直接可以选择操作USB所需要的所有类型的驱动,⽐如
libusb-1.0.lib/libusb.h  ->  WinUSB(v6.1.7600.16385)
pyUSB -> libusb-win32
这两个问题都能解决 ,关于具体⽤法,⽹上很容易搜到