serial.h 2.4 KB

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