ft  2.0.0.0
ft.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef FT_H
36 #define FT_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_uart.h"
41 
42 // -------------------------------------------------------------- PUBLIC MACROS
52 #define FT_MAP_MIKROBUS( cfg, mikrobus ) \
53  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
54  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
55  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
56  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS )
57 
63 #define FT_RETVAL uint8_t
64 
65 #define FT_OK 0x00
66 #define FT_INIT_ERROR 0xFF
67 
73 #define DRV_HEADER_DATA 0x40
74 #define DRV_HEADER_LEN 0x05
75 #define DRV_DATA_CRC_LEN 0x02
76 
82 #define DRV_NEW_DATA_AVAILABLE 1
83 #define DRV_CONFIRMED_PACKAGE 1
84 #define DRV_CHACK_HEDER_DATA_1 0
85 #define DRV_CHACK_HEDER_DATA_2 1
86 #define DRV_CHACK_LEN_DATA_LSB 2
87 #define DRV_CHACK_LEN_DATA_MSB 3
88 
94 #define FT_NEW_DATA_AVAILABLE 1
95 #define FT_NEW_DATA_NOT_AVAILABLE 0
96 
102 #define DRV_RX_BUFFER_SIZE 500
103 #define MAX_DATA_BUFFER 512
104  // End group macro
107 // --------------------------------------------------------------- PUBLIC TYPES
115 typedef struct
116 {
117  // Output pins
118 
119  digital_out_t rst;
120  digital_out_t cs;
121 
122  // Modules
123 
124  uart_t uart;
125 
126  char uart_rx_buffer[ DRV_RX_BUFFER_SIZE ];
127  char uart_tx_buffer[ DRV_RX_BUFFER_SIZE ];
128 
129  // Response flags
130  uint8_t drv_new_data;
132  uint8_t drv_rsp_buff[ MAX_DATA_BUFFER ];
133  uint8_t drv_rsp_flag;
134  uint16_t drv_buff_cnt;
135  uint16_t drv_rsp_lenght;
136 
137 } ft_t;
138 
142 typedef struct
143 {
144  // Communication gpio pins
145 
146  pin_name_t rx_pin;
147  pin_name_t tx_pin;
148 
149  // Additional gpio pins
150 
151  pin_name_t rst;
152  pin_name_t cs;
153 
154  // static variable
155 
156  uint32_t baud_rate; // Clock speed.
158  uart_data_bits_t data_bit; // Data bits.
159  uart_parity_t parity_bit; // Parity bit.
160  uart_stop_bits_t stop_bit; // Stop bits.
161 
162 } ft_cfg_t;
163  // End types group
165 // ------------------------------------------------------------------ VARIABLES
171 static const uint16_t CRC_TABLE[ 256 ] =
172 {
173  0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
174  0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
175  0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
176  0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
177  0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40,
178  0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41,
179  0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641,
180  0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040,
181  0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240,
182  0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441,
183  0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41,
184  0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840,
185  0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41,
186  0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40,
187  0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640,
188  0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041,
189  0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240,
190  0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441,
191  0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41,
192  0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840,
193  0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41,
194  0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40,
195  0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640,
196  0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041,
197  0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241,
198  0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440,
199  0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40,
200  0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841,
201  0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
202  0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
203  0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
204  0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
205 };
206  // End variable group
208 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
209 
215 #ifdef __cplusplus
216 extern "C"{
217 #endif
218 
227 void ft_cfg_setup ( ft_cfg_t *cfg );
228 
237 FT_RETVAL ft_init ( ft_t *ctx, ft_cfg_t *cfg );
238 
246 void ft_default_cfg ( ft_t *ctx );
247 
257 void ft_generic_write ( ft_t *ctx, char *data_buf, uint16_t len );
258 
270 int32_t ft_generic_read ( ft_t *ctx, char *data_buf, uint16_t max_len );
271 
280 void ft_set_rst_pin ( ft_t *ctx, uint8_t state );
281 
304 void ft_send_package ( ft_t *ctx, uint8_t *data_buf, uint16_t len, uint8_t queue );
305 
315 uint8_t ft_get_data_status ( ft_t *ctx );
316 
328 uint16_t ft_get_data ( ft_t *ctx, uint8_t *data_buf );
329 
340 void ft_isr_parser ( ft_t *ctx, uint8_t rsp_data );
341 
342 #ifdef __cplusplus
343 }
344 #endif
345 #endif // _FT_H_
346  // End public_function group
349 
350 // ------------------------------------------------------------------------- END
#define MAX_DATA_BUFFER
Definition: ft.h:103
digital_out_t rst
Definition: ft.h:119
int32_t ft_generic_read(ft_t *ctx, char *data_buf, uint16_t max_len)
Generic read function.
Click ctx object definition.
Definition: ft.h:115
digital_out_t cs
Definition: ft.h:120
FT_RETVAL ft_init(ft_t *ctx, ft_cfg_t *cfg)
Initialization function.
void ft_cfg_setup(ft_cfg_t *cfg)
Config Object Initialization function.
uart_t uart
Definition: ft.h:124
#define FT_RETVAL
Definition: ft.h:63
pin_name_t tx_pin
Definition: ft.h:147
uart_parity_t parity_bit
Definition: ft.h:159
uart_data_bits_t data_bit
Definition: ft.h:158
uint16_t drv_buff_cnt
Definition: ft.h:134
uint16_t drv_rsp_lenght
Definition: ft.h:135
pin_name_t cs
Definition: ft.h:152
void ft_default_cfg(ft_t *ctx)
Click Default Configuration function.
void ft_generic_write(ft_t *ctx, char *data_buf, uint16_t len)
Generic write function.
bool uart_blocking
Definition: ft.h:157
uint8_t drv_new_data
Definition: ft.h:130
#define DRV_RX_BUFFER_SIZE
Definition: ft.h:102
uart_stop_bits_t stop_bit
Definition: ft.h:160
uint8_t ft_get_data_status(ft_t *ctx)
Gets current status of data.
void ft_send_package(ft_t *ctx, uint8_t *data_buf, uint16_t len, uint8_t queue)
Sends full package to other module.
void ft_isr_parser(ft_t *ctx, uint8_t rsp_data)
Collecting and preserving data received via uart interrupt routine.
pin_name_t rst
Definition: ft.h:151
uint32_t baud_rate
Definition: ft.h:156
pin_name_t rx_pin
Definition: ft.h:146
void ft_set_rst_pin(ft_t *ctx, uint8_t state)
Set RST pin state.
Click configuration structure definition.
Definition: ft.h:142
uint8_t drv_rsp_flag
Definition: ft.h:133
uint8_t drv_start_package
Definition: ft.h:131
uint16_t ft_get_data(ft_t *ctx, uint8_t *data_buf)
Gets new received data.