xref: /plan9/sys/src/cmd/usb/kb/main.c (revision bfb6eab9346d861b5f68a2b1af55a1768a8fe25b)
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
17 usage(void)
18 {
19 	fprint(2, "usage: %s [-dkm] [-a n] [dev...]\n", argv0);
20 	threadexitsall("usage");
21 }
22 
23 void
24 threadmain(int argc, char **argv)
25 {
26 	char args[Arglen];
27 	char *as;
28 	char *ae;
29 	int accel;
30 	int pena;
31 	int csps[] = { KbdCSP, PtrCSP, 0 };
32 
33 	quotefmtinstall();
34 	pena = 1;
35 	ae = args+sizeof(args);
36 	as = seprint(args, ae, "kb");
37 	ARGBEGIN{
38 	case 'a':
39 		accel = strtol(EARGF(usage()), nil, 0);
40 		as = seprint(as, ae, " -a %d", accel);
41 		break;
42 	case 'd':
43 		usbdebug++;
44 		/* fall */
45 	case 'k':
46 		as = seprint(as, ae, " -k");
47 		pena = 0;
48 		break;
49 	case 'm':
50 		as = seprint(as, ae, " -m");
51 		pena = 1;
52 		break;
53 	default:
54 		usage();
55 	}ARGEND;
56 
57 	rfork(RFNOTEG);
58 	fmtinstall('U', Ufmt);
59 	threadsetgrp(threadid());
60 	if(pena == 0)
61 		csps[1] = 0;
62 	startdevs(args, argv, argc, matchdevcsp, csps, kbmain);
63 	threadexits(nil);
64 }
65