zigbee  2.0.0.0
zigbee.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 ZIGBEE_H
29 #define ZIGBEE_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 ZIGBEE_CMD_AT "AT"
74 #define ZIGBEE_CMD_ATI "ATI"
75 #define ZIGBEE_CMD_ATZ "ATZ"
76 #define ZIGBEE_CMD_AT_REMZ "AT+REMZ"
77 #define ZIGBEE_CMD_AT_F "AT&F"
78 #define ZIGBEE_CMD_AT_BLOAD "AT+BLOAD"
79 #define ZIGBEE_CMD_AT_PASSTHROUGH "AT+PASSTHROUGH"
80 #define ZIGBEE_CMD_AT_RECOVER "AT+RECOVER"
81 #define ZIGBEE_CMD_ATS "ATS"
82 #define ZIGBEE_CMD_ATREMS "ATREMS"
83 #define ZIGBEE_CMD_ATSALL "ATSALL"
84 #define ZIGBEE_CMD_AT_TOKDUMP "AT+TOKDUMP"
85 
90 #define ZIGBEE_CMD_AT_ESCAN "AT+ESCAN"
91 #define ZIGBEE_CMD_AT_EN "AT+EN"
92 #define ZIGBEE_CMD_AT_PANSCAN "AT+PANSCAN"
93 #define ZIGBEE_CMD_AT_JN "AT+JN"
94 #define ZIGBEE_CMD_AT_JPAN "AT+JPAN"
95 #define ZIGBEE_CMD_AT_SJN "AT+SJN"
96 #define ZIGBEE_CMD_AT_DASSL "AT+DASSL"
97 #define ZIGBEE_CMD_AT_DASSR "AT+DASSR"
98 #define ZIGBEE_CMD_AT_N "AT+N"
99 #define ZIGBEE_CMD_AT_NTABLE "AT+NTABLE"
100 #define ZIGBEE_CMD_AT_RTABLE "AT+RTABLE"
101 #define ZIGBEE_CMD_AT_IDREQ "AT+IDREQ"
102 #define ZIGBEE_CMD_AT_EUIREQ "AT+EUIREQ"
103 #define ZIGBEE_CMD_AT_NODEDESC "AT+NODEDESC"
104 #define ZIGBEE_CMD_AT_POWERDESC "AT+POWERDESC"
105 #define ZIGBEE_CMD_AT_ACTEPDESC "AT+ACTEPDESC"
106 #define ZIGBEE_CMD_AT_SIMPLEDESC "AT+SIMPLEDESC"
107 #define ZIGBEE_CMD_AT_MATCHREQ "AT+MATCHREQ"
108 #define ZIGBEE_CMD_AT_ANNCE "AT+ANNCE"
109 #define ZIGBEE_CMD_AT_SR "AT+SR"
110 #define ZIGBEE_CMD_AT_FNDSR "AT+FNDSR"
111 #define ZIGBEE_CMD_AT_POLL "AT+POLL"
112 #define ZIGBEE_CMD_AT_REJOIN "AT+REJOIN"
113 #define ZIGBEE_CMD_AT_SN "AT+SN"
114 #define ZIGBEE_CMD_AT_KEYUPD "AT+KEYUPD"
115 #define ZIGBEE_CMD_AT_BECOMENTC "AT+BECOMENTC"
116 #define ZIGBEE_CMD_AT_BECOMENM "AT+BECOMENM"
117 #define ZIGBEE_CMD_AT_CCHANGE "AT+CCHANGE"
118 
123 #define ZIGBEE_CMD_AT_ATABLE "AT+ATABLE"
124 #define ZIGBEE_CMD_AT_ASET "AT+ASET"
125 #define ZIGBEE_CMD_AT_MTABLE "AT+MTABLE"
126 #define ZIGBEE_CMD_AT_MSET "AT+MSET"
127 #define ZIGBEE_CMD_AT_BCAST "AT+BCAST"
128 #define ZIGBEE_CMD_AT_BCASTB "AT+BCASTB"
129 #define ZIGBEE_CMD_AT_UCAST "AT+UCAST"
130 #define ZIGBEE_CMD_AT_UCASTB "AT+UCASTB"
131 #define ZIGBEE_CMD_AT_SCAST "AT+SCAST"
132 #define ZIGBEE_CMD_AT_SCASTB "AT+SCASTB"
133 #define ZIGBEE_CMD_AT_SSINK "AT+SSINK"
134 #define ZIGBEE_CMD_AT_MCAST "AT+MCAST"
135 #define ZIGBEE_CMD_AT_MCASTB "AT+MCASTB"
136 #define ZIGBEE_CMD_AT_DMODE "AT+DMODE"
137 #define ZIGBEE_CMD_AT_PPP "+++"
138 #define ZIGBEE_CMD_AT_IDENT "AT+IDENT"
139 #define ZIGBEE_CMD_AT_SENDUCAST "AT+SENDUCAST"
140 #define ZIGBEE_CMD_AT_SENDUCASTB "AT+SENDUCASTB"
141 #define ZIGBEE_CMD_AT_SNEDMCAST "AT+SNEDMCAST"
142 #define ZIGBEE_CMD_AT_SENDMCASTB "AT+SENDMCASTB"
143 #define ZIGBEE_CMD_AT_INTERPAN "AT+INTERPAN"
144 #define ZIGBEE_CMD_AT_RDATAB "AT+RDATAB"
145 
150 #define ZIGBEE_CMD_AT_LBTABLE "AT+LBTABLE"
151 #define ZIGBEE_CMD_AT_BSET "AT+BSET"
152 #define ZIGBEE_CMD_AT_BCLR "AT+BCLR"
153 #define ZIGBEE_CMD_AT_BTABLE "AT+BTABLE"
154 #define ZIGBEE_CMD_AT_BIND "AT+BIND"
155 #define ZIGBEE_CMD_AT_UNBIND "AT+UNBIND"
156 #define ZIGBEE_CMD_AT_EDBIND "AT+EDBIND"
157 
162 #define ZIGBEE_CMD_AT_SETTIME "AT+SETTIME"
163 #define ZIGBEE_CMD_AT_GETTIME "AT+GETTIME"
164 #define ZIGBEE_CMD_AT_SYNCTIME "AT+SYNCTIME"
165 
170 #define ZIGBEE_SUFFIX_NULL ""
171 
177 #define ZIGBEE_DEV_BUFFER_MAX 80
178  // zigbee_cmd
180 
195 #define ZIGBEE_ERROR_OK 0X00
196 #define ZIGBEE_ERROR_CANT_POLL_TIMEOUT 0X01
197 #define ZIGBEE_ERROR_UNKNOWN_CMD 0X02
198 #define ZIGBEE_ERROR_INVALID_SREG 0X04
199 #define ZIGBEE_ERROR_INVALID_PARAM 0X05
200 #define ZIGBEE_ERROR_RECIPIENT 0X06
201 #define ZIGBEE_ERROR_MSG_NACK 0X07
202 #define ZIGBEE_ERROR_NSINK 0X08
203 #define ZIGBEE_ERROR_ADR_TABLE_IN_USE 0X09
204 #define ZIGBEE_ERROR_MSG_NOT_SENT 0X0A
205 #define ZIGBEE_ERROR_LOCAL_NODE_NSINK 0X0B
206 #define ZIGBEE_ERROR_TOO_MANY_CHAR 0X0C
207 #define ZIGBEE_ERROR_BG_SCAN_IN_PROGRESS 0X0E
208 #define ZIGBEE_ERROR_FATAL_INIT_NET 0X0F
209 #define ZIGBEE_ERROR_BOOTLOADING 0X10
210 #define ZIGBEE_ERROR_FATAL_INIT_STACK 0X12
211 #define ZIGBEE_ERROR_NODE_OUT_OF_BUFFER 0X18
212 #define ZIGBEE_ERROR_READ_ONLY_REG 0X19
213 #define ZIGBEE_ERROR_DATA_MODE_REFUSED_RN 0X1A
214 #define ZIGBEE_ERROR_CONN_LOST_DATA_MODE 0X1B
215 #define ZIGBEE_ERROR_RN_IN_DATA_MODE 0X1C
216 #define ZIGBEE_ERROR_INVALID_PASWD 0X20
217 #define ZIGBEE_ERROR_CANT_FORM_NET 0X25
218 #define ZIGBEE_ERROR_NO_NET_FOUND 0X27
219 #define ZIGBEE_ERROR_NOD_PART_OF_PAN 0X28
220 #define ZIGBEE_ERROR_LEAVING_PAN 0X2C
221 #define ZIGBEE_ERROR_SCANNING_PAN 0X2D
222 #define ZIGBEE_ERROR_NO_RESP_BOOTLOADER 0X33
223 #define ZIGBEE_ERROR_TARGET_NO_RESP 0X34
224 #define ZIGBEE_ERROR_TIMEOUT_XCASTB 0X35
225 #define ZIGBEE_ERROR_MAC_TX_QUEUE_FULL 0X39
226 #define ZIGBEE_ERROR_INVALID_BIND_INDEX 0X6C
227 #define ZIGBEE_ERROR_INVALID_OP 0X70
228 #define ZIGBEE_ERROR_MORE_THAN_10_UNI_MSG 0X72
229 #define ZIGBEE_ERROR_MSG_TOO_LONG 0X74
230 #define ZIGBEE_ERROR_ZDP_INVALID_REQ_TYPE 0X80
231 #define ZIGBEE_ERROR_ZDP_DEV_NOT_FOUND 0X81
232 #define ZIGBEE_ERROR_ZDP_INVALID_ENDPONT 0X82
233 #define ZIGBEE_ERROR_ZDP_NOT_ACTIVE 0X83
234 #define ZIGBEE_ERROR_ZDP_NOT_SUPPORTED 0X84
235 #define ZIGBEE_ERROR_ZDP_TIMEOUT 0X85
236 #define ZIGBEE_ERROR_ZDP_NO_MATCH 0X86
237 #define ZIGBEE_ERROR_ZDP_TABLE_FULL 0X87
238 #define ZIGBEE_ERROR_ZDP_NO_ENTRY 0X88
239 #define ZIGBEE_ERROR_ZDP_NO_DESC 0X89
240 #define ZIGBEE_ERROR_OP_IF_CONN_TO_PAN 0X91
241 #define ZIGBEE_ERROR_NODE_NOT_IN_NET 0X93
242 #define ZIGBEE_ERROR_CANNT_JOIN_NET 0X94
243 #define ZIGBEE_ERROR_MOBILE_END_DEV_MOVE 0X96
244 #define ZIGBEE_ERROR_CANT_JOIN_2006_NET 0X98
245 #define ZIGBEE_ERROR_8_MSG_IN_8_SEC_MAX 0XA1
246 #define ZIGBEE_ERROR_NO_BEACON 0XAB
247 #define ZIGBEE_ERROR_NET_KEY_SENT 0XAC
248 #define ZIGBEE_ERROR_NO_RECEIVE_NET_KEY 0XAD
249 #define ZIGBEE_ERROR_NO_LINK_KEY_REQ 0XAE
250 #define ZIGBEE_ERROR_PRECONFIG_KEY_REQ 0XAF
251 #define ZIGBEE_ERROR_NWK_ALREADY_PRESENT 0XC5
252 #define ZIGBEE_ERROR_NWK_TABLE_FULL 0XC7
253 #define ZIGBEE_ERROR_NWK_UNKNOWN_DEV 0XC8
254 
255 #define ZIGBEE_RESP_ERROR "ERROR"
256 #define ZIGBEE_RESP_OK "OK"
257 #define ZIGBEE_ERROR_INC 6
258 
259 #define ZIGBEE_ERROR_CODE_MAX 59
260 #define ZIGBEE_ERROR_CODE 0
261 #define ZIGBEE_ERROR_DESC 1
262 
267 #define ZIGBEE_DEV_HOST 1
268 
273 #define ZIGBEE_DEV_USER 2
274 
275 #define ZIGBEE_APP_TASK 11
276 #define ZIGBEE_APP_INIT 12
277 
282 #define ZIGBEE_OP_WAIT 0x00
283 #define ZIGBEE_OP_OK 0xAA
284 #define ZIGBEE_OP_ERROR 0xBB
285 #define ZIGBEE_OP_NL 0xCC
286 
291 #define ZIGBEE_MAP_MIKROBUS( cfg, mikrobus ) \
292  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
293  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
294  cfg.fw = MIKROBUS( mikrobus, MIKROBUS_AN ); \
295  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
296  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
297  // zigbee_map // zigbee
300 
305 typedef struct
306 {
307  // Output pins
308  digital_out_t fw;
309  digital_out_t rst;
311  // Input pins
312  digital_in_t int_pin;
314  // Modules
315  uart_t uart;
317  // Buffers
318  char uart_rx_buffer[ ZIGBEE_DEV_BUFFER_MAX ];
319  char uart_tx_buffer[ ZIGBEE_DEV_BUFFER_MAX ];
321 } zigbee_t;
322 
327 typedef struct
328 {
329  // Communication gpio pins
330  pin_name_t rx_pin;
331  pin_name_t tx_pin;
333  // Additional gpio pins
334  pin_name_t fw;
335  pin_name_t rst;
336  pin_name_t int_pin;
338  // Static variable
339  uint32_t baud_rate;
341  uart_data_bits_t data_bit;
342  uart_parity_t parity_bit;
343  uart_stop_bits_t stop_bit;
345 } zigbee_cfg_t;
346 
347 typedef struct
348 {
349  uint8_t error_code;
350  uint8_t *error_desc;
352 
357 typedef enum
358 {
360  ZIGBEE_ERROR = -1
361 
363 
380 
394 err_t zigbee_init ( zigbee_t *ctx, zigbee_cfg_t *cfg );
395 
408 err_t zigbee_generic_write ( zigbee_t *ctx, char *data_buf, uint16_t len );
409 
422 err_t zigbee_generic_read ( zigbee_t *ctx, char *data_buf, uint16_t max_len );
423 
433 void zigbee_send_at ( zigbee_t *ctx, uint8_t *at_buf, uint8_t *suffix_buf );
434 
443 void zigbee_send_cmd ( zigbee_t *ctx, uint8_t *cmd_buf );
444 
456 uint8_t zigbee_resp ( zigbee_t *ctx, char *data_in );
457 
464 char *zigbee_error_handler ( uint8_t error_code );
465 
474 void zigbee_set_pin_rst ( zigbee_t *ctx, uint8_t status );
475 
484 void zigbee_set_pin_fw ( zigbee_t *ctx, uint8_t status );
485 
493 uint8_t zigbee_get_pin_int ( zigbee_t *ctx );
494 
502 void zigbee_restart ( zigbee_t *ctx );
503 
504 #ifdef __cplusplus
505 }
506 #endif
507 #endif // ZIGBEE_H
508  // zigbee
510 
511 // ------------------------------------------------------------------------ END
zigbee_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: zigbee.h:342
zigbee_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: zigbee.h:343
zigbee_resp
uint8_t zigbee_resp(zigbee_t *ctx, char *data_in)
Function checking driver buffer string.
ZIGBEE_OK
@ ZIGBEE_OK
Definition: zigbee.h:359
zigbee_send_at
void zigbee_send_at(zigbee_t *ctx, uint8_t *at_buf, uint8_t *suffix_buf)
Function merges two string and sends it to device.
zigbee_set_pin_fw
void zigbee_set_pin_fw(zigbee_t *ctx, uint8_t status)
Function setting FW pin status.
zigbee_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: zigbee.h:341
zigbee_error_type::error_desc
uint8_t * error_desc
Definition: zigbee.h:350
zigbee_cfg_t::fw
pin_name_t fw
Definition: zigbee.h:334
ZIGBEE_ERROR
@ ZIGBEE_ERROR
Definition: zigbee.h:360
zigbee_send_cmd
void zigbee_send_cmd(zigbee_t *ctx, uint8_t *cmd_buf)
Function sends string to device.
zigbee_return_value_t
zigbee_return_value_t
ZigBee Click return value data.
Definition: zigbee.h:358
zigbee_cfg_t::tx_pin
pin_name_t tx_pin
Definition: zigbee.h:331
ZIGBEE_DEV_BUFFER_MAX
#define ZIGBEE_DEV_BUFFER_MAX
ZigBee driver buffer size.
Definition: zigbee.h:177
zigbee_error_handler
char * zigbee_error_handler(uint8_t error_code)
Function for converting error code to error message.
zigbee_init
err_t zigbee_init(zigbee_t *ctx, zigbee_cfg_t *cfg)
ZigBee initialization function.
zigbee_cfg_t
ZigBee Click configuration object.
Definition: zigbee.h:328
zigbee_get_pin_int
uint8_t zigbee_get_pin_int(zigbee_t *ctx)
Function getting INT pin status.
zigbee_cfg_t::rx_pin
pin_name_t rx_pin
Definition: zigbee.h:330
zigbee_generic_write
err_t zigbee_generic_write(zigbee_t *ctx, char *data_buf, uint16_t len)
ZigBee data writing function.
zigbee_cfg_t::baud_rate
uint32_t baud_rate
Definition: zigbee.h:339
zigbee_t::uart
uart_t uart
Definition: zigbee.h:315
zigbee_error_type
Definition: zigbee.h:348
zigbee_cfg_t::uart_blocking
bool uart_blocking
Definition: zigbee.h:340
zigbee_t::int_pin
digital_in_t int_pin
Definition: zigbee.h:312
zigbee_restart
void zigbee_restart(zigbee_t *ctx)
Function for reseting device.
zigbee_error_type::error_code
uint8_t error_code
Definition: zigbee.h:349
zigbee_cfg_setup
void zigbee_cfg_setup(zigbee_cfg_t *cfg)
ZigBee configuration object setup function.
zigbee_t::rst
digital_out_t rst
Definition: zigbee.h:309
zigbee_t
ZigBee Click context object.
Definition: zigbee.h:306
zigbee_cfg_t::int_pin
pin_name_t int_pin
Definition: zigbee.h:336
zigbee_cfg_t::rst
pin_name_t rst
Definition: zigbee.h:335
zigbee_generic_read
err_t zigbee_generic_read(zigbee_t *ctx, char *data_buf, uint16_t max_len)
ZigBee data reading function.
zigbee_t::fw
digital_out_t fw
Definition: zigbee.h:308
zigbee_set_pin_rst
void zigbee_set_pin_rst(zigbee_t *ctx, uint8_t status)
Function setting RST pin status.