lr  2.0.0.0
lr.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef LR_H
29 #define LR_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_uart.h"
38 
59 #define LR_CMD_SYS_GET_VER "sys get ver"
60 #define LR_CMD_MAC_PAUSE "mac pause"
61 #define LR_CMD_RADIO_SET_WDT "radio set wdt 0"
62 #define LR_ARG_0 "0"
63 
68 #define LR_JM_OTAA "otaa"
69 #define LR_JM_ABP "abp"
70 
75 #define LR_PL_CNF "cnf "
76 #define LR_PL_UNCNF "uncnf "
77 
82 #define LR_MAX_DATA_SIZE 256
83 #define LR_MAX_TRANSFER_SIZE 384
84 
85 #define LR_MAX_CMD_SIZE 64
86 
91 #define LR_MAX_RSP_SIZE 20
92 
97 #define LR_RESP_COUNT 100
98 
103 #define LR_TIMER_EXPIRED 50000
104 
109 #define LR_MAC_TX "mac tx "
110 #define LR_JOIN "mac join "
111 #define LR_RADIO_TX "radio tx "
112 #define LR_RADIO_RX "radio rx "
113 
119 #define DRV_RX_BUFFER_SIZE 300
120  // lr_set
122 
137 #define LR_MAP_MIKROBUS( cfg, mikrobus ) \
138  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
139  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
140  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
141  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
142  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_INT )
143  // lr_map // lr
146 
151 typedef struct
152 {
153  char tx_buffer[ LR_MAX_TRANSFER_SIZE ];
154  char rx_buffer[ LR_MAX_TRANSFER_SIZE ];
155  uint16_t rx_buffer_len;
156 
157 } lr_buffers_t;
158 
163 typedef struct
164 {
165  bool timer_f;
166  bool timeout_f;
167  bool timer_use_f;
168  uint32_t ticker;
169  uint32_t timer_max;
170 
171 } lr_timer_t;
172 
177 typedef struct
178 {
179  bool rsp_rdy_f;
180  bool lr_rdy_f;
181 
183 
188 typedef struct
189 {
190  bool rsp_f;
191  char *rsp_buffer;
192  bool callback_default;
193  void ( *callback_resp )( char *response );
194 
195 } lr_response_t;
196 
201 typedef struct
202 {
203  char *payload;
204  char *port_no;
205  char *buffer;
206  char *response;
207 
208 } lr_mac_t;
209 
214 typedef struct
215 {
216  // Output pins
217  digital_out_t rst;
218  digital_out_t rts;
219 
220  // Input pins
221  digital_in_t cts;
222 
223  // Modules
224  uart_t uart;
226  // Buffers
227  char uart_rx_buffer[ DRV_RX_BUFFER_SIZE ];
228  char uart_tx_buffer[ DRV_RX_BUFFER_SIZE ];
234  char data_in;
235 
236 } lr_t;
237 
242 typedef struct
243 {
244  // Communication gpio pins
245  pin_name_t rx_pin;
246  pin_name_t tx_pin;
248  // Additional gpio pins
249  pin_name_t rst;
250  pin_name_t rts;
251  pin_name_t cts;
252 
253  // Static variable
254  uint32_t baud_rate;
255  bool uart_blocking;
256  uart_data_bits_t data_bit;
257  uart_parity_t parity_bit;
258  uart_stop_bits_t stop_bit;
260 } lr_cfg_t;
261 
266 typedef enum
267 {
268  LR_OK = 0,
269  LR_ERROR = -1
270 
272 
288 void lr_cfg_setup ( lr_cfg_t *cfg );
289 
304 err_t lr_init ( lr_t *ctx, lr_cfg_t *cfg );
305 
319 void lr_default_cfg ( lr_t *ctx, bool cb_default, void ( *response_p )( char *response ) );
320 
333 void lr_generic_write ( lr_t *ctx, char *data_buf, uint16_t len );
334 
348 int32_t lr_generic_read ( lr_t *ctx, char *data_buf, uint16_t max_len );
349 
361 void lr_cmd ( lr_t *ctx, char *cmd, char *response );
362 
372 uint8_t lr_mac_tx ( lr_t *ctx, lr_mac_t *mac );
373 
384 uint8_t lr_join ( lr_t *ctx, char *join_mode, char *response );
385 
396 uint8_t lr_rx ( lr_t *ctx, char *window_size, char *response );
397 
407 uint8_t lr_tx ( lr_t *ctx, char *buffer );
408 
418 void lr_rx_isr ( lr_t *ctx, char rx_input );
419 
429 void lr_tick_isr ( lr_t *ctx );
430 
450 void lr_tick_conf ( lr_t *ctx, uint32_t timer_limit );
451 
460 void lr_isr_process ( lr_t *ctx );
461 
471 void lr_put_char ( lr_t *ctx, char data_in );
472 
473 #ifdef __cplusplus
474 }
475 #endif
476 #endif // LR_H
477  // lr
479 
480 // ------------------------------------------------------------------------ END
lr_cfg_t
LR Click configuration object.
Definition: lr.h:241
LR_ERROR
Definition: lr.h:268
lr_mac_t
Mac object definition.
Definition: lr.h:200
lr_tick_isr
void lr_tick_isr(lr_t *ctx)
Timer.
lr_rx
uint8_t lr_rx(lr_t *ctx, char *window_size, char *response)
Main receiver function
lr_init
err_t lr_init(lr_t *ctx, lr_cfg_t *cfg)
LR initialization function.
lr_tx
uint8_t lr_tx(lr_t *ctx, char *buffer)
Main tnanceiver function.
lr_generic_write
void lr_generic_write(lr_t *ctx, char *data_buf, uint16_t len)
LR data writing function.
lr_cfg_setup
void lr_cfg_setup(lr_cfg_t *cfg)
LR configuration object setup function.
lr_put_char
void lr_put_char(lr_t *ctx, char data_in)
Function for write char.
LR_MAX_TRANSFER_SIZE
#define LR_MAX_TRANSFER_SIZE
Definition: lr.h:82
lr_procces_flags_t
Process Flags object definition.
Definition: lr.h:176
lr_isr_process
void lr_isr_process(lr_t *ctx)
Main Process.
lr_cmd
void lr_cmd(lr_t *ctx, char *cmd, char *response)
Send command function.
lr_tick_conf
void lr_tick_conf(lr_t *ctx, uint32_t timer_limit)
Timer Configuration.
lr_mac_tx
uint8_t lr_mac_tx(lr_t *ctx, lr_mac_t *mac)
Function for writing mac parameters.
LR_OK
Definition: lr.h:267
lr_response_t
Response object definition.
Definition: lr.h:187
lr_join
uint8_t lr_join(lr_t *ctx, char *join_mode, char *response)
Function for setting join mode.
DRV_RX_BUFFER_SIZE
#define DRV_RX_BUFFER_SIZE
LR driver buffer size.
Definition: lr.h:118
lr_generic_read
int32_t lr_generic_read(lr_t *ctx, char *data_buf, uint16_t max_len)
LR data reading function.
lr_rx_isr
void lr_rx_isr(lr_t *ctx, char rx_input)
Receiver.
lr_t
LR Click context object.
Definition: lr.h:213
lr_timer_t
Timer Flags and Counter object definition.
Definition: lr.h:162
lr_return_value_t
lr_return_value_t
LR Click return value data.
Definition: lr.h:265
lr_buffers_t
Click buffers object definition.
Definition: lr.h:150
lr_default_cfg
void lr_default_cfg(lr_t *ctx, bool cb_default, void(*response_p)(char *response))
LR default configuration function.