#include #include bool is_XIMEAcam(uint16_t idVendor, uint16_t idProduct) { if(idVendor == 0x04B4 && (idProduct == 0x00F0 || idProduct == 0x00F1 || idProduct == 0x00F2 || idProduct == 0x00F3 || idProduct == 0x8613) || idVendor == 0x20F7 && (idProduct == 0x3000 || idProduct == 0x3001 || idProduct == 0xA003) || idVendor == 0xDEDA && idProduct == 0xA003) return true; else return false; } void try2reset() { libusb_context *ctx; if(libusb_init(&ctx)) return; libusb_device **list; libusb_device_handle *handle; libusb_device_descriptor desc; ssize_t i, cnt = libusb_get_device_list(ctx, &list); for(i = 0; i < cnt; i++) { if(libusb_get_device_descriptor(list[i], &desc)) continue; if(!is_XIMEAcam(desc.idVendor, desc.idProduct)) continue; if(libusb_open(list[i], &handle)) continue; libusb_reset_device(handle); libusb_close(handle); } if(cnt >= 0) libusb_free_device_list(list, 1); libusb_exit(ctx); } int main() { try2reset(); sleep(5); return 0; }