neomesh2  2.1.0.0
neomesh2.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 NEOMESH2_H
29 #define NEOMESH2_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 NEOMESH2_CMD_NACK_SEND 0x02
60 #define NEOMESH2_CMD_ACK_SEND 0x03
61 #define NEOMESH2_CMD_NODE_STATUS 0x07
62 #define NEOMESH2_CMD_NODE_INFO 0x08
63 #define NEOMESH2_CMD_NEIGHBOUR_LIST 0x09
64 #define NEOMESH2_CMD_NETWORK_COMMAND 0x0A
65 #define NEOMESH2_CMD_SAPI_TO_AAPI 0x0B
66 #define NEOMESH2_CMD_ROUTE_INFO 0x0C
67 #define NEOMESH2_CMD_WES_COMMAND 0x10
68 #define NEOMESH2_CMD_WES_SETUP_RSP 0x11
69 #define NEOMESH2_CMD_GET_SW_VERSION 0x14
70 #define NEOMESH2_CMD_ALT_MODE 0x20
71 
76 #define NEOMESH2_RSP_ACK 0x50
77 #define NEOMESH2_RSP_NACK 0x51
78 #define NEOMESH2_RSP_ACK_HOST 0x52
79 #define NEOMESH2_RSP_ACK_HOST_HAPA 0x53
80 #define NEOMESH2_RSP_NACK_HOST 0x54
81 #define NEOMESH2_RSP_NACK_HOST_HAPA 0x55
82 #define NEOMESH2_RSP_NACK_SEND 0x56
83 #define NEOMESH2_RSP_NACK_DROP 0x57
84 #define NEOMESH2_RSP_NODE_INFO 0x58
85 #define NEOMESH2_RSP_NEIGHBOUR_LIST 0x59
86 #define NEOMESH2_RSP_NETWORK_COMMAND 0x5A
87 #define NEOMESH2_RSP_ROUTE_INFO 0x5C
88 #define NEOMESH2_RSP_WES_STATUS 0x60
89 #define NEOMESH2_RSP_WES_SETUP 0x61
90 #define NEOMESH2_RSP_GET_SW_VERSION 0x64
91 #define NEOMESH2_RSP_ALT_MODE 0x70
92 
97 #define NEOMESH2_SAPI_CMD_LOGIN 0x0103u
98 #define NEOMESH2_SAPI_CMD_RESET_LIST_ITERATOR 0x0104u
99 #define NEOMESH2_SAPI_CMD_GET_LIST 0x0105u
100 #define NEOMESH2_SAPI_CMD_GET_SETTING_FLASH 0x0106u
101 #define NEOMESH2_SAPI_CMD_GET_SETTING_RAM 0x0107u
102 #define NEOMESH2_SAPI_CMD_COMMIT_SETTINGS 0x0108u
103 #define NEOMESH2_SAPI_CMD_DISCARD_SETTINGS 0x0109u
104 #define NEOMESH2_SAPI_CMD_SET_SETTING 0x010Au
105 #define NEOMESH2_SAPI_CMD_START_PROTOCOL_STACK 0x0112u
106 #define NEOMESH2_SAPI_CMD_START_BOOTLOADER 0x0113u
107 #define NEOMESH2_SAPI_HEADER 0x3E
108 #define NEOMESH2_SAPI_TRAIL 0x21
109 
114 #define NEOMESH2_SAPI_RSP_OK 0x0380u
115 #define NEOMESH2_SAPI_RSP_ERROR 0x0381u
116 #define NEOMESH2_SAPI_RSP_BOOTLOADER_START 0x0382u
117 #define NEOMESH2_SAPI_RSP_PROTOCOL_STACK_START 0x0383u
118 #define NEOMESH2_SAPI_RSP_PROTOCOL_STACK_ERROR 0x0384u
119 #define NEOMESH2_SAPI_RSP_RESET 0x0385u
120 #define NEOMESH2_SAPI_RSP_SETTINGS_LIST_OUTPUT 0x0185u
121 #define NEOMESH2_SAPI_RSP_SETTINGS_VALUE 0x0186u
122 
127 #define NEOMESH2_SAPI_LOGIN_PASSWORD_0 0x4C
128 #define NEOMESH2_SAPI_LOGIN_PASSWORD_1 0x76
129 #define NEOMESH2_SAPI_LOGIN_PASSWORD_2 0x6C
130 #define NEOMESH2_SAPI_LOGIN_PASSWORD_3 0x31
131 #define NEOMESH2_SAPI_LOGIN_PASSWORD_4 0x30
132 
137 #define NEOMESH2_SAPI_SETTINGS_ID_NODE_ID 0x0A
138 
143 #define NEOMESH2_TIMEOUT_MS 20000ul
144 
149 #define NEOMESH2_MAX_PAYLOAD_LEN 255
150 
156 #define NEOMESH2_TX_DRV_BUFFER_SIZE 300u
157 #define NEOMESH2_RX_DRV_BUFFER_SIZE 300u
158  // neomesh2_cmd
160 
175 #define NEOMESH2_MAP_MIKROBUS( cfg, mikrobus ) \
176  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
177  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
178  cfg.app = MIKROBUS( mikrobus, MIKROBUS_AN ); \
179  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
180  cfg.wes = MIKROBUS( mikrobus, MIKROBUS_CS ); \
181  cfg.cts = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
182  cfg.wup = MIKROBUS( mikrobus, MIKROBUS_INT );
183  // neomesh2_map // neomesh2
186 
191 typedef struct
192 {
193  // Output pins
194  digital_out_t rst;
195  digital_out_t wes;
197  // Input pins
198  digital_in_t app;
199  digital_in_t cts;
200  digital_in_t wup;
202  // Modules
203  uart_t uart;
205  // Buffers
206  uint8_t uart_rx_buffer[ NEOMESH2_RX_DRV_BUFFER_SIZE ];
207  uint8_t uart_tx_buffer[ NEOMESH2_TX_DRV_BUFFER_SIZE ];
209 } neomesh2_t;
210 
215 typedef struct
216 {
217  // Communication gpio pins
218  pin_name_t rx_pin;
219  pin_name_t tx_pin;
221  // Additional gpio pins
222  pin_name_t app;
223  pin_name_t rst;
224  pin_name_t wes;
225  pin_name_t cts;
226  pin_name_t wup;
228  // Static variable
229  uint32_t baud_rate;
231  uart_data_bits_t data_bit;
232  uart_parity_t parity_bit;
233  uart_stop_bits_t stop_bit;
236 
241 typedef struct
242 {
243  uint8_t cmd;
244  uint8_t len;
245  uint8_t payload[ NEOMESH2_MAX_PAYLOAD_LEN ];
248 
253 typedef struct
254 {
255  uint16_t cmd;
256  uint8_t len;
257  uint8_t payload[ NEOMESH2_MAX_PAYLOAD_LEN ];
260 
265 typedef enum
266 {
269  NEOMESH2_TIMEOUT = -2
270 
272 
289 
304 
318 
333 
347 
362 
372 void neomesh2_set_rst_pin ( neomesh2_t *ctx, uint8_t state );
373 
383 void neomesh2_set_wes_pin ( neomesh2_t *ctx, uint8_t state );
384 
394 
404 
414 
415 #ifdef __cplusplus
416 }
417 #endif
418 #endif // NEOMESH2_H
419  // neomesh2
421 
422 // ------------------------------------------------------------------------ END
neomesh2_cfg_t::uart_blocking
bool uart_blocking
Definition: neomesh2.h:230
neomesh2_set_rst_pin
void neomesh2_set_rst_pin(neomesh2_t *ctx, uint8_t state)
NeoMesh 2 set rst pin function.
neomesh2_sapi_frame_t
NeoMesh 2 Click data frame object.
Definition: neomesh2.h:254
neomesh2_t::rst
digital_out_t rst
Definition: neomesh2.h:194
neomesh2_aapi_frame_t::cmd
uint8_t cmd
Definition: neomesh2.h:243
neomesh2_cfg_setup
void neomesh2_cfg_setup(neomesh2_cfg_t *cfg)
NeoMesh 2 configuration object setup function.
neomesh2_get_cts_pin
uint8_t neomesh2_get_cts_pin(neomesh2_t *ctx)
NeoMesh 2 get cts pin function.
neomesh2_get_wup_pin
uint8_t neomesh2_get_wup_pin(neomesh2_t *ctx)
NeoMesh 2 get wup pin function.
NEOMESH2_ERROR
@ NEOMESH2_ERROR
Definition: neomesh2.h:268
neomesh2_t::app
digital_in_t app
Definition: neomesh2.h:198
neomesh2_read_aapi_frame
err_t neomesh2_read_aapi_frame(neomesh2_t *ctx, neomesh2_aapi_frame_t *frame)
NeoMesh 2 read aapi frame function.
neomesh2_t
NeoMesh 2 Click context object.
Definition: neomesh2.h:192
neomesh2_sapi_frame_t::cmd
uint16_t cmd
Definition: neomesh2.h:255
neomesh2_aapi_frame_t::len
uint8_t len
Definition: neomesh2.h:244
neomesh2_read_sapi_frame
err_t neomesh2_read_sapi_frame(neomesh2_t *ctx, neomesh2_sapi_frame_t *frame)
NeoMesh 2 read sapi frame function.
neomesh2_set_wes_pin
void neomesh2_set_wes_pin(neomesh2_t *ctx, uint8_t state)
NeoMesh 2 set wes pin function.
neomesh2_t::wup
digital_in_t wup
Definition: neomesh2.h:200
neomesh2_cfg_t::wes
pin_name_t wes
Definition: neomesh2.h:224
neomesh2_t::wes
digital_out_t wes
Definition: neomesh2.h:195
neomesh2_cfg_t::wup
pin_name_t wup
Definition: neomesh2.h:226
neomesh2_t::uart
uart_t uart
Definition: neomesh2.h:203
NEOMESH2_MAX_PAYLOAD_LEN
#define NEOMESH2_MAX_PAYLOAD_LEN
NeoMesh 2 payload length.
Definition: neomesh2.h:149
neomesh2_sapi_frame_t::len
uint8_t len
Definition: neomesh2.h:256
NEOMESH2_TIMEOUT
@ NEOMESH2_TIMEOUT
Definition: neomesh2.h:269
neomesh2_send_sapi_frame
err_t neomesh2_send_sapi_frame(neomesh2_t *ctx, neomesh2_sapi_frame_t *frame)
NeoMesh 2 send sapi frame function.
NEOMESH2_OK
@ NEOMESH2_OK
Definition: neomesh2.h:267
neomesh2_aapi_frame_t
NeoMesh 2 Click data frame object.
Definition: neomesh2.h:242
neomesh2_cfg_t::baud_rate
uint32_t baud_rate
Definition: neomesh2.h:229
NEOMESH2_RX_DRV_BUFFER_SIZE
#define NEOMESH2_RX_DRV_BUFFER_SIZE
Definition: neomesh2.h:157
neomesh2_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: neomesh2.h:233
neomesh2_cfg_t::rst
pin_name_t rst
Definition: neomesh2.h:223
neomesh2_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: neomesh2.h:232
neomesh2_cfg_t::tx_pin
pin_name_t tx_pin
Definition: neomesh2.h:219
neomesh2_cfg_t
NeoMesh 2 Click configuration object.
Definition: neomesh2.h:216
neomesh2_get_app_pin
uint8_t neomesh2_get_app_pin(neomesh2_t *ctx)
NeoMesh 2 get app pin function.
neomesh2_cfg_t::app
pin_name_t app
Definition: neomesh2.h:222
neomesh2_t::cts
digital_in_t cts
Definition: neomesh2.h:199
neomesh2_send_aapi_frame
err_t neomesh2_send_aapi_frame(neomesh2_t *ctx, neomesh2_aapi_frame_t *frame)
NeoMesh 2 send aapi frame function.
neomesh2_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: neomesh2.h:231
neomesh2_cfg_t::rx_pin
pin_name_t rx_pin
Definition: neomesh2.h:218
NEOMESH2_TX_DRV_BUFFER_SIZE
#define NEOMESH2_TX_DRV_BUFFER_SIZE
NeoMesh 2 driver buffer size.
Definition: neomesh2.h:156
neomesh2_return_value_t
neomesh2_return_value_t
NeoMesh 2 Click return value data.
Definition: neomesh2.h:266
neomesh2_init
err_t neomesh2_init(neomesh2_t *ctx, neomesh2_cfg_t *cfg)
NeoMesh 2 initialization function.
neomesh2_cfg_t::cts
pin_name_t cts
Definition: neomesh2.h:225