xref: /plan9/sys/src/cmd/usb/serial/main.c (revision 9b7bf7df4595c26f1e9b67beb0c6e44c9876fb05)
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