xref: /plan9/sys/src/cmd/usb/kb/main.c (revision d40255d87ccd1acd15b87823a96efd7b6296fadd)
1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include "usb.h"
5 #include "hid.h"
6 
7 typedef struct Parg Parg;
8 
9 enum
10 {
11 	Ndevs = 10,
12 	Arglen = 80,
13 	Nargs = 10,
14 };
15 
16 static void
usage(void)17 usage(void)
18 {
19 	fprint(2, "usage: %s [-bdkm] [-a n] [-N nb] [dev...]\n", argv0);
20 	threadexitsall("usage");
21 }
22 
23 void
threadmain(int argc,char ** argv)24 threadmain(int argc, char **argv)
25 {
26 	char args[Arglen];
27 	char *as, *ae;
28 	int accel, pena, devid;
29 	int csps[] = { KbdCSP, PtrCSP, 0 };
30 
31 	quotefmtinstall();
32 	pena = 1;
33 	ae = args+sizeof(args);
34 	as = seprint(args, ae, "kb");
35 	ARGBEGIN{
36 	case 'a':
37 		accel = strtol(EARGF(usage()), nil, 0);
38 		as = seprint(as, ae, " -a %d", accel);
39 		break;
40 	case 'd':
41 		usbdebug++;
42 		as = seprint(as, ae, " -d");
43 		break;
44 	case 'k':
45 		as = seprint(as, ae, " -k");
46 		pena = 0;
47 		break;
48 	case 'm':
49 		as = seprint(as, ae, " -m");
50 		pena = 1;
51 		break;
52 	case 'N':
53 		devid = atoi(EARGF(usage()));		/* ignore dev number */
54 		USED(devid);
55 		break;
56 	case 'b':
57 		as = seprint(as, ae, " -b");
58 		break;
59 	default:
60 		usage();
61 	}ARGEND;
62 
63 	rfork(RFNOTEG);
64 	fmtinstall('U', Ufmt);
65 	threadsetgrp(threadid());
66 	if(pena == 0)
67 		csps[1] = 0;
68 	startdevs(args, argv, argc, matchdevcsp, csps, kbmain);
69 	threadexits(nil);
70 }
71