Z-Wave Protocol Controller Reference
zwave_node_id_definitions.h
Go to the documentation of this file.
1/******************************************************************************
2 * # License
3 * <b>Copyright 2021 Silicon Laboratories Inc. www.silabs.com</b>
4 ******************************************************************************
5 * The licensor of this software is Silicon Laboratories Inc. Your use of this
6 * software is governed by the terms of Silicon Labs Master Software License
7 * Agreement (MSLA) available at
8 * www.silabs.com/about-us/legal/master-software-license-agreement. This
9 * software is distributed to you in Source Code format and is governed by the
10 * sections of the MSLA applicable to Source Code.
11 *
12 *****************************************************************************/
13
29#ifndef ZWAVE_NODE_ID_DEFINITIONS_H
30#define ZWAVE_NODE_ID_DEFINITIONS_H
31
32#include <stdint.h>
33
35#define ZW_LR_MAX_NODE_ID 4000
36
38#define ZW_LR_MIN_NODE_ID 256
39
41#define ZW_MIN_NODE_ID 1
42
43#define ZW_MAX_NODES 232
44
46#define ZWAVE_BROADCAST_NODE_ID 255
47
49#define ZWAVE_LR_BROADCAST_NODE_ID 0xFFF
50
53#define ZWAVE_MAX_FRAME_SIZE 158
54
55//TODO: find ITU spec reference.
56#define ZWAVE_MAX_MAC_PAYLOAD_SIZE 46
57
61#define ZWAVE_MAX_NIF_SIZE (ZWAVE_MAX_FRAME_SIZE - 2)
62
64#define ZW_LR_MAX_NODEMASK_LENGTH ((ZW_LR_MAX_NODE_ID / 8) + 1)
65#define ZW_MAX_NODEMASK_LENGTH (ZW_MAX_NODES / 8)
66#define ZW_LR_ONLY_MAX_NODEMASK_LENGTH \
67 ((ZW_LR_MAX_NODE_ID - ZW_LR_MIN_NODE_ID) / 8)
68
69#define ZW_LR_NODEMASK_OFFSET ((ZW_LR_MIN_NODE_ID) / 8)
70#define NODEMASK_GET_LR(nodemask) ((nodemask) + ZW_LR_NODEMASK_OFFSET)
71
72// Maximum Z-Wave Endpoint ID
73#define ZWAVE_MAXIMUM_ENDPOINT_ID 127
74
75// Tell if a NodeID is a broadcast NodeID.
76#define IS_BROADCAST_NODE_ID(node_id) \
77 ((node_id == ZWAVE_BROADCAST_NODE_ID) \
78 || (node_id == ZWAVE_LR_BROADCAST_NODE_ID))
79
82
84typedef uint16_t zwave_node_id_t;
85
87typedef uint32_t zwave_home_id_t;
88
89// Verifies if the NodeID is in the Z-Wave NodeID range
90#define IS_ZWAVE_NODE_ID(node_id) \
91 (((node_id) > 0) && ((node_id) <= ZW_MAX_NODES))
92
93// Verifies if the NodeID is in the extended NodeID range
94#define IS_ZWAVE_EXTENDED_NODE_ID(node_id) \
95 (((node_id) >= ZW_LR_MIN_NODE_ID) && ((node_id) <= ZW_LR_MAX_NODE_ID))
96
97// Verifies if a NodeID is valid.
98#define IS_ZWAVE_NODE_ID_VALID(node_id) \
99 ((IS_ZWAVE_NODE_ID(node_id)) || (IS_ZWAVE_EXTENDED_NODE_ID(node_id)))
100
102#define ZW_IS_NODE_IN_MASK(node_id, nodemask) \
103 (!IS_ZWAVE_NODE_ID_VALID(node_id) \
104 ? 0 \
105 : (IS_ZWAVE_NODE_ID(node_id) \
106 ? ((nodemask[(node_id - 1) >> 3] >> ((node_id - 1) & 7)) & 0x1) \
107 : ((nodemask[(node_id) >> 3] >> ((node_id)&7)) & 0x1)))
108
109#define ZW_ADD_NODE_TO_MASK(node_id, nodemask) \
110 (!IS_ZWAVE_NODE_ID_VALID(node_id) \
111 ? 0 \
112 : (IS_ZWAVE_NODE_ID(node_id) \
113 ? ((nodemask[(node_id - 1) / 8]) |= (1 << ((node_id - 1) % 8))) \
114 : ((nodemask[(node_id) / 8]) |= (1 << ((node_id) % 8)))))
115
116#define ZW_REMOVE_NODE_FROM_MASK(node_id, nodemask) \
117 (!IS_ZWAVE_NODE_ID_VALID(node_id) \
118 ? 0 \
119 : (IS_ZWAVE_NODE_ID(node_id) \
120 ? ((nodemask[(node_id - 1) / 8]) \
121 &= (0xFF - (1 << ((node_id - 1) % 8)))) \
122 : ((nodemask[(node_id) / 8]) &= (0xFF - (1 << ((node_id) % 8))))))
123
125typedef uint8_t zwave_endpoint_id_t;
126
128typedef struct {
129 uint8_t
131 uint8_t generic;
132 uint8_t specific;
134
135// Node Information Frame masks for the listening_protocol byte
136#define ZWAVE_NODE_INFO_LISTENING_PROTOCOL_LISTENING_MASK 0x80
137#define ZWAVE_NODE_INFO_LISTENING_PROTOCOL_ROUTING_MASK 0x40
138#define ZWAVE_NODE_INFO_LISTENING_PROTOCOL_MAX_SPEED_MASK 0x38
139#define ZWAVE_NODE_INFO_LISTENING_PROTOCOL_PROTOCOL_VERSION_MASK 0x07
140
141// Node Information Frame masks for the optional_protocol byte
142#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_OPTIONAL_FUNCTIONALITY_MASK 0x80
143#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_SENSOR_1000MS_MASK 0x40
144#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_SENSOR_250MS_MASK 0x20
145#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_BEAM_CAPABILITY_MASK 0x10
146#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_END_NODE_MASK 0x08
147#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_SPECIFIC_DEVICE_MASK 0x04
148#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_CONTROLLER_MASK 0x02
149#define ZWAVE_NODE_INFO_OPTIONAL_PROTOCOL_SECURITY_MASK 0x01
150
151#endif //ZWAVE_NODE_ID_DEFINITIONS_H
uint8_t zwave_endpoint_id_t
Z-Wave Endpoint ID type.
Definition: zwave_node_id_definitions.h:125
uint32_t zwave_home_id_t
Z-Wave HomeID type.
Definition: zwave_node_id_definitions.h:87
#define ZW_LR_MAX_NODEMASK_LENGTH
Length of nodemask to hold max number of nodes in a Z-Wave system.
Definition: zwave_node_id_definitions.h:64
uint8_t zwave_nodemask_t[ZW_LR_MAX_NODEMASK_LENGTH]
Node mask.
Definition: zwave_node_id_definitions.h:81
uint16_t zwave_node_id_t
Z-Wave NodeID type.
Definition: zwave_node_id_definitions.h:84
Node type structure, used in Node Information Frames.
Definition: zwave_node_id_definitions.h:128
uint8_t specific
Specific Device Type.
Definition: zwave_node_id_definitions.h:132
uint8_t basic
Basic Device Type, is it a Controller, Controller_Static, End_Node or a End_Node_Routing Device Type.
Definition: zwave_node_id_definitions.h:130