diff options
Diffstat (limited to 'libusb/os/windows_winusb.c')
-rw-r--r-- | libusb/os/windows_winusb.c | 88 |
1 files changed, 42 insertions, 46 deletions
diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c index a623a61..8ea9697 100644 --- a/libusb/os/windows_winusb.c +++ b/libusb/os/windows_winusb.c @@ -54,11 +54,11 @@ static bool winusbx_init(struct libusb_context *ctx); static void winusbx_exit(void); static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle); static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle); -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); static int winusbx_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); @@ -70,9 +70,9 @@ static bool hid_init(struct libusb_context *ctx); static void hid_exit(void); static int hid_open(int sub_api, struct libusb_device_handle *dev_handle); static void hid_close(int sub_api, struct libusb_device_handle *dev_handle); -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); static int hid_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int hid_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); @@ -81,9 +81,9 @@ static enum libusb_transfer_status hid_copy_transfer_data(int sub_api, struct us // Composite API prototypes static int composite_open(int sub_api, struct libusb_device_handle *dev_handle); static void composite_close(int sub_api, struct libusb_device_handle *dev_handle); -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); @@ -467,7 +467,7 @@ static int get_interface_by_endpoint(struct libusb_config_descriptor *conf_desc, /* * Populate the endpoints addresses of the device_priv interface helper structs */ -static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); struct libusb_config_descriptor *conf_desc; @@ -484,7 +484,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int safe_free(priv->usb_interface[iface].endpoint); if (if_desc->bNumEndpoints == 0) { - usbi_dbg("no endpoints found for interface %d", iface); + usbi_dbg("no endpoints found for interface %u", iface); libusb_free_config_descriptor(conf_desc); priv->usb_interface[iface].current_altsetting = altsetting; return LIBUSB_SUCCESS; @@ -499,7 +499,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints; for (i = 0; i < if_desc->bNumEndpoints; i++) { priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress; - usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface); + usbi_dbg("(re)assigned endpoint %02X to interface %u", priv->usb_interface[iface].endpoint[i], iface); } libusb_free_config_descriptor(conf_desc); @@ -1595,15 +1595,10 @@ static void winusb_close(struct libusb_device_handle *dev_handle) priv->apib->close(SUB_API_NOTSET, dev_handle); } -static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int *config) +static int winusb_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); - if (priv->active_config == 0) { - *config = 0; - return LIBUSB_ERROR_NOT_FOUND; - } - *config = priv->active_config; return LIBUSB_SUCCESS; } @@ -1613,23 +1608,23 @@ static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int * does not currently expose a service that allows higher-level drivers to set * the configuration." */ -static int winusb_set_configuration(struct libusb_device_handle *dev_handle, int config) +static int winusb_set_configuration(struct libusb_device_handle *dev_handle, uint8_t config) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r = LIBUSB_SUCCESS; r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, - LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config, + LIBUSB_REQUEST_SET_CONFIGURATION, config, 0, NULL, 0, 1000); if (r == LIBUSB_SUCCESS) - priv->active_config = (uint8_t)config; + priv->active_config = config; return r; } -static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface) +static int winusb_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r; @@ -1647,7 +1642,7 @@ static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int i return r; } -static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r; @@ -1665,7 +1660,7 @@ static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_hand return r; } -static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface) +static int winusb_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2160,7 +2155,7 @@ static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle) } } -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2213,7 +2208,7 @@ static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle return LIBUSB_SUCCESS; } -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct libusb_context *ctx = HANDLE_CTX(dev_handle); struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); @@ -2244,7 +2239,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev switch (err) { case ERROR_BAD_COMMAND: // The device was disconnected - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0)); + usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(0)); return LIBUSB_ERROR_NO_DEVICE; default: // it may be that we're using the libusb0 filter driver. @@ -2287,7 +2282,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev if (r != LIBUSB_SUCCESS) return r; if (!found_filter) { - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(err)); + usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(err)); return LIBUSB_ERROR_ACCESS; } } @@ -2302,9 +2297,9 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev file_handle = handle_priv->interface_handle[0].dev_handle; if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { handle_priv->interface_handle[0].api_handle = winusb_handle; - usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface); + usbi_warn(ctx, "auto-claimed interface 0 (required to claim %u with WinUSB)", iface); } else { - usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB): %s", iface, windows_error_str(0)); + usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %u with WinUSB): %s", iface, windows_error_str(0)); return LIBUSB_ERROR_ACCESS; } } @@ -2319,19 +2314,19 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev case ERROR_ALREADY_EXISTS: // already claimed return LIBUSB_ERROR_BUSY; default: - usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); + usbi_err(ctx, "could not claim interface %u: %s", iface, windows_error_str(0)); return LIBUSB_ERROR_ACCESS; } } handle_priv->interface_handle[iface].dev_handle = handle_priv->interface_handle[0].dev_handle; } - usbi_dbg("claimed interface %d", iface); + usbi_dbg("claimed interface %u", iface); handle_priv->active_interface = iface; return LIBUSB_SUCCESS; } -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2479,7 +2474,7 @@ static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *it return LIBUSB_SUCCESS; } -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2493,7 +2488,7 @@ static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_ha return LIBUSB_ERROR_NOT_FOUND; } - if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) { + if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, altsetting)) { usbi_err(HANDLE_CTX(dev_handle), "SetCurrentAlternateSetting failed: %s", windows_error_str(0)); return LIBUSB_ERROR_IO; } @@ -3549,7 +3544,7 @@ static void hid_close(int sub_api, struct libusb_device_handle *dev_handle) } } -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3567,13 +3562,13 @@ static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_han handle_priv->interface_handle[iface].dev_handle = INTERFACE_CLAIMED; - usbi_dbg("claimed interface %d", iface); + usbi_dbg("claimed interface %u", iface); handle_priv->active_interface = iface; return LIBUSB_SUCCESS; } -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3592,7 +3587,7 @@ static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_h return LIBUSB_SUCCESS; } -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { UNUSED(sub_api); UNUSED(iface); @@ -3617,7 +3612,8 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; HANDLE hid_handle; OVERLAPPED *overlapped; - int current_interface, config; + int current_interface; + uint8_t config; size_t size; int r; @@ -3654,7 +3650,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans r = winusb_get_configuration(dev_handle, &config); if (r == LIBUSB_SUCCESS) { size = 1; - ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = (uint8_t)config; + ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = config; r = LIBUSB_COMPLETED; } break; @@ -3672,7 +3668,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans r = LIBUSB_COMPLETED; break; case LIBUSB_REQUEST_SET_INTERFACE: - r = hid_set_interface_altsetting(0, dev_handle, setup->Index, setup->Value); + r = hid_set_interface_altsetting(0, dev_handle, (uint8_t)setup->Index, (uint8_t)setup->Value); if (r == LIBUSB_SUCCESS) r = LIBUSB_COMPLETED; break; @@ -3951,7 +3947,7 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle hid_close(SUB_API_NOTSET, dev_handle); } -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3962,7 +3958,7 @@ static int composite_claim_interface(int sub_api, struct libusb_device_handle *d claim_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); } -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3973,7 +3969,7 @@ static int composite_set_interface_altsetting(int sub_api, struct libusb_device_ set_interface_altsetting(priv->usb_interface[iface].sub_api, dev_handle, iface, altsetting); } -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); |