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 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_uart.h"
48 
69 #define LR2_CMD_SYS_GET_VER "sys get ver"
70 #define LR2_CMD_MAC_PAUSE "mac pause"
71 #define LR2_CMD_RADIO_SET_WDT "radio set wdt 0"
72 #define LR2_ARG_0 "0"
73 
78 #define LR2_JM_OTAA "otaa"
79 #define LR2_JM_ABP "abp"
80 
85 #define LR2_PL_CNF "cnf "
86 #define LR2_PL_UNCNF "uncnf "
87 
92 #define LR2_INVALID_PARAM 1
93 #define LR2_NOT_JOINED 2
94 #define LR2_NO_FREE_CH 3
95 #define LR2_SILENT 4
96 #define LR2_ERR_REJOIN_NEEDED 5
97 #define LR2_BUSY 6
98 #define LR2_MAC_PAUSED 7
99 #define LR2_INVALID_PAR_DATA_LEN 8
100 #define LR2_KEYS_NOT_INIT 9
101 #define LR2_MAC_ERR 10
102 #define LR2_MAC_RX 12
103 #define LR2_INVALID_REPAR_DATA_LEN 13
104 #define LR2_RADIO_ERR 14
105 #define LR2_DENIED 18
106 
111 #define LR2_MAX_DATA_SIZE 256
112 #define LR2_MAX_TRANSFER_SIZE 384
113 
114 #define LR2_MAX_CMD_SIZE 64
115 
120 #define LR2_MAX_RSP_SIZE 20
121 
126 #define LR2_RESP_COUNT 100
127 
132 #define LR2_TIMER_EXPIRED 50000
133 
138 #define LR2_MAC_TX "mac tx "
139 #define LR2_JOIN "mac join "
140 #define LR2_RADIO_TX "radio tx "
141 #define LR2_RADIO_RX "radio rx "
142 
148 #define LR2_DRV_RX_BUFFER_SIZE 300
149 #define LR2_DRV_TX_BUFFER_SIZE 100
150  // lr2_set
152 
167 #define LR2_MAP_MIKROBUS( cfg, mikrobus ) \
168  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
169  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
170  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
171  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
172  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_INT )
173  // lr2_map // lr2
176 
181 typedef struct
182 {
183  char tx_buffer[ LR2_MAX_TRANSFER_SIZE ];
184  char rx_buffer[ LR2_MAX_TRANSFER_SIZE ];
185  uint16_t rx_buffer_len;
186 
187 } lr2_buffers_t;
188 
193 typedef struct
194 {
195  bool timer_f;
196  bool timeout_f;
198  uint32_t ticker;
199  uint32_t timer_max;
200 
201 } lr2_timer_t;
202 
207 typedef struct
208 {
209  bool rsp_rdy_f;
210  bool lr2_rdy_f;
211 
213 
218 typedef struct
219 {
220  bool rsp_f;
221  char *rsp_buffer;
223  void ( *callback_resp )( char *response );
224 
226 
231 typedef struct
232 {
233  char *payload;
234  char *port_no;
235  char *buffer;
236  char *response;
237 
238 } lr2_mac_t;
239 
244 typedef struct
245 {
246  // Output pins
247  digital_out_t rst;
248  digital_out_t rts;
250  // Input pins
251  digital_in_t cts;
253  // Modules
254  uart_t uart;
256  // Buffers
257  char uart_rx_buffer[ LR2_DRV_RX_BUFFER_SIZE ];
258  char uart_tx_buffer[ LR2_DRV_TX_BUFFER_SIZE ];
264  char data_in;
265 
266 } lr2_t;
267 
272 typedef struct
273 {
274  // Communication gpio pins
275  pin_name_t rx_pin;
276  pin_name_t tx_pin;
278  // Additional gpio pins
279  pin_name_t rst;
280  pin_name_t rts;
281  pin_name_t cts;
283  // Static variable
284  uint32_t baud_rate;
286  uart_data_bits_t data_bit;
287  uart_parity_t parity_bit;
288  uart_stop_bits_t stop_bit;
290 } lr2_cfg_t;
291 
296 typedef enum
297 {
298  LR2_OK = 0,
299  LR2_ERROR = -1
300 
302 
318 void lr2_cfg_setup ( lr2_cfg_t *cfg );
319 
334 err_t lr2_init ( lr2_t *ctx, lr2_cfg_t *cfg );
335 
349 void lr2_default_cfg ( lr2_t *ctx, bool cb_default, void ( *response_p )( char *response ) );
350 
361 void lr2_generic_write ( lr2_t *ctx, char *data_buf, uint16_t len );
362 
374 int32_t lr2_generic_read ( lr2_t *ctx, char *data_buf, uint16_t max_len );
375 
387 void lr2_cmd ( lr2_t *ctx, char *cmd, char *response );
388 
398 uint8_t lr2_mac_tx ( lr2_t *ctx, lr2_mac_t *mac );
399 
410 uint8_t lr2_join ( lr2_t *ctx, char *join_mode, char *response );
411 
422 uint8_t lr2_rx ( lr2_t *ctx, char *window_size, char *response );
423 
433 uint8_t lr2_tx ( lr2_t *ctx, char *buffer );
434 
444 void lr2_rx_isr ( lr2_t *ctx, char rx_input );
445 
455 void lr2_tick_isr ( lr2_t *ctx );
456 
476 void lr2_tick_conf ( lr2_t *ctx, uint32_t timer_limit );
477 
486 void lr2_isr_process ( lr2_t *ctx );
487 
497 void lr2_put_char ( lr2_t *ctx, char data_in );
498 
499 #ifdef __cplusplus
500 }
501 #endif
502 #endif // LR2_H
503  // lr2
505 
506 // ------------------------------------------------------------------------ END
lr2_timer_t::timer_f
bool timer_f
Definition: lr2.h:195
lr2_procces_flags_t::lr2_rdy_f
bool lr2_rdy_f
Definition: lr2.h:210
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:275
lr2_buffers_t::rx_buffer_len
uint16_t rx_buffer_len
Definition: lr2.h:185
lr2_t::rts
digital_out_t rts
Definition: lr2.h:248
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:286
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:235
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:299
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:221
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:194
LR2_DRV_TX_BUFFER_SIZE
#define LR2_DRV_TX_BUFFER_SIZE
Definition: lr2.h:149
LR2_OK
@ LR2_OK
Definition: lr2.h:298
lr2_t::rst
digital_out_t rst
Definition: lr2.h:247
lr2_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: lr2.h:287
lr2_procces_flags_t::rsp_rdy_f
bool rsp_rdy_f
Definition: lr2.h:209
lr2_timer_t::timeout_f
bool timeout_f
Definition: lr2.h:196
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:198
lr2_procces_flags_t
Process Flags object definition.
Definition: lr2.h:208
lr2_mac_t::port_no
char * port_no
Definition: lr2.h:234
lr2_t::uart
uart_t uart
Definition: lr2.h:254
lr2_cfg_t::uart_blocking
bool uart_blocking
Definition: lr2.h:285
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:260
lr2_t::rsp
lr2_response_t rsp
Definition: lr2.h:263
lr2_t::flags
lr2_procces_flags_t flags
Definition: lr2.h:262
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:261
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:297
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:288
lr2_cfg_t::rts
pin_name_t rts
Definition: lr2.h:280
lr2_mac_t::payload
char * payload
Definition: lr2.h:233
lr2_timer_t::timer_use_f
bool timer_use_f
Definition: lr2.h:197
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:232
lr2_cfg_t::tx_pin
pin_name_t tx_pin
Definition: lr2.h:276
LR2_MAX_TRANSFER_SIZE
#define LR2_MAX_TRANSFER_SIZE
Definition: lr2.h:112
lr2_cfg_t::cts
pin_name_t cts
Definition: lr2.h:281
lr2_t::data_in
char data_in
Definition: lr2.h:264
lr2_response_t::callback_default
bool callback_default
Definition: lr2.h:222
lr2_timer_t::timer_max
uint32_t timer_max
Definition: lr2.h:199
lr2_t::cts
digital_in_t cts
Definition: lr2.h:251
lr2_mac_t::response
char * response
Definition: lr2.h:236
lr2_response_t
Response object definition.
Definition: lr2.h:219
lr2_buffers_t
Click buffers object definition.
Definition: lr2.h:182
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:273
lr2_cfg_t::baud_rate
uint32_t baud_rate
Definition: lr2.h:284
lr2_cfg_t::rst
pin_name_t rst
Definition: lr2.h:279
LR2_DRV_RX_BUFFER_SIZE
#define LR2_DRV_RX_BUFFER_SIZE
LR 2 driver buffer size.
Definition: lr2.h:148
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:220
lr2_tx
uint8_t lr2_tx(lr2_t *ctx, char *buffer)
Main tnanceiver function.
lr2_t
LR 2 Click context object.
Definition: lr2.h:245