libusb-compat: get rid of usbbus_dev_handle
This commit is contained in:
parent
1a6217060a
commit
2334a35202
@ -76,16 +76,6 @@
|
||||
ent->next = NULL; \
|
||||
} while (0)
|
||||
|
||||
struct usbbus_dev_handle {
|
||||
libusb_device_handle *handle;
|
||||
struct usbbus_device *device;
|
||||
/* libusb-0.1 is buggy w.r.t. interface claiming. it allows you to claim
|
||||
* multiple interfaces but only tracks the most recently claimed one,
|
||||
* which is used for usb_set_altinterface(). we clone the buggy behaviour
|
||||
* here. */
|
||||
int last_claimed_interface;
|
||||
};
|
||||
|
||||
#define USBBUS_DT_CONFIG_SIZE 9
|
||||
#define USBBUS_DT_INTERFACE_SIZE 9
|
||||
#define USBBUS_DT_ENDPOINT_AUDIO_SIZE 9
|
||||
@ -640,53 +630,40 @@ int usbbus_prepare(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
usbbus_dev_handle *usbbus_open(struct usbbus_device *dev)
|
||||
usbbus_device_handle *usbbus_open(struct usbbus_device *dev)
|
||||
{
|
||||
int r;
|
||||
usbbus_dev_handle *udev = malloc(sizeof(*udev));
|
||||
if (!udev)
|
||||
return NULL;
|
||||
|
||||
r = libusb_open((libusb_device *) dev->dev, &udev->handle);
|
||||
usbbus_device_handle *udev;
|
||||
r = libusb_open((libusb_device *) dev->dev, (libusb_device_handle **)&udev);
|
||||
if (r < 0) {
|
||||
free(udev);
|
||||
errno = libusb_to_errno(r);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
udev->last_claimed_interface = -1;
|
||||
udev->device = dev;
|
||||
return udev;
|
||||
return (usbbus_device_handle *)udev;
|
||||
}
|
||||
|
||||
int usbbus_close(usbbus_dev_handle *dev)
|
||||
void usbbus_close(usbbus_device_handle *dev)
|
||||
{
|
||||
libusb_close(dev->handle);
|
||||
free(dev);
|
||||
return 0;
|
||||
libusb_close((libusb_device_handle *)dev);
|
||||
}
|
||||
|
||||
int usbbus_set_configuration(usbbus_dev_handle *dev, int configuration)
|
||||
int usbbus_set_configuration(usbbus_device_handle *dev, int configuration)
|
||||
{
|
||||
return compat_err(libusb_set_configuration(dev->handle, configuration));
|
||||
return compat_err(libusb_set_configuration((libusb_device_handle *)dev, configuration));
|
||||
}
|
||||
|
||||
int usbbus_get_string_simple(usbbus_dev_handle *dev, int index, char *buf, size_t buflen)
|
||||
int usbbus_get_string_simple(usbbus_device_handle *dev, int index, char *buf, size_t buflen)
|
||||
{
|
||||
int r;
|
||||
r = libusb_get_string_descriptor_ascii(dev->handle, index & 0xff,
|
||||
return libusb_get_string_descriptor_ascii((libusb_device_handle *)dev, index & 0xff,
|
||||
(unsigned char *) buf, (int) buflen);
|
||||
if (r >= 0)
|
||||
return r;
|
||||
return compat_err(r);
|
||||
}
|
||||
|
||||
static int usbbus_bulk_io(usbbus_dev_handle *dev, int ep, unsigned char *bytes,
|
||||
static int usbbus_bulk_io(usbbus_device_handle *dev, int ep, unsigned char *bytes,
|
||||
int size, int timeout)
|
||||
{
|
||||
int actual_length;
|
||||
int r;
|
||||
r = libusb_bulk_transfer(dev->handle, ep & 0xff, bytes, size,
|
||||
r = libusb_bulk_transfer((libusb_device_handle *)dev, ep & 0xff, bytes, size,
|
||||
&actual_length, timeout);
|
||||
|
||||
/* if we timed out but did transfer some data, report as successful short
|
||||
@ -697,46 +674,39 @@ static int usbbus_bulk_io(usbbus_dev_handle *dev, int ep, unsigned char *bytes,
|
||||
return compat_err(r);
|
||||
}
|
||||
|
||||
int usbbus_bulk_read(usbbus_dev_handle *dev, int ep, char *bytes, int size, int timeout)
|
||||
int usbbus_bulk_read(usbbus_device_handle *dev, int ep, char *bytes, int size, int timeout)
|
||||
{
|
||||
return usbbus_bulk_io(dev, ep, (unsigned char *) bytes, size, timeout);
|
||||
}
|
||||
|
||||
int usbbus_bulk_write(usbbus_dev_handle *dev, int ep, const char *bytes, int size, int timeout)
|
||||
int usbbus_bulk_write(usbbus_device_handle *dev, int ep, const char *bytes, int size, int timeout)
|
||||
{
|
||||
return usbbus_bulk_io(dev, ep, (unsigned char *)bytes, size, timeout);
|
||||
}
|
||||
|
||||
int usbbus_claim_interface(usbbus_dev_handle *dev, int interface)
|
||||
int usbbus_claim_interface(usbbus_device_handle *dev, int interface)
|
||||
{
|
||||
int r;
|
||||
r = libusb_claim_interface(dev->handle, interface);
|
||||
r = libusb_claim_interface((libusb_device_handle *)dev, interface);
|
||||
if (r == 0) {
|
||||
dev->last_claimed_interface = interface;
|
||||
return 0;
|
||||
}
|
||||
return compat_err(r);
|
||||
}
|
||||
|
||||
int usbbus_release_interface(usbbus_dev_handle *dev, int interface)
|
||||
int usbbus_release_interface(usbbus_device_handle *dev, int interface)
|
||||
{
|
||||
int r;
|
||||
r = libusb_release_interface(dev->handle, interface);
|
||||
if (r == 0)
|
||||
dev->last_claimed_interface = -1;
|
||||
return compat_err(r);
|
||||
return compat_err(libusb_release_interface((libusb_device_handle *)dev, interface));
|
||||
}
|
||||
|
||||
int usbbus_set_altinterface(usbbus_dev_handle *dev, int alternate)
|
||||
int usbbus_set_interface_alt_setting(usbbus_device_handle *dev, int interface, int alternate)
|
||||
{
|
||||
if (dev->last_claimed_interface < 0)
|
||||
return -(errno = EINVAL);
|
||||
return compat_err(libusb_set_interface_alt_setting(dev->handle, dev->last_claimed_interface, alternate));
|
||||
return libusb_set_interface_alt_setting((libusb_device_handle *)dev, interface, alternate);
|
||||
}
|
||||
|
||||
int usbbus_reset(usbbus_dev_handle *dev)
|
||||
int usbbus_reset(usbbus_device_handle *dev)
|
||||
{
|
||||
return compat_err(libusb_reset_device(dev->handle));
|
||||
return compat_err(libusb_reset_device((libusb_device_handle *)dev));
|
||||
}
|
||||
|
||||
struct usbbus_bus *usbbus_get_busses(void)
|
||||
|
||||
@ -60,8 +60,8 @@ int usbbus_prepare(void);
|
||||
#define USBBUS_PATH_MAX 4096
|
||||
#endif
|
||||
|
||||
struct usbbus_dev_handle;
|
||||
typedef struct usbbus_dev_handle usbbus_dev_handle;
|
||||
struct usbbus_device_handle;
|
||||
typedef struct usbbus_device_handle usbbus_device_handle;
|
||||
|
||||
struct usbbus_endpoint_descriptor {
|
||||
uint8_t bLength;
|
||||
@ -166,16 +166,16 @@ struct usbbus_bus {
|
||||
};
|
||||
|
||||
|
||||
usbbus_dev_handle *usbbus_open(struct usbbus_device *dev);
|
||||
int usbbus_close(usbbus_dev_handle *dev);
|
||||
int usbbus_set_configuration(usbbus_dev_handle *dev, int configuration);
|
||||
int usbbus_get_string_simple(usbbus_dev_handle *dev, int index, char *buf, size_t buflen);
|
||||
int usbbus_bulk_read(usbbus_dev_handle *dev, int ep, char *bytes, int size, int timeout);
|
||||
int usbbus_bulk_write(usbbus_dev_handle *dev, int ep, const char *bytes, int size, int timeout);
|
||||
int usbbus_claim_interface(usbbus_dev_handle *dev, int interface);
|
||||
int usbbus_release_interface(usbbus_dev_handle *dev, int interface);
|
||||
int usbbus_set_altinterface(usbbus_dev_handle *dev, int alternate);
|
||||
int usbbus_reset(usbbus_dev_handle *dev);
|
||||
usbbus_device_handle *usbbus_open(struct usbbus_device *dev);
|
||||
void usbbus_close(usbbus_device_handle *dev);
|
||||
int usbbus_set_configuration(usbbus_device_handle *dev, int configuration);
|
||||
int usbbus_get_string_simple(usbbus_device_handle *dev, int index, char *buf, size_t buflen);
|
||||
int usbbus_bulk_read(usbbus_device_handle *dev, int ep, char *bytes, int size, int timeout);
|
||||
int usbbus_bulk_write(usbbus_device_handle *dev, int ep, const char *bytes, int size, int timeout);
|
||||
int usbbus_claim_interface(usbbus_device_handle *dev, int interface);
|
||||
int usbbus_release_interface(usbbus_device_handle *dev, int interface);
|
||||
int usbbus_set_interface_alt_setting(usbbus_device_handle *dev, int interface, int alternate);
|
||||
int usbbus_reset(usbbus_device_handle *dev);
|
||||
struct usbbus_bus *usbbus_get_busses(void);
|
||||
|
||||
#endif // __NFC_BUS_USB_H__
|
||||
|
||||
@ -172,7 +172,7 @@ struct acr122_usb_apdu_frame {
|
||||
|
||||
// Internal data struct
|
||||
struct acr122_usb_data {
|
||||
usbbus_dev_handle *pudh;
|
||||
usbbus_device_handle *pudh;
|
||||
uint32_t uiEndPointIn;
|
||||
uint32_t uiEndPointOut;
|
||||
uint32_t uiMaxPacketSize;
|
||||
@ -322,7 +322,7 @@ acr122_usb_scan(const nfc_context *context, nfc_connstring connstrings[], const
|
||||
continue;
|
||||
}
|
||||
|
||||
usbbus_dev_handle *udev = usbbus_open(dev);
|
||||
usbbus_device_handle *udev = usbbus_open(dev);
|
||||
if (udev == NULL)
|
||||
continue;
|
||||
|
||||
@ -350,7 +350,7 @@ struct acr122_usb_descriptor {
|
||||
};
|
||||
|
||||
static bool
|
||||
acr122_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_dev_handle *udev, char *buffer, size_t len)
|
||||
acr122_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_device_handle *udev, char *buffer, size_t len)
|
||||
{
|
||||
*buffer = '\0';
|
||||
|
||||
@ -426,7 +426,7 @@ acr122_usb_open(const nfc_context *context, const nfc_connstring connstring)
|
||||
goto free_mem;
|
||||
}
|
||||
|
||||
res = usbbus_set_altinterface(data.pudh, 0);
|
||||
res = usbbus_set_interface_alt_setting(data.pudh, 0, 0);
|
||||
if (res < 0) {
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "Unable to set alternate setting on USB interface (%s)", usbbus_strerror(res));
|
||||
usbbus_close(data.pudh);
|
||||
@ -492,9 +492,7 @@ acr122_usb_close(nfc_device *pnd)
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "Unable to release USB interface (%s)", usbbus_strerror(res));
|
||||
}
|
||||
|
||||
if ((res = usbbus_close(DRIVER_DATA(pnd)->pudh)) < 0) {
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "Unable to close USB connection (%s)", usbbus_strerror(res));
|
||||
}
|
||||
usbbus_close(DRIVER_DATA(pnd)->pudh);
|
||||
pn53x_data_free(pnd);
|
||||
nfc_device_free(pnd);
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ typedef enum {
|
||||
|
||||
// Internal data struct
|
||||
struct pn53x_usb_data {
|
||||
usbbus_dev_handle *pudh;
|
||||
usbbus_device_handle *pudh;
|
||||
pn53x_usb_model model;
|
||||
uint32_t uiEndPointIn;
|
||||
uint32_t uiEndPointOut;
|
||||
@ -84,7 +84,7 @@ struct pn53x_usb_data {
|
||||
const struct pn53x_io pn53x_usb_io;
|
||||
|
||||
// Prototypes
|
||||
bool pn53x_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_dev_handle *udev, char *buffer, size_t len);
|
||||
bool pn53x_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_device_handle *udev, char *buffer, size_t len);
|
||||
int pn53x_usb_init(nfc_device *pnd);
|
||||
|
||||
static int
|
||||
@ -204,7 +204,7 @@ pn53x_usb_scan(const nfc_context *context, nfc_connstring connstrings[], const s
|
||||
continue;
|
||||
}
|
||||
|
||||
usbbus_dev_handle *udev = usbbus_open(dev);
|
||||
usbbus_device_handle *udev = usbbus_open(dev);
|
||||
if (udev == NULL)
|
||||
continue;
|
||||
|
||||
@ -240,7 +240,7 @@ struct pn53x_usb_descriptor {
|
||||
};
|
||||
|
||||
bool
|
||||
pn53x_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_dev_handle *udev, char *buffer, size_t len)
|
||||
pn53x_usb_get_usb_device_name(struct usbbus_device *dev, usbbus_device_handle *udev, char *buffer, size_t len)
|
||||
{
|
||||
*buffer = '\0';
|
||||
|
||||
@ -412,9 +412,7 @@ pn53x_usb_close(nfc_device *pnd)
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "Unable to release USB interface (%s)", usbbus_strerror(res));
|
||||
}
|
||||
|
||||
if ((res = usbbus_close(DRIVER_DATA(pnd)->pudh)) < 0) {
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "Unable to close USB connection (%s)", usbbus_strerror(res));
|
||||
}
|
||||
usbbus_close(DRIVER_DATA(pnd)->pudh);
|
||||
pn53x_data_free(pnd);
|
||||
nfc_device_free(pnd);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user