summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Dickens <christopher.a.dickens@gmail.com>2020-01-13 12:23:02 -0800
committerChris Dickens <christopher.a.dickens@gmail.com>2020-01-13 12:36:59 -0800
commit88ded79caa4c388739de140d709ccba6397ddd14 (patch)
tree72d0a757bb42fd98d7f171504a602c47042107dc
parent0bf84e4d516c4488e5fcf4b10e3a7263c13019e1 (diff)
downloadlibusb-88ded79caa4c388739de140d709ccba6397ddd14.tar.gz
examples: testlibusb: Formatting, whitespace and functional cleanup
Make the coding style and whitespace consistent with the rest of the library source code. In the print_device() function, the 'level' argument is unnecessary, so remove it and the associated space padding. Switch to use printf() directly instead of formatting the description into a single buffer. This not only simplifies the code but avoids truncating the description for devices with larger descriptor strings. Make the output formatting consistent by lining up all the printed values and using the same notation for all hexadecimal values. Inspired by PR #452, enable printing all available BOS device capability descriptors, not just the first one. Closes #452 Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
-rwxr-xr-xexamples/testlibusb.c179
-rw-r--r--libusb/version_nano.h2
2 files changed, 84 insertions, 97 deletions
diff --git a/examples/testlibusb.c b/examples/testlibusb.c
index 6501a12..3eb0fc6 100755
--- a/examples/testlibusb.c
+++ b/examples/testlibusb.c
@@ -30,9 +30,9 @@ int verbose = 0;
static void print_endpoint_comp(const struct libusb_ss_endpoint_companion_descriptor *ep_comp)
{
printf(" USB 3.0 Endpoint Companion:\n");
- printf(" bMaxBurst: %d\n", ep_comp->bMaxBurst);
- printf(" bmAttributes: 0x%02x\n", ep_comp->bmAttributes);
- printf(" wBytesPerInterval: %d\n", ep_comp->wBytesPerInterval);
+ printf(" bMaxBurst: %u\n", ep_comp->bMaxBurst);
+ printf(" bmAttributes: %02xh\n", ep_comp->bmAttributes);
+ printf(" wBytesPerInterval: %u\n", ep_comp->wBytesPerInterval);
}
static void print_endpoint(const struct libusb_endpoint_descriptor *endpoint)
@@ -40,21 +40,20 @@ static void print_endpoint(const struct libusb_endpoint_descriptor *endpoint)
int i, ret;
printf(" Endpoint:\n");
- printf(" bEndpointAddress: %02xh\n", endpoint->bEndpointAddress);
- printf(" bmAttributes: %02xh\n", endpoint->bmAttributes);
- printf(" wMaxPacketSize: %d\n", endpoint->wMaxPacketSize);
- printf(" bInterval: %d\n", endpoint->bInterval);
- printf(" bRefresh: %d\n", endpoint->bRefresh);
- printf(" bSynchAddress: %d\n", endpoint->bSynchAddress);
+ printf(" bEndpointAddress: %02xh\n", endpoint->bEndpointAddress);
+ printf(" bmAttributes: %02xh\n", endpoint->bmAttributes);
+ printf(" wMaxPacketSize: %u\n", endpoint->wMaxPacketSize);
+ printf(" bInterval: %u\n", endpoint->bInterval);
+ printf(" bRefresh: %u\n", endpoint->bRefresh);
+ printf(" bSynchAddress: %u\n", endpoint->bSynchAddress);
for (i = 0; i < endpoint->extra_length;) {
if (LIBUSB_DT_SS_ENDPOINT_COMPANION == endpoint->extra[i + 1]) {
struct libusb_ss_endpoint_companion_descriptor *ep_comp;
ret = libusb_get_ss_endpoint_companion_descriptor(NULL, endpoint, &ep_comp);
- if (LIBUSB_SUCCESS != ret) {
+ if (LIBUSB_SUCCESS != ret)
continue;
- }
print_endpoint_comp(ep_comp);
@@ -70,13 +69,13 @@ static void print_altsetting(const struct libusb_interface_descriptor *interface
uint8_t i;
printf(" Interface:\n");
- printf(" bInterfaceNumber: %d\n", interface->bInterfaceNumber);
- printf(" bAlternateSetting: %d\n", interface->bAlternateSetting);
- printf(" bNumEndpoints: %d\n", interface->bNumEndpoints);
- printf(" bInterfaceClass: %d\n", interface->bInterfaceClass);
- printf(" bInterfaceSubClass: %d\n", interface->bInterfaceSubClass);
- printf(" bInterfaceProtocol: %d\n", interface->bInterfaceProtocol);
- printf(" iInterface: %d\n", interface->iInterface);
+ printf(" bInterfaceNumber: %u\n", interface->bInterfaceNumber);
+ printf(" bAlternateSetting: %u\n", interface->bAlternateSetting);
+ printf(" bNumEndpoints: %u\n", interface->bNumEndpoints);
+ printf(" bInterfaceClass: %u\n", interface->bInterfaceClass);
+ printf(" bInterfaceSubClass: %u\n", interface->bInterfaceSubClass);
+ printf(" bInterfaceProtocol: %u\n", interface->bInterfaceProtocol);
+ printf(" iInterface: %u\n", interface->iInterface);
for (i = 0; i < interface->bNumEndpoints; i++)
print_endpoint(&interface->endpoint[i]);
@@ -85,58 +84,58 @@ static void print_altsetting(const struct libusb_interface_descriptor *interface
static void print_2_0_ext_cap(struct libusb_usb_2_0_extension_descriptor *usb_2_0_ext_cap)
{
printf(" USB 2.0 Extension Capabilities:\n");
- printf(" bDevCapabilityType: %d\n", usb_2_0_ext_cap->bDevCapabilityType);
- printf(" bmAttributes: 0x%x\n", usb_2_0_ext_cap->bmAttributes);
+ printf(" bDevCapabilityType: %u\n", usb_2_0_ext_cap->bDevCapabilityType);
+ printf(" bmAttributes: %08xh\n", usb_2_0_ext_cap->bmAttributes);
}
static void print_ss_usb_cap(struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap)
{
printf(" USB 3.0 Capabilities:\n");
- printf(" bDevCapabilityType: %d\n", ss_usb_cap->bDevCapabilityType);
- printf(" bmAttributes: 0x%x\n", ss_usb_cap->bmAttributes);
- printf(" wSpeedSupported: 0x%x\n", ss_usb_cap->wSpeedSupported);
- printf(" bFunctionalitySupport: %d\n", ss_usb_cap->bFunctionalitySupport);
- printf(" bU1devExitLat: %d\n", ss_usb_cap->bU1DevExitLat);
- printf(" bU2devExitLat: %d\n", ss_usb_cap->bU2DevExitLat);
+ printf(" bDevCapabilityType: %u\n", ss_usb_cap->bDevCapabilityType);
+ printf(" bmAttributes: %02xh\n", ss_usb_cap->bmAttributes);
+ printf(" wSpeedSupported: %u\n", ss_usb_cap->wSpeedSupported);
+ printf(" bFunctionalitySupport: %u\n", ss_usb_cap->bFunctionalitySupport);
+ printf(" bU1devExitLat: %u\n", ss_usb_cap->bU1DevExitLat);
+ printf(" bU2devExitLat: %u\n", ss_usb_cap->bU2DevExitLat);
}
static void print_bos(libusb_device_handle *handle)
{
struct libusb_bos_descriptor *bos;
+ uint8_t i;
int ret;
ret = libusb_get_bos_descriptor(handle, &bos);
- if (0 > ret) {
+ if (ret < 0)
return;
- }
printf(" Binary Object Store (BOS):\n");
- printf(" wTotalLength: %d\n", bos->wTotalLength);
- printf(" bNumDeviceCaps: %d\n", bos->bNumDeviceCaps);
+ printf(" wTotalLength: %u\n", bos->wTotalLength);
+ printf(" bNumDeviceCaps: %u\n", bos->bNumDeviceCaps);
- if(bos->dev_capability[0]->bDevCapabilityType == LIBUSB_BT_USB_2_0_EXTENSION) {
+ for (i = 0; i < bos->bNumDeviceCaps; i++) {
+ struct libusb_bos_dev_capability_descriptor *dev_cap = bos->dev_capability[i];
- struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension;
- ret = libusb_get_usb_2_0_extension_descriptor(NULL, bos->dev_capability[0],&usb_2_0_extension);
- if (0 > ret) {
- return;
- }
+ if (dev_cap->bDevCapabilityType == LIBUSB_BT_USB_2_0_EXTENSION) {
+ struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension;
- print_2_0_ext_cap(usb_2_0_extension);
- libusb_free_usb_2_0_extension_descriptor(usb_2_0_extension);
- }
+ ret = libusb_get_usb_2_0_extension_descriptor(NULL, dev_cap, &usb_2_0_extension);
+ if (ret < 0)
+ return;
- if(bos->dev_capability[0]->bDevCapabilityType == LIBUSB_BT_SS_USB_DEVICE_CAPABILITY) {
+ print_2_0_ext_cap(usb_2_0_extension);
+ libusb_free_usb_2_0_extension_descriptor(usb_2_0_extension);
+ } else if (dev_cap->bDevCapabilityType == LIBUSB_BT_SS_USB_DEVICE_CAPABILITY) {
+ struct libusb_ss_usb_device_capability_descriptor *ss_dev_cap;
- struct libusb_ss_usb_device_capability_descriptor *dev_cap;
- ret = libusb_get_ss_usb_device_capability_descriptor(NULL, bos->dev_capability[0],&dev_cap);
- if (0 > ret) {
- return;
- }
+ ret = libusb_get_ss_usb_device_capability_descriptor(NULL, dev_cap, &ss_dev_cap);
+ if (ret < 0)
+ return;
- print_ss_usb_cap(dev_cap);
- libusb_free_ss_usb_device_capability_descriptor(dev_cap);
- }
+ print_ss_usb_cap(ss_dev_cap);
+ libusb_free_ss_usb_device_capability_descriptor(ss_dev_cap);
+ }
+ }
libusb_free_bos_descriptor(bos);
}
@@ -154,22 +153,21 @@ static void print_configuration(struct libusb_config_descriptor *config)
uint8_t i;
printf(" Configuration:\n");
- printf(" wTotalLength: %d\n", config->wTotalLength);
- printf(" bNumInterfaces: %d\n", config->bNumInterfaces);
- printf(" bConfigurationValue: %d\n", config->bConfigurationValue);
- printf(" iConfiguration: %d\n", config->iConfiguration);
- printf(" bmAttributes: %02xh\n", config->bmAttributes);
- printf(" MaxPower: %d\n", config->MaxPower);
+ printf(" wTotalLength: %u\n", config->wTotalLength);
+ printf(" bNumInterfaces: %u\n", config->bNumInterfaces);
+ printf(" bConfigurationValue: %u\n", config->bConfigurationValue);
+ printf(" iConfiguration: %u\n", config->iConfiguration);
+ printf(" bmAttributes: %02xh\n", config->bmAttributes);
+ printf(" MaxPower: %u\n", config->MaxPower);
for (i = 0; i < config->bNumInterfaces; i++)
print_interface(&config->interface[i]);
}
-static int print_device(libusb_device *dev, int level)
+static void print_device(libusb_device *dev)
{
struct libusb_device_descriptor desc;
libusb_device_handle *handle = NULL;
- char description[260];
char string[256];
int ret;
uint8_t i;
@@ -177,56 +175,49 @@ static int print_device(libusb_device *dev, int level)
ret = libusb_get_device_descriptor(dev, &desc);
if (ret < 0) {
fprintf(stderr, "failed to get device descriptor");
- return -1;
+ return;
}
+ printf("Dev (bus %u, device %u): ",
+ libusb_get_bus_number(dev), libusb_get_device_address(dev));
+
ret = libusb_open(dev, &handle);
if (LIBUSB_SUCCESS == ret) {
- if (desc.iManufacturer) {
+ if (desc.iManufacturer)
ret = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, string, sizeof(string));
- if (ret > 0)
- snprintf(description, sizeof(description), "%s - ", string);
- else
- snprintf(description, sizeof(description), "%04X - ",
- desc.idVendor);
- }
else
- snprintf(description, sizeof(description), "%04X - ",
- desc.idVendor);
+ ret = LIBUSB_ERROR_NOT_FOUND;
- if (desc.iProduct) {
+ if (ret > 0)
+ printf("%s - ", string);
+ else
+ printf("%04X - ", desc.idVendor);
+
+ if (desc.iProduct)
ret = libusb_get_string_descriptor_ascii(handle, desc.iProduct, string, sizeof(string));
- if (ret > 0)
- snprintf(description + strlen(description), sizeof(description) -
- strlen(description), "%s", string);
- else
- snprintf(description + strlen(description), sizeof(description) -
- strlen(description), "%04X", desc.idProduct);
- }
else
- snprintf(description + strlen(description), sizeof(description) -
- strlen(description), "%04X", desc.idProduct);
- }
- else {
- snprintf(description, sizeof(description), "%04X - %04X",
- desc.idVendor, desc.idProduct);
- }
+ ret = LIBUSB_ERROR_NOT_FOUND;
- printf("%.*sDev (bus %d, device %d): %s\n", level * 2, " ",
- libusb_get_bus_number(dev), libusb_get_device_address(dev), description);
+ if (ret > 0)
+ printf("%s\n", string);
+ else
+ printf("%04X\n", desc.idProduct);
- if (handle && verbose) {
- if (desc.iSerialNumber) {
+ if (desc.iSerialNumber && verbose)
ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, string, sizeof(string));
- if (ret > 0)
- printf("%.*s - Serial Number: %s\n", level * 2,
- " ", string);
- }
+ else
+ ret = LIBUSB_ERROR_NOT_FOUND;
+
+ if (ret > 0)
+ printf(" Serial Number: %s\n", string);
+ } else {
+ printf("%04X - %04X\n", desc.idVendor, desc.idProduct);
}
if (verbose) {
for (i = 0; i < desc.bNumConfigurations; i++) {
struct libusb_config_descriptor *config;
+
ret = libusb_get_config_descriptor(dev, i, &config);
if (LIBUSB_SUCCESS != ret) {
printf(" Couldn't retrieve descriptors\n");
@@ -238,15 +229,12 @@ static int print_device(libusb_device *dev, int level)
libusb_free_config_descriptor(config);
}
- if (handle && desc.bcdUSB >= 0x0201) {
+ if (handle && desc.bcdUSB >= 0x0201)
print_bos(handle);
- }
}
if (handle)
libusb_close(handle);
-
- return 0;
}
int main(int argc, char *argv[])
@@ -266,9 +254,8 @@ int main(int argc, char *argv[])
if (cnt < 0)
return (int)cnt;
- for (i = 0; devs[i]; ++i) {
- print_device(devs[i], 0);
- }
+ for (i = 0; devs[i]; i++)
+ print_device(devs[i]);
libusb_free_device_list(devs, 1);
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 8e487b0..26ee5e6 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11421
+#define LIBUSB_NANO 11422