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