5 #include <libusb-1.0/libusb.h>
7 struct libusb_context *usb_ctxt;
8 struct libusb_device_handle *devh;
10 static libusb_device *find_device(void)
12 libusb_device **devlist;
13 ssize_t devn = libusb_get_device_list(usb_ctxt, &devlist);
16 fprintf(stderr, "Cannot enumerate USB devices: error %d\n", (int) devn);
20 for (ssize_t i=0; i<devn; i++)
22 struct libusb_device_descriptor desc;
23 libusb_device *dev = devlist[i];
24 if (!libusb_get_device_descriptor(dev, &desc))
26 if (desc.idVendor == 0x4242 && desc.idProduct == 0x0001)
28 printf("Found device at usb%d.%d\n", libusb_get_bus_number(dev), libusb_get_device_address(dev));
29 // FIXME: Free device list
35 libusb_free_device_list(devlist, 1);
36 fprintf(stderr, "Device not found\n");
43 if (err = libusb_init(&usb_ctxt))
45 fprintf(stderr, "Cannot initialize libusb: error %d\n", err);
48 libusb_set_debug(usb_ctxt, 3);
50 libusb_device *dev = find_device();
52 if (err = libusb_open(dev, &devh))
54 fprintf(stderr, "Cannot open device: error %d\n", err);
57 libusb_reset_device(devh);
58 if (err = libusb_claim_interface(devh, 0))
60 fprintf(stderr, "Cannot claim interface: error %d\n", err);
66 time_t t = time(NULL);
67 struct tm *tm = localtime(&t);
69 unsigned char req[8] = {
72 (tm->tm_sec % 2 ? 10 : 0xff),
77 if (err = libusb_bulk_transfer(devh, 0x01, req, 8, &transferred, 2000))
79 fprintf(stderr, "Transfer failed: error %d\n", err);
82 printf("Transferred %d bytes\n", transferred);
85 unsigned char resp[1000];
87 if (err = libusb_bulk_transfer(devh, 0x82, resp, 1000, &received, 2000))
89 fprintf(stderr, "Receive failed: error %d\n", err);
92 printf("Received %d bytes [%02x]\n", received, resp[0]);