int main(int argc, const char * argv[]) { UsbParser* parser; int status = parse_commands(&parser, argc, argv); if(status == OK_PARAMS) // parsed valid data { if(test_selected(parser)) // test parser { print_parsed_data(parser); }else if(help_selected(parser)) // show help { print_help(); }else if(list_selected(parser)) // list usb devices { UsbDevice** devices; list_usb_devices(&devices); print_list_log(devices, 0); }else // control requests { UsbResponse** responses; int response = setup_packet(parser, &responses); if(response == 0) print_responses_log(responses, OK_RESPONSES); else if(response == LIBUSB_INIT_FAILED) print_usb_error(LIBUSB_INIT_FAILED); else if(response == NO_DEVICE_PRESENT) print_usb_error(NO_DEVICE_PRESENT); else if(response == INTERFACE_NOT_CLAIMED) print_usb_error(INTERFACE_NOT_CLAIMED); } }else { print_parsing_error(status); } return 0; }
int main(int argc, char **argv) { int r, ch, op, dbg = -1, cfg = -1, get = -1, lst = 0, si = 0; long set = -2; extern char *optarg; extern int optind; /* things to send */ struct uviface *uvi; ename = argv[0]; while((ch = getopt(argc, argv, "hecd:g:s:i")) != -1) { switch(ch) { case 'h': /* show help */ usage(stdout); break; case 'e': /* list devs */ lst = 1; break; case 'c': /* show device config */ cfg = atoi(optarg); break; case 'd': /* debugging (verbose) */ dbg = atoi(optarg); if(dbg < 0 || dbg > 3) usage(stderr); break; case 'g': /* get = gv */ get = atoi(optarg); if(get >= sizeof(getflags)/sizeof(uint8_t) || get < 0) usage(stderr); break; case 's': /* set = value */ set = atol(optarg); if(set < -1) usage(stderr); break; case 'i': si = 1; break; case '?': default: usage(stderr); } } argc -= optind; argv += optind; /* args: context */ if((r = libusb_init(&ctx)) != 0) { perror("Could not init libusb"); return r; } /* dbg flies solo! */ if(dbg > -1) libusb_set_debug(ctx, dbg); if(lst) r = list_usb_devices(dbg); else if(cfg > -1) print_uvc_info(cfg); else if(get > -1 || set > -2) { /* first some sanity checks */ if(argc < 2) usage(stderr); op = atoi(argv[0]); if(op < 0 || op >= sizeof(uvcc_cr)/sizeof(struct ctrlreq)) usage(stderr); /* ultra special case for CT_FOCUS_RELATIVE_CONTROL, * lets always use a speed of 1 */ if(op == 2) set = (set << 8 | 0x01); /* open a uvc video interface */ if((uvi = open_uvi_index(atoi(argv[1]))) == NULL) { fprintf(stderr, "No video control interface found on device %d\n", atoi(argv[1])); exit(1); } r = getset_value(uvi, get, set, op, dbg); close_uvi(uvi); } else if(si) { if(argc < 1) usage(stderr); if((uvi = open_uvi_index(atoi(argv[0]))) == NULL) { fprintf(stderr, "No video control interface found on device %d\n", atoi(argv[0])); exit(1); } r = input_session(uvi, dbg); close_uvi(uvi); } else usage(stderr); libusb_exit(ctx); return r; }
int main(int argc, char** argv) { srand(time(NULL)); if (argc == 2 && strcmp("list", argv[1]) == 0) { usb_init(); usb_find_busses(); usb_find_devices(); list_usb_devices(); } else if ((argc == 4 || argc == 5 || argc == 6) && (strcmp("cat", argv[1]) == 0 || strcmp("read", argv[1]) == 0 || strcmp("write", argv[1]) == 0)) { uint16_t idVendor; uint16_t idProduct; int interface = 0; int endpoint = 1; if (sscanf(argv[2], "0x%hx", &idVendor) == 1 && sscanf(argv[3], "0x%hx", &idProduct) == 1) { if (argc >= 5) interface = atoi(argv[4]); if (argc == 6) endpoint = atoi(argv[5]); usb_init(); usb_find_busses(); usb_find_devices(); struct usb_device* dev = find_usb_device(idVendor, idProduct); if (!dev) { std::cout << "Error: Device (" << boost::format("idVendor: 0x%04hx, idProduct: 0x%04hx") % idVendor % idProduct << ") not found" << std::endl; } else { if (strcmp("cat", argv[1]) == 0) { std::cout << "Reading data from: " << dev << " Interface: " << interface << " Endpoint: " << endpoint << std::endl; cat_usb_device(dev, interface, endpoint); } else if (strcmp("read", argv[1]) == 0) { read_usb_device(dev, interface, endpoint); } else if (strcmp("write", argv[1]) == 0) { write_usb_device(dev, interface, endpoint); } } } else { std::cout << "Error: Expected IDVENDOR IDPRODUCT" << std::endl; } } else { std::cout << "Usage: " << argv[0] << " list\n" << " " << argv[0] << " cat IDVENDOR IDPRODUCT [INTERFACE] [ENDPOINT]" << std::endl; } }