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