]> mj.ucw.cz Git - home-hw.git/blob - test-shutters/host/test.c
Iris: Two adjustments for new aiomqtt
[home-hw.git] / test-shutters / host / test.c
1 #include <ucw/lib.h>
2 #include <ucw/unaligned.h>
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <stdint.h>
7 #include <string.h>
8 #include <unistd.h>
9 #include <time.h>
10 #include <libusb-1.0/libusb.h>
11
12 struct libusb_context *usb_ctxt;
13 struct libusb_device_handle *devh;
14
15 static libusb_device *find_device(void)
16 {
17   libusb_device **devlist;
18   ssize_t devn = libusb_get_device_list(usb_ctxt, &devlist);
19   if (devn < 0)
20     {
21       fprintf(stderr, "Cannot enumerate USB devices: error %d\n", (int) devn);
22       exit(1);
23     }
24
25   for (ssize_t i=0; i<devn; i++)
26     {
27       struct libusb_device_descriptor desc;
28       libusb_device *dev = devlist[i];
29       if (!libusb_get_device_descriptor(dev, &desc))
30         {
31           if (desc.idVendor == 0x4242 && desc.idProduct == 0x0007)
32             {
33               printf("Found device at usb%d.%d\n", libusb_get_bus_number(dev), libusb_get_device_address(dev));
34               // FIXME: Free device list
35               return dev;
36             }
37         }
38     }
39
40   libusb_free_device_list(devlist, 1);
41   fprintf(stderr, "Device not found\n");
42   exit(1);
43 }
44
45 int main(int argc, char **argv)
46 {
47   int err;
48   if (err = libusb_init(&usb_ctxt))
49     die("Cannot initialize libusb: error %d", err);
50   // libusb_set_debug(usb_ctxt, 3);
51
52   libusb_device *dev = find_device();
53
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);
59
60   byte buf[64];
61
62   if (argc > 1)
63     {
64       uint ssr = atoi(argv[1]);
65       printf("Setting SSR to %02x\n", ssr);
66       if ((err = libusb_control_transfer(devh, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR, 1, ssr, 0, buf, 0, 1000)) < 0)
67         die("Control transfer failed: error %d", err);
68     }
69
70   for (;;)
71     {
72       memset(buf, 0, 8);
73       if ((err = libusb_control_transfer(devh, LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR, 0, 0, 0, buf, 8, 1000)) != 8)
74         die("Control transfer failed: error %d", err);
75       printf("counters: %u %u\n", get_u32_le(buf), get_u32_le(buf+4));
76       sleep(1);
77     }
78
79   return 0;
80 }