コード例 #1
0
ファイル: usb.c プロジェクト: helaibai/usbip
int
main (int argc, char **argv)
{
	int		fd, c, i;

	/* random initial serial number */
	srand ((int) time (0));
	for (i = 0; i < sizeof serial - 1; ) {
		c = rand () % 127;
		if ((('a' <= c && c <= 'z') || ('0' <= c && c <= '9')))
			serial [i++] = c;
	}

	source_thread = simple_source_thread;
	sink_thread = simple_sink_thread;

	while ((c = getopt (argc, argv, "I:a:i:o:p:r:s:v")) != EOF) {
		switch (c) {
#ifdef	AIO
		/* "-s1020 -I0 -a20" does ~1K/usec, 20 usecs buffered */
		case 'I':		/* ISO */
			iso = 1;
			/* interval is log2(period-in-frames); it's
			 * ignored if high bandwidth could kick in
			 */
			interval = atoi (optarg);
			source_thread = aio_in_thread;
			sink_thread = aio_out_thread;
			continue;
		case 'a':		/* aio IN/OUT qlen */
			aio_in = aio_out = atoi (optarg);
			source_thread = aio_in_thread;
			sink_thread = aio_out_thread;
			continue;
		case 'i':		/* aio IN qlen */
			aio_in = atoi (optarg);
			source_thread = aio_in_thread;
			continue;
		case 'o':		/* aio OUT qlen */
			aio_out = atoi (optarg);
			sink_thread = aio_out_thread;
			continue;
		case 's':		/* iso buffer size */
			/* for iso, "-s 1025" and higher is high bandwidth */
			bufsize = atoi (optarg);
			continue;
#endif
		case 'p':		/* i/o pattern */
			pattern = atoi (optarg);
			continue;
		case 'r':		/* nonrandom serial */
			strncpy (serial, optarg, sizeof serial - 1);
			continue;
		case 'v':		/* verbose */
			verbose++;
			continue;
		}
		fprintf (stderr, "usage:  %s "
#ifdef	AIO
				"[-I interval] [-a num] [-s iso_size] "
#endif
				"[-p pattern] [-r serial] [-v]\n",
				argv [0]);
		return 1;
	}
	if (chdir ("/dev/gadget") < 0) {
		perror ("can't chdir /dev/gadget");
		return 1;
	}

	fd = init_device ();
	if (fd < 0)
		return 1;
	fprintf (stderr, "/dev/gadget/%s ep0 configured\nserial=\"%s\"\n",
		DEVNAME, serial);
	fflush (stderr);
	(void) ep0_thread (&fd);
	return 0;
}
コード例 #2
0
ファイル: usb.c プロジェクト: frankmorgner/vsmartcard
int
main (int argc, char **argv)
{
    /*printf("%s:%d\n", __FILE__, __LINE__);*/
    int fd, c, i;

    struct gengetopt_args_info cmdline;


    /* Parse command line */
    if (cmdline_parser (argc, argv, &cmdline) != 0)
        exit(1);
    doiintf = cmdline.interface_arg;
    productid = cmdline.product_arg;
    vendorid = cmdline.vendor_arg;
    verbose = cmdline.verbose_given;
    doint = cmdline.interrupt_flag;
    gadgetfs = cmdline.gadgetfs_arg;


    if (cmdline.info_flag)
        return print_avail(verbose);

    if (ccid_initialize(cmdline.reader_arg, verbose) < 0) {
        fprintf (stderr, "Can't initialize ccid\n");
        return 1;
    }

    if (chdir (gadgetfs) < 0) {
        fprintf (stderr, "Error changing directory to %s\n", gadgetfs);
        return 1;
    }

    if (strncmp(cmdline.serial_arg, "random", strlen("random")) == 0) {
        /* random initial serial number */
        srand ((int) time (0));
        for (i = 0; i < sizeof serial - 1; ) {
            c = rand () % 127;
            if ((('a' <= c && c <= 'z') || ('0' <= c && c <= '9')))
                serial [i++] = c;
        }
        if (verbose)
            fprintf (stderr, "serial=\"%s\"\n", serial);
    } else {
        for (i=0; i<sizeof stringtab/sizeof(struct usb_string); i++) {
            if (stringtab[i].id == STRINGID_SERIAL) {
                stringtab[i].s = cmdline.serial_arg;
                break;
            }
        }
        if (verbose)
            fprintf (stderr, "serial=\"%s\"\n", cmdline.serial_arg);
    }

    if (doiintf) {
        for (i=0; i<sizeof stringtab/sizeof(struct usb_string); i++) {
            if (stringtab[i].id == STRINGID_INTERFACE) {
                stringtab[i].s = doiintf;
                break;
            }
        }
    }

    fd = init_device ();
    if (fd < 0)
        return 1;
    if (debug)
        fprintf (stderr, "%s%s ep0 configured\n", gadgetfs, DEVNAME);

    fflush (stdout);
    fflush (stderr);
    (void) ep0_thread (&fd);
    cmdline_parser_free(&cmdline);
    return 0;
}