Przedstawię prostą klasę w C++ wraz z przykładowym programem głównym.
Ściągamy i rozpakowujemy sterownik libusb-win32: http://sourceforge.net/projects/libusb-win32/
Podłączamy nasze urządzenie do komputera, w katalogu libusb-win32-bin-1.2.6.0/bin znajduje się inf-wizard.exe przy pomocy którego generujemy plik inf dla naszego urządzenia. Instalujemy wygenerowany sterownik, podłączamy jeszcze raz urządzenie, powinno zostać wykryte prawidłowo.
W środowisku Visual Studio tworzymy nowy projekt c++, na projekcie prawy myszy i Properties, Configuration Properties -> C/C++ -> General.
W Additional Include Directories dodajemy ścieżkę do include, w moim przypadku: C:\lib\libusb-win32-bin-1.2.6.0\include
Następnie: Configuration Properties -> Linker -> General W Additional Library Directories dodajemy ścieżkę do msvc, w moim przypadku: C:\lib\libusb-win32-bin-1.2.6.0\lib\msvc
Środowisko skonfigurowane możemy zająć się kodem.
app.h
Kod: Zaznacz cały
#pragma once
#include <lusb0_usb.h>
#include <iostream>
#define USB_CFG_VENDOR_ID 0x17c1
#define USB_CFG_DEVICE_ID 0x06ff
#define USB_LED_ON 0
#define USB_LED_OFF 1
#define USB_READ 2
#define USB_WRITE 3
#define USB_SAVE 4
class cApp{
private:
//USB
int vendor;
int product;
struct usb_bus *bus;
struct usb_device *dev;
usb_dev_handle *handle;
public:
unsigned char buffer[3];
void usbInit();
bool findUSBdevice();
bool USBread();
bool USBwrite();
bool USBsave();
bool USBLEDON();
bool USBLEDOFF();
cApp() {};
~cApp() {};
};
app.cpp
Kod: Zaznacz cały
#include "app.h"
#include <iostream>
#pragma comment(lib, "libusb")
void cApp::usbInit(){
usb_init();
vendor = USB_CFG_VENDOR_ID;
product = USB_CFG_DEVICE_ID;
handle = NULL;
}
bool cApp::findUSBdevice(){
usb_find_busses();
usb_find_devices();
for(bus = usb_get_busses(); bus; bus = bus->next){
for(dev = bus->devices; dev; dev = dev->next){
if(dev->descriptor.idVendor == vendor && dev->descriptor.idProduct == product){
handle = usb_open(dev);
return true;
}
}
}
return false;
}
bool cApp::USBread(){
int r = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_READ, 0, 0, (char *)buffer, sizeof(buffer),5000);
return r >= 0;
}
bool cApp::USBwrite(){
int r = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, USB_WRITE, 0, 0, (char *)buffer, sizeof(buffer),5000);
return r >= 0;
}
bool cApp::USBsave(){
int r = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_SAVE, 0, 0, (char *)buffer, sizeof(buffer), 5000);
return r >= 0;
}
bool cApp::USBLEDON(){
int r = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_LED_ON, 0, 0, (char *)buffer, sizeof(buffer), 5000);
return r >= 0;
}
bool cApp::USBLEDOFF(){
int r = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_LED_OFF, 0, 0, (char *)buffer, sizeof(buffer), 5000);
return r >= 0;
}
main.cpp
Kod: Zaznacz cały
#include "app.h"
int main(int argc, char *argv[]) {
cApp App;
//inicjalizacja USB
App.usbInit();
if (!App.findUSBdevice()) {
std::cout << "Nie znaleziono urządzenia USB\n";
return 1;
}
//tutaj robisz co chcesz....
//Ustawianie zawartości bufora i wysyłanie
App.buffer[0] = 1;
App.buffer[1] = 64;
App.buffer[2] = 11;
App.USBwrite();
//włączenie LED
App.USBLEDON();
//wyłączenie LED
App.USBLEDOFF();
return 0;
}