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] [dev...]\n", argv0); 20 threadexitsall("usage"); 21 } 22 23 void 24 threadmain(int argc, char **argv) 25 { 26 char args[Arglen]; 27 char *as; 28 char *ae; 29 int accel; 30 int pena; 31 int csps[] = { KbdCSP, PtrCSP, 0 }; 32 33 quotefmtinstall(); 34 pena = 1; 35 ae = args+sizeof(args); 36 as = seprint(args, ae, "kb"); 37 ARGBEGIN{ 38 case 'a': 39 accel = strtol(EARGF(usage()), nil, 0); 40 as = seprint(as, ae, " -a %d", accel); 41 break; 42 case 'd': 43 usbdebug++; 44 /* fall */ 45 case 'k': 46 as = seprint(as, ae, " -k"); 47 pena = 0; 48 break; 49 case 'm': 50 as = seprint(as, ae, " -m"); 51 pena = 1; 52 break; 53 default: 54 usage(); 55 }ARGEND; 56 57 rfork(RFNOTEG); 58 fmtinstall('U', Ufmt); 59 threadsetgrp(threadid()); 60 if(pena == 0) 61 csps[1] = 0; 62 startdevs(args, argv, argc, matchdevcsp, csps, kbmain); 63 threadexits(nil); 64 } 65