+static int usb_claim(int claim) {
+ int ret = 0;
+ static int claimed = 0;
+
+ if (usbinterface < 0)
+ return -1;
+
+ if (claim) {
+ if (claimed)
+ return 0;
+
+ ret = usb_claim_interface(usb_devhandle, usbinterface);
+ if (!ret) {
+ claimed = 1;
+ ret = usb_set_altinterface(usb_devhandle, usbalternate);
+ if (ret)
+ fprintf(stderr, "usb_set_altinterface: %d\n", ret);
+ } else {
+ fprintf(stderr, "usb_claim_interface: %d -> %d (%s)\n",
+ usbinterface, ret, usb_strerror());
+ }
+ } else {
+ if (!claimed)
+ return 0;
+
+ ret = usb_release_interface(usb_devhandle, usbinterface);
+ if (!ret)
+ claimed = 0;
+ }
+
+ return ret;
+}
+
+static int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) {