1 #include <u.h> 2 #include <libc.h> 3 #include <thread.h> 4 #include "usb.h" 5 #include "usbfs.h" 6 #include "serial.h" 7 #include "ucons.h" 8 #include "prolific.h" 9 #include "ftdi.h" 10 #include "silabs.h" 11 12 enum { 13 Arglen = 80, 14 }; 15 16 typedef struct Parg Parg; 17 18 /* keep in sync with serial.c */ 19 static void 20 usage(void) 21 { 22 fprint(2, "usage: %s [-dD] [-N nb] [-m mtpt] [-s srv] [dev...]\n", argv0); 23 threadexitsall("usage"); 24 } 25 26 static int 27 matchserial(char *info, void*) 28 { 29 if(uconsmatch(info) == 0 || plmatch(info) == 0 || 30 ftmatch(nil, info) == 0 || slmatch(info) == 0) 31 return 0; 32 return -1; 33 } 34 35 void 36 threadmain(int argc, char **argv) 37 { 38 char *mnt, *srv, *as, *ae; 39 char args[Arglen]; 40 41 mnt = "/dev"; 42 srv = nil; 43 44 quotefmtinstall(); 45 ae = args + sizeof args; 46 as = seprint(args, ae, "serial"); 47 ARGBEGIN{ 48 case 'D': 49 usbfsdebug++; 50 break; 51 case 'd': 52 usbdebug++; 53 as = seprint(as, ae, " -d"); 54 break; 55 case 'N': 56 as = seprint(as, ae, " -N %s", EARGF(usage())); 57 break; 58 case 'm': 59 mnt = EARGF(usage()); 60 break; 61 case 's': 62 srv = EARGF(usage()); 63 break; 64 default: 65 usage(); 66 break; 67 }ARGEND; 68 69 rfork(RFNOTEG); 70 fmtinstall('U', Ufmt); 71 threadsetgrp(threadid()); 72 73 usbfsinit(srv, mnt, &usbdirfs, MAFTER|MCREATE); 74 startdevs(args, argv, argc, matchserial, nil, serialmain); 75 threadexits(nil); 76 } 77