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
32extern "C"{
33#endif
34
35#include "drv_digital_out.h"
36#include "drv_digital_in.h"
37#include "drv_uart.h"
38
59#define ZIGBEE_CMD_AT "AT"
60#define ZIGBEE_CMD_ATI "ATI"
61#define ZIGBEE_CMD_ATZ "ATZ"
62#define ZIGBEE_CMD_AT_REMZ "AT+REMZ"
63#define ZIGBEE_CMD_AT_F "AT&F"
64#define ZIGBEE_CMD_AT_BLOAD "AT+BLOAD"
65#define ZIGBEE_CMD_AT_PASSTHROUGH "AT+PASSTHROUGH"
66#define ZIGBEE_CMD_AT_RECOVER "AT+RECOVER"
67#define ZIGBEE_CMD_ATS "ATS"
68#define ZIGBEE_CMD_ATREMS "ATREMS"
69#define ZIGBEE_CMD_ATSALL "ATSALL"
70#define ZIGBEE_CMD_AT_TOKDUMP "AT+TOKDUMP"
71
76#define ZIGBEE_CMD_AT_ESCAN "AT+ESCAN"
77#define ZIGBEE_CMD_AT_EN "AT+EN"
78#define ZIGBEE_CMD_AT_PANSCAN "AT+PANSCAN"
79#define ZIGBEE_CMD_AT_JN "AT+JN"
80#define ZIGBEE_CMD_AT_JPAN "AT+JPAN"
81#define ZIGBEE_CMD_AT_SJN "AT+SJN"
82#define ZIGBEE_CMD_AT_DASSL "AT+DASSL"
83#define ZIGBEE_CMD_AT_DASSR "AT+DASSR"
84#define ZIGBEE_CMD_AT_N "AT+N"
85#define ZIGBEE_CMD_AT_NTABLE "AT+NTABLE"
86#define ZIGBEE_CMD_AT_RTABLE "AT+RTABLE"
87#define ZIGBEE_CMD_AT_IDREQ "AT+IDREQ"
88#define ZIGBEE_CMD_AT_EUIREQ "AT+EUIREQ"
89#define ZIGBEE_CMD_AT_NODEDESC "AT+NODEDESC"
90#define ZIGBEE_CMD_AT_POWERDESC "AT+POWERDESC"
91#define ZIGBEE_CMD_AT_ACTEPDESC "AT+ACTEPDESC"
92#define ZIGBEE_CMD_AT_SIMPLEDESC "AT+SIMPLEDESC"
93#define ZIGBEE_CMD_AT_MATCHREQ "AT+MATCHREQ"
94#define ZIGBEE_CMD_AT_ANNCE "AT+ANNCE"
95#define ZIGBEE_CMD_AT_SR "AT+SR"
96#define ZIGBEE_CMD_AT_FNDSR "AT+FNDSR"
97#define ZIGBEE_CMD_AT_POLL "AT+POLL"
98#define ZIGBEE_CMD_AT_REJOIN "AT+REJOIN"
99#define ZIGBEE_CMD_AT_SN "AT+SN"
100#define ZIGBEE_CMD_AT_KEYUPD "AT+KEYUPD"
101#define ZIGBEE_CMD_AT_BECOMENTC "AT+BECOMENTC"
102#define ZIGBEE_CMD_AT_BECOMENM "AT+BECOMENM"
103#define ZIGBEE_CMD_AT_CCHANGE "AT+CCHANGE"
104
109#define ZIGBEE_CMD_AT_ATABLE "AT+ATABLE"
110#define ZIGBEE_CMD_AT_ASET "AT+ASET"
111#define ZIGBEE_CMD_AT_MTABLE "AT+MTABLE"
112#define ZIGBEE_CMD_AT_MSET "AT+MSET"
113#define ZIGBEE_CMD_AT_BCAST "AT+BCAST"
114#define ZIGBEE_CMD_AT_BCASTB "AT+BCASTB"
115#define ZIGBEE_CMD_AT_UCAST "AT+UCAST"
116#define ZIGBEE_CMD_AT_UCASTB "AT+UCASTB"
117#define ZIGBEE_CMD_AT_SCAST "AT+SCAST"
118#define ZIGBEE_CMD_AT_SCASTB "AT+SCASTB"
119#define ZIGBEE_CMD_AT_SSINK "AT+SSINK"
120#define ZIGBEE_CMD_AT_MCAST "AT+MCAST"
121#define ZIGBEE_CMD_AT_MCASTB "AT+MCASTB"
122#define ZIGBEE_CMD_AT_DMODE "AT+DMODE"
123#define ZIGBEE_CMD_AT_PPP "+++"
124#define ZIGBEE_CMD_AT_IDENT "AT+IDENT"
125#define ZIGBEE_CMD_AT_SENDUCAST "AT+SENDUCAST"
126#define ZIGBEE_CMD_AT_SENDUCASTB "AT+SENDUCASTB"
127#define ZIGBEE_CMD_AT_SNEDMCAST "AT+SNEDMCAST"
128#define ZIGBEE_CMD_AT_SENDMCASTB "AT+SENDMCASTB"
129#define ZIGBEE_CMD_AT_INTERPAN "AT+INTERPAN"
130#define ZIGBEE_CMD_AT_RDATAB "AT+RDATAB"
131
136#define ZIGBEE_CMD_AT_LBTABLE "AT+LBTABLE"
137#define ZIGBEE_CMD_AT_BSET "AT+BSET"
138#define ZIGBEE_CMD_AT_BCLR "AT+BCLR"
139#define ZIGBEE_CMD_AT_BTABLE "AT+BTABLE"
140#define ZIGBEE_CMD_AT_BIND "AT+BIND"
141#define ZIGBEE_CMD_AT_UNBIND "AT+UNBIND"
142#define ZIGBEE_CMD_AT_EDBIND "AT+EDBIND"
143
148#define ZIGBEE_CMD_AT_SETTIME "AT+SETTIME"
149#define ZIGBEE_CMD_AT_GETTIME "AT+GETTIME"
150#define ZIGBEE_CMD_AT_SYNCTIME "AT+SYNCTIME"
151
156#define ZIGBEE_SUFFIX_NULL ""
157
163#define ZIGBEE_DEV_BUFFER_MAX 80
164 // zigbee_cmd
166
181#define ZIGBEE_ERROR_OK 0X00
182#define ZIGBEE_ERROR_CANT_POLL_TIMEOUT 0X01
183#define ZIGBEE_ERROR_UNKNOWN_CMD 0X02
184#define ZIGBEE_ERROR_INVALID_SREG 0X04
185#define ZIGBEE_ERROR_INVALID_PARAM 0X05
186#define ZIGBEE_ERROR_RECIPIENT 0X06
187#define ZIGBEE_ERROR_MSG_NACK 0X07
188#define ZIGBEE_ERROR_NSINK 0X08
189#define ZIGBEE_ERROR_ADR_TABLE_IN_USE 0X09
190#define ZIGBEE_ERROR_MSG_NOT_SENT 0X0A
191#define ZIGBEE_ERROR_LOCAL_NODE_NSINK 0X0B
192#define ZIGBEE_ERROR_TOO_MANY_CHAR 0X0C
193#define ZIGBEE_ERROR_BG_SCAN_IN_PROGRESS 0X0E
194#define ZIGBEE_ERROR_FATAL_INIT_NET 0X0F
195#define ZIGBEE_ERROR_BOOTLOADING 0X10
196#define ZIGBEE_ERROR_FATAL_INIT_STACK 0X12
197#define ZIGBEE_ERROR_NODE_OUT_OF_BUFFER 0X18
198#define ZIGBEE_ERROR_READ_ONLY_REG 0X19
199#define ZIGBEE_ERROR_DATA_MODE_REFUSED_RN 0X1A
200#define ZIGBEE_ERROR_CONN_LOST_DATA_MODE 0X1B
201#define ZIGBEE_ERROR_RN_IN_DATA_MODE 0X1C
202#define ZIGBEE_ERROR_INVALID_PASWD 0X20
203#define ZIGBEE_ERROR_CANT_FORM_NET 0X25
204#define ZIGBEE_ERROR_NO_NET_FOUND 0X27
205#define ZIGBEE_ERROR_NOD_PART_OF_PAN 0X28
206#define ZIGBEE_ERROR_LEAVING_PAN 0X2C
207#define ZIGBEE_ERROR_SCANNING_PAN 0X2D
208#define ZIGBEE_ERROR_NO_RESP_BOOTLOADER 0X33
209#define ZIGBEE_ERROR_TARGET_NO_RESP 0X34
210#define ZIGBEE_ERROR_TIMEOUT_XCASTB 0X35
211#define ZIGBEE_ERROR_MAC_TX_QUEUE_FULL 0X39
212#define ZIGBEE_ERROR_INVALID_BIND_INDEX 0X6C
213#define ZIGBEE_ERROR_INVALID_OP 0X70
214#define ZIGBEE_ERROR_MORE_THAN_10_UNI_MSG 0X72
215#define ZIGBEE_ERROR_MSG_TOO_LONG 0X74
216#define ZIGBEE_ERROR_ZDP_INVALID_REQ_TYPE 0X80
217#define ZIGBEE_ERROR_ZDP_DEV_NOT_FOUND 0X81
218#define ZIGBEE_ERROR_ZDP_INVALID_ENDPONT 0X82
219#define ZIGBEE_ERROR_ZDP_NOT_ACTIVE 0X83
220#define ZIGBEE_ERROR_ZDP_NOT_SUPPORTED 0X84
221#define ZIGBEE_ERROR_ZDP_TIMEOUT 0X85
222#define ZIGBEE_ERROR_ZDP_NO_MATCH 0X86
223#define ZIGBEE_ERROR_ZDP_TABLE_FULL 0X87
224#define ZIGBEE_ERROR_ZDP_NO_ENTRY 0X88
225#define ZIGBEE_ERROR_ZDP_NO_DESC 0X89
226#define ZIGBEE_ERROR_OP_IF_CONN_TO_PAN 0X91
227#define ZIGBEE_ERROR_NODE_NOT_IN_NET 0X93
228#define ZIGBEE_ERROR_CANNT_JOIN_NET 0X94
229#define ZIGBEE_ERROR_MOBILE_END_DEV_MOVE 0X96
230#define ZIGBEE_ERROR_CANT_JOIN_2006_NET 0X98
231#define ZIGBEE_ERROR_8_MSG_IN_8_SEC_MAX 0XA1
232#define ZIGBEE_ERROR_NO_BEACON 0XAB
233#define ZIGBEE_ERROR_NET_KEY_SENT 0XAC
234#define ZIGBEE_ERROR_NO_RECEIVE_NET_KEY 0XAD
235#define ZIGBEE_ERROR_NO_LINK_KEY_REQ 0XAE
236#define ZIGBEE_ERROR_PRECONFIG_KEY_REQ 0XAF
237#define ZIGBEE_ERROR_NWK_ALREADY_PRESENT 0XC5
238#define ZIGBEE_ERROR_NWK_TABLE_FULL 0XC7
239#define ZIGBEE_ERROR_NWK_UNKNOWN_DEV 0XC8
240
241#define ZIGBEE_RESP_ERROR "ERROR"
242#define ZIGBEE_RESP_OK "OK"
243#define ZIGBEE_ERROR_INC 6
244
245#define ZIGBEE_ERROR_CODE_MAX 59
246#define ZIGBEE_ERROR_CODE 0
247#define ZIGBEE_ERROR_DESC 1
248
253#define ZIGBEE_DEV_HOST 1
254
259#define ZIGBEE_DEV_USER 2
260
261#define ZIGBEE_APP_TASK 11
262#define ZIGBEE_APP_INIT 12
263
268#define ZIGBEE_OP_WAIT 0x00
269#define ZIGBEE_OP_OK 0xAA
270#define ZIGBEE_OP_ERROR 0xBB
271#define ZIGBEE_OP_NL 0xCC
272
277#define ZIGBEE_MAP_MIKROBUS( cfg, mikrobus ) \
278 cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
279 cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
280 cfg.fw = MIKROBUS( mikrobus, MIKROBUS_AN ); \
281 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
282 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
283 // zigbee_map // zigbee
286
291typedef struct
292{
293 // Output pins
294 digital_out_t fw;
295 digital_out_t rst;
297 // Input pins
298 digital_in_t int_pin;
300 // Modules
301 uart_t uart;
303 // Buffers
304 char uart_rx_buffer[ ZIGBEE_DEV_BUFFER_MAX ];
305 char uart_tx_buffer[ ZIGBEE_DEV_BUFFER_MAX ];
307} zigbee_t;
308
313typedef struct
314{
315 // Communication gpio pins
316 pin_name_t rx_pin;
317 pin_name_t tx_pin;
319 // Additional gpio pins
320 pin_name_t fw;
321 pin_name_t rst;
322 pin_name_t int_pin;
324 // Static variable
325 uint32_t baud_rate;
327 uart_data_bits_t data_bit;
328 uart_parity_t parity_bit;
329 uart_stop_bits_t stop_bit;
332
333typedef struct
334{
335 uint8_t error_code;
336 uint8_t *error_desc;
338
343typedef enum
344{
346 ZIGBEE_ERROR = -1
347
349
366
380err_t zigbee_init ( zigbee_t *ctx, zigbee_cfg_t *cfg );
381
394err_t zigbee_generic_write ( zigbee_t *ctx, char *data_buf, uint16_t len );
395
408err_t zigbee_generic_read ( zigbee_t *ctx, char *data_buf, uint16_t max_len );
409
419void zigbee_send_at ( zigbee_t *ctx, uint8_t *at_buf, uint8_t *suffix_buf );
420
429void zigbee_send_cmd ( zigbee_t *ctx, uint8_t *cmd_buf );
430
442uint8_t zigbee_resp ( zigbee_t *ctx, char *data_in );
443
452char *zigbee_error_handler ( zigbee_t *ctx, uint8_t error_code );
453
462void zigbee_set_pin_rst ( zigbee_t *ctx, uint8_t status );
463
472void zigbee_set_pin_fw ( zigbee_t *ctx, uint8_t status );
473
482
491
492#ifdef __cplusplus
493}
494#endif
495#endif // ZIGBEE_H
496 // zigbee
498
499// ------------------------------------------------------------------------ END
#define ZIGBEE_DEV_BUFFER_MAX
ZigBee driver buffer size.
Definition: zigbee.h:163
uint8_t zigbee_resp(zigbee_t *ctx, char *data_in)
Function checking driver buffer string.
void zigbee_set_pin_fw(zigbee_t *ctx, uint8_t status)
Function setting FW pin status.
void zigbee_restart(zigbee_t *ctx)
Function for reseting device.
err_t zigbee_init(zigbee_t *ctx, zigbee_cfg_t *cfg)
ZigBee initialization function.
void zigbee_set_pin_rst(zigbee_t *ctx, uint8_t status)
Function setting RST pin status.
err_t zigbee_generic_write(zigbee_t *ctx, char *data_buf, uint16_t len)
ZigBee data writing function.
void zigbee_send_cmd(zigbee_t *ctx, uint8_t *cmd_buf)
Function sends string to device.
uint8_t zigbee_get_pin_int(zigbee_t *ctx)
Function getting INT pin status.
void zigbee_cfg_setup(zigbee_cfg_t *cfg)
ZigBee configuration object setup function.
void zigbee_send_at(zigbee_t *ctx, uint8_t *at_buf, uint8_t *suffix_buf)
Function merges two string and sends it to device.
char * zigbee_error_handler(zigbee_t *ctx, uint8_t error_code)
Function for converting error code to error message.
err_t zigbee_generic_read(zigbee_t *ctx, char *data_buf, uint16_t max_len)
ZigBee data reading function.
ZigBee Click configuration object.
Definition: zigbee.h:314
pin_name_t fw
Definition: zigbee.h:320
uint32_t baud_rate
Definition: zigbee.h:325
bool uart_blocking
Definition: zigbee.h:326
uart_data_bits_t data_bit
Definition: zigbee.h:327
pin_name_t tx_pin
Definition: zigbee.h:317
pin_name_t rx_pin
Definition: zigbee.h:316
uart_stop_bits_t stop_bit
Definition: zigbee.h:329
pin_name_t int_pin
Definition: zigbee.h:322
uart_parity_t parity_bit
Definition: zigbee.h:328
pin_name_t rst
Definition: zigbee.h:321
Definition: zigbee.h:334
uint8_t * error_desc
Definition: zigbee.h:336
uint8_t error_code
Definition: zigbee.h:335
ZigBee Click context object.
Definition: zigbee.h:292
digital_out_t fw
Definition: zigbee.h:294
uart_t uart
Definition: zigbee.h:301
digital_in_t int_pin
Definition: zigbee.h:298
digital_out_t rst
Definition: zigbee.h:295
zigbee_return_value_t
ZigBee Click return value data.
Definition: zigbee.h:344
@ ZIGBEE_ERROR
Definition: zigbee.h:346
@ ZIGBEE_OK
Definition: zigbee.h:345