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