Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
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;
    }
}