xref: /plan9/sys/src/cmd/usb/kb/main.c (revision d40255d87ccd1acd15b87823a96efd7b6296fadd)
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