您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > VC++6.0-中使用libUsb库进行Hid-USB设备通讯
VC++6.0中使用libUsb库进行HidUSB设备通讯1、首先在下载得到libusb-win32库和一些例子,插上需通讯的HIDUSB设备,打开下载的库,里面有个可执行文件,运行它,根据提示(注意PID和VID选好你所插的设备)生成inf文件并安装它。2、完成上一步就可以打开vc++6.0开发应用程序和HIDUSB设备通讯了,注意要把与刚才生成的inf文件同文件夹下的lib文件、dll文件和usb.h文件添加到工程文件夹下,并在Project-》Settings-》Link下的Object/librarymodules中添加libusb.lib库文件,还有添加usb.h头文件。3、程序中用到的全局变量:#defineMY_VID0x8888#defineMY_PID0x0006usb_dev_handle*handle;HANDLEm_hDevice=INVALID_HANDLE_VALUE;CWinThread*m_pReadReportThread=NULL;OVERLAPPEDReadOverlapped;charReadReportBuffer[16]={0};BYTEKeyStatus=0;volatileBOOLm_bReadReportRunFlag=FALSE;4、然后在OnInitDialog()下添加如下代码:structusb_bus*busses,*bus;//usb_dev_handle*handle=NULL;//这个需定义为全局变量,在读线程中也许使用usb_init();usb_find_busses();usb_find_devices();busses=usb_get_busses();for(bus=busses;bus;bus=bus-next){structusb_device*dev;for(dev=bus-devices;dev;dev=dev-next){structusb_device_descriptor*desc=&(dev-descriptor);if((desc-idVendor==0x8888)&&(desc-idProduct==0x0006)){handle=usb_open(dev);if(!handle){MessageBox(erroropeningdevice:\n%s\n,usb_strerror());returnfalse;}}}}usb_set_configuration(handle,1);usb_claim_interface(handle,0);这是libusb的初始化代码,接下来就可以读写USB数据了。5、写数据:自己添加个按钮并生成按钮事件函数,在其中添加写USB过程WriteReportBuffer[0]=0x01;usb_bulk_write(handle,0x01,WriteReportBuffer,1,10);6、读数据:读USB设备需在创建一个不断读取USB数据的线程。在OnInitDialog()中添加创建线程代码:m_pReadReportThread=AfxBeginThread(ReadReportThread,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,//0,NULL);if(m_pReadReportThread==NULL){CStringstrLog;strLog=读报告线程创建不成功!;::AfxMessageBox(strLog);CloseHandle(m_hDevice);m_hDevice=INVALID_HANDLE_VALUE;exit(0);}m_pReadReportThread-m_bAutoDelete=FALSE;m_pReadReportThread-ResumeThread();//唤醒线程7、读线程函数也是全局函数,代码如下:UINTReadReportThread(LPVOIDlpParam){CLibUsbHidTestDlg*pDlg=(CLibUsbHidTestDlg*)lpParam;ReadOverlapped.Offset=0;ReadOverlapped.OffsetHigh=0;ReadOverlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);m_bReadReportRunFlag=TRUE;while(TRUE){if(!m_bReadReportRunFlag){//ExitThreadCodeif(ReadOverlapped.hEvent!=NULL){CloseHandle(ReadOverlapped.hEvent);ReadOverlapped.hEvent=NULL;}return0;}ResetEvent(ReadOverlapped.hEvent);usb_bulk_read(handle,0x81,ReadReportBuffer,sizeof(ReadReportBuffer),100);KeyStatus=ReadReportBuffer[0];pDlg-SetKeyStatus();//显示下位机按键信息的函数。SetEvent(ReadOverlapped.hEvent);}}好了,一个简单的基于VC++6.0和libusb库读写HIDUSB的过程就是这样了。
本文标题:VC++6.0-中使用libUsb库进行Hid-USB设备通讯
链接地址:https://www.777doc.com/doc-5223834 .html