lr  2.1.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 "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 LR_CMD_SYS_GET_VER "sys get ver"
70 #define LR_CMD_MAC_PAUSE "mac pause"
71 #define LR_CMD_RADIO_SET_WDT "radio set wdt 0"
72 #define LR_ARG_0 "0"
73 
78 #define LR_JM_OTAA "otaa"
79 #define LR_JM_ABP "abp"
80 
85 #define LR_PL_CNF "cnf "
86 #define LR_PL_UNCNF "uncnf "
87 
92 #define LR_INVALID_PARAM 1
93 #define LR_NOT_JOINED 2
94 #define LR_NO_FREE_CH 3
95 #define LR_SILENT 4
96 #define LR_ERR_REJOIN_NEEDED 5
97 #define LR_BUSY 6
98 #define LR_MAC_PAUSED 7
99 #define LR_INVALID_PAR_DATA_LEN 8
100 #define LR_KEYS_NOT_INIT 9
101 #define LR_MAC_ERR 10
102 #define LR_MAC_RX 12
103 #define LR_INVALID_REPAR_DATA_LEN 13
104 #define LR_RADIO_ERR 14
105 #define LR_DENIED 18
106 
111 #define LR_MAX_DATA_SIZE 256
112 #define LR_MAX_TRANSFER_SIZE 384
113 
114 #define LR_MAX_CMD_SIZE 64
115 
120 #define LR_MAX_RSP_SIZE 20
121 
126 #define LR_RESP_COUNT 100
127 
132 #define LR_TIMER_EXPIRED 50000
133 
138 #define LR_MAC_TX "mac tx "
139 #define LR_JOIN "mac join "
140 #define LR_RADIO_TX "radio tx "
141 #define LR_RADIO_RX "radio rx "
142 
148 #define DRV_RX_BUFFER_SIZE 300
149  // lr_set
151 
166 #define LR_MAP_MIKROBUS( cfg, mikrobus ) \
167  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
168  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
169  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
170  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
171  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_INT )
172  // lr_map // lr
175 
180 typedef struct
181 {
182  char tx_buffer[ LR_MAX_TRANSFER_SIZE ];
183  char rx_buffer[ LR_MAX_TRANSFER_SIZE ];
184  uint16_t rx_buffer_len;
185 
186 } lr_buffers_t;
187 
192 typedef struct
193 {
194  bool timer_f;
195  bool timeout_f;
197  uint32_t ticker;
198  uint32_t timer_max;
199 
200 } lr_timer_t;
201 
206 typedef struct
207 {
208  bool rsp_rdy_f;
209  bool lr_rdy_f;
210 
212 
217 typedef struct
218 {
219  bool rsp_f;
220  char *rsp_buffer;
222  void ( *callback_resp )( char *response );
223 
224 } lr_response_t;
225 
230 typedef struct
231 {
232  char *payload;
233  char *port_no;
234  char *buffer;
235  char *response;
236 
237 } lr_mac_t;
238 
243 typedef struct
244 {
245  // Output pins
246  digital_out_t rst;
247  digital_out_t rts;
249  // Input pins
250  digital_in_t cts;
252  // Modules
253  uart_t uart;
255  // Buffers
256  char uart_rx_buffer[ DRV_RX_BUFFER_SIZE ];
257  char uart_tx_buffer[ DRV_RX_BUFFER_SIZE ];
263  char data_in;
264 
265 } lr_t;
266 
271 typedef struct
272 {
273  // Communication gpio pins
274  pin_name_t rx_pin;
275  pin_name_t tx_pin;
277  // Additional gpio pins
278  pin_name_t rst;
279  pin_name_t rts;
280  pin_name_t cts;
282  // Static variable
283  uint32_t baud_rate;
285  uart_data_bits_t data_bit;
286  uart_parity_t parity_bit;
287  uart_stop_bits_t stop_bit;
289 } lr_cfg_t;
290 
295 typedef enum
296 {
297  LR_OK = 0,
298  LR_ERROR = -1
299 
301 
317 void lr_cfg_setup ( lr_cfg_t *cfg );
318 
333 err_t lr_init ( lr_t *ctx, lr_cfg_t *cfg );
334 
348 void lr_default_cfg ( lr_t *ctx, bool cb_default, void ( *response_p )( char *response ) );
349 
360 void lr_generic_write ( lr_t *ctx, char *data_buf, uint16_t len );
361 
373 int32_t lr_generic_read ( lr_t *ctx, char *data_buf, uint16_t max_len );
374 
386 void lr_cmd ( lr_t *ctx, char *cmd, char *response );
387 
397 uint8_t lr_mac_tx ( lr_t *ctx, lr_mac_t *mac );
398 
409 uint8_t lr_join ( lr_t *ctx, char *join_mode, char *response );
410 
421 uint8_t lr_rx ( lr_t *ctx, char *window_size, char *response );
422 
432 uint8_t lr_tx ( lr_t *ctx, char *buffer );
433 
443 void lr_rx_isr ( lr_t *ctx, char rx_input );
444 
454 void lr_tick_isr ( lr_t *ctx );
455 
475 void lr_tick_conf ( lr_t *ctx, uint32_t timer_limit );
476 
485 void lr_isr_process ( lr_t *ctx );
486 
496 void lr_put_char ( lr_t *ctx, char data_in );
497 
498 #ifdef __cplusplus
499 }
500 #endif
501 #endif // LR_H
502  // lr
504 
505 // ------------------------------------------------------------------------ END
lr_cfg_t
LR Click configuration object.
Definition: lr.h:272
LR_ERROR
@ LR_ERROR
Definition: lr.h:298
lr_timer_t::timer_max
uint32_t timer_max
Definition: lr.h:198
lr_t::cts
digital_in_t cts
Definition: lr.h:250
lr_mac_t
Mac object definition.
Definition: lr.h:231
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_cfg_t::tx_pin
pin_name_t tx_pin
Definition: lr.h:275
lr_init
err_t lr_init(lr_t *ctx, lr_cfg_t *cfg)
LR initialization function.
lr_cfg_t::rx_pin
pin_name_t rx_pin
Definition: lr.h:274
lr_tx
uint8_t lr_tx(lr_t *ctx, char *buffer)
Main tnanceiver function.
lr_t::rst
digital_out_t rst
Definition: lr.h:246
lr_timer_t::timeout_f
bool timeout_f
Definition: lr.h:195
lr_buffers_t::rx_buffer_len
uint16_t rx_buffer_len
Definition: lr.h:184
lr_procces_flags_t::rsp_rdy_f
bool rsp_rdy_f
Definition: lr.h:208
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_timer_t::ticker
uint32_t ticker
Definition: lr.h:197
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:112
lr_procces_flags_t
Process Flags object definition.
Definition: lr.h:207
lr_cfg_t::uart_blocking
bool uart_blocking
Definition: lr.h:284
lr_timer_t::timer_f
bool timer_f
Definition: lr.h:194
lr_isr_process
void lr_isr_process(lr_t *ctx)
Main Process.
lr_cfg_t::rts
pin_name_t rts
Definition: lr.h:279
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_response_t::rsp_f
bool rsp_f
Definition: lr.h:219
lr_response_t::callback_default
bool callback_default
Definition: lr.h:221
lr_mac_tx
uint8_t lr_mac_tx(lr_t *ctx, lr_mac_t *mac)
Function for writing mac parameters.
lr_mac_t::buffer
char * buffer
Definition: lr.h:234
LR_OK
@ LR_OK
Definition: lr.h:297
lr_response_t
Response object definition.
Definition: lr.h:218
lr_t::buff
lr_buffers_t buff
Definition: lr.h:259
lr_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: lr.h:287
lr_join
uint8_t lr_join(lr_t *ctx, char *join_mode, char *response)
Function for setting join mode.
lr_procces_flags_t::lr_rdy_f
bool lr_rdy_f
Definition: lr.h:209
lr_t::tm
lr_timer_t tm
Definition: lr.h:260
lr_timer_t::timer_use_f
bool timer_use_f
Definition: lr.h:196
lr_t::data_in
char data_in
Definition: lr.h:263
lr_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: lr.h:285
lr_cfg_t::baud_rate
uint32_t baud_rate
Definition: lr.h:283
lr_mac_t::payload
char * payload
Definition: lr.h:232
lr_mac_t::port_no
char * port_no
Definition: lr.h:233
lr_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: lr.h:286
lr_t::rsp
lr_response_t rsp
Definition: lr.h:262
DRV_RX_BUFFER_SIZE
#define DRV_RX_BUFFER_SIZE
LR driver buffer size.
Definition: lr.h:148
lr_cfg_t::rst
pin_name_t rst
Definition: lr.h:278
lr_cfg_t::cts
pin_name_t cts
Definition: lr.h:280
lr_t::flags
lr_procces_flags_t flags
Definition: lr.h:261
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:244
lr_response_t::rsp_buffer
char * rsp_buffer
Definition: lr.h:220
lr_mac_t::response
char * response
Definition: lr.h:235
lr_t::uart
uart_t uart
Definition: lr.h:253
lr_timer_t
Timer Flags and Counter object definition.
Definition: lr.h:193
lr_return_value_t
lr_return_value_t
LR Click return value data.
Definition: lr.h:296
lr_buffers_t
Click buffers object definition.
Definition: lr.h:181
lr_t::rts
digital_out_t rts
Definition: lr.h:247
lr_default_cfg
void lr_default_cfg(lr_t *ctx, bool cb_default, void(*response_p)(char *response))
LR default configuration function.