]> git.basschouten.com Git - openhab-addons.git/blob
0af122c70f868ad150d3c7554cf0ccd5596e8c30
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.caddx.internal;
14
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20
21 /**
22  * All the panel message types
23  *
24  * @author Georgios Moutsos - Initial contribution
25  */
26 @NonNullByDefault
27 public enum CaddxMessageType {
28
29     INTERFACE_CONFIGURATION_MESSAGE(0x01, null, 12, "Interface Configuration Message",
30             "This message will contain the firmware version number and other information about features currently enabled. It will be sent each time the unit is reset or programmed.",
31             CaddxDirection.IN, CaddxSource.PANEL,
32
33             // Properties
34             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
35             new CaddxProperty("panel_firmware_version", 2, 4, 0, 0, CaddxPropertyType.STRING, "Firmware version",
36                     false),
37
38             // Byte 6 Supported transition message flags (1)
39             new CaddxProperty("panel_interface_configuration_message", 6, 1, 1, 1, CaddxPropertyType.BIT,
40                     "Interface Configuration Message", false),
41             new CaddxProperty("panel_zone_status_message", 6, 1, 4, 1, CaddxPropertyType.BIT, "Zone Status Message",
42                     false),
43             new CaddxProperty("panel_zones_snapshot_message", 6, 1, 5, 1, CaddxPropertyType.BIT,
44                     "Zones Snapshot Message", false),
45             new CaddxProperty("panel_partition_status_message", 6, 1, 6, 1, CaddxPropertyType.BIT,
46                     "Partition Status Message", false),
47             new CaddxProperty("panel_partitions_snapshot_message", 6, 1, 7, 1, CaddxPropertyType.BIT,
48                     "Partitions Snapshot Message", false),
49
50             // Byte 7 Supported transition message flags (2)
51             new CaddxProperty("panel_system_status_message", 7, 1, 0, 1, CaddxPropertyType.BIT, "System Status Message",
52                     false),
53             new CaddxProperty("panel_x10_message_received", 7, 1, 1, 1, CaddxPropertyType.BIT, "X-10 Message Received",
54                     false),
55             new CaddxProperty("panel_log_event_message", 7, 1, 2, 1, CaddxPropertyType.BIT, "Log Event Message", false),
56             new CaddxProperty("panel_keypad_message_received", 7, 1, 3, 1, CaddxPropertyType.BIT,
57                     "Keypad Message Received", false),
58
59             // Byte 8 Supported request / command flags (1)
60             new CaddxProperty("panel_interface_configuration_request", 8, 1, 1, 1, CaddxPropertyType.BIT,
61                     "Interface Configuration Request", false),
62             new CaddxProperty("panel_zone_name_request", 8, 1, 3, 1, CaddxPropertyType.BIT, "Zone Name Request", false),
63             new CaddxProperty("panel_zone_status_request", 8, 1, 4, 1, CaddxPropertyType.BIT, "Zone Status Request",
64                     false),
65             new CaddxProperty("panel_zones_snapshot_request", 8, 1, 5, 1, CaddxPropertyType.BIT,
66                     "Zones Snapshot Request", false),
67             new CaddxProperty("panel_partition_status_request", 8, 1, 6, 1, CaddxPropertyType.BIT,
68                     "Partition Status Request", false),
69             new CaddxProperty("panel_partitions_snapshot_request", 8, 1, 7, 1, CaddxPropertyType.BIT,
70                     "Partitions Snapshot Request", false),
71
72             // Byte 9 Supported request / command flags (2)
73             new CaddxProperty("panel_system_status_request", 9, 1, 0, 1, CaddxPropertyType.BIT, "System Status Request",
74                     false),
75             new CaddxProperty("panel_send_x10_message", 9, 1, 1, 1, CaddxPropertyType.BIT, "Send X-10 Message", false),
76             new CaddxProperty("panel_log_event_request", 9, 1, 2, 1, CaddxPropertyType.BIT, "Log Event Request", false),
77             new CaddxProperty("panel_send_keypad_text_message", 9, 1, 3, 1, CaddxPropertyType.BIT,
78                     "Send Keypad Text Message", false),
79             new CaddxProperty("panel_keypad_terminal_mode_request", 9, 1, 4, 1, CaddxPropertyType.BIT,
80                     "Keypad Terminal Mode Request", false),
81
82             // Byte 10 Supported request / command flags (3)
83             new CaddxProperty("panel_program_data_request", 10, 1, 0, 1, CaddxPropertyType.BIT, "Program Data Request",
84                     false),
85             new CaddxProperty("panel_program_data_command", 10, 1, 1, 1, CaddxPropertyType.BIT, "Program Data Command",
86                     false),
87             new CaddxProperty("panel_user_information_request_with_pin", 10, 1, 2, 1, CaddxPropertyType.BIT,
88                     "User Information Request with PIN", false),
89             new CaddxProperty("panel_user_information_request_without_pin", 10, 1, 3, 1, CaddxPropertyType.BIT,
90                     "User Information Request without PIN", false),
91             new CaddxProperty("panel_set_user_code_command_with_pin", 10, 1, 4, 1, CaddxPropertyType.BIT,
92                     "Set User Code Command with PIN", false),
93             new CaddxProperty("panel_set_user_code_command_without_pin", 10, 1, 5, 1, CaddxPropertyType.BIT,
94                     "Set User Code Command without PIN", false),
95             new CaddxProperty("panel_set_user_authorization_command_with_pin", 10, 1, 6, 1, CaddxPropertyType.BIT,
96                     "Set User Authorization Command with PIN", false),
97             new CaddxProperty("panel_set_user_authorization_command_without_pin", 10, 1, 7, 1, CaddxPropertyType.BIT,
98                     "Set User Authorization Command without PIN", false),
99
100             // Byte 11 Supported request / command flags (4)
101             new CaddxProperty("panel_store_communication_event_command", 11, 1, 2, 1, CaddxPropertyType.BIT,
102                     "Store Communication Event Command", false),
103             new CaddxProperty("panel_set_clock_calendar_command", 11, 1, 3, 1, CaddxPropertyType.BIT,
104                     "Set Clock / Calendar Command", false),
105             new CaddxProperty("panel_primary_keypad_function_with_pin", 11, 1, 4, 1, CaddxPropertyType.BIT,
106                     "Primary Keypad Function with PIN", false),
107             new CaddxProperty("panel_primary_keypad_function_without_pin", 11, 1, 5, 1, CaddxPropertyType.BIT,
108                     "Primary Keypad Function without PIN", false),
109             new CaddxProperty("panel_secondary_keypad_function", 11, 1, 6, 1, CaddxPropertyType.BIT,
110                     "Secondary Keypad Function", false),
111             new CaddxProperty("panel_zone_bypass_toggle", 11, 1, 7, 1, CaddxPropertyType.BIT, "Zone Bypass Toggle",
112                     false)),
113
114     ZONE_NAME_MESSAGE(0x03, null, 18, "Zone Name Message",
115             "This message will contain the 16-character name for the zone number that was requested (via Zone Name Request (23h)).",
116             CaddxDirection.IN, CaddxSource.ZONE,
117
118             // Properties
119             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
120             new CaddxProperty("zone_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number", false),
121             new CaddxProperty("zone_name", 3, 16, 0, 0, CaddxPropertyType.STRING, "Zone name", false)),
122
123     ZONE_STATUS_MESSAGE(0x04, null, 8, "Zone Status Message",
124             "This message will contain all information relevant to a zone in the system.", CaddxDirection.IN,
125             CaddxSource.ZONE,
126
127             // Properties
128             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
129
130             new CaddxProperty("zone_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number", false),
131
132             // Byte 3 Partition mask
133             new CaddxProperty("zone_partition1", 3, 1, 0, 1, CaddxPropertyType.BIT, "Partition 1 enable", false),
134             new CaddxProperty("zone_partition2", 3, 1, 1, 1, CaddxPropertyType.BIT, "Partition 2 enable", false),
135             new CaddxProperty("zone_partition3", 3, 1, 2, 1, CaddxPropertyType.BIT, "Partition 3 enable", false),
136             new CaddxProperty("zone_partition4", 3, 1, 3, 1, CaddxPropertyType.BIT, "Partition 4 enable", false),
137             new CaddxProperty("zone_partition5", 3, 1, 4, 1, CaddxPropertyType.BIT, "Partition 5 enable", false),
138             new CaddxProperty("zone_partition6", 3, 1, 5, 1, CaddxPropertyType.BIT, "Partition 6 enable", false),
139             new CaddxProperty("zone_partition7", 3, 1, 6, 1, CaddxPropertyType.BIT, "Partition 7 enable", false),
140             new CaddxProperty("zone_partition8", 3, 1, 7, 1, CaddxPropertyType.BIT, "Partition 8 enable", false),
141
142             // Byte 4 Zone type flags (1)
143             new CaddxProperty("zone_fire", 4, 1, 0, 1, CaddxPropertyType.BIT, "Fire", false),
144             new CaddxProperty("zone_24hour", 4, 1, 1, 1, CaddxPropertyType.BIT, "24 Hour", false),
145             new CaddxProperty("zone_key_switch", 4, 1, 2, 1, CaddxPropertyType.BIT, "Key-switch", false),
146             new CaddxProperty("zone_follower", 4, 1, 3, 1, CaddxPropertyType.BIT, "Follower", false),
147             new CaddxProperty("zone_entry_exit_delay_1", 4, 1, 4, 1, CaddxPropertyType.BIT, "Entry / exit delay 1",
148                     false),
149             new CaddxProperty("zone_entry_exit_delay_2", 4, 1, 5, 1, CaddxPropertyType.BIT, "Entry / exit delay 2",
150                     false),
151             new CaddxProperty("zone_interior", 4, 1, 6, 1, CaddxPropertyType.BIT, "Interior", false),
152             new CaddxProperty("zone_local_only", 4, 1, 7, 1, CaddxPropertyType.BIT, "Local only", false),
153
154             // Byte 5 Zone type flags (2)
155             new CaddxProperty("zone_keypad_sounder", 5, 1, 0, 1, CaddxPropertyType.BIT, "Keypad sounder", false),
156             new CaddxProperty("zone_yelping_siren", 5, 1, 1, 1, CaddxPropertyType.BIT, "Yelping siren", false),
157             new CaddxProperty("zone_steady_siren", 5, 1, 2, 1, CaddxPropertyType.BIT, "Steady siren", false),
158             new CaddxProperty("zone_chime", 5, 1, 3, 1, CaddxPropertyType.BIT, "Chime", false),
159             new CaddxProperty("zone_bypassable", 5, 1, 4, 1, CaddxPropertyType.BIT, "Bypassable", false),
160             new CaddxProperty("zone_group_bypassable", 5, 1, 5, 1, CaddxPropertyType.BIT, "Group bypassable", false),
161             new CaddxProperty("zone_force_armable", 5, 1, 6, 1, CaddxPropertyType.BIT, "Force armable", false),
162             new CaddxProperty("zone_entry_guard", 5, 1, 7, 1, CaddxPropertyType.BIT, "Entry guard", false),
163
164             // Byte 6 Zone type flags (3)
165             new CaddxProperty("zone_fast_loop_response", 6, 1, 0, 1, CaddxPropertyType.BIT, "Fast loop response",
166                     false),
167             new CaddxProperty("zone_double_eol_tamper", 6, 1, 1, 1, CaddxPropertyType.BIT, "Double EOL tamper", false),
168             new CaddxProperty("zone_type_trouble", 6, 1, 2, 1, CaddxPropertyType.BIT, "Trouble", false),
169             new CaddxProperty("zone_cross_zone", 6, 1, 3, 1, CaddxPropertyType.BIT, "Cross zone", false),
170             new CaddxProperty("zone_dialer_delay", 6, 1, 4, 1, CaddxPropertyType.BIT, "Dialer delay", false),
171             new CaddxProperty("zone_swinger_shutdown", 6, 1, 5, 1, CaddxPropertyType.BIT, "Swinger shutdown", false),
172             new CaddxProperty("zone_restorable", 6, 1, 6, 1, CaddxPropertyType.BIT, "Restorable", false),
173             new CaddxProperty("zone_listen_in", 6, 1, 7, 1, CaddxPropertyType.BIT, "Listen in", false),
174
175             // Byte 7 Zone condition flags (1)
176             new CaddxProperty("zone_faulted", 7, 1, 0, 1, CaddxPropertyType.BIT, "Faulted (or delayed trip)", false),
177             new CaddxProperty("zone_tampered", 7, 1, 1, 1, CaddxPropertyType.BIT, "Tampered", false),
178             new CaddxProperty("zone_trouble", 7, 1, 2, 1, CaddxPropertyType.BIT, "Trouble", false),
179             new CaddxProperty("zone_bypassed", 7, 1, 3, 1, CaddxPropertyType.BIT, "Bypassed", false),
180             new CaddxProperty("zone_inhibited", 7, 1, 4, 1, CaddxPropertyType.BIT, "Inhibited (force armed)", false),
181             new CaddxProperty("zone_low_battery", 7, 1, 5, 1, CaddxPropertyType.BIT, "Low battery", false),
182             new CaddxProperty("zone_loss_of_supervision", 7, 1, 6, 1, CaddxPropertyType.BIT, "Loss of supervision",
183                     false),
184
185             // Byte 8 Zone condition flags (2)
186             new CaddxProperty("zone_alarm_memory", 8, 1, 0, 1, CaddxPropertyType.BIT, "Alarm memory", false),
187             new CaddxProperty("zone_bypass_memory", 8, 1, 1, 1, CaddxPropertyType.BIT, "Bypass memory", false)),
188
189     ZONES_SNAPSHOT_MESSAGE(0x05, null, 10, "Zones Snapshot Message",
190             "This message will contain an abbreviated set of information for any group of 16 zones possible on the system. (A zone offset number will set the range of zones)",
191             CaddxDirection.IN, CaddxSource.PANEL,
192
193             // Properties
194             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
195
196             new CaddxProperty("zone_offset", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone offset (0= start at zone 1)",
197                     false),
198
199             // Byte 3 Zone 1 & 2 (+offset) status flags
200             new CaddxProperty("zone_1_faulted", 3, 1, 0, 1, CaddxPropertyType.BIT, "Zone 1 faulted (or delayed trip)",
201                     false),
202             new CaddxProperty("zone_1_bypassed", 3, 1, 1, 1, CaddxPropertyType.BIT, "Zone 1 bypass (or inhibited)",
203                     false),
204             new CaddxProperty("zone_1_trouble", 3, 1, 2, 1, CaddxPropertyType.BIT,
205                     "Zone 1 trouble (tamper, low battery, or lost)", false),
206             new CaddxProperty("zone_1_alarm_memory", 3, 1, 3, 1, CaddxPropertyType.BIT, "Zone 1 alarm memory", false),
207             new CaddxProperty("zone_2_faulted", 3, 1, 4, 1, CaddxPropertyType.BIT, "Zone 2 faulted (or delayed trip)",
208                     false),
209             new CaddxProperty("zone_2_bypassed", 3, 1, 5, 1, CaddxPropertyType.BIT, "Zone 2 bypass (or inhibited)",
210                     false),
211             new CaddxProperty("zone_2_trouble", 3, 1, 6, 1, CaddxPropertyType.BIT,
212                     "Zone 2 trouble (tamper, low battery, or lost)", false),
213             new CaddxProperty("zone_2_alarm_memory", 3, 1, 7, 1, CaddxPropertyType.BIT, "Zone 2 alarm memory", false),
214
215             // Byte 4 Zone 3 & 4 status flags (see byte 3)
216             new CaddxProperty("zone_3_faulted", 4, 1, 0, 1, CaddxPropertyType.BIT, "Zone 3 faulted (or delayed trip)",
217                     false),
218             new CaddxProperty("zone_3_bypassed", 4, 1, 1, 1, CaddxPropertyType.BIT, "Zone 3 bypass (or inhibited)",
219                     false),
220             new CaddxProperty("zone_3_trouble", 4, 1, 2, 1, CaddxPropertyType.BIT,
221                     "Zone 3 trouble (tamper, low battery, or lost)", false),
222             new CaddxProperty("zone_3_alarm_memory", 4, 1, 3, 1, CaddxPropertyType.BIT, "Zone 3 alarm memory", false),
223             new CaddxProperty("zone_4_faulted", 4, 1, 4, 1, CaddxPropertyType.BIT, "Zone 4 faulted (or delayed trip)",
224                     false),
225             new CaddxProperty("zone_4_bypassed", 4, 1, 5, 1, CaddxPropertyType.BIT, "Zone 4 bypass (or inhibited)",
226                     false),
227             new CaddxProperty("zone_4_trouble", 4, 1, 6, 1, CaddxPropertyType.BIT,
228                     "Zone 4 trouble (tamper, low battery, or lost)", false),
229             new CaddxProperty("zone_4_alarm_memory", 4, 1, 7, 1, CaddxPropertyType.BIT, "Zone 4 alarm memory", false),
230
231             // Byte 5 Zone 5 & 6 status flags (see byte 3)
232             new CaddxProperty("zone_5_faulted", 5, 1, 0, 1, CaddxPropertyType.BIT, "Zone 5 faulted (or delayed trip)",
233                     false),
234             new CaddxProperty("zone_5_bypassed", 5, 1, 1, 1, CaddxPropertyType.BIT, "Zone 5 bypass (or inhibited)",
235                     false),
236             new CaddxProperty("zone_5_trouble", 5, 1, 2, 1, CaddxPropertyType.BIT,
237                     "Zone 5 trouble (tamper, low battery, or lost)", false),
238             new CaddxProperty("zone_5_alarm_memory", 5, 1, 3, 1, CaddxPropertyType.BIT, "Zone 5 alarm memory", false),
239             new CaddxProperty("zone_6_faulted", 5, 1, 4, 1, CaddxPropertyType.BIT, "Zone 6 faulted (or delayed trip)",
240                     false),
241             new CaddxProperty("zone_6_bypassed", 5, 1, 5, 1, CaddxPropertyType.BIT, "Zone 6 bypass (or inhibited)",
242                     false),
243             new CaddxProperty("zone_6_trouble", 5, 1, 6, 1, CaddxPropertyType.BIT,
244                     "Zone 6 trouble (tamper, low battery, or lost)", false),
245             new CaddxProperty("zone_6_alarm_memory", 5, 1, 7, 1, CaddxPropertyType.BIT, "Zone 6 alarm memory", false),
246
247             // Byte 6 Zone 7 & 8 status flags (see byte 3)
248             new CaddxProperty("zone_7_faulted", 6, 1, 0, 1, CaddxPropertyType.BIT, "Zone 7 faulted (or delayed trip)",
249                     false),
250             new CaddxProperty("zone_7_bypassed", 6, 1, 1, 1, CaddxPropertyType.BIT, "Zone 7 bypass (or inhibited)",
251                     false),
252             new CaddxProperty("zone_7_trouble", 6, 1, 2, 1, CaddxPropertyType.BIT,
253                     "Zone 7 trouble (tamper, low battery, or lost)", false),
254             new CaddxProperty("zone_7_alarm_memory", 6, 1, 3, 1, CaddxPropertyType.BIT, "Zone 7 alarm memory", false),
255             new CaddxProperty("zone_8_faulted", 6, 1, 4, 1, CaddxPropertyType.BIT, "Zone 8 faulted (or delayed trip)",
256                     false),
257             new CaddxProperty("zone_8_bypassed", 6, 1, 5, 1, CaddxPropertyType.BIT, "Zone 8 bypass (or inhibited)",
258                     false),
259             new CaddxProperty("zone_8_trouble", 6, 1, 6, 1, CaddxPropertyType.BIT,
260                     "Zone 8 trouble (tamper, low battery, or lost)", false),
261             new CaddxProperty("zone_8_alarm_memory", 6, 1, 7, 1, CaddxPropertyType.BIT, "Zone 8 alarm memory", false),
262
263             // Byte 7 Zone 9 & 10 status flags (see byte 3)
264             new CaddxProperty("zone_9_faulted", 7, 1, 0, 1, CaddxPropertyType.BIT, "Zone 9 faulted (or delayed trip)",
265                     false),
266             new CaddxProperty("zone_9_bypassed", 7, 1, 1, 1, CaddxPropertyType.BIT, "Zone 9 bypass (or inhibited)",
267                     false),
268             new CaddxProperty("zone_9_trouble", 7, 1, 2, 1, CaddxPropertyType.BIT,
269                     "Zone 9 trouble (tamper, low battery, or lost)", false),
270             new CaddxProperty("zone_9_alarm_memory", 7, 1, 3, 1, CaddxPropertyType.BIT, "Zone 9 alarm memory", false),
271             new CaddxProperty("zone_10_faulted", 7, 1, 4, 1, CaddxPropertyType.BIT, "Zone 10 faulted (or delayed trip)",
272                     false),
273             new CaddxProperty("zone_10_bypassed", 7, 1, 5, 1, CaddxPropertyType.BIT, "Zone 10 bypass (or inhibited)",
274                     false),
275             new CaddxProperty("zone_10_trouble", 7, 1, 6, 1, CaddxPropertyType.BIT,
276                     "Zone 10 trouble (tamper, low battery, or lost)", false),
277             new CaddxProperty("zone_10_alarm_memory", 7, 1, 7, 1, CaddxPropertyType.BIT, "Zone 10 alarm memory", false),
278
279             // Byte 8 Zone 11 & 12 status flags (see byte 3)
280             new CaddxProperty("zone_11_faulted", 8, 1, 0, 1, CaddxPropertyType.BIT, "Zone 11 faulted (or delayed trip)",
281                     false),
282             new CaddxProperty("zone_11_bypassed", 8, 1, 1, 1, CaddxPropertyType.BIT, "Zone 11 bypass (or inhibited)",
283                     false),
284             new CaddxProperty("zone_11_trouble", 8, 1, 2, 1, CaddxPropertyType.BIT,
285                     "Zone 11 trouble (tamper, low battery, or lost)", false),
286             new CaddxProperty("zone_11_alarm_memory", 8, 1, 3, 1, CaddxPropertyType.BIT, "Zone 11 alarm memory", false),
287             new CaddxProperty("zone_12_faulted", 8, 1, 4, 1, CaddxPropertyType.BIT, "Zone 12 faulted (or delayed trip)",
288                     false),
289             new CaddxProperty("zone_12_bypassed", 8, 1, 5, 1, CaddxPropertyType.BIT, "Zone 12 bypass (or inhibited)",
290                     false),
291             new CaddxProperty("zone_12_trouble", 8, 1, 6, 1, CaddxPropertyType.BIT,
292                     "Zone 12 trouble (tamper, low battery, or lost)", false),
293             new CaddxProperty("zone_12_alarm_memory", 8, 1, 7, 1, CaddxPropertyType.BIT, "Zone 12 alarm memory", false),
294
295             // Byte 9 Zone 13 & 14 status flags (see byte 3)
296             new CaddxProperty("zone_13_faulted", 9, 1, 0, 1, CaddxPropertyType.BIT, "Zone 13 faulted (or delayed trip)",
297                     false),
298             new CaddxProperty("zone_13_bypassed", 9, 1, 1, 1, CaddxPropertyType.BIT, "Zone 13 bypass (or inhibited)",
299                     false),
300             new CaddxProperty("zone_13_trouble", 9, 1, 2, 1, CaddxPropertyType.BIT,
301                     "Zone 13 trouble (tamper, low battery, or lost)", false),
302             new CaddxProperty("zone_13_alarm_memory", 9, 1, 3, 1, CaddxPropertyType.BIT, "Zone 13 alarm memory", false),
303             new CaddxProperty("zone_14_faulted", 9, 1, 4, 1, CaddxPropertyType.BIT, "Zone 14 faulted (or delayed trip)",
304                     false),
305             new CaddxProperty("zone_14_bypassed", 9, 1, 5, 1, CaddxPropertyType.BIT, "Zone 14 bypass (or inhibited)",
306                     false),
307             new CaddxProperty("zone_14_trouble", 9, 1, 6, 1, CaddxPropertyType.BIT,
308                     "Zone 14 trouble (tamper, low battery, or lost)", false),
309             new CaddxProperty("zone_14_alarm_memory", 9, 1, 7, 1, CaddxPropertyType.BIT, "Zone 14 alarm memory", false),
310
311             // Byte 10 Zone 15 & 16 status flags (see byte 3)
312             new CaddxProperty("zone_15_faulted", 10, 1, 0, 1, CaddxPropertyType.BIT,
313                     "Zone 15 faulted (or delayed trip)", false),
314             new CaddxProperty("zone_15_bypassed", 10, 1, 1, 1, CaddxPropertyType.BIT, "Zone 15 bypass (or inhibited)",
315                     false),
316             new CaddxProperty("zone_15_trouble", 10, 1, 2, 1, CaddxPropertyType.BIT,
317                     "Zone 15 trouble (tamper, low battery, or lost)", false),
318             new CaddxProperty("zone_15_alarm_memory", 10, 1, 3, 1, CaddxPropertyType.BIT, "Zone 15 alarm memory",
319                     false),
320             new CaddxProperty("zone_16_faulted", 10, 1, 4, 1, CaddxPropertyType.BIT,
321                     "Zone 16 faulted (or delayed trip)", false),
322             new CaddxProperty("zone_16_bypassed", 10, 1, 5, 1, CaddxPropertyType.BIT, "Zone 16 bypass (or inhibited)",
323                     false),
324             new CaddxProperty("zone_16_trouble", 10, 1, 6, 1, CaddxPropertyType.BIT,
325                     "Zone 16 trouble (tamper, low battery, or lost)", false),
326             new CaddxProperty("zone_16_alarm_memory", 10, 1, 7, 1, CaddxPropertyType.BIT, "Zone 16 alarm memory",
327                     false)),
328
329     PARTITION_STATUS_MESSAGE(0x06, null, 9, "Partition Status Message",
330             "This message will contain all information relevant to a single partition in the system.",
331             CaddxDirection.IN, CaddxSource.PARTITION,
332
333             // Properties
334             // Byte 1
335             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
336
337             new CaddxProperty("partition_number", 2, 1, 0, 0, CaddxPropertyType.INT,
338                     "Partition number (0= partition 1)", false),
339
340             // Byte 3 Partition condition flags (1)
341             new CaddxProperty("partition_bypass_code_required", 3, 1, 0, 1, CaddxPropertyType.BIT,
342                     "Bypass code required", false),
343             new CaddxProperty("partition_fire_trouble", 3, 1, 1, 1, CaddxPropertyType.BIT, "Fire trouble", false),
344             new CaddxProperty("partition_fire", 3, 1, 2, 1, CaddxPropertyType.BIT, "Fire", false),
345             new CaddxProperty("partition_pulsing_buzzer", 3, 1, 3, 1, CaddxPropertyType.BIT, "Pulsing Buzzer", false),
346             new CaddxProperty("partition_tlm_fault_memory", 3, 1, 4, 1, CaddxPropertyType.BIT, "TLM fault memory",
347                     false),
348             new CaddxProperty("partition_armed", 3, 1, 6, 1, CaddxPropertyType.BIT, "Armed", false),
349             new CaddxProperty("partition_instant", 3, 1, 7, 1, CaddxPropertyType.BIT, "Instant", false),
350
351             // Byte 4 Partition condition flags (2)
352             new CaddxProperty("partition_previous_alarm", 4, 1, 0, 1, CaddxPropertyType.BIT, "Previous Alarm", false),
353             new CaddxProperty("partition_siren_on", 4, 1, 1, 1, CaddxPropertyType.BIT, "Siren on", false),
354             new CaddxProperty("partition_steady_siren_on", 4, 1, 2, 1, CaddxPropertyType.BIT, "Steady siren on", false),
355             new CaddxProperty("partition_alarm_memory", 4, 1, 3, 1, CaddxPropertyType.BIT, "Alarm memory", false),
356             new CaddxProperty("partition_tamper", 4, 1, 4, 1, CaddxPropertyType.BIT, "Tamper", false),
357             new CaddxProperty("partition_cancel_command_entered", 4, 1, 5, 1, CaddxPropertyType.BIT,
358                     "Cancel command entered", false),
359             new CaddxProperty("partition_code_entered", 4, 1, 6, 1, CaddxPropertyType.BIT, "Code entered", false),
360             new CaddxProperty("partition_cancel_pending", 4, 1, 7, 1, CaddxPropertyType.BIT, "Cancel pending", false),
361
362             // Byte 5 Partition condition flags (3)
363             new CaddxProperty("partition_silent_exit_enabled", 5, 1, 1, 1, CaddxPropertyType.BIT, "Silent exit enabled",
364                     false),
365             new CaddxProperty("partition_entryguard", 5, 1, 2, 1, CaddxPropertyType.BIT, "Entryguard (stay mode)",
366                     false),
367             new CaddxProperty("partition_chime_mode_on", 5, 1, 3, 1, CaddxPropertyType.BIT, "Chime mode on", false),
368             new CaddxProperty("partition_entry", 5, 1, 4, 1, CaddxPropertyType.BIT, "Entry", false),
369             new CaddxProperty("partition_delay_expiration_warning", 5, 1, 5, 1, CaddxPropertyType.BIT,
370                     "Delay expiration warning", false),
371             new CaddxProperty("partition_exit1", 5, 1, 6, 1, CaddxPropertyType.BIT, "Exit1", false),
372             new CaddxProperty("partition_exit2", 5, 1, 7, 1, CaddxPropertyType.BIT, "Exit2", false),
373
374             // Byte 6 Partition condition flags (4)
375             new CaddxProperty("partition_led_extinguish", 6, 1, 0, 1, CaddxPropertyType.BIT, "LED extinguish", false),
376             new CaddxProperty("partition_cross_timing", 6, 1, 1, 1, CaddxPropertyType.BIT, "Cross timing", false),
377             new CaddxProperty("partition_recent_closing_being_timed", 6, 1, 2, 1, CaddxPropertyType.BIT,
378                     "Recent closing being timed", false),
379             new CaddxProperty("partition_exit_error_triggered", 6, 1, 4, 1, CaddxPropertyType.BIT,
380                     "Exit error triggered", false),
381             new CaddxProperty("partition_auto_home_inhibited", 6, 1, 5, 1, CaddxPropertyType.BIT, "Auto home inhibited",
382                     false),
383             new CaddxProperty("partition_sensor_low_battery", 6, 1, 6, 1, CaddxPropertyType.BIT, "Sensor low battery",
384                     false),
385             new CaddxProperty("partition_sensor_lost_supervision", 6, 1, 7, 1, CaddxPropertyType.BIT,
386                     "Sensor lost supervision", false),
387
388             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Last user number", false),
389
390             // Byte 8 Partition condition flags (5)
391             new CaddxProperty("partition_zone_bypassed", 8, 1, 0, 1, CaddxPropertyType.BIT, "Zone bypassed", false),
392             new CaddxProperty("partition_force_arm_triggered_by_auto_arm", 8, 1, 1, 1, CaddxPropertyType.BIT,
393                     "Force arm triggered by auto arm", false),
394             new CaddxProperty("partition_ready_to_arm", 8, 1, 2, 1, CaddxPropertyType.BIT, "Ready to arm", false),
395             new CaddxProperty("partition_ready_to_force_arm", 8, 1, 3, 1, CaddxPropertyType.BIT, "Ready to force arm",
396                     false),
397             new CaddxProperty("partition_valid_pin_accepted", 8, 1, 4, 1, CaddxPropertyType.BIT, "Valid PIN accepted",
398                     false),
399             new CaddxProperty("partition_chime_on", 8, 1, 5, 1, CaddxPropertyType.BIT, "Chime on (sounding)", false),
400             new CaddxProperty("partition_error_beep", 8, 1, 6, 1, CaddxPropertyType.BIT, "Error beep (triple beep)",
401                     false),
402             new CaddxProperty("partition_tone_on", 8, 1, 7, 1, CaddxPropertyType.BIT, "Tone on (activation tone)",
403                     false),
404
405             // Byte 9 Partition condition flags (6)
406             new CaddxProperty("partition_entry1", 9, 1, 0, 1, CaddxPropertyType.BIT, "Entry 1", false),
407             new CaddxProperty("partition_open_period", 9, 1, 1, 1, CaddxPropertyType.BIT, "Open period", false),
408             new CaddxProperty("partition_alarm_sent_using_phone_number_1", 9, 1, 2, 1, CaddxPropertyType.BIT,
409                     "Alarm sent using phone number 1", false),
410             new CaddxProperty("partition_alarm_sent_using_phone_number_2", 9, 1, 3, 1, CaddxPropertyType.BIT,
411                     "Alarm sent using phone number 2", false),
412             new CaddxProperty("partition_alarm_sent_using_phone_number_3", 9, 1, 4, 1, CaddxPropertyType.BIT,
413                     "Alarm sent using phone number 3", false),
414             new CaddxProperty("partition_cancel_report_is_in_the_stack", 9, 1, 5, 1, CaddxPropertyType.BIT,
415                     "Cancel report is in the stack", false),
416             new CaddxProperty("partition_keyswitch_armed", 9, 1, 6, 1, CaddxPropertyType.BIT, "Keyswitch armed", false),
417             new CaddxProperty("partition_delay_trip_in_progress", 9, 1, 7, 1, CaddxPropertyType.BIT,
418                     "Delay Trip in progress (common zone)", false)),
419
420     PARTITIONS_SNAPSHOT_MESSAGE(0x07, null, 9, "Partitions Snapshot Message",
421             "This message will contain an abbreviated set of information for all 8 partitions on the system.",
422             CaddxDirection.IN, CaddxSource.PANEL,
423
424             // Properties
425             // Byte 1
426             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
427
428             // Byte 2 Partition 1 condition flags
429             new CaddxProperty("partition_1_valid", 2, 1, 0, 1, CaddxPropertyType.BIT, "Partition 1 valid partition",
430                     false),
431             new CaddxProperty("", 2, 1, 1, 1, CaddxPropertyType.BIT, "Partition 1 ready", false),
432             new CaddxProperty("", 2, 1, 2, 1, CaddxPropertyType.BIT, "Partition 1 armed", false),
433             new CaddxProperty("", 2, 1, 3, 1, CaddxPropertyType.BIT, "Partition 1 stay mode", false),
434             new CaddxProperty("", 2, 1, 4, 1, CaddxPropertyType.BIT, "Partition 1 chime mode", false),
435             new CaddxProperty("", 2, 1, 5, 1, CaddxPropertyType.BIT, "Partition 1 any entry delay", false),
436             new CaddxProperty("", 2, 1, 6, 1, CaddxPropertyType.BIT, "Partition 1 any exit delay", false),
437             new CaddxProperty("", 2, 1, 7, 1, CaddxPropertyType.BIT, "Partition 1 previous alarm", false),
438
439             // Byte 3 Partition 2 condition flags
440             new CaddxProperty("partition_2_valid", 3, 1, 0, 1, CaddxPropertyType.BIT, "Partition 2 valid partition",
441                     false),
442             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Partition 2 ready", false),
443             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Partition 2 armed", false),
444             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Partition 2 stay mode", false),
445             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Partition 2 chime mode", false),
446             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Partition 2 any entry delay", false),
447             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Partition 2 any exit delay", false),
448             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Partition 2 previous alarm", false),
449
450             // Byte 4 Partition 3 condition flags
451             new CaddxProperty("partition_3_valid", 4, 1, 0, 1, CaddxPropertyType.BIT, "Partition 3 valid partition",
452                     false),
453             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Partition 3 ready", false),
454             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Partition 3 armed", false),
455             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Partition 3 stay mode", false),
456             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Partition 3 chime mode", false),
457             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Partition 3 any entry delay", false),
458             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Partition 3 any exit delay", false),
459             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "Partition 3 previous alarm", false),
460
461             // Byte 5 Partition 4 condition flags
462             new CaddxProperty("partition_4_valid", 5, 1, 0, 1, CaddxPropertyType.BIT, "Partition 4 valid partition",
463                     false),
464             new CaddxProperty("", 5, 1, 1, 1, CaddxPropertyType.BIT, "Partition 4 ready", false),
465             new CaddxProperty("", 5, 1, 2, 1, CaddxPropertyType.BIT, "Partition 4 armed", false),
466             new CaddxProperty("", 5, 1, 3, 1, CaddxPropertyType.BIT, "Partition 4 stay mode", false),
467             new CaddxProperty("", 5, 1, 4, 1, CaddxPropertyType.BIT, "Partition 4 chime mode", false),
468             new CaddxProperty("", 5, 1, 5, 1, CaddxPropertyType.BIT, "Partition 4 any entry delay", false),
469             new CaddxProperty("", 5, 1, 6, 1, CaddxPropertyType.BIT, "Partition 4 any exit delay", false),
470             new CaddxProperty("", 5, 1, 7, 1, CaddxPropertyType.BIT, "Partition 4 previous alarm", false),
471
472             // Byte 6 Partition 5 condition flags
473             new CaddxProperty("partition_5_valid", 6, 1, 0, 1, CaddxPropertyType.BIT, "Partition 5 valid partition",
474                     false),
475             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Partition 5 ready", false),
476             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "Partition 5 armed", false),
477             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Partition 5 stay mode", false),
478             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Partition 5 chime mode", false),
479             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Partition 5 any entry delay", false),
480             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Partition 5 any exit delay", false),
481             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Partition 5 previous alarm", false),
482
483             // Byte 7 Partition 6 condition flags
484             new CaddxProperty("partition_6_valid", 7, 1, 0, 1, CaddxPropertyType.BIT, "Partition 6 valid partition",
485                     false),
486             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Partition 6 ready", false),
487             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Partition 6 armed", false),
488             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Partition 6 stay mode", false),
489             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Partition 6 chime mode", false),
490             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Partition 6 any entry delay", false),
491             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Partition 6 any exit delay", false),
492             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Partition 6 previous alarm", false),
493
494             // Byte 8 Partition 7 condition flags
495             new CaddxProperty("partition_7_valid", 8, 1, 0, 1, CaddxPropertyType.BIT, "Partition 7 valid partition",
496                     false),
497             new CaddxProperty("", 8, 1, 1, 1, CaddxPropertyType.BIT, "Partition 7 ready", false),
498             new CaddxProperty("", 8, 1, 2, 1, CaddxPropertyType.BIT, "Partition 7 armed", false),
499             new CaddxProperty("", 8, 1, 3, 1, CaddxPropertyType.BIT, "Partition 7 stay mode", false),
500             new CaddxProperty("", 8, 1, 4, 1, CaddxPropertyType.BIT, "Partition 7 chime mode", false),
501             new CaddxProperty("", 8, 1, 5, 1, CaddxPropertyType.BIT, "Partition 7 any entry delay", false),
502             new CaddxProperty("", 8, 1, 6, 1, CaddxPropertyType.BIT, "Partition 7 any exit delay", false),
503             new CaddxProperty("", 8, 1, 7, 1, CaddxPropertyType.BIT, "Partition 7 previous alarm", false),
504
505             // Byte 9 Partition 8 condition flags
506             new CaddxProperty("partition_8_valid", 9, 1, 0, 1, CaddxPropertyType.BIT, "Partition 8 valid partition",
507                     false),
508             new CaddxProperty("", 9, 1, 1, 1, CaddxPropertyType.BIT, "Partition 8 ready", false),
509             new CaddxProperty("", 9, 1, 2, 1, CaddxPropertyType.BIT, "Partition 8 armed", false),
510             new CaddxProperty("", 9, 1, 3, 1, CaddxPropertyType.BIT, "Partition 8 stay mode", false),
511             new CaddxProperty("", 9, 1, 4, 1, CaddxPropertyType.BIT, "Partition 8 chime mode", false),
512             new CaddxProperty("", 9, 1, 5, 1, CaddxPropertyType.BIT, "Partition 8 any entry delay", false),
513             new CaddxProperty("", 9, 1, 6, 1, CaddxPropertyType.BIT, "Partition 8 any exit delay", false),
514             new CaddxProperty("", 9, 1, 8, 1, CaddxPropertyType.BIT, "Partition 8 previous alarm", false)),
515
516     SYSTEM_STATUS_MESSAGE(0x08, null, 12, "System Status Message",
517             "This message will contain all information relevant to the entire system.", CaddxDirection.IN,
518             CaddxSource.PANEL,
519
520             // Properties
521             // Byte 1
522             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
523
524             // Byte 2
525             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Panel ID number", false),
526
527             // Byte 3
528             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Line seizure", false),
529             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Off hook", false),
530             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Initial handshake received", false),
531             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Download in progress", false),
532             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Dialer delay in progress", false),
533             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Using backup phone", false),
534             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Listen in active", false),
535             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Two way lockout", false),
536
537             // Byte 4
538             new CaddxProperty("", 4, 1, 0, 1, CaddxPropertyType.BIT, "Ground fault", false),
539             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Phone fault", false),
540             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Fail to communicate", false),
541             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Fuse fault", false),
542             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Box tamper", false),
543             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Siren tamper / trouble", false),
544             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Low Battery", false),
545             new CaddxProperty("panel_ac_fail", 4, 1, 7, 1, CaddxPropertyType.BIT, "AC fail", false),
546
547             // Byte 5
548             new CaddxProperty("", 5, 1, 0, 1, CaddxPropertyType.BIT, "Expander box tamper", false),
549             new CaddxProperty("", 5, 1, 1, 1, CaddxPropertyType.BIT, "Expander AC failure", false),
550             new CaddxProperty("", 5, 1, 2, 1, CaddxPropertyType.BIT, "Expander low battery", false),
551             new CaddxProperty("", 5, 1, 3, 1, CaddxPropertyType.BIT, "Expander loss of supervision", false),
552             new CaddxProperty("", 5, 1, 4, 1, CaddxPropertyType.BIT, "Expander auxiliary output over current", false),
553             new CaddxProperty("", 5, 1, 5, 1, CaddxPropertyType.BIT, "Auxiliary communication channel failure", false),
554             new CaddxProperty("", 5, 1, 6, 1, CaddxPropertyType.BIT, "Expander bell fault", false),
555
556             // Byte 6
557             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT, "6 digit PIN enabled", false),
558             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Programming token in use", false),
559             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "PIN required for local download", false),
560             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Global pulsing buzzer", false),
561             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Global Siren on", false),
562             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Global steady siren", false),
563             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Bus device has line seized", false),
564             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Bus device has requested sniff mode", false),
565
566             // Byte 7
567             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Dynamic battery test", false),
568             new CaddxProperty("panel_ac_power_on", 7, 1, 1, 1, CaddxPropertyType.BIT, "AC power on", false),
569             new CaddxProperty("panel_low_battery_memory", 7, 1, 2, 1, CaddxPropertyType.BIT, "Low battery memory",
570                     false),
571             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Ground fault memory", false),
572             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Fire alarm verification being timed", false),
573             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Smoke power reset", false),
574             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "50 Hz line power detected", false),
575             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Timing a high voltage battery charge", false),
576
577             // Byte 8
578             new CaddxProperty("", 8, 1, 0, 1, CaddxPropertyType.BIT, "Communication since last autotest", false),
579             new CaddxProperty("", 8, 1, 1, 1, CaddxPropertyType.BIT, "Power up delay in progress", false),
580             new CaddxProperty("", 8, 1, 2, 1, CaddxPropertyType.BIT, "Walk test mode", false),
581             new CaddxProperty("", 8, 1, 3, 1, CaddxPropertyType.BIT, "Loss of system time", false),
582             new CaddxProperty("", 8, 1, 4, 1, CaddxPropertyType.BIT, "Enroll requested", false),
583             new CaddxProperty("", 8, 1, 5, 1, CaddxPropertyType.BIT, "Test fixture mode", false),
584             new CaddxProperty("", 8, 1, 6, 1, CaddxPropertyType.BIT, "Control shutdown mode", false),
585             new CaddxProperty("", 8, 1, 7, 1, CaddxPropertyType.BIT, "Timing a cancel window", false),
586
587             // Byte 9
588             new CaddxProperty("", 9, 1, 7, 1, CaddxPropertyType.BIT, "Call back in progress", false),
589
590             // Byte 10
591             new CaddxProperty("", 10, 1, 0, 1, CaddxPropertyType.BIT, "Phone line faulted", false),
592             new CaddxProperty("", 10, 1, 1, 1, CaddxPropertyType.BIT, "Voltage present interrupt active", false),
593             new CaddxProperty("", 10, 1, 2, 1, CaddxPropertyType.BIT, "House phone off hook", false),
594             new CaddxProperty("", 10, 1, 3, 1, CaddxPropertyType.BIT, "Phone line monitor enabled", false),
595             new CaddxProperty("", 10, 1, 4, 1, CaddxPropertyType.BIT, "Sniffing", false),
596             new CaddxProperty("", 10, 1, 5, 1, CaddxPropertyType.BIT, "Last read was off hook", false),
597             new CaddxProperty("", 10, 1, 6, 1, CaddxPropertyType.BIT, "Listen in requested", false),
598             new CaddxProperty("", 10, 1, 7, 1, CaddxPropertyType.BIT, "Listen in trigger", false),
599
600             // Byte 11
601             new CaddxProperty("", 11, 1, 0, 1, CaddxPropertyType.BIT, "Valid partition 1", false),
602             new CaddxProperty("", 11, 1, 1, 1, CaddxPropertyType.BIT, "Valid partition 2", false),
603             new CaddxProperty("", 11, 1, 2, 1, CaddxPropertyType.BIT, "Valid partition 3", false),
604             new CaddxProperty("", 11, 1, 3, 1, CaddxPropertyType.BIT, "Valid partition 4", false),
605             new CaddxProperty("", 11, 1, 4, 1, CaddxPropertyType.BIT, "Valid partition 5", false),
606             new CaddxProperty("", 11, 1, 5, 1, CaddxPropertyType.BIT, "Valid partition 6", false),
607             new CaddxProperty("", 11, 1, 6, 1, CaddxPropertyType.BIT, "Valid partition 7", false),
608             new CaddxProperty("", 11, 1, 7, 1, CaddxPropertyType.BIT, "Valid partition 8", false),
609
610             // Byte 12 Communicator stack pointer
611             new CaddxProperty("panel_communicator_stack_pointer", 12, 1, 0, 0, CaddxPropertyType.INT,
612                     "Communicator stack pointer", false)),
613
614     X10_MESSAGE_RECEIVED(0x09, null, 4, "X-10 Message Received",
615             "This message contains information about an X-10 command that was requested by any device on the system bus.",
616             CaddxDirection.IN, CaddxSource.PANEL,
617
618             // Properties
619             // Byte 1
620             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
621
622             // Byte 2
623             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "House code (0=house A)", false),
624
625             // Byte 3
626             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Unit code (0=unit 1)", false),
627
628             // Byte 4
629             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "X-10 function code", false)),
630
631     LOG_EVENT_MESSAGE(0x0a, null, 10, "Log Event Message",
632             "This message will contain all information relating to an event in the log memory.", CaddxDirection.IN,
633             CaddxSource.PANEL,
634
635             // Properties
636             // Byte 1
637             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
638             // Byte 2
639             new CaddxProperty("panel_log_event_number", 2, 1, 0, 0, CaddxPropertyType.INT,
640                     "Event number of this message", false),
641             // Byte 3
642             new CaddxProperty("panel_log_event_size", 3, 1, 0, 0, CaddxPropertyType.INT,
643                     "Total log size (number of log entries allowed)", false),
644
645             // Byte 4
646             new CaddxProperty("panel_log_event_type", 4, 1, 0, 7, CaddxPropertyType.INT, "Event type", false),
647             // Bits 0-6 See type definitions in table that follows
648             // Bit 7 Non-reporting event if not set
649
650             // Byte 5
651             new CaddxProperty("panel_log_event_zud", 5, 1, 0, 0, CaddxPropertyType.INT, "Zone / User / Device number",
652                     false),
653             // Byte 6
654             new CaddxProperty("panel_log_event_partition", 6, 1, 0, 0, CaddxPropertyType.INT,
655                     "Partition number (0=partition 1, if relevant)", false),
656             // Byte 7
657             new CaddxProperty("panel_log_event_month", 7, 1, 0, 0, CaddxPropertyType.INT, "Month (1-12)", false),
658             // Byte 8
659             new CaddxProperty("panel_log_event_day", 8, 1, 0, 0, CaddxPropertyType.INT, "Day (1-31)", false),
660             // Byte 9
661             new CaddxProperty("panel_log_event_hour", 9, 1, 0, 0, CaddxPropertyType.INT, "Hour (0-23)", false),
662             // Byte 10
663             new CaddxProperty("panel_log_event_minute", 10, 1, 0, 0, CaddxPropertyType.INT, "Minute (0-59)", false)),
664
665     KEYPAD_MESSAGE_RECEIVED(0x0b, null, 3, "Keypad Message Received",
666             "This message contains a keystroke from a keypad that is in a Terminal Mode.", CaddxDirection.IN,
667             CaddxSource.KEYPAD,
668
669             // Properties
670             // Byte 1
671             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
672
673             // Byte 2
674             new CaddxProperty("", 1, 2, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
675
676             // Byte 3
677             new CaddxProperty("keypad_key_pressed", 1, 1, 0, 0, CaddxPropertyType.INT, "Key value", false)),
678
679     PROGRAM_DATA_REPLY(0x10, null, 13, "Program Data Reply",
680             "This message will contain a system device’s buss address, logical location, and program data that was previously requested (via Program Data Request (3Ch)).",
681             CaddxDirection.IN, CaddxSource.PANEL,
682
683             // Properties
684             // Byte 1
685             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
686
687             // Byte 2
688             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
689
690             // Byte 3 Upper logical location / offset
691             new CaddxProperty("", 3, 1, 0, 3, CaddxPropertyType.INT, "Bits 8-11 of logical location", false),
692             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.INT, "Segment size (0=byte, 1=nibble)", false),
693             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Must be 0", false),
694             new CaddxProperty("", 3, 1, 6, 6, CaddxPropertyType.INT, "Segment offset (0-none, 1=8 bytes)", false),
695             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
696
697             // Byte 4 Bits 0-7 of logical location
698             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false),
699
700             // Byte 5 Location length / data type
701             new CaddxProperty("", 5, 1, 0, 4, CaddxPropertyType.INT, "Number of segments in location (0=1 segment)",
702                     false),
703             new CaddxProperty("", 5, 1, 5, 7, CaddxPropertyType.INT,
704                     "Data type : 0=Binary 1=Decimal 2=Hexadecimal 3=ASCII 4=unused 5=unused 6=unused 7=unused", false),
705
706             // Byte 6 Data byte
707             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Data byte 0", false),
708             // Byte 7 Data byte
709             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Data byte 1", false),
710             // Byte 8 Data byte
711             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "Data byte 2", false),
712             // Byte 9 Data byte
713             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "Data byte 3", false),
714             // Byte 10 Data byte
715             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "Data byte 4", false),
716             // Byte 11 Data byte
717             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "Data byte 5", false),
718             // Byte 12 Data byte
719             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "Data byte 6", false),
720             // Byte 13 Data byte
721             new CaddxProperty("", 13, 1, 0, 0, CaddxPropertyType.INT, "Data byte 7", false)),
722
723     USER_INFORMATION_REPLY(0x12, null, 7, "User Information Reply",
724             "This message will contain all digits, attributes and partitions for the requested user PIN number that was previously requested (via User Information Request with(out) PIN (32h,33h)).",
725             CaddxDirection.IN, CaddxSource.PANEL,
726
727             // Properties
728             // Byte 1
729             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
730
731             // Byte 2
732             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User Number (1=user 1)", false),
733
734             // Byte 3 PIN digits 1 & 2
735             new CaddxProperty("", 3, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 1", false),
736             new CaddxProperty("", 3, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 2", false),
737
738             // Byte 4 PIN digits 3 & 4
739             new CaddxProperty("", 4, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 3", false),
740             new CaddxProperty("", 4, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 4", false),
741
742             // Byte 5 PIN digits 5 & 6
743             new CaddxProperty("", 5, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
744             new CaddxProperty("", 5, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
745
746             // Byte 6* Authority flags
747             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT,
748                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
749             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT,
750                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
751             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT,
752                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
753             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT,
754                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
755             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT,
756                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
757             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT,
758                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
759             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT,
760                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
761                     false),
762             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT,
763                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
764
765             // Byte 7 Authorized partition(s) mask
766             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
767             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
768             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
769             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
770             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
771             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
772             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
773             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
774
775     REQUEST_FAILED(0x1c, null, 1, "Command / Request Failed",
776             "This message is sent in place of a â€˜Positive Acknowledge’ message when a command or request was received properly, but the system was unable to carry out the task correctly. This would normally occur 2.5 seconds after receiving the initial command or request.",
777             CaddxDirection.IN, CaddxSource.PANEL,
778
779             // Properties
780             // Byte 1
781             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
782
783     POSITIVE_ACKNOWLEDGE(0x1d, null, 1, "Positive Acknowledge",
784             "This message will acknowledge receipt of a message that had the â€˜Acknowledge Required’ flag set in the command byte.",
785             CaddxDirection.IN, CaddxSource.PANEL,
786             // Properties
787             // Byte 1
788             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
789
790     NEGATIVE_ACKNOWLEDGE(0x1e, null, 1, "Negative Acknowledge",
791             "This message is sent in place of a â€˜Positive Acknowledge’ message when the message received was not properly formatted. It will also be sent if an additional message is received before a reply has been returned during the 2.5 second allowable reply period of a previous message. An â€˜Implied Negative Acknowledge’ is assumed when no acknowledge is returned with 3 seconds.",
792             CaddxDirection.IN, CaddxSource.PANEL,
793
794             // Properties
795             // Byte 1
796             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
797
798     MESSAGE_REJECTED(0x1f, null, 1, "Message Rejected",
799             "This message is sent in place of a â€˜Positive Acknowledge’ message when the message was received properly formatted, but not supported or disabled.",
800             CaddxDirection.IN, CaddxSource.PANEL,
801
802             // Properties
803             // Byte 1
804             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
805
806     INTERFACE_CONFIGURATION_REQUEST(0x21, new int[] { 0x01, 0x1c, 0x1f }, 1, "Interface Configuration Request",
807             "This request will cause the return of the Interface Configuration Message (01h) containing information about the options selected on the interface.",
808             CaddxDirection.OUT, CaddxSource.NONE,
809
810             // Properties
811             // Byte 1
812             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
813
814     ZONE_NAME_REQUEST(0x23, new int[] { 0x03, 0x1c, 0x1f }, 2, "Zone Name Request",
815             "This request will cause the return of the Zone Name Message (03h) for the zone number that was requested.",
816             CaddxDirection.OUT, CaddxSource.NONE,
817
818             // Properties
819             // Byte 1
820             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
821
822             // Byte 2
823             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", true)),
824
825     ZONE_STATUS_REQUEST(0x24, new int[] { 0x04, 0x1c, 0x1f }, 2, "Zone Status Request",
826             "This request will cause the return of the Zone Status Message (04h) for the zone number that was requested.",
827             CaddxDirection.OUT, CaddxSource.NONE,
828
829             // Properties
830             // Byte 1
831             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
832
833             // Byte 2
834             new CaddxProperty("zone_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", true)),
835
836     ZONES_SNAPSHOT_REQUEST(0x25, new int[] { 0x05, 0x1c, 0x1f }, 2, "Zones Snapshot Request",
837             "This request will cause the return of the Zones Snapshot Message (05h) with the group of zones starting at the zone 1 plus the offset value.",
838             CaddxDirection.OUT, CaddxSource.NONE,
839
840             // Properties
841             // Byte 1
842             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
843
844             // Byte 2
845             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number offset (0= start at zone 1)", true)),
846
847     PARTITION_STATUS_REQUEST(0x26, new int[] { 0x06, 0x1c, 0x1f }, 2, "Partition Status Request",
848             "This request will cause the return of the Partition Status Message (06h) for the partition number that was requested.",
849             CaddxDirection.OUT, CaddxSource.NONE,
850
851             // Properties
852             // Byte 1
853             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
854
855             // Byte 2
856             new CaddxProperty("partition_number", 2, 1, 0, 0, CaddxPropertyType.INT,
857                     "Partition number (0= partition 1)", true)),
858
859     PARTITIONS_SNAPSHOT_REQUEST(0x27, new int[] { 0x07, 0x1c, 0x1f }, 1, "Partitions Snapshot Request",
860             "This request will cause the return of the Partitions Snapshot Message (07h) containing all partitions.",
861             CaddxDirection.OUT, CaddxSource.NONE,
862
863             // Properties
864             // Byte 1
865             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
866
867     SYSTEM_STATUS_REQUEST(0x28, new int[] { 0x08, 0x1c, 0x1f }, 1, "System Status Request",
868             "This request will cause the return of the System Status Message (08h).", CaddxDirection.OUT,
869             CaddxSource.NONE,
870
871             // Properties
872             // Byte 1
873             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
874
875     SEND_X_10_MESSAGE(0x29, new int[] { 0x1d, 0x1c, 0x1f }, 4, "Send X-10 Message",
876             "This message will contain information about an X-10 command that should be resent on the system bus.",
877             CaddxDirection.OUT, CaddxSource.NONE,
878
879             // Properties
880             // Byte 1
881             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
882
883             // Byte 2
884             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "House code (0=house A) ", true),
885
886             // Byte 3
887             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Unit code (0=unit 1)", true),
888
889             // Byte 4
890             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "X-10 function code (see table at message # 0Ah)",
891                     true)),
892
893     LOG_EVENT_REQUEST(0x2a, new int[] { 0x0a, 0x1c, 0x1f }, 2, "Log Event Request",
894             "This request will cause the return of the Log Event Message (0Ah).", CaddxDirection.OUT, CaddxSource.NONE,
895             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
896             new CaddxProperty("panel_log_event_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Event number requested",
897                     true)),
898
899     SEND_KEYPAD_TEXT_MESSAGE(0x2b, new int[] { 0x1d, 0x1c, 0x1f }, 12, "Send Keypad Text Message",
900             "This message will contain ASCII text for a specific keypad on the bus that will be displayed during Terminal Mode.",
901             CaddxDirection.OUT, CaddxSource.NONE,
902
903             // Properties
904             // Byte 1
905             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
906             // Byte 2 Keypad address
907             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
908             // Byte 3 Keypad type (0=NX-148e)(all others not supported)
909             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Keypad type", false),
910             // Byte 4 Display storage location (0=top left corner
911             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Display storage location", false),
912             // Byte 5 ASCII character for location +0
913             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +0", false),
914             // Byte 6 ASCII character for location +1
915             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +1", false),
916             // Byte 7 ASCII character for location +2
917             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +2", false),
918             // Byte 8 ASCII character for location +3
919             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +3", false),
920             // Byte 9 ASCII character for location +4
921             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +4", false),
922             // Byte 10 ASCII character for location +5
923             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +5", false),
924             // Byte 11 ASCII character for location +6
925             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +6", false),
926             // Byte 12 ASCII character for location +7
927             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +7", false)),
928
929     KEYPAD_TERMINAL_MODE_REQUEST(0x2c, new int[] { 0x1d, 0x1c, 0x1f }, 3, "Keypad Terminal Mode Request",
930             "This message will contain the address of a keypad that should enter a Terminal Mode for the time contained. Only one keypad should be in the Terminal Mode at a time.",
931             CaddxDirection.OUT, CaddxSource.NONE,
932
933             // Properties
934             // Byte 1
935             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
936             // Byte 2 Keypad address
937             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
938             // Byte 3
939             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Number of seconds for Terminal Mode", false)),
940
941     PROGRAM_DATA_REQUEST(0x30, new int[] { 0x10, 0x1c, 0x1f }, 4, "Program Data Request",
942             "This message will contain a system device’s buss address and the logical location of program data that will be returned in a Program Data Reply message (10h).",
943             CaddxDirection.OUT, CaddxSource.NONE,
944
945             // Properties
946             // Byte 1
947             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
948             // Byte 2 Device’s buss address
949             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
950             // Byte 3 Upper logical location / offset
951             // Bits 0-3 Bits 8-11 of logical location
952             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.INT, "Bits 8-11 of logical location", false),
953             // Bits 4,5 Must be 0
954             new CaddxProperty("", 3, 1, 4, 2, CaddxPropertyType.BIT, "Must be 0", false),
955             // Bit 6 Segment offset (0-none, 1=8 bytes)
956             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Segment offset (0-none, 1=8 bytes)", false),
957             // Bit 7
958             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
959             // Byte 4 Bits 0-7 of logical location
960             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false)),
961
962     PROGRAM_DATA_COMMAND(0x31, new int[] { 0x1d, 0x1c, 0x1f }, 13, "Program Data Command",
963             "This message will contain a system device’s buss address and the logical location where the included data should be stored.",
964             CaddxDirection.OUT, CaddxSource.NONE,
965
966             // Properties
967             // Byte 1 Message number
968             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
969             // Byte 2 Device’s buss address
970             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
971             // Byte 3 Upper logical location / offset
972             // Bits 0-3 Bits 8-11 of logical location
973             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "Bits 8-11 of logical location", false),
974             // Bit 4 Segment size (0=byte, 1=nibble)
975             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Segment size (0=byte, 1=nibble)", false),
976             // Bit 5 Must be 1
977             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Must be 1", false),
978             // Bit 6 Segment offset (0-none, 1=8 bytes)
979             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Segment offset (0-none, 1=8 bytes)", false),
980             // Bit 7 Must be 0
981             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
982             // Byte 4 Bits 0-7 of logical location
983             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false),
984             // Byte 5 Location length / data type
985             // Bits 0-4 Number of segments in location (0=1 segment)
986             new CaddxProperty("", 5, 1, 0, 5, CaddxPropertyType.BIT, "Number of segments in location (0=1 segment)",
987                     false),
988             // Bits 5-7 Data type : 5=unused
989             new CaddxProperty("", 5, 1, 5, 3, CaddxPropertyType.BIT,
990                     "Data type: 0=Binary, 1=Decimal, 2=Hexadecimal, 3=ASCII, 4=unused, 5=unused, 6=unused, 7=unused",
991                     false),
992             // Byte 6 Data byte 1 to store
993             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Data byte 1 to store", false),
994             // Byte 7 Data byte 2 to store
995             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Data byte 2 to store", false),
996             // Byte 8 Data byte 3 to store
997             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "Data byte 3 to store", false),
998             // Byte 9 Data byte 4 to store
999             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "Data byte 4 to store", false),
1000             // Byte 10 Data byte 5 to store
1001             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "Data byte 5 to store", false),
1002             // Byte 11 Data byte 6 to store
1003             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "Data byte 6 to store", false),
1004             // Byte 12 Data byte 7 to store
1005             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "Data byte 7 to store", false),
1006             // Byte 13 Data byte 8 to store
1007             new CaddxProperty("", 13, 1, 0, 0, CaddxPropertyType.INT, "Data byte 8 to store", false)),
1008
1009     USER_INFORMATION_REQUEST_WITH_PIN(0x32, new int[] { 0x12, 0x1c, 0x1f }, 5, "User Information Request with PIN",
1010             "This message will contain a user number for which information is being requested and a PIN that will be checked for Master capability before proceeding. The information will be returned in a User Information Reply message (12h).",
1011             CaddxDirection.OUT, CaddxSource.NONE,
1012
1013             // Properties
1014             // Byte 1 Message number
1015             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1016             // Byte 2 (Master) PIN digits 1 & 2
1017             // Bits 0-3 PIN digit 1
1018             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1019             // Bits 4-7 PIN digit 2
1020             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1021             // Byte 3 (Master) PIN digits 3 & 4
1022             // Bits 0-3 PIN digit 3
1023             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1024             // Bits 4-7 PIN digit 4
1025             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1026             // Byte 4 (Master) PIN digits 5 & 6
1027             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1028             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1029             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1030             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1031             // Byte 5 User number (1=user 1)
1032             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false)),
1033
1034     USER_INFORMATION_REQUEST_WITHOUT_PIN(0x33, new int[] { 0x12, 0x1c, 0x1f }, 2,
1035             "User Information Request without PIN",
1036             "This message will contain a user number for which information is being requested, no authentication will be performed. The information will be returned in a User Information Reply message (12h).",
1037             CaddxDirection.OUT, CaddxSource.NONE,
1038
1039             // Properties
1040             // Byte 1 Message number
1041             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1042             // Byte 2 User number (1=user 1)
1043             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false)),
1044
1045     SET_USER_CODE_COMMAND_WITH_PIN(0x34, new int[] { 0x12, 0x1c, 0x1f }, 8, "Set User Code Command with PIN",
1046             "This message will contain all digits that should be stored as the new code for the designated User number. A PIN will be checked for Master capability before proceeding. A successful programming of the user code will result in the User Information Reply (12h) returned in place of the acknowledge.",
1047             CaddxDirection.OUT, CaddxSource.NONE,
1048
1049             // Properties
1050             // Byte 1 Message number
1051             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1052             // Byte 2 (Master) PIN digits 1 & 2
1053             // Bits 0-3 PIN digit 1
1054             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1055             // Bits 4-7 PIN digit 2
1056             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1057             // Byte 3 (Master) PIN digits 3 & 4
1058             // Bits 0-3 PIN digit 3
1059             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1060             // Bits 4-7 PIN digit 4
1061             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1062             // Byte 4 (Master) PIN digits 5 & 6
1063             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1064             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1065             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1066             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1067             // Byte 5 User number (1=user 1)
1068             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1069             // Byte 6 PIN digits 1 & 2
1070             // Bits 0-3 PIN digit 1
1071             new CaddxProperty("", 6, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1072             // Bits 4-7 PIN digit 2
1073             new CaddxProperty("", 6, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1074             // Byte 7 PIN digits 3 & 4
1075             // Bits 0-3 PIN digit 3
1076             new CaddxProperty("", 7, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1077             // Bits 4-7 PIN digit 4
1078             new CaddxProperty("", 7, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1079             // Byte 8 PIN digits 5 & 6
1080             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1081             new CaddxProperty("", 8, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1082             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1083             new CaddxProperty("", 8, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false)),
1084
1085     SET_USER_CODE_COMMAND_WITHOUT_PIN(0x35, new int[] { 0x12, 0x1c, 0x1f }, 5, "Set User Code Command without PIN",
1086             "This message will contain all digits that should be stored as the new code for the designated User number. No authentication will be performed. A successful programming of the user code will result in the User Information Reply (12h) returned in place of the acknowledge.",
1087             CaddxDirection.OUT, CaddxSource.NONE,
1088
1089             // Properties
1090             // Byte 1 Message number
1091             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1092             // Byte 2 User number (1=user 1)
1093             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1094             // Byte 3 PIN digits 1 & 2
1095             // Bits 0-3 PIN digit 1
1096             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1097             // Bits 4-7 PIN digit 2
1098             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1099             // Byte 4 PIN digits 3 & 4
1100             // Bits 0-3 PIN digit 3
1101             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1102             // Bits 4-7 PIN digit 4
1103             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1104             // Byte 5 PIN digits 5 & 6
1105             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1106             new CaddxProperty("", 5, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1107             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1108             new CaddxProperty("", 5, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false)),
1109
1110     SET_USER_AUTHORIZATION_COMMAND_WITH_PIN(0x36, new int[] { 0x1d, 0x1c, 0x1f }, 7,
1111             "Set User Authorization Command with PIN",
1112             "This message will contain all attributes and partitions that should be stored as the new information for the designated User number. A PIN will be checked for Master capability before proceeding.",
1113             CaddxDirection.OUT, CaddxSource.NONE,
1114
1115             // Properties
1116             // Byte 1 Message number
1117             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1118
1119             // Byte 2 (Master) PIN digits 1 & 2
1120             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1121             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1122
1123             // Byte 3 (Master) PIN digits 3 & 4
1124             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1125             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1126
1127             // Byte 4 (Master) PIN digits 5 & 6
1128             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1129             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1130
1131             // Byte 5 User number (1=user 1)
1132             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1133
1134             // Byte 6 Authority flags
1135             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT,
1136                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
1137             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT,
1138                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
1139             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT,
1140                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
1141             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT,
1142                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
1143             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT,
1144                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
1145             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT,
1146                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
1147             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT,
1148                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
1149                     false),
1150             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT,
1151                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
1152
1153             // Byte 7 Authorized partition(s) mask
1154             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
1155             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
1156             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
1157             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
1158             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
1159             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
1160             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
1161             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
1162
1163     SET_USER_AUTHORIZATION_COMMAND_WITHOUT_PIN(0x37, new int[] { 0x1d, 0x1c, 0x1f }, 4,
1164             "Set User Authorization Command without PIN",
1165             "This message will contain all attributes and partitions that should be stored as the new information for the designated User number. No authentication will be performed.",
1166             CaddxDirection.OUT, CaddxSource.NONE,
1167
1168             // Properties
1169             // Byte 1 Message number
1170             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1171
1172             // Byte 2 User number (1=user 1)
1173             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1174
1175             // Byte 3 Authority flags
1176             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT,
1177                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
1178             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT,
1179                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
1180             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT,
1181                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
1182             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT,
1183                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
1184             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT,
1185                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
1186             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT,
1187                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
1188             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT,
1189                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
1190                     false),
1191             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT,
1192                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
1193
1194             // Byte 4 Authorized partition(s) mask
1195             new CaddxProperty("", 4, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
1196             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
1197             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
1198             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
1199             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
1200             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
1201             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
1202             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
1203
1204     STORE_COMMUNICATION_EVENT_COMMAND(0x3a, new int[] { 0x1d, 0x1c, 0x1f }, 6, "Store Communication Event Command",
1205             "This message will submit an event to the control’s communication stack for possible transmission over its telephone or alternate communications path.",
1206             CaddxDirection.OUT, CaddxSource.NONE),
1207
1208     SET_CLOCK_CALENDAR_COMMAND(0x3b, new int[] { 0x1d, 0x1c, 0x1f }, 7, "Set Clock / Calendar Command",
1209             "This message will set the clock / calendar in the system.", CaddxDirection.OUT, CaddxSource.NONE,
1210
1211             // Properties
1212             // Byte 1 Message number
1213             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1214
1215             // Byte 2 Year (00-99)
1216             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Year (00-99)", false),
1217
1218             // Byte 3 Month (1-12)
1219             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Month (1-12)", false),
1220
1221             // Byte 4 Day (1-31)
1222             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Day (1-31)", false),
1223
1224             // Byte 5 Hour (0-23)
1225             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "Hour (0-23)", false),
1226
1227             // Byte 6 Minute (0-59)
1228             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Minute (0-59)", false),
1229
1230             // Byte 7 Day
1231             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Day", false)),
1232
1233     PRIMARY_KEYPAD_FUNCTION_WITH_PIN(0x3c, new int[] { 0x1d, 0x1c, 0x1f }, 6, "Primary Keypad Function with PIN",
1234             "This message will contain a value that defines with function to perform, the partitions to use and a PIN value for the validation.",
1235             CaddxDirection.OUT, CaddxSource.NONE,
1236
1237             // Properties
1238             // Byte 1 Message number
1239             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1240
1241             // Byte 2 PIN digits 1 & 2
1242             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1243             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1244
1245             // Byte 3 PIN digits 3 & 4
1246             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1247             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1248
1249             // Byte 4 PIN digits 5 & 6
1250             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1251             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1252
1253             // Byte 5 Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm
1254             // in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode,
1255             // 08h-FFh Reserved]
1256             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT,
1257                     "Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode, 08h-FFh Reserved]",
1258                     false),
1259
1260             // Byte 6 Partition mask
1261             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1 (if PIN has access)",
1262                     false),
1263             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2 (if PIN has access)",
1264                     false),
1265             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3 (if PIN has access)",
1266                     false),
1267             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4 (if PIN has access)",
1268                     false),
1269             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5 (if PIN has access)",
1270                     false),
1271             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6 (if PIN has access)",
1272                     false),
1273             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7 (if PIN has access)",
1274                     false),
1275             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8 (if PIN has access)",
1276                     false)),
1277
1278     PRIMARY_KEYPAD_FUNCTION_WITHOUT_PIN(0x3d, new int[] { 0x1d, 0x1c, 0x1f }, 4, "Primary Keypad Function without PIN",
1279             "This message will contain a value that defines with function to perform, the partitions and user number to assign to the function.",
1280             CaddxDirection.OUT, CaddxSource.NONE,
1281
1282             // Properties
1283             // Byte 1 Message number
1284             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1285
1286             // Byte 2 "Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm
1287             // in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode,
1288             // 08h-FFh Reserved]",
1289             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT,
1290                     "Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode, 08h-FFh Reserved]",
1291                     false),
1292
1293             // Byte 3 Partition mask
1294             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1 (if PIN has access)",
1295                     false),
1296             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2 (if PIN has access)",
1297                     false),
1298             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3 (if PIN has access)",
1299                     false),
1300             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4 (if PIN has access)",
1301                     false),
1302             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5 (if PIN has access)",
1303                     false),
1304             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6 (if PIN has access)",
1305                     false),
1306             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7 (if PIN has access)",
1307                     false),
1308             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8 (if PIN has access)",
1309                     false),
1310
1311             // Byte 4 User number
1312             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "User number", false)),
1313
1314     SECONDARY_KEYPAD_FUNCTION(0x3e, new int[] { 0x1d, 0x1c, 0x1f }, 3, "Secondary Keypad Function",
1315             "This message will contain a value that defines with function to perform, and the partitions to use.",
1316             CaddxDirection.OUT, CaddxSource.NONE,
1317
1318             // Properties
1319             // Byte 1 Message number
1320             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1321
1322             // Byte 2 "Keypad function [00h Stay (1 button arm / toggle interiors), 01h Chime (toggle chime mode),
1323             // 02h Exit (1 button arm / toggle instant), 03h Bypass interiors, 04h Fire panic, 05h Medical panic,
1324             // 06h Police panic, 07h Smoke detector reset, 08h Auto callback download, 09h Manual pickup download,
1325             // 0Ah Enable silent exit (for this arm cycle), 0Bh Perform test, 0Ch Group bypass, 0Dh Auxiliary
1326             // function 1, 0Eh Auxiliary function 2, 0Fh Start keypad sounder, 10h-FFh Reserved]",
1327             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT,
1328                     "Keypad function [00h Stay (1 button arm / toggle interiors), 01h Chime (toggle chime mode), 02h Exit (1 button arm / toggle instant), 03h Bypass interiors, 04h Fire panic, 05h Medical panic, 06h Police panic, 07h Smoke detector reset, 08h Auto callback download, 09h Manual pickup download, 0Ah Enable silent exit (for this arm cycle), 0Bh Perform test, 0Ch Group bypass, 0Dh Auxiliary function 1, 0Eh Auxiliary function 2, 0Fh Start keypad sounder, 10h-FFh Reserved]",
1329                     false),
1330
1331             // Byte 3 Partition mask
1332             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1", false),
1333             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2", false),
1334             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3", false),
1335             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4", false),
1336             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5", false),
1337             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6", false),
1338             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7", false),
1339             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8", false)),
1340
1341     ZONE_BYPASS_TOGGLE(0x3f, new int[] { 0x1d, 0x1c, 0x1f }, 2, "Zone Bypass Toggle",
1342             "This message will contain a number of a zone that should be (un)bypassed.", CaddxDirection.OUT,
1343             CaddxSource.NONE,
1344
1345             // Properties
1346             // Byte 1 Message number
1347             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1348
1349             // Byte 2 Zone number (0= zone 1)
1350             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", false));
1351
1352     public final String name;
1353     public final String description;
1354     public final int number;
1355     public final int @Nullable [] replyMessageNumbers;
1356     public final int length;
1357     public final CaddxDirection direction;
1358     public final CaddxSource source;
1359     public final CaddxProperty[] properties;
1360
1361     CaddxMessageType(int number, int @Nullable [] replyMessageNumbers, int length, String name, String description,
1362             CaddxDirection direction, CaddxSource source, CaddxProperty... properties) {
1363         this.name = name;
1364         this.description = description;
1365         this.direction = direction;
1366         this.source = source;
1367         this.number = number;
1368         this.replyMessageNumbers = replyMessageNumbers;
1369         this.length = length;
1370         this.properties = properties;
1371     }
1372
1373     private static final Map<Integer, CaddxMessageType> BY_MESSAGE_TYPE = new HashMap<>();
1374
1375     static {
1376         for (CaddxMessageType mt : values()) {
1377             BY_MESSAGE_TYPE.put(mt.number, mt);
1378         }
1379     }
1380
1381     public static @Nullable CaddxMessageType valueOfMessageType(int number) {
1382         return BY_MESSAGE_TYPE.get(number);
1383     }
1384 }