aboutsummaryrefslogtreecommitdiff
path: root/FT245.h
diff options
context:
space:
mode:
Diffstat (limited to 'FT245.h')
-rw-r--r--FT245.h235
1 files changed, 235 insertions, 0 deletions
diff --git a/FT245.h b/FT245.h
new file mode 100644
index 0000000..4ccd118
--- /dev/null
+++ b/FT245.h
@@ -0,0 +1,235 @@
+#ifndef FT245_H
+#define FT245_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "circular_buffer.h"
+
+#define FT245_BUFFER_SIZE_TX 64
+#define FT245_BUFFER_SIZE_RX 64
+
+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;
+ // To input
+ void (*const DATA0_to_input)(void);
+ void (*const DATA1_to_input)(void);
+ void (*const DATA2_to_input)(void);
+ void (*const DATA3_to_input)(void);
+ void (*const DATA4_to_input)(void);
+ void (*const DATA5_to_input)(void);
+ void (*const DATA6_to_input)(void);
+ void (*const DATA7_to_input)(void);
+ void (*const DATA8_to_input)(void);
+ void (*const DATA9_to_input)(void);
+ void (*const DATA10_to_input)(void);
+ void (*const DATA11_to_input)(void);
+ void (*const DATA12_to_input)(void);
+ void (*const DATA13_to_input)(void);
+ void (*const DATA14_to_input)(void);
+ void (*const DATA15_to_input)(void);
+ void (*const DATA16_to_input)(void);
+ void (*const DATA17_to_input)(void);
+ void (*const DATA18_to_input)(void);
+ void (*const DATA19_to_input)(void);
+ void (*const DATA20_to_input)(void);
+ void (*const DATA21_to_input)(void);
+ void (*const DATA22_to_input)(void);
+ void (*const DATA23_to_input)(void);
+ void (*const DATA24_to_input)(void);
+ void (*const DATA25_to_input)(void);
+ void (*const DATA26_to_input)(void);
+ void (*const DATA27_to_input)(void);
+ void (*const DATA28_to_input)(void);
+ void (*const DATA29_to_input)(void);
+ void (*const DATA30_to_input)(void);
+ void (*const DATA31_to_input)(void);
+ void (*const BE0_to_input)(void);
+ void (*const BE1_to_input)(void);
+ void (*const BE2_to_input)(void);
+ void (*const BE3_to_input)(void);
+ // To output
+ void (*const DATA0_to_output)(void);
+ void (*const DATA1_to_output)(void);
+ void (*const DATA2_to_output)(void);
+ void (*const DATA3_to_output)(void);
+ void (*const DATA4_to_output)(void);
+ void (*const DATA5_to_output)(void);
+ void (*const DATA6_to_output)(void);
+ void (*const DATA7_to_output)(void);
+ void (*const DATA8_to_output)(void);
+ void (*const DATA9_to_output)(void);
+ void (*const DATA10_to_output)(void);
+ void (*const DATA11_to_output)(void);
+ void (*const DATA12_to_output)(void);
+ void (*const DATA13_to_output)(void);
+ void (*const DATA14_to_output)(void);
+ void (*const DATA15_to_output)(void);
+ void (*const DATA16_to_output)(void);
+ void (*const DATA17_to_output)(void);
+ void (*const DATA18_to_output)(void);
+ void (*const DATA19_to_output)(void);
+ void (*const DATA20_to_output)(void);
+ void (*const DATA21_to_output)(void);
+ void (*const DATA22_to_output)(void);
+ void (*const DATA23_to_output)(void);
+ void (*const DATA24_to_output)(void);
+ void (*const DATA25_to_output)(void);
+ void (*const DATA26_to_output)(void);
+ void (*const DATA27_to_output)(void);
+ void (*const DATA28_to_output)(void);
+ void (*const DATA29_to_output)(void);
+ void (*const DATA30_to_output)(void);
+ void (*const DATA31_to_output)(void);
+ void (*const BE0_to_output)(void);
+ void (*const BE1_to_output)(void);
+ void (*const BE2_to_output)(void);
+ void (*const BE3_to_output)(void);
+ // Set
+ void (*const CLK_set)(void);
+ void (*const RXF_N_set)(void);
+ void (*const TXE_N_set)(void);
+ void (*const DATA0_set)(void);
+ void (*const DATA1_set)(void);
+ void (*const DATA2_set)(void);
+ void (*const DATA3_set)(void);
+ void (*const DATA4_set)(void);
+ void (*const DATA5_set)(void);
+ void (*const DATA6_set)(void);
+ void (*const DATA7_set)(void);
+ void (*const DATA8_set)(void);
+ void (*const DATA9_set)(void);
+ void (*const DATA10_set)(void);
+ void (*const DATA11_set)(void);
+ void (*const DATA12_set)(void);
+ void (*const DATA13_set)(void);
+ void (*const DATA14_set)(void);
+ void (*const DATA15_set)(void);
+ void (*const DATA16_set)(void);
+ void (*const DATA17_set)(void);
+ void (*const DATA18_set)(void);
+ void (*const DATA19_set)(void);
+ void (*const DATA20_set)(void);
+ void (*const DATA21_set)(void);
+ void (*const DATA22_set)(void);
+ void (*const DATA23_set)(void);
+ void (*const DATA24_set)(void);
+ void (*const DATA25_set)(void);
+ void (*const DATA26_set)(void);
+ void (*const DATA27_set)(void);
+ void (*const DATA28_set)(void);
+ void (*const DATA29_set)(void);
+ void (*const DATA30_set)(void);
+ void (*const DATA31_set)(void);
+ void (*const BE0_set)(void);
+ void (*const BE1_set)(void);
+ void (*const BE2_set)(void);
+ void (*const BE3_set)(void);
+ // Reset
+ void (*const CLK_reset)(void);
+ void (*const RXF_N_reset)(void);
+ void (*const TXE_N_reset)(void);
+ void (*const DATA0_reset)(void);
+ void (*const DATA1_reset)(void);
+ void (*const DATA2_reset)(void);
+ void (*const DATA3_reset)(void);
+ void (*const DATA4_reset)(void);
+ void (*const DATA5_reset)(void);
+ void (*const DATA6_reset)(void);
+ void (*const DATA7_reset)(void);
+ void (*const DATA8_reset)(void);
+ void (*const DATA9_reset)(void);
+ void (*const DATA10_reset)(void);
+ void (*const DATA11_reset)(void);
+ void (*const DATA12_reset)(void);
+ void (*const DATA13_reset)(void);
+ void (*const DATA14_reset)(void);
+ void (*const DATA15_reset)(void);
+ void (*const DATA16_reset)(void);
+ void (*const DATA17_reset)(void);
+ void (*const DATA18_reset)(void);
+ void (*const DATA19_reset)(void);
+ void (*const DATA20_reset)(void);
+ void (*const DATA21_reset)(void);
+ void (*const DATA22_reset)(void);
+ void (*const DATA23_reset)(void);
+ void (*const DATA24_reset)(void);
+ void (*const DATA25_reset)(void);
+ void (*const DATA26_reset)(void);
+ void (*const DATA27_reset)(void);
+ void (*const DATA28_reset)(void);
+ void (*const DATA29_reset)(void);
+ void (*const DATA30_reset)(void);
+ void (*const DATA31_reset)(void);
+ void (*const BE0_reset)(void);
+ void (*const BE1_reset)(void);
+ void (*const BE2_reset)(void);
+ void (*const BE3_reset)(void);
+ // Toggle
+ void (*const CLK_toggle)(void);
+ // Read
+ uint32_t (*const TXE_N_read)(void);
+ uint32_t (*const RXF_N_read)(void);
+ uint32_t (*const WR_N_read)(void);
+ uint32_t (*const SIWU_N_read)(void);
+ uint32_t (*const RD_N_read)(void);
+ uint32_t (*const OE_N_read)(void);
+ uint32_t (*const RST_N_read)(void);
+ uint32_t (*const DATA0_read)(void);
+ uint32_t (*const DATA1_read)(void);
+ uint32_t (*const DATA2_read)(void);
+ uint32_t (*const DATA3_read)(void);
+ uint32_t (*const DATA4_read)(void);
+ uint32_t (*const DATA5_read)(void);
+ uint32_t (*const DATA6_read)(void);
+ uint32_t (*const DATA7_read)(void);
+ uint32_t (*const DATA8_read)(void);
+ uint32_t (*const DATA9_read)(void);
+ uint32_t (*const DATA10_read)(void);
+ uint32_t (*const DATA11_read)(void);
+ uint32_t (*const DATA12_read)(void);
+ uint32_t (*const DATA13_read)(void);
+ uint32_t (*const DATA14_read)(void);
+ uint32_t (*const DATA15_read)(void);
+ uint32_t (*const DATA16_read)(void);
+ uint32_t (*const DATA17_read)(void);
+ uint32_t (*const DATA18_read)(void);
+ uint32_t (*const DATA19_read)(void);
+ uint32_t (*const DATA20_read)(void);
+ uint32_t (*const DATA21_read)(void);
+ uint32_t (*const DATA22_read)(void);
+ uint32_t (*const DATA23_read)(void);
+ uint32_t (*const DATA24_read)(void);
+ uint32_t (*const DATA25_read)(void);
+ uint32_t (*const DATA26_read)(void);
+ uint32_t (*const DATA27_read)(void);
+ uint32_t (*const DATA28_read)(void);
+ uint32_t (*const DATA29_read)(void);
+ uint32_t (*const DATA30_read)(void);
+ uint32_t (*const DATA31_read)(void);
+ uint32_t (*const BE0_read)(void);
+ uint32_t (*const BE1_read)(void);
+ uint32_t (*const BE2_read)(void);
+ uint32_t (*const BE3_read)(void);
+} ft245_t;
+
+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);
+bool 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 \ No newline at end of file