1906943f9SDavid du Colombier #include <u.h>
2906943f9SDavid du Colombier #include <libc.h>
3906943f9SDavid du Colombier #include <thread.h>
4906943f9SDavid du Colombier #include "usb.h"
5906943f9SDavid du Colombier #include "hid.h"
6906943f9SDavid du Colombier
7906943f9SDavid du Colombier typedef struct Parg Parg;
8906943f9SDavid du Colombier
9906943f9SDavid du Colombier enum
10906943f9SDavid du Colombier {
11906943f9SDavid du Colombier Ndevs = 10,
12906943f9SDavid du Colombier Arglen = 80,
13906943f9SDavid du Colombier Nargs = 10,
14906943f9SDavid du Colombier };
15906943f9SDavid du Colombier
16906943f9SDavid du Colombier static void
usage(void)17906943f9SDavid du Colombier usage(void)
18906943f9SDavid du Colombier {
19*d40255d8SDavid du Colombier fprint(2, "usage: %s [-bdkm] [-a n] [-N nb] [dev...]\n", argv0);
20906943f9SDavid du Colombier threadexitsall("usage");
21906943f9SDavid du Colombier }
22906943f9SDavid du Colombier
23906943f9SDavid du Colombier void
threadmain(int argc,char ** argv)24906943f9SDavid du Colombier threadmain(int argc, char **argv)
25906943f9SDavid du Colombier {
26906943f9SDavid du Colombier char args[Arglen];
27ed868a7cSDavid du Colombier char *as, *ae;
28ed868a7cSDavid du Colombier int accel, pena, devid;
29906943f9SDavid du Colombier int csps[] = { KbdCSP, PtrCSP, 0 };
30906943f9SDavid du Colombier
31906943f9SDavid du Colombier quotefmtinstall();
32906943f9SDavid du Colombier pena = 1;
33906943f9SDavid du Colombier ae = args+sizeof(args);
34906943f9SDavid du Colombier as = seprint(args, ae, "kb");
35906943f9SDavid du Colombier ARGBEGIN{
36906943f9SDavid du Colombier case 'a':
37906943f9SDavid du Colombier accel = strtol(EARGF(usage()), nil, 0);
38906943f9SDavid du Colombier as = seprint(as, ae, " -a %d", accel);
39906943f9SDavid du Colombier break;
40906943f9SDavid du Colombier case 'd':
41906943f9SDavid du Colombier usbdebug++;
42ed868a7cSDavid du Colombier as = seprint(as, ae, " -d");
43ed868a7cSDavid du Colombier break;
44906943f9SDavid du Colombier case 'k':
45906943f9SDavid du Colombier as = seprint(as, ae, " -k");
46906943f9SDavid du Colombier pena = 0;
47906943f9SDavid du Colombier break;
48906943f9SDavid du Colombier case 'm':
49906943f9SDavid du Colombier as = seprint(as, ae, " -m");
50906943f9SDavid du Colombier pena = 1;
51906943f9SDavid du Colombier break;
52ed868a7cSDavid du Colombier case 'N':
53ed868a7cSDavid du Colombier devid = atoi(EARGF(usage())); /* ignore dev number */
54ed868a7cSDavid du Colombier USED(devid);
55ed868a7cSDavid du Colombier break;
56*d40255d8SDavid du Colombier case 'b':
57*d40255d8SDavid du Colombier as = seprint(as, ae, " -b");
58*d40255d8SDavid du Colombier break;
59906943f9SDavid du Colombier default:
60906943f9SDavid du Colombier usage();
61906943f9SDavid du Colombier }ARGEND;
62906943f9SDavid du Colombier
63906943f9SDavid du Colombier rfork(RFNOTEG);
64906943f9SDavid du Colombier fmtinstall('U', Ufmt);
65906943f9SDavid du Colombier threadsetgrp(threadid());
66906943f9SDavid du Colombier if(pena == 0)
67906943f9SDavid du Colombier csps[1] = 0;
68906943f9SDavid du Colombier startdevs(args, argv, argc, matchdevcsp, csps, kbmain);
69906943f9SDavid du Colombier threadexits(nil);
70906943f9SDavid du Colombier }
71