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 [-bdkm] [-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 case 'b': 57 as = seprint(as, ae, " -b"); 58 break; 59 default: 60 usage(); 61 }ARGEND; 62 63 rfork(RFNOTEG); 64 fmtinstall('U', Ufmt); 65 threadsetgrp(threadid()); 66 if(pena == 0) 67 csps[1] = 0; 68 startdevs(args, argv, argc, matchdevcsp, csps, kbmain); 69 threadexits(nil); 70 } 71