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