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
usage(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
matchserial(char * info,void *)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
threadmain(int argc,char ** argv)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