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