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