Lines Matching +full:n +full:- +full:1

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2008-2009 Hans Petter Selasky. All rights reserved.
9 * 1. Redistributions of source code must retain the above copyright
65 uint8_t got_list:1;
66 uint8_t got_bus:1;
67 uint8_t got_addr:1;
68 uint8_t got_set_config:1;
69 uint8_t got_set_alt:1;
70 uint8_t got_set_template:1;
71 uint8_t got_get_template:1;
72 uint8_t got_suspend:1;
73 uint8_t got_resume:1;
74 uint8_t got_reset:1;
75 uint8_t got_power_off:1;
76 uint8_t got_power_save:1;
77 uint8_t got_power_on:1;
78 uint8_t got_dump_device_quirks:1;
79 uint8_t got_dump_quirk_names:1;
80 uint8_t got_dump_all_desc:1;
81 uint8_t got_dump_device_desc:1;
82 uint8_t got_dump_curr_config:1;
83 uint8_t got_dump_all_config:1;
84 uint8_t got_dump_info:1;
85 uint8_t got_dump_stats:1;
86 uint8_t got_show_iface_driver:1;
87 uint8_t got_remove_device_quirk:1;
88 uint8_t got_add_device_quirk:1;
89 uint8_t got_remove_quirk:1;
90 uint8_t got_add_quirk:1;
91 uint8_t got_dump_string:1;
92 uint8_t got_do_request:1;
93 uint8_t got_detach_kernel_driver:1;
135 {"set_config", T_SET_CONFIG, 1},
136 {"set_alt", T_SET_ALT, 1},
137 {"set_template", T_SET_TEMPLATE, 1},
141 {"add_quirk", T_ADD_QUIRK, 1},
142 {"remove_quirk", T_REMOVE_QUIRK, 1},
150 {"dump_string", T_DUMP_STRING, 1},
182 fprintf(stderr, "Removing quirk '%s' failed, continuing.\n", str); in be_dev_remove_quirk()
204 fprintf(stderr, "Adding quirk '%s' failed, continuing.\n", str); in be_dev_add_quirk()
211 uint8_t n; in get_token() local
213 for (n = 0; n != nitems(token); n++) { in get_token()
214 if (strcasecmp(str, token[n].name) == 0) { in get_token()
215 if (token[n].narg > narg) { in get_token()
219 return (token[n].value); in get_token()
222 return (0 - 1); in get_token()
234 err(1, "%s", name); in num_id()
237 errx(1, "%s: illegal %s name", name, type); in num_id()
251 err(1, "%s", s); in get_int()
254 errx(1, "illegal number: %s", s); in get_int()
263 "Duplicate option: '%s'\n", ptr); in duplicate_option()
264 exit(1); in duplicate_option()
271 "usbconfig - configure the USB subsystem" "\n" in usage()
272 "usage: usbconfig [-u <busnum>] [-a <devaddr>] [-i <ifaceindex>] [-v] [cmds...]" "\n" in usage()
273 "usage: usbconfig -d [ugen]<busnum>.<devaddr> [-i <ifaceindex>] [-v] [cmds...]" "\n" in usage()
274 "commands:" "\n" in usage()
275 " set_config <cfg_index>" "\n" in usage()
276 " set_alt <alt_index>" "\n" in usage()
277 " set_template <template>" "\n" in usage()
278 " get_template" "\n" in usage()
279 " add_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> <quirk>" "\n" in usage()
280 " remove_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> <quirk>" "\n" in usage()
281 " add_quirk <quirk>" "\n" in usage()
282 " remove_quirk <quirk>" "\n" in usage()
283 " detach_kernel_driver" "\n" in usage()
284 " dump_quirk_names" "\n" in usage()
285 " dump_device_quirks" "\n" in usage()
286 " dump_all_desc" "\n" in usage()
287 " dump_device_desc" "\n" in usage()
288 " dump_curr_config_desc" "\n" in usage()
289 " dump_all_config_desc" "\n" in usage()
290 " dump_string <index>" "\n" in usage()
291 " dump_info" "\n" in usage()
292 " dump_stats" "\n" in usage()
293 " show_ifdrv" "\n" in usage()
294 " suspend" "\n" in usage()
295 " resume" "\n" in usage()
296 " power_off" "\n" in usage()
297 " power_save" "\n" in usage()
298 " power_on" "\n" in usage()
299 " reset" "\n" in usage()
300 " list" "\n" in usage()
301 " do_request <bmReqTyp> <bReq> <wVal> <wIdx> <wLen> <data...>" "\n" in usage()
309 if (opt->buffer) in reset_options()
310 free(opt->buffer); in reset_options()
322 if ((opt->got_suspend + in flush_command()
323 opt->got_resume + in flush_command()
324 opt->got_reset + in flush_command()
325 opt->got_set_config + in flush_command()
326 opt->got_set_alt + in flush_command()
327 opt->got_power_save + in flush_command()
328 opt->got_power_on + in flush_command()
329 opt->got_power_off) > 1) { in flush_command()
330 err(1, "can only specify one of 'set_config', " in flush_command()
335 if (opt->got_dump_quirk_names) { in flush_command()
336 opt->got_any--; in flush_command()
339 if (opt->got_dump_device_quirks) { in flush_command()
340 opt->got_any--; in flush_command()
343 if (opt->got_remove_device_quirk) { in flush_command()
344 opt->got_any--; in flush_command()
346 opt->vid, opt->pid, opt->lo_rev, opt->hi_rev, opt->quirkname); in flush_command()
348 if (opt->got_add_device_quirk) { in flush_command()
349 opt->got_any--; in flush_command()
351 opt->vid, opt->pid, opt->lo_rev, opt->hi_rev, opt->quirkname); in flush_command()
353 if (opt->got_set_template) { in flush_command()
354 opt->got_any--; in flush_command()
355 if (libusb20_be_set_template(pbe, opt->template)) { in flush_command()
357 "continuing.\n", opt->template); in flush_command()
360 if (opt->got_get_template) { in flush_command()
361 opt->got_any--; in flush_command()
362 if (libusb20_be_get_template(pbe, &opt->template)) in flush_command()
363 printf("USB template: <unknown>\n"); in flush_command()
365 printf("USB template: %u\n", opt->template); in flush_command()
367 if (opt->got_any == 0) { in flush_command()
376 if (opt->got_bus && in flush_command()
377 (libusb20_dev_get_bus_number(pdev) != opt->bus)) { in flush_command()
380 if (opt->got_addr && in flush_command()
381 (libusb20_dev_get_address(pdev) != opt->addr)) { in flush_command()
386 if (opt->got_remove_quirk) { in flush_command()
392 ddesc->idVendor, ddesc->idProduct, in flush_command()
393 ddesc->bcdDevice, ddesc->bcdDevice, in flush_command()
394 opt->quirkname); in flush_command()
397 if (opt->got_add_quirk) { in flush_command()
403 ddesc->idVendor, ddesc->idProduct, in flush_command()
404 ddesc->bcdDevice, ddesc->bcdDevice, in flush_command()
405 opt->quirkname); in flush_command()
409 err(1, "could not open device"); in flush_command()
411 if (opt->got_dump_string) { in flush_command()
412 dump_string_by_index(pdev, opt->string_index); in flush_command()
414 if (opt->got_do_request) { in flush_command()
418 if (libusb20_dev_request_sync(pdev, &opt->setup, in flush_command()
419 opt->buffer, &actlen, 5000 /* 5 seconds */ , 0)) { in flush_command()
420 printf("REQUEST = <ERROR>\n"); in flush_command()
421 } else if (!(opt->setup.bmRequestType & in flush_command()
423 printf("REQUEST = <OK>\n"); in flush_command()
429 ((uint8_t *)opt->buffer)[t], in flush_command()
430 (t == (actlen - 1)) ? "" : " "); in flush_command()
436 c = ((uint8_t *)opt->buffer)[t]; in flush_command()
442 printf(">\n"); in flush_command()
445 if (opt->got_set_config) { in flush_command()
447 opt->config_index)) { in flush_command()
448 err(1, "could not set config index"); in flush_command()
451 if (opt->got_set_alt) { in flush_command()
452 if (libusb20_dev_set_alt_index(pdev, opt->iface, in flush_command()
453 opt->alt_index)) { in flush_command()
454 err(1, "could not set alternate setting"); in flush_command()
457 if (opt->got_reset) { in flush_command()
459 err(1, "could not reset device"); in flush_command()
462 if (opt->got_suspend) { in flush_command()
465 err(1, "could not set suspend"); in flush_command()
468 if (opt->got_resume) { in flush_command()
471 err(1, "could not set resume"); in flush_command()
474 if (opt->got_power_off) { in flush_command()
477 err(1, "could not set power OFF"); in flush_command()
480 if (opt->got_power_save) { in flush_command()
483 err(1, "could not set power SAVE"); in flush_command()
486 if (opt->got_power_on) { in flush_command()
489 err(1, "could not set power ON"); in flush_command()
492 if (opt->got_detach_kernel_driver) { in flush_command()
493 if (libusb20_dev_detach_kernel_driver(pdev, opt->iface)) { in flush_command()
494 err(1, "could not detach kernel driver"); in flush_command()
498 (opt->got_dump_all_desc || in flush_command()
499 opt->got_dump_device_desc || in flush_command()
500 opt->got_dump_curr_config || in flush_command()
501 opt->got_dump_all_config || in flush_command()
502 opt->got_dump_info || in flush_command()
503 opt->got_dump_stats); in flush_command()
505 if (opt->got_list || dump_any) { in flush_command()
507 opt->got_show_iface_driver); in flush_command()
509 if (opt->got_dump_device_desc) { in flush_command()
510 printf("\n"); in flush_command()
513 if (opt->got_dump_all_config) { in flush_command()
514 printf("\n"); in flush_command()
515 dump_config(pdev, 1); in flush_command()
516 } else if (opt->got_dump_curr_config) { in flush_command()
517 printf("\n"); in flush_command()
519 } else if (opt->got_dump_all_desc) { in flush_command()
520 printf("\n"); in flush_command()
522 dump_config(pdev, 1); in flush_command()
524 if (opt->got_dump_stats) { in flush_command()
525 printf("\n"); in flush_command()
529 printf("\n"); in flush_command()
532 err(1, "could not close device"); in flush_command()
537 printf("No device match or lack of permissions.\n"); in flush_command()
551 int n; in main() local
555 if (argc < 1) { in main()
560 err(1, "could not access USB backend\n"); in main()
562 while ((ch = getopt(argc, argv, "a:d:hi:u:v")) != -1) { in main()
565 opt->addr = num_id(optarg, "addr"); in main()
566 opt->got_addr = 1; in main()
582 errx(1, "cannot " in main()
585 opt->bus = unit; in main()
586 opt->addr = addr; in main()
587 opt->got_bus = 1; in main()
588 opt->got_addr = 1; in main()
596 opt->iface = num_id(optarg, "iface"); in main()
600 opt->bus = num_id(optarg, "busnum"); in main()
601 opt->got_bus = 1; in main()
605 opt->got_dump_device_desc = 1; in main()
606 opt->got_dump_curr_config = 1; in main()
607 opt->got_show_iface_driver = 1; in main()
608 opt->got_any += 2; /* only the dump options count */ in main()
615 argc -= optind; in main()
618 for (n = 0; n != argc; n++) { in main()
621 t = (argc - n - 1); in main()
624 switch (get_token(argv[n], t)) { in main()
626 if (opt->got_add_quirk) { in main()
629 opt->quirkname = argv[n + 1]; in main()
630 n++; in main()
632 opt->got_add_quirk = 1; in main()
633 opt->got_any++; in main()
637 if (opt->got_remove_quirk) { in main()
640 opt->quirkname = argv[n + 1]; in main()
641 n++; in main()
643 opt->got_remove_quirk = 1; in main()
644 opt->got_any++; in main()
648 if (opt->got_add_device_quirk) { in main()
651 opt->vid = num_id(argv[n + 1], "Vendor ID"); in main()
652 opt->pid = num_id(argv[n + 2], "Product ID"); in main()
653 opt->lo_rev = num_id(argv[n + 3], "Low Revision"); in main()
654 opt->hi_rev = num_id(argv[n + 4], "High Revision"); in main()
655 opt->quirkname = argv[n + 5]; in main()
656 n += 5; in main()
658 opt->got_add_device_quirk = 1; in main()
659 opt->got_any++; in main()
663 if (opt->got_remove_device_quirk) { in main()
666 opt->vid = num_id(argv[n + 1], "Vendor ID"); in main()
667 opt->pid = num_id(argv[n + 2], "Product ID"); in main()
668 opt->lo_rev = num_id(argv[n + 3], "Low Revision"); in main()
669 opt->hi_rev = num_id(argv[n + 4], "High Revision"); in main()
670 opt->quirkname = argv[n + 5]; in main()
671 n += 5; in main()
672 opt->got_remove_device_quirk = 1; in main()
673 opt->got_any++; in main()
677 if (opt->got_detach_kernel_driver) in main()
678 duplicate_option(argv[n]); in main()
679 opt->got_detach_kernel_driver = 1; in main()
680 opt->got_any++; in main()
684 if (opt->got_dump_quirk_names) in main()
685 duplicate_option(argv[n]); in main()
686 opt->got_dump_quirk_names = 1; in main()
687 opt->got_any++; in main()
691 if (opt->got_dump_device_quirks) in main()
692 duplicate_option(argv[n]); in main()
693 opt->got_dump_device_quirks = 1; in main()
694 opt->got_any++; in main()
698 opt->got_show_iface_driver = 1; in main()
702 if (opt->got_set_config) in main()
703 duplicate_option(argv[n]); in main()
704 opt->config_index = num_id(argv[n + 1], "cfg_index"); in main()
705 opt->got_set_config = 1; in main()
706 opt->got_any++; in main()
707 n++; in main()
710 if (opt->got_set_alt) in main()
711 duplicate_option(argv[n]); in main()
712 opt->alt_index = num_id(argv[n + 1], "cfg_index"); in main()
713 opt->got_set_alt = 1; in main()
714 opt->got_any++; in main()
715 n++; in main()
718 if (opt->got_set_template) in main()
719 duplicate_option(argv[n]); in main()
720 opt->template = get_int(argv[n + 1]); in main()
721 opt->got_set_template = 1; in main()
722 opt->got_any++; in main()
723 n++; in main()
726 if (opt->got_get_template) in main()
727 duplicate_option(argv[n]); in main()
728 opt->got_get_template = 1; in main()
729 opt->got_any++; in main()
732 if (opt->got_dump_all_desc) in main()
733 duplicate_option(argv[n]); in main()
734 opt->got_dump_all_desc = 1; in main()
735 opt->got_any++; in main()
738 if (opt->got_dump_device_desc) in main()
739 duplicate_option(argv[n]); in main()
740 opt->got_dump_device_desc = 1; in main()
741 opt->got_any++; in main()
744 if (opt->got_dump_curr_config) in main()
745 duplicate_option(argv[n]); in main()
746 opt->got_dump_curr_config = 1; in main()
747 opt->got_any++; in main()
750 if (opt->got_dump_all_config) in main()
751 duplicate_option(argv[n]); in main()
752 opt->got_dump_all_config = 1; in main()
753 opt->got_any++; in main()
756 if (opt->got_dump_info) in main()
757 duplicate_option(argv[n]); in main()
758 opt->got_dump_info = 1; in main()
759 opt->got_any++; in main()
762 if (opt->got_dump_stats) in main()
763 duplicate_option(argv[n]); in main()
764 opt->got_dump_stats = 1; in main()
765 opt->got_any++; in main()
768 if (opt->got_dump_string) in main()
769 duplicate_option(argv[n]); in main()
770 opt->string_index = num_id(argv[n + 1], "str_index"); in main()
771 opt->got_dump_string = 1; in main()
772 opt->got_any++; in main()
773 n++; in main()
776 if (opt->got_suspend) in main()
777 duplicate_option(argv[n]); in main()
778 opt->got_suspend = 1; in main()
779 opt->got_any++; in main()
782 if (opt->got_resume) in main()
783 duplicate_option(argv[n]); in main()
784 opt->got_resume = 1; in main()
785 opt->got_any++; in main()
788 if (opt->got_power_off) in main()
789 duplicate_option(argv[n]); in main()
790 opt->got_power_off = 1; in main()
791 opt->got_any++; in main()
794 if (opt->got_power_save) in main()
795 duplicate_option(argv[n]); in main()
796 opt->got_power_save = 1; in main()
797 opt->got_any++; in main()
800 if (opt->got_power_on) in main()
801 duplicate_option(argv[n]); in main()
802 opt->got_power_on = 1; in main()
803 opt->got_any++; in main()
806 if (opt->got_reset) in main()
807 duplicate_option(argv[n]); in main()
808 opt->got_reset = 1; in main()
809 opt->got_any++; in main()
812 if (opt->got_list) in main()
813 duplicate_option(argv[n]); in main()
814 opt->got_list = 1; in main()
815 opt->got_any++; in main()
818 if (opt->got_do_request) in main()
819 duplicate_option(argv[n]); in main()
820 LIBUSB20_INIT(LIBUSB20_CONTROL_SETUP, &opt->setup); in main()
821 opt->setup.bmRequestType = num_id(argv[n + 1], "bmReqTyp"); in main()
822 opt->setup.bRequest = num_id(argv[n + 2], "bReq"); in main()
823 opt->setup.wValue = num_id(argv[n + 3], "wVal"); in main()
824 opt->setup.wIndex = num_id(argv[n + 4], "wIndex"); in main()
825 opt->setup.wLength = num_id(argv[n + 5], "wLen"); in main()
826 if (opt->setup.wLength != 0) { in main()
827 opt->buffer = malloc(opt->setup.wLength); in main()
829 opt->buffer = NULL; in main()
832 n += 5; in main()
834 if (!(opt->setup.bmRequestType & in main()
837 t = (argc - n - 1); in main()
838 if (t < opt->setup.wLength) { in main()
839 err(1, "request data missing"); in main()
841 t = opt->setup.wLength; in main()
842 while (t--) { in main()
843 ((uint8_t *)opt->buffer)[t] = in main()
844 num_id(argv[n + t + 1], "req_data"); in main()
846 n += opt->setup.wLength; in main()
848 opt->got_do_request = 1; in main()
849 opt->got_any++; in main()
852 if (n == 1) { in main()
853 ptr = argv[n]; in main()
856 (ptr[1] == 'g') && in main()
858 (ptr[3] == 'n')) in main()
869 opt->bus = unit; in main()
870 opt->addr = addr; in main()
871 opt->got_bus = 1; in main()
872 opt->got_addr = 1; in main()
879 if (opt->got_any) { in main()
884 opt->got_list = 1; in main()
885 opt->got_any++; in main()