aboutsummaryrefslogtreecommitdiff
path: root/FT245.h
blob: e90f791d690aac6f40ebf542775e7a85fdf2ede7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
#ifndef FT245_H
#define FT245_H

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include "circular_buffer.h"

#ifndef FT245_DRIVER_MODE_DYNAMIC
#define FT245_DRIVER_MODE_DYNAMIC 0
#endif

#ifndef FT245_DRIVER_MODE_STATIC
#define FT245_DRIVER_MODE_STATIC 1
#endif

#ifndef FT245_BUFFER_SIZE_TX
#define FT245_BUFFER_SIZE_TX 64
#endif

#ifndef FT245_BUFFER_SIZE_RX
#define FT245_BUFFER_SIZE_RX 64
#endif

typedef circular_buffer_struct(uint8_t, FT245_BUFFER_SIZE_TX) buffer_tx_t;
typedef circular_buffer_struct(uint8_t, FT245_BUFFER_SIZE_RX) buffer_rx_t;

typedef struct ft245 {
    // Options
    bool full_word_mode;
    // Ring buffers
    buffer_tx_t buffer_tx;
    buffer_rx_t buffer_rx;
    // CLK state
    bool clk_state;
    uint8_t clk_count;
#if(FT245_DRIVER_MODE_DYNAMIC == 1)
    // To input
    void (*DATA0_to_input)(void);
    void (*DATA1_to_input)(void);
    void (*DATA2_to_input)(void);
    void (*DATA3_to_input)(void);
    void (*DATA4_to_input)(void);
    void (*DATA5_to_input)(void);
    void (*DATA6_to_input)(void);
    void (*DATA7_to_input)(void);
    void (*DATA8_to_input)(void);
    void (*DATA9_to_input)(void);
    void (*DATA10_to_input)(void);
    void (*DATA11_to_input)(void);
    void (*DATA12_to_input)(void);
    void (*DATA13_to_input)(void);
    void (*DATA14_to_input)(void);
    void (*DATA15_to_input)(void);
    void (*DATA16_to_input)(void);
    void (*DATA17_to_input)(void);
    void (*DATA18_to_input)(void);
    void (*DATA19_to_input)(void);
    void (*DATA20_to_input)(void);
    void (*DATA21_to_input)(void);
    void (*DATA22_to_input)(void);
    void (*DATA23_to_input)(void);
    void (*DATA24_to_input)(void);
    void (*DATA25_to_input)(void);
    void (*DATA26_to_input)(void);
    void (*DATA27_to_input)(void);
    void (*DATA28_to_input)(void);
    void (*DATA29_to_input)(void);
    void (*DATA30_to_input)(void);
    void (*DATA31_to_input)(void);
    void (*BE0_to_input)(void);
    void (*BE1_to_input)(void);
    void (*BE2_to_input)(void);
    void (*BE3_to_input)(void);
    // To output
    void (*DATA0_to_output)(void);
    void (*DATA1_to_output)(void);
    void (*DATA2_to_output)(void);
    void (*DATA3_to_output)(void);
    void (*DATA4_to_output)(void);
    void (*DATA5_to_output)(void);
    void (*DATA6_to_output)(void);
    void (*DATA7_to_output)(void);
    void (*DATA8_to_output)(void);
    void (*DATA9_to_output)(void);
    void (*DATA10_to_output)(void);
    void (*DATA11_to_output)(void);
    void (*DATA12_to_output)(void);
    void (*DATA13_to_output)(void);
    void (*DATA14_to_output)(void);
    void (*DATA15_to_output)(void);
    void (*DATA16_to_output)(void);
    void (*DATA17_to_output)(void);
    void (*DATA18_to_output)(void);
    void (*DATA19_to_output)(void);
    void (*DATA20_to_output)(void);
    void (*DATA21_to_output)(void);
    void (*DATA22_to_output)(void);
    void (*DATA23_to_output)(void);
    void (*DATA24_to_output)(void);
    void (*DATA25_to_output)(void);
    void (*DATA26_to_output)(void);
    void (*DATA27_to_output)(void);
    void (*DATA28_to_output)(void);
    void (*DATA29_to_output)(void);
    void (*DATA30_to_output)(void);
    void (*DATA31_to_output)(void);
    void (*BE0_to_output)(void);
    void (*BE1_to_output)(void);
    void (*BE2_to_output)(void);
    void (*BE3_to_output)(void);
    // Set
    void (*CLK_set)(void);
    void (*RXF_N_set)(void);
    void (*TXE_N_set)(void);
    void (*DATA0_set)(void);
    void (*DATA1_set)(void);
    void (*DATA2_set)(void);
    void (*DATA3_set)(void);
    void (*DATA4_set)(void);
    void (*DATA5_set)(void);
    void (*DATA6_set)(void);
    void (*DATA7_set)(void);
    void (*DATA8_set)(void);
    void (*DATA9_set)(void);
    void (*DATA10_set)(void);
    void (*DATA11_set)(void);
    void (*DATA12_set)(void);
    void (*DATA13_set)(void);
    void (*DATA14_set)(void);
    void (*DATA15_set)(void);
    void (*DATA16_set)(void);
    void (*DATA17_set)(void);
    void (*DATA18_set)(void);
    void (*DATA19_set)(void);
    void (*DATA20_set)(void);
    void (*DATA21_set)(void);
    void (*DATA22_set)(void);
    void (*DATA23_set)(void);
    void (*DATA24_set)(void);
    void (*DATA25_set)(void);
    void (*DATA26_set)(void);
    void (*DATA27_set)(void);
    void (*DATA28_set)(void);
    void (*DATA29_set)(void);
    void (*DATA30_set)(void);
    void (*DATA31_set)(void);
    void (*BE0_set)(void);
    void (*BE1_set)(void);
    void (*BE2_set)(void);
    void (*BE3_set)(void);
    // Reset
    void (*CLK_reset)(void);
    void (*RXF_N_reset)(void);
    void (*TXE_N_reset)(void);
    void (*DATA0_reset)(void);
    void (*DATA1_reset)(void);
    void (*DATA2_reset)(void);
    void (*DATA3_reset)(void);
    void (*DATA4_reset)(void);
    void (*DATA5_reset)(void);
    void (*DATA6_reset)(void);
    void (*DATA7_reset)(void);
    void (*DATA8_reset)(void);
    void (*DATA9_reset)(void);
    void (*DATA10_reset)(void);
    void (*DATA11_reset)(void);
    void (*DATA12_reset)(void);
    void (*DATA13_reset)(void);
    void (*DATA14_reset)(void);
    void (*DATA15_reset)(void);
    void (*DATA16_reset)(void);
    void (*DATA17_reset)(void);
    void (*DATA18_reset)(void);
    void (*DATA19_reset)(void);
    void (*DATA20_reset)(void);
    void (*DATA21_reset)(void);
    void (*DATA22_reset)(void);
    void (*DATA23_reset)(void);
    void (*DATA24_reset)(void);
    void (*DATA25_reset)(void);
    void (*DATA26_reset)(void);
    void (*DATA27_reset)(void);
    void (*DATA28_reset)(void);
    void (*DATA29_reset)(void);
    void (*DATA30_reset)(void);
    void (*DATA31_reset)(void);
    void (*BE0_reset)(void);
    void (*BE1_reset)(void);
    void (*BE2_reset)(void);
    void (*BE3_reset)(void);
    // Toggle
    void (*CLK_toggle)(void);
    // Read
    bool (*TXE_N_read)(void);
    bool (*RXF_N_read)(void);
    bool (*WR_N_read)(void);
    bool (*SIWU_N_read)(void);
    bool (*RD_N_read)(void);
    bool (*OE_N_read)(void);
    bool (*RST_N_read)(void);
    bool (*DATA0_read)(void);
    bool (*DATA1_read)(void);
    bool (*DATA2_read)(void);
    bool (*DATA3_read)(void);
    bool (*DATA4_read)(void);
    bool (*DATA5_read)(void);
    bool (*DATA6_read)(void);
    bool (*DATA7_read)(void);
    bool (*DATA8_read)(void);
    bool (*DATA9_read)(void);
    bool (*DATA10_read)(void);
    bool (*DATA11_read)(void);
    bool (*DATA12_read)(void);
    bool (*DATA13_read)(void);
    bool (*DATA14_read)(void);
    bool (*DATA15_read)(void);
    bool (*DATA16_read)(void);
    bool (*DATA17_read)(void);
    bool (*DATA18_read)(void);
    bool (*DATA19_read)(void);
    bool (*DATA20_read)(void);
    bool (*DATA21_read)(void);
    bool (*DATA22_read)(void);
    bool (*DATA23_read)(void);
    bool (*DATA24_read)(void);
    bool (*DATA25_read)(void);
    bool (*DATA26_read)(void);
    bool (*DATA27_read)(void);
    bool (*DATA28_read)(void);
    bool (*DATA29_read)(void);
    bool (*DATA30_read)(void);
    bool (*DATA31_read)(void);
    bool (*BE0_read)(void);
    bool (*BE1_read)(void);
    bool (*BE2_read)(void);
    bool (*BE3_read)(void);
#endif // (FT245_DRIVER_MODE_DYNAMIC == 1)
} ft245_t;

#if(FT245_DRIVER_MODE_STATIC == 1)
// To input
extern void FT245_DATA0_to_input(void);
extern void FT245_DATA1_to_input(void);
extern void FT245_DATA2_to_input(void);
extern void FT245_DATA3_to_input(void);
extern void FT245_DATA4_to_input(void);
extern void FT245_DATA5_to_input(void);
extern void FT245_DATA6_to_input(void);
extern void FT245_DATA7_to_input(void);
extern void FT245_DATA8_to_input(void);
extern void FT245_DATA9_to_input(void);
extern void FT245_DATA10_to_input(void);
extern void FT245_DATA11_to_input(void);
extern void FT245_DATA12_to_input(void);
extern void FT245_DATA13_to_input(void);
extern void FT245_DATA14_to_input(void);
extern void FT245_DATA15_to_input(void);
extern void FT245_DATA16_to_input(void);
extern void FT245_DATA17_to_input(void);
extern void FT245_DATA18_to_input(void);
extern void FT245_DATA19_to_input(void);
extern void FT245_DATA20_to_input(void);
extern void FT245_DATA21_to_input(void);
extern void FT245_DATA22_to_input(void);
extern void FT245_DATA23_to_input(void);
extern void FT245_DATA24_to_input(void);
extern void FT245_DATA25_to_input(void);
extern void FT245_DATA26_to_input(void);
extern void FT245_DATA27_to_input(void);
extern void FT245_DATA28_to_input(void);
extern void FT245_DATA29_to_input(void);
extern void FT245_DATA30_to_input(void);
extern void FT245_DATA31_to_input(void);
extern void FT245_BE0_to_input(void);
extern void FT245_BE1_to_input(void);
extern void FT245_BE2_to_input(void);
extern void FT245_BE3_to_input(void);
// To output
extern void FT245_DATA0_to_output(void);
extern void FT245_DATA1_to_output(void);
extern void FT245_DATA2_to_output(void);
extern void FT245_DATA3_to_output(void);
extern void FT245_DATA4_to_output(void);
extern void FT245_DATA5_to_output(void);
extern void FT245_DATA6_to_output(void);
extern void FT245_DATA7_to_output(void);
extern void FT245_DATA8_to_output(void);
extern void FT245_DATA9_to_output(void);
extern void FT245_DATA10_to_output(void);
extern void FT245_DATA11_to_output(void);
extern void FT245_DATA12_to_output(void);
extern void FT245_DATA13_to_output(void);
extern void FT245_DATA14_to_output(void);
extern void FT245_DATA15_to_output(void);
extern void FT245_DATA16_to_output(void);
extern void FT245_DATA17_to_output(void);
extern void FT245_DATA18_to_output(void);
extern void FT245_DATA19_to_output(void);
extern void FT245_DATA20_to_output(void);
extern void FT245_DATA21_to_output(void);
extern void FT245_DATA22_to_output(void);
extern void FT245_DATA23_to_output(void);
extern void FT245_DATA24_to_output(void);
extern void FT245_DATA25_to_output(void);
extern void FT245_DATA26_to_output(void);
extern void FT245_DATA27_to_output(void);
extern void FT245_DATA28_to_output(void);
extern void FT245_DATA29_to_output(void);
extern void FT245_DATA30_to_output(void);
extern void FT245_DATA31_to_output(void);
extern void FT245_BE0_to_output(void);
extern void FT245_BE1_to_output(void);
extern void FT245_BE2_to_output(void);
extern void FT245_BE3_to_output(void);
// Set
extern void FT245_CLK_set(void);
extern void FT245_RXF_N_set(void);
extern void FT245_TXE_N_set(void);
extern void FT245_DATA0_set(void);
extern void FT245_DATA1_set(void);
extern void FT245_DATA2_set(void);
extern void FT245_DATA3_set(void);
extern void FT245_DATA4_set(void);
extern void FT245_DATA5_set(void);
extern void FT245_DATA6_set(void);
extern void FT245_DATA7_set(void);
extern void FT245_DATA8_set(void);
extern void FT245_DATA9_set(void);
extern void FT245_DATA10_set(void);
extern void FT245_DATA11_set(void);
extern void FT245_DATA12_set(void);
extern void FT245_DATA13_set(void);
extern void FT245_DATA14_set(void);
extern void FT245_DATA15_set(void);
extern void FT245_DATA16_set(void);
extern void FT245_DATA17_set(void);
extern void FT245_DATA18_set(void);
extern void FT245_DATA19_set(void);
extern void FT245_DATA20_set(void);
extern void FT245_DATA21_set(void);
extern void FT245_DATA22_set(void);
extern void FT245_DATA23_set(void);
extern void FT245_DATA24_set(void);
extern void FT245_DATA25_set(void);
extern void FT245_DATA26_set(void);
extern void FT245_DATA27_set(void);
extern void FT245_DATA28_set(void);
extern void FT245_DATA29_set(void);
extern void FT245_DATA30_set(void);
extern void FT245_DATA31_set(void);
extern void FT245_BE0_set(void);
extern void FT245_BE1_set(void);
extern void FT245_BE2_set(void);
extern void FT245_BE3_set(void);
// Reset
extern void FT245_CLK_reset(void);
extern void FT245_RXF_N_reset(void);
extern void FT245_TXE_N_reset(void);
extern void FT245_DATA0_reset(void);
extern void FT245_DATA1_reset(void);
extern void FT245_DATA2_reset(void);
extern void FT245_DATA3_reset(void);
extern void FT245_DATA4_reset(void);
extern void FT245_DATA5_reset(void);
extern void FT245_DATA6_reset(void);
extern void FT245_DATA7_reset(void);
extern void FT245_DATA8_reset(void);
extern void FT245_DATA9_reset(void);
extern void FT245_DATA10_reset(void);
extern void FT245_DATA11_reset(void);
extern void FT245_DATA12_reset(void);
extern void FT245_DATA13_reset(void);
extern void FT245_DATA14_reset(void);
extern void FT245_DATA15_reset(void);
extern void FT245_DATA16_reset(void);
extern void FT245_DATA17_reset(void);
extern void FT245_DATA18_reset(void);
extern void FT245_DATA19_reset(void);
extern void FT245_DATA20_reset(void);
extern void FT245_DATA21_reset(void);
extern void FT245_DATA22_reset(void);
extern void FT245_DATA23_reset(void);
extern void FT245_DATA24_reset(void);
extern void FT245_DATA25_reset(void);
extern void FT245_DATA26_reset(void);
extern void FT245_DATA27_reset(void);
extern void FT245_DATA28_reset(void);
extern void FT245_DATA29_reset(void);
extern void FT245_DATA30_reset(void);
extern void FT245_DATA31_reset(void);
extern void FT245_BE0_reset(void);
extern void FT245_BE1_reset(void);
extern void FT245_BE2_reset(void);
extern void FT245_BE3_reset(void);
// Toggle
extern void FT245_CLK_toggle(void);
// Read
extern bool FT245_TXE_N_read(void);
extern bool FT245_RXF_N_read(void);
extern bool FT245_WR_N_read(void);
extern bool FT245_SIWU_N_read(void);
extern bool FT245_RD_N_read(void);
extern bool FT245_OE_N_read(void);
extern bool FT245_RST_N_read(void);
extern bool FT245_DATA0_read(void);
extern bool FT245_DATA1_read(void);
extern bool FT245_DATA2_read(void);
extern bool FT245_DATA3_read(void);
extern bool FT245_DATA4_read(void);
extern bool FT245_DATA5_read(void);
extern bool FT245_DATA6_read(void);
extern bool FT245_DATA7_read(void);
extern bool FT245_DATA8_read(void);
extern bool FT245_DATA9_read(void);
extern bool FT245_DATA10_read(void);
extern bool FT245_DATA11_read(void);
extern bool FT245_DATA12_read(void);
extern bool FT245_DATA13_read(void);
extern bool FT245_DATA14_read(void);
extern bool FT245_DATA15_read(void);
extern bool FT245_DATA16_read(void);
extern bool FT245_DATA17_read(void);
extern bool FT245_DATA18_read(void);
extern bool FT245_DATA19_read(void);
extern bool FT245_DATA20_read(void);
extern bool FT245_DATA21_read(void);
extern bool FT245_DATA22_read(void);
extern bool FT245_DATA23_read(void);
extern bool FT245_DATA24_read(void);
extern bool FT245_DATA25_read(void);
extern bool FT245_DATA26_read(void);
extern bool FT245_DATA27_read(void);
extern bool FT245_DATA28_read(void);
extern bool FT245_DATA29_read(void);
extern bool FT245_DATA30_read(void);
extern bool FT245_DATA31_read(void);
extern bool FT245_BE0_read(void);
extern bool FT245_BE1_read(void);
extern bool FT245_BE2_read(void);
extern bool FT245_BE3_read(void);
#endif

void FT245_init(ft245_t *ft245);
void FT245_periodic(ft245_t *ft245);
bool FT245_write_buffered(ft245_t *ft245, uint8_t *data, size_t size);
size_t FT245_read_buffered(ft245_t *ft245, uint8_t *data, size_t size);
bool FT245_write_word_buffered(ft245_t *ft245, uint32_t word);
bool FT245_read_word_buffered(ft245_t *ft245, uint32_t *word);
size_t FT245_available_read(ft245_t *ft245);
size_t FT245_available_write(ft245_t *ft245);

#endif