lr  2.0.0.0
lr.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 LR_H
36 #define LR_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_uart.h"
41 
42 
43 // -------------------------------------------------------------- PUBLIC MACROS
53 #define LR_MAP_MIKROBUS( cfg, mikrobus ) \
54  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
55  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
56  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
57  cfg.rts = MIKROBUS( mikrobus, MIKROBUS_CS ); \
58  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_INT )
59 
65 #define LR_RETVAL uint8_t
66 
67 #define LR_OK 0x00
68 #define LR_INIT_ERROR 0xFF
69 
75 #define LR_MAC_TX "mac tx "
76 #define LR_JOIN "mac join "
77 #define LR_RADIO_TX "radio tx "
78 #define LR_RADIO_RX "radio rx "
79 
85 #define LR_TIMER_EXPIRED 50000
86 
92 #define LR_RESP_COUNT 100
93 
99 #define LR_MAX_RSP_SIZE 20
100 
106 #define LR_MAX_CMD_SIZE 64
107 
113 #define LR_MAX_DATA_SIZE 256
114 #define LR_MAX_TRANSFER_SIZE 384
115 
121 #define LR_PL_CNF "cnf "
122 #define LR_PL_UNCNF "uncnf "
123 
129 #define LR_JM_OTAA "otaa"
130 #define LR_JM_ABP "abp"
131 
137 #define LR_CMD_SYS_GET_VER "sys get ver"
138 #define LR_CMD_MAC_PAUSE "mac pause"
139 #define LR_CMD_RADIO_SET_WDT "radio set wdt 0"
140 #define LR_ARG_0 "0"
141 
147 #define DRV_RX_BUFFER_SIZE 300
148  // End group macro
151 // --------------------------------------------------------------- PUBLIC TYPES
160 typedef struct
161 {
162  char tx_buffer[ LR_MAX_TRANSFER_SIZE ];
163  char rx_buffer[ LR_MAX_TRANSFER_SIZE ];
164  uint16_t rx_buffer_len;
165 
166 } lr_buffers_t;
167 
171 typedef struct
172 {
173  bool timer_f;
174  bool timeout_f;
176  uint32_t ticker;
177  uint32_t timer_max;
178 
179 } lr_timer_t;
180 
184 typedef struct
185 {
186  bool rsp_rdy_f;
187  bool lr_rdy_f;
188 
190 
194 typedef struct
195 {
196  bool rsp_f;
197  char *rsp_buffer;
199  void ( *callback_resp )( char *response );
200 
201 } lr_response_t;
202 
206 typedef struct
207 {
208  char* payload;
209  char* port_no;
210  char *buffer;
211  char *response;
212 
213 } lr_mac_t;
214 
218 typedef struct
219 {
220  // Output pins
221 
222  digital_out_t rst;
223  digital_out_t rts;
224 
225  // Input pins
226 
227  digital_in_t cts;
228 
229  // Modules
230 
231  uart_t uart;
232 
233  char uart_rx_buffer[ DRV_RX_BUFFER_SIZE ];
234  char uart_tx_buffer[ DRV_RX_BUFFER_SIZE ];
235 
240  char data_in;
241 
242 } lr_t;
243 
247 typedef struct
248 {
249  // Communication gpio pins
250 
251  pin_name_t rx_pin;
252  pin_name_t tx_pin;
253 
254  // Additional gpio pins
255 
256  pin_name_t rst;
257  pin_name_t rts;
258  pin_name_t cts;
259 
260  // static variable
261 
262  uint32_t baud_rate; // Clock speed.
264  uart_data_bits_t data_bit; // Data bits.
265  uart_parity_t parity_bit; // Parity bit.
266  uart_stop_bits_t stop_bit; // Stop bits.
267 
268 } lr_cfg_t;
269  // End types group
271 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
272 
278 #ifdef __cplusplus
279 extern "C"{
280 #endif
281 
290 void lr_cfg_setup ( lr_cfg_t *cfg );
291 
301 
319 void lr_default_cfg ( lr_t *ctx, bool cb_default, void ( *response_p )( char *response ) );
320 
330 void lr_generic_write ( lr_t *ctx, char *data_buf, uint16_t len );
331 
343 int32_t lr_generic_read ( lr_t *ctx, char *data_buf, uint16_t max_len );
344 
355 void lr_cmd ( lr_t *ctx, char *cmd, char *response );
356 
365 uint8_t lr_mac_tx ( lr_t *ctx, lr_mac_t *mac );
366 
376 uint8_t lr_join ( lr_t *ctx, char *join_mode, char *response );
377 
387 uint8_t lr_rx ( lr_t *ctx, char *window_size, char *response );
388 
397 uint8_t lr_tx ( lr_t *ctx, char *buffer );
398 
407 void lr_rx_isr ( lr_t *ctx, char rx_input );
408 
417 void lr_tick_isr ( lr_t *ctx );
418 
437 void lr_tick_conf ( lr_t *ctx, uint32_t timer_limit );
438 
446 void lr_isr_process ( lr_t *ctx );
447 
456 void lr_put_char ( lr_t *ctx, char data_in );
457 
458 #ifdef __cplusplus
459 }
460 #endif
461 #endif // _LR_H_
462  // End public_function group
465 
466 // ------------------------------------------------------------------------- END
lr_cfg_t
Click configuration structure definition.
Definition: lr.h:248
DRV_RX_BUFFER_SIZE
#define DRV_RX_BUFFER_SIZE
Definition: lr.h:147
lr_timer_t::timer_max
uint32_t timer_max
Definition: lr.h:177
lr_isr_process
void lr_isr_process(lr_t *ctx)
Main Process.
lr_t::cts
digital_in_t cts
Definition: lr.h:227
lr_mac_t
Mac object definition.
Definition: lr.h:207
lr_cfg_t::tx_pin
pin_name_t tx_pin
Definition: lr.h:252
lr_tx
uint8_t lr_tx(lr_t *ctx, char *buffer)
Main tnanceiver function.
lr_cfg_t::rx_pin
pin_name_t rx_pin
Definition: lr.h:251
LR_MAX_TRANSFER_SIZE
#define LR_MAX_TRANSFER_SIZE
Definition: lr.h:114
lr_t::rst
digital_out_t rst
Definition: lr.h:222
lr_timer_t::timeout_f
bool timeout_f
Definition: lr.h:174
lr_buffers_t::rx_buffer_len
uint16_t rx_buffer_len
Definition: lr.h:164
lr_procces_flags_t::rsp_rdy_f
bool rsp_rdy_f
Definition: lr.h:186
lr_join
uint8_t lr_join(lr_t *ctx, char *join_mode, char *response)
Function for setting join mode.
lr_tick_conf
void lr_tick_conf(lr_t *ctx, uint32_t timer_limit)
Timer Configuration.
lr_timer_t::ticker
uint32_t ticker
Definition: lr.h:176
lr_rx_isr
void lr_rx_isr(lr_t *ctx, char rx_input)
Receiver.
lr_cmd
void lr_cmd(lr_t *ctx, char *cmd, char *response)
Send command function.
lr_procces_flags_t
Process Flags object definition.
Definition: lr.h:185
lr_cfg_t::uart_blocking
bool uart_blocking
Definition: lr.h:263
lr_timer_t::timer_f
bool timer_f
Definition: lr.h:173
lr_cfg_t::rts
pin_name_t rts
Definition: lr.h:257
lr_generic_read
int32_t lr_generic_read(lr_t *ctx, char *data_buf, uint16_t max_len)
Generic read function.
lr_init
LR_RETVAL lr_init(lr_t *ctx, lr_cfg_t *cfg)
Initialization function.
lr_response_t::rsp_f
bool rsp_f
Definition: lr.h:196
lr_response_t::callback_default
bool callback_default
Definition: lr.h:198
lr_mac_t::buffer
char * buffer
Definition: lr.h:210
lr_response_t
Response object definition.
Definition: lr.h:195
lr_t::buff
lr_buffers_t buff
Definition: lr.h:236
lr_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: lr.h:266
lr_procces_flags_t::lr_rdy_f
bool lr_rdy_f
Definition: lr.h:187
lr_generic_write
void lr_generic_write(lr_t *ctx, char *data_buf, uint16_t len)
Generic write function.
lr_mac_tx
uint8_t lr_mac_tx(lr_t *ctx, lr_mac_t *mac)
Function for writing mac parameters.
lr_t::tm
lr_timer_t tm
Definition: lr.h:237
lr_timer_t::timer_use_f
bool timer_use_f
Definition: lr.h:175
lr_t::data_in
char data_in
Definition: lr.h:240
lr_rx
uint8_t lr_rx(lr_t *ctx, char *window_size, char *response)
Main receiver function
lr_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: lr.h:264
lr_cfg_t::baud_rate
uint32_t baud_rate
Definition: lr.h:262
lr_mac_t::payload
char * payload
Definition: lr.h:208
lr_mac_t::port_no
char * port_no
Definition: lr.h:209
lr_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: lr.h:265
lr_t::rsp
lr_response_t rsp
Definition: lr.h:239
LR_RETVAL
#define LR_RETVAL
Definition: lr.h:65
lr_default_cfg
void lr_default_cfg(lr_t *ctx, bool cb_default, void(*response_p)(char *response))
Click Default Configuration function.
lr_cfg_t::rst
pin_name_t rst
Definition: lr.h:256
lr_cfg_t::cts
pin_name_t cts
Definition: lr.h:258
lr_t::flags
lr_procces_flags_t flags
Definition: lr.h:238
lr_t
Click ctx object definition.
Definition: lr.h:219
lr_response_t::rsp_buffer
char * rsp_buffer
Definition: lr.h:197
lr_mac_t::response
char * response
Definition: lr.h:211
lr_cfg_setup
void lr_cfg_setup(lr_cfg_t *cfg)
Config Object Initialization function.
lr_tick_isr
void lr_tick_isr(lr_t *ctx)
Timer.
lr_t::uart
uart_t uart
Definition: lr.h:231
lr_timer_t
Timer Flags and Counter object definition.
Definition: lr.h:172
lr_put_char
void lr_put_char(lr_t *ctx, char data_in)
Function for write char.
lr_buffers_t
Click buffers object definition.
Definition: lr.h:161
lr_t::rts
digital_out_t rts
Definition: lr.h:223