Code for talking to the MAX3420 USB Device Controller.
[goodfet] / firmware / include / msp430_serial.h
1 #ifndef _msp430_serial_h
2 #define _msp430_serial_h
3 /* Name: msp430_serial_h
4  * Tabsize: 8
5  * Copyright: (c) 2011 by Peter@Lorenzen.us
6  * License: [BSD]eerware
7  */
8
9 #include <stdint.h>
10
11 #ifndef FALSE
12 #  define FALSE 0
13 #endif
14 #ifndef TRUE
15 #  define TRUE 1
16 #endif
17 #ifndef NULL
18 #  define NULL  ((void *) 0)
19 #endif
20
21 #define FIFO_SZ 64              // power of 2
22 typedef struct fifo {
23         uint8_t i;
24         uint8_t o;
25         volatile uint8_t count, empty;
26         uint8_t b[FIFO_SZ];     // buffer
27 } fifo_t;
28
29 extern fifo_t fiforx0;
30 extern fifo_t fifotx0;
31 extern fifo_t fiforx1;
32 extern fifo_t fifotx1;
33 extern fifo_t *rxfp0;
34 extern fifo_t *txfp0;
35 extern fifo_t *rxfp1;
36 extern fifo_t *txfp1;
37
38 void serputc(char c, fifo_t *fp);
39 void serputs(char *cpt, fifo_t *fp);
40 void serputb(char c, fifo_t *fp);
41 void serputw(int w, fifo_t *fp);
42 int sergetc(fifo_t *fp);
43 int seravailable(fifo_t *fp);
44 void serflush(fifo_t *fp);
45 void ser0_init(int baud, fifo_t *rd, fifo_t *wr);
46 void ser1_init(int baud, fifo_t *rd, fifo_t *wr);
47 void serclear(fifo_t *fp);
48
49 #ifdef INBAND_DEBUG
50 #if (DEBUG_LEVEL > 0)
51 extern char dlevel;
52 void dputc(char c);
53 void dputs(char *str);
54 void dputb(char c);
55 void dputw(int w);
56 #else 
57 #  define dputc(c)
58 #  define dputs(s)
59 #  define dputb(b)
60 #  define dputw(w)
61 #endif
62 #  define dflush()
63 #  define ddflush()
64 #  define dddflush()
65 #if (DEBUG_LEVEL > 1)
66 #  define ddputc(c) if (dlevel>1) dputc(c)
67 #  define ddputs(s) if (dlevel>1) dputs(s)
68 #  define ddputb(b) if (dlevel>1) dputb(b)
69 #  define ddputw(w) if (dlevel>1) dputw(w)
70 #else 
71 #  define ddputc(c)
72 #  define ddputs(s)
73 #  define ddputb(b)
74 #  define ddputw(w)
75 #endif
76
77 #if (DEBUG_LEVEL > 2)
78 #  define dddputc(c) if (dlevel>2) dputc(c)
79 #  define dddputs(s) if (dlevel>2) dputs(s)
80 #  define dddputb(b) if (dlevel>2) dputb(b)
81 #  define dddputw(w) if (dlevel>2) dputw(w)
82 #else 
83 #  define dddputc(c)
84 #  define dddputs(s)
85 #  define dddputb(b)
86 #  define dddputw(w)
87 #endif
88 #else 
89
90 // we use fp1 for debug output
91 #if (DEBUG_LEVEL > 0)
92 extern char dlevel;
93
94 #  define dputc(c) if (dlevel) serputc(c,txfp1)
95 #  define dputs(s) if (dlevel) serputs(s,txfp1)
96 #  define dputb(b) if (dlevel) serputb(b,txfp1)
97 #  define dputw(w) if (dlevel) serputw(w,txfp1)
98 #  define dflush() if (dlevel) serflush(txfp1)
99 #else 
100 #  define dputc(c)
101 #  define dputs(s)
102 #  define dputb(b)
103 #  define dputw(w)
104 #  define dflush()
105 #endif
106 #if (DEBUG_LEVEL > 1)
107 #  define ddputc(c) if (dlevel>1) serputc(c,txfp1)
108 #  define ddputs(s) if (dlevel>1) serputs(s,txfp1)
109 #  define ddputb(b) if (dlevel>1) serputb(b,txfp1)
110 #  define ddputw(w) if (dlevel>1) serputw(w,txfp1)
111 #  define ddflush() if (dlevel>1) serflush(txfp1)
112 #else 
113 #  define ddputc(c)
114 #  define ddputs(s)
115 #  define ddputb(b)
116 #  define ddputw(w)
117 #  define ddflush()
118 #endif
119
120 #if (DEBUG_LEVEL > 2)
121 #  define dddputc(c) if (dlevel>2) serputc(c,txfp1)
122 #  define dddputs(s) if (dlevel>2) serputs(s,txfp1)
123 #  define dddputb(b) if (dlevel>2) serputb(b,txfp1)
124 #  define dddputw(w) if (dlevel>2) serputw(w,txfp1)
125 #  define dddflush() if (dlevel>2) serflush(txfp1)
126 #else 
127 #  define dddputc(c)
128 #  define dddputs(s)
129 #  define dddputb(b)
130 #  define dddputw(w)
131 #  define dddflush()
132 #endif
133 #endif
134
135 #endif