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