首页 > 代码库 > libusb的简单使用
libusb的简单使用
使用libusb开发库可以很方便的与usb通信。
在使用这个库之前需要做几件事情
1.libusb的安装
在ubuntu中使用sudo apt-get isntall libusb* 可以快速的安装,如果想选择性的安装则使用sudo apt-cache search libusb查看要安装的软件包,然后sudo apt-get install ...进行安装
2.确定供应商id 和 产品id,通过这两个id可以确定我们的usb设备
使用lsusb命令查看,然后使用libusb -v查看具体信息
3 确定传输方式、输入端点、输出端点
命令同2
我的usb是bulk传输方式、输入端点0x86,输出端点0x02
4.在项目中添加添加库 -lusb
不添加的话会出现找不到函数的问题,如果提示找不到usb.h文件很可能是你没安装好libusb库
5.软件完成之后要使用sudo运行程序,不然usb_bulk_write之类的函数会调用失败。
6.附上官网地址和帮助文档
官网:http://www.libusb.org/
帮助文档:http://libusb.sourceforge.net/doc/
下面看一下bulk的使用例子:
usbhelper.h
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <usb.h> 4 #include <QtCore/QObject> 5 #include <QtCore/QString> 6 #include <QtCore/QStringList> 7 class UsbHelper : public QObject 8 { 9 Q_OBJECT10 public:11 UsbHelper();12 ~UsbHelper();13 14 bool InitUsb();15 16 bool WriteData(const QString& pBuffer);17 18 bool ReadData(QString &pBuffer);19 20 bool WaitResponse(int pTimeout, QStringList &pResponseList);21 22 void CloseUsb();23 24 bool SendCommand(const QString &pCommand, QStringList &pResponseList);25 private:26 usb_dev_handle *mUsbHandle;27 struct usb_device *mUsbDev;28 };
usbhelper.cpp
#include "usbhelper.h"#include <QtCore/QThread>#include <QtCore/QByteArray>#include <QtCore/QTime>#define IDVENDOR 0x10EE#define IDPRODUCT 0xAA55#define ENDPOINT_OUT 0x02#define ENDPOINT_IN 0x86UsbHelper::UsbHelper() : mUsbHandle(NULL), mUsbDev(NULL){}UsbHelper::~UsbHelper(){ CloseUsb();}bool UsbHelper::InitUsb(){ usb_init(); usb_find_busses(); usb_find_devices(); struct usb_bus *pbus = NULL; struct usb_device *pdev = NULL; usb_set_debug(255); for(pbus=usb_busses;pbus!=NULL;pbus=pbus->next){ for(pdev=pbus->devices;pdev!=NULL;pdev=pdev->next){ struct usb_device_descriptor *desc=&pdev->descriptor; if(desc->idVendor==0x10EE && desc->idProduct==0xAA55){ mUsbDev = pdev; } } } if(mUsbDev) { mUsbHandle = usb_open(mUsbDev); if(mUsbHandle) { usb_claim_interface(mUsbHandle,0); return true; } } return false;}void UsbHelper::CloseUsb(){ if(mUsbHandle) { usb_release_interface(mUsbHandle,0); usb_close(mUsbHandle); }}bool UsbHelper::ReadData(QString &pBuffer){ return true;}bool UsbHelper::WriteData(const QString &pBuffer){ char buff[1024]; memset(buff, 0, sizeof(buff)); int ret = usb_bulk_read(mUsbHandle, ENDPOINT_IN, buff, sizeof(buff), 100);/* if(ret < 0) { qDebug("usb_bulk_read error"); return false; }*/ qDebug("pre read:"); char buffer[1024]; QString command = pBuffer; while(command.length() > 0) { QString sendcommand = command.left(sizeof(buffer)); command.remove(0, sizeof(buffer)); int sendlen = sendcommand.length(); QByteArray ba = sendcommand.toLatin1(); memcpy(buffer, ba.data(), sendcommand.length()); ret = usb_bulk_write(mUsbHandle, ENDPOINT_OUT, buffer, sendlen, 500); if(ret < 0) { qDebug("usb_bulk_write failed"); return false; } else { qDebug("write %s success", buffer); }// QThread::sleep(1); } return true;}bool UsbHelper::WaitResponse(int pTimeout, QStringList &pResponseList){ qDebug("Enter WaitResponse"); pResponseList.clear(); QString line; QTime time; time.start();// while (time.elapsed() < pTimeout) { char readedbuffer[1000]; int readedSize = 1000; int ret = usb_bulk_read(mUsbHandle, ENDPOINT_IN, readedbuffer, sizeof(readedbuffer), 300); if (ret < 0) { qDebug("WaitResponse sub_bulk_read error"); return false; } for (int i=0; i<readedSize; i++) { quint8 byte = readedbuffer[i]; if (byte == 0x0D) { if (! line.isEmpty()) { pResponseList.append(line); line = ""; } } else { line += byte; } } if (! line.isEmpty()) { pResponseList.append(line); } //´òÓ¡ÊÕµ½µÄÐÅÏ¢¡£ foreach (QString command, pResponseList) { qDebug("**> %s", qPrintable(command)); } return pResponseList.count() > 0;}bool UsbHelper::SendCommand(const QString &pCommand, QStringList &pResponseList){ if(! WriteData(pCommand)) { qDebug("Write Data failed"); return false; } if(! WaitResponse(100, pResponseList)) { qDebug("WaitResponse failed"); return false; } if (pResponseList[0] != pCommand) { return false; } return true;}
main.cpp
#include <stdio.h>#include <stdlib.h>#include <usb.h>#include <QtCore/QCoreApplication>#include "usbhelper.h"int main(int argc, char* argv[]){ QCoreApplication app(argc, argv); UsbHelper *helper = new UsbHelper; if(! helper->InitUsb()) { qDebug("InitUsb failed"); return -1; } QStringList strList; if(! helper->SendCommand("W", strList)) { qDebug("Send W failed"); return -1; } if(! helper->SendCommand("X", strList)) { qDebug("Send X failed"); return -1; } if(! helper->SendCommand("Y", strList)) { qDebug("Send Y failed"); return -1; } QString command = "C1,00,01,FF,FF,00,00,20,02,20,02,00,04,08,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,FF,FF,FF,00,00,FD,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00"; if(! helper->WriteData(command)) { qDebug("Write Data failed"); return false; } if(! helper->WaitResponse(100, strList)) { qDebug("WaitResponse failed"); return false; } if (strList[0] != "OK") { qDebug("send brigntness error"); return false; } else { qDebug("send brigntness success"); } app.exec(); return 0;}
usb.pro
TEMPLATE = appLANGUAGE = c++QT += gui coreLIBS += -lusb -ldlHEADERS = pvcmbasethread.h pvdvdbstardevicecommunicatethread.hSOURCES = main.cpp pvcmbasethread.cpp pvdvdbstardevicecommunicatethread.cppunix { MOC_DIR = .moc OBJECTS_DIR = .obj}
libusb的简单使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。