libusb unter Windows mit PureBasic
Verfasst: 22.05.2008 18:20
Hallo,
ich versuche gerade folgenden Code zur Ansteuerung der "libusb" nach PureBasic zu konvertieren.
Was ich bis jetzt habe ist:
Leider habe ich keine Ahnung wie folgende Zeilen nach PB portiert werden können.
Kann mir hier jemand helfen und hat das schon mal jemand gemacht?
Die Suchfunktion hat mit "libusb" leider nichts brauchbares ausgespuckt.
Gruß Rene
ich versuche gerade folgenden Code zur Ansteuerung der "libusb" nach PureBasic zu konvertieren.
Code: Alles auswählen
static int usbOpenDevice(usb_dev_handle **device, int vendor, char *vendorName, int product, char *productName)
{
struct usb_bus *bus;
struct usb_device *dev;
usb_dev_handle *handle = NULL;
int errorCode = USB_ERROR_NOTFOUND;
static int didUsbInit = 0;
if(!didUsbInit){
didUsbInit = 1;
usb_init();
}
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){
char string[256];
int len;
handle = usb_open(dev); /* we need to open the device in order to query strings */
if(!handle){
errorCode = USB_ERROR_ACCESS;
fprintf(stderr, "Warning: cannot open USB device: %s\n", usb_strerror());
continue;
}
if(vendorName == NULL && productName == NULL){ /* name does not matter */
break;
}
/* now check whether the names match: */
len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, 0x0409, string, sizeof(string));
if(len < 0){
errorCode = USB_ERROR_IO;
fprintf(stderr, "Warning: cannot query manufacturer for device: %s\n", usb_strerror());
}else{
errorCode = USB_ERROR_NOTFOUND;
/* fprintf(stderr, "seen device from vendor ->%s<-\n", string); */
if(strcmp(string, vendorName) == 0){
len = usbGetStringAscii(handle, dev->descriptor.iProduct, 0x0409, string, sizeof(string));
if(len < 0){
errorCode = USB_ERROR_IO;
fprintf(stderr, "Warning: cannot query product for device: %s\n", usb_strerror());
}else{
errorCode = USB_ERROR_NOTFOUND;
/* fprintf(stderr, "seen product ->%s<-\n", string); */
if(strcmp(string, productName) == 0)
break;
}
}
}
usb_close(handle);
handle = NULL;
}
}
if(handle)
break;
}
if(handle != NULL){
errorCode = 0;
*device = handle;
}
return errorCode;
}
Code: Alles auswählen
*lib = OpenLibrary(#PB_Any, "libusb0.dll")
If *lib
Debug "open lib"
Debug CallFunction(*lib, "usb_init")
Anz_Bus = CallFunction(*lib, "usb_find_busses")
Debug Anz_Bus
Anz_Dev = CallFunction(*lib, "usb_find_devices")
Debug Anz_Dev
CloseLibrary(*lib)
Debug "close lib"
EndIf
End
Code: Alles auswählen
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){
Die Suchfunktion hat mit "libusb" leider nichts brauchbares ausgespuckt.
Gruß Rene