typedef struct Serialops Serialops; typedef struct Serial Serial; struct Serialops { int (*init)(Serial*); int (*getparam)(Serial*); int (*setparam)(Serial*); void (*clearpipes)(Serial*); void (*sendlines)(Serial*); void (*modemctl)(Serial*, int); int (*setbreak)(Serial*, int); void (*readstatus)(Serial*); }; struct Serial { QLock; Dev *dev; /* usb device*/ Dev *ep; /* endpoint to get events */ Dev *epintr; Dev *epin; Dev *epout; Usbfs fs; int type; int recover; uchar ctlstate; /* serial parameters */ uint baud; int stop; int mctl; int parity; int bits; int fifo; int limit; int rts; int cts; int dsr; int dcd; int dtr; vlong timer; int blocked; /* for sw flow ctl. BUG: not implemented yet */ int nbreakerr; int ring; int nframeerr; int nparityerr; int novererr; int enabled; Serialops; }; extern Serialops plops; enum { /* soft flow control chars */ CTLS = 023, CTLQ = 021, }; /* * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.h|htmlfmt * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt */ int serialmain(Dev *d, int argc, char *argv[]); typedef struct Cinfo Cinfo; struct Cinfo { int vid; /* usb vendor id */ int did; /* usb device/product id */ int cid; /* controller id assigned by us */ }; extern Cinfo cinfo[]; extern int serialdebug; #define dsprint if(serialdebug)fprint int serialrecover(Serial *ser, char *err); int serialreset(Serial *ser); char *dumpstatus(Serial *ser, char *buf, int bufsz);