summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Dickens <christopher.a.dickens@gmail.com>2016-01-28 00:15:59 -0800
committerChris Dickens <christopher.a.dickens@gmail.com>2016-01-28 00:15:59 -0800
commitf2773136a063bc717a71d93384be1f42ef3468b0 (patch)
treeb5285d219d97accd3cfc80056f46ca402e6421b9
parentc8f71151464141bf515353e5c2aff9e56bc15657 (diff)
downloadlibusb-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.c195
-rw-r--r--libusb/version_nano.h2
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