2 #include <ucw/unaligned.h>
10 #include <libusb-1.0/libusb.h>
12 struct libusb_context *usb_ctxt;
13 struct libusb_device_handle *devh;
15 static libusb_device *find_device(void)
17 libusb_device **devlist;
18 ssize_t devn = libusb_get_device_list(usb_ctxt, &devlist);
21 fprintf(stderr, "Cannot enumerate USB devices: error %d\n", (int) devn);
25 for (ssize_t i=0; i<devn; i++)
27 struct libusb_device_descriptor desc;
28 libusb_device *dev = devlist[i];
29 if (!libusb_get_device_descriptor(dev, &desc))
31 if (desc.idVendor == 0x4242 && desc.idProduct == 0x0007)
33 printf("Found device at usb%d.%d\n", libusb_get_bus_number(dev), libusb_get_device_address(dev));
34 // FIXME: Free device list
40 libusb_free_device_list(devlist, 1);
41 fprintf(stderr, "Device not found\n");
48 if (err = libusb_init(&usb_ctxt))
49 die("Cannot initialize libusb: error %d", err);
50 // libusb_set_debug(usb_ctxt, 3);
52 libusb_device *dev = find_device();
54 if (err = libusb_open(dev, &devh))
55 die("Cannot open device: error %d", err);
56 // libusb_reset_device(devh);
57 if (err = libusb_claim_interface(devh, 0))
58 die("Cannot claim interface: error %d", err);
62 if ((err = libusb_control_transfer(devh, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR, 1, ssr, 0, buf, 0, 1000)) < 0)
63 die("Control transfer failed: error %d", err);
68 if ((err = libusb_control_transfer(devh, LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR, 0, 0, 0, buf, 8, 1000)) != 8)
69 die("Control transfer failed: error %d", err);
70 printf("counters: %u %u\n", get_u32_le(buf), get_u32_le(buf+4));