xref: /plan9/sys/src/cmd/usb/kb/main.c (revision ed868a7c1f0ac853ba7f6fe1cfc03d41d6ae4523)
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
17906943f9SDavid du Colombier usage(void)
18906943f9SDavid du Colombier {
19*ed868a7cSDavid du Colombier 	fprint(2, "usage: %s [-dkm] [-a n] [-N nb] [dev...]\n", argv0);
20906943f9SDavid du Colombier 	threadexitsall("usage");
21906943f9SDavid du Colombier }
22906943f9SDavid du Colombier 
23906943f9SDavid du Colombier void
24906943f9SDavid du Colombier threadmain(int argc, char **argv)
25906943f9SDavid du Colombier {
26906943f9SDavid du Colombier 	char args[Arglen];
27*ed868a7cSDavid du Colombier 	char *as, *ae;
28*ed868a7cSDavid 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++;
42*ed868a7cSDavid du Colombier 		as = seprint(as, ae, " -d");
43*ed868a7cSDavid 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;
52*ed868a7cSDavid du Colombier 	case 'N':
53*ed868a7cSDavid du Colombier 		devid = atoi(EARGF(usage()));		/* ignore dev number */
54*ed868a7cSDavid du Colombier 		USED(devid);
55*ed868a7cSDavid du Colombier 		break;
56906943f9SDavid du Colombier 	default:
57906943f9SDavid du Colombier 		usage();
58906943f9SDavid du Colombier 	}ARGEND;
59906943f9SDavid du Colombier 
60906943f9SDavid du Colombier 	rfork(RFNOTEG);
61906943f9SDavid du Colombier 	fmtinstall('U', Ufmt);
62906943f9SDavid du Colombier 	threadsetgrp(threadid());
63906943f9SDavid du Colombier 	if(pena == 0)
64906943f9SDavid du Colombier 		csps[1] = 0;
65906943f9SDavid du Colombier 	startdevs(args, argv, argc, matchdevcsp, csps, kbmain);
66906943f9SDavid du Colombier 	threadexits(nil);
67906943f9SDavid du Colombier }
68