~ubuntu-branches/ubuntu/trusty/argyll/trusty-proposed

« back to all changes in this revision

Viewing changes to libusbw/tests/testlibusb.c

  • Committer: Package Import Robot
  • Author(s): Artur Rona
  • Date: 2014-02-12 00:35:39 UTC
  • mfrom: (13.1.24 sid)
  • Revision ID: package-import@ubuntu.com-20140212003539-24tautzlitsiz61w
Tags: 1.5.1-5ubuntu1
* Merge from Debian unstable. (LP: #1275572) Remaining changes:
  - debian/control:
    + Build-depend on libtiff-dev rather than libtiff4-dev.
  - debian/control, debian/patches/06_fix_udev_rule.patch:
    + Fix udev rules to actually work; ENV{ACL_MANAGE} has
      stopped working ages ago, and with logind it's now the
      "uaccess" tag. Dropping also consolekit from Recommends.
  - debian/patches/drop-usb-db.patch:
    + Use hwdb builtin, instead of the obsolete usb-db
      in the udev rules.
* debian/patches/05_ftbfs-underlinkage.diff:
  - Dropped change, no needed anymore.
* Refresh the patches.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * testlibusb.c
3
 
 *
4
 
 *  Test suite program
5
 
 */
6
 
 
7
 
#include <stdio.h>
8
 
#include <string.h>
9
 
#include <usb.h>
10
 
 
11
 
int verbose = 0;
12
 
 
13
 
#define snprintf _snprintf
14
 
 
15
 
void print_endpoint(struct usb_endpoint_descriptor *endpoint)
16
 
{
17
 
  printf("      bEndpointAddress: %02xh\n", endpoint->bEndpointAddress);
18
 
  printf("      bmAttributes:     %02xh\n", endpoint->bmAttributes);
19
 
  printf("      wMaxPacketSize:   %d\n", endpoint->wMaxPacketSize);
20
 
  printf("      bInterval:        %d\n", endpoint->bInterval);
21
 
  printf("      bRefresh:         %d\n", endpoint->bRefresh);
22
 
  printf("      bSynchAddress:    %d\n", endpoint->bSynchAddress);
23
 
}
24
 
 
25
 
void print_altsetting(struct usb_interface_descriptor *interface)
26
 
{
27
 
  int i;
28
 
 
29
 
  printf("    bInterfaceNumber:   %d\n", interface->bInterfaceNumber);
30
 
  printf("    bAlternateSetting:  %d\n", interface->bAlternateSetting);
31
 
  printf("    bNumEndpoints:      %d\n", interface->bNumEndpoints);
32
 
  printf("    bInterfaceClass:    %d\n", interface->bInterfaceClass);
33
 
  printf("    bInterfaceSubClass: %d\n", interface->bInterfaceSubClass);
34
 
  printf("    bInterfaceProtocol: %d\n", interface->bInterfaceProtocol);
35
 
  printf("    iInterface:         %d\n", interface->iInterface);
36
 
 
37
 
  for (i = 0; i < interface->bNumEndpoints; i++)
38
 
    print_endpoint(&interface->endpoint[i]);
39
 
}
40
 
 
41
 
void print_interface(struct usb_interface *interface)
42
 
{
43
 
  int i;
44
 
 
45
 
  for (i = 0; i < interface->num_altsetting; i++)
46
 
    print_altsetting(&interface->altsetting[i]);
47
 
}
48
 
 
49
 
void print_configuration(struct usb_config_descriptor *config)
50
 
{
51
 
  int i;
52
 
 
53
 
  printf("  wTotalLength:         %d\n", config->wTotalLength);
54
 
  printf("  bNumInterfaces:       %d\n", config->bNumInterfaces);
55
 
  printf("  bConfigurationValue:  %d\n", config->bConfigurationValue);
56
 
  printf("  iConfiguration:       %d\n", config->iConfiguration);
57
 
  printf("  bmAttributes:         %02xh\n", config->bmAttributes);
58
 
  printf("  MaxPower:             %d\n", config->MaxPower);
59
 
 
60
 
  for (i = 0; i < config->bNumInterfaces; i++)
61
 
    print_interface(&config->interface[i]);
62
 
}
63
 
 
64
 
int print_device(struct usb_device *dev, int level)
65
 
{
66
 
  usb_dev_handle *udev;
67
 
  char description[256];
68
 
  char string[256];
69
 
  int ret, i;
70
 
 
71
 
  udev = usb_open(dev);
72
 
  if (udev) {
73
 
    if (dev->descriptor.iManufacturer) {
74
 
      ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, string,
75
 
                                  sizeof(string));
76
 
      if (ret > 0)
77
 
        snprintf(description, sizeof(description), "%s - ", string);
78
 
      else
79
 
        snprintf(description, sizeof(description), "%04X - ",
80
 
                 dev->descriptor.idVendor);
81
 
    } else
82
 
      snprintf(description, sizeof(description), "%04X - ",
83
 
               dev->descriptor.idVendor);
84
 
 
85
 
    if (dev->descriptor.iProduct) {
86
 
      ret = usb_get_string_simple(udev, dev->descriptor.iProduct, string, 
87
 
                                  sizeof(string));
88
 
      if (ret > 0)
89
 
        snprintf(description + strlen(description), sizeof(description) -
90
 
                 strlen(description), "%s", string);
91
 
      else
92
 
        snprintf(description + strlen(description), sizeof(description) -
93
 
                 strlen(description), "%04X", dev->descriptor.idProduct);
94
 
    } else
95
 
      snprintf(description + strlen(description), sizeof(description) -
96
 
               strlen(description), "%04X", dev->descriptor.idProduct);
97
 
 
98
 
  } else
99
 
    snprintf(description, sizeof(description), "%04X - %04X",
100
 
             dev->descriptor.idVendor, dev->descriptor.idProduct);
101
 
 
102
 
  printf("%.*sDev #%d: %s\n", level * 2, "                    ", dev->devnum,
103
 
         description);
104
 
 
105
 
  if (udev && verbose) {
106
 
    if (dev->descriptor.iSerialNumber) {
107
 
      ret = usb_get_string_simple(udev, dev->descriptor.iSerialNumber, string,
108
 
                                  sizeof(string));
109
 
      if (ret > 0)
110
 
        printf("%.*s  - Serial Number: %s\n", level * 2,
111
 
               "                    ", string);
112
 
    }
113
 
  }
114
 
 
115
 
  if (udev)
116
 
    usb_close(udev);
117
 
 
118
 
  if (verbose) {
119
 
    if (!dev->config) {
120
 
      printf("  Couldn't retrieve descriptors\n");
121
 
      return 0;
122
 
    }
123
 
 
124
 
    for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
125
 
      print_configuration(&dev->config[i]);
126
 
  } else {
127
 
    for (i = 0; i < dev->num_children; i++)
128
 
      print_device(dev->children[i], level + 1);
129
 
  }
130
 
 
131
 
  return 0;
132
 
}
133
 
 
134
 
int main(int argc, char *argv[])
135
 
{
136
 
  struct usb_bus *bus;
137
 
 
138
 
  if (argc > 1 && !strcmp(argv[1], "-v")) {
139
 
    verbose = 1;
140
 
        printf("~1 verbos is on\n");
141
 
  }
142
 
 
143
 
  usb_init();
144
 
  usb_set_debug(0);
145
 
 
146
 
  usb_find_busses();
147
 
  usb_find_devices();
148
 
 
149
 
  for (bus = usb_get_busses(); bus; bus = bus->next) {
150
 
    if (bus->root_dev && !verbose)
151
 
      print_device(bus->root_dev, 9);
152
 
    else {
153
 
      struct usb_device *dev;
154
 
 
155
 
      for (dev = bus->devices; dev; dev = dev->next) {
156
 
        print_device(dev, 9);
157
 
          }
158
 
    }
159
 
  }
160
 
 
161
 
  return 0;
162
 
}
163