/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. */ #ifndef _WR_LIBUSB_H #define _WR_LIBUSB_H #ifdef __cplusplus extern "C" { #endif /* debug levels */ #define DEBUG_NONE 0 #define DEBUG_ERRORS 1 #define DEBUG_RECOVERABLE 2 #define DEBUG_FUNCTIONS 3 #define DEBUG_DETAILED 4 #define DEBUG_DATA_DUMP 5 #define MOD_SUFFIX ".so" /* consistent with the Makefile VER and mapfiles */ #define LIBUSB_WRAPPER_VERSION "1.1" #define PLUGIN_EXCLUSIVE 2 #define MAX_PLUGINS 10 #define MAX_VERSION_LEN 512 #define SUCCESS 0 #define FAILURE -1 #define DSYM (dlsym((handle), (symbol))) /* default plugin dir */ #define PLUGIN_DIR "/usr/lib/libusb_plugins" #define USB_OPEN 0 #define USB_CLOSE 1 #define USB_GET_STRING 2 #define USB_GET_STRING_SIMPLE 3 #define USB_GET_DESCRIPTOR_BY_ENDPOINT 4 #define USB_GET_DESCRIPTOR 5 #define USB_BULK_WRITE 6 #define USB_BULK_READ 7 #define USB_INTERRUPT_WRITE 8 #define USB_INTERRUPT_READ 9 #define USB_CONTROL_MSG 10 #define USB_SET_CONFIGURATION 11 #define USB_CLAIM_INTERFACE 12 #define USB_RELEASE_INTERFACE 13 #define USB_SET_ALTINTERFACE 14 #define USB_RESETEP 15 #define USB_CLEAR_HALT 16 #define USB_RESET 17 #define USB_INIT 18 #define USB_SET_DEBUG 19 #define USB_FIND_BUSSES 20 #define USB_FIND_DEVICES 21 #define USB_DEVICE 22 #define USB_GET_BUSSES 23 #define USB_STRERROR 24 #define USB_BUSSES 25 #define LIBUSB_INIT 26 #define LIBUSB_FINI 27 #define LIBUSB_VERSION 28 char *sym_names[] = { "usb_open", /* 0 */ "usb_close", /* 1 */ "usb_get_string", /* 2 */ "usb_get_string_simple", /* 3 */ "usb_get_descriptor_by_endpoint", /* 4 */ "usb_get_descriptor", /* 5 */ "usb_bulk_write", /* 6 */ "usb_bulk_read", /* 7 */ "usb_interrupt_write", /* 8 */ "usb_interrupt_read", /* 9 */ "usb_control_msg", /* 10 */ "usb_set_configuration", /* 11 */ "usb_claim_interface", /* 12 */ "usb_release_interface", /* 13 */ "usb_set_altinterface", /* 14 */ "usb_resetep", /* 15 */ "usb_clear_halt", /* 16 */ "usb_reset", /* 17 */ "usb_init", /* 18 */ "usb_set_debug", /* 19 */ "usb_find_busses", /* 20 */ "usb_find_devices", /* 21 */ "usb_device", /* 22 */ "usb_get_busses", /* 23 */ "usb_strerror", /* 24 */ "usb_busses", /* 25 */ "libusb_init", /* 26 */ "libusb_fini", /* 27 */ "libusb_version" /* 28 */ }; #define USB_OPEN_CAST (struct usb_dev_handle *(*) \ (struct usb_device *)) #define USB_CLOSE_CAST (int (*)(usb_dev_handle *)) #define USB_GET_STRING_CAST (int (*) (usb_dev_handle *, int, \ int, char *, size_t)) #define USB_GET_STRING_SIMPLE_CAST (int (*) (usb_dev_handle *, int, \ char *, size_t)) #define USB_GET_DESCRIPTOR_BY_ENDPOINT_CAST (int (*) (usb_dev_handle *, int, \ unsigned char, unsigned char, \ void *, int)) #define USB_GET_DESCRIPTOR_CAST (int (*)(usb_dev_handle *, unsigned \ char, unsigned char, void *, int)) #define USB_BULK_WRITE_CAST (int (*) (usb_dev_handle *, int, \ char *, int, int)) #define USB_BULK_READ_CAST (int (*) (usb_dev_handle *, int, \ char *, int, int)) #define USB_INTERRUPT_READ_CAST (int (*) (usb_dev_handle *, \ int, char *, int, int)) #define USB_INTERRUPT_WRITE_CAST (int (*) (usb_dev_handle *, int, \ char *, int, int)) #define USB_CONTROL_MSG_CAST (int (*)(usb_dev_handle *, int, int, \ int, int, char *, int, int)) #define USB_SET_CONFIGURATION_CAST (int (*)(usb_dev_handle *, int)) #define USB_CLAIM_INTERFACE_CAST (int (*)(usb_dev_handle *, int)) #define USB_RELEASE_INTERFACE_CAST (int (*)(usb_dev_handle *, int)) #define USB_SET_ALTINTERFACE_CAST (int (*)(usb_dev_handle *, int)) #define USB_RESETEP_CAST (int (*)(usb_dev_handle *, \ unsigned int)) #define USB_CLEAR_HALT_CAST (int (*)(usb_dev_handle *, \ unsigned int)) #define USB_RESET_CAST (int (*)(usb_dev_handle *)) #define USB_INIT_CAST (void (*)(void)) #define USB_SET_DEBUG_CAST (void (*)(int)) #define USB_FIND_BUSSES_CAST (int (*)(void)) #define USB_FIND_DEVICES_CAST (int (*) (void)) #define USB_DEVICE_CAST (struct usb_device *(*) \ (usb_dev_handle *)) #define USB_STRERROR_CAST (char *(*)(void)) #define USB_BUSSES_CAST (struct usb_bus **) #define LIBUSB_INIT_CAST (int (*)(void)) #define LIBUSB_FINI_CAST (int (*)(void)) #define NUM_SYMS (unsigned int)(sizeof (sym_names) / \ sizeof (char *)) /* * wrapper info structure - maintains wrapper state * and plugins data */ typedef struct wrapper_info { int ploaded; /* highest plugin index */ int last_pindex; /* last plugin index used by app */ int active_index; /* used to indicate single plugin */ int exclusive_index; /* if set then this plugin is excl */ struct usb_bus *head_busp; /* wrapper combined usb_busses ptr */ } wrapper_info_t; /* * this is the dev_handles struct that each plugin * maintains a linked list of */ typedef struct dev_handles { struct usb_dev_handle *dev; /* usb.h dev handle */ struct usb_device *device; /* usb.h device pointer */ struct dev_handles *next; /* for linked list */ struct dev_handles *prev; } dev_handles_t; /* * plugin state info */ typedef struct plugin_info { char *p_name; /* module name */ char *p_path; /* module path */ void *p_handle; /* handle to plugin */ int exclusive_flag; /* plugin exclusivity */ int active_flag; /* is plugin single */ char *prefix; /* libusb_prefix symbol val */ dev_handles_t *dev_handles; /* list of open dev hdls */ struct usb_bus *busp; /* plugin bus pointer */ void *sym_hdl[NUM_SYMS]; /* plugin symbols */ } plugin_info_t; #ifdef __cplusplus } #endif #endif /* _WR_LIBUSB_H */