]> git.basschouten.com Git - openhab-addons.git/blob
94f37e8d6063ecb73ffff285e12fb71f6d43c894
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Zone 1 faulted (or delayed trip)", false),
201             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Zone 1 bypass (or inhibited)", false),
202             new CaddxProperty("zone_1_trouble", 3, 1, 2, 1, CaddxPropertyType.BIT,
203                     "Zone 1 trouble (tamper, low battery, or lost)", false),
204             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Zone 1 alarm memory", false),
205             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Zone 2 faulted (or delayed trip)", false),
206             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Zone 2 bypass (or inhibited)", false),
207             new CaddxProperty("zone_2_trouble", 3, 1, 6, 1, CaddxPropertyType.BIT,
208                     "Zone 2 trouble (tamper, low battery, or lost)", false),
209             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Zone 2 alarm memory", false),
210
211             // Byte 4 Zone 3 & 4 status flags (see byte 3)
212             new CaddxProperty("", 4, 1, 0, 1, CaddxPropertyType.BIT, "Zone 3 faulted (or delayed trip)", false),
213             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Zone 3 bypass (or inhibited)", false),
214             new CaddxProperty("zone_3_trouble", 4, 1, 2, 1, CaddxPropertyType.BIT,
215                     "Zone 3 trouble (tamper, low battery, or lost)", false),
216             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Zone 3 alarm memory", false),
217             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Zone 4 faulted (or delayed trip)", false),
218             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Zone 4 bypass (or inhibited)", false),
219             new CaddxProperty("zone_4_trouble", 4, 1, 6, 1, CaddxPropertyType.BIT,
220                     "Zone 4 trouble (tamper, low battery, or lost)", false),
221             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "Zone 4 alarm memory", false),
222
223             // Byte 5 Zone 5 & 6 status flags (see byte 3)
224             new CaddxProperty("", 5, 1, 0, 1, CaddxPropertyType.BIT, "Zone 5 faulted (or delayed trip)", false),
225             new CaddxProperty("", 5, 1, 1, 1, CaddxPropertyType.BIT, "Zone 5 bypass (or inhibited)", false),
226             new CaddxProperty("zone_5_trouble", 5, 1, 2, 1, CaddxPropertyType.BIT,
227                     "Zone 5 trouble (tamper, low battery, or lost)", false),
228             new CaddxProperty("", 5, 1, 3, 1, CaddxPropertyType.BIT, "Zone 5 alarm memory", false),
229             new CaddxProperty("", 5, 1, 4, 1, CaddxPropertyType.BIT, "Zone 6 faulted (or delayed trip)", false),
230             new CaddxProperty("", 5, 1, 5, 1, CaddxPropertyType.BIT, "Zone 6 bypass (or inhibited)", false),
231             new CaddxProperty("zone_6_trouble", 5, 1, 6, 1, CaddxPropertyType.BIT,
232                     "Zone 6 trouble (tamper, low battery, or lost)", false),
233             new CaddxProperty("", 5, 1, 7, 1, CaddxPropertyType.BIT, "Zone 6 alarm memory", false),
234
235             // Byte 6 Zone 7 & 8 status flags (see byte 3)
236             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT, "Zone 7 faulted (or delayed trip)", false),
237             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Zone 7 bypass (or inhibited)", false),
238             new CaddxProperty("zone_7_trouble", 6, 1, 2, 1, CaddxPropertyType.BIT,
239                     "Zone 7 trouble (tamper, low battery, or lost)", false),
240             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Zone 7 alarm memory", false),
241             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Zone 8 faulted (or delayed trip)", false),
242             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Zone 8 bypass (or inhibited)", false),
243             new CaddxProperty("zone_8_trouble", 6, 1, 6, 1, CaddxPropertyType.BIT,
244                     "Zone 8 trouble (tamper, low battery, or lost)", false),
245             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Zone 8 alarm memory", false),
246
247             // Byte 7 Zone 9 & 10 status flags (see byte 3)
248             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Zone 9 faulted (or delayed trip)", false),
249             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Zone 9 bypass (or inhibited)", false),
250             new CaddxProperty("zone_9_trouble", 7, 1, 2, 1, CaddxPropertyType.BIT,
251                     "Zone 9 trouble (tamper, low battery, or lost)", false),
252             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Zone 9 alarm memory", false),
253             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Zone 10 faulted (or delayed trip)", false),
254             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Zone 10 bypass (or inhibited)", false),
255             new CaddxProperty("zone_10_trouble", 7, 1, 6, 1, CaddxPropertyType.BIT,
256                     "Zone 10 trouble (tamper, low battery, or lost)", false),
257             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Zone 10 alarm memory", false),
258
259             // Byte 8 Zone 11 & 12 status flags (see byte 3)
260             new CaddxProperty("", 8, 1, 0, 1, CaddxPropertyType.BIT, "Zone 11 faulted (or delayed trip)", false),
261             new CaddxProperty("", 8, 1, 1, 1, CaddxPropertyType.BIT, "Zone 11 bypass (or inhibited)", false),
262             new CaddxProperty("zone_11_trouble", 8, 1, 2, 1, CaddxPropertyType.BIT,
263                     "Zone 11 trouble (tamper, low battery, or lost)", false),
264             new CaddxProperty("", 8, 1, 3, 1, CaddxPropertyType.BIT, "Zone 11 alarm memory", false),
265             new CaddxProperty("", 8, 1, 4, 1, CaddxPropertyType.BIT, "Zone 12 faulted (or delayed trip)", false),
266             new CaddxProperty("", 8, 1, 5, 1, CaddxPropertyType.BIT, "Zone 12 bypass (or inhibited)", false),
267             new CaddxProperty("zone_12_trouble", 8, 1, 6, 1, CaddxPropertyType.BIT,
268                     "Zone 12 trouble (tamper, low battery, or lost)", false),
269             new CaddxProperty("", 8, 1, 7, 1, CaddxPropertyType.BIT, "Zone 12 alarm memory", false),
270
271             // Byte 9 Zone 13 & 14 status flags (see byte 3)
272             new CaddxProperty("", 9, 1, 0, 1, CaddxPropertyType.BIT, "Zone 13 faulted (or delayed trip)", false),
273             new CaddxProperty("", 9, 1, 1, 1, CaddxPropertyType.BIT, "Zone 13 bypass (or inhibited)", false),
274             new CaddxProperty("zone_13_trouble", 9, 1, 2, 1, CaddxPropertyType.BIT,
275                     "Zone 13 trouble (tamper, low battery, or lost)", false),
276             new CaddxProperty("", 9, 1, 3, 1, CaddxPropertyType.BIT, "Zone 13 alarm memory", false),
277             new CaddxProperty("", 9, 1, 4, 1, CaddxPropertyType.BIT, "Zone 14 faulted (or delayed trip)", false),
278             new CaddxProperty("", 9, 1, 5, 1, CaddxPropertyType.BIT, "Zone 14 bypass (or inhibited)", false),
279             new CaddxProperty("zone_14_trouble", 9, 1, 6, 1, CaddxPropertyType.BIT,
280                     "Zone 14 trouble (tamper, low battery, or lost)", false),
281             new CaddxProperty("", 9, 1, 7, 1, CaddxPropertyType.BIT, "Zone 14 alarm memory", false),
282
283             // Byte 10 Zone 15 & 16 status flags (see byte 3)
284             new CaddxProperty("", 10, 1, 0, 1, CaddxPropertyType.BIT, "Zone 15 faulted (or delayed trip)", false),
285             new CaddxProperty("", 10, 1, 1, 1, CaddxPropertyType.BIT, "Zone 15 bypass (or inhibited)", false),
286             new CaddxProperty("zone_15_trouble", 10, 1, 2, 1, CaddxPropertyType.BIT,
287                     "Zone 15 trouble (tamper, low battery, or lost)", false),
288             new CaddxProperty("", 10, 1, 3, 1, CaddxPropertyType.BIT, "Zone 15 alarm memory", false),
289             new CaddxProperty("", 10, 1, 4, 1, CaddxPropertyType.BIT, "Zone 16 faulted (or delayed trip)", false),
290             new CaddxProperty("", 10, 1, 5, 1, CaddxPropertyType.BIT, "Zone 16 bypass (or inhibited)", false),
291             new CaddxProperty("zone_16_trouble", 10, 1, 6, 1, CaddxPropertyType.BIT,
292                     "Zone 16 trouble (tamper, low battery, or lost)", false),
293             new CaddxProperty("", 10, 1, 7, 1, CaddxPropertyType.BIT, "Zone 16 alarm memory", false)),
294
295     PARTITION_STATUS_MESSAGE(0x06, null, 9, "Partition Status Message",
296             "This message will contain all information relevant to a single partition in the system.",
297             CaddxDirection.IN, CaddxSource.PARTITION,
298
299             // Properties
300             // Byte 1
301             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
302
303             new CaddxProperty("partition_number", 2, 1, 0, 0, CaddxPropertyType.INT,
304                     "Partition number (0= partition 1)", false),
305
306             // Byte 3 Partition condition flags (1)
307             new CaddxProperty("partition_bypass_code_required", 3, 1, 0, 1, CaddxPropertyType.BIT,
308                     "Bypass code required", false),
309             new CaddxProperty("partition_fire_trouble", 3, 1, 1, 1, CaddxPropertyType.BIT, "Fire trouble", false),
310             new CaddxProperty("partition_fire", 3, 1, 2, 1, CaddxPropertyType.BIT, "Fire", false),
311             new CaddxProperty("partition_pulsing_buzzer", 3, 1, 3, 1, CaddxPropertyType.BIT, "Pulsing Buzzer", false),
312             new CaddxProperty("partition_tlm_fault_memory", 3, 1, 4, 1, CaddxPropertyType.BIT, "TLM fault memory",
313                     false),
314             new CaddxProperty("partition_armed", 3, 1, 6, 1, CaddxPropertyType.BIT, "Armed", false),
315             new CaddxProperty("partition_instant", 3, 1, 7, 1, CaddxPropertyType.BIT, "Instant", false),
316
317             // Byte 4 Partition condition flags (2)
318             new CaddxProperty("partition_previous_alarm", 4, 1, 0, 1, CaddxPropertyType.BIT, "Previous Alarm", false),
319             new CaddxProperty("partition_siren_on", 4, 1, 1, 1, CaddxPropertyType.BIT, "Siren on", false),
320             new CaddxProperty("partition_steady_siren_on", 4, 1, 2, 1, CaddxPropertyType.BIT, "Steady siren on", false),
321             new CaddxProperty("partition_alarm_memory", 4, 1, 3, 1, CaddxPropertyType.BIT, "Alarm memory", false),
322             new CaddxProperty("partition_tamper", 4, 1, 4, 1, CaddxPropertyType.BIT, "Tamper", false),
323             new CaddxProperty("partition_cancel_command_entered", 4, 1, 5, 1, CaddxPropertyType.BIT,
324                     "Cancel command entered", false),
325             new CaddxProperty("partition_code_entered", 4, 1, 6, 1, CaddxPropertyType.BIT, "Code entered", false),
326             new CaddxProperty("partition_cancel_pending", 4, 1, 7, 1, CaddxPropertyType.BIT, "Cancel pending", false),
327
328             // Byte 5 Partition condition flags (3)
329             new CaddxProperty("partition_silent_exit_enabled", 5, 1, 1, 1, CaddxPropertyType.BIT, "Silent exit enabled",
330                     false),
331             new CaddxProperty("partition_entryguard", 5, 1, 2, 1, CaddxPropertyType.BIT, "Entryguard (stay mode)",
332                     false),
333             new CaddxProperty("partition_chime_mode_on", 5, 1, 3, 1, CaddxPropertyType.BIT, "Chime mode on", false),
334             new CaddxProperty("partition_entry", 5, 1, 4, 1, CaddxPropertyType.BIT, "Entry", false),
335             new CaddxProperty("partition_delay_expiration_warning", 5, 1, 5, 1, CaddxPropertyType.BIT,
336                     "Delay expiration warning", false),
337             new CaddxProperty("partition_exit1", 5, 1, 6, 1, CaddxPropertyType.BIT, "Exit1", false),
338             new CaddxProperty("partition_exit2", 5, 1, 7, 1, CaddxPropertyType.BIT, "Exit2", false),
339
340             // Byte 6 Partition condition flags (4)
341             new CaddxProperty("partition_led_extinguish", 6, 1, 0, 1, CaddxPropertyType.BIT, "LED extinguish", false),
342             new CaddxProperty("partition_cross_timing", 6, 1, 1, 1, CaddxPropertyType.BIT, "Cross timing", false),
343             new CaddxProperty("partition_recent_closing_being_timed", 6, 1, 2, 1, CaddxPropertyType.BIT,
344                     "Recent closing being timed", false),
345             new CaddxProperty("partition_exit_error_triggered", 6, 1, 4, 1, CaddxPropertyType.BIT,
346                     "Exit error triggered", false),
347             new CaddxProperty("partition_auto_home_inhibited", 6, 1, 5, 1, CaddxPropertyType.BIT, "Auto home inhibited",
348                     false),
349             new CaddxProperty("partition_sensor_low_battery", 6, 1, 6, 1, CaddxPropertyType.BIT, "Sensor low battery",
350                     false),
351             new CaddxProperty("partition_sensor_lost_supervision", 6, 1, 7, 1, CaddxPropertyType.BIT,
352                     "Sensor lost supervision", false),
353
354             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Last user number", false),
355
356             // Byte 8 Partition condition flags (5)
357             new CaddxProperty("partition_zone_bypassed", 8, 1, 0, 1, CaddxPropertyType.BIT, "Zone bypassed", false),
358             new CaddxProperty("partition_force_arm_triggered_by_auto_arm", 8, 1, 1, 1, CaddxPropertyType.BIT,
359                     "Force arm triggered by auto arm", false),
360             new CaddxProperty("partition_ready_to_arm", 8, 1, 2, 1, CaddxPropertyType.BIT, "Ready to arm", false),
361             new CaddxProperty("partition_ready_to_force_arm", 8, 1, 3, 1, CaddxPropertyType.BIT, "Ready to force arm",
362                     false),
363             new CaddxProperty("partition_valid_pin_accepted", 8, 1, 4, 1, CaddxPropertyType.BIT, "Valid PIN accepted",
364                     false),
365             new CaddxProperty("partition_chime_on", 8, 1, 5, 1, CaddxPropertyType.BIT, "Chime on (sounding)", false),
366             new CaddxProperty("partition_error_beep", 8, 1, 6, 1, CaddxPropertyType.BIT, "Error beep (triple beep)",
367                     false),
368             new CaddxProperty("partition_tone_on", 8, 1, 7, 1, CaddxPropertyType.BIT, "Tone on (activation tone)",
369                     false),
370
371             // Byte 9 Partition condition flags (6)
372             new CaddxProperty("partition_entry1", 9, 1, 0, 1, CaddxPropertyType.BIT, "Entry 1", false),
373             new CaddxProperty("partition_open_period", 9, 1, 1, 1, CaddxPropertyType.BIT, "Open period", false),
374             new CaddxProperty("partition_alarm_sent_using_phone_number_1", 9, 1, 2, 1, CaddxPropertyType.BIT,
375                     "Alarm sent using phone number 1", false),
376             new CaddxProperty("partition_alarm_sent_using_phone_number_2", 9, 1, 3, 1, CaddxPropertyType.BIT,
377                     "Alarm sent using phone number 2", false),
378             new CaddxProperty("partition_alarm_sent_using_phone_number_3", 9, 1, 4, 1, CaddxPropertyType.BIT,
379                     "Alarm sent using phone number 3", false),
380             new CaddxProperty("partition_cancel_report_is_in_the_stack", 9, 1, 5, 1, CaddxPropertyType.BIT,
381                     "Cancel report is in the stack", false),
382             new CaddxProperty("partition_keyswitch_armed", 9, 1, 6, 1, CaddxPropertyType.BIT, "Keyswitch armed", false),
383             new CaddxProperty("partition_delay_trip_in_progress", 9, 1, 7, 1, CaddxPropertyType.BIT,
384                     "Delay Trip in progress (common zone)", false)),
385
386     PARTITIONS_SNAPSHOT_MESSAGE(0x07, null, 9, "Partitions Snapshot Message",
387             "This message will contain an abbreviated set of information for all 8 partitions on the system.",
388             CaddxDirection.IN, CaddxSource.PANEL,
389
390             // Properties
391             // Byte 1
392             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
393
394             // Byte 2 Partition 1 condition flags
395             new CaddxProperty("partition_1_valid", 2, 1, 0, 1, CaddxPropertyType.BIT, "Partition 1 valid partition",
396                     false),
397             new CaddxProperty("", 2, 1, 1, 1, CaddxPropertyType.BIT, "Partition 1 ready", false),
398             new CaddxProperty("", 2, 1, 2, 1, CaddxPropertyType.BIT, "Partition 1 armed", false),
399             new CaddxProperty("", 2, 1, 3, 1, CaddxPropertyType.BIT, "Partition 1 stay mode", false),
400             new CaddxProperty("", 2, 1, 4, 1, CaddxPropertyType.BIT, "Partition 1 chime mode", false),
401             new CaddxProperty("", 2, 1, 5, 1, CaddxPropertyType.BIT, "Partition 1 any entry delay", false),
402             new CaddxProperty("", 2, 1, 6, 1, CaddxPropertyType.BIT, "Partition 1 any exit delay", false),
403             new CaddxProperty("", 2, 1, 7, 1, CaddxPropertyType.BIT, "Partition 1 previous alarm", false),
404
405             // Byte 3 Partition 2 condition flags
406             new CaddxProperty("partition_2_valid", 3, 1, 0, 1, CaddxPropertyType.BIT, "Partition 2 valid partition",
407                     false),
408             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Partition 2 ready", false),
409             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Partition 2 armed", false),
410             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Partition 2 stay mode", false),
411             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Partition 2 chime mode", false),
412             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Partition 2 any entry delay", false),
413             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Partition 2 any exit delay", false),
414             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Partition 2 previous alarm", false),
415
416             // Byte 4 Partition 3 condition flags
417             new CaddxProperty("partition_3_valid", 4, 1, 0, 1, CaddxPropertyType.BIT, "Partition 3 valid partition",
418                     false),
419             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Partition 3 ready", false),
420             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Partition 3 armed", false),
421             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Partition 3 stay mode", false),
422             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Partition 3 chime mode", false),
423             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Partition 3 any entry delay", false),
424             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Partition 3 any exit delay", false),
425             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "Partition 3 previous alarm", false),
426
427             // Byte 5 Partition 4 condition flags
428             new CaddxProperty("partition_4_valid", 5, 1, 0, 1, CaddxPropertyType.BIT, "Partition 4 valid partition",
429                     false),
430             new CaddxProperty("", 5, 1, 1, 1, CaddxPropertyType.BIT, "Partition 4 ready", false),
431             new CaddxProperty("", 5, 1, 2, 1, CaddxPropertyType.BIT, "Partition 4 armed", false),
432             new CaddxProperty("", 5, 1, 3, 1, CaddxPropertyType.BIT, "Partition 4 stay mode", false),
433             new CaddxProperty("", 5, 1, 4, 1, CaddxPropertyType.BIT, "Partition 4 chime mode", false),
434             new CaddxProperty("", 5, 1, 5, 1, CaddxPropertyType.BIT, "Partition 4 any entry delay", false),
435             new CaddxProperty("", 5, 1, 6, 1, CaddxPropertyType.BIT, "Partition 4 any exit delay", false),
436             new CaddxProperty("", 5, 1, 7, 1, CaddxPropertyType.BIT, "Partition 4 previous alarm", false),
437
438             // Byte 6 Partition 5 condition flags
439             new CaddxProperty("partition_5_valid", 6, 1, 0, 1, CaddxPropertyType.BIT, "Partition 5 valid partition",
440                     false),
441             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Partition 5 ready", false),
442             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "Partition 5 armed", false),
443             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Partition 5 stay mode", false),
444             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Partition 5 chime mode", false),
445             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Partition 5 any entry delay", false),
446             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Partition 5 any exit delay", false),
447             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Partition 5 previous alarm", false),
448
449             // Byte 7 Partition 6 condition flags
450             new CaddxProperty("partition_6_valid", 7, 1, 0, 1, CaddxPropertyType.BIT, "Partition 6 valid partition",
451                     false),
452             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Partition 6 ready", false),
453             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Partition 6 armed", false),
454             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Partition 6 stay mode", false),
455             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Partition 6 chime mode", false),
456             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Partition 6 any entry delay", false),
457             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Partition 6 any exit delay", false),
458             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Partition 6 previous alarm", false),
459
460             // Byte 8 Partition 7 condition flags
461             new CaddxProperty("partition_7_valid", 8, 1, 0, 1, CaddxPropertyType.BIT, "Partition 7 valid partition",
462                     false),
463             new CaddxProperty("", 8, 1, 1, 1, CaddxPropertyType.BIT, "Partition 7 ready", false),
464             new CaddxProperty("", 8, 1, 2, 1, CaddxPropertyType.BIT, "Partition 7 armed", false),
465             new CaddxProperty("", 8, 1, 3, 1, CaddxPropertyType.BIT, "Partition 7 stay mode", false),
466             new CaddxProperty("", 8, 1, 4, 1, CaddxPropertyType.BIT, "Partition 7 chime mode", false),
467             new CaddxProperty("", 8, 1, 5, 1, CaddxPropertyType.BIT, "Partition 7 any entry delay", false),
468             new CaddxProperty("", 8, 1, 6, 1, CaddxPropertyType.BIT, "Partition 7 any exit delay", false),
469             new CaddxProperty("", 8, 1, 7, 1, CaddxPropertyType.BIT, "Partition 7 previous alarm", false),
470
471             // Byte 9 Partition 8 condition flags
472             new CaddxProperty("partition_8_valid", 9, 1, 0, 1, CaddxPropertyType.BIT, "Partition 8 valid partition",
473                     false),
474             new CaddxProperty("", 9, 1, 1, 1, CaddxPropertyType.BIT, "Partition 8 ready", false),
475             new CaddxProperty("", 9, 1, 2, 1, CaddxPropertyType.BIT, "Partition 8 armed", false),
476             new CaddxProperty("", 9, 1, 3, 1, CaddxPropertyType.BIT, "Partition 8 stay mode", false),
477             new CaddxProperty("", 9, 1, 4, 1, CaddxPropertyType.BIT, "Partition 8 chime mode", false),
478             new CaddxProperty("", 9, 1, 5, 1, CaddxPropertyType.BIT, "Partition 8 any entry delay", false),
479             new CaddxProperty("", 9, 1, 6, 1, CaddxPropertyType.BIT, "Partition 8 any exit delay", false),
480             new CaddxProperty("", 9, 1, 8, 1, CaddxPropertyType.BIT, "Partition 8 previous alarm", false)),
481
482     SYSTEM_STATUS_MESSAGE(0x08, null, 12, "System Status Message",
483             "This message will contain all information relevant to the entire system.", CaddxDirection.IN,
484             CaddxSource.PANEL,
485
486             // Properties
487             // Byte 1
488             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
489
490             // Byte 2
491             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Panel ID number", false),
492
493             // Byte 3
494             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Line seizure", false),
495             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Off hook", false),
496             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Initial handshake received", false),
497             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Download in progress", false),
498             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Dialer delay in progress", false),
499             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Using backup phone", false),
500             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Listen in active", false),
501             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Two way lockout", false),
502
503             // Byte 4
504             new CaddxProperty("", 4, 1, 0, 1, CaddxPropertyType.BIT, "Ground fault", false),
505             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Phone fault", false),
506             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Fail to communicate", false),
507             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Fuse fault", false),
508             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Box tamper", false),
509             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Siren tamper / trouble", false),
510             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Low Battery", false),
511             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "AC fail", false),
512
513             // Byte 5
514             new CaddxProperty("", 5, 1, 0, 1, CaddxPropertyType.BIT, "Expander box tamper", false),
515             new CaddxProperty("", 5, 1, 1, 1, CaddxPropertyType.BIT, "Expander AC failure", false),
516             new CaddxProperty("", 5, 1, 2, 1, CaddxPropertyType.BIT, "Expander low battery", false),
517             new CaddxProperty("", 5, 1, 3, 1, CaddxPropertyType.BIT, "Expander loss of supervision", false),
518             new CaddxProperty("", 5, 1, 4, 1, CaddxPropertyType.BIT, "Expander auxiliary output over current", false),
519             new CaddxProperty("", 5, 1, 5, 1, CaddxPropertyType.BIT, "Auxiliary communication channel failure", false),
520             new CaddxProperty("", 5, 1, 6, 1, CaddxPropertyType.BIT, "Expander bell fault", false),
521
522             // Byte 6
523             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT, "6 digit PIN enabled", false),
524             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Programming token in use", false),
525             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "PIN required for local download", false),
526             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Global pulsing buzzer", false),
527             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Global Siren on", false),
528             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Global steady siren", false),
529             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Bus device has line seized", false),
530             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Bus device has requested sniff mode", false),
531
532             // Byte 7
533             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Dynamic battery test", false),
534             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "AC power on", false),
535             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Low battery memory", false),
536             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Ground fault memory", false),
537             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Fire alarm verification being timed", false),
538             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Smoke power reset", false),
539             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "50 Hz line power detected", false),
540             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Timing a high voltage battery charge", false),
541
542             // Byte 8
543             new CaddxProperty("", 8, 1, 0, 1, CaddxPropertyType.BIT, "Communication since last autotest", false),
544             new CaddxProperty("", 8, 1, 1, 1, CaddxPropertyType.BIT, "Power up delay in progress", false),
545             new CaddxProperty("", 8, 1, 2, 1, CaddxPropertyType.BIT, "Walk test mode", false),
546             new CaddxProperty("", 8, 1, 3, 1, CaddxPropertyType.BIT, "Loss of system time", false),
547             new CaddxProperty("", 8, 1, 4, 1, CaddxPropertyType.BIT, "Enroll requested", false),
548             new CaddxProperty("", 8, 1, 5, 1, CaddxPropertyType.BIT, "Test fixture mode", false),
549             new CaddxProperty("", 8, 1, 6, 1, CaddxPropertyType.BIT, "Control shutdown mode", false),
550             new CaddxProperty("", 8, 1, 7, 1, CaddxPropertyType.BIT, "Timing a cancel window", false),
551
552             // Byte 9
553             new CaddxProperty("", 9, 1, 7, 1, CaddxPropertyType.BIT, "Call back in progress", false),
554
555             // Byte 10
556             new CaddxProperty("", 10, 1, 0, 1, CaddxPropertyType.BIT, "Phone line faulted", false),
557             new CaddxProperty("", 10, 1, 1, 1, CaddxPropertyType.BIT, "Voltage present interrupt active", false),
558             new CaddxProperty("", 10, 1, 2, 1, CaddxPropertyType.BIT, "House phone off hook", false),
559             new CaddxProperty("", 10, 1, 3, 1, CaddxPropertyType.BIT, "Phone line monitor enabled", false),
560             new CaddxProperty("", 10, 1, 4, 1, CaddxPropertyType.BIT, "Sniffing", false),
561             new CaddxProperty("", 10, 1, 5, 1, CaddxPropertyType.BIT, "Last read was off hook", false),
562             new CaddxProperty("", 10, 1, 6, 1, CaddxPropertyType.BIT, "Listen in requested", false),
563             new CaddxProperty("", 10, 1, 7, 1, CaddxPropertyType.BIT, "Listen in trigger", false),
564
565             // Byte 11
566             new CaddxProperty("", 11, 1, 0, 1, CaddxPropertyType.BIT, "Valid partition 1", false),
567             new CaddxProperty("", 11, 1, 1, 1, CaddxPropertyType.BIT, "Valid partition 2", false),
568             new CaddxProperty("", 11, 1, 2, 1, CaddxPropertyType.BIT, "Valid partition 3", false),
569             new CaddxProperty("", 11, 1, 3, 1, CaddxPropertyType.BIT, "Valid partition 4", false),
570             new CaddxProperty("", 11, 1, 4, 1, CaddxPropertyType.BIT, "Valid partition 5", false),
571             new CaddxProperty("", 11, 1, 5, 1, CaddxPropertyType.BIT, "Valid partition 6", false),
572             new CaddxProperty("", 11, 1, 6, 1, CaddxPropertyType.BIT, "Valid partition 7", false),
573             new CaddxProperty("", 11, 1, 7, 1, CaddxPropertyType.BIT, "Valid partition 8", false),
574
575             // Byte 12 Communicator stack pointer
576             new CaddxProperty("panel_communicator_stack_pointer", 12, 1, 0, 0, CaddxPropertyType.INT,
577                     "Communicator stack pointer", false)),
578
579     X10_MESSAGE_RECEIVED(0x09, null, 4, "X-10 Message Received",
580             "This message contains information about an X-10 command that was requested by any device on the system bus.",
581             CaddxDirection.IN, CaddxSource.PANEL,
582
583             // Properties
584             // Byte 1
585             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
586
587             // Byte 2
588             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "House code (0=house A)", false),
589
590             // Byte 3
591             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Unit code (0=unit 1)", false),
592
593             // Byte 4
594             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "X-10 function code", false)),
595
596     LOG_EVENT_MESSAGE(0x0a, null, 10, "Log Event Message",
597             "This message will contain all information relating to an event in the log memory.", CaddxDirection.IN,
598             CaddxSource.PANEL,
599
600             // Properties
601             // Byte 1
602             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
603             // Byte 2
604             new CaddxProperty("panel_log_event_number", 2, 1, 0, 0, CaddxPropertyType.INT,
605                     "Event number of this message", false),
606             // Byte 3
607             new CaddxProperty("panel_log_event_size", 3, 1, 0, 0, CaddxPropertyType.INT,
608                     "Total log size (number of log entries allowed)", false),
609
610             // Byte 4
611             new CaddxProperty("panel_log_event_type", 4, 1, 0, 7, CaddxPropertyType.INT, "Event type", false),
612             // Bits 0-6 See type definitions in table that follows
613             // Bit 7 Non-reporting event if not set
614
615             // Byte 5
616             new CaddxProperty("panel_log_event_zud", 5, 1, 0, 0, CaddxPropertyType.INT, "Zone / User / Device number",
617                     false),
618             // Byte 6
619             new CaddxProperty("panel_log_event_partition", 6, 1, 0, 0, CaddxPropertyType.INT,
620                     "Partition number (0=partition 1, if relevant)", false),
621             // Byte 7
622             new CaddxProperty("panel_log_event_month", 7, 1, 0, 0, CaddxPropertyType.INT, "Month (1-12)", false),
623             // Byte 8
624             new CaddxProperty("panel_log_event_day", 8, 1, 0, 0, CaddxPropertyType.INT, "Day (1-31)", false),
625             // Byte 9
626             new CaddxProperty("panel_log_event_hour", 9, 1, 0, 0, CaddxPropertyType.INT, "Hour (0-23)", false),
627             // Byte 10
628             new CaddxProperty("panel_log_event_minute", 10, 1, 0, 0, CaddxPropertyType.INT, "Minute (0-59)", false)),
629
630     KEYPAD_MESSAGE_RECEIVED(0x0b, null, 3, "Keypad Message Received",
631             "This message contains a keystroke from a keypad that is in a Terminal Mode.", CaddxDirection.IN,
632             CaddxSource.KEYPAD,
633
634             // Properties
635             // Byte 1
636             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
637
638             // Byte 2
639             new CaddxProperty("", 1, 2, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
640
641             // Byte 3
642             new CaddxProperty("keypad_key_pressed", 1, 1, 0, 0, CaddxPropertyType.INT, "Key value", false)),
643
644     PROGRAM_DATA_REPLY(0x10, null, 13, "Program Data Reply",
645             "This message will contain a system device’s buss address, logical location, and program data that was previously requested (via Program Data Request (3Ch)).",
646             CaddxDirection.IN, CaddxSource.PANEL,
647
648             // Properties
649             // Byte 1
650             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
651
652             // Byte 2
653             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
654
655             // Byte 3 Upper logical location / offset
656             new CaddxProperty("", 3, 1, 0, 3, CaddxPropertyType.INT, "Bits 8-11 of logical location", false),
657             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.INT, "Segment size (0=byte, 1=nibble)", false),
658             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Must be 0", false),
659             new CaddxProperty("", 3, 1, 6, 6, CaddxPropertyType.INT, "Segment offset (0-none, 1=8 bytes)", false),
660             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
661
662             // Byte 4 Bits 0-7 of logical location
663             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false),
664
665             // Byte 5 Location length / data type
666             new CaddxProperty("", 5, 1, 0, 4, CaddxPropertyType.INT, "Number of segments in location (0=1 segment)",
667                     false),
668             new CaddxProperty("", 5, 1, 5, 7, CaddxPropertyType.INT,
669                     "Data type : 0=Binary 1=Decimal 2=Hexadecimal 3=ASCII 4=unused 5=unused 6=unused 7=unused", false),
670
671             // Byte 6 Data byte
672             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Data byte 0", false),
673             // Byte 7 Data byte
674             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Data byte 1", false),
675             // Byte 8 Data byte
676             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "Data byte 2", false),
677             // Byte 9 Data byte
678             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "Data byte 3", false),
679             // Byte 10 Data byte
680             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "Data byte 4", false),
681             // Byte 11 Data byte
682             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "Data byte 5", false),
683             // Byte 12 Data byte
684             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "Data byte 6", false),
685             // Byte 13 Data byte
686             new CaddxProperty("", 13, 1, 0, 0, CaddxPropertyType.INT, "Data byte 7", false)),
687
688     USER_INFORMATION_REPLY(0x12, null, 7, "User Information Reply",
689             "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)).",
690             CaddxDirection.IN, CaddxSource.PANEL,
691
692             // Properties
693             // Byte 1
694             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
695
696             // Byte 2
697             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User Number (1=user 1)", false),
698
699             // Byte 3 PIN digits 1 & 2
700             new CaddxProperty("", 3, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 1", false),
701             new CaddxProperty("", 3, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 2", false),
702
703             // Byte 4 PIN digits 3 & 4
704             new CaddxProperty("", 4, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 3", false),
705             new CaddxProperty("", 4, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 4", false),
706
707             // Byte 5 PIN digits 5 & 6
708             new CaddxProperty("", 5, 1, 0, 3, CaddxPropertyType.INT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
709             new CaddxProperty("", 5, 1, 4, 7, CaddxPropertyType.INT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
710
711             // Byte 6* Authority flags
712             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT,
713                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
714             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT,
715                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
716             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT,
717                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
718             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT,
719                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
720             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT,
721                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
722             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT,
723                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
724             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT,
725                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
726                     false),
727             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT,
728                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
729
730             // Byte 7 Authorized partition(s) mask
731             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
732             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
733             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
734             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
735             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
736             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
737             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
738             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
739
740     REQUEST_FAILED(0x1c, null, 1, "Command / Request Failed",
741             "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.",
742             CaddxDirection.IN, CaddxSource.PANEL,
743
744             // Properties
745             // Byte 1
746             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
747
748     POSITIVE_ACKNOWLEDGE(0x1d, null, 1, "Positive Acknowledge",
749             "This message will acknowledge receipt of a message that had the â€˜Acknowledge Required’ flag set in the command byte.",
750             CaddxDirection.IN, CaddxSource.PANEL,
751             // Properties
752             // Byte 1
753             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
754
755     NEGATIVE_ACKNOWLEDGE(0x1e, null, 1, "Negative Acknowledge",
756             "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.",
757             CaddxDirection.IN, CaddxSource.PANEL,
758
759             // Properties
760             // Byte 1
761             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
762
763     MESSAGE_REJECTED(0x1f, null, 1, "Message Rejected",
764             "This message is sent in place of a â€˜Positive Acknowledge’ message when the message was received properly formatted, but not supported or disabled.",
765             CaddxDirection.IN, CaddxSource.PANEL,
766
767             // Properties
768             // Byte 1
769             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
770
771     INTERFACE_CONFIGURATION_REQUEST(0x21, new int[] { 0x01, 0x1c, 0x1f }, 1, "Interface Configuration Request",
772             "This request will cause the return of the Interface Configuration Message (01h) containing information about the options selected on the interface.",
773             CaddxDirection.OUT, CaddxSource.NONE,
774
775             // Properties
776             // Byte 1
777             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
778
779     ZONE_NAME_REQUEST(0x23, new int[] { 0x03, 0x1c, 0x1f }, 2, "Zone Name Request",
780             "This request will cause the return of the Zone Name Message (03h) for the zone number that was requested.",
781             CaddxDirection.OUT, CaddxSource.NONE,
782
783             // Properties
784             // Byte 1
785             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
786
787             // Byte 2
788             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", true)),
789
790     ZONE_STATUS_REQUEST(0x24, new int[] { 0x04, 0x1c, 0x1f }, 2, "Zone Status Request",
791             "This request will cause the return of the Zone Status Message (04h) for the zone number that was requested.",
792             CaddxDirection.OUT, CaddxSource.NONE,
793
794             // Properties
795             // Byte 1
796             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
797
798             // Byte 2
799             new CaddxProperty("zone_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", true)),
800
801     ZONES_SNAPSHOT_REQUEST(0x25, new int[] { 0x05, 0x1c, 0x1f }, 2, "Zones Snapshot Request",
802             "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.",
803             CaddxDirection.OUT, CaddxSource.NONE,
804
805             // Properties
806             // Byte 1
807             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
808
809             // Byte 2
810             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number offset (0= start at zone 1)", true)),
811
812     PARTITION_STATUS_REQUEST(0x26, new int[] { 0x06, 0x1c, 0x1f }, 2, "Partition Status Request",
813             "This request will cause the return of the Partition Status Message (06h) for the partition number that was requested.",
814             CaddxDirection.OUT, CaddxSource.NONE,
815
816             // Properties
817             // Byte 1
818             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
819
820             // Byte 2
821             new CaddxProperty("partition_number", 2, 1, 0, 0, CaddxPropertyType.INT,
822                     "Partition number (0= partition 1)", true)),
823
824     PARTITIONS_SNAPSHOT_REQUEST(0x27, new int[] { 0x07, 0x1c, 0x1f }, 1, "Partitions Snapshot Request",
825             "This request will cause the return of the Partitions Snapshot Message (07h) containing all partitions.",
826             CaddxDirection.OUT, CaddxSource.NONE,
827
828             // Properties
829             // Byte 1
830             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
831
832     SYSTEM_STATUS_REQUEST(0x28, new int[] { 0x08, 0x1c, 0x1f }, 1, "System Status Request",
833             "This request will cause the return of the System Status Message (08h).", CaddxDirection.OUT,
834             CaddxSource.NONE,
835
836             // Properties
837             // Byte 1
838             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false)),
839
840     SEND_X_10_MESSAGE(0x29, new int[] { 0x1d, 0x1c, 0x1f }, 4, "Send X-10 Message",
841             "This message will contain information about an X-10 command that should be resent on the system bus.",
842             CaddxDirection.OUT, CaddxSource.NONE,
843
844             // Properties
845             // Byte 1
846             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
847
848             // Byte 2
849             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "House code (0=house A) ", true),
850
851             // Byte 3
852             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Unit code (0=unit 1)", true),
853
854             // Byte 4
855             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "X-10 function code (see table at message # 0Ah)",
856                     true)),
857
858     LOG_EVENT_REQUEST(0x2a, new int[] { 0x0a, 0x1c, 0x1f }, 2, "Log Event Request",
859             "This request will cause the return of the Log Event Message (0Ah).", CaddxDirection.OUT, CaddxSource.NONE,
860             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
861             new CaddxProperty("panel_log_event_number", 2, 1, 0, 0, CaddxPropertyType.INT, "Event number requested",
862                     true)),
863
864     SEND_KEYPAD_TEXT_MESSAGE(0x2b, new int[] { 0x1d, 0x1c, 0x1f }, 12, "Send Keypad Text Message",
865             "This message will contain ASCII text for a specific keypad on the bus that will be displayed during Terminal Mode.",
866             CaddxDirection.OUT, CaddxSource.NONE,
867
868             // Properties
869             // Byte 1
870             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
871             // Byte 2 Keypad address
872             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
873             // Byte 3 Keypad type (0=NX-148e)(all others not supported)
874             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Keypad type", false),
875             // Byte 4 Display storage location (0=top left corner
876             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Display storage location", false),
877             // Byte 5 ASCII character for location +0
878             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +0", false),
879             // Byte 6 ASCII character for location +1
880             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +1", false),
881             // Byte 7 ASCII character for location +2
882             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +2", false),
883             // Byte 8 ASCII character for location +3
884             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +3", false),
885             // Byte 9 ASCII character for location +4
886             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +4", false),
887             // Byte 10 ASCII character for location +5
888             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +5", false),
889             // Byte 11 ASCII character for location +6
890             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +6", false),
891             // Byte 12 ASCII character for location +7
892             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "ASCII character for location +7", false)),
893
894     KEYPAD_TERMINAL_MODE_REQUEST(0x2c, new int[] { 0x1d, 0x1c, 0x1f }, 3, "Keypad Terminal Mode Request",
895             "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.",
896             CaddxDirection.OUT, CaddxSource.NONE,
897
898             // Properties
899             // Byte 1
900             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
901             // Byte 2 Keypad address
902             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Keypad address", false),
903             // Byte 3
904             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Number of seconds for Terminal Mode", false)),
905
906     PROGRAM_DATA_REQUEST(0x30, new int[] { 0x10, 0x1c, 0x1f }, 4, "Program Data Request",
907             "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).",
908             CaddxDirection.OUT, CaddxSource.NONE,
909
910             // Properties
911             // Byte 1
912             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
913             // Byte 2 Device’s buss address
914             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
915             // Byte 3 Upper logical location / offset
916             // Bits 0-3 Bits 8-11 of logical location
917             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.INT, "Bits 8-11 of logical location", false),
918             // Bits 4,5 Must be 0
919             new CaddxProperty("", 3, 1, 4, 2, CaddxPropertyType.BIT, "Must be 0", false),
920             // Bit 6 Segment offset (0-none, 1=8 bytes)
921             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Segment offset (0-none, 1=8 bytes)", false),
922             // Bit 7
923             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
924             // Byte 4 Bits 0-7 of logical location
925             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false)),
926
927     PROGRAM_DATA_COMMAND(0x31, new int[] { 0x1d, 0x1c, 0x1f }, 13, "Program Data Command",
928             "This message will contain a system device’s buss address and the logical location where the included data should be stored.",
929             CaddxDirection.OUT, CaddxSource.NONE,
930
931             // Properties
932             // Byte 1 Message number
933             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
934             // Byte 2 Device’s buss address
935             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Device’s buss address", false),
936             // Byte 3 Upper logical location / offset
937             // Bits 0-3 Bits 8-11 of logical location
938             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "Bits 8-11 of logical location", false),
939             // Bit 4 Segment size (0=byte, 1=nibble)
940             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Segment size (0=byte, 1=nibble)", false),
941             // Bit 5 Must be 1
942             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Must be 1", false),
943             // Bit 6 Segment offset (0-none, 1=8 bytes)
944             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Segment offset (0-none, 1=8 bytes)", false),
945             // Bit 7 Must be 0
946             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Must be 0", false),
947             // Byte 4 Bits 0-7 of logical location
948             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Bits 0-7 of logical location", false),
949             // Byte 5 Location length / data type
950             // Bits 0-4 Number of segments in location (0=1 segment)
951             new CaddxProperty("", 5, 1, 0, 5, CaddxPropertyType.BIT, "Number of segments in location (0=1 segment)",
952                     false),
953             // Bits 5-7 Data type : 5=unused
954             new CaddxProperty("", 5, 1, 5, 3, CaddxPropertyType.BIT,
955                     "Data type: 0=Binary, 1=Decimal, 2=Hexadecimal, 3=ASCII, 4=unused, 5=unused, 6=unused, 7=unused",
956                     false),
957             // Byte 6 Data byte 1 to store
958             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Data byte 1 to store", false),
959             // Byte 7 Data byte 2 to store
960             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Data byte 2 to store", false),
961             // Byte 8 Data byte 3 to store
962             new CaddxProperty("", 8, 1, 0, 0, CaddxPropertyType.INT, "Data byte 3 to store", false),
963             // Byte 9 Data byte 4 to store
964             new CaddxProperty("", 9, 1, 0, 0, CaddxPropertyType.INT, "Data byte 4 to store", false),
965             // Byte 10 Data byte 5 to store
966             new CaddxProperty("", 10, 1, 0, 0, CaddxPropertyType.INT, "Data byte 5 to store", false),
967             // Byte 11 Data byte 6 to store
968             new CaddxProperty("", 11, 1, 0, 0, CaddxPropertyType.INT, "Data byte 6 to store", false),
969             // Byte 12 Data byte 7 to store
970             new CaddxProperty("", 12, 1, 0, 0, CaddxPropertyType.INT, "Data byte 7 to store", false),
971             // Byte 13 Data byte 8 to store
972             new CaddxProperty("", 13, 1, 0, 0, CaddxPropertyType.INT, "Data byte 8 to store", false)),
973
974     USER_INFORMATION_REQUEST_WITH_PIN(0x32, new int[] { 0x12, 0x1c, 0x1f }, 5, "User Information Request with PIN",
975             "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).",
976             CaddxDirection.OUT, CaddxSource.NONE,
977
978             // Properties
979             // Byte 1 Message number
980             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
981             // Byte 2 (Master) PIN digits 1 & 2
982             // Bits 0-3 PIN digit 1
983             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
984             // Bits 4-7 PIN digit 2
985             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
986             // Byte 3 (Master) PIN digits 3 & 4
987             // Bits 0-3 PIN digit 3
988             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
989             // Bits 4-7 PIN digit 4
990             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
991             // Byte 4 (Master) PIN digits 5 & 6
992             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
993             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
994             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
995             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
996             // Byte 5 User number (1=user 1)
997             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false)),
998
999     USER_INFORMATION_REQUEST_WITHOUT_PIN(0x33, new int[] { 0x12, 0x1c, 0x1f }, 2,
1000             "User Information Request without PIN",
1001             "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).",
1002             CaddxDirection.OUT, CaddxSource.NONE,
1003
1004             // Properties
1005             // Byte 1 Message number
1006             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1007             // Byte 2 User number (1=user 1)
1008             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false)),
1009
1010     SET_USER_CODE_COMMAND_WITH_PIN(0x34, new int[] { 0x12, 0x1c, 0x1f }, 8, "Set User Code Command with PIN",
1011             "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.",
1012             CaddxDirection.OUT, CaddxSource.NONE,
1013
1014             // Properties
1015             // Byte 1 Message number
1016             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1017             // Byte 2 (Master) PIN digits 1 & 2
1018             // Bits 0-3 PIN digit 1
1019             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1020             // Bits 4-7 PIN digit 2
1021             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1022             // Byte 3 (Master) PIN digits 3 & 4
1023             // Bits 0-3 PIN digit 3
1024             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1025             // Bits 4-7 PIN digit 4
1026             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1027             // Byte 4 (Master) PIN digits 5 & 6
1028             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1029             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1030             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1031             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1032             // Byte 5 User number (1=user 1)
1033             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1034             // Byte 6 PIN digits 1 & 2
1035             // Bits 0-3 PIN digit 1
1036             new CaddxProperty("", 6, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1037             // Bits 4-7 PIN digit 2
1038             new CaddxProperty("", 6, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1039             // Byte 7 PIN digits 3 & 4
1040             // Bits 0-3 PIN digit 3
1041             new CaddxProperty("", 7, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1042             // Bits 4-7 PIN digit 4
1043             new CaddxProperty("", 7, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1044             // Byte 8 PIN digits 5 & 6
1045             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1046             new CaddxProperty("", 8, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1047             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1048             new CaddxProperty("", 8, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false)),
1049
1050     SET_USER_CODE_COMMAND_WITHOUT_PIN(0x35, new int[] { 0x12, 0x1c, 0x1f }, 5, "Set User Code Command without PIN",
1051             "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.",
1052             CaddxDirection.OUT, CaddxSource.NONE,
1053
1054             // Properties
1055             // Byte 1 Message number
1056             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1057             // Byte 2 User number (1=user 1)
1058             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1059             // Byte 3 PIN digits 1 & 2
1060             // Bits 0-3 PIN digit 1
1061             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1062             // Bits 4-7 PIN digit 2
1063             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1064             // Byte 4 PIN digits 3 & 4
1065             // Bits 0-3 PIN digit 3
1066             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1067             // Bits 4-7 PIN digit 4
1068             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1069             // Byte 5 PIN digits 5 & 6
1070             // Bits 0-3 PIN digit 5 (pad with 0 if 4 digit PIN)
1071             new CaddxProperty("", 5, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1072             // Bits 4-7 PIN digit 6 (pad with 0 if 4 digit PIN)
1073             new CaddxProperty("", 5, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false)),
1074
1075     SET_USER_AUTHORIZATION_COMMAND_WITH_PIN(0x36, new int[] { 0x1d, 0x1c, 0x1f }, 7,
1076             "Set User Authorization Command with PIN",
1077             "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.",
1078             CaddxDirection.OUT, CaddxSource.NONE,
1079
1080             // Properties
1081             // Byte 1 Message number
1082             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1083
1084             // Byte 2 (Master) PIN digits 1 & 2
1085             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1086             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1087
1088             // Byte 3 (Master) PIN digits 3 & 4
1089             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1090             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1091
1092             // Byte 4 (Master) PIN digits 5 & 6
1093             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1094             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1095
1096             // Byte 5 User number (1=user 1)
1097             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1098
1099             // Byte 6 Authority flags
1100             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT,
1101                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
1102             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT,
1103                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
1104             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT,
1105                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
1106             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT,
1107                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
1108             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT,
1109                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
1110             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT,
1111                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
1112             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT,
1113                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
1114                     false),
1115             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT,
1116                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
1117
1118             // Byte 7 Authorized partition(s) mask
1119             new CaddxProperty("", 7, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
1120             new CaddxProperty("", 7, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
1121             new CaddxProperty("", 7, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
1122             new CaddxProperty("", 7, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
1123             new CaddxProperty("", 7, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
1124             new CaddxProperty("", 7, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
1125             new CaddxProperty("", 7, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
1126             new CaddxProperty("", 7, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
1127
1128     SET_USER_AUTHORIZATION_COMMAND_WITHOUT_PIN(0x37, new int[] { 0x1d, 0x1c, 0x1f }, 4,
1129             "Set User Authorization Command without PIN",
1130             "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.",
1131             CaddxDirection.OUT, CaddxSource.NONE,
1132
1133             // Properties
1134             // Byte 1 Message number
1135             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1136
1137             // Byte 2 User number (1=user 1)
1138             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "User number (1=user 1)", false),
1139
1140             // Byte 3 Authority flags
1141             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT,
1142                     "Reserved (if bit 7 is clear) || Output 1 enable (if bit 7 is set)", false),
1143             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT,
1144                     "Arm only (if bit 7 is clear) || Output 2 enable (if bit 7 is set)", false),
1145             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT,
1146                     "Arm only (during close window) (if bit 7 is clear) || Output 3 enable (if bit 7 is set)", false),
1147             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT,
1148                     "Master / program (if bit 7 is clear) || Output 4 enable (if bit 7 is set)", false),
1149             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT,
1150                     "Arm / Disarm (if bit 7 is clear) || Arm / Disarm (if bit 7 is set)", false),
1151             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT,
1152                     "Bypass enable (if bit 7 is clear) || Bypass enable (if bit 7 is set)", false),
1153             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT,
1154                     "Open / close report enable (if bit 7 is clear) || Open / close report enable (if bit 7 is set)",
1155                     false),
1156             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT,
1157                     "Must be a 0 (if bit 7 is clear) || Must be a 1 (if bit 7 is set)", false),
1158
1159             // Byte 4 Authorized partition(s) mask
1160             new CaddxProperty("", 4, 1, 0, 1, CaddxPropertyType.BIT, "Authorized for partition 1", false),
1161             new CaddxProperty("", 4, 1, 1, 1, CaddxPropertyType.BIT, "Authorized for partition 2", false),
1162             new CaddxProperty("", 4, 1, 2, 1, CaddxPropertyType.BIT, "Authorized for partition 3", false),
1163             new CaddxProperty("", 4, 1, 3, 1, CaddxPropertyType.BIT, "Authorized for partition 4", false),
1164             new CaddxProperty("", 4, 1, 4, 1, CaddxPropertyType.BIT, "Authorized for partition 5", false),
1165             new CaddxProperty("", 4, 1, 5, 1, CaddxPropertyType.BIT, "Authorized for partition 6", false),
1166             new CaddxProperty("", 4, 1, 6, 1, CaddxPropertyType.BIT, "Authorized for partition 7", false),
1167             new CaddxProperty("", 4, 1, 7, 1, CaddxPropertyType.BIT, "Authorized for partition 8", false)),
1168
1169     STORE_COMMUNICATION_EVENT_COMMAND(0x3a, new int[] { 0x1d, 0x1c, 0x1f }, 6, "Store Communication Event Command",
1170             "This message will submit an event to the control’s communication stack for possible transmission over its telephone or alternate communications path.",
1171             CaddxDirection.OUT, CaddxSource.NONE),
1172
1173     SET_CLOCK_CALENDAR_COMMAND(0x3b, new int[] { 0x1d, 0x1c, 0x1f }, 7, "Set Clock / Calendar Command",
1174             "This message will set the clock / calendar in the system.", CaddxDirection.OUT, CaddxSource.NONE,
1175
1176             // Properties
1177             // Byte 1 Message number
1178             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1179
1180             // Byte 2 Year (00-99)
1181             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Year (00-99)", false),
1182
1183             // Byte 3 Month (1-12)
1184             new CaddxProperty("", 3, 1, 0, 0, CaddxPropertyType.INT, "Month (1-12)", false),
1185
1186             // Byte 4 Day (1-31)
1187             new CaddxProperty("", 4, 1, 0, 0, CaddxPropertyType.INT, "Day (1-31)", false),
1188
1189             // Byte 5 Hour (0-23)
1190             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT, "Hour (0-23)", false),
1191
1192             // Byte 6 Minute (0-59)
1193             new CaddxProperty("", 6, 1, 0, 0, CaddxPropertyType.INT, "Minute (0-59)", false),
1194
1195             // Byte 7 Day
1196             new CaddxProperty("", 7, 1, 0, 0, CaddxPropertyType.INT, "Day", false)),
1197
1198     PRIMARY_KEYPAD_FUNCTION_WITH_PIN(0x3c, new int[] { 0x1d, 0x1c, 0x1f }, 6, "Primary Keypad Function with PIN",
1199             "This message will contain a value that defines with function to perform, the partitions to use and a PIN value for the validation.",
1200             CaddxDirection.OUT, CaddxSource.NONE,
1201
1202             // Properties
1203             // Byte 1 Message number
1204             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1205
1206             // Byte 2 PIN digits 1 & 2
1207             new CaddxProperty("", 2, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 1", false),
1208             new CaddxProperty("", 2, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 2", false),
1209
1210             // Byte 3 PIN digits 3 & 4
1211             new CaddxProperty("", 3, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 3", false),
1212             new CaddxProperty("", 3, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 4", false),
1213
1214             // Byte 4 PIN digits 5 & 6
1215             new CaddxProperty("", 4, 1, 0, 4, CaddxPropertyType.BIT, "PIN digit 5 (pad with 0 if 4 digit PIN)", false),
1216             new CaddxProperty("", 4, 1, 4, 4, CaddxPropertyType.BIT, "PIN digit 6 (pad with 0 if 4 digit PIN)", false),
1217
1218             // Byte 5 Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm
1219             // in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode,
1220             // 08h-FFh Reserved]
1221             new CaddxProperty("", 5, 1, 0, 0, CaddxPropertyType.INT,
1222                     "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]",
1223                     false),
1224
1225             // Byte 6 Partition mask
1226             new CaddxProperty("", 6, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1 (if PIN has access)",
1227                     false),
1228             new CaddxProperty("", 6, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2 (if PIN has access)",
1229                     false),
1230             new CaddxProperty("", 6, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3 (if PIN has access)",
1231                     false),
1232             new CaddxProperty("", 6, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4 (if PIN has access)",
1233                     false),
1234             new CaddxProperty("", 6, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5 (if PIN has access)",
1235                     false),
1236             new CaddxProperty("", 6, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6 (if PIN has access)",
1237                     false),
1238             new CaddxProperty("", 6, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7 (if PIN has access)",
1239                     false),
1240             new CaddxProperty("", 6, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8 (if PIN has access)",
1241                     false)),
1242
1243     PRIMARY_KEYPAD_FUNCTION_WITHOUT_PIN(0x3d, new int[] { 0x1d, 0x1c, 0x1f }, 4, "Primary Keypad Function without PIN",
1244             "This message will contain a value that defines with function to perform, the partitions and user number to assign to the function.",
1245             CaddxDirection.OUT, CaddxSource.NONE,
1246
1247             // Properties
1248             // Byte 1 Message number
1249             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1250
1251             // Byte 2 "Keypad function [00h Turn off any sounder or alarm, 01h Disarm, 02h Arm in away mode, 03h Arm
1252             // in stay mode, 04h Cancel, 05h Initiate auto-arm, 06h Start walk-test mode, 07h Stop walk-test mode,
1253             // 08h-FFh Reserved]",
1254             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT,
1255                     "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]",
1256                     false),
1257
1258             // Byte 3 Partition mask
1259             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1 (if PIN has access)",
1260                     false),
1261             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2 (if PIN has access)",
1262                     false),
1263             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3 (if PIN has access)",
1264                     false),
1265             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4 (if PIN has access)",
1266                     false),
1267             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5 (if PIN has access)",
1268                     false),
1269             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6 (if PIN has access)",
1270                     false),
1271             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7 (if PIN has access)",
1272                     false),
1273             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8 (if PIN has access)",
1274                     false),
1275
1276             // Byte 4 User number
1277             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "User number", false)),
1278
1279     SECONDARY_KEYPAD_FUNCTION(0x3e, new int[] { 0x1d, 0x1c, 0x1f }, 3, "Secondary Keypad Function",
1280             "This message will contain a value that defines with function to perform, and the partitions to use.",
1281             CaddxDirection.OUT, CaddxSource.NONE,
1282
1283             // Properties
1284             // Byte 1 Message number
1285             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1286
1287             // Byte 2 "Keypad function [00h Stay (1 button arm / toggle interiors), 01h Chime (toggle chime mode),
1288             // 02h Exit (1 button arm / toggle instant), 03h Bypass interiors, 04h Fire panic, 05h Medical panic,
1289             // 06h Police panic, 07h Smoke detector reset, 08h Auto callback download, 09h Manual pickup download,
1290             // 0Ah Enable silent exit (for this arm cycle), 0Bh Perform test, 0Ch Group bypass, 0Dh Auxiliary
1291             // function 1, 0Eh Auxiliary function 2, 0Fh Start keypad sounder, 10h-FFh Reserved]",
1292             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT,
1293                     "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]",
1294                     false),
1295
1296             // Byte 3 Partition mask
1297             new CaddxProperty("", 3, 1, 0, 1, CaddxPropertyType.BIT, "Perform on partition 1", false),
1298             new CaddxProperty("", 3, 1, 1, 1, CaddxPropertyType.BIT, "Perform on partition 2", false),
1299             new CaddxProperty("", 3, 1, 2, 1, CaddxPropertyType.BIT, "Perform on partition 3", false),
1300             new CaddxProperty("", 3, 1, 3, 1, CaddxPropertyType.BIT, "Perform on partition 4", false),
1301             new CaddxProperty("", 3, 1, 4, 1, CaddxPropertyType.BIT, "Perform on partition 5", false),
1302             new CaddxProperty("", 3, 1, 5, 1, CaddxPropertyType.BIT, "Perform on partition 6", false),
1303             new CaddxProperty("", 3, 1, 6, 1, CaddxPropertyType.BIT, "Perform on partition 7", false),
1304             new CaddxProperty("", 3, 1, 7, 1, CaddxPropertyType.BIT, "Perform on partition 8", false)),
1305
1306     ZONE_BYPASS_TOGGLE(0x3f, new int[] { 0x1d, 0x1c, 0x1f }, 2, "Zone Bypass Toggle",
1307             "This message will contain a number of a zone that should be (un)bypassed.", CaddxDirection.OUT,
1308             CaddxSource.NONE,
1309
1310             // Properties
1311             // Byte 1 Message number
1312             new CaddxProperty("", 1, 1, 0, 0, CaddxPropertyType.INT, "Message number", false),
1313
1314             // Byte 2 Zone number (0= zone 1)
1315             new CaddxProperty("", 2, 1, 0, 0, CaddxPropertyType.INT, "Zone number (0= zone 1)", false));
1316
1317     public final String name;
1318     public final String description;
1319     public final int number;
1320     public final int @Nullable [] replyMessageNumbers;
1321     public final int length;
1322     public final CaddxDirection direction;
1323     public final CaddxSource source;
1324     public final CaddxProperty[] properties;
1325
1326     CaddxMessageType(int number, int @Nullable [] replyMessageNumbers, int length, String name, String description,
1327             CaddxDirection direction, CaddxSource source, CaddxProperty... properties) {
1328         this.name = name;
1329         this.description = description;
1330         this.direction = direction;
1331         this.source = source;
1332         this.number = number;
1333         this.replyMessageNumbers = replyMessageNumbers;
1334         this.length = length;
1335         this.properties = properties;
1336     }
1337
1338     private static final Map<Integer, CaddxMessageType> BY_MESSAGE_TYPE = new HashMap<>();
1339
1340     static {
1341         for (CaddxMessageType mt : values()) {
1342             BY_MESSAGE_TYPE.put(mt.number, mt);
1343         }
1344     }
1345
1346     public static @Nullable CaddxMessageType valueOfMessageType(int number) {
1347         return BY_MESSAGE_TYPE.get(number);
1348     }
1349 }