summaryrefslogtreecommitdiffstats
path: root/commandline/library/opendevice.c
diff options
context:
space:
mode:
Diffstat (limited to 'commandline/library/opendevice.c')
-rw-r--r--commandline/library/opendevice.c203
1 files changed, 0 insertions, 203 deletions
diff --git a/commandline/library/opendevice.c b/commandline/library/opendevice.c
deleted file mode 100644
index 137f50c..0000000
--- a/commandline/library/opendevice.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Name: opendevice.c
- * Project: V-USB host-side library
- * Author: Christian Starkjohann
- * Creation Date: 2008-04-10
- * Tabsize: 4
- * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
- * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
- * This Revision: $Id: opendevice.c 740 2009-04-13 18:23:31Z cs $
- */
-
-/*
-General Description:
-The functions in this module can be used to find and open a device based on
-libusb or libusb-win32.
-*/
-
-#include <stdio.h>
-#include "opendevice.h"
-
-/* ------------------------------------------------------------------------- */
-
-#define MATCH_SUCCESS 1
-#define MATCH_FAILED 0
-#define MATCH_ABORT -1
-
-/* private interface: match text and p, return MATCH_SUCCESS, MATCH_FAILED, or MATCH_ABORT. */
-static int _shellStyleMatch(char *text, char *p)
-{
-int last, matched, reverse;
-
- for(; *p; text++, p++){
- if(*text == 0 && *p != '*')
- return MATCH_ABORT;
- switch(*p){
- case '\\':
- /* Literal match with following character. */
- p++;
- /* FALLTHROUGH */
- default:
- if(*text != *p)
- return MATCH_FAILED;
- continue;
- case '?':
- /* Match anything. */
- continue;
- case '*':
- while(*++p == '*')
- /* Consecutive stars act just like one. */
- continue;
- if(*p == 0)
- /* Trailing star matches everything. */
- return MATCH_SUCCESS;
- while(*text)
- if((matched = _shellStyleMatch(text++, p)) != MATCH_FAILED)
- return matched;
- return MATCH_ABORT;
- case '[':
- reverse = p[1] == '^';
- if(reverse) /* Inverted character class. */
- p++;
- matched = MATCH_FAILED;
- if(p[1] == ']' || p[1] == '-')
- if(*++p == *text)
- matched = MATCH_SUCCESS;
- for(last = *p; *++p && *p != ']'; last = *p)
- if (*p == '-' && p[1] != ']' ? *text <= *++p && *text >= last : *text == *p)
- matched = MATCH_SUCCESS;
- if(matched == reverse)
- return MATCH_FAILED;
- continue;
- }
- }
- return *text == 0;
-}
-
-/* public interface for shell style matching: returns 0 if fails, 1 if matches */
-static int shellStyleMatch(char *text, char *pattern)
-{
- if(pattern == NULL) /* NULL pattern is synonymous to "*" */
- return 1;
- return _shellStyleMatch(text, pattern) == MATCH_SUCCESS;
-}
-
-/* ------------------------------------------------------------------------- */
-
-int usbGetStringAscii(usb_dev_handle *dev, int index, char *buf, int buflen)
-{
-char buffer[256];
-int rval, i;
-
- if((rval = usb_get_string_simple(dev, index, buf, buflen)) >= 0) /* use libusb version if it works */
- return rval;
- if((rval = usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + index, 0x0409, buffer, sizeof(buffer), 5000)) < 0)
- return rval;
- if(buffer[1] != USB_DT_STRING){
- *buf = 0;
- return 0;
- }
- if((unsigned char)buffer[0] < rval)
- rval = (unsigned char)buffer[0];
- rval /= 2;
- /* lossy conversion to ISO Latin1: */
- for(i=1;i<rval;i++){
- if(i > buflen) /* destination buffer overflow */
- break;
- buf[i-1] = buffer[2 * i];
- if(buffer[2 * i + 1] != 0) /* outside of ISO Latin1 range */
- buf[i-1] = '?';
- }
- buf[i-1] = 0;
- return i-1;
-}
-
-/* ------------------------------------------------------------------------- */
-
-int usbOpenDevice(usb_dev_handle **device, int vendorID, char *vendorNamePattern, int productID, char *productNamePattern, char *serialNamePattern, FILE *printMatchingDevicesFp, FILE *warningsFp)
-{
-struct usb_bus *bus;
-struct usb_device *dev;
-usb_dev_handle *handle = NULL;
-int errorCode = USBOPEN_ERR_NOTFOUND;
-
- usb_find_busses();
- usb_find_devices();
- for(bus = usb_get_busses(); bus; bus = bus->next){
- for(dev = bus->devices; dev; dev = dev->next){ /* iterate over all devices on all busses */
- if((vendorID == 0 || dev->descriptor.idVendor == vendorID)
- && (productID == 0 || dev->descriptor.idProduct == productID)){
- char vendor[256], product[256], serial[256];
- int len;
- handle = usb_open(dev); /* we need to open the device in order to query strings */
- if(!handle){
- errorCode = USBOPEN_ERR_ACCESS;
- if(warningsFp != NULL)
- fprintf(warningsFp, "Warning: cannot open VID=0x%04x PID=0x%04x: %s\n", dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());
- continue;
- }
- /* now check whether the names match: */
- len = vendor[0] = 0;
- if(dev->descriptor.iManufacturer > 0){
- len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, vendor, sizeof(vendor));
- }
- if(len < 0){
- errorCode = USBOPEN_ERR_ACCESS;
- if(warningsFp != NULL)
- fprintf(warningsFp, "Warning: cannot query manufacturer for VID=0x%04x PID=0x%04x: %s\n", dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());
- }else{
- errorCode = USBOPEN_ERR_NOTFOUND;
- /* printf("seen device from vendor ->%s<-\n", vendor); */
- if(shellStyleMatch(vendor, vendorNamePattern)){
- len = product[0] = 0;
- if(dev->descriptor.iProduct > 0){
- len = usbGetStringAscii(handle, dev->descriptor.iProduct, product, sizeof(product));
- }
- if(len < 0){
- errorCode = USBOPEN_ERR_ACCESS;
- if(warningsFp != NULL)
- fprintf(warningsFp, "Warning: cannot query product for VID=0x%04x PID=0x%04x: %s\n", dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());
- }else{
- errorCode = USBOPEN_ERR_NOTFOUND;
- /* printf("seen product ->%s<-\n", product); */
- if(shellStyleMatch(product, productNamePattern)){
- len = serial[0] = 0;
- if(dev->descriptor.iSerialNumber > 0){
- len = usbGetStringAscii(handle, dev->descriptor.iSerialNumber, serial, sizeof(serial));
- }
- if(len < 0){
- errorCode = USBOPEN_ERR_ACCESS;
- if(warningsFp != NULL)
- fprintf(warningsFp, "Warning: cannot query serial for VID=0x%04x PID=0x%04x: %s\n", dev->descriptor.idVendor, dev->descriptor.idProduct, usb_strerror());
- }
- if(shellStyleMatch(serial, serialNamePattern)){
- if(printMatchingDevicesFp != NULL){
- if(serial[0] == 0){
- fprintf(printMatchingDevicesFp, "VID=0x%04x PID=0x%04x vendor=\"%s\" product=\"%s\"\n", dev->descriptor.idVendor, dev->descriptor.idProduct, vendor, product);
- }else{
- fprintf(printMatchingDevicesFp, "VID=0x%04x PID=0x%04x vendor=\"%s\" product=\"%s\" serial=\"%s\"\n", dev->descriptor.idVendor, dev->descriptor.idProduct, vendor, product, serial);
- }
- }else{
- break;
- }
- }
- }
- }
- }
- }
- usb_close(handle);
- handle = NULL;
- }
- }
- if(handle) /* we have found a deice */
- break;
- }
- if(handle != NULL){
- errorCode = 0;
- *device = handle;
- }
- if(printMatchingDevicesFp != NULL) /* never return an error for listing only */
- errorCode = 0;
- return errorCode;
-}
-
-/* ------------------------------------------------------------------------- */