lr2  2.1.0.0
lr2.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 LR2_H
29 #define LR2_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_uart.h"
52 
73 #define LR2_CMD_SYS_GET_VER "sys get ver"
74 #define LR2_CMD_MAC_PAUSE "mac pause"
75 #define LR2_CMD_RADIO_SET_WDT "radio set wdt 0"
76 #define LR2_ARG_0 "0"
77 
82 #define LR2_JM_OTAA "otaa"
83 #define LR2_JM_ABP "abp"
84 
89 #define LR2_PL_CNF "cnf "
90 #define LR2_PL_UNCNF "uncnf "
91 
96 #define LR2_INVALID_PARAM 1
97 #define LR2_NOT_JOINED 2
98 #define LR2_NO_FREE_CH 3
99 #define LR2_SILENT 4
100 #define LR2_ERR_REJOIN_NEEDED 5
101 #define LR2_BUSY 6
102 #define LR2_MAC_PAUSED 7
103 #define LR2_INVALID_PAR_DATA_LEN 8
104 #define LR2_KEYS_NOT_INIT 9
105 #define LR2_MAC_ERR 10
106 #define LR2_MAC_RX 12
107 #define LR2_INVALID_REPAR_DATA_LEN 13
108 #define LR2_RADIO_ERR 14
109 #define LR2_DENIED 18
110 
115 #define LR2_MAX_DATA_SIZE 256
116 #define LR2_MAX_TRANSFER_SIZE 384
117 
118 #define LR2_MAX_CMD_SIZE 64
119 
124 #define LR2_MAX_RSP_SIZE 20
125 
130 #define LR2_RESP_COUNT 100
131 
136 #define LR2_TIMER_EXPIRED 50000
137 
142 #define LR2_MAC_TX "mac tx "
143 #define LR2_JOIN "mac join "
144 #define LR2_RADIO_TX "radio tx "
145 #define LR2_RADIO_RX "radio rx "
146 
152 #define LR2_DRV_RX_BUFFER_SIZE 300
153 #define LR2_DRV_TX_BUFFER_SIZE 100
154  // lr2_set
156 
171 #define LR2_MAP_MIKROBUS( cfg, mikrobus ) \
172  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
173  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
174  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
175  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
176  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_INT )
177  // lr2_map // lr2
180 
185 typedef struct
186 {
187  char tx_buffer[ LR2_MAX_TRANSFER_SIZE ];
188  char rx_buffer[ LR2_MAX_TRANSFER_SIZE ];
189  uint16_t rx_buffer_len;
190 
191 } lr2_buffers_t;
192 
197 typedef struct
198 {
199  bool timer_f;
200  bool timeout_f;
202  uint32_t ticker;
203  uint32_t timer_max;
204 
205 } lr2_timer_t;
206 
211 typedef struct
212 {
213  bool rsp_rdy_f;
214  bool lr2_rdy_f;
215 
217 
222 typedef struct
223 {
224  bool rsp_f;
225  char *rsp_buffer;
227  void ( *callback_resp )( char *response );
228 
230 
235 typedef struct
236 {
237  char *payload;
238  char *port_no;
239  char *buffer;
240  char *response;
241 
242 } lr2_mac_t;
243 
248 typedef struct
249 {
250  // Output pins
251  digital_out_t rst;
252  digital_out_t rts;
254  // Input pins
255  digital_in_t cts;
257  // Modules
258  uart_t uart;
260  // Buffers
261  char uart_rx_buffer[ LR2_DRV_RX_BUFFER_SIZE ];
262  char uart_tx_buffer[ LR2_DRV_TX_BUFFER_SIZE ];
268  char data_in;
269 
270 } lr2_t;
271 
276 typedef struct
277 {
278  // Communication gpio pins
279  pin_name_t rx_pin;
280  pin_name_t tx_pin;
282  // Additional gpio pins
283  pin_name_t rst;
284  pin_name_t rts;
285  pin_name_t cts;
287  // Static variable
288  uint32_t baud_rate;
290  uart_data_bits_t data_bit;
291  uart_parity_t parity_bit;
292  uart_stop_bits_t stop_bit;
294 } lr2_cfg_t;
295 
300 typedef enum
301 {
302  LR2_OK = 0,
303  LR2_ERROR = -1
304 
306 
322 void lr2_cfg_setup ( lr2_cfg_t *cfg );
323 
338 err_t lr2_init ( lr2_t *ctx, lr2_cfg_t *cfg );
339 
353 void lr2_default_cfg ( lr2_t *ctx, bool cb_default, void ( *response_p )( char *response ) );
354 
365 void lr2_generic_write ( lr2_t *ctx, char *data_buf, uint16_t len );
366 
378 int32_t lr2_generic_read ( lr2_t *ctx, char *data_buf, uint16_t max_len );
379 
391 void lr2_cmd ( lr2_t *ctx, char *cmd, char *response );
392 
402 uint8_t lr2_mac_tx ( lr2_t *ctx, lr2_mac_t *mac );
403 
414 uint8_t lr2_join ( lr2_t *ctx, char *join_mode, char *response );
415 
426 uint8_t lr2_rx ( lr2_t *ctx, char *window_size, char *response );
427 
437 uint8_t lr2_tx ( lr2_t *ctx, char *buffer );
438 
448 void lr2_rx_isr ( lr2_t *ctx, char rx_input );
449 
459 void lr2_tick_isr ( lr2_t *ctx );
460 
480 void lr2_tick_conf ( lr2_t *ctx, uint32_t timer_limit );
481 
490 void lr2_isr_process ( lr2_t *ctx );
491 
501 void lr2_put_char ( lr2_t *ctx, char data_in );
502 
503 #ifdef __cplusplus
504 }
505 #endif
506 #endif // LR2_H
507  // lr2
509 
510 // ------------------------------------------------------------------------ END
lr2_timer_t::timer_f
bool timer_f
Definition: lr2.h:199
lr2_procces_flags_t::lr2_rdy_f
bool lr2_rdy_f
Definition: lr2.h:214
lr2_isr_process
void lr2_isr_process(lr2_t *ctx)
Main Process.
lr2_cfg_t::rx_pin
pin_name_t rx_pin
Definition: lr2.h:279
lr2_buffers_t::rx_buffer_len
uint16_t rx_buffer_len
Definition: lr2.h:189
lr2_t::rts
digital_out_t rts
Definition: lr2.h:252
lr2_tick_isr
void lr2_tick_isr(lr2_t *ctx)
Timer.
lr2_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: lr2.h:290
lr2_join
uint8_t lr2_join(lr2_t *ctx, char *join_mode, char *response)
Function for setting join mode.
lr2_mac_t::buffer
char * buffer
Definition: lr2.h:239
lr2_generic_read
int32_t lr2_generic_read(lr2_t *ctx, char *data_buf, uint16_t max_len)
LR 2 data reading function.
LR2_ERROR
@ LR2_ERROR
Definition: lr2.h:303
lr2_default_cfg
void lr2_default_cfg(lr2_t *ctx, bool cb_default, void(*response_p)(char *response))
LR 2 default configuration function.
lr2_response_t::rsp_buffer
char * rsp_buffer
Definition: lr2.h:225
lr2_init
err_t lr2_init(lr2_t *ctx, lr2_cfg_t *cfg)
LR 2 initialization function.
lr2_timer_t
Timer Flags and Counter object definition.
Definition: lr2.h:198
LR2_DRV_TX_BUFFER_SIZE
#define LR2_DRV_TX_BUFFER_SIZE
Definition: lr2.h:153
LR2_OK
@ LR2_OK
Definition: lr2.h:302
lr2_t::rst
digital_out_t rst
Definition: lr2.h:251
lr2_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: lr2.h:291
lr2_procces_flags_t::rsp_rdy_f
bool rsp_rdy_f
Definition: lr2.h:213
lr2_timer_t::timeout_f
bool timeout_f
Definition: lr2.h:200
lr2_mac_tx
uint8_t lr2_mac_tx(lr2_t *ctx, lr2_mac_t *mac)
Function for writing mac parameters.
lr2_timer_t::ticker
uint32_t ticker
Definition: lr2.h:202
lr2_procces_flags_t
Process Flags object definition.
Definition: lr2.h:212
lr2_mac_t::port_no
char * port_no
Definition: lr2.h:238
lr2_t::uart
uart_t uart
Definition: lr2.h:258
lr2_cfg_t::uart_blocking
bool uart_blocking
Definition: lr2.h:289
lr2_cmd
void lr2_cmd(lr2_t *ctx, char *cmd, char *response)
Send command function.
lr2_t::buff
lr2_buffers_t buff
Definition: lr2.h:264
lr2_t::rsp
lr2_response_t rsp
Definition: lr2.h:267
lr2_t::flags
lr2_procces_flags_t flags
Definition: lr2.h:266
lr2_generic_write
void lr2_generic_write(lr2_t *ctx, char *data_buf, uint16_t len)
LR 2 data writing function.
lr2_t::tm
lr2_timer_t tm
Definition: lr2.h:265
lr2_cfg_setup
void lr2_cfg_setup(lr2_cfg_t *cfg)
LR 2 configuration object setup function.
lr2_return_value_t
lr2_return_value_t
LR 2 Click return value data.
Definition: lr2.h:301
lr2_tick_conf
void lr2_tick_conf(lr2_t *ctx, uint32_t timer_limit)
Timer Configuration.
lr2_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: lr2.h:292
lr2_cfg_t::rts
pin_name_t rts
Definition: lr2.h:284
lr2_mac_t::payload
char * payload
Definition: lr2.h:237
lr2_timer_t::timer_use_f
bool timer_use_f
Definition: lr2.h:201
lr2_put_char
void lr2_put_char(lr2_t *ctx, char data_in)
Function for write char.
lr2_mac_t
Mac object definition.
Definition: lr2.h:236
lr2_cfg_t::tx_pin
pin_name_t tx_pin
Definition: lr2.h:280
LR2_MAX_TRANSFER_SIZE
#define LR2_MAX_TRANSFER_SIZE
Definition: lr2.h:116
lr2_cfg_t::cts
pin_name_t cts
Definition: lr2.h:285
lr2_t::data_in
char data_in
Definition: lr2.h:268
lr2_response_t::callback_default
bool callback_default
Definition: lr2.h:226
lr2_timer_t::timer_max
uint32_t timer_max
Definition: lr2.h:203
lr2_t::cts
digital_in_t cts
Definition: lr2.h:255
lr2_mac_t::response
char * response
Definition: lr2.h:240
lr2_response_t
Response object definition.
Definition: lr2.h:223
lr2_buffers_t
Click buffers object definition.
Definition: lr2.h:186
lr2_rx_isr
void lr2_rx_isr(lr2_t *ctx, char rx_input)
Receiver.
lr2_cfg_t
LR 2 Click configuration object.
Definition: lr2.h:277
lr2_cfg_t::baud_rate
uint32_t baud_rate
Definition: lr2.h:288
lr2_cfg_t::rst
pin_name_t rst
Definition: lr2.h:283
LR2_DRV_RX_BUFFER_SIZE
#define LR2_DRV_RX_BUFFER_SIZE
LR 2 driver buffer size.
Definition: lr2.h:152
lr2_rx
uint8_t lr2_rx(lr2_t *ctx, char *window_size, char *response)
Main receiver function
lr2_response_t::rsp_f
bool rsp_f
Definition: lr2.h:224
lr2_tx
uint8_t lr2_tx(lr2_t *ctx, char *buffer)
Main tnanceiver function.
lr2_t
LR 2 Click context object.
Definition: lr2.h:249