]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/nusb/serial/serial.h
add nusb/cam
[plan9front.git] / sys / src / cmd / nusb / serial / serial.h
1 typedef struct Serial Serial;
2 typedef struct Serialops Serialops;
3 typedef struct Serialport Serialport;
4
5 struct Serialops {
6         int     (*seteps)(Serialport*);
7         int     (*init)(Serialport*);
8         int     (*getparam)(Serialport*);
9         int     (*setparam)(Serialport*);
10         int     (*clearpipes)(Serialport*);
11         int     (*reset)(Serial*, Serialport*);
12         int     (*sendlines)(Serialport*);
13         int     (*modemctl)(Serialport*, int);
14         int     (*setbreak)(Serialport*, int);
15         int     (*readstatus)(Serialport*);
16         int     (*wait4data)(Serialport*, uchar *, int);
17         int     (*wait4write)(Serialport*, uchar *, int);
18 };
19
20 enum {
21         DataBufSz = 8*1024,
22         Maxifc = 16,
23 };
24
25 struct Serialport {
26         char name[32];
27         Serial  *s;             /* device we belong to */
28         int     isjtag;
29
30         Dev     *epintr;        /* may not exist */
31
32         Dev     *epin;
33         Dev     *epout;
34
35         uchar   ctlstate;
36
37         /* serial parameters */
38         uint    baud;
39         int     stop;
40         int     mctl;
41         int     parity;
42         int     bits;
43         int     fifo;
44         int     limit;
45         int     rts;
46         int     cts;
47         int     dsr;
48         int     dcd;
49         int     dtr;
50         int     rlsd;
51
52         vlong   timer;
53         int     blocked;        /* for sw flow ctl. BUG: not implemented yet */
54         int     nbreakerr;
55         int     ring;
56         int     nframeerr;
57         int     nparityerr;
58         int     novererr;
59         int     enabled;
60
61         int     interfc;        /* interfc on the device for ftdi */
62
63         Channel *w4data;
64         Channel *gotdata;
65         int     ndata;
66         uchar   data[DataBufSz];
67
68         Reqqueue *rq;
69         Reqqueue *wq;
70 };
71
72 struct Serial {
73         QLock;
74         Dev     *dev;           /* usb device*/
75
76         int     type;           /* serial model subtype */
77         int     recover;        /* # of non-fatal recovery tries */
78         Serialops;
79
80         int     hasepintr;
81
82         int     jtag;           /* index of jtag interface, -1 none */
83         int     nifcs;          /* # of serial interfaces, including JTAG */
84         Serialport p[Maxifc];
85         int     maxrtrans;
86         int     maxwtrans;
87
88         int     maxread;
89         int     maxwrite;
90
91         int     inhdrsz;
92         int     outhdrsz;
93         int     baudbase;       /* for special baud base settings, see ftdi */
94 };
95
96 enum {
97         /* soft flow control chars */
98         CTLS    = 023,
99         CTLQ    = 021,
100         CtlDTR  = 1,
101         CtlRTS  = 2,
102 };
103
104 /*
105  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.h|htmlfmt
106  * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt
107  */
108
109 typedef struct Cinfo Cinfo;
110 struct Cinfo {
111         int     vid;            /* usb vendor id */
112         int     did;            /* usb device/product id */
113
114         int     cid;            /* assigned for us */
115 };
116
117 extern int serialdebug;
118
119 #define dsprint if(serialdebug)fprint
120
121 int     serialrecover(Serial *ser, Serialport *p, Dev *ep, char *err);
122 int     serialreset(Serial *ser);
123 char    *serdumpst(Serialport *p, char *buf, int bufsz);
124 Cinfo   *matchid(Cinfo *tab, int vid, int did);