diff options
author | Chris Dickens <christopher.a.dickens@gmail.com> | 2016-01-28 00:15:59 -0800 |
---|---|---|
committer | Chris Dickens <christopher.a.dickens@gmail.com> | 2016-01-28 00:15:59 -0800 |
commit | f2773136a063bc717a71d93384be1f42ef3468b0 (patch) | |
tree | b5285d219d97accd3cfc80056f46ca402e6421b9 | |
parent | c8f71151464141bf515353e5c2aff9e56bc15657 (diff) | |
download | libusb-f2773136a063bc717a71d93384be1f42ef3468b0.tar.gz |
WinCE: Miscellaneous changes
1) Make some variables static that are not used outside wince_usb.c
2) Minor stylistic changes to match the rest of the library source
Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
-rw-r--r-- | libusb/os/wince_usb.c | 195 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
2 files changed, 109 insertions, 88 deletions
diff --git a/libusb/os/wince_usb.c b/libusb/os/wince_usb.c index cb8d4a7..df54051 100644 --- a/libusb/os/wince_usb.c +++ b/libusb/os/wince_usb.c @@ -31,29 +31,29 @@ #include "wince_usb.h" // Global variables -uint64_t hires_frequency, hires_ticks_to_ps; -const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime +const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime int windows_version = WINDOWS_CE; +static uint64_t hires_frequency, hires_ticks_to_ps; +static HANDLE driver_handle = INVALID_HANDLE_VALUE; static int concurrent_usage = -1; -HANDLE driver_handle = INVALID_HANDLE_VALUE; /* * Converts a windows error to human readable string * uses retval as errorcode, or, if 0, use GetLastError() */ #if defined(ENABLE_LOGGING) -static char* windows_error_str(uint32_t retval) +static const char *windows_error_str(DWORD retval) { static TCHAR wErr_string[ERR_BUFFER_SIZE]; static char err_string[ERR_BUFFER_SIZE]; + DWORD error_code, format_error; DWORD size; size_t i; - uint32_t error_code, format_error; - error_code = retval?retval:GetLastError(); + error_code = retval ? retval : GetLastError(); - safe_stprintf(wErr_string, ERR_BUFFER_SIZE, _T("[%u] "), error_code); + safe_stprintf(wErr_string, ERR_BUFFER_SIZE, _T("[%u] "), (unsigned int)error_code); size = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &wErr_string[safe_tcslen(wErr_string)], @@ -62,50 +62,50 @@ static char* windows_error_str(uint32_t retval) format_error = GetLastError(); if (format_error) safe_stprintf(wErr_string, ERR_BUFFER_SIZE, - _T("Windows error code %u (FormatMessage error code %u)"), error_code, format_error); + _T("Windows error code %u (FormatMessage error code %u)"), + (unsigned int)error_code, (unsigned int)format_error); else - safe_stprintf(wErr_string, ERR_BUFFER_SIZE, _T("Unknown error code %u"), error_code); + safe_stprintf(wErr_string, ERR_BUFFER_SIZE, _T("Unknown error code %u"), (unsigned int)error_code); } else { // Remove CR/LF terminators - for (i=safe_tcslen(wErr_string)-1; ((wErr_string[i]==0x0A) || (wErr_string[i]==0x0D)); i--) { + for (i = safe_tcslen(wErr_string) - 1; ((wErr_string[i] == 0x0A) || (wErr_string[i] == 0x0D)); i--) wErr_string[i] = 0; - } } + if (WideCharToMultiByte(CP_ACP, 0, wErr_string, -1, err_string, ERR_BUFFER_SIZE, NULL, NULL) < 0) - { strcpy(err_string, "Unable to convert error string"); - } + return err_string; } #endif static struct wince_device_priv *_device_priv(struct libusb_device *dev) { - return (struct wince_device_priv *) dev->os_priv; + return (struct wince_device_priv *)dev->os_priv; } // ceusbkwrapper to libusb error code mapping -static int translate_driver_error(int error) +static int translate_driver_error(DWORD error) { switch (error) { - case ERROR_INVALID_PARAMETER: - return LIBUSB_ERROR_INVALID_PARAM; - case ERROR_CALL_NOT_IMPLEMENTED: - case ERROR_NOT_SUPPORTED: - return LIBUSB_ERROR_NOT_SUPPORTED; - case ERROR_NOT_ENOUGH_MEMORY: - return LIBUSB_ERROR_NO_MEM; - case ERROR_INVALID_HANDLE: - return LIBUSB_ERROR_NO_DEVICE; - case ERROR_BUSY: - return LIBUSB_ERROR_BUSY; - - // Error codes that are either unexpected, or have - // no suitable LIBUSB_ERROR equivalent. - case ERROR_CANCELLED: - case ERROR_INTERNAL_ERROR: - default: - return LIBUSB_ERROR_OTHER; + case ERROR_INVALID_PARAMETER: + return LIBUSB_ERROR_INVALID_PARAM; + case ERROR_CALL_NOT_IMPLEMENTED: + case ERROR_NOT_SUPPORTED: + return LIBUSB_ERROR_NOT_SUPPORTED; + case ERROR_NOT_ENOUGH_MEMORY: + return LIBUSB_ERROR_NO_MEM; + case ERROR_INVALID_HANDLE: + return LIBUSB_ERROR_NO_DEVICE; + case ERROR_BUSY: + return LIBUSB_ERROR_BUSY; + + // Error codes that are either unexpected, or have + // no suitable LIBUSB_ERROR equivalent. + case ERROR_CANCELLED: + case ERROR_INTERNAL_ERROR: + default: + return LIBUSB_ERROR_OTHER; } } @@ -147,9 +147,9 @@ static int init_device( dev->device_address = dev_addr; priv->dev = drv_dev; - if (!UkwGetDeviceDescriptor(priv->dev, &(priv->desc))) { + if (!UkwGetDeviceDescriptor(priv->dev, &(priv->desc))) r = translate_driver_error(GetLastError()); - } + return r; } @@ -159,9 +159,9 @@ static int wince_init(struct libusb_context *ctx) int r = LIBUSB_ERROR_OTHER; HANDLE semaphore; LARGE_INTEGER li_frequency; - TCHAR sem_name[11+1+8]; // strlen(libusb_init)+'\0'+(32-bit hex PID) + TCHAR sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' - _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)GetCurrentProcessId()&0xFFFFFFFF); + _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); semaphore = CreateSemaphore(NULL, 1, 1, sem_name); if (semaphore == NULL) { usbi_err(ctx, "could not create semaphore: %s", windows_error_str(0)); @@ -232,13 +232,12 @@ init_exit: // Holds semaphore here. static void wince_exit(void) { HANDLE semaphore; - TCHAR sem_name[11+1+8]; // strlen(libusb_init)+'\0'+(32-bit hex PID) + TCHAR sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' - _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)GetCurrentProcessId()&0xFFFFFFFF); + _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); semaphore = CreateSemaphore(NULL, 1, 1, sem_name); - if (semaphore == NULL) { + if (semaphore == NULL) return; - } // A successful wait brings our semaphore count to 0 (unsignaled) // => any concurent wait stalls until the semaphore release @@ -266,7 +265,7 @@ static int wince_get_device_list( struct discovered_devs **discdevs) { UKW_DEVICE devices[MAX_DEVICE_COUNT]; - struct discovered_devs * new_devices = *discdevs; + struct discovered_devs *new_devices = *discdevs; DWORD count = 0, i; struct libusb_device *dev = NULL; unsigned char bus_addr, dev_addr; @@ -281,7 +280,8 @@ static int wince_get_device_list( usbi_err(ctx, "could not get devices: %s", windows_error_str(0)); return libusbErr; } - for(i = 0; i < count; ++i) { + + for (i = 0; i < count; ++i) { release_list_offset = i; success = UkwGetDeviceAddress(devices[i], &bus_addr, &dev_addr, &session_id); if (!success) { @@ -289,6 +289,7 @@ static int wince_get_device_list( usbi_err(ctx, "could not get device address for %u: %s", (unsigned int)i, windows_error_str(0)); goto err_out; } + dev = usbi_get_device_by_session_id(ctx, session_id); if (dev) { usbi_dbg("using existing device for %u/%u (session %lu)", @@ -305,20 +306,25 @@ static int wince_get_device_list( r = LIBUSB_ERROR_NO_MEM; goto err_out; } + r = init_device(dev, devices[i], bus_addr, dev_addr); if (r < 0) goto err_out; + r = usbi_sanitize_device(dev); if (r < 0) goto err_out; } + new_devices = discovered_devs_append(new_devices, dev); if (!discdevs) { r = LIBUSB_ERROR_NO_MEM; goto err_out; } + safe_unref_device(dev); } + *discdevs = new_devices; return r; err_out: @@ -360,10 +366,11 @@ static int wince_get_active_config_descriptor( { struct wince_device_priv *priv = _device_priv(device); DWORD actualSize = len; + *host_endian = 0; - if (!UkwGetConfigDescriptor(priv->dev, UKW_ACTIVE_CONFIGURATION, buffer, len, &actualSize)) { + if (!UkwGetConfigDescriptor(priv->dev, UKW_ACTIVE_CONFIGURATION, buffer, len, &actualSize)) return translate_driver_error(GetLastError()); - } + return actualSize; } @@ -374,10 +381,11 @@ static int wince_get_config_descriptor( { struct wince_device_priv *priv = _device_priv(device); DWORD actualSize = len; + *host_endian = 0; - if (!UkwGetConfigDescriptor(priv->dev, config_index, buffer, len, &actualSize)) { + if (!UkwGetConfigDescriptor(priv->dev, config_index, buffer, len, &actualSize)) return translate_driver_error(GetLastError()); - } + return actualSize; } @@ -387,9 +395,10 @@ static int wince_get_configuration( { struct wince_device_priv *priv = _device_priv(handle->dev); UCHAR cv = 0; - if (!UkwGetConfig(priv->dev, &cv)) { + + if (!UkwGetConfig(priv->dev, &cv)) return translate_driver_error(GetLastError()); - } + (*config) = cv; return LIBUSB_SUCCESS; } @@ -403,9 +412,9 @@ static int wince_set_configuration( // This should correspond to the "unconfigured state" required by // libusb when the specified configuration is -1. UCHAR cv = (config < 0) ? 0 : config; - if (!UkwSetConfig(priv->dev, cv)) { + if (!UkwSetConfig(priv->dev, cv)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -414,9 +423,10 @@ static int wince_claim_interface( int interface_number) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwClaimInterface(priv->dev, interface_number)) { + + if (!UkwClaimInterface(priv->dev, interface_number)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -425,12 +435,13 @@ static int wince_release_interface( int interface_number) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwSetInterfaceAlternateSetting(priv->dev, interface_number, 0)) { + + if (!UkwSetInterfaceAlternateSetting(priv->dev, interface_number, 0)) return translate_driver_error(GetLastError()); - } - if (!UkwReleaseInterface(priv->dev, interface_number)) { + + if (!UkwReleaseInterface(priv->dev, interface_number)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -439,9 +450,10 @@ static int wince_set_interface_altsetting( int interface_number, int altsetting) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwSetInterfaceAlternateSetting(priv->dev, interface_number, altsetting)) { + + if (!UkwSetInterfaceAlternateSetting(priv->dev, interface_number, altsetting)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -450,12 +462,13 @@ static int wince_clear_halt( unsigned char endpoint) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwClearHaltHost(priv->dev, endpoint)) { + + if (!UkwClearHaltHost(priv->dev, endpoint)) return translate_driver_error(GetLastError()); - } - if (!UkwClearHaltDevice(priv->dev, endpoint)) { + + if (!UkwClearHaltDevice(priv->dev, endpoint)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -463,9 +476,10 @@ static int wince_reset_device( struct libusb_device_handle *handle) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwResetDevice(priv->dev)) { + + if (!UkwResetDevice(priv->dev)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -475,9 +489,10 @@ static int wince_kernel_driver_active( { struct wince_device_priv *priv = _device_priv(handle->dev); BOOL result = FALSE; - if (!UkwKernelDriverActive(priv->dev, interface_number, &result)) { + + if (!UkwKernelDriverActive(priv->dev, interface_number, &result)) return translate_driver_error(GetLastError()); - } + return result ? 1 : 0; } @@ -486,9 +501,10 @@ static int wince_detach_kernel_driver( int interface_number) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwDetachKernelDriver(priv->dev, interface_number)) { + + if (!UkwDetachKernelDriver(priv->dev, interface_number)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -497,22 +513,25 @@ static int wince_attach_kernel_driver( int interface_number) { struct wince_device_priv *priv = _device_priv(handle->dev); - if (!UkwAttachKernelDriver(priv->dev, interface_number)) { + + if (!UkwAttachKernelDriver(priv->dev, interface_number)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } static void wince_destroy_device(struct libusb_device *dev) { struct wince_device_priv *priv = _device_priv(dev); + UkwReleaseDeviceList(driver_handle, &priv->dev, 1); } static void wince_clear_transfer_priv(struct usbi_transfer *itransfer) { - struct wince_transfer_priv *transfer_priv = (struct wince_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct wince_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); struct winfd wfd = fd_to_winfd(transfer_priv->pollable_fd.fd); + // No need to cancel transfer as it is either complete or abandoned wfd.itransfer = NULL; CloseHandle(wfd.handle); @@ -523,11 +542,11 @@ static int wince_cancel_transfer(struct usbi_transfer *itransfer) { struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct wince_device_priv *priv = _device_priv(transfer->dev_handle->dev); - struct wince_transfer_priv *transfer_priv = (struct wince_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct wince_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - if (!UkwCancelTransfer(priv->dev, transfer_priv->pollable_fd.overlapped, UKW_TF_NO_WAIT)) { + if (!UkwCancelTransfer(priv->dev, transfer_priv->pollable_fd.overlapped, UKW_TF_NO_WAIT)) return translate_driver_error(GetLastError()); - } + return LIBUSB_SUCCESS; } @@ -535,7 +554,7 @@ static int wince_submit_control_or_bulk_transfer(struct usbi_transfer *itransfer { struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct wince_transfer_priv *transfer_priv = (struct wince_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct wince_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); struct wince_device_priv *priv = _device_priv(transfer->dev_handle->dev); BOOL direction_in, ret; struct winfd wfd; @@ -577,6 +596,7 @@ static int wince_submit_control_or_bulk_transfer(struct usbi_transfer *itransfer ret = UkwIssueBulkTransfer(priv->dev, flags, transfer->endpoint, transfer->buffer, transfer->length, &transfer->actual_length, wfd.overlapped); } + if (!ret) { int libusbErr = translate_driver_error(GetLastError()); usbi_err(ctx, "UkwIssue%sTransfer failed: error %u", @@ -702,12 +722,12 @@ static void wince_transfer_callback( status = LIBUSB_TRANSFER_ERROR; break; } + wince_clear_transfer_priv(itransfer); - if (status == LIBUSB_TRANSFER_CANCELLED) { + if (status == LIBUSB_TRANSFER_CANCELLED) usbi_handle_transfer_cancellation(itransfer); - } else { + else usbi_handle_transfer_completion(itransfer, (enum libusb_transfer_status)status); - } } static void wince_handle_callback( @@ -739,15 +759,15 @@ static int wince_handle_events( BOOL found = FALSE; struct usbi_transfer *transfer; DWORD io_size, io_result; + int r = LIBUSB_SUCCESS; usbi_mutex_lock(&ctx->open_devs_lock); for (i = 0; i < nfds && num_ready > 0; i++) { usbi_dbg("checking fd %d with revents = %04x", fds[i].fd, fds[i].revents); - if (!fds[i].revents) { + if (!fds[i].revents) continue; - } num_ready--; @@ -773,17 +793,17 @@ static int wince_handle_events( wince_handle_callback(transfer, io_result, io_size); } else if (found) { usbi_err(ctx, "matching transfer for fd %d has not completed", fds[i]); - usbi_mutex_unlock(&ctx->open_devs_lock); - return LIBUSB_ERROR_OTHER; + r = LIBUSB_ERROR_OTHER; + break; } else { usbi_err(ctx, "could not find a matching transfer for fd %d", fds[i]); - usbi_mutex_unlock(&ctx->open_devs_lock); - return LIBUSB_ERROR_NOT_FOUND; + r = LIBUSB_ERROR_NOT_FOUND; + break; } } - usbi_mutex_unlock(&ctx->open_devs_lock); - return LIBUSB_SUCCESS; + + return r; } /* @@ -795,6 +815,7 @@ static int wince_clock_gettime(int clk_id, struct timespec *tp) ULARGE_INTEGER rtime; FILETIME filetime; SYSTEMTIME st; + switch(clk_id) { case USBI_CLOCK_MONOTONIC: if (hires_frequency != 0 && QueryPerformanceCounter(&hires_counter)) { diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 91cf072..b75c7f9 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11041 +#define LIBUSB_NANO 11042 |