2 * Routines for R3 packet dissection
3 * Copyright (c) 2009 Assa Abloy USA <jcwren@assaabloyusa.com>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
31 #include <epan/packet.h>
32 #include <epan/expert.h>
33 #include <epan/dissectors/packet-tcp.h>
35 #include "packet-assa_r3_public.h"
38 * Wireshark ID of the R3 protocol
40 static gint proto_r3 = -1;
45 static gint hf_r3_tildex3ds = -1; /* Got ~~~ds */
47 static gint hf_r3_header = -1; /* Packet header */
48 static gint hf_r3_payload = -1; /* Packet payload */
49 static gint hf_r3_tail = -1; /* Packet tail */
51 static gint hf_r3_sigil = -1; /* Packet sigil */
52 static gint hf_r3_address = -1; /* Packet address */
53 static gint hf_r3_packetnumber = -1; /* Packet number */
54 static gint hf_r3_packetlength = -1; /* Packet length */
55 static gint hf_r3_encryption = -1; /* Packet encryption scheme */
56 static gint hf_r3_crc = -1; /* Packet CRC */
57 static gint hf_r3_crc_bad = -1; /* Packet CRC bad (for filtering) */
58 static gint hf_r3_xor = -1; /* Packet Xor */
59 static gint hf_r3_xor_bad = -1; /* Packet Xor bad (for filtering) */
61 static gint hf_r3_commandlength = -1; /* Command length */
62 static gint hf_r3_command = -1; /* Command (cmdCommand_e) */
63 static gint hf_r3_commanddata = -1; /* Command data (not always present) */
65 static gint hf_r3_commandmfglength = -1; /* Mfg Command length */
66 static gint hf_r3_commandmfg = -1; /* Mfg Command (cmdCommand_e) */
67 static gint hf_r3_commandmfgdata = -1; /* Mfg Command data (not always present) */
69 static gint hf_r3_responselength = -1; /* Response length */
70 static gint hf_r3_responsecommand = -1; /* Response command */
71 static gint hf_r3_responsetype = -1; /* Response type (responseType_e) */
72 static gint hf_r3_responsetocommand = -1; /* Response to command (cmdCommand_e) */
73 static gint hf_r3_responsedata = -1; /* Response data (not always present) */
75 static gint hf_r3_upstreamcommand = -1;
77 static gint hf_r3_upstreamfield = -1; /* Upstream field (length + type + data) */
78 static gint hf_r3_upstreamfieldlength = -1; /* Upstream field length */
79 static gint hf_r3_upstreamfieldtype = -1; /* Upstream field type (upstreamField_e) */
80 static gint hf_r3_upstreamfielddatalen = -1; /* Upstream field data length */
81 static gint hf_r3_upstreamfielderror = -1; /* Upstream field is unknown type */
82 static gint hf_r3_upstreamfieldarray [UPSTREAMFIELD_LAST];
84 static gint hf_r3_configitems = -1;
85 static gint hf_r3_configitem = -1;
86 static gint hf_r3_configfield = -1;
87 static gint hf_r3_configitemlength = -1;
88 static gint hf_r3_configitemtype = -1;
89 static gint hf_r3_configitemdata = -1;
90 static gint hf_r3_configitemdata_bool = -1;
91 static gint hf_r3_configitemdata_8 = -1;
92 static gint hf_r3_configitemdata_16 = -1;
93 static gint hf_r3_configitemdata_32 = -1;
94 static gint hf_r3_configitemdata_string = -1;
96 static gint hf_r3_timezonearray [32];
98 static gint hf_r3_expireon_year = -1;
99 static gint hf_r3_expireon_month = -1;
100 static gint hf_r3_expireon_day = -1;
102 static gint hf_r3_datetime_year = -1;
103 static gint hf_r3_datetime_month = -1;
104 static gint hf_r3_datetime_day = -1;
105 static gint hf_r3_datetime_dow = -1;
106 static gint hf_r3_datetime_hours = -1;
107 static gint hf_r3_datetime_minutes = -1;
108 static gint hf_r3_datetime_seconds = -1;
109 static gint hf_r3_datetime_dst = -1;
111 static gint hf_r3_eventlog_recordnumber = -1;
112 static gint hf_r3_eventlog_year = -1;
113 static gint hf_r3_eventlog_month = -1;
114 static gint hf_r3_eventlog_day = -1;
115 static gint hf_r3_eventlog_hour = -1;
116 static gint hf_r3_eventlog_minute = -1;
117 static gint hf_r3_eventlog_second = -1;
118 static gint hf_r3_eventlog_usernumber = -1;
119 static gint hf_r3_eventlog_event = -1;
121 static gint hf_r3_declinedlog_recordnumber = -1;
122 static gint hf_r3_declinedlog_year = -1;
123 static gint hf_r3_declinedlog_month = -1;
124 static gint hf_r3_declinedlog_day = -1;
125 static gint hf_r3_declinedlog_hour = -1;
126 static gint hf_r3_declinedlog_minute = -1;
127 static gint hf_r3_declinedlog_second = -1;
128 static gint hf_r3_declinedlog_usernumber = -1;
129 static gint hf_r3_declinedlog_cred1type = -1;
130 static gint hf_r3_declinedlog_cred2type = -1;
131 static gint hf_r3_declinedlog_cred1 = -1;
132 static gint hf_r3_declinedlog_cred2 = -1;
134 static gint hf_r3_alarmlog_recordnumber = -1;
135 static gint hf_r3_alarmlog_year = -1;
136 static gint hf_r3_alarmlog_month = -1;
137 static gint hf_r3_alarmlog_day = -1;
138 static gint hf_r3_alarmlog_hour = -1;
139 static gint hf_r3_alarmlog_minute = -1;
140 static gint hf_r3_alarmlog_second = -1;
141 static gint hf_r3_alarmlog_id = -1;
142 static gint hf_r3_alarmlog_usernumber = -1;
144 static gint hf_r3_debugmsg = -1;
146 static gint hf_r3_setdate_year = -1;
147 static gint hf_r3_setdate_month = -1;
148 static gint hf_r3_setdate_day = -1;
149 static gint hf_r3_setdate_dow = -1;
150 static gint hf_r3_setdate_hours = -1;
151 static gint hf_r3_setdate_minutes = -1;
152 static gint hf_r3_setdate_seconds = -1;
154 static gint hf_r3_deleteusers = -1;
156 static gint hf_r3_defineexception_number = -1;
157 static gint hf_r3_defineexception_startdate_month = -1;
158 static gint hf_r3_defineexception_startdate_day = -1;
159 static gint hf_r3_defineexception_startdate_hours = -1;
160 static gint hf_r3_defineexception_startdate_minutes = -1;
161 static gint hf_r3_defineexception_enddate_month = -1;
162 static gint hf_r3_defineexception_enddate_day = -1;
163 static gint hf_r3_defineexception_enddate_hours = -1;
164 static gint hf_r3_defineexception_enddate_minutes = -1;
166 static gint hf_r3_defineexceptiongroup_number = -1;
167 static gint hf_r3_defineexceptiongroup_bits = -1;
169 static gint hf_r3_definecalendar_number = -1;
170 static gint hf_r3_definecalendar_bits = -1;
172 static gint hf_r3_definetimezone_number = -1;
173 static gint hf_r3_definetimezone_starttime_hours = -1;
174 static gint hf_r3_definetimezone_starttime_minutes = -1;
175 static gint hf_r3_definetimezone_endtime_hours = -1;
176 static gint hf_r3_definetimezone_endtime_minutes = -1;
177 static gint hf_r3_definetimezone_daymap [7];
178 static gint hf_r3_definetimezone_exceptiongroup = -1;
179 static gint hf_r3_definetimezone_mode = -1;
180 static gint hf_r3_definetimezone_calendar = -1;
182 static gint hf_r3_rmtauthretry_sequence = -1;
183 static gint hf_r3_rmtauthretry_retry = -1;
185 static gint hf_r3_eventlogdump_starttime_year = -1;
186 static gint hf_r3_eventlogdump_starttime_month = -1;
187 static gint hf_r3_eventlogdump_starttime_day = -1;
188 static gint hf_r3_eventlogdump_starttime_hours = -1;
189 static gint hf_r3_eventlogdump_starttime_minutes = -1;
190 static gint hf_r3_eventlogdump_endtime_year = -1;
191 static gint hf_r3_eventlogdump_endtime_month = -1;
192 static gint hf_r3_eventlogdump_endtime_day = -1;
193 static gint hf_r3_eventlogdump_endtime_hours = -1;
194 static gint hf_r3_eventlogdump_endtime_minutes = -1;
195 static gint hf_r3_eventlogdump_user = -1;
197 static gint hf_r3_declinedlogdump_starttime_year = -1;
198 static gint hf_r3_declinedlogdump_starttime_month = -1;
199 static gint hf_r3_declinedlogdump_starttime_day = -1;
200 static gint hf_r3_declinedlogdump_starttime_hours = -1;
201 static gint hf_r3_declinedlogdump_starttime_minutes = -1;
202 static gint hf_r3_declinedlogdump_endtime_year = -1;
203 static gint hf_r3_declinedlogdump_endtime_month = -1;
204 static gint hf_r3_declinedlogdump_endtime_day = -1;
205 static gint hf_r3_declinedlogdump_endtime_hours = -1;
206 static gint hf_r3_declinedlogdump_endtime_minutes = -1;
208 static gint hf_r3_alarmlogdump_starttime_year = -1;
209 static gint hf_r3_alarmlogdump_starttime_month = -1;
210 static gint hf_r3_alarmlogdump_starttime_day = -1;
211 static gint hf_r3_alarmlogdump_starttime_hours = -1;
212 static gint hf_r3_alarmlogdump_starttime_minutes = -1;
213 static gint hf_r3_alarmlogdump_endtime_year = -1;
214 static gint hf_r3_alarmlogdump_endtime_month = -1;
215 static gint hf_r3_alarmlogdump_endtime_day = -1;
216 static gint hf_r3_alarmlogdump_endtime_hours = -1;
217 static gint hf_r3_alarmlogdump_endtime_minutes = -1;
219 static gint hf_r3_nvramclearoptions [16];
221 static gint hf_r3_writeeventlog_user = -1;
222 static gint hf_r3_writeeventlog_event = -1;
224 static gint hf_r3_powertableselection = -1;
226 static gint hf_r3_filter_type = -1;
227 static gint hf_r3_filter_list = -1;
229 static gint hf_r3_alarm_length = -1;
230 static gint hf_r3_alarm_id = -1;
231 static gint hf_r3_alarm_state = -1;
233 static gint hf_r3_dpac_action = -1;
234 static gint hf_r3_dpac_waittime = -1;
235 static gint hf_r3_dpac_command = -1;
237 static gint hf_r3_dpacreply_stuff = -1;
238 static gint hf_r3_dpacreply_length = -1;
239 static gint hf_r3_dpacreply_reply = -1;
241 static gint hf_r3_mfgfield_length = -1;
242 static gint hf_r3_mfgfield = -1;
243 static gint hf_r3_mfgfield_data = -1;
245 static gint hf_r3_mfgsetserialnumber = -1;
246 static gint hf_r3_mfgsetcryptkey = -1;
247 static gint hf_r3_mfgdumpnvram = -1;
248 static gint hf_r3_mfgremoteunlock = -1;
249 static gint hf_r3_mfgtestpreserve = -1;
251 static gint hf_r3_adc [8];
253 static gint hf_r3_hardwareid_board = -1;
254 static gint hf_r3_hardwareid_cpuid = -1;
255 static gint hf_r3_hardwareid_cpurev = -1;
257 static gint hf_r3_testkeypad = -1;
258 static gint hf_r3_testmagcard = -1;
259 static gint hf_r3_testproxcard = -1;
261 static gint hf_r3_nvramdump_record = -1;
262 static gint hf_r3_nvramdump_length = -1;
263 static gint hf_r3_nvramdump_data = -1;
265 static gint hf_r3_nvramdumprle_record = -1;
266 static gint hf_r3_nvramdumprle_length = -1;
267 static gint hf_r3_nvramdumprle_data = -1;
269 static gint hf_r3_iopins_lat = -1;
270 static gint hf_r3_iopins_port = -1;
271 static gint hf_r3_iopins_tris = -1;
273 static gint hf_r3_mortisepins_s1 = -1;
274 static gint hf_r3_mortisepins_s2 = -1;
275 static gint hf_r3_mortisepins_s3 = -1;
276 static gint hf_r3_mortisepins_s4 = -1;
278 static gint hf_r3_checksumresults = -1;
279 static gint hf_r3_checksumresults_field = -1;
280 static gint hf_r3_checksumresults_length = -1;
281 static gint hf_r3_checksumresults_state = -1;
283 static gint hf_r3_forceoptions_length = -1;
284 static gint hf_r3_forceoptions_item = -1;
285 static gint hf_r3_forceoptions_state_8= -1;
286 static gint hf_r3_forceoptions_state_16 = -1;
287 static gint hf_r3_forceoptions_state_24 = -1;
288 static gint hf_r3_forceoptions_state_32 = -1;
290 static gint hf_r3_peekpoke_operation = -1;
291 static gint hf_r3_peekpoke_address = -1;
292 static gint hf_r3_peekpoke_length = -1;
293 static gint hf_r3_peekpoke_poke8 = -1;
294 static gint hf_r3_peekpoke_poke16 = -1;
295 static gint hf_r3_peekpoke_poke24 = -1;
296 static gint hf_r3_peekpoke_poke32 = -1;
297 static gint hf_r3_peekpoke_pokestring = -1;
299 static gint hf_r3_firmwaredownload_length = -1;
300 static gint hf_r3_firmwaredownload_record = -1;
301 static gint hf_r3_firmwaredownload_action = -1;
302 static gint hf_r3_firmwaredownload_timeout = -1;
303 static gint hf_r3_firmwaredownload_nvram = -1;
304 static gint hf_r3_firmwaredownload_address = -1;
305 static gint hf_r3_firmwaredownload_bytes = -1;
306 static gint hf_r3_firmwaredownload_data = -1;
307 static gint hf_r3_firmwaredownload_crc = -1;
308 static gint hf_r3_firmwaredownload_crc_bad = -1;
310 static gint hf_r3_nvramchecksumvalue = -1;
311 static gint hf_r3_nvramchecksumvalue_fixup = -1;
313 static gint hf_r3_capabilities = -1;
314 static gint hf_r3_capabilities_length = -1;
315 static gint hf_r3_capabilities_type = -1;
316 static gint hf_r3_capabilities_value = -1;
318 static gint hf_r3_lockstate_passage = -1;
319 static gint hf_r3_lockstate_panic = -1;
320 static gint hf_r3_lockstate_lockout = -1;
321 static gint hf_r3_lockstate_relock = -1;
322 static gint hf_r3_lockstate_autoopen = -1;
323 static gint hf_r3_lockstate_nextauto = -1;
324 static gint hf_r3_lockstate_lockstate = -1;
325 static gint hf_r3_lockstate_wantstate = -1;
326 static gint hf_r3_lockstate_remote = -1;
327 static gint hf_r3_lockstate_update = -1;
328 static gint hf_r3_lockstate_exceptionspresent = -1;
329 static gint hf_r3_lockstate_exceptionsactive = -1;
330 static gint hf_r3_lockstate_timezonespresent = -1;
331 static gint hf_r3_lockstate_timezonesactive = -1;
332 static gint hf_r3_lockstate_autounlockspresent = -1;
333 static gint hf_r3_lockstate_autounlocksactive = -1;
334 static gint hf_r3_lockstate_uapmspresent = -1;
335 static gint hf_r3_lockstate_uapmsactive = -1;
336 static gint hf_r3_lockstate_uapmrelockspresent = -1;
337 static gint hf_r3_lockstate_uapmreslocksactive = -1;
338 static gint hf_r3_lockstate_nvramprotect = -1;
339 static gint hf_r3_lockstate_nvramchecksum = -1;
341 static gint hf_r3_mortisestatelog = -1;
342 static gint hf_r3_mortisestatelog_pointer = -1;
343 static gint hf_r3_mortisestatelog_mortisetype = -1;
344 static gint hf_r3_mortisestatelog_waiting = -1;
345 static gint hf_r3_mortisestatelog_state = -1;
346 static gint hf_r3_mortisestatelog_last = -1;
347 static gint hf_r3_mortisestatelog_event = -1;
349 static gint hf_r3_timerchain_newtick = -1;
350 static gint hf_r3_timerchain_currentboundary = -1;
351 static gint hf_r3_timerchain_tasktag = -1;
352 static gint hf_r3_timerchain_address = -1;
353 static gint hf_r3_timerchain_reload = -1;
354 static gint hf_r3_timerchain_boundary = -1;
355 static gint hf_r3_timerchain_count = -1;
356 static gint hf_r3_timerchain_flags = -1;
358 static gint hf_r3_taskflags_taskid = -1;
359 static gint hf_r3_taskflags_flags = -1;
361 static gint hf_r3_checkpointlog_entryptr = -1;
362 static gint hf_r3_checkpointlog_rcon = -1;
363 static gint hf_r3_checkpointlog_checkpoint = -1;
365 static gint hf_r3_cpuregisters_intcon = -1;
366 static gint hf_r3_cpuregisters_intcon2 = -1;
367 static gint hf_r3_cpuregisters_intcon3 = -1;
368 static gint hf_r3_cpuregisters_pir1 = -1;
369 static gint hf_r3_cpuregisters_pir2 = -1;
370 static gint hf_r3_cpuregisters_pir3 = -1;
371 static gint hf_r3_cpuregisters_pie1 = -1;
372 static gint hf_r3_cpuregisters_pie2 = -1;
373 static gint hf_r3_cpuregisters_pie3 = -1;
374 static gint hf_r3_cpuregisters_ipr1 = -1;
375 static gint hf_r3_cpuregisters_ipr2 = -1;
376 static gint hf_r3_cpuregisters_ipr3 = -1;
377 static gint hf_r3_cpuregisters_rcon = -1;
378 static gint hf_r3_cpuregisters_osccon = -1;
379 static gint hf_r3_cpuregisters_rcsta = -1;
380 static gint hf_r3_cpuregisters_txsta = -1;
381 static gint hf_r3_cpuregisters_rcsta2 = -1;
382 static gint hf_r3_cpuregisters_txsta2 = -1;
383 static gint hf_r3_cpuregisters_wdtcon = -1;
385 static gint hf_r3_cpuregisters_intcon_rbif = -1;
386 static gint hf_r3_cpuregisters_intcon_int0if = -1;
387 static gint hf_r3_cpuregisters_intcon_tmr0if = -1;
388 static gint hf_r3_cpuregisters_intcon_rbie = -1;
389 static gint hf_r3_cpuregisters_intcon_int0ie = -1;
390 static gint hf_r3_cpuregisters_intcon_tmr0ie = -1;
391 static gint hf_r3_cpuregisters_intcon_giel = -1;
392 static gint hf_r3_cpuregisters_intcon_gieh = -1;
393 static gint hf_r3_cpuregisters_intcon2_rbip = -1;
394 static gint hf_r3_cpuregisters_intcon2_int3ip = -1;
395 static gint hf_r3_cpuregisters_intcon2_tmr0ip = -1;
396 static gint hf_r3_cpuregisters_intcon2_intedg3 = -1;
397 static gint hf_r3_cpuregisters_intcon2_intedg2 = -1;
398 static gint hf_r3_cpuregisters_intcon2_intedg1 = -1;
399 static gint hf_r3_cpuregisters_intcon2_intedg0 = -1;
400 static gint hf_r3_cpuregisters_intcon2_rbpu = -1;
401 static gint hf_r3_cpuregisters_intcon3_int1if = -1;
402 static gint hf_r3_cpuregisters_intcon3_int2if = -1;
403 static gint hf_r3_cpuregisters_intcon3_int3if = -1;
404 static gint hf_r3_cpuregisters_intcon3_int1ie = -1;
405 static gint hf_r3_cpuregisters_intcon3_int2ie = -1;
406 static gint hf_r3_cpuregisters_intcon3_int3ie = -1;
407 static gint hf_r3_cpuregisters_intcon3_int1ip = -1;
408 static gint hf_r3_cpuregisters_intcon3_int2ip = -1;
409 static gint hf_r3_cpuregisters_pir1_tmr1if = -1;
410 static gint hf_r3_cpuregisters_pir1_tmr2if = -1;
411 static gint hf_r3_cpuregisters_pir1_ccp1if = -1;
412 static gint hf_r3_cpuregisters_pir1_ssp1if = -1;
413 static gint hf_r3_cpuregisters_pir1_tx1if = -1;
414 static gint hf_r3_cpuregisters_pir1_rc1if = -1;
415 static gint hf_r3_cpuregisters_pir1_adif = -1;
416 static gint hf_r3_cpuregisters_pir1_pspif = -1;
417 static gint hf_r3_cpuregisters_pir2_ccp2if = -1;
418 static gint hf_r3_cpuregisters_pir2_tmr3if = -1;
419 static gint hf_r3_cpuregisters_pir2_hlvdif = -1;
420 static gint hf_r3_cpuregisters_pir2_bcl1if = -1;
421 static gint hf_r3_cpuregisters_pir2_eeif = -1;
422 static gint hf_r3_cpuregisters_pir2_unused5 = -1;
423 static gint hf_r3_cpuregisters_pir2_cmif = -1;
424 static gint hf_r3_cpuregisters_pir2_oscfif = -1;
425 static gint hf_r3_cpuregisters_pir3_ccp3if = -1;
426 static gint hf_r3_cpuregisters_pir3_ccp4if = -1;
427 static gint hf_r3_cpuregisters_pir3_ccp5if = -1;
428 static gint hf_r3_cpuregisters_pir3_tmr4if = -1;
429 static gint hf_r3_cpuregisters_pir3_tx2if = -1;
430 static gint hf_r3_cpuregisters_pir3_rc2if = -1;
431 static gint hf_r3_cpuregisters_pir3_bcl2if = -1;
432 static gint hf_r3_cpuregisters_pir3_ssp2if = -1;
433 static gint hf_r3_cpuregisters_pie1_tmr1ie = -1;
434 static gint hf_r3_cpuregisters_pie1_tmr2ie = -1;
435 static gint hf_r3_cpuregisters_pie1_ccp1ie = -1;
436 static gint hf_r3_cpuregisters_pie1_ssp1ie = -1;
437 static gint hf_r3_cpuregisters_pie1_tx1ie = -1;
438 static gint hf_r3_cpuregisters_pie1_rc1ie = -1;
439 static gint hf_r3_cpuregisters_pie1_adie = -1;
440 static gint hf_r3_cpuregisters_pie1_pspie = -1;
441 static gint hf_r3_cpuregisters_pie2_oscfie = -1;
442 static gint hf_r3_cpuregisters_pie2_cmie = -1;
443 static gint hf_r3_cpuregisters_pie2_unused2 = -1;
444 static gint hf_r3_cpuregisters_pie2_eeie = -1;
445 static gint hf_r3_cpuregisters_pie2_bcl1ie = -1;
446 static gint hf_r3_cpuregisters_pie2_hlvdie = -1;
447 static gint hf_r3_cpuregisters_pie2_tmr3ie = -1;
448 static gint hf_r3_cpuregisters_pie2_ccp2ie = -1;
449 static gint hf_r3_cpuregisters_pie3_ccp3ie = -1;
450 static gint hf_r3_cpuregisters_pie3_ccp4ie = -1;
451 static gint hf_r3_cpuregisters_pie3_ccp5ie = -1;
452 static gint hf_r3_cpuregisters_pie3_tmr4ie = -1;
453 static gint hf_r3_cpuregisters_pie3_tx2ie = -1;
454 static gint hf_r3_cpuregisters_pie3_rc2ie = -1;
455 static gint hf_r3_cpuregisters_pie3_bcl2ie = -1;
456 static gint hf_r3_cpuregisters_pie3_ssp2ie = -1;
457 static gint hf_r3_cpuregisters_ipr1_tmr1ip = -1;
458 static gint hf_r3_cpuregisters_ipr1_tmr2ip = -1;
459 static gint hf_r3_cpuregisters_ipr1_ccp1ip = -1;
460 static gint hf_r3_cpuregisters_ipr1_ssp1ip = -1;
461 static gint hf_r3_cpuregisters_ipr1_tx1ip = -1;
462 static gint hf_r3_cpuregisters_ipr1_rc1ip = -1;
463 static gint hf_r3_cpuregisters_ipr1_adip = -1;
464 static gint hf_r3_cpuregisters_ipr1_pspip = -1;
465 static gint hf_r3_cpuregisters_ipr2_ccp2ip = -1;
466 static gint hf_r3_cpuregisters_ipr2_tmr3ip = -1;
467 static gint hf_r3_cpuregisters_ipr2_hlvdip = -1;
468 static gint hf_r3_cpuregisters_ipr2_bcl1ip = -1;
469 static gint hf_r3_cpuregisters_ipr2_eeip = -1;
470 static gint hf_r3_cpuregisters_ipr2_unused5 = -1;
471 static gint hf_r3_cpuregisters_ipr2_cmip = -1;
472 static gint hf_r3_cpuregisters_ipr2_oscfip = -1;
473 static gint hf_r3_cpuregisters_ipr3_ccp2ip = -1;
474 static gint hf_r3_cpuregisters_ipr3_ccp4ip = -1;
475 static gint hf_r3_cpuregisters_ipr3_ccp5ip = -1;
476 static gint hf_r3_cpuregisters_ipr3_tmr4ip = -1;
477 static gint hf_r3_cpuregisters_ipr3_tx2ip = -1;
478 static gint hf_r3_cpuregisters_ipr3_rc2ip = -1;
479 static gint hf_r3_cpuregisters_ipr3_bcl2ip = -1;
480 static gint hf_r3_cpuregisters_ipr3_ssp2ip = -1;
481 static gint hf_r3_cpuregisters_rcon_bor = -1;
482 static gint hf_r3_cpuregisters_rcon_por = -1;
483 static gint hf_r3_cpuregisters_rcon_pd = -1;
484 static gint hf_r3_cpuregisters_rcon_to = -1;
485 static gint hf_r3_cpuregisters_rcon_unused4 = -1;
486 static gint hf_r3_cpuregisters_rcon_ri = -1;
487 static gint hf_r3_cpuregisters_rcon_sboren = -1;
488 static gint hf_r3_cpuregisters_rcon_ipen = -1;
489 static gint hf_r3_cpuregisters_osccon_scs0 = -1;
490 static gint hf_r3_cpuregisters_osccon_scs1 = -1;
491 static gint hf_r3_cpuregisters_osccon_iofs = -1;
492 static gint hf_r3_cpuregisters_osccon_osts = -1;
493 static gint hf_r3_cpuregisters_osccon_ircf0 = -1;
494 static gint hf_r3_cpuregisters_osccon_ircf1 = -1;
495 static gint hf_r3_cpuregisters_osccon_ircf2 = -1;
496 static gint hf_r3_cpuregisters_osccon_idlen = -1;
497 static gint hf_r3_cpuregisters_rcsta_rx9d = -1;
498 static gint hf_r3_cpuregisters_rcsta_oerr = -1;
499 static gint hf_r3_cpuregisters_rcsta_ferr = -1;
500 static gint hf_r3_cpuregisters_rcsta_adden = -1;
501 static gint hf_r3_cpuregisters_rcsta_cren = -1;
502 static gint hf_r3_cpuregisters_rcsta_sren = -1;
503 static gint hf_r3_cpuregisters_rcsta_rx9 = -1;
504 static gint hf_r3_cpuregisters_rcsta_spen = -1;
505 static gint hf_r3_cpuregisters_txsta_tx9d = -1;
506 static gint hf_r3_cpuregisters_txsta_trmt = -1;
507 static gint hf_r3_cpuregisters_txsta_brgh = -1;
508 static gint hf_r3_cpuregisters_txsta_sendb = -1;
509 static gint hf_r3_cpuregisters_txsta_sync = -1;
510 static gint hf_r3_cpuregisters_txsta_txen = -1;
511 static gint hf_r3_cpuregisters_txsta_tx9 = -1;
512 static gint hf_r3_cpuregisters_txsta_csrc = -1;
513 static gint hf_r3_cpuregisters_rcsta2_rx9d = -1;
514 static gint hf_r3_cpuregisters_rcsta2_oerr = -1;
515 static gint hf_r3_cpuregisters_rcsta2_ferr = -1;
516 static gint hf_r3_cpuregisters_rcsta2_adden = -1;
517 static gint hf_r3_cpuregisters_rcsta2_cren = -1;
518 static gint hf_r3_cpuregisters_rcsta2_sren = -1;
519 static gint hf_r3_cpuregisters_rcsta2_rx9 = -1;
520 static gint hf_r3_cpuregisters_rcsta2_spen = -1;
521 static gint hf_r3_cpuregisters_txsta2_tx9d = -1;
522 static gint hf_r3_cpuregisters_txsta2_trmt = -1;
523 static gint hf_r3_cpuregisters_txsta2_brgh = -1;
524 static gint hf_r3_cpuregisters_txsta2_sendb = -1;
525 static gint hf_r3_cpuregisters_txsta2_sync = -1;
526 static gint hf_r3_cpuregisters_txsta2_txen = -1;
527 static gint hf_r3_cpuregisters_txsta2_tx9 = -1;
528 static gint hf_r3_cpuregisters_txsta2_csrc = -1;
529 static gint hf_r3_cpuregisters_wdtcon_swdten = -1;
530 static gint hf_r3_cpuregisters_wdtcon_unused1 = -1;
531 static gint hf_r3_cpuregisters_wdtcon_unused2 = -1;
532 static gint hf_r3_cpuregisters_wdtcon_unused3 = -1;
533 static gint hf_r3_cpuregisters_wdtcon_unused4 = -1;
534 static gint hf_r3_cpuregisters_wdtcon_unused5 = -1;
535 static gint hf_r3_cpuregisters_wdtcon_unused6 = -1;
536 static gint hf_r3_cpuregisters_wdtcon_unused7 = -1;
538 static gint hf_r3_dumpm41t81_reg00 = -1;
539 static gint hf_r3_dumpm41t81_reg01 = -1;
540 static gint hf_r3_dumpm41t81_reg02 = -1;
541 static gint hf_r3_dumpm41t81_reg03 = -1;
542 static gint hf_r3_dumpm41t81_reg04 = -1;
543 static gint hf_r3_dumpm41t81_reg05 = -1;
544 static gint hf_r3_dumpm41t81_reg06 = -1;
545 static gint hf_r3_dumpm41t81_reg07 = -1;
546 static gint hf_r3_dumpm41t81_reg08 = -1;
547 static gint hf_r3_dumpm41t81_reg09 = -1;
548 static gint hf_r3_dumpm41t81_reg0a = -1;
549 static gint hf_r3_dumpm41t81_reg0b = -1;
550 static gint hf_r3_dumpm41t81_reg0c = -1;
551 static gint hf_r3_dumpm41t81_reg0d = -1;
552 static gint hf_r3_dumpm41t81_reg0e = -1;
553 static gint hf_r3_dumpm41t81_reg0f = -1;
554 static gint hf_r3_dumpm41t81_reg10 = -1;
555 static gint hf_r3_dumpm41t81_reg11 = -1;
556 static gint hf_r3_dumpm41t81_reg12 = -1;
557 static gint hf_r3_dumpm41t81_reg13 = -1;
559 static gint hf_r3_dumpm41t81_reg00_sec1 = -1;
560 static gint hf_r3_dumpm41t81_reg00_sec01 = -1;
561 static gint hf_r3_dumpm41t81_reg01_st = -1;
562 static gint hf_r3_dumpm41t81_reg01_10sec = -1;
563 static gint hf_r3_dumpm41t81_reg01_1sec = -1;
564 static gint hf_r3_dumpm41t81_reg02_notused = -1;
565 static gint hf_r3_dumpm41t81_reg02_10min = -1;
566 static gint hf_r3_dumpm41t81_reg02_1min = -1;
567 static gint hf_r3_dumpm41t81_reg03_cbe = -1;
568 static gint hf_r3_dumpm41t81_reg03_cb = -1;
569 static gint hf_r3_dumpm41t81_reg03_10hour = -1;
570 static gint hf_r3_dumpm41t81_reg03_1hour = -1;
571 static gint hf_r3_dumpm41t81_reg04_notused = -1;
572 static gint hf_r3_dumpm41t81_reg04_dow = -1;
573 static gint hf_r3_dumpm41t81_reg05_notused = -1;
574 static gint hf_r3_dumpm41t81_reg05_10day = -1;
575 static gint hf_r3_dumpm41t81_reg05_1day = -1;
576 static gint hf_r3_dumpm41t81_reg06_notused = -1;
577 static gint hf_r3_dumpm41t81_reg06_10month = -1;
578 static gint hf_r3_dumpm41t81_reg06_1month = -1;
579 static gint hf_r3_dumpm41t81_reg07_10year = -1;
580 static gint hf_r3_dumpm41t81_reg07_1year = -1;
581 static gint hf_r3_dumpm41t81_reg08_out = -1;
582 static gint hf_r3_dumpm41t81_reg08_ft = -1;
583 static gint hf_r3_dumpm41t81_reg08_s = -1;
584 static gint hf_r3_dumpm41t81_reg08_cal = -1;
585 static gint hf_r3_dumpm41t81_reg09_notused = -1;
586 static gint hf_r3_dumpm41t81_reg09_bmb = -1;
587 static gint hf_r3_dumpm41t81_reg09_rb = -1;
588 static gint hf_r3_dumpm41t81_reg0a_afe = -1;
589 static gint hf_r3_dumpm41t81_reg0a_sqwe = -1;
590 static gint hf_r3_dumpm41t81_reg0a_abe = -1;
591 static gint hf_r3_dumpm41t81_reg0a_10monthalm = -1;
592 static gint hf_r3_dumpm41t81_reg0a_1monthalm = -1;
593 static gint hf_r3_dumpm41t81_reg0b_rpt5 = -1;
594 static gint hf_r3_dumpm41t81_reg0b_rpt4 = -1;
595 static gint hf_r3_dumpm41t81_reg0b_10dayalm = -1;
596 static gint hf_r3_dumpm41t81_reg0b_1dayalm = -1;
597 static gint hf_r3_dumpm41t81_reg0c_rpt3 = -1;
598 static gint hf_r3_dumpm41t81_reg0c_ht = -1;
599 static gint hf_r3_dumpm41t81_reg0c_10houralm = -1;
600 static gint hf_r3_dumpm41t81_reg0c_1houralm = -1;
601 static gint hf_r3_dumpm41t81_reg0d_rpt2 = -1;
602 static gint hf_r3_dumpm41t81_reg0d_10minalm = -1;
603 static gint hf_r3_dumpm41t81_reg0d_1minalm = -1;
604 static gint hf_r3_dumpm41t81_reg0e_rpt1 = -1;
605 static gint hf_r3_dumpm41t81_reg0e_10secalm = -1;
606 static gint hf_r3_dumpm41t81_reg0e_1secalm = -1;
607 static gint hf_r3_dumpm41t81_reg0f_wdf = -1;
608 static gint hf_r3_dumpm41t81_reg0f_af = -1;
609 static gint hf_r3_dumpm41t81_reg0f_notused = -1;
610 static gint hf_r3_dumpm41t81_reg10_notused = -1;
611 static gint hf_r3_dumpm41t81_reg11_notused = -1;
612 static gint hf_r3_dumpm41t81_reg12_notused = -1;
613 static gint hf_r3_dumpm41t81_reg13_rs = -1;
614 static gint hf_r3_dumpm41t81_reg13_notused = -1;
616 static gint hf_r3_debuglog_recordnumber = -1;
617 static gint hf_r3_debuglog_flags = -1;
618 static gint hf_r3_debuglog_tick = -1;
620 static gint hf_r3_adduserparamtype = -1;
621 static gint hf_r3_adduserparamtypelength = -1;
622 static gint hf_r3_adduserparamtypetype = -1;
623 static gint hf_r3_adduserparamtypedatalen = -1;
624 static gint hf_r3_adduserparamtypeerror = -1;
625 static gint hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_LAST];
628 * These control the expansion of proto_item_add_subtree() added items
630 static gint ett_r3 = -1;
631 static gint ett_r3header = -1;
632 static gint ett_r3tail = -1;
633 static gint ett_r3payload = -1;
634 static gint ett_r3cmd = -1;
635 static gint ett_r3configitem = -1;
636 static gint ett_r3upstreamcommand = -1;
637 static gint ett_r3upstreamfield = -1;
638 static gint ett_r3timezone = -1;
639 static gint ett_r3expireon = -1;
640 static gint ett_r3datetime = -1;
641 static gint ett_r3eventlogrecord = -1;
642 static gint ett_r3declinedlogrecord = -1;
643 static gint ett_r3alarmlogrecord = -1;
644 static gint ett_r3debugmsg = -1;
645 static gint ett_r3defineexceptionstartdate = -1;
646 static gint ett_r3defineexceptionenddate = -1;
647 static gint ett_r3defineexceptiongroupbits = -1;
648 static gint ett_r3definecalendarmonth [13] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
649 static gint ett_r3definetimezonestarttime = -1;
650 static gint ett_r3definetimezoneendtime = -1;
651 static gint ett_r3definetimezonedaymap = -1;
652 static gint ett_r3eventlogdumpstarttime = -1;
653 static gint ett_r3eventlogdumpendtime = -1;
654 static gint ett_r3declinedlogdumpstarttime = -1;
655 static gint ett_r3declinedlogdumpendtime = -1;
656 static gint ett_r3alarmlogdumpstarttime = -1;
657 static gint ett_r3alarmlogdumpendtime = -1;
658 static gint ett_r3clearnvram = -1;
659 static gint ett_r3filters = -1;
660 static gint ett_r3alarmlist = -1;
661 static gint ett_r3alarmcfg = -1;
662 static gint ett_r3commandmfg = -1;
663 static gint ett_r3serialnumber = -1;
664 static gint ett_r3iopins = -1;
665 static gint ett_r3checksumresults = -1;
666 static gint ett_r3checksumresultsfield = -1;
667 static gint ett_r3forceoptions = -1;
668 static gint ett_r3peekpoke = -1;
669 static gint ett_r3downloadfirmware = -1;
670 static gint ett_r3capabilities = -1;
671 static gint ett_r3lockstate = -1;
672 static gint ett_r3mortisestatelog = -1;
673 static gint ett_r3timerchain = -1;
674 static gint ett_r3taskflags = -1;
675 static gint ett_r3taskflagsentry = -1;
676 static gint ett_r3checkpointlog = -1;
677 static gint ett_r3checkpointlogentry = -1;
678 static gint ett_r3cpuregisters = -1;
679 static gint ett_r3cpuregister = -1;
680 static gint ett_r3m41t81registers = -1;
681 static gint ett_r3m41t81register = -1;
682 static gint ett_r3debuglogrecord = -1;
683 static gint ett_r3setdatetime = -1;
684 static gint ett_r3manageuser = -1;
687 * Setup protocol subtree array
689 static gint *ett [] =
697 &ett_r3upstreamcommand,
698 &ett_r3upstreamfield,
702 &ett_r3eventlogrecord,
703 &ett_r3declinedlogrecord,
704 &ett_r3alarmlogrecord,
706 &ett_r3defineexceptionstartdate,
707 &ett_r3defineexceptionenddate,
708 &ett_r3defineexceptiongroupbits,
709 &ett_r3definecalendarmonth [1],
710 &ett_r3definecalendarmonth [2],
711 &ett_r3definecalendarmonth [3],
712 &ett_r3definecalendarmonth [4],
713 &ett_r3definecalendarmonth [5],
714 &ett_r3definecalendarmonth [6],
715 &ett_r3definecalendarmonth [7],
716 &ett_r3definecalendarmonth [8],
717 &ett_r3definecalendarmonth [9],
718 &ett_r3definecalendarmonth [10],
719 &ett_r3definecalendarmonth [11],
720 &ett_r3definecalendarmonth [12],
721 &ett_r3definetimezonestarttime,
722 &ett_r3definetimezoneendtime,
723 &ett_r3definetimezonedaymap,
724 &ett_r3eventlogdumpstarttime,
725 &ett_r3eventlogdumpendtime,
726 &ett_r3declinedlogdumpstarttime,
727 &ett_r3declinedlogdumpendtime,
728 &ett_r3alarmlogdumpstarttime,
729 &ett_r3alarmlogdumpendtime,
737 &ett_r3checksumresults,
738 &ett_r3checksumresultsfield,
741 &ett_r3downloadfirmware,
744 &ett_r3mortisestatelog,
747 &ett_r3taskflagsentry,
748 &ett_r3checkpointlog,
749 &ett_r3checkpointlogentry,
752 &ett_r3m41t81registers,
753 &ett_r3m41t81register,
754 &ett_r3debuglogrecord,
760 * Indicates next command to be processed as a manufacturing command
762 static gint mfgCommandFlag = FALSE;
765 * Some enums that don't exist in public.h and should
822 CHECKPOINT_WANDERING,
823 CHECKPOINT_STRAYHPINT,
824 CHECKPOINT_STRAYLPINT,
826 CHECKPOINT_DPACDEBUG,
845 DOWNLOADFIRMWARE_START = 0,
846 DOWNLOADFIRMWARE_DATA,
847 DOWNLOADFIRMWARE_COMPLETE,
848 DOWNLOADFIRMWARE_ABORT,
849 DOWNLOADFIRMWARE_RESET,
850 DOWNLOADFIRMWARE_LAST
856 MORTISEEVENT_DX_THROWN = 0,
857 MORTISEEVENT_DX_RETRACTED,
858 MORTISEEVENT_LX_RETRACTED,
859 MORTISEEVENT_LX_EXTENDED,
860 MORTISEEVENT_AX_EXTENDED,
861 MORTISEEVENT_AX_RETRACTED,
862 MORTISEEVENT_RX_DEPRESSED,
863 MORTISEEVENT_RX_RELEASED,
864 MORTISEEVENT_PX_OPEN,
865 MORTISEEVENT_PX_CLOSED,
866 MORTISEEVENT_MX_UNLOCKED,
867 MORTISEEVENT_MX_LOCKED,
874 * Print things with nice textual names
876 static const value_string r3_accessmodenames [] =
878 { ACCESSMODE_NONE, "ACCESMODE_NONE" },
879 { ACCESSMODE_PRIMARYONLY, "ACCESSMODE_PRIMARYONLY" },
880 { ACCESSMODE_PRIMARYORAUX, "ACCESSMODE_PRIMARYORAUX" },
881 { ACCESSMODE_PRIMARYANDAUX, "ACCESSMODE_PRIMARYANDAUX" },
882 { ACCESSMODE_PRIMARYTHENAUX, "ACCESSMODE_PRIMARYTHENAUX" },
885 static value_string_ext r3_accessmodenames_ext = VALUE_STRING_EXT_INIT(r3_accessmodenames);
887 static const value_string r3_adduserparamtypenames [] =
889 { ADDUSERPARAMTYPE_DISPOSITION, "ADDUSERPARAMTYPE_DISPOSITION" },
890 { ADDUSERPARAMTYPE_USERNO, "ADDUSERPARAMTYPE_USERNO" },
891 { ADDUSERPARAMTYPE_ACCESSALWAYS, "ADDUSERPARAMTYPE_ACCESSALWAYS" },
892 { ADDUSERPARAMTYPE_ACCESSMODE, "ADDUSERPARAMTYPE_ACCESSMODE" },
893 { ADDUSERPARAMTYPE_CACHED, "ADDUSERPARAMTYPE_CACHED" },
894 { ADDUSERPARAMTYPE_USERTYPE, "ADDUSERPARAMTYPE_USERTYPE" },
895 { ADDUSERPARAMTYPE_PRIMARYFIELD, "ADDUSERPARAMTYPE_PRIMARYFIELD" },
896 { ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, "ADDUSERPARAMTYPE_PRIMARYFIELDTYPE" },
897 { ADDUSERPARAMTYPE_AUXFIELD, "ADDUSERPARAMTYPE_AUXFIELD" },
898 { ADDUSERPARAMTYPE_AUXFIELDTYPE, "ADDUSERPARAMTYPE_AUXFIELDTYPE" },
899 { ADDUSERPARAMTYPE_TIMEZONE, "ADDUSERPARAMTYPE_TIMEZONE" },
900 { ADDUSERPARAMTYPE_EXPIREON, "ADDUSERPARAMTYPE_EXPIREON" },
901 { ADDUSERPARAMTYPE_USECOUNT, "ADDUSERPARAMTYPE_USECOUNT" },
902 { ADDUSERPARAMTYPE_EXCEPTIONGROUP, "ADDUSERPARAMTYPE_EXCEPTIONGROUP" },
905 static value_string_ext r3_adduserparamtypenames_ext = VALUE_STRING_EXT_INIT(r3_adduserparamtypenames);
907 static const value_string r3_alarmidnames [] =
909 { ALARMID_NONE, "ALARMID_NONE" },
910 { ALARMID_VALIDIN, "ALARMID_VALIDIN" },
911 { ALARMID_DENIEDACCESS, "ALARMID_DENIEDACCESS" },
912 { ALARMID_SECURED, "ALARMID_SECURED" },
913 { ALARMID_DOORFORCED, "ALARMID_DOORFORCED" },
914 { ALARMID_KEYOVERRIDE, "ALARMID_KEYOVERRIDE" },
915 { ALARMID_INVALIDENTRY, "ALARMID_INVALIDENTRY" },
916 { ALARMID_DOORAJAR, "ALARMID_DOORAJAR" },
917 { ALARMID_LOWBATTERY, "ALARMID_LOWBATTERY" },
918 { ALARMID_RXHELD, "ALARMID_RXHELD" },
921 static value_string_ext r3_alarmidnames_ext = VALUE_STRING_EXT_INIT(r3_alarmidnames);
923 static const value_string r3_capabilitiesnames [] =
925 { CAPABILITIES_USERS, "CAPABILITIES_USERS" },
926 { CAPABILITIES_TIMEZONES, "CAPABILITIES_TIMEZONES" },
927 { CAPABILITIES_EXCEPTIONS, "CAPABILITIES_EXCEPTIONS" },
928 { CAPABILITIES_EXCEPTIONGROUPS, "CAPABILITIES_EXCEPTIONGROUPS" },
929 { CAPABILITIES_EVENTLOG, "CAPABILITIES_EVENTLOG" },
930 { CAPABILITIES_DECLINEDLOG, "CAPABILITIES_DECLINEDLOG" },
931 { CAPABILITIES_ALARMLOG, "CAPABILITIES_ALARMLOG" },
932 { CAPABILITIES_TOTALEVENTS, "CAPABILITIES_TOTALEVENTS" },
935 static value_string_ext r3_capabilitiesnames_ext = VALUE_STRING_EXT_INIT(r3_capabilitiesnames);
937 static const value_string r3_checkpointnames [] =
939 { CHECKPOINT_NONE, "CHECKPOINT_NONE" },
940 { CHECKPOINT_ADC, "CHECKPOINT_ADC" },
941 { CHECKPOINT_DPAC1, "CHECKPOINT_DPAC1" },
942 { CHECKPOINT_DPAC2, "CHECKPOINT_DPAC2" },
943 { CHECKPOINT_I2C1, "CHECKPOINT_I2C1" },
944 { CHECKPOINT_I2C2, "CHECKPOINT_I2C2" },
945 { CHECKPOINT_I2C3, "CHECKPOINT_I2C3" },
946 { CHECKPOINT_I2C4, "CHECKPOINT_I2C4" },
947 { CHECKPOINT_I2C5, "CHECKPOINT_I2C5" },
948 { CHECKPOINT_I2C6, "CHECKPOINT_I2C6" },
949 { CHECKPOINT_I2C7, "CHECKPOINT_I2C7" },
950 { CHECKPOINT_I2C8, "CHECKPOINT_I2C8" },
951 { CHECKPOINT_I2C9, "CHECKPOINT_I2C9" },
952 { CHECKPOINT_I2C10, "CHECKPOINT_I2C10" },
953 { CHECKPOINT_I2C11, "CHECKPOINT_I2C11" },
954 { CHECKPOINT_I2C12, "CHECKPOINT_I2C12" },
955 { CHECKPOINT_I2C13, "CHECKPOINT_I2C13" },
956 { CHECKPOINT_I2C14, "CHECKPOINT_I2C14" },
957 { CHECKPOINT_I2C15, "CHECKPOINT_I2C15" },
958 { CHECKPOINT_I2C16, "CHECKPOINT_I2C16" },
959 { CHECKPOINT_I2C17, "CHECKPOINT_I2C17" },
960 { CHECKPOINT_I2C18, "CHECKPOINT_I2C18" },
961 { CHECKPOINT_I2C19, "CHECKPOINT_I2C19" },
962 { CHECKPOINT_I2C20, "CHECKPOINT_I2C20" },
963 { CHECKPOINT_I2C21, "CHECKPOINT_I2C21" },
964 { CHECKPOINT_I2C22, "CHECKPOINT_I2C22" },
965 { CHECKPOINT_I2C23, "CHECKPOINT_I2C23" },
966 { CHECKPOINT_I2C24, "CHECKPOINT_I2C24" },
967 { CHECKPOINT_I2C25, "CHECKPOINT_I2C25" },
968 { CHECKPOINT_I2C26, "CHECKPOINT_I2C26" },
969 { CHECKPOINT_I2C27, "CHECKPOINT_I2C27" },
970 { CHECKPOINT_I2C28, "CHECKPOINT_I2C28" },
971 { CHECKPOINT_I2C29, "CHECKPOINT_I2C29" },
972 { CHECKPOINT_I2C30, "CHECKPOINT_I2C30" },
973 { CHECKPOINT_I2C31, "CHECKPOINT_I2C31" },
974 { CHECKPOINT_I2C32, "CHECKPOINT_I2C32" },
975 { CHECKPOINT_I2C33, "CHECKPOINT_I2C33" },
976 { CHECKPOINT_I2C34, "CHECKPOINT_I2C34" },
977 { CHECKPOINT_I2C35, "CHECKPOINT_I2C35" },
978 { CHECKPOINT_I2C36, "CHECKPOINT_I2C36" },
979 { CHECKPOINT_I2C37, "CHECKPOINT_I2C37" },
980 { CHECKPOINT_I2C38, "CHECKPOINT_I2C38" },
981 { CHECKPOINT_I2C39, "CHECKPOINT_I2C39" },
982 { CHECKPOINT_I2C40, "CHECKPOINT_I2C40" },
983 { CHECKPOINT_I2C41, "CHECKPOINT_I2C41" },
984 { CHECKPOINT_I2C42, "CHECKPOINT_I2C42" },
985 { CHECKPOINT_I2C43, "CHECKPOINT_I2C43" },
986 { CHECKPOINT_I2C44, "CHECKPOINT_I2C44" },
987 { CHECKPOINT_I2C45, "CHECKPOINT_I2C45" },
988 { CHECKPOINT_NVRAM, "CHECKPOINT_NVRAM" },
989 { CHECKPOINT_SERIAL1, "CHECKPOINT_SERIAL1" },
990 { CHECKPOINT_SERIAL2, "CHECKPOINT_SERIAL2" },
991 { CHECKPOINT_SERIAL3, "CHECKPOINT_SERIAL3" },
992 { CHECKPOINT_WANDERING, "CHECKPOINT_WANDERING" },
993 { CHECKPOINT_STRAYHPINT, "CHECKPOINT_STRAYHPINT" },
994 { CHECKPOINT_STRAYLPINT, "CHECKPOINT_STRAYLPINT" },
995 { CHECKPOINT_TESTWDT, "CHECKPOINT_TESTWDT" },
996 { CHECKPOINT_DPACDEBUG, "CHECKPOINT_DPACDEBUG" },
999 static value_string_ext r3_checkpointnames_ext = VALUE_STRING_EXT_INIT(r3_checkpointnames);
1001 static const value_string r3_checksumresultnames [] =
1003 { CHECKSUMRESULT_CONFIGURATIONNVRAM, "CHECKSUMRESULT_CONFIGURATIONNVRAM" },
1004 { CHECKSUMRESULT_EXCEPTIONS, "CHECKSUMRESULT_EXCEPTIONS" },
1005 { CHECKSUMRESULT_EXCEPTIONGROUPS, "CHECKSUMRESULT_EXCEPTIONGROUPS" },
1006 { CHECKSUMRESULT_TZCALENDARS, "CHECKSUMRESULT_TZCALENDARS" },
1007 { CHECKSUMRESULT_TIMEZONES, "CHECKSUMRESULT_TIMEZONES" },
1008 { CHECKSUMRESULT_USERS, "CHECKSUMRESULT_USERS" },
1009 { CHECKSUMRESULT_CACHELRU, "CHECKSUMRESULT_CACHELRU" },
1012 static value_string_ext r3_checksumresultnames_ext = VALUE_STRING_EXT_INIT(r3_checksumresultnames);
1014 static const value_string r3_cmdnames [] =
1016 { CMD_RESPONSE, "CMD_RESPONSE" },
1017 { CMD_HANDSHAKE, "CMD_HANDSHAKE" },
1018 { CMD_KILLSESSION, "CMD_KILLSESSION" },
1019 { CMD_QUERYSERIALNUMBER, "CMD_QUERYSERIALNUMBER" },
1020 { CMD_QUERYVERSION, "CMD_QUERYVERSION" },
1021 { CMD_SETDATETIME, "CMD_SETDATETIME" },
1022 { CMD_QUERYDATETIME, "CMD_QUERYDATETIME" },
1023 { CMD_SETCONFIG, "CMD_SETCONFIG" },
1024 { CMD_GETCONFIG, "CMD_GETCONFIG" },
1025 { CMD_MANAGEUSER, "CMD_MANAGEUSER" },
1026 { CMD_DELETEUSERS, "CMD_DELETEUSERS" },
1027 { CMD_DEFINEEXCEPTION, "CMD_DEFINEEXCEPTION" },
1028 { CMD_DEFINEEXCEPTIONGROUP, "CMD_DEFINEEXCEPTIONGROUP" },
1029 { CMD_DEFINECALENDAR, "CMD_DEFINECALENDAR" },
1030 { CMD_DEFINETIMEZONE, "CMD_DEFINETIMEZONE" },
1031 { CMD_RMTAUTHRETRY, "CMD_RMTAUTHRETRY" },
1032 { CMD_FILTERS, "CMD_FILTERS" },
1033 { CMD_ALARMCONFIGURE, "CMD_ALARMCONFIGURE" },
1034 { CMD_EVENTLOGDUMP, "CMD_EVENTLOGDUMP" },
1035 { CMD_DECLINEDLOGDUMP, "CMD_DECLINEDLOGDUMP" },
1036 { CMD_ALARMLOGDUMP, "CMD_ALARMLOGDUMP" },
1037 { CMD_DOWNLOADFIRMWARE, "CMD_DOWNLOADFIRMWARE" },
1038 { CMD_DOWNLOADFIRMWARETIMEOUT, "CMD_DOWNLOADFIRMWARETIMEOUT" },
1039 { CMD_POWERTABLESELECTION, "CMD_POWERTABLESELECTION" },
1040 { CMD_CLEARNVRAM, "CMD_CLEARNVRAM" },
1041 { CMD_DPAC, "CMD_DPAC" },
1042 { CMD_SELFTEST, "CMD_SELFTEST" },
1043 { CMD_RESET, "CMD_RESET" },
1044 { CMD_LOGWRITE, "CMD_LOGWRITE" },
1045 { CMD_MFGCOMMAND, "CMD_MFGCOMMAND" },
1046 { CMD_NVRAMBACKUP, "CMD_NVRAMBACKUP" },
1047 { CMD_EXTENDEDRESPONSE, "CMD_EXTENDEDRESPONSE" },
1050 static value_string_ext r3_cmdnames_ext = VALUE_STRING_EXT_INIT(r3_cmdnames);
1052 static const value_string r3_cmdmfgnames [] =
1054 { CMDMFG_SETSERIALNUMBER, "CMDMFG_SETSERIALNUMBER" },
1055 { CMDMFG_SETCRYPTKEY, "CMDMFG_SETCRYPTKEY" },
1056 { CMDMFG_DUMPNVRAM, "CMDMFG_DUMPNVRAM" },
1057 { CMDMFG_TERMINAL, "CMDMFG_TERMINAL" },
1058 { CMDMFG_REMOTEUNLOCK, "CMDMFG_REMOTEUNLOCK" },
1059 { CMDMFG_AUXCTLRVERSION, "CMDMFG_AUXCTLRVERSION" },
1060 { CMDMFG_IOPINS, "CMDMFG_IOPINS" },
1061 { CMDMFG_ADCS, "CMDMFG_ADCS" },
1062 { CMDMFG_HARDWAREID, "CMDMFG_HARDWAREID" },
1063 { CMDMFG_CHECKPOINTLOGDUMP, "CMDMFG_CHECKPOINTLOGDUMP" },
1064 { CMDMFG_CHECKPOINTLOGCLEAR, "CMDMFG_CHECKPOINTLOGCLEAR" },
1065 { CMDMFG_READREGISTERS, "CMDMFG_READREGISTERS" },
1066 { CMDMFG_FORCEOPTIONS, "CMDMFG_FORCEOPTIONS" },
1067 { CMDMFG_COMMUSER, "CMDMFG_COMMUSER" },
1068 { CMDMFG_DUMPKEYPAD, "CMDMFG_DUMPKEYPAD" },
1069 { CMDMFG_BATTERYCHECK, "CMDMFG_BATTERYCHECK" },
1070 { CMDMFG_RAMREFRESH, "CMDMFG_RAMREFRESH" },
1071 { CMDMFG_TASKFLAGS, "CMDMFG_TASKFLAGS" },
1072 { CMDMFG_TIMERCHAIN, "CMDMFG_TIMERCHAIN" },
1073 { CMDMFG_PEEKPOKE, "CMDMFG_PEEKPOKE" },
1074 { CMDMFG_LOCKSTATE, "CMDMFG_LOCKSTATE" },
1075 { CMDMFG_CAPABILITIES, "CMDMFG_CAPABILITIES" },
1076 { CMDMFG_DUMPM41T81, "CMDMFG_DUMPM41T81" },
1077 { CMDMFG_DEBUGLOGDUMP, "CMDMFG_DEBUGLOGDUMP" },
1078 { CMDMFG_DEBUGLOGCLEAR, "CMDMFG_DEBUGLOGCLEAR" },
1079 { CMDMFG_TESTWDT, "CMDMFG_TESTWDT" },
1080 { CMDMFG_QUERYCKSUM, "CMDMFG_QUERYCKSUM" },
1081 { CMDMFG_VALIDATECHECKSUMS, "CMDMFG_VALIDATECHECKSUMS" },
1082 { CMDMFG_REBUILDLRUCACHE, "CMDMFG_REBUILDLRUCACHE" },
1083 { CMDMFG_TZUPDATE, "CMDMFG_TZUPDATE" },
1084 { CMDMFG_TESTPRESERVE, "CMDMFG_TESTPRESERVE" },
1085 { CMDMFG_MORTISESTATELOGDUMP, "CMDMFG_MORTISESTATELOGDUMP" },
1086 { CMDMFG_MORTISESTATELOGCLEAR, "CMDMFG_MORTISESTATELOGCLEAR" },
1087 { CMDMFG_MORTISEPINS, "CMDMFG_MORTISEPINS" },
1088 { CMDMFG_HALTANDCATCHFIRE, "CMDMFG_HALTANDCATCHFIRE" },
1091 static value_string_ext r3_cmdmfgnames_ext = VALUE_STRING_EXT_INIT(r3_cmdmfgnames);
1093 static const value_string r3_configitemnames [] =
1095 { CONFIGITEM_SERIAL_NUMBER, "CONFIGITEM_SERIAL_NUMBER" },
1096 { CONFIGITEM_CRYPT_KEY, "CONFIGITEM_CRYPT_KEY" },
1097 { CONFIGITEM_HARDWARE_OPTIONS_MFG, "CONFIGITEM_HARDWARE_OPTIONS_MFG" },
1098 { CONFIGITEM_HARDWARE_OPTIONS, "CONFIGITEM_HARDWARE_OPTIONS" },
1099 { CONFIGITEM_NVRAM_CHANGES, "CONFIGITEM_NVRAM_CHANGES" },
1100 { CONFIGITEM_NVRAMDIRTY, "CONFIGITEM_NVRAMDIRTY" },
1101 { CONFIGITEM_NVRAM_WV, "CONFIGITEM_NVRAM_WV" },
1102 { CONFIGITEM_ENABLE_WDT, "CONFIGITEM_ENABLE_WDT" },
1103 { CONFIGITEM_EARLY_ACK, "CONFIGITEM_EARLY_ACK" },
1104 { CONFIGITEM_CONSOLE_AES_ONLY, "CONFIGITEM_CONSOLE_AES_ONLY" },
1105 { CONFIGITEM_RADIO_AES_ONLY, "CONFIGITEM_RADIO_AES_ONLY" },
1106 { CONFIGITEM_NDRLE, "CONFIGITEM_NDRLE" },
1107 { CONFIGITEM_SOMF, "CONFIGITEM_SOMF" },
1108 { CONFIGITEM_NOGAF, "CONFIGITEM_NOGAF" },
1109 { CONFIGITEM_CARD_READER_POWER, "CONFIGITEM_CARD_READER_POWER" },
1110 { CONFIGITEM_PROX_ENABLE, "CONFIGITEM_PROX_ENABLE" },
1111 { CONFIGITEM_CKSUMCONFIG, "CONFIGITEM_CKSUMCONFIG" },
1112 { CONFIGITEM_DAILY_BATTERY_CHECK, "CONFIGITEM_DAILY_BATTERY_CHECK" },
1113 { CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, "CONFIGITEM_DAILY_BATTERY_CHECK_HOUR" },
1114 { CONFIGITEM_BATTERY_LOW, "CONFIGITEM_BATTERY_LOW" },
1115 { CONFIGITEM_LRU_HEAD, "CONFIGITEM_LRU_HEAD" },
1116 { CONFIGITEM_LRU_TAIL, "CONFIGITEM_LRU_TAIL" },
1117 { CONFIGITEM_RTC_CALIBRATION, "CONFIGITEM_RTC_CALIBRATION" },
1118 { CONFIGITEM_ACVREQUESTER, "CONFIGITEM_ACVREQUESTER" },
1119 { CONFIGITEM_LOCAL_LED, "CONFIGITEM_LOCAL_LED" },
1120 { CONFIGITEM_ERRCNT_XORLEN, "CONFIGITEM_ERRCNT_XORLEN" },
1121 { CONFIGITEM_ERRCNT_CRC, "CONFIGITEM_ERRCNT_CRC" },
1122 { CONFIGITEM_ERRCNT_NOTSIGIL, "CONFIGITEM_ERRCNT_NOTSIGIL" },
1123 { CONFIGITEM_ERRCNT_TIMEOUT, "CONFIGITEM_ERRCNT_TIMEOUT" },
1124 { CONFIGITEM_ERRCNT_TOOLONG, "CONFIGITEM_ERRCNT_TOOLONG" },
1125 { CONFIGITEM_ERRCNT_TOOSHORT, "CONFIGITEM_ERRCNT_TOOSHORT" },
1126 { CONFIGITEM_ERRCNT_HITDEFAULT, "CONFIGITEM_ERRCNT_HITDEFAULT" },
1127 { CONFIGITEM_ERRCNT_OVERRUN, "CONFIGITEM_ERRCNT_OVERRUN" },
1128 { CONFIGITEM_ERRCNT_UARTFE, "CONFIGITEM_ERRCNT_UARTFE" },
1129 { CONFIGITEM_ERRCNT_UARTOE, "CONFIGITEM_ERRCNT_UARTOE" },
1130 { CONFIGITEM_DST_SET, "CONFIGITEM_DST_SET" },
1131 { CONFIGITEM_DST_MODE, "CONFIGITEM_DST_MODE" },
1132 { CONFIGITEM_DST_FORWARD_MONTH, "CONFIGITEM_DST_FORWARD_MONTH" },
1133 { CONFIGITEM_DST_FORWARD_DOM, "CONFIGITEM_DST_FORWARD_DOM" },
1134 { CONFIGITEM_DST_FORWARD_OOD, "CONFIGITEM_DST_FORWARD_OOD" },
1135 { CONFIGITEM_DST_FORWARD_DOW, "CONFIGITEM_DST_FORWARD_DOW" },
1136 { CONFIGITEM_DST_FORWARD_HOUR, "CONFIGITEM_DST_FORWARD_HOUR" },
1137 { CONFIGITEM_DST_FORWARD_MINUTE, "CONFIGITEM_DST_FORWARD_MINUTE" },
1138 { CONFIGITEM_DST_FORWARD_ADJUST, "CONFIGITEM_DST_FORWARD_ADJUST" },
1139 { CONFIGITEM_DST_BACK_MONTH, "CONFIGITEM_DST_BACK_MONTH" },
1140 { CONFIGITEM_DST_BACK_DOM, "CONFIGITEM_DST_BACK_DOM" },
1141 { CONFIGITEM_DST_BACK_OOD, "CONFIGITEM_DST_BACK_OOD" },
1142 { CONFIGITEM_DST_BACK_DOW, "CONFIGITEM_DST_BACK_DOW" },
1143 { CONFIGITEM_DST_BACK_HOUR, "CONFIGITEM_DST_BACK_HOUR" },
1144 { CONFIGITEM_DST_BACK_MINUTE, "CONFIGITEM_DST_BACK_MINUTE" },
1145 { CONFIGITEM_DST_BACK_ADJUST, "CONFIGITEM_DST_BACK_ADJUST" },
1146 { CONFIGITEM_EVENTLOG_ZEROMEM, "CONFIGITEM_EVENTLOG_ZEROMEM" },
1147 { CONFIGITEM_EVENTLOG_BEGIN, "CONFIGITEM_EVENTLOG_BEGIN" },
1148 { CONFIGITEM_EVENTLOG_RECORD, "CONFIGITEM_EVENTLOG_RECORD" },
1149 { CONFIGITEM_EVENTLOG_ENTRIES, "CONFIGITEM_EVENTLOG_ENTRIES" },
1150 { CONFIGITEM_EVENTLOG_WARNDEVICE, "CONFIGITEM_EVENTLOG_WARNDEVICE" },
1151 { CONFIGITEM_EVENTLOG_WARNEVERY, "CONFIGITEM_EVENTLOG_WARNEVERY" },
1152 { CONFIGITEM_EVENTLOG_RMTDEVICE, "CONFIGITEM_EVENTLOG_RMTDEVICE" },
1153 { CONFIGITEM_DECLINEDLOG_ZEROMEM, "CONFIGITEM_DECLINEDLOG_ZEROMEM" },
1154 { CONFIGITEM_DECLINEDLOG_BEGIN, "CONFIGITEM_DECLINEDLOG_BEGIN" },
1155 { CONFIGITEM_DECLINEDLOG_RECORD, "CONFIGITEM_DECLINEDLOG_RECORD" },
1156 { CONFIGITEM_DECLINEDLOG_ENTRIES, "CONFIGITEM_DECLINEDLOG_ENTRIES" },
1157 { CONFIGITEM_DECLINEDLOG_WARNDEVICE, "CONFIGITEM_DECLINEDLOG_WARNDEVICE" },
1158 { CONFIGITEM_DECLINEDLOG_WARNEVERY, "CONFIGITEM_DECLINEDLOG_WARNEVERY" },
1159 { CONFIGITEM_DECLINEDLOG_RMTDEVICE, "CONFIGITEM_DECLINEDLOG_RMTDEVICE" },
1160 { CONFIGITEM_ALARMLOG_ZEROMEM, "CONFIGITEM_ALARMLOG_ZEROMEM" },
1161 { CONFIGITEM_ALARMLOG_BEGIN, "CONFIGITEM_ALARMLOG_BEGIN" },
1162 { CONFIGITEM_ALARMLOG_RECORD, "CONFIGITEM_ALARMLOG_RECORD" },
1163 { CONFIGITEM_ALARMLOG_ENTRIES, "CONFIGITEM_ALARMLOG_ENTRIES" },
1164 { CONFIGITEM_ALARMLOG_WARNDEVICE, "CONFIGITEM_ALARMLOG_WARNDEVICE" },
1165 { CONFIGITEM_ALARMLOG_WARNEVERY, "CONFIGITEM_ALARMLOG_WARNEVERY" },
1166 { CONFIGITEM_ALARMLOG_RMTDEVICE, "CONFIGITEM_ALARMLOG_RMTDEVICE" },
1167 { CONFIGITEM_VISIBLE_FEEDBACK, "CONFIGITEM_VISIBLE_FEEDBACK" },
1168 { CONFIGITEM_AUDIBLE_FEEDBACK, "CONFIGITEM_AUDIBLE_FEEDBACK" },
1169 { CONFIGITEM_VISIBLE_INDICATORS, "CONFIGITEM_VISIBLE_INDICATORS" },
1170 { CONFIGITEM_AUDIBLE_INDICATORS, "CONFIGITEM_AUDIBLE_INDICATORS" },
1171 { CONFIGITEM_2NDPINDURATION, "CONFIGITEM_2NDPINDURATION" },
1172 { CONFIGITEM_LOCKOUT_ATTEMPTS, "CONFIGITEM_LOCKOUT_ATTEMPTS" },
1173 { CONFIGITEM_LOCKOUT_DURATION, "CONFIGITEM_LOCKOUT_DURATION" },
1174 { CONFIGITEM_KEYPAD_INACTIVITY, "CONFIGITEM_KEYPAD_INACTIVITY" },
1175 { CONFIGITEM_ICIDLE_DURATION, "CONFIGITEM_ICIDLE_DURATION" },
1176 { CONFIGITEM_WRITE_DECLINED_LOG, "CONFIGITEM_WRITE_DECLINED_LOG" },
1177 { CONFIGITEM_LOW_BATTERY_INDICATOR, "CONFIGITEM_LOW_BATTERY_INDICATOR" },
1178 { CONFIGITEM_PANIC_MODE, "CONFIGITEM_PANIC_MODE" },
1179 { CONFIGITEM_TIMEZONE_ENABLE, "CONFIGITEM_TIMEZONE_ENABLE" },
1180 { CONFIGITEM_EXCEPTION_ENABLE, "CONFIGITEM_EXCEPTION_ENABLE" },
1181 { CONFIGITEM_AUTOUNLOCK_ENABLE, "CONFIGITEM_AUTOUNLOCK_ENABLE" },
1182 { CONFIGITEM_LOCK_PRIORITY_EMERGENCY, "CONFIGITEM_LOCK_PRIORITY_EMERGENCY" },
1183 { CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, "CONFIGITEM_LOCK_PRIORITY_SUPERVISOR" },
1184 { CONFIGITEM_LOCK_PRIORITY_USER, "CONFIGITEM_LOCK_PRIORITY_USER" },
1185 { CONFIGITEM_LOCK_PRIORITY_PASSAGE, "CONFIGITEM_LOCK_PRIORITY_PASSAGE" },
1186 { CONFIGITEM_LOCK_PRIORITY_PANIC, "CONFIGITEM_LOCK_PRIORITY_PANIC" },
1187 { CONFIGITEM_LOCK_PRIORITY_LOCKOUT, "CONFIGITEM_LOCK_PRIORITY_LOCKOUT" },
1188 { CONFIGITEM_LOCK_PRIORITY_RELOCK, "CONFIGITEM_LOCK_PRIORITY_RELOCK" },
1189 { CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, "CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN" },
1190 { CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, "CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE" },
1191 { CONFIGITEM_LOCK_PRIORITY_REMOTE, "CONFIGITEM_LOCK_PRIORITY_REMOTE" },
1192 { CONFIGITEM_LOCK_TYPE, "CONFIGITEM_LOCK_TYPE" },
1193 { CONFIGITEM_DOUBLE_PULSE, "CONFIGITEM_DOUBLE_PULSE" },
1194 { CONFIGITEM_DOUBLE_DELAY, "CONFIGITEM_DOUBLE_DELAY" },
1195 { CONFIGITEM_MOTOR_DURATION, "CONFIGITEM_MOTOR_DURATION" },
1196 { CONFIGITEM_MORTISE_TYPE, "CONFIGITEM_MORTISE_TYPE" },
1197 { CONFIGITEM_UNLOCK_TIME, "CONFIGITEM_UNLOCK_TIME" },
1198 { CONFIGITEM_EXT_UNLOCK_TIME, "CONFIGITEM_EXT_UNLOCK_TIME" },
1199 { CONFIGITEM_DOOR_AJAR_TIME, "CONFIGITEM_DOOR_AJAR_TIME" },
1200 { CONFIGITEM_SESSION_TIMEOUT, "CONFIGITEM_SESSION_TIMEOUT" },
1201 { CONFIGITEM_RETRY_ON_TIMEOUT, "CONFIGITEM_RETRY_ON_TIMEOUT" },
1202 { CONFIGITEM_UNSOLICITED_ENCRYPT, "CONFIGITEM_UNSOLICITED_ENCRYPT" },
1203 { CONFIGITEM_RMT_AUTH_TIMEOUT, "CONFIGITEM_RMT_AUTH_TIMEOUT" },
1204 { CONFIGITEM_RMT_AUTH_DEVICE, "CONFIGITEM_RMT_AUTH_DEVICE" },
1205 { CONFIGITEM_ALARM_DEVICE, "CONFIGITEM_ALARM_DEVICE" },
1206 { CONFIGITEM_NOTIFY_DEVICE, "CONFIGITEM_NOTIFY_DEVICE" },
1207 { CONFIGITEM_COMMUSER_DEVICE, "CONFIGITEM_COMMUSER_DEVICE" },
1208 { CONFIGITEM_SCHEDULER_DEVICE, "CONFIGITEM_SCHEDULER_DEVICE" },
1209 { CONFIGITEM_SCHEDULER_TYPE, "CONFIGITEM_SCHEDULER_TYPE" },
1210 { CONFIGITEM_SCHEDULER_AWAKE, "CONFIGITEM_SCHEDULER_AWAKE" },
1211 { CONFIGITEM_SCHEDULER_PERIOD, "CONFIGITEM_SCHEDULER_PERIOD" },
1212 { CONFIGITEM_SCHEDULER_HOD, "CONFIGITEM_SCHEDULER_HOD" },
1213 { CONFIGITEM_SCHEDULER_DOW, "CONFIGITEM_SCHEDULER_DOW" },
1214 { CONFIGITEM_SCHEDULER_DOM, "CONFIGITEM_SCHEDULER_DOM" },
1215 { CONFIGITEM_SCHEDULER_HM1, "CONFIGITEM_SCHEDULER_HM1" },
1216 { CONFIGITEM_SCHEDULER_HM2, "CONFIGITEM_SCHEDULER_HM2" },
1217 { CONFIGITEM_SCHEDULER_HM3, "CONFIGITEM_SCHEDULER_HM3" },
1218 { CONFIGITEM_SCHEDULER_HM4, "CONFIGITEM_SCHEDULER_HM4" },
1219 { CONFIGITEM_RADIO_TYPE, "CONFIGITEM_RADIO_TYPE" },
1220 { CONFIGITEM_RADIO_MODE, "CONFIGITEM_RADIO_MODE" },
1221 { CONFIGITEM_RADIO_TIMEOUT, "CONFIGITEM_RADIO_TIMEOUT" },
1222 { CONFIGITEM_RADIO_ATTEMPTS, "CONFIGITEM_RADIO_ATTEMPTS" },
1223 { CONFIGITEM_RADIO_HOUSEKEEPING, "CONFIGITEM_RADIO_HOUSEKEEPING" },
1224 { CONFIGITEM_RADIO_LEAPUSERNAME, "CONFIGITEM_RADIO_LEAPUSERNAME" },
1225 { CONFIGITEM_RADIO_LEAPPASSWORD, "CONFIGITEM_RADIO_LEAPPASSWORD" },
1226 { CONFIGITEM_INHIBIT_VOLTAGE, "CONFIGITEM_INHIBIT_VOLTAGE" },
1227 { CONFIGITEM_LOW_VOLTAGE, "CONFIGITEM_LOW_VOLTAGE" },
1228 { CONFIGITEM_PT_RANGE_1, "CONFIGITEM_PT_RANGE_1" },
1229 { CONFIGITEM_PT_RANGE_2, "CONFIGITEM_PT_RANGE_2" },
1230 { CONFIGITEM_PT_RANGE_3, "CONFIGITEM_PT_RANGE_3" },
1231 { CONFIGITEM_PT_RANGE_4, "CONFIGITEM_PT_RANGE_4" },
1232 { CONFIGITEM_PT_RANGE_5, "CONFIGITEM_PT_RANGE_5" },
1233 { CONFIGITEM_PT_RANGE_6, "CONFIGITEM_PT_RANGE_6" },
1234 { CONFIGITEM_PT_RANGE_7, "CONFIGITEM_PT_RANGE_7" },
1235 { CONFIGITEM_PT_RANGE_8, "CONFIGITEM_PT_RANGE_8" },
1236 { CONFIGITEM_MAGCARD_IFS, "CONFIGITEM_MAGCARD_IFS" },
1237 { CONFIGITEM_MAGCARD_FIELDS, "CONFIGITEM_MAGCARD_FIELDS" },
1238 { CONFIGITEM_MAGCARD_OFFSET, "CONFIGITEM_MAGCARD_OFFSET" },
1239 { CONFIGITEM_MAGCARD_DIGITS, "CONFIGITEM_MAGCARD_DIGITS" },
1240 { CONFIGITEM_ALARMS, "CONFIGITEM_ALARMS" },
1241 { CONFIGITEM_FILTERS, "CONFIGITEM_FILTERS" },
1242 { CONFIGITEM_ALARMSTATE, "CONFIGITEM_ALARMSTATE" },
1243 { CONFIGITEM_DOORSTATE, "CONFIGITEM_DOORSTATE" },
1244 { CONFIGITEM_DPACDEBUG, "CONFIGITEM_DPACDEBUG" },
1245 { CONFIGITEM_FAILOPENSECURE, "CONFIGITEM_FAILOPENSECURE" },
1246 { CONFIGITEM_REPLACED_VOLTAGE, "CONFIGITEM_REPLACED_VOLTAGE" },
1247 { CONFIGITEM_RX_HELD_TIME, "CONFIGITEM_RX_HELD_TIME" },
1248 { CONFIGITEM_PACKET_TIMEOUT, "CONFIGITEM_PACKET_TIMEOUT" },
1249 { CONFIGITEM_EXTENDEDRESPONSE, "CONFIGITEM_EXTENDEDRESPONSE" },
1250 { CONFIGITEM_PASSAGEMODEINDICATOR, "CONFIGITEM_PASSAGEMODEINDICATOR" },
1251 { CONFIGITEM_PFMRETURNTIME, "CONFIGITEM_PFMRETURNTIME" },
1254 static value_string_ext r3_configitemnames_ext = VALUE_STRING_EXT_INIT(r3_configitemnames);
1256 static const value_string r3_configtypenames [] =
1258 { CONFIGTYPE_NONE, "CONFIGTYPE_NONE" },
1259 { CONFIGTYPE_BOOL, "CONFIGTYPE_BOOL" },
1260 { CONFIGTYPE_8, "CONFIGTYPE_8" },
1261 { CONFIGTYPE_16, "CONFIGTYPE_16" },
1262 { CONFIGTYPE_32, "CONFIGTYPE_32" },
1263 { CONFIGTYPE_STRING, "CONFIGTYPE_STRING" },
1266 static value_string_ext r3_configtypenames_ext = VALUE_STRING_EXT_INIT(r3_configtypenames);
1268 static const value_string r3_dispositionnames [] =
1270 { DISPOSITION_ADD, "DISPOSITION_ADD" },
1271 { DISPOSITION_REPLACE, "DISPOSITION_REPLACE" },
1272 { DISPOSITION_UPDATE, "DISPOSITION_UPDATE" },
1273 { DISPOSITION_DELETE, "DISPOSITION_DELETE" },
1274 { DISPOSITION_RETRIEVE, "DISPOSITION_RETRIEVE" },
1277 static value_string_ext r3_dispositionnames_ext = VALUE_STRING_EXT_INIT(r3_dispositionnames);
1279 static const value_string r3_deleteusersnames [] =
1281 { DELETEUSERS_ALL, "DELETEUSER_ALL" },
1282 { DELETEUSERS_CACHED, "DELETEUSER_CACHED" },
1285 static value_string_ext r3_deleteusersnames_ext = VALUE_STRING_EXT_INIT(r3_deleteusersnames);
1287 static const value_string r3_downloadfirmwarenames [] =
1289 { DOWNLOADFIRMWARE_START, "DOWNLOADFIRMWARE_START" },
1290 { DOWNLOADFIRMWARE_DATA, "DOWNLOADFIRMWARE_DATA" },
1291 { DOWNLOADFIRMWARE_COMPLETE, "DOWNLOADFIRMWARE_COMPLETE" },
1292 { DOWNLOADFIRMWARE_ABORT, "DOWNLOADFIRMWARE_ABORT" },
1293 { DOWNLOADFIRMWARE_RESET, "DOWNLOADFIRMWARE_RESET" },
1296 static value_string_ext r3_downloadfirmwarenames_ext = VALUE_STRING_EXT_INIT(r3_downloadfirmwarenames);
1298 static const value_string r3_encryptionschemenames [] =
1300 { ENCRYPTIONSCHEME_NONE, "ENCRYPTIONSCHEME_NONE" },
1301 { ENCRYPTIONSCHEME_ROLLING, "ENCRYPTIONSCHEME_ROLLING" },
1302 { ENCRYPTIONSCHEME_SN, "ENCRYPTIONSCHEME_SN" },
1303 { ENCRYPTIONSCHEME_AESIV, "ENCRYPTIONSCHEME_AESIV" },
1304 { ENCRYPTIONSCHEME_AES, "ENCRYPTIONSCHEME_AES" },
1307 static value_string_ext r3_encryptionschemenames_ext = VALUE_STRING_EXT_INIT(r3_encryptionschemenames);
1309 static const value_string r3_eventnames [] =
1311 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
1312 { EVENT_USER, "EVENT_USER" },
1313 { EVENT_ONETIME, "EVENT_ONETIME" },
1314 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
1315 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
1316 { EVENT_BADTIME, "EVENT_BADTIME" },
1317 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
1318 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
1319 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
1320 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
1321 { EVENT_USERADDED, "EVENT_USERADDED" },
1322 { EVENT_USERDELETED, "EVENT_USERDELETED" },
1323 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
1324 { EVENT_PANIC, "EVENT_PANIC" },
1325 { EVENT_RELOCK, "EVENT_RELOCK" },
1326 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
1327 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
1328 { EVENT_RESET, "EVENT_RESET" },
1329 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
1330 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
1331 { EVENT_DBRESET, "EVENT_DBRESET" },
1332 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
1333 { EVENT_COMMENDED, "EVENT_COMMENDED" },
1334 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
1335 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
1336 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
1337 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
1338 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
1339 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
1340 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
1341 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
1342 { EVENT_COMMUSER, "EVENT_COMMUSER" },
1343 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
1344 { EVENT_NOTIFY, "EVENT_NOTIFY" },
1345 { EVENT_EXPIRED, "EVENT_EXPIRED" },
1346 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
1347 { EVENT_MCCENTER, "EVENT_MCCENTER" },
1348 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
1349 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
1350 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
1351 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
1352 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
1353 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
1354 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
1355 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
1356 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
1357 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
1358 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
1359 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
1360 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
1361 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
1362 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
1363 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
1364 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
1365 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
1366 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
1367 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
1368 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
1369 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
1370 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
1371 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
1372 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
1373 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
1374 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
1375 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
1376 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
1377 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
1378 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
1379 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
1380 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
1381 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
1382 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
1383 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
1384 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
1385 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
1386 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
1387 { EVENT_DEBUG, "EVENT_DEBUG" },
1390 static value_string_ext r3_eventnames_ext = VALUE_STRING_EXT_INIT(r3_eventnames);
1392 static const value_string r3_fieldtypenames [] =
1394 { FIELDTYPE_NONE, "FIELDTYPE_NONE" },
1395 { FIELDTYPE_PIN, "FIELDTYPE_PIN" },
1396 { FIELDTYPE_PROX, "FIELDTYPE_PROX" },
1397 { FIELDTYPE_MAGCARD, "FIELDTYPE_MAGCARD" },
1400 static value_string_ext r3_fieldtypenames_ext = VALUE_STRING_EXT_INIT(r3_fieldtypenames);
1402 static const value_string r3_filtereventnames [] =
1404 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
1405 { EVENT_USER, "EVENT_USER" },
1406 { EVENT_ONETIME, "EVENT_ONETIME" },
1407 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
1408 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
1409 { EVENT_BADTIME, "EVENT_BADTIME" },
1410 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
1411 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
1412 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
1413 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
1414 { EVENT_USERADDED, "EVENT_USERADDED" },
1415 { EVENT_USERDELETED, "EVENT_USERDELETED" },
1416 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
1417 { EVENT_PANIC, "EVENT_PANIC" },
1418 { EVENT_RELOCK, "EVENT_RELOCK" },
1419 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
1420 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
1421 { EVENT_RESET, "EVENT_RESET" },
1422 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
1423 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
1424 { EVENT_DBRESET, "EVENT_DBRESET" },
1425 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
1426 { EVENT_COMMENDED, "EVENT_COMMENDED" },
1427 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
1428 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
1429 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
1430 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
1431 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
1432 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
1433 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
1434 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
1435 { EVENT_COMMUSER, "EVENT_COMMUSER" },
1436 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
1437 { EVENT_NOTIFY, "EVENT_NOTIFY" },
1438 { EVENT_EXPIRED, "EVENT_EXPIRED" },
1439 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
1440 { EVENT_MCCENTER, "EVENT_MCCENTER" },
1441 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
1442 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
1443 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
1444 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
1445 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
1446 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
1447 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
1448 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
1449 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
1450 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
1451 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
1452 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
1453 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
1454 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
1455 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
1456 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
1457 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
1458 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
1459 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
1460 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
1461 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
1462 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
1463 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
1464 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
1465 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
1466 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
1467 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
1468 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
1469 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
1470 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
1471 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
1472 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
1473 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
1474 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
1475 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
1476 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
1477 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
1478 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
1479 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
1480 { EVENT_DEBUG, "EVENT_DEBUG" },
1481 { 0xfe, "(Enable All Filters)" },
1482 { 0xff, "(Disable All Filters)" },
1485 static value_string_ext r3_filtereventnames_ext = VALUE_STRING_EXT_INIT(r3_filtereventnames);
1487 static const value_string r3_filtertypenames [] =
1489 { FILTERSELECT_RECORDING, "FILTERSELECT_RECORDING" },
1490 { FILTERSELECT_REPORTING, "FILTERSELECT_REPORTING" },
1493 static value_string_ext r3_filtertypenames_ext = VALUE_STRING_EXT_INIT(r3_filtertypenames);
1495 static const value_string r3_forceitemnames [] =
1497 { FORCEITEM_RADIOPOWER, "FORCEITEM_RADIOPOWER" },
1498 { FORCEITEM_RADIOENABLE, "FORCEITEM_RADIOENABLE" },
1499 { FORCEITEM_LEDRED, "FORCEITEM_LEDRED" },
1500 { FORCEITEM_LEDGREEN, "FORCEITEM_LEDGREEN" },
1501 { FORCEITEM_LEDYELLOW, "FORCEITEM_LEDYELLOW" },
1502 { FORCEITEM_PIEZO, "FORCEITEM_PIEZO" },
1503 { FORCEITEM_MAGPOWER, "FORCEITEM_MAGPOWER" },
1504 { FORCEITEM_MAGLEDA, "FORCEITEM_MAGLEDA" },
1505 { FORCEITEM_MAGLEDB, "FORCEITEM_MAGLEDB" },
1506 { FORCEITEM_PROXPOWER, "FORCEITEM_PROXPOWER" },
1507 { FORCEITEM_PROXPING, "FORCEITEM_PROXPING" },
1508 { FORCEITEM_PROXMODE, "FORCEITEM_PROXMODE" },
1509 { FORCEITEM_I2CPOWER, "FORCEITEM_I2CPOWER" },
1510 { FORCEITEM_MOTORARUN, "FORCEITEM_MOTORARUN" },
1511 { FORCEITEM_MOTORBRUN, "FORCEITEM_MOTORBRUN" },
1512 { FORCEITEM_VMON, "FORCEITEM_VMON" },
1513 { FORCEITEM_PROX, "FORCEITEM_PROX" },
1514 { FORCEITEM_MORTISETEST, "FORCEITEM_MORTISETEST" },
1515 { FORCEITEM_KEYPADTEST, "FORCEITEM_KEYPADTEST" },
1516 { FORCEITEM_MAGTEST, "FORCEITEM_MAGTEST" },
1517 { FORCEITEM_PROXTEST, "FORCEITEM_PROXTEST" },
1520 static value_string_ext r3_forceitemnames_ext = VALUE_STRING_EXT_INIT(r3_forceitemnames);
1522 static const value_string r3_mfgfieldnames [] =
1524 { MFGFIELD_IOPINS, "MFGFIELD_IOPINS" },
1525 { MFGFIELD_ADCS, "MFGFIELD_ADCS" },
1526 { MFGFIELD_HARDWAREID, "MFGFIELD_HARDWAREID" },
1527 { MFGFIELD_CHECKPOINTLOG, "MFGFIELD_CHECKPOINTLOG" },
1528 { MFGFIELD_CPUREGISTERS, "MFGFIELD_CPUREGISTERS" },
1529 { MFGFIELD_TASKFLAGS, "MFGFIELD_TASKFLAGS" },
1530 { MFGFIELD_TIMERCHAIN, "MFGFIELD_TIMERCHAIN" },
1531 { MFGFIELD_PEEKPOKE, "MFGFIELD_PEEKPOKE" },
1532 { MFGFIELD_LOCKSTATE, "MFGFIELD_LOCKSTATE" },
1533 { MFGFIELD_CAPABILITIES, "MFGFIELD_CAPABILITIES" },
1534 { MFGFIELD_DUMPM41T81, "MFGFIELD_DUMPM41T81" },
1535 { MFGFIELD_NVRAMCHECKSUMVALUE, "MFGFIELD_NVRAMCHECKSUMVALUE" },
1536 { MFGFIELD_CHECKSUMRESULTS, "MFGFIELD_CHECKSUMRESULTS" },
1537 { MFGFIELD_MORTISESTATELOG, "MFGFIELD_MORTISESTATELOG" },
1538 { MFGFIELD_MORTISEPINS, "MFGFIELD_MORTISEPINS" },
1539 { MFGFIELD_KEYPADCHAR, "MFGFIELD_KEYPADCHAR" },
1540 { MFGFIELD_MAGCARD, "MFGFIELD_MAGCARD" },
1541 { MFGFIELD_PROXCARD, "MFGFIELD_PROXCARD" },
1544 static value_string_ext r3_mfgfieldnames_ext = VALUE_STRING_EXT_INIT(r3_mfgfieldnames);
1546 static const value_string r3_mortiseeventnames [] =
1548 { MORTISEEVENT_DX_THROWN, "MORTISEEVENT_DX_THROWN" },
1549 { MORTISEEVENT_DX_RETRACTED, "MORTISEEVENT_DX_RETRACTED" },
1550 { MORTISEEVENT_LX_RETRACTED, "MORTISEEVENT_LX_RETRACTED" },
1551 { MORTISEEVENT_LX_EXTENDED, "MORTISEEVENT_LX_EXTENDED" },
1552 { MORTISEEVENT_AX_EXTENDED, "MORTISEEVENT_AX_EXTENDED" },
1553 { MORTISEEVENT_AX_RETRACTED, "MORTISEEVENT_AX_RETRACTED" },
1554 { MORTISEEVENT_RX_DEPRESSED, "MORTISEEVENT_RX_DEPRESSED" },
1555 { MORTISEEVENT_RX_RELEASED, "MORTISEEVENT_RX_RELEASED" },
1556 { MORTISEEVENT_PX_OPEN, "MORTISEEVENT_PX_OPEN" },
1557 { MORTISEEVENT_PX_CLOSED, "MORTISEEVENT_PX_CLOSED" },
1558 { MORTISEEVENT_MX_UNLOCKED, "MORTISEEVENT_MX_UNLOCKED" },
1559 { MORTISEEVENT_MX_LOCKED, "MORTISEEVENT_MX_LOCKED" },
1560 { MORTISEEVENT_LAST, "MORTISEEVENT_LAST" },
1561 { MORTISEEVENT_IGNORE, "MORTISEEVENT_IGNORE" },
1564 static value_string_ext r3_mortiseeventnames_ext = VALUE_STRING_EXT_INIT(r3_mortiseeventnames);
1566 static const value_string r3_mortisetypenames [] =
1568 { MORTISETYPE_NONE, "MORTISETYPE_NONE" },
1569 { MORTISETYPE_S82276, "MORTISETYPE_S82276" },
1570 { MORTISETYPE_S82277, "MORTISETYPE_S82277" },
1571 { MORTISETYPE_S82278, "MORTISETYPE_S82278" },
1572 { MORTISETYPE_S82279, "MORTISETYPE_S82279" },
1573 { MORTISETYPE_S10G77, "MORTISETYPE_S10G77" },
1574 { MORTISETYPE_S8877, "MORTISETYPE_S8877" },
1575 { MORTISETYPE_S8878, "MORTISETYPE_S8878" },
1576 { MORTISETYPE_S8977, "MORTISETYPE_S8977" },
1577 { MORTISETYPE_S8978, "MORTISETYPE_S8978" },
1578 { MORTISETYPE_CRML20x36, "MORTISETYPE_CRML20x36" },
1579 { MORTISETYPE_CRML20x35, "MORTISETYPE_CRML20x35" },
1580 { MORTISETYPE_CRML20x34, "MORTISETYPE_CRML20x34" },
1581 { MORTISETYPE_CRML20x33, "MORTISETYPE_CRML20x33" },
1582 { MORTISETYPE_CRCL33x34, "MORTISETYPE_CRCL33x34" },
1583 { MORTISETYPE_CR9X34, "MORTISETYPE_CR9X34" },
1584 { MORTISETYPE_CR9X33, "MORTISETYPE_CR9X33" },
1585 { MORTISETYPE_CR9MX34, "MORTISETYPE_CR9MX34" },
1586 { MORTISETYPE_CR9MX33, "MORTISETYPE_CR9MX33" },
1589 static value_string_ext r3_mortisetypenames_ext = VALUE_STRING_EXT_INIT(r3_mortisetypenames);
1591 static const value_string r3_peekpokenames [] =
1593 { PEEKPOKE_READU8, "PEEKPOKE_READU8" },
1594 { PEEKPOKE_READU16, "PEEKPOKE_READU16" },
1595 { PEEKPOKE_READU24, "PEEKPOKE_READU24" },
1596 { PEEKPOKE_READU32, "PEEKPOKE_READU32" },
1597 { PEEKPOKE_READSTRING, "PEEKPOKE_READSTRING" },
1598 { PEEKPOKE_WRITEU8, "PEEKPOKE_WRITEU8" },
1599 { PEEKPOKE_WRITEU16, "PEEKPOKE_WRITEU16" },
1600 { PEEKPOKE_WRITEU24, "PEEKPOKE_WRITEU24" },
1601 { PEEKPOKE_WRITEU32, "PEEKPOKE_WRITEU32" },
1602 { PEEKPOKE_WRITESTRING, "PEEKPOKE_WRITESTRING" },
1605 static value_string_ext r3_peekpokenames_ext = VALUE_STRING_EXT_INIT(r3_peekpokenames);
1607 static const value_string r3_ppmisourcenames [] =
1609 { PPMISOURCE_NONE, "PPMISOURCE_NONE" },
1610 { PPMISOURCE_PIN, "PPMISOURCE_PIN" },
1611 { PPMISOURCE_PROX, "PPMISOURCE_PROX" },
1612 { PPMISOURCE_MAGCARD, "PPMISOURCE_MAGCARD" },
1615 static value_string_ext r3_ppmisourcenames_ext = VALUE_STRING_EXT_INIT(r3_ppmisourcenames);
1617 static const value_string r3_responsetypenames [] =
1619 { RESPONSETYPE_OK, "RESPONSETYPE_OK" },
1620 { RESPONSETYPE_ERROR, "RESPONSETYPE_ERROR" },
1621 { RESPONSETYPE_HASDATA, "RESPONSETYPE_HASDATA" },
1622 { RESPONSETYPE_NOHANDLER, "RESPONSETYPE_NOHANDLER" },
1623 { RESPONSETYPE_NOSESSION, "RESPONSETYPE_NOSESSION" },
1624 { RESPONSETYPE_BADCOMMAND, "RESPONSETYPE_BADCOMMAND" },
1625 { RESPONSETYPE_BADPARAMETER, "RESPONSETYPE_BADPARAMETER" },
1626 { RESPONSETYPE_BADPARAMETERLEN, "RESPONSETYPE_BADPARAMETERLEN" },
1627 { RESPONSETYPE_MISSINGPARAMETER, "RESPONSETYPE_MISSINGPARAMETER" },
1628 { RESPONSETYPE_DUPLICATEPARAMETER, "RESPONSETYPE_DUPLICATEPARAMETER" },
1629 { RESPONSETYPE_PARAMETERCONFLICT, "RESPONSETYPE_PARAMETERCONFLICT" },
1630 { RESPONSETYPE_BADDEVICE, "RESPONSETYPE_BADDEVICE" },
1631 { RESPONSETYPE_NVRAMERROR, "RESPONSETYPE_NVRAMERROR" },
1632 { RESPONSETYPE_NVRAMERRORNOACK, "RESPONSETYPE_NVRAMERRORNOACK" },
1633 { RESPONSETYPE_NVRAMERRORNOACK32, "RESPONSETYPE_NVRAMERRORNOACK32" },
1634 { RESPONSETYPE_NOTI2CADDRESS, "RESPONSETYPE_NOTI2CADDRESS" },
1635 { RESPONSETYPE_FIRMWAREERROR, "RESPONSETYPE_FIRMWAREERROR" },
1636 { RESPONSETYPE_DUMPINPROGRESS, "RESPONSETYPE_DUMPINPROGRESS" },
1637 { RESPONSETYPE_INTERNALERROR, "RESPONSETYPE_INTERNALERROR" },
1638 { RESPONSETYPE_NOTIMPLEMENTED, "RESPONSETYPE_NOTIMPLEMENTED" },
1639 { RESPONSETYPE_PINFORMATERROR, "RESPONSETYPE_PINFORMATERROR" },
1640 { RESPONSETYPE_PINEXISTS, "RESPONSETYPE_PINEXISTS" },
1641 { RESPONSETYPE_PINNOTFOUND, "RESPONSETYPE_PINNOTFOUND" },
1642 { RESPONSETYPE_USERACTIVE, "RESPONSETYPE_USERACTIVE" },
1643 { RESPONSETYPE_USERINACTIVE, "RESPONSETYPE_USERINACTIVE" },
1644 { RESPONSETYPE_PARENTNOTFOUND, "RESPONSETYPE_PARENTNOTFOUND" },
1645 { RESPONSETYPE_NOCHAIN, "RESPONSETYPE_NOCHAIN" },
1646 { RESPONSETYPE_CAUGHTINLOOP, "RESPONSETYPE_CAUGHTINLOOP" },
1647 { RESPONSETYPE_EVENTFILTERED, "RESPONSETYPE_EVENTFILTERED" },
1648 { RESPONSETYPE_PAYLOADTOOLARGE, "RESPONSETYPE_PAYLOADTOOLARGE" },
1649 { RESPONSETYPE_ENDOFDATA, "RESPONSETYPE_ENDOFDATA" },
1650 { RESPONSETYPE_RMTAUTHREJECTED, "RESPONSETYPE_RMTAUTHREJECTED" },
1651 { RESPONSETYPE_NVRAMVERSIONERROR, "RESPONSETYPE_NVRAMVERSIONERROR" },
1652 { RESPONSETYPE_NOHARDWARE, "RESPONSETYPE_NOHARDWARE" },
1653 { RESPONSETYPE_SCHEDULERCONFLICT, "RESPONSETYPE_SCHEDULERCONFLICT" },
1654 { RESPONSETYPE_NVRAMWRITEERROR, "RESPONSETYPE_NVRAMWRITEERROR" },
1655 { RESPONSETYPE_DECLINEDFILTERED, "RESPONSETYPE_DECLINEDFILTERED" },
1656 { RESPONSETYPE_NECONFIGPARM, "RESPONSETYPE_NECONFIGPARM" },
1657 { RESPONSETYPE_FLASHERASEERROR, "RESPONSETYPE_FLASHERASEERROR" },
1658 { RESPONSETYPE_FLASHWRITEERROR, "RESPONSETYPE_FLASHWRITEERROR" },
1659 { RESPONSETYPE_BADNVBACKUP, "RESPONSETYPE_BADNVBACKUP" },
1660 { RESPONSETYPE_EARLYACK, "RESPONSETYPE_EARLYACK" },
1661 { RESPONSETYPE_ALARMFILTERED, "RESPONSETYPE_ALARMFILTERED" },
1662 { RESPONSETYPE_ACVFAILURE, "RESPONSETYPE_ACVFAILURE" },
1663 { RESPONSETYPE_USERCHECKSUMERROR, "RESPONSETYPE_USERCHECKSUMERROR" },
1664 { RESPONSETYPE_CHECKSUMERROR, "RESPONSETYPE_CHECKSUMERROR" },
1665 { RESPONSETYPE_RTCSQWFAILURE, "RESPONSETYPE_RTCSQWFAILURE" },
1666 { RESPONSETYPE_PRIORITYSHUTDOWN, "RESPONSETYPE_PRIORITYSHUTDOWN" },
1667 { RESPONSETYPE_NOTMODIFIABLE, "RESPONSETYPE_NOTMODIFIABLE" },
1668 { RESPONSETYPE_CANTPRESERVE, "RESPONSETYPE_CANTPRESERVE" },
1669 { RESPONSETYPE_INPASSAGEMODE, "RESPONSETYPE_INPASSAGEMODE" },
1672 static value_string_ext r3_responsetypenames_ext = VALUE_STRING_EXT_INIT(r3_responsetypenames);
1674 static const value_string r3_timezonemodenames [] =
1676 { TIMEZONEMODE_NORMAL, "TIMEZONEMODE_NORMAL" },
1677 { TIMEZONEMODE_EXCLUSION, "TIMEZONEMODE_EXCLUSION" },
1678 { TIMEZONEMODE_AUTOTIME, "TIMEZONEMODE_AUTOTIME" },
1679 { TIMEZONEMODE_AUTOFPT, "TIMEZONEMODE_AUTOFPT" },
1680 { TIMEZONEMODE_UAPM, "TIMEZONEMODE_UAPM" },
1683 static value_string_ext r3_timezonemodenames_ext = VALUE_STRING_EXT_INIT(r3_timezonemodenames);
1685 static const value_string r3_upstreamcommandnames [] =
1687 { UPSTREAMCOMMAND_RESERVED, "UPSTREAMCOMMAND_RESERVED" },
1688 { UPSTREAMCOMMAND_DEBUGMSG, "UPSTREAMCOMMAND_DEBUGMSG" },
1689 { UPSTREAMCOMMAND_QUERYVERSION, "UPSTREAMCOMMAND_QUERYVERSION" },
1690 { UPSTREAMCOMMAND_QUERYDATETIME, "UPSTREAMCOMMAND_QUERYDATETIME" },
1691 { UPSTREAMCOMMAND_QUERYSERIALNUMBER, "UPSTREAMCOMMAND_QUERYSERIALNUMBER" },
1692 { UPSTREAMCOMMAND_DUMPEVENTLOG, "UPSTREAMCOMMAND_DUMPEVENTLOG" },
1693 { UPSTREAMCOMMAND_DUMPNVRAM, "UPSTREAMCOMMAND_DUMPNVRAM" },
1694 { UPSTREAMCOMMAND_RMTAUTHREQUEST, "UPSTREAMCOMMAND_RMTAUTHREQUEST" },
1695 { UPSTREAMCOMMAND_RETRIEVEUSER, "UPSTREAMCOMMAND_RETRIEVEUSER" },
1696 { UPSTREAMCOMMAND_QUERYCONFIG, "UPSTREAMCOMMAND_QUERYCONFIG" },
1697 { UPSTREAMCOMMAND_RMTEVENTLOGRECORD, "UPSTREAMCOMMAND_RMTEVENTLOGRECORD" },
1698 { UPSTREAMCOMMAND_DPAC, "UPSTREAMCOMMAND_DPAC" },
1699 { UPSTREAMCOMMAND_NOTIFY, "UPSTREAMCOMMAND_NOTIFY" },
1700 { UPSTREAMCOMMAND_MFG, "UPSTREAMCOMMAND_MFG" },
1701 { UPSTREAMCOMMAND_EVENTLOGWARNING, "UPSTREAMCOMMAND_EVENTLOGWARNING" },
1702 { UPSTREAMCOMMAND_DUMPNVRAMRLE, "UPSTREAMCOMMAND_DUMPNVRAMRLE" },
1703 { UPSTREAMCOMMAND_RMTDECLINEDRECORD, "UPSTREAMCOMMAND_RMTDECLINEDRECORD" },
1704 { UPSTREAMCOMMAND_DECLINEDWARNING, "UPSTREAMCOMMAND_DECLINEDWARNING" },
1705 { UPSTREAMCOMMAND_DUMPDECLINEDLOG, "UPSTREAMCOMMAND_DUMPDECLINEDLOG" },
1706 { UPSTREAMCOMMAND_RMTALARMRECORD, "UPSTREAMCOMMAND_RMTALARMRECORD" },
1707 { UPSTREAMCOMMAND_ALARMWARNING, "UPSTREAMCOMMAND_ALARMWARNING" },
1708 { UPSTREAMCOMMAND_DUMPALARMLOG, "UPSTREAMCOMMAND_DUMPALARMLOG" },
1709 { UPSTREAMCOMMAND_CONNECTSCHEDULER, "UPSTREAMCOMMAND_CONNECTSCHEDULER" },
1710 { UPSTREAMCOMMAND_CONNECTCOMMUSER, "UPSTREAMCOMMAND_CONNECTCOMMUSER" },
1711 { UPSTREAMCOMMAND_CONNECTALARM, "UPSTREAMCOMMAND_CONNECTALARM" },
1712 { UPSTREAMCOMMAND_DUMPDEBUGLOG, "UPSTREAMCOMMAND_DUMPDEBUGLOG" },
1715 static value_string_ext r3_upstreamcommandnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamcommandnames);
1717 static const value_string r3_upstreamfieldnames [] =
1719 { UPSTREAMFIELD_NOTUSED, "UPSTREAMFIELD_NOTUSED" },
1720 { UPSTREAMFIELD_SERIALNUMBER, "UPSTREAMFIELD_SERIALNUMBER" },
1721 { UPSTREAMFIELD_NAR, "UPSTREAMFIELD_NAR" },
1722 { UPSTREAMFIELD_ENTRYDEVICE, "UPSTREAMFIELD_ENTRYDEVICE" },
1723 { UPSTREAMFIELD_PPMIFIELDTYPE, "UPSTREAMFIELD_PPMIFIELDTYPE" },
1724 { UPSTREAMFIELD_PIN, "UPSTREAMFIELD_PIN" },
1725 { UPSTREAMFIELD_SEQUENCENUMBER, "UPSTREAMFIELD_SEQUENCENUMBER" },
1726 { UPSTREAMFIELD_RESPONSEWINDOW, "UPSTREAMFIELD_RESPONSEWINDOW" },
1727 { UPSTREAMFIELD_USERNUMBER, "UPSTREAMFIELD_USERNUMBER" },
1728 { UPSTREAMFIELD_VERSION, "UPSTREAMFIELD_VERSION" },
1729 { UPSTREAMFIELD_EVENTLOGRECORD, "UPSTREAMFIELD_EVENTLOGRECORD" },
1730 { UPSTREAMFIELD_DATETIME, "UPSTREAMFIELD_DATETIME" },
1731 { UPSTREAMFIELD_EVENTLOGRECORDCOUNT, "UPSTREAMFIELD_EVENTLOGRECORDCOUNT" },
1732 { UPSTREAMFIELD_DECLINEDRECORDCOUNT, "UPSTREAMFIELD_DECLINEDRECORDCOUNT" },
1733 { UPSTREAMFIELD_DECLINEDRECORD, "UPSTREAMFIELD_DECLINEDRECORD" },
1734 { UPSTREAMFIELD_USERTYPE, "UPSTREAMFIELD_USERTYPE" },
1735 { UPSTREAMFIELD_ACCESSALWAYS, "UPSTREAMFIELD_ACCESSALWAYS" },
1736 { UPSTREAMFIELD_CACHED, "UPSTREAMFIELD_CACHED" },
1737 { UPSTREAMFIELD_PRIMARYFIELDTYPE, "UPSTREAMFIELD_PRIMARYFIELDTYPE" },
1738 { UPSTREAMFIELD_AUXFIELDTYPE, "UPSTREAMFIELD_AUXFIELDTYPE" },
1739 { UPSTREAMFIELD_ACCESSMODE, "UPSTREAMFIELD_ACCESSMODE" },
1740 { UPSTREAMFIELD_EXPIREON, "UPSTREAMFIELD_EXPIREON" },
1741 { UPSTREAMFIELD_USECOUNT, "UPSTREAMFIELD_USECOUNT" },
1742 { UPSTREAMFIELD_TIMEZONE, "UPSTREAMFIELD_TIMEZONE" },
1743 { UPSTREAMFIELD_EXCEPTIONGROUP, "UPSTREAMFIELD_EXCEPTIONGROUP" },
1744 { UPSTREAMFIELD_PRIMARYPIN, "UPSTREAMFIELD_PRIMARYPIN" },
1745 { UPSTREAMFIELD_AUXPIN, "UPSTREAMFIELD_AUXPIN" },
1746 { UPSTREAMFIELD_ALARMRECORDCOUNT, "UPSTREAMFIELD_ALARMRECORDCOUNT" },
1747 { UPSTREAMFIELD_ALARMRECORD, "UPSTREAMFIELD_ALARMRECORD" },
1748 { UPSTREAMFIELD_AUXCTLRVERSION, "UPSTREAMFIELD_AUXCTLRVERSION" },
1751 static value_string_ext r3_upstreamfieldnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamfieldnames);
1753 static const value_string r3_usertypenames [] =
1755 { USERTYPE_NONE, "USERTYPE_NONE" },
1756 { USERTYPE_MASTER, "USERTYPE_MASTER" },
1757 { USERTYPE_EMERGENCY, "USERTYPE_EMERGENCY" },
1758 { USERTYPE_SUPERVISOR, "USERTYPE_SUPERVISOR" },
1759 { USERTYPE_USER, "USERTYPE_USER" },
1760 { USERTYPE_EXTENDED, "USERTYPE_EXTENDED" },
1761 { USERTYPE_PASSAGE, "USERTYPE_PASSAGE" },
1762 { USERTYPE_ONETIME, "USERTYPE_ONETIME" },
1763 { USERTYPE_PANIC, "USERTYPE_PANIC" },
1764 { USERTYPE_LOCKOUT, "USERTYPE_LOCKOUT" },
1765 { USERTYPE_RELOCK, "USERTYPE_RELOCK" },
1766 { USERTYPE_NOTIFY, "USERTYPE_NOTIFY" },
1767 { USERTYPE_COMM, "USERTYPE_COMM" },
1768 { USERTYPE_SUSPENDED, "USERTYPE_SUSPENDED" },
1771 static value_string_ext r3_usertypenames_ext = VALUE_STRING_EXT_INIT(r3_usertypenames);
1773 static const value_string r3_mfgnvramdumpnames [] =
1781 static value_string_ext r3_mfgnvramdumpnames_ext = VALUE_STRING_EXT_INIT(r3_mfgnvramdumpnames);
1783 static const value_string r3_mfgremoteunlocknames [] =
1790 static value_string_ext r3_mfgremoteunlocknames_ext = VALUE_STRING_EXT_INIT(r3_mfgremoteunlocknames);
1792 static const value_string r3_mfgtestpreservenames [] =
1798 static value_string_ext r3_mfgtestpreservenames_ext = VALUE_STRING_EXT_INIT(r3_mfgtestpreservenames);
1800 static const value_string r3_daynames [] =
1811 static value_string_ext r3_daynames_ext = VALUE_STRING_EXT_INIT(r3_daynames);
1813 static const value_string r3_monthnames [] =
1830 static value_string_ext r3_monthnames_ext = VALUE_STRING_EXT_INIT(r3_monthnames);
1832 static const value_string r3_monthdaynames [] =
1868 static value_string_ext r3_monthdaynames_ext = VALUE_STRING_EXT_INIT(r3_monthdaynames);
1870 static const value_string r3_powertablenames [] =
1872 { 1, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
1873 { 2, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
1874 { 3, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
1875 { 4, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
1876 { 5, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {13, 12, 12, 11, 11, 10, 10, 9}" },
1877 { 6, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {14, 13, 13, 12, 12, 11, 11, 10}" },
1878 { 7, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {15, 14, 14, 13, 13, 12, 12, 11}" },
1879 { 8, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {16, 15, 15, 14, 14, 13, 13, 12}" },
1882 static value_string_ext r3_powertablenames_ext = VALUE_STRING_EXT_INIT(r3_powertablenames);
1884 static const true_false_string tfs_rmtauthretry_flags =
1890 static const true_false_string tfs_mortisepins_flags =
1896 static const true_false_string tfs_errornoerror_flags =
1902 static const string_string r3_snmanufacturernames [] =
1905 { "KC", "Kimchuk" },
1909 static const string_string r3_snyearnames [] =
1924 static const string_string r3_snmodelnames [] =
1926 { "H", "Sx controller" },
1927 { "J", "Px controller" },
1928 { "D", "PG offline interface board" },
1929 { "E", "Px online interface board" },
1930 { "N", "Ethernet-PD board" },
1931 { "O", "CAM board" },
1935 static const string_string r3_sngroupnames [] =
1939 { "C", "Corbin-Russwin" },
1943 static const string_string r3_snnidnames [] =
1945 { "A", "Ethernet" },
1946 { "B", "DPAC 802.11b" },
1947 { "C", "DPAC 802.11bg" },
1953 static const string_string r3_snhidnames [] =
1958 { "03", "eProx, Keypad" },
1960 { "05", "iProx, Keypad" },
1961 { "06", "iProx, eProx" },
1962 { "07", "iProx, eProx, Keypad" },
1963 { "08", "Mag Card" },
1964 { "09", "Mag Card, Keypad" },
1965 { "0a", "Mag Card, eProx" },
1966 { "0b", "Mag Card, eProx, Keypad" },
1967 { "0c", "Mag Card, iProx" },
1968 { "0d", "Mag Card, iProx, Keypad" },
1969 { "0e", "Mag Card, iProx, eProx" },
1970 { "0f", "Mag Card, iProx, eProx, Keypad" },
1971 { "10", "Biometric" },
1972 { "11", "Biometric, Keypad" },
1973 { "12", "Biometric, eProx" },
1974 { "13", "Biometric, eProx, Keypad" },
1975 { "14", "Biometric, iProx" },
1976 { "15", "Biometric, iProx, Keypad" },
1977 { "16", "Biometric, iProx, eProx" },
1978 { "17", "Biometric, iProx, eProx, Keypad" },
1979 { "18", "Biometric, Mag Card" },
1980 { "19", "Biometric, Mag Card, Keypad" },
1981 { "1a", "Biometric, Mag Card, eProx" },
1982 { "1b", "Biometric, Mag Card, eProx, Keypad" },
1983 { "1c", "Biometric, Mag Card, iProx" },
1984 { "1d", "Biometric, Mag Card, iProx, Keypad" },
1985 { "1e", "Biometric, Mag Card, iProx, eProx" },
1986 { "1f", "Biometric, Mag Card, iProx, eProx, Keypad" },
1990 static const string_string r3_snpowersupplynames [] =
1992 { "A", "Batteries" },
1993 { "B", "External power" },
1994 { "C", "Power over Ethernet" },
1995 { "D", "External power w/ backup" },
1996 { "E", "Power over Ethernet w/ backup" },
2000 static const string_string r3_snmortisenames [] =
2002 { "A", "Sargent 82276 mortise" },
2003 { "B", "Sargent 82277 mortise" },
2004 { "C", "Sargent 82278 mortise" },
2005 { "D", "Sargent 82279 mortise" },
2006 { "E", "Sargent 10G77 bored" },
2007 { "F", "Sargent 8877 exit" },
2008 { "G", "Sargent 8878 exit" },
2009 { "H", "Sargent 8977 exit" },
2010 { "I", "Sargent 8878 exit" },
2011 { "J", "Corbin-Russwin ML20736/ML20836 mortise" },
2012 { "K", "Corbin-Russwin ML20735/ML20835 mortise" },
2013 { "L", "Corbin-Russwin ML20734/ML20834 mortise" },
2014 { "M", "Corbin-Russwin ML20733/ML20833 mortise" },
2015 { "N", "Corbin-Russwin CL33734/CL33834 bored" },
2016 { "O", "Corbin-Russwin 9734/9834 exit" },
2017 { "P", "Corbin-Russwin 9733/9833 exit" },
2018 { "Q", "Corbin-Russwin 9M734/9M834 exit" },
2019 { "R", "Corbin-Russwin 9M733/9M833 exit" },
2024 * Mapping table so dissect_r3_cmd_setconfig() knows what the configuration item type is
2028 configItem_e configItem;
2029 configType_e configType;
2033 static configMap_t configMap [] =
2035 { CONFIGITEM_SERIAL_NUMBER, CONFIGTYPE_STRING },
2036 { CONFIGITEM_CRYPT_KEY, CONFIGTYPE_STRING },
2037 { CONFIGITEM_HARDWARE_OPTIONS_MFG, CONFIGTYPE_16 },
2038 { CONFIGITEM_HARDWARE_OPTIONS, CONFIGTYPE_16 },
2039 { CONFIGITEM_NVRAM_CHANGES, CONFIGTYPE_16 },
2040 { CONFIGITEM_NVRAMDIRTY, CONFIGTYPE_BOOL },
2041 { CONFIGITEM_NVRAM_WV, CONFIGTYPE_BOOL },
2042 { CONFIGITEM_ENABLE_WDT, CONFIGTYPE_BOOL },
2043 { CONFIGITEM_EARLY_ACK, CONFIGTYPE_BOOL },
2044 { CONFIGITEM_CONSOLE_AES_ONLY, CONFIGTYPE_BOOL },
2045 { CONFIGITEM_RADIO_AES_ONLY, CONFIGTYPE_BOOL },
2046 { CONFIGITEM_NDRLE, CONFIGTYPE_BOOL },
2047 { CONFIGITEM_SOMF, CONFIGTYPE_BOOL },
2048 { CONFIGITEM_NOGAF, CONFIGTYPE_BOOL },
2049 { CONFIGITEM_CARD_READER_POWER, CONFIGTYPE_BOOL },
2050 { CONFIGITEM_PROX_ENABLE, CONFIGTYPE_BOOL },
2051 { CONFIGITEM_CKSUMCONFIG, CONFIGTYPE_BOOL },
2052 { CONFIGITEM_DAILY_BATTERY_CHECK, CONFIGTYPE_BOOL },
2053 { CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, CONFIGTYPE_8 },
2054 { CONFIGITEM_BATTERY_LOW, CONFIGTYPE_BOOL },
2055 { CONFIGITEM_LRU_HEAD, CONFIGTYPE_16 },
2056 { CONFIGITEM_LRU_TAIL, CONFIGTYPE_16 },
2057 { CONFIGITEM_RTC_CALIBRATION, CONFIGTYPE_8 },
2058 { CONFIGITEM_ACVREQUESTER, CONFIGTYPE_8 },
2059 { CONFIGITEM_LOCAL_LED, CONFIGTYPE_8 },
2060 { CONFIGITEM_ERRCNT_XORLEN, CONFIGTYPE_16 },
2061 { CONFIGITEM_ERRCNT_CRC, CONFIGTYPE_16 },
2062 { CONFIGITEM_ERRCNT_NOTSIGIL, CONFIGTYPE_16 },
2063 { CONFIGITEM_ERRCNT_TIMEOUT, CONFIGTYPE_16 },
2064 { CONFIGITEM_ERRCNT_TOOLONG, CONFIGTYPE_16 },
2065 { CONFIGITEM_ERRCNT_TOOSHORT, CONFIGTYPE_16 },
2066 { CONFIGITEM_ERRCNT_HITDEFAULT, CONFIGTYPE_16 },
2067 { CONFIGITEM_ERRCNT_OVERRUN, CONFIGTYPE_16 },
2068 { CONFIGITEM_ERRCNT_UARTFE, CONFIGTYPE_16 },
2069 { CONFIGITEM_ERRCNT_UARTOE, CONFIGTYPE_16 },
2070 { CONFIGITEM_DST_SET, CONFIGTYPE_BOOL },
2071 { CONFIGITEM_DST_MODE, CONFIGTYPE_8 },
2072 { CONFIGITEM_DST_FORWARD_MONTH, CONFIGTYPE_8 },
2073 { CONFIGITEM_DST_FORWARD_DOM, CONFIGTYPE_8 },
2074 { CONFIGITEM_DST_FORWARD_OOD, CONFIGTYPE_8 },
2075 { CONFIGITEM_DST_FORWARD_DOW, CONFIGTYPE_8 },
2076 { CONFIGITEM_DST_FORWARD_HOUR, CONFIGTYPE_8 },
2077 { CONFIGITEM_DST_FORWARD_MINUTE, CONFIGTYPE_8 },
2078 { CONFIGITEM_DST_FORWARD_ADJUST, CONFIGTYPE_8 },
2079 { CONFIGITEM_DST_BACK_MONTH, CONFIGTYPE_8 },
2080 { CONFIGITEM_DST_BACK_DOM, CONFIGTYPE_8 },
2081 { CONFIGITEM_DST_BACK_OOD, CONFIGTYPE_8 },
2082 { CONFIGITEM_DST_BACK_DOW, CONFIGTYPE_8 },
2083 { CONFIGITEM_DST_BACK_HOUR, CONFIGTYPE_8 },
2084 { CONFIGITEM_DST_BACK_MINUTE, CONFIGTYPE_8 },
2085 { CONFIGITEM_DST_BACK_ADJUST, CONFIGTYPE_8 },
2086 { CONFIGITEM_EVENTLOG_ZEROMEM, CONFIGTYPE_BOOL },
2087 { CONFIGITEM_EVENTLOG_BEGIN, CONFIGTYPE_16 },
2088 { CONFIGITEM_EVENTLOG_RECORD, CONFIGTYPE_16 },
2089 { CONFIGITEM_EVENTLOG_ENTRIES, CONFIGTYPE_16 },
2090 { CONFIGITEM_EVENTLOG_WARNDEVICE, CONFIGTYPE_8 },
2091 { CONFIGITEM_EVENTLOG_WARNEVERY, CONFIGTYPE_16 },
2092 { CONFIGITEM_EVENTLOG_RMTDEVICE, CONFIGTYPE_8 },
2093 { CONFIGITEM_DECLINEDLOG_ZEROMEM, CONFIGTYPE_BOOL },
2094 { CONFIGITEM_DECLINEDLOG_BEGIN, CONFIGTYPE_16 },
2095 { CONFIGITEM_DECLINEDLOG_RECORD, CONFIGTYPE_16 },
2096 { CONFIGITEM_DECLINEDLOG_ENTRIES, CONFIGTYPE_16 },
2097 { CONFIGITEM_DECLINEDLOG_WARNDEVICE, CONFIGTYPE_8 },
2098 { CONFIGITEM_DECLINEDLOG_WARNEVERY, CONFIGTYPE_16 },
2099 { CONFIGITEM_DECLINEDLOG_RMTDEVICE, CONFIGTYPE_8 },
2100 { CONFIGITEM_ALARMLOG_ZEROMEM, CONFIGTYPE_BOOL },
2101 { CONFIGITEM_ALARMLOG_BEGIN, CONFIGTYPE_16 },
2102 { CONFIGITEM_ALARMLOG_RECORD, CONFIGTYPE_16 },
2103 { CONFIGITEM_ALARMLOG_ENTRIES, CONFIGTYPE_16 },
2104 { CONFIGITEM_ALARMLOG_WARNDEVICE, CONFIGTYPE_8 },
2105 { CONFIGITEM_ALARMLOG_WARNEVERY, CONFIGTYPE_16 },
2106 { CONFIGITEM_ALARMLOG_RMTDEVICE, CONFIGTYPE_8 },
2107 { CONFIGITEM_VISIBLE_FEEDBACK, CONFIGTYPE_BOOL },
2108 { CONFIGITEM_AUDIBLE_FEEDBACK, CONFIGTYPE_BOOL },
2109 { CONFIGITEM_VISIBLE_INDICATORS, CONFIGTYPE_BOOL },
2110 { CONFIGITEM_AUDIBLE_INDICATORS, CONFIGTYPE_BOOL },
2111 { CONFIGITEM_2NDPINDURATION, CONFIGTYPE_8 },
2112 { CONFIGITEM_LOCKOUT_ATTEMPTS, CONFIGTYPE_8 },
2113 { CONFIGITEM_LOCKOUT_DURATION, CONFIGTYPE_8 },
2114 { CONFIGITEM_KEYPAD_INACTIVITY, CONFIGTYPE_8 },
2115 { CONFIGITEM_ICIDLE_DURATION, CONFIGTYPE_8 },
2116 { CONFIGITEM_WRITE_DECLINED_LOG, CONFIGTYPE_BOOL },
2117 { CONFIGITEM_LOW_BATTERY_INDICATOR, CONFIGTYPE_BOOL },
2118 { CONFIGITEM_PANIC_MODE, CONFIGTYPE_BOOL },
2119 { CONFIGITEM_TIMEZONE_ENABLE, CONFIGTYPE_BOOL },
2120 { CONFIGITEM_EXCEPTION_ENABLE, CONFIGTYPE_BOOL },
2121 { CONFIGITEM_AUTOUNLOCK_ENABLE, CONFIGTYPE_BOOL },
2122 { CONFIGITEM_LOCK_PRIORITY_EMERGENCY, CONFIGTYPE_8 },
2123 { CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, CONFIGTYPE_8 },
2124 { CONFIGITEM_LOCK_PRIORITY_USER, CONFIGTYPE_8 },
2125 { CONFIGITEM_LOCK_PRIORITY_PASSAGE, CONFIGTYPE_8 },
2126 { CONFIGITEM_LOCK_PRIORITY_PANIC, CONFIGTYPE_8 },
2127 { CONFIGITEM_LOCK_PRIORITY_LOCKOUT, CONFIGTYPE_8 },
2128 { CONFIGITEM_LOCK_PRIORITY_RELOCK, CONFIGTYPE_8 },
2129 { CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, CONFIGTYPE_8 },
2130 { CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, CONFIGTYPE_8 },
2131 { CONFIGITEM_LOCK_PRIORITY_REMOTE, CONFIGTYPE_8 },
2132 { CONFIGITEM_LOCK_TYPE, CONFIGTYPE_8 },
2133 { CONFIGITEM_DOUBLE_PULSE, CONFIGTYPE_BOOL },
2134 { CONFIGITEM_DOUBLE_DELAY, CONFIGTYPE_8 },
2135 { CONFIGITEM_MOTOR_DURATION, CONFIGTYPE_8 },
2136 { CONFIGITEM_MORTISE_TYPE, CONFIGTYPE_8 },
2137 { CONFIGITEM_UNLOCK_TIME, CONFIGTYPE_8 },
2138 { CONFIGITEM_EXT_UNLOCK_TIME, CONFIGTYPE_8 },
2139 { CONFIGITEM_DOOR_AJAR_TIME, CONFIGTYPE_8 },
2140 { CONFIGITEM_SESSION_TIMEOUT, CONFIGTYPE_8 },
2141 { CONFIGITEM_RETRY_ON_TIMEOUT, CONFIGTYPE_BOOL },
2142 { CONFIGITEM_UNSOLICITED_ENCRYPT, CONFIGTYPE_8 },
2143 { CONFIGITEM_RMT_AUTH_TIMEOUT, CONFIGTYPE_8 },
2144 { CONFIGITEM_RMT_AUTH_DEVICE, CONFIGTYPE_8 },
2145 { CONFIGITEM_ALARM_DEVICE, CONFIGTYPE_8 },
2146 { CONFIGITEM_NOTIFY_DEVICE, CONFIGTYPE_8 },
2147 { CONFIGITEM_COMMUSER_DEVICE, CONFIGTYPE_8 },
2148 { CONFIGITEM_SCHEDULER_DEVICE, CONFIGTYPE_8 },
2149 { CONFIGITEM_SCHEDULER_TYPE, CONFIGTYPE_8 },
2150 { CONFIGITEM_SCHEDULER_AWAKE, CONFIGTYPE_8 },
2151 { CONFIGITEM_SCHEDULER_PERIOD, CONFIGTYPE_16 },
2152 { CONFIGITEM_SCHEDULER_HOD, CONFIGTYPE_STRING },
2153 { CONFIGITEM_SCHEDULER_DOW, CONFIGTYPE_8 },
2154 { CONFIGITEM_SCHEDULER_DOM, CONFIGTYPE_32 },
2155 { CONFIGITEM_SCHEDULER_HM1, CONFIGTYPE_16 },
2156 { CONFIGITEM_SCHEDULER_HM2, CONFIGTYPE_16 },
2157 { CONFIGITEM_SCHEDULER_HM3, CONFIGTYPE_16 },
2158 { CONFIGITEM_SCHEDULER_HM4, CONFIGTYPE_16 },
2159 { CONFIGITEM_RADIO_TYPE, CONFIGTYPE_8 },
2160 { CONFIGITEM_RADIO_MODE, CONFIGTYPE_8 },
2161 { CONFIGITEM_RADIO_TIMEOUT, CONFIGTYPE_8 },
2162 { CONFIGITEM_RADIO_ATTEMPTS, CONFIGTYPE_8 },
2163 { CONFIGITEM_RADIO_HOUSEKEEPING, CONFIGTYPE_8 },
2164 { CONFIGITEM_RADIO_LEAPUSERNAME, CONFIGTYPE_STRING },
2165 { CONFIGITEM_RADIO_LEAPPASSWORD, CONFIGTYPE_STRING },
2166 { CONFIGITEM_INHIBIT_VOLTAGE, CONFIGTYPE_8 },
2167 { CONFIGITEM_LOW_VOLTAGE, CONFIGTYPE_8 },
2168 { CONFIGITEM_PT_RANGE_1, CONFIGTYPE_8 },
2169 { CONFIGITEM_PT_RANGE_2, CONFIGTYPE_8 },
2170 { CONFIGITEM_PT_RANGE_3, CONFIGTYPE_8 },
2171 { CONFIGITEM_PT_RANGE_4, CONFIGTYPE_8 },
2172 { CONFIGITEM_PT_RANGE_5, CONFIGTYPE_8 },
2173 { CONFIGITEM_PT_RANGE_6, CONFIGTYPE_8 },
2174 { CONFIGITEM_PT_RANGE_7, CONFIGTYPE_8 },
2175 { CONFIGITEM_PT_RANGE_8, CONFIGTYPE_8 },
2176 { CONFIGITEM_MAGCARD_IFS, CONFIGTYPE_BOOL },
2177 { CONFIGITEM_MAGCARD_FIELDS, CONFIGTYPE_8 },
2178 { CONFIGITEM_MAGCARD_OFFSET, CONFIGTYPE_8 },
2179 { CONFIGITEM_MAGCARD_DIGITS, CONFIGTYPE_8 },
2180 { CONFIGITEM_ALARMS, CONFIGTYPE_STRING },
2181 { CONFIGITEM_FILTERS, CONFIGTYPE_STRING },
2182 { CONFIGITEM_ALARMSTATE, CONFIGTYPE_8 },
2183 { CONFIGITEM_DOORSTATE, CONFIGTYPE_8 },
2184 { CONFIGITEM_DPACDEBUG, CONFIGTYPE_BOOL },
2185 { CONFIGITEM_FAILOPENSECURE, CONFIGTYPE_BOOL },
2186 { CONFIGITEM_REPLACED_VOLTAGE, CONFIGTYPE_8 },
2187 { CONFIGITEM_RX_HELD_TIME, CONFIGTYPE_8 },
2188 { CONFIGITEM_PACKET_TIMEOUT, CONFIGTYPE_8 },
2189 { CONFIGITEM_EXTENDEDRESPONSE, CONFIGTYPE_BOOL },
2190 { CONFIGITEM_PASSAGEMODEINDICATOR, CONFIGTYPE_BOOL },
2191 { CONFIGITEM_PFMRETURNTIME, CONFIGTYPE_8 }
2197 static hf_register_info hf [] =
2199 { &hf_r3_tildex3ds, { "DPAC Attention", "r3.dpac_attention", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2201 { &hf_r3_header, { "Header", "r3.header", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2202 { &hf_r3_payload, { "Payload", "r3.payload", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2203 { &hf_r3_tail, { "Tail", "r3.tail", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2205 { &hf_r3_sigil, { "Sigil", "r3.sigil", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2206 { &hf_r3_address, { "Address", "r3.address", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2207 { &hf_r3_packetnumber, { "Packet Number", "r3.packetnumber", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2208 { &hf_r3_packetlength, { "Packet Length", "r3.packetlength", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2209 { &hf_r3_encryption, { "Crypt Type", "r3.encryption", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_encryptionschemenames_ext, 0x0, NULL, HFILL }},
2210 { &hf_r3_crc, { "CRC", "r3.crc", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2211 { &hf_r3_crc_bad, { "Bad CRC", "r3.crc_bad", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2212 { &hf_r3_xor, { "XOR", "r3.xor", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2213 { &hf_r3_xor_bad, { "Bad XOR", "r3.xor_bad", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2215 { &hf_r3_commandlength, { "Command Length", "r3.command.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2216 { &hf_r3_command, { "Command", "r3.command.command", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0, NULL, HFILL }},
2217 { &hf_r3_commanddata, { "Command Data", "r3.command.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2219 { &hf_r3_commandmfglength, { "Mfg Command Length", "r3.commandmfg.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2220 { &hf_r3_commandmfg, { "Mfg Command", "r3.commandmfg.command", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdmfgnames_ext, 0x0, NULL, HFILL }},
2221 { &hf_r3_commandmfgdata, { "Mfg Command Data", "r3.commandmfg.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2223 { &hf_r3_responselength, { "Response Length", "r3.response.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2224 { &hf_r3_responsecommand, { "Response Command", "r3.response.command", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0, NULL, HFILL }},
2225 { &hf_r3_responsetype, { "Response Type", "r3.response.responsetype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_responsetypenames_ext, 0x0, NULL, HFILL }},
2226 { &hf_r3_responsetocommand, { "Response To Command", "r3.response.to_command", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0, NULL, HFILL }},
2227 { &hf_r3_responsedata, { "Response Data", "r3.response.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2229 { &hf_r3_upstreamcommand, { "Upstream Command", "r3.upstreamcommand.command", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamcommandnames_ext, 0x0, NULL, HFILL }},
2231 { &hf_r3_upstreamfield, { "Upstream Field", "r3.upstreamfield", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2232 { &hf_r3_upstreamfieldlength, { "Field Length", "r3.upstreamfield.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2233 { &hf_r3_upstreamfieldtype, { "Field Type", "r3.upstreamfield.type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamfieldnames_ext, 0x0, NULL, HFILL }},
2234 { &hf_r3_upstreamfielddatalen, { "Data Length", "r3.upstreamfield.datalen", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2235 { &hf_r3_upstreamfielderror, { "Error", "r3.upstreamfield.error", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2236 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SERIALNUMBER], { "Serial Number", "r3.upstreamfield.serialnumber", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2237 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_NAR], { "Next Available Record", "r3.upstreamfield.nar", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2238 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ENTRYDEVICE], { "Entry Device", "r3.upstreamfield.entrydevice", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2239 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PPMIFIELDTYPE], { "PPMI Field Type", "r3.upstreamfield.ppmifieldtype", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2240 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PIN], { "PIN", "r3.upstreamfield.pin", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2241 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SEQUENCENUMBER], { "Sequence Number", "r3.upstreamfield.sequencenumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2242 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_RESPONSEWINDOW], { "Response Window", "r3.upstreamfield.responsewindow", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2243 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERNUMBER], { "User Number", "r3.upstreamfield.usernumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2244 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_VERSION], { "Version", "r3.upstreamfield.version", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2245 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORD], { "Event Log Record", "r3.upstreamfield.eventlogrecord", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2246 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DATETIME], { "Date/Time", "r3.upstreamfield.datetime", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2247 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORDCOUNT], { "Event Log Record Count", "r3.upstreamfield.eventlogrecordcount", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2248 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORDCOUNT], { "Declined Log Record", "r3.upstreamfield.declinedlogrecord", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2249 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORD], { "Declined Log", "r3.upstreamfield.declinedlog", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2250 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERTYPE], { "User Type", "r3.upstreamfield.usertype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0, NULL, HFILL }},
2251 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSALWAYS], { "Access Always", "r3.upstreamfield.accessalways", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2252 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_CACHED], { "Cached", "r3.upstreamfield.cached", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2253 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYFIELDTYPE], { "Primary Field Type", "r3.upstreamfield.primaryfieldtype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2254 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXFIELDTYPE], { "Aux Field Type", "r3.upstreamfield.auxfieldtype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2255 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSMODE], { "Access Mode", "r3.upstreamfield.accessmode", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0, NULL, HFILL }},
2256 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXPIREON], { "Expire On", "r3.upstreamfield.expireon", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2257 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USECOUNT], { "Use Count", "r3.upstreamfield.usecount", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2258 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_TIMEZONE], { "Timezone", "r3.upstreamfield.timezone", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2259 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXCEPTIONGROUP], { "Exception Group", "r3.upstreamfield.exceptiongroup", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2260 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYPIN], { "Primary PIN", "r3.upstreamfield.primarypin", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2261 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXPIN], { "Aux PIN", "r3.upstreamfield.auxpin", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2262 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORDCOUNT], { "Alarm Record Count", "r3.upstreamfield.alarmrecordcount", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2263 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORD], { "Alarm Record", "r3.upstreamfield.alarmrecord", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2264 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXCTLRVERSION], { "Aux Controller Version", "r3.upstreamfield.auxctlrversion", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2266 { &hf_r3_configitems, { "Configuration Item List", "r3.configitems", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2267 { &hf_r3_configitem, { "Configuration Item", "r3.configitem", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configitemnames_ext, 0x0, NULL, HFILL }},
2268 { &hf_r3_configfield, { "Config Field", "r3.configfield", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2269 { &hf_r3_configitemlength, { "Configuration Item Length", "r3.configitem.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2270 { &hf_r3_configitemtype, { "Configuration Item Type", "r3.configitem.type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configtypenames_ext, 0x0, NULL, HFILL }},
2271 { &hf_r3_configitemdata, { "Configuration Item Data", "r3.configitem.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2272 { &hf_r3_configitemdata_bool, { "Configuration Item Boolean", "r3.configitem.data_boolean", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2273 { &hf_r3_configitemdata_8, { "Configuration Item 8-bit", "r3.configitem.data_8", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2274 { &hf_r3_configitemdata_16, { "Configuration Item 16-bit", "r3.configitem.data_16", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2275 { &hf_r3_configitemdata_32, { "Configuration Item 32-bit", "r3.configitem.data_32", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2276 { &hf_r3_configitemdata_string, { "Configuration Item String", "r3.configitem.data_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2278 { &hf_r3_timezonearray [ 0], { "Timezone 0", "r3.timezone.0", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000001, NULL, HFILL }},
2279 { &hf_r3_timezonearray [ 1], { "Timezone 1", "r3.timezone.1", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000002, NULL, HFILL }},
2280 { &hf_r3_timezonearray [ 2], { "Timezone 2", "r3.timezone.2", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000004, NULL, HFILL }},
2281 { &hf_r3_timezonearray [ 3], { "Timezone 3", "r3.timezone.3", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000008, NULL, HFILL }},
2282 { &hf_r3_timezonearray [ 4], { "Timezone 4", "r3.timezone.4", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000010, NULL, HFILL }},
2283 { &hf_r3_timezonearray [ 5], { "Timezone 5", "r3.timezone.5", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000020, NULL, HFILL }},
2284 { &hf_r3_timezonearray [ 6], { "Timezone 6", "r3.timezone.6", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000040, NULL, HFILL }},
2285 { &hf_r3_timezonearray [ 7], { "Timezone 7", "r3.timezone.7", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000080, NULL, HFILL }},
2286 { &hf_r3_timezonearray [ 8], { "Timezone 8", "r3.timezone.8", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000100, NULL, HFILL }},
2287 { &hf_r3_timezonearray [ 9], { "Timezone 9", "r3.timezone.9", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000200, NULL, HFILL }},
2288 { &hf_r3_timezonearray [10], { "Timezone 10", "r3.timezone.10", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000400, NULL, HFILL }},
2289 { &hf_r3_timezonearray [11], { "Timezone 11", "r3.timezone.11", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000800, NULL, HFILL }},
2290 { &hf_r3_timezonearray [12], { "Timezone 12", "r3.timezone.12", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00001000, NULL, HFILL }},
2291 { &hf_r3_timezonearray [13], { "Timezone 13", "r3.timezone.13", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00002000, NULL, HFILL }},
2292 { &hf_r3_timezonearray [14], { "Timezone 14", "r3.timezone.14", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00004000, NULL, HFILL }},
2293 { &hf_r3_timezonearray [15], { "Timezone 15", "r3.timezone.15", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00008000, NULL, HFILL }},
2294 { &hf_r3_timezonearray [16], { "Timezone 16", "r3.timezone.16", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00010000, NULL, HFILL }},
2295 { &hf_r3_timezonearray [17], { "Timezone 17", "r3.timezone.17", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00020000, NULL, HFILL }},
2296 { &hf_r3_timezonearray [18], { "Timezone 18", "r3.timezone.18", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00040000, NULL, HFILL }},
2297 { &hf_r3_timezonearray [19], { "Timezone 19", "r3.timezone.19", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00080000, NULL, HFILL }},
2298 { &hf_r3_timezonearray [20], { "Timezone 20", "r3.timezone.20", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00100000, NULL, HFILL }},
2299 { &hf_r3_timezonearray [21], { "Timezone 21", "r3.timezone.21", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00200000, NULL, HFILL }},
2300 { &hf_r3_timezonearray [22], { "Timezone 22", "r3.timezone.22", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00400000, NULL, HFILL }},
2301 { &hf_r3_timezonearray [23], { "Timezone 23", "r3.timezone.23", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00800000, NULL, HFILL }},
2302 { &hf_r3_timezonearray [24], { "Timezone 24", "r3.timezone.24", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x01000000, NULL, HFILL }},
2303 { &hf_r3_timezonearray [25], { "Timezone 25", "r3.timezone.25", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x02000000, NULL, HFILL }},
2304 { &hf_r3_timezonearray [26], { "Timezone 26", "r3.timezone.26", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x04000000, NULL, HFILL }},
2305 { &hf_r3_timezonearray [27], { "Timezone 27", "r3.timezone.27", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x08000000, NULL, HFILL }},
2306 { &hf_r3_timezonearray [28], { "Timezone 28", "r3.timezone.28", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x10000000, NULL, HFILL }},
2307 { &hf_r3_timezonearray [29], { "Timezone 29", "r3.timezone.29", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x20000000, NULL, HFILL }},
2308 { &hf_r3_timezonearray [30], { "Timezone 30", "r3.timezone.30", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x40000000, NULL, HFILL }},
2309 { &hf_r3_timezonearray [31], { "Timezone 31", "r3.timezone.31", FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x80000000, NULL, HFILL }},
2311 { &hf_r3_expireon_year, { "Expiration Year", "r3.expireon.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2312 { &hf_r3_expireon_month, { "Expiration Month", "r3.expireon.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2313 { &hf_r3_expireon_day, { "Expiration Day", "r3.expireon.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2315 { &hf_r3_datetime_year, { "Date/Time Year", "r3.datetime.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2316 { &hf_r3_datetime_month, { "Date/Time Month", "r3.datetime.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2317 { &hf_r3_datetime_day, { "Date/Time Day", "r3.datetime.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2318 { &hf_r3_datetime_dow, { "Date/Time DOW", "r3.datetime.dow", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0, NULL, HFILL }},
2319 { &hf_r3_datetime_hours, { "Date/Time Hours", "r3.datetime.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2320 { &hf_r3_datetime_minutes, { "Date/Time Minutes", "r3.datetime.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2321 { &hf_r3_datetime_seconds, { "Date/Time Seconds", "r3.datetime.seconds", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2322 { &hf_r3_datetime_dst, { "Date/Time DST", "r3.datetime.dst", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2324 { &hf_r3_eventlog_recordnumber, { "Record Number", "r3.eventlog.recordnumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2325 { &hf_r3_eventlog_year, { "Year", "r3.eventlog.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2326 { &hf_r3_eventlog_month, { "Month", "r3.eventlog.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2327 { &hf_r3_eventlog_day, { "Day", "r3.eventlog.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2328 { &hf_r3_eventlog_hour, { "Hours", "r3.eventlog.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2329 { &hf_r3_eventlog_minute, { "Minutes", "r3.eventlog.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2330 { &hf_r3_eventlog_second, { "Seconds", "r3.eventlog.seconds", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2331 { &hf_r3_eventlog_usernumber, { "User Number", "r3.eventlog.usernumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2332 { &hf_r3_eventlog_event, { "ID", "r3.eventlog.id", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0, NULL, HFILL }},
2334 { &hf_r3_declinedlog_recordnumber, { "Record Number", "r3.declinedlog.recordnumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2335 { &hf_r3_declinedlog_year, { "Year", "r3.declinedlog.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2336 { &hf_r3_declinedlog_month, { "Month", "r3.declinedlog.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2337 { &hf_r3_declinedlog_day, { "Day", "r3.declinedlog.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2338 { &hf_r3_declinedlog_hour, { "Hours", "r3.declinedlog.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2339 { &hf_r3_declinedlog_minute, { "Minutes", "r3.declinedlog.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2340 { &hf_r3_declinedlog_second, { "Seconds", "r3.declinedlog.seconds", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2341 { &hf_r3_declinedlog_usernumber, { "User Number", "r3.declinedlog.usernumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2342 { &hf_r3_declinedlog_cred1type, { "Credential 1 Type", "r3.declinedlog.cred1type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0, NULL, HFILL }},
2343 { &hf_r3_declinedlog_cred2type, { "Credential 2 Type", "r3.declinedlog.cred2type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0, NULL, HFILL }},
2344 { &hf_r3_declinedlog_cred1, { "Credential 1", "r3.declinedlog.cred1", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2345 { &hf_r3_declinedlog_cred2, { "Credential 2", "r3.declinedlog.cred2", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2347 { &hf_r3_alarmlog_recordnumber, { "Record Number", "r3.alarmlog.recordnumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2348 { &hf_r3_alarmlog_year, { "Year", "r3.alarmlog.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2349 { &hf_r3_alarmlog_month, { "Month", "r3.alarmlog.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2350 { &hf_r3_alarmlog_day, { "Day", "r3.alarmlog.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2351 { &hf_r3_alarmlog_hour, { "Hours", "r3.alarmlog.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2352 { &hf_r3_alarmlog_minute, { "Minutes", "r3.alarmlog.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2353 { &hf_r3_alarmlog_second, { "Seconds", "r3.alarmlog.seconds", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2354 { &hf_r3_alarmlog_id, { "ID", "r3.alarmlog.id", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0, NULL, HFILL }},
2355 { &hf_r3_alarmlog_usernumber, { "User Number", "r3.alarmlog.usernumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2357 { &hf_r3_debugmsg, { "Debug Message", "r3.debug", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2359 { &hf_r3_setdate_year, { "Year", "r3.setdate.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2360 { &hf_r3_setdate_month, { "Month", "r3.setdate.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2361 { &hf_r3_setdate_day, { "Day", "r3.setdate.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2362 { &hf_r3_setdate_dow, { "Day-Of-Week", "r3.setdate.dow", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0, NULL, HFILL }},
2363 { &hf_r3_setdate_hours, { "Hours", "r3.setdate.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2364 { &hf_r3_setdate_minutes, { "Minutes", "r3.setdate.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2365 { &hf_r3_setdate_seconds, { "Seconds", "r3.setdate.seconds", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2367 { &hf_r3_deleteusers, { "Delete Users", "r3.deleteusers", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_deleteusersnames_ext, 0x0, NULL, HFILL }},
2369 { &hf_r3_defineexception_number, { "Exception Number", "r3.defineexception.number", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2370 { &hf_r3_defineexception_startdate_month, { "Start Month", "r3.defineexception.start.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2371 { &hf_r3_defineexception_startdate_day, { "Start Day", "r3.defineexception.start.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2372 { &hf_r3_defineexception_startdate_hours, { "Start Hours", "r3.defineexception.start.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2373 { &hf_r3_defineexception_startdate_minutes, { "Start Minutes", "r3.defineexception.start.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2374 { &hf_r3_defineexception_enddate_month, { "End Month", "r3.defineexception.end.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2375 { &hf_r3_defineexception_enddate_day, { "End Day", "r3.defineexception.end.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2376 { &hf_r3_defineexception_enddate_hours, { "End Hours", "r3.defineexception.end.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2377 { &hf_r3_defineexception_enddate_minutes, { "End Minutes", "r3.defineexception.end.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2379 { &hf_r3_defineexceptiongroup_number, { "Define Exception Group Number", "r3.defineexceptiongroup.number", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2380 { &hf_r3_defineexceptiongroup_bits, { "Define Exception Group Bit Field", "r3.defineexceptiongroup.field", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2382 { &hf_r3_definecalendar_number, { "Define Calendar Number", "r3.definecalendar.number", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2383 { &hf_r3_definecalendar_bits, { "Define Calendar Bit Field", "r3.definecalendar.field", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2385 { &hf_r3_definetimezone_number, { "Timezone Number", "r3.definetimezone.number", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2386 { &hf_r3_definetimezone_starttime_hours, { "Start Hours", "r3.definetimezone.start.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2387 { &hf_r3_definetimezone_starttime_minutes, { "Start Minutes", "r3.definetimezone.start.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2388 { &hf_r3_definetimezone_endtime_hours, { "End Hours", "r3.definetimezone.end.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2389 { &hf_r3_definetimezone_endtime_minutes, { "End Minutes", "r3.definetimezone.end.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2390 { &hf_r3_definetimezone_daymap [0], { "Sunday", "r3.definetimezone.daymap.sunday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000001, NULL, HFILL }},
2391 { &hf_r3_definetimezone_daymap [1], { "Monday", "r3.definetimezone.daymap.monday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000002, NULL, HFILL }},
2392 { &hf_r3_definetimezone_daymap [2], { "Tuesday", "r3.definetimezone.daymap.tuesday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000004, NULL, HFILL }},
2393 { &hf_r3_definetimezone_daymap [3], { "Wednesday", "r3.definetimezone.daymap.wednesday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000008, NULL, HFILL }},
2394 { &hf_r3_definetimezone_daymap [4], { "Thursday", "r3.definetimezone.daymap.thursday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000010, NULL, HFILL }},
2395 { &hf_r3_definetimezone_daymap [5], { "Friday", "r3.definetimezone.daymap.friday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000020, NULL, HFILL }},
2396 { &hf_r3_definetimezone_daymap [6], { "Saturday", "r3.definetimezone.daymap.saturday", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000040, NULL, HFILL }},
2397 { &hf_r3_definetimezone_exceptiongroup, { "Exception Group", "r3.definetimezone.exceptiongroup", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2398 { &hf_r3_definetimezone_mode, { "Mode", "r3.definetimezone.mode", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_timezonemodenames_ext, 0x0, NULL, HFILL }},
2399 { &hf_r3_definetimezone_calendar, { "Calendar", "r3.definetimezone.calendar", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2401 { &hf_r3_rmtauthretry_sequence, { "Remote Auth Retry Sequence", "r3.rmtauthretry.sequence", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2402 { &hf_r3_rmtauthretry_retry, { "Remote Auth Retry Mode", "r3.rmtauthretry.mode", FT_BOOLEAN, 8, TFS (&tfs_rmtauthretry_flags), 0x0, NULL, HFILL }},
2404 { &hf_r3_eventlogdump_starttime_year, { "Start Year", "r3.eventlogdump.start.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2405 { &hf_r3_eventlogdump_starttime_month, { "Start Month", "r3.eventlogdump.start.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2406 { &hf_r3_eventlogdump_starttime_day, { "Start Day", "r3.eventlogdump.start.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2407 { &hf_r3_eventlogdump_starttime_hours, { "Start Hours", "r3.eventlogdump.start.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2408 { &hf_r3_eventlogdump_starttime_minutes, { "Start Minutes", "r3.eventlogdump.start.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2409 { &hf_r3_eventlogdump_endtime_year, { "End Year", "r3.eventlogdump.end.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2410 { &hf_r3_eventlogdump_endtime_month, { "End Month", "r3.eventlogdump.end.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2411 { &hf_r3_eventlogdump_endtime_day, { "End Day", "r3.eventlogdump.end.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2412 { &hf_r3_eventlogdump_endtime_hours, { "End Hours", "r3.eventlogdump.end.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2413 { &hf_r3_eventlogdump_endtime_minutes, { "End Minutes", "r3.eventlogdump.end.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2414 { &hf_r3_eventlogdump_user, { "Filter User", "r3.eventlogdump.user", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2416 { &hf_r3_declinedlogdump_starttime_year, { "Start Year", "r3.declinedlogdump.start.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2417 { &hf_r3_declinedlogdump_starttime_month, { "Start Month", "r3.declinedlogdump.start.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2418 { &hf_r3_declinedlogdump_starttime_day, { "Start Day", "r3.declinedlogdump.start.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2419 { &hf_r3_declinedlogdump_starttime_hours, { "Start Hours", "r3.declinedlogdump.start.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2420 { &hf_r3_declinedlogdump_starttime_minutes, { "Start Minutes", "r3.declinedlogdump.start.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2421 { &hf_r3_declinedlogdump_endtime_year, { "End Year", "r3.declinedlogdump.end.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2422 { &hf_r3_declinedlogdump_endtime_month, { "End Month", "r3.declinedlogdump.end.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2423 { &hf_r3_declinedlogdump_endtime_day, { "End Day", "r3.declinedlogdump.end.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2424 { &hf_r3_declinedlogdump_endtime_hours, { "End Hours", "r3.declinedlogdump.end.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2425 { &hf_r3_declinedlogdump_endtime_minutes, { "End Minutes", "r3.declinedlogdump.end.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2427 { &hf_r3_alarmlogdump_starttime_year, { "Start Year", "r3.alarmlogdump.start.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2428 { &hf_r3_alarmlogdump_starttime_month, { "Start Month", "r3.alarmlogdump.start.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2429 { &hf_r3_alarmlogdump_starttime_day, { "Start Day", "r3.alarmlogdump.start.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2430 { &hf_r3_alarmlogdump_starttime_hours, { "Start Hours", "r3.alarmlogdump.start.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2431 { &hf_r3_alarmlogdump_starttime_minutes, { "Start Minutes", "r3.alarmlogdump.start.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2432 { &hf_r3_alarmlogdump_endtime_year, { "End Year", "r3.alarmlogdump.end.year", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2433 { &hf_r3_alarmlogdump_endtime_month, { "End Month", "r3.alarmlogdump.end.month", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0, NULL, HFILL }},
2434 { &hf_r3_alarmlogdump_endtime_day, { "End Day", "r3.alarmlogdump.end.day", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2435 { &hf_r3_alarmlogdump_endtime_hours, { "End Hours", "r3.alarmlogdump.end.hours", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2436 { &hf_r3_alarmlogdump_endtime_minutes, { "End Minutes", "r3.alarmlogdump.end.minutes", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2438 { &hf_r3_nvramclearoptions [ 0], { "NVRAMCLEAROPTIONS_CFGINSTALLER", "r3.nvramclear.cfginstaller", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000001, NULL, HFILL }},
2439 { &hf_r3_nvramclearoptions [ 1], { "NVRAMCLEAROPTIONS_CFGADMIN", "r3.nvramclear.cfgadmin", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000002, NULL, HFILL }},
2440 { &hf_r3_nvramclearoptions [ 2], { "NVRAMCLEAROPTIONS_EXCEPTIONS", "r3.nvramclear.exceptions", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000004, NULL, HFILL }},
2441 { &hf_r3_nvramclearoptions [ 3], { "NVRAMCLEAROPTIONS_EXCEPTIONGROUPS", "r3.nvramclear.exceptiongroups", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000008, NULL, HFILL }},
2442 { &hf_r3_nvramclearoptions [ 4], { "NVRAMCLEAROPTIONS_CALENDARS", "r3.nvramclear.calendars", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000010, NULL, HFILL }},
2443 { &hf_r3_nvramclearoptions [ 5], { "NVRAMCLEAROPTIONS_TIMEZONES", "r3.nvramclear.timezones", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000020, NULL, HFILL }},
2444 { &hf_r3_nvramclearoptions [ 6], { "NVRAMCLEAROPTIONS_FILTERS", "r3.nvramclear.filters", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000040, NULL, HFILL }},
2445 { &hf_r3_nvramclearoptions [ 7], { "NVRAMCLEAROPTIONS_EVENTLOG", "r3.nvramclear.eventlog", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000080, NULL, HFILL }},
2446 { &hf_r3_nvramclearoptions [ 8], { "NVRAMCLEAROPTIONS_USERDATA", "r3.nvramclear.userdata", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000100, NULL, HFILL }},
2447 { &hf_r3_nvramclearoptions [ 9], { "NVRAMCLEAROPTIONS_DECLINEDLOG", "r3.nvramclear.declinedlog", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000200, NULL, HFILL }},
2448 { &hf_r3_nvramclearoptions [10], { "NVRAMCLEAROPTIONS_ALARMLOG", "r3.nvramclear.alarmlog", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000400, NULL, HFILL }},
2449 { &hf_r3_nvramclearoptions [11], { "NVRAMCLEAROPTIONS_LRUCACHE", "r3.nvramclear.lrucache", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000800, NULL, HFILL }},
2450 { &hf_r3_nvramclearoptions [12], { "NVRAMCLEAROPTIONS_DBHASH", "r3.nvramclear.dbhash", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00001000, NULL, HFILL }},
2451 { &hf_r3_nvramclearoptions [13], { "NVRAMCLEAROPTIONS_CFGSYSTEM", "r3.nvramclear.cfgsystem", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00002000, NULL, HFILL }},
2452 { &hf_r3_nvramclearoptions [14], { "NVRAMCLEAROPTIONS_UNUSED", "r3.nvramclear.unused", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00004000, NULL, HFILL }},
2453 { &hf_r3_nvramclearoptions [15], { "NVRAMCLEAROPTIONS_USEBACKUP", "r3.nvramclear.usebackup", FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00008000, NULL, HFILL }},
2455 { &hf_r3_writeeventlog_user, { "User", "r3.writeeventlog.user", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2456 { &hf_r3_writeeventlog_event, { "Event", "r3.writeeventlog.event", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0, NULL, HFILL }},
2458 { &hf_r3_powertableselection, { "Table", "r3.powertableselection", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_powertablenames_ext, 0x0, NULL, HFILL }},
2460 { &hf_r3_filter_type, { "Type", "r3.filter.type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtertypenames_ext, 0x0, NULL, HFILL }},
2461 { &hf_r3_filter_list, { "Event", "r3.filter.event", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtereventnames_ext, 0x0, NULL, HFILL }},
2463 { &hf_r3_alarm_length, { "Length", "r3.alarm.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2464 { &hf_r3_alarm_id, { "ID", "r3.alarm.id", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0, NULL, HFILL }},
2465 { &hf_r3_alarm_state, { "State", "r3.alarm.state", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x0, NULL, HFILL }},
2467 { &hf_r3_mfgfield_length, { "Field Length", "r3.mfgfield.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2468 { &hf_r3_mfgfield, { "Field", "r3.mfgfield.field", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgfieldnames_ext, 0x0, NULL, HFILL }},
2469 { &hf_r3_mfgfield_data, { "Field Data", "r3.mfgfield.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2471 { &hf_r3_mfgsetserialnumber, { "Serial Number", "r3.mfgsetserialnumber", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2472 { &hf_r3_mfgsetcryptkey, { "Crypt Key", "r3.mfgsetcryptkey", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2473 { &hf_r3_mfgdumpnvram, { "NVRAM Section", "r3.mfgnvramdump", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgnvramdumpnames_ext, 0x0, NULL, HFILL }},
2474 { &hf_r3_mfgremoteunlock, { "Remote Unlock", "r3.mfgremoteunlock", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgremoteunlocknames_ext, 0x0, NULL, HFILL }},
2475 { &hf_r3_mfgtestpreserve, { "Preserve Mode", "r3.mfgtestpreserve", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgtestpreservenames_ext, 0x0, NULL, HFILL }},
2477 { &hf_r3_adc [0], { "ADC 0", "r3.adc.0", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2478 { &hf_r3_adc [1], { "ADC 1", "r3.adc.1", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2479 { &hf_r3_adc [2], { "ADC 2", "r3.adc.2", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2480 { &hf_r3_adc [3], { "ADC 3", "r3.adc.3", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2481 { &hf_r3_adc [4], { "ADC 4", "r3.adc.4", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2482 { &hf_r3_adc [5], { "ADC 5", "r3.adc.5", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2483 { &hf_r3_adc [6], { "ADC 6", "r3.adc.6", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2484 { &hf_r3_adc [7], { "ADC 7", "r3.adc.7", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2486 { &hf_r3_hardwareid_board, { "Board ID", "r3.hardwareid.board", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2487 { &hf_r3_hardwareid_cpuid, { "CPU ID", "r3.hardwareid.cpuid", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2488 { &hf_r3_hardwareid_cpurev, { "CPU Rev", "r3.hardwareid.cpurev", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2490 { &hf_r3_testkeypad, { "Keypad Char", "r3.test.keypad", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2491 { &hf_r3_testmagcard, { "Mag Card", "r3.test.magcard", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2492 { &hf_r3_testproxcard, { "Prox Card", "r3.test.proxcard", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2494 { &hf_r3_nvramdump_record, { "Record Number", "r3.nvramdump.record", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2495 { &hf_r3_nvramdump_length, { "Record Length", "r3.nvramdump.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2496 { &hf_r3_nvramdump_data, { "Record Data", "r3.nvramdump.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2498 { &hf_r3_nvramdumprle_record, { "Record Number", "r3.nvramdumprle.record", FT_UINT24, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2499 { &hf_r3_nvramdumprle_length, { "Record Length", "r3.nvramdumprle.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2500 { &hf_r3_nvramdumprle_data, { "Record Data", "r3.nvramdumprle.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2502 { &hf_r3_iopins_lat, { "LAT", "r3.iopins.lat", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2503 { &hf_r3_iopins_port, { "PORT", "r3.iopins.port", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2504 { &hf_r3_iopins_tris, { "TRIS", "r3.iopins.tris", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2506 { &hf_r3_mortisepins_s1, { "Mortise Pin S1", "r3.mortisepins.s1", FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000001, NULL, HFILL }},
2507 { &hf_r3_mortisepins_s2, { "Mortise Pin S2", "r3.mortisepins.s2", FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000002, NULL, HFILL }},
2508 { &hf_r3_mortisepins_s3, { "Mortise Pin S3", "r3.mortisepins.s3", FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000004, NULL, HFILL }},
2509 { &hf_r3_mortisepins_s4, { "Mortise Pin S4", "r3.mortisepins.s4", FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000008, NULL, HFILL }},
2511 { &hf_r3_checksumresults , { "Checksum Results", "r3.checksumresults", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2512 { &hf_r3_checksumresults_field, { "Field", "r3.checksumresults.field", FT_UINT8, BASE_HEX|BASE_EXT_STRING, & r3_checksumresultnames_ext, 0x0, NULL, HFILL }},
2513 { &hf_r3_checksumresults_length, { "Length", "r3.checksumresults.length", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2514 { &hf_r3_checksumresults_state, { "State", "r3.checksumresults.state", FT_BOOLEAN, 8, TFS (&tfs_errornoerror_flags), 0x0, NULL, HFILL }},
2516 { &hf_r3_forceoptions_item, { "Item", "r3.forceoptions.item", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_forceitemnames_ext, 0x0, NULL, HFILL }},
2517 { &hf_r3_forceoptions_length, { "Length", "r3.forceoptions.length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2518 { &hf_r3_forceoptions_state_8, { "State", "r3.forceoptions.state", FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x0, NULL, HFILL }},
2519 { &hf_r3_forceoptions_state_16, { "State", "r3.forceoptions.state", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2520 { &hf_r3_forceoptions_state_24, { "State", "r3.forceoptions.state", FT_UINT24, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2521 { &hf_r3_forceoptions_state_32, { "State", "r3.forceoptions.state", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2523 { &hf_r3_peekpoke_operation, { "Operation", "r3.peekpoke.operation", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_peekpokenames_ext, 0x0, NULL, HFILL }},
2524 { &hf_r3_peekpoke_address, { "Address", "r3.peekpoke.address", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2525 { &hf_r3_peekpoke_length, { "Length", "r3.peekpoke.length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2526 { &hf_r3_peekpoke_poke8, { "8 Bit Value", "r3.peekpoke.poke8", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2527 { &hf_r3_peekpoke_poke16, { "16 Bit Value", "r3.peekpoke.poke16", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2528 { &hf_r3_peekpoke_poke24, { "24 Bit Value", "r3.peekpoke.poke24", FT_UINT24, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2529 { &hf_r3_peekpoke_poke32, { "32 Bit Value", "r3.peekpoke.poke32", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2530 { &hf_r3_peekpoke_pokestring, { "String Value", "r3.peekpoke.pokestring", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2532 { &hf_r3_firmwaredownload_length, { "Length", "r3.firmwaredownload.length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2533 { &hf_r3_firmwaredownload_record, { "Record Number", "r3.firmwaredownload.record", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2534 { &hf_r3_firmwaredownload_action, { "Action", "r3.firmwaredownload.action", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_downloadfirmwarenames_ext, 0x0, NULL, HFILL }},
2535 { &hf_r3_firmwaredownload_timeout, { "Timeout", "r3.firmwaredownload.timeout", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2536 { &hf_r3_firmwaredownload_nvram, { "NVRAM", "r3.firmwaredownload.nvram", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2537 { &hf_r3_firmwaredownload_address, { "Address", "r3.firmwaredownload.address", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2538 { &hf_r3_firmwaredownload_bytes, { "Bytes", "r3.firmwaredownload.bytes", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2539 { &hf_r3_firmwaredownload_data, { "Data", "r3.firmwaredownload.data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2540 { &hf_r3_firmwaredownload_crc, { "CRC", "r3.firmwaredownload.crc", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2541 { &hf_r3_firmwaredownload_crc_bad, { "Bad CRC", "r3.firmwaredownload.crc_bad", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2543 { &hf_r3_nvramchecksumvalue, { "Value", "r3.nvramchecksum.value", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2544 { &hf_r3_nvramchecksumvalue_fixup, { "Fixup", "r3.nvramchecksum.fixup", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2546 { &hf_r3_capabilities, { "Capability", "r3.capabilities", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2547 { &hf_r3_capabilities_length, { "Length", "r3.capabilities.length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2548 { &hf_r3_capabilities_type, { "Type", "r3.capabilities.type", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_capabilitiesnames_ext, 0x0, NULL, HFILL }},
2549 { &hf_r3_capabilities_value, { "Value", "r3.capabilities.value", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2551 { &hf_r3_lockstate_passage, { "Passage", "r3.lockstate.passage", FT_BOOLEAN, 24, NULL, 0x00000001, NULL, HFILL }},
2552 { &hf_r3_lockstate_panic, { "Panic", "r3.lockstate.panic", FT_BOOLEAN, 24, NULL, 0x00000002, NULL, HFILL }},
2553 { &hf_r3_lockstate_lockout, { "Lockout", "r3.lockstate.lockout", FT_BOOLEAN, 24, NULL, 0x00000004, NULL, HFILL }},
2554 { &hf_r3_lockstate_relock, { "Relock", "r3.lockstate.relock", FT_BOOLEAN, 24, NULL, 0x00000008, NULL, HFILL }},
2555 { &hf_r3_lockstate_autoopen, { "Auto Open", "r3.lockstate.autoopen", FT_BOOLEAN, 24, NULL, 0x00000010, NULL, HFILL }},
2556 { &hf_r3_lockstate_nextauto, { "Next Auto", "r3.lockstate.nextauto", FT_BOOLEAN, 24, NULL, 0x00000020, NULL, HFILL }},
2557 { &hf_r3_lockstate_lockstate, { "Lock State", "r3.lockstate.lockstate", FT_BOOLEAN, 24, NULL, 0x00000040, NULL, HFILL }},
2558 { &hf_r3_lockstate_wantstate, { "Want State", "r3.lockstate.wantstate", FT_BOOLEAN, 24, NULL, 0x00000080, NULL, HFILL }},
2559 { &hf_r3_lockstate_remote, { "Remote", "r3.lockstate.remote", FT_BOOLEAN, 24, NULL, 0x00000100, NULL, HFILL }},
2560 { &hf_r3_lockstate_update, { "Update", "r3.lockstate.update", FT_BOOLEAN, 24, NULL, 0x00000200, NULL, HFILL }},
2561 { &hf_r3_lockstate_exceptionspresent, { "Exceptions Present", "r3.lockstate.exceptionspresent", FT_BOOLEAN, 24, NULL, 0x00000400, NULL, HFILL }},
2562 { &hf_r3_lockstate_exceptionsactive, { "Exceptions Active", "r3.lockstate.exceptionsactive", FT_BOOLEAN, 24, NULL, 0x00000800, NULL, HFILL }},
2563 { &hf_r3_lockstate_timezonespresent, { "Timezones Presents", "r3.lockstate.timezonespresent", FT_BOOLEAN, 24, NULL, 0x00001000, NULL, HFILL }},
2564 { &hf_r3_lockstate_timezonesactive, { "Timezones Active", "r3.lockstate.timezonesactive", FT_BOOLEAN, 24, NULL, 0x00002000, NULL, HFILL }},
2565 { &hf_r3_lockstate_autounlockspresent, { "Auto Unlocks Present", "r3.lockstate.autounlockspresent", FT_BOOLEAN, 24, NULL, 0x00004000, NULL, HFILL }},
2566 { &hf_r3_lockstate_autounlocksactive, { "Auto Unlocks Active", "r3.lockstate.autounlocksactive", FT_BOOLEAN, 24, NULL, 0x00008000, NULL, HFILL }},
2567 { &hf_r3_lockstate_uapmspresent, { "UAPMs Present", "r3.lockstate.uapmspresent", FT_BOOLEAN, 24, NULL, 0x00010000, NULL, HFILL }},
2568 { &hf_r3_lockstate_uapmsactive, { "UAPMs Active", "r3.lockstate.uapmsactive", FT_BOOLEAN, 24, NULL, 0x00020000, NULL, HFILL }},
2569 { &hf_r3_lockstate_uapmrelockspresent, { "UAPM Relocks Present", "r3.lockstate.uapmrelockspresent", FT_BOOLEAN, 24, NULL, 0x00040000, NULL, HFILL }},
2570 { &hf_r3_lockstate_uapmreslocksactive, { "UAPM Relocks Active", "r3.lockstate.uapmreslocksactive", FT_BOOLEAN, 24, NULL, 0x00080000, NULL, HFILL }},
2571 { &hf_r3_lockstate_nvramprotect, { "NVRAM Protect", "r3.lockstate.nvramprotect", FT_BOOLEAN, 24, NULL, 0x00100000, NULL, HFILL }},
2572 { &hf_r3_lockstate_nvramchecksum, { "MVRAM Checksum", "r3.lockstate.nvramchecksum", FT_BOOLEAN, 24, NULL, 0x00200000, NULL, HFILL }},
2574 { &hf_r3_mortisestatelog, { "Mortise State Log", "r3.mortisestatelog", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2575 { &hf_r3_mortisestatelog_pointer, { "Event Pointer", "r3.mortisestatelog.pointer", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2576 { &hf_r3_mortisestatelog_mortisetype, { "Mortise Type", "r3.mortisestatelog.mortisetype", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortisetypenames_ext, 0x0, NULL, HFILL }},
2577 { &hf_r3_mortisestatelog_waiting, { "Waiting For Door Closed", "r3.mortisestatelog.waiting", FT_BOOLEAN, 8, TFS (&tfs_true_false ), 0x00, NULL, HFILL }},
2578 { &hf_r3_mortisestatelog_state, { "State", "r3.mortisestatelog.state", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2579 { &hf_r3_mortisestatelog_last, { "Last State", "r3.mortisestatelog.laststate", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2580 { &hf_r3_mortisestatelog_event, { "Event", "r3.mortisestatelog.event", FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortiseeventnames_ext, 0x0, NULL, HFILL }},
2582 { &hf_r3_timerchain_newtick, { "New Tick", "r3.timerchain.newtick", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2583 { &hf_r3_timerchain_currentboundary, { "Current Boundary", "r3.timerchain.currentboundary", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2584 { &hf_r3_timerchain_tasktag, { "Task Tag", "r3.timerchain.tasktag", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2585 { &hf_r3_timerchain_address, { "Address", "r3.timerchain.address", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2586 { &hf_r3_timerchain_reload, { "Reload", "r3.timerchain.reload", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2587 { &hf_r3_timerchain_boundary, { "Boundary", "r3.timerchain.boundary", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2588 { &hf_r3_timerchain_count, { "Count", "r3.timerchain.count", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2589 { &hf_r3_timerchain_flags, { "Flags", "r3.timerchain.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2591 { &hf_r3_taskflags_taskid, { "Task ID", "r3.taskflags.taskid", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2592 { &hf_r3_taskflags_flags, { "Flags", "r3.taskflags.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2594 { &hf_r3_checkpointlog_entryptr, { "Entry Pointer", "r3.checkpointlog.entrypointer", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2595 { &hf_r3_checkpointlog_rcon, { "RCON", "r3.checkpointlog.rcon", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2596 { &hf_r3_checkpointlog_checkpoint, { "Checkpoint", "r3.checkpointlog.checkpoint", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2598 { &hf_r3_cpuregisters_intcon, { "INTCON", "r3.cpuregisters.intcon", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2599 { &hf_r3_cpuregisters_intcon2, { "INTCON2", "r3.cpuregisters.intcon2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2600 { &hf_r3_cpuregisters_intcon3, { "INTCON3", "r3.cpuregisters.intcon3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2601 { &hf_r3_cpuregisters_pir1, { "PIR1", "r3.cpuregisters.pir1", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2602 { &hf_r3_cpuregisters_pir2, { "PIR2", "r3.cpuregisters.pir2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2603 { &hf_r3_cpuregisters_pir3, { "PIR3", "r3.cpuregisters.pir3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2604 { &hf_r3_cpuregisters_pie1, { "PIE1", "r3.cpuregisters.pie1", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2605 { &hf_r3_cpuregisters_pie2, { "PIE2", "r3.cpuregisters.pie2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2606 { &hf_r3_cpuregisters_pie3, { "PIE3", "r3.cpuregisters.pie3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2607 { &hf_r3_cpuregisters_ipr1, { "IPR1", "r3.cpuregisters.ipr1", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2608 { &hf_r3_cpuregisters_ipr2, { "IPR2", "r3.cpuregisters.ipr2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2609 { &hf_r3_cpuregisters_ipr3, { "IPR3", "r3.cpuregisters.ipr3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2610 { &hf_r3_cpuregisters_rcon, { "RCON", "r3.cpuregisters.rcon", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2611 { &hf_r3_cpuregisters_osccon, { "OSCCON", "r3.cpuregisters.osccon", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2612 { &hf_r3_cpuregisters_rcsta, { "RCSTA", "r3.cpuregisters.rcsta", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2613 { &hf_r3_cpuregisters_txsta, { "TXSTA", "r3.cpuregisters.txsta", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2614 { &hf_r3_cpuregisters_rcsta2, { "RCSTA2", "r3.cpuregisters.rcsta2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2615 { &hf_r3_cpuregisters_txsta2, { "TXSTA2", "r3.cpuregisters.txsta2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2616 { &hf_r3_cpuregisters_wdtcon, { "WDTCON", "r3.cpuregisters.wdtcon", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2618 { &hf_r3_cpuregisters_intcon_rbif, { "INTCON.RBIF", "r3.cpuregisters.intcon.rbif", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2619 { &hf_r3_cpuregisters_intcon_int0if, { "INTCON.INT0IF", "r3.cpuregisters.intcon.int0if", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2620 { &hf_r3_cpuregisters_intcon_tmr0if, { "INTCON.TMR0IF", "r3.cpuregisters.intcon.tmr0if", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2621 { &hf_r3_cpuregisters_intcon_rbie, { "INTCON.RBIE", "r3.cpuregisters.intcon.rbie", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2622 { &hf_r3_cpuregisters_intcon_int0ie, { "INTCON.INT0IE", "r3.cpuregisters.intcon.int0ie", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2623 { &hf_r3_cpuregisters_intcon_tmr0ie, { "INTCON.TMR0IE", "r3.cpuregisters.intcon.tmr0ie", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2624 { &hf_r3_cpuregisters_intcon_giel, { "INTCON.GIEL", "r3.cpuregisters.intcon.giel", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2625 { &hf_r3_cpuregisters_intcon_gieh, { "INTCON.GIEH", "r3.cpuregisters.intcon.gieh", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2626 { &hf_r3_cpuregisters_intcon2_rbip, { "INTCON2.RBIP", "r3_cpuregisters_intcon2_rbip", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2627 { &hf_r3_cpuregisters_intcon2_int3ip, { "INTCON2.INT3IP", "r3_cpuregisters_intcon2_int3ip", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2628 { &hf_r3_cpuregisters_intcon2_tmr0ip, { "INTCON2.TMR0IP", "r3_cpuregisters_intcon2_tmr0ip", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2629 { &hf_r3_cpuregisters_intcon2_intedg3, { "INTCON2.INTEDG3", "r3_cpuregisters_intcon2_intedg3", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2630 { &hf_r3_cpuregisters_intcon2_intedg2, { "INTCON2.INTEDG2", "r3_cpuregisters_intcon2_intedg2", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2631 { &hf_r3_cpuregisters_intcon2_intedg1, { "INTCON2.INTEDG1", "r3_cpuregisters_intcon2_intedg1", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2632 { &hf_r3_cpuregisters_intcon2_intedg0, { "INTCON2.INTEDG0", "r3_cpuregisters_intcon2_intedg0", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2633 { &hf_r3_cpuregisters_intcon2_rbpu, { "INTCON2.RBPU", "r3_cpuregisters_intcon2_rbpu", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2634 { &hf_r3_cpuregisters_intcon3_int1if, { "INTCON3.INT1IF", "r3.cpuregisters.intcon3.int1if", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2635 { &hf_r3_cpuregisters_intcon3_int2if, { "INTCON3.INT2IF", "r3.cpuregisters.intcon3.int2if", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2636 { &hf_r3_cpuregisters_intcon3_int3if, { "INTCON3.INT3IF", "r3.cpuregisters.intcon3.int3if", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2637 { &hf_r3_cpuregisters_intcon3_int1ie, { "INTCON3.INT1IE", "r3.cpuregisters.intcon3.int1ie", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2638 { &hf_r3_cpuregisters_intcon3_int2ie, { "INTCON3.INT2IE", "r3.cpuregisters.intcon3.int2ie", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2639 { &hf_r3_cpuregisters_intcon3_int3ie, { "INTCON3.INT3IE", "r3.cpuregisters.intcon3.int3ie", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2640 { &hf_r3_cpuregisters_intcon3_int1ip, { "INTCON3.INT1IP", "r3.cpuregisters.intcon3.int1ip", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2641 { &hf_r3_cpuregisters_intcon3_int2ip, { "INTCON3.INT2IP", "r3.cpuregisters.intcon3.int2ip", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2642 { &hf_r3_cpuregisters_pir1_tmr1if, { "PIR1.TMR1IF", "r3.cpuregisters.pir1.tmr1if", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2643 { &hf_r3_cpuregisters_pir1_tmr2if, { "PIR1.TMR2IF", "r3.cpuregisters.pir1.tmr2if", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2644 { &hf_r3_cpuregisters_pir1_ccp1if, { "PIR1.CCP1IF", "r3.cpuregisters.pir1.ccp1if", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2645 { &hf_r3_cpuregisters_pir1_ssp1if, { "PIR1.SSP1IF", "r3.cpuregisters.pir1.ssp1if", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2646 { &hf_r3_cpuregisters_pir1_tx1if, { "PIR1.TX1IF", "r3.cpuregisters.pir1.tx1if", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2647 { &hf_r3_cpuregisters_pir1_rc1if, { "PIR1.RC1IF", "r3.cpuregisters.pir1.rc1if", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2648 { &hf_r3_cpuregisters_pir1_adif, { "PIR1.ADIF", "r3.cpuregisters.pir1.adif", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2649 { &hf_r3_cpuregisters_pir1_pspif, { "PIR1.PSPIF", "r3.cpuregisters.pir1.pspif", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2650 { &hf_r3_cpuregisters_pir2_ccp2if, { "PIR2.CCP2IF", "r3.cpuregisters.pir2.ccp2if", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2651 { &hf_r3_cpuregisters_pir2_tmr3if, { "PIR2.TMR3IF", "r3.cpuregisters.pir2.tmr3if", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2652 { &hf_r3_cpuregisters_pir2_hlvdif, { "PIR2.HLVDIF", "r3.cpuregisters.pir2.hlvdif", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2653 { &hf_r3_cpuregisters_pir2_bcl1if, { "PIR2.BCL1IF", "r3.cpuregisters.pir2.bcl1if", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2654 { &hf_r3_cpuregisters_pir2_eeif, { "PIR2.EEIF", "r3.cpuregisters.pir2.eeif", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2655 { &hf_r3_cpuregisters_pir2_unused5, { "PIR2.UNUSED5", "r3.cpuregisters.pir2.unused5", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2656 { &hf_r3_cpuregisters_pir2_cmif, { "PIR2.CMIF", "r3.cpuregisters.pir2.cmif", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2657 { &hf_r3_cpuregisters_pir2_oscfif, { "PIR2.OSCFIF", "r3.cpuregisters.pir2.oscfif", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2658 { &hf_r3_cpuregisters_pir3_ccp3if, { "PIR3.CCP3IF", "r3.cpuregisters.pir3.ccp3if", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2659 { &hf_r3_cpuregisters_pir3_ccp4if, { "PIR3.CCP4IF", "r3.cpuregisters.pir3.ccp4if", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2660 { &hf_r3_cpuregisters_pir3_ccp5if, { "PIR3.CCP5IF", "r3.cpuregisters.pir3.ccp5if", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2661 { &hf_r3_cpuregisters_pir3_tmr4if, { "PIR3.TMR4IF", "r3.cpuregisters.pir3.tmr4if", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2662 { &hf_r3_cpuregisters_pir3_tx2if, { "PIR3.TX2IF", "r3.cpuregisters.pir3.tx2if", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2663 { &hf_r3_cpuregisters_pir3_rc2if, { "PIR3.RC2IF", "r3.cpuregisters.pir3.rc2if", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2664 { &hf_r3_cpuregisters_pir3_bcl2if, { "PIR3.BCL2IF", "r3.cpuregisters.pir3.bcl2if", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2665 { &hf_r3_cpuregisters_pir3_ssp2if, { "PIR3.SSP2IF", "r3.cpuregisters.pir3.ssp2if", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2666 { &hf_r3_cpuregisters_pie1_tmr1ie, { "PIE1.TMR1IE", "r3.cpuregisters.pie1.tmr1ie", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2667 { &hf_r3_cpuregisters_pie1_tmr2ie, { "PIE1.TMR2IE", "r3.cpuregisters.pie1.tmr2ie", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2668 { &hf_r3_cpuregisters_pie1_ccp1ie, { "PIE1.CCP1IE", "r3.cpuregisters.pie1.ccp1ie", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2669 { &hf_r3_cpuregisters_pie1_ssp1ie, { "PIE1.SSP1IE", "r3.cpuregisters.pie1.ssp1ie", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2670 { &hf_r3_cpuregisters_pie1_tx1ie, { "PIE1.TX1IE", "r3.cpuregisters.pie1.tx1ie", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2671 { &hf_r3_cpuregisters_pie1_rc1ie, { "PIE1.RC1IE", "r3.cpuregisters.pie1.rc1ie", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2672 { &hf_r3_cpuregisters_pie1_adie, { "PIE1.ADIE", "r3.cpuregisters.pie1.adie", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2673 { &hf_r3_cpuregisters_pie1_pspie, { "PIE1.PSPIE", "r3.cpuregisters.pie1.pspie", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2674 { &hf_r3_cpuregisters_pie2_oscfie, { "PIE2.OSCFIE", "r3.cpuregisters.pie2.oscfie", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2675 { &hf_r3_cpuregisters_pie2_cmie, { "PIE2.CMIE", "r3.cpuregisters.pie2.cmie", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2676 { &hf_r3_cpuregisters_pie2_unused2, { "PIE2.UNUSED2", "r3.cpuregisters.pie2.unused2", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2677 { &hf_r3_cpuregisters_pie2_eeie, { "PIE2.EEIE", "r3.cpuregisters.pie2.eeie", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2678 { &hf_r3_cpuregisters_pie2_bcl1ie, { "PIE2.BCL1IE", "r3.cpuregisters.pie2.bcl1ie", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2679 { &hf_r3_cpuregisters_pie2_hlvdie, { "PIE2.HLVDIE", "r3.cpuregisters.pie2.hlvdie", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2680 { &hf_r3_cpuregisters_pie2_tmr3ie, { "PIE2.TMR3IE", "r3.cpuregisters.pie2.tmr3ie", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2681 { &hf_r3_cpuregisters_pie2_ccp2ie, { "PIE2.CCP2IE", "r3.cpuregisters.pie2.ccp2ie", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2682 { &hf_r3_cpuregisters_pie3_ccp3ie, { "PIE3.CCP3IE", "r3.cpuregisters.pie3.ccp3ie", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2683 { &hf_r3_cpuregisters_pie3_ccp4ie, { "PIE3.CCP4IE", "r3.cpuregisters.pie3.ccp4ie", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2684 { &hf_r3_cpuregisters_pie3_ccp5ie, { "PIE3.CCP5IE", "r3.cpuregisters.pie3.ccp5ie", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2685 { &hf_r3_cpuregisters_pie3_tmr4ie, { "PIE3.TMR4IE", "r3.cpuregisters.pie3.tmr4ie", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2686 { &hf_r3_cpuregisters_pie3_tx2ie, { "PIE3.TX2IE", "r3.cpuregisters.pie3.tx2ie", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2687 { &hf_r3_cpuregisters_pie3_rc2ie, { "PIE3.RC2IE", "r3.cpuregisters.pie3.rc2ie", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2688 { &hf_r3_cpuregisters_pie3_bcl2ie, { "PIE3.BCL2IE", "r3.cpuregisters.pie3.bcl2ie", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2689 { &hf_r3_cpuregisters_pie3_ssp2ie, { "PIE3.SSP2IE", "r3.cpuregisters.pie3.ssp2ie", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2690 { &hf_r3_cpuregisters_ipr1_tmr1ip, { "IPR1.TMR1IP", "r3.cpuregisters.ipr1.tmr1ip", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2691 { &hf_r3_cpuregisters_ipr1_tmr2ip, { "IPR1.TMR2IP", "r3.cpuregisters.ipr1.tmr2ip", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2692 { &hf_r3_cpuregisters_ipr1_ccp1ip, { "IPR1.CCP1IP", "r3.cpuregisters.ipr1.ccp1ip", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2693 { &hf_r3_cpuregisters_ipr1_ssp1ip, { "IPR1.SSP1IP", "r3.cpuregisters.ipr1.ssp1ip", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2694 { &hf_r3_cpuregisters_ipr1_tx1ip, { "IPR1.TX1IP", "r3.cpuregisters.ipr1.tx1ip", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2695 { &hf_r3_cpuregisters_ipr1_rc1ip, { "IPR1.RC1IP", "r3.cpuregisters.ipr1.rc1ip", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2696 { &hf_r3_cpuregisters_ipr1_adip, { "IPR1.ADIP", "r3.cpuregisters.ipr1.adip", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2697 { &hf_r3_cpuregisters_ipr1_pspip, { "IPR1.PSPIP", "r3.cpuregisters.ipr1.pspip", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2698 { &hf_r3_cpuregisters_ipr2_ccp2ip, { "IPR2.CCP2IP", "r3.cpuregisters.ipr2.ccp2ip", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2699 { &hf_r3_cpuregisters_ipr2_tmr3ip, { "IPR2.TMR3IP", "r3.cpuregisters.ipr2.tmr3ip", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2700 { &hf_r3_cpuregisters_ipr2_hlvdip, { "IPR2.HLVDIP", "r3.cpuregisters.ipr2.hlvdip", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2701 { &hf_r3_cpuregisters_ipr2_bcl1ip, { "IPR2.BCL1IP", "r3.cpuregisters.ipr2.bcl1ip", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2702 { &hf_r3_cpuregisters_ipr2_eeip, { "IPR2.EEIP", "r3.cpuregisters.ipr2.eeip", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2703 { &hf_r3_cpuregisters_ipr2_unused5, { "IPR2.UNUSED5", "r3.cpuregisters.ipr2.unused5", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2704 { &hf_r3_cpuregisters_ipr2_cmip, { "IPR2.CMIP", "r3.cpuregisters.ipr2.cmip", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2705 { &hf_r3_cpuregisters_ipr2_oscfip, { "IPR2.OSCFIP", "r3.cpuregisters.ipr2.oscfip", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2706 { &hf_r3_cpuregisters_ipr3_ccp2ip, { "IPR3.CCP2IP", "r3.cpuregisters.ipr3.ccp2ip", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2707 { &hf_r3_cpuregisters_ipr3_ccp4ip, { "IPR3.CCP4IP", "r3.cpuregisters.ipr3.ccp4ip", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2708 { &hf_r3_cpuregisters_ipr3_ccp5ip, { "IPR3.CCP5IP", "r3.cpuregisters.ipr3.ccp5ip", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2709 { &hf_r3_cpuregisters_ipr3_tmr4ip, { "IPR3.TMR4IP", "r3.cpuregisters.ipr3.tmr4ip", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2710 { &hf_r3_cpuregisters_ipr3_tx2ip, { "IPR3.TX2IP", "r3.cpuregisters.ipr3.tx2ip", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2711 { &hf_r3_cpuregisters_ipr3_rc2ip, { "IPR3.RC2IP", "r3.cpuregisters.ipr3.rc2ip", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2712 { &hf_r3_cpuregisters_ipr3_bcl2ip, { "IPR3.BCL2IP", "r3.cpuregisters.ipr3.bcl2ip", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2713 { &hf_r3_cpuregisters_ipr3_ssp2ip, { "IPR3.SSP2IP", "r3.cpuregisters.ipr3.ssp2ip", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2714 { &hf_r3_cpuregisters_rcon_bor, { "RCON./BOR", "r3.cpuregisters.rcon.bor", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2715 { &hf_r3_cpuregisters_rcon_por, { "RCON./POR", "r3.cpuregisters.rcon.por", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2716 { &hf_r3_cpuregisters_rcon_pd, { "RCON./PD", "r3.cpuregisters.rcon.pd", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2717 { &hf_r3_cpuregisters_rcon_to, { "RCON./TO", "r3.cpuregisters.rcon.to", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2718 { &hf_r3_cpuregisters_rcon_unused4, { "RCON.UNUSED4", "r3.cpuregisters.rcon.unused4", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2719 { &hf_r3_cpuregisters_rcon_ri, { "RCON./RI", "r3.cpuregisters.rcon.ri", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2720 { &hf_r3_cpuregisters_rcon_sboren, { "RCON.SBOREN", "r3.cpuregisters.rcon.sboren", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2721 { &hf_r3_cpuregisters_rcon_ipen, { "RCON.IPEN", "r3.cpuregisters.rcon.ipen", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2722 { &hf_r3_cpuregisters_osccon_scs0, { "OSCCON.SCS0", "r3.cpuregisters.osccon.scs0", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2723 { &hf_r3_cpuregisters_osccon_scs1, { "OSCCON.SCS1", "r3.cpuregisters.osccon.scs1", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2724 { &hf_r3_cpuregisters_osccon_iofs, { "OSCCON.IOFS", "r3.cpuregisters.osccon.iofs", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2725 { &hf_r3_cpuregisters_osccon_osts, { "OSCCON.OSTS", "r3.cpuregisters.osccon.osts", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2726 { &hf_r3_cpuregisters_osccon_ircf0, { "OSCCON.IRCF0", "r3.cpuregisters.osccon.ircf0", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2727 { &hf_r3_cpuregisters_osccon_ircf1, { "OSCCON.IRCF1", "r3.cpuregisters.osccon.ircf1", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2728 { &hf_r3_cpuregisters_osccon_ircf2, { "OSCCON.IRCF2", "r3.cpuregisters.osccon.ircf2", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2729 { &hf_r3_cpuregisters_osccon_idlen, { "OSCCON.IDLEN", "r3.cpuregisters.osccon.idlen", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2730 { &hf_r3_cpuregisters_rcsta_rx9d, { "RCSTA.RX9D", "r3.cpuregisters.rcsta.rx9d", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2731 { &hf_r3_cpuregisters_rcsta_oerr, { "RCSTA.OERR", "r3.cpuregisters.rcsta.oerr", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2732 { &hf_r3_cpuregisters_rcsta_ferr, { "RCSTA.FERR", "r3.cpuregisters.rcsta.ferr", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2733 { &hf_r3_cpuregisters_rcsta_adden, { "RCSTA.ADDEN", "r3.cpuregisters.rcsta.adden", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2734 { &hf_r3_cpuregisters_rcsta_cren, { "RCSTA.CREN", "r3.cpuregisters.rcsta.cren", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2735 { &hf_r3_cpuregisters_rcsta_sren, { "RCSTA.SREN", "r3.cpuregisters.rcsta.sren", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2736 { &hf_r3_cpuregisters_rcsta_rx9, { "RCSTA.RX9", "r3.cpuregisters.rcsta.rx9", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2737 { &hf_r3_cpuregisters_rcsta_spen, { "RCSTA.SPEN", "r3.cpuregisters.rcsta.spen", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2738 { &hf_r3_cpuregisters_txsta_tx9d, { "TXSTA.TX9D", "r3.cpuregisters.txsta.tx9d", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2739 { &hf_r3_cpuregisters_txsta_trmt, { "TXSTA.TRMT", "r3.cpuregisters.txsta.trmt", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2740 { &hf_r3_cpuregisters_txsta_brgh, { "TXSTA.BRGH", "r3.cpuregisters.txsta.brgh", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2741 { &hf_r3_cpuregisters_txsta_sendb, { "TXSTA.SENDB", "r3.cpuregisters.txsta.sendb", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2742 { &hf_r3_cpuregisters_txsta_sync, { "TXSTA.SYNC", "r3.cpuregisters.txsta.sync", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2743 { &hf_r3_cpuregisters_txsta_txen, { "TXSTA.TXEN", "r3.cpuregisters.txsta.txen", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2744 { &hf_r3_cpuregisters_txsta_tx9, { "TXSTA.TX9", "r3.cpuregisters.txsta.tx9", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2745 { &hf_r3_cpuregisters_txsta_csrc, { "TXSTA.CSRC", "r3.cpuregisters.txsta.csrc", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2746 { &hf_r3_cpuregisters_rcsta2_rx9d, { "RCSTA2.RX9D", "r3.cpuregisters.rcsta2.rx9d", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2747 { &hf_r3_cpuregisters_rcsta2_oerr, { "RCSTA2.OERR", "r3.cpuregisters.rcsta2.oerr", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2748 { &hf_r3_cpuregisters_rcsta2_ferr, { "RCSTA2.FERR", "r3.cpuregisters.rcsta2.ferr", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2749 { &hf_r3_cpuregisters_rcsta2_adden, { "RCSTA2.ADDEN", "r3.cpuregisters.rcsta2.adden", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2750 { &hf_r3_cpuregisters_rcsta2_cren, { "RCSTA2.CREN", "r3.cpuregisters.rcsta2.cren", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2751 { &hf_r3_cpuregisters_rcsta2_sren, { "RCSTA2.SREN", "r3.cpuregisters.rcsta2.sren", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2752 { &hf_r3_cpuregisters_rcsta2_rx9, { "RCSTA2.RX9", "r3.cpuregisters.rcsta2.rx9", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2753 { &hf_r3_cpuregisters_rcsta2_spen, { "RCSTA2.SPEN", "r3.cpuregisters.rcsta2.spen", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2754 { &hf_r3_cpuregisters_txsta2_tx9d, { "TXSTA2.TX9D", "r3.cpuregisters.txsta2.tx9d", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2755 { &hf_r3_cpuregisters_txsta2_trmt, { "TXSTA2.TRMT", "r3.cpuregisters.txsta2.trmt", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2756 { &hf_r3_cpuregisters_txsta2_brgh, { "TXSTA2.BRGH", "r3.cpuregisters.txsta2.brgh", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2757 { &hf_r3_cpuregisters_txsta2_sendb, { "TXSTA2.SENDB", "r3.cpuregisters.txsta2.sendb", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2758 { &hf_r3_cpuregisters_txsta2_sync, { "TXSTA2.SYNC", "r3.cpuregisters.txsta2.sync", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2759 { &hf_r3_cpuregisters_txsta2_txen, { "TXSTA2.TXEN", "r3.cpuregisters.txsta2.txen", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2760 { &hf_r3_cpuregisters_txsta2_tx9, { "TXSTA2.TX9", "r3.cpuregisters.txsta2.tx9", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2761 { &hf_r3_cpuregisters_txsta2_csrc, { "TXSTA2.CSRC", "r3.cpuregisters.txsta2.csrc", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2762 { &hf_r3_cpuregisters_wdtcon_swdten, { "WDTCON.SWDTEN", "r3.cpuregisters.wdtcon.swdten", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
2763 { &hf_r3_cpuregisters_wdtcon_unused1, { "WDTCON.UNUSED1", "r3.cpuregisters.wdtcon.unused1", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
2764 { &hf_r3_cpuregisters_wdtcon_unused2, { "WDTCON.UNUSED2", "r3.cpuregisters.wdtcon.unused2", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
2765 { &hf_r3_cpuregisters_wdtcon_unused3, { "WDTCON.UNUSED3", "r3.cpuregisters.wdtcon.unused3", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
2766 { &hf_r3_cpuregisters_wdtcon_unused4, { "WDTCON.UNUSED4", "r3.cpuregisters.wdtcon.unused4", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
2767 { &hf_r3_cpuregisters_wdtcon_unused5, { "WDTCON.UNUSED5", "r3.cpuregisters.wdtcon.unused5", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
2768 { &hf_r3_cpuregisters_wdtcon_unused6, { "WDTCON.UNUSED6", "r3.cpuregisters.wdtcon.unused6", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
2769 { &hf_r3_cpuregisters_wdtcon_unused7, { "WDTCON.UNUSED7", "r3.cpuregisters.wdtcon.unused7", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
2771 { &hf_r3_dumpm41t81_reg00, { "REG 0x00", "r3.m41t81.reg00", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2772 { &hf_r3_dumpm41t81_reg01, { "REG 0x01", "r3.m41t81.reg01", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2773 { &hf_r3_dumpm41t81_reg02, { "REG 0x02", "r3.m41t81.reg02", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2774 { &hf_r3_dumpm41t81_reg03, { "REG 0x03", "r3.m41t81.reg03", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2775 { &hf_r3_dumpm41t81_reg04, { "REG 0x04", "r3.m41t81.reg04", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2776 { &hf_r3_dumpm41t81_reg05, { "REG 0x05", "r3.m41t81.reg05", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2777 { &hf_r3_dumpm41t81_reg06, { "REG 0x06", "r3.m41t81.reg06", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2778 { &hf_r3_dumpm41t81_reg07, { "REG 0x07", "r3.m41t81.reg07", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2779 { &hf_r3_dumpm41t81_reg08, { "REG 0x08", "r3.m41t81.reg08", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2780 { &hf_r3_dumpm41t81_reg09, { "REG 0x09", "r3.m41t81.reg09", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2781 { &hf_r3_dumpm41t81_reg0a, { "REG 0x0a", "r3.m41t81.reg0a", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2782 { &hf_r3_dumpm41t81_reg0b, { "REG 0x0b", "r3.m41t81.reg0b", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2783 { &hf_r3_dumpm41t81_reg0c, { "REG 0x0c", "r3.m41t81.reg0c", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2784 { &hf_r3_dumpm41t81_reg0d, { "REG 0x0d", "r3.m41t81.reg0d", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2785 { &hf_r3_dumpm41t81_reg0e, { "REG 0x0e", "r3.m41t81.reg0e", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2786 { &hf_r3_dumpm41t81_reg0f, { "REG 0x0f", "r3.m41t81.reg0f", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2787 { &hf_r3_dumpm41t81_reg10, { "REG 0x10", "r3.m41t81.reg10", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2788 { &hf_r3_dumpm41t81_reg11, { "REG 0x11", "r3.m41t81.reg11", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2789 { &hf_r3_dumpm41t81_reg12, { "REG 0x12", "r3.m41t81.reg12", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2790 { &hf_r3_dumpm41t81_reg13, { "REG 0x13", "r3.m41t81.reg13", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2792 { &hf_r3_dumpm41t81_reg00_sec1, { ".1 Seconds", "r3.m41t81.reg00.sec1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2793 { &hf_r3_dumpm41t81_reg00_sec01, { ".01 Seconds", "r3.m41t81.reg00.sec01", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2794 { &hf_r3_dumpm41t81_reg01_st, { "ST", "r3.m41t81.reg01.st", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2795 { &hf_r3_dumpm41t81_reg01_10sec, { "10 Seconds", "r3.m41t81.reg01.10sec", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2796 { &hf_r3_dumpm41t81_reg01_1sec, { "1 Seconds", "r3.m41t81.reg01.1sec", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2797 { &hf_r3_dumpm41t81_reg02_notused, { "(not used)", "r3.m41t81.reg02.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2798 { &hf_r3_dumpm41t81_reg02_10min, { "10 Minutes", "r3.m41t81.reg02.10min", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2799 { &hf_r3_dumpm41t81_reg02_1min, { "1 Minutes", "r3.m41t81.reg02.1min", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2800 { &hf_r3_dumpm41t81_reg03_cbe, { "CBE", "r3.m41t81.reg03.cbe", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2801 { &hf_r3_dumpm41t81_reg03_cb, { "CB", "r3.m41t81.reg03.cb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2802 { &hf_r3_dumpm41t81_reg03_10hour, { "10 Hours", "r3.m41t81.reg03.10hour", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2803 { &hf_r3_dumpm41t81_reg03_1hour, { "1 Hours", "r3.m41t81.reg03.1hour", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2804 { &hf_r3_dumpm41t81_reg04_notused, { "(not used)", "r3.m41t81.reg04.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2805 { &hf_r3_dumpm41t81_reg04_dow, { "DOW", "r3.m41t81.reg04.dow", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2806 { &hf_r3_dumpm41t81_reg05_notused, { "(not used)", "r3.m41t81.reg05.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2807 { &hf_r3_dumpm41t81_reg05_10day, { "10 Day", "r3.m41t81.reg05.10day", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2808 { &hf_r3_dumpm41t81_reg05_1day, { "1 Day", "r3.m41t81.reg05.1day", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2809 { &hf_r3_dumpm41t81_reg06_notused, { "(not used)", "r3.m41t81.reg06.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2810 { &hf_r3_dumpm41t81_reg06_10month, { "10 Month", "r3.m41t81.reg06.10month", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2811 { &hf_r3_dumpm41t81_reg06_1month, { "1 Month", "r3.m41t81.reg06.1month", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2812 { &hf_r3_dumpm41t81_reg07_10year, { "10 Year", "r3.m41t81.reg07.10year", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2813 { &hf_r3_dumpm41t81_reg07_1year, { "1 Year", "r3.m41t81.reg07.1year", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2814 { &hf_r3_dumpm41t81_reg08_out, { "OUT", "r3.m41t81.reg08.out", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2815 { &hf_r3_dumpm41t81_reg08_ft, { "FT", "r3.m41t81.reg08.ft", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2816 { &hf_r3_dumpm41t81_reg08_s, { "S", "r3.m41t81.reg08.s", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2817 { &hf_r3_dumpm41t81_reg08_cal, { "CAL", "r3.m41t81.reg08.cal", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2818 { &hf_r3_dumpm41t81_reg09_notused, { "(not used)", "r3.m41t81.reg09.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2819 { &hf_r3_dumpm41t81_reg09_bmb, { "BMB", "r3.m41t81.reg09.bmb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2820 { &hf_r3_dumpm41t81_reg09_rb, { "RB", "r3.m41t81.reg09.rb", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2821 { &hf_r3_dumpm41t81_reg0a_afe, { "AFE", "r3.m41t81.reg0a.afe", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2822 { &hf_r3_dumpm41t81_reg0a_sqwe, { "SQWE", "r3.m41t81.reg0a.sqwe", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2823 { &hf_r3_dumpm41t81_reg0a_abe, { "ABE", "r3.m41t81.reg0a.abe", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2824 { &hf_r3_dumpm41t81_reg0a_10monthalm, { "10 Month Alarm", "r3.m41t81.reg0a.10monthalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2825 { &hf_r3_dumpm41t81_reg0a_1monthalm, { "1 Month Alarm", "r3.m41t81.reg0a.1monthalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2826 { &hf_r3_dumpm41t81_reg0b_rpt5, { "RPT5", "r3.m41t81.reg0b.rpt5", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2827 { &hf_r3_dumpm41t81_reg0b_rpt4, { "RPT4", "r3.m41t81.reg0b.rpt4", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2828 { &hf_r3_dumpm41t81_reg0b_10dayalm, { "10 Day Alarm", "r3.m41t81.reg0b.10dayalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2829 { &hf_r3_dumpm41t81_reg0b_1dayalm, { "1 Day Alarm", "r3.m41t81.reg0b.1dayalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2830 { &hf_r3_dumpm41t81_reg0c_rpt3, { "RPT3", "r3.m41t81.reg0c.rpt3", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2831 { &hf_r3_dumpm41t81_reg0c_ht, { "HT", "r3.m41t81.reg0c.ht", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2832 { &hf_r3_dumpm41t81_reg0c_10houralm, { "10 Hour Alarm", "r3.m41t81.reg0c.10houralm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2833 { &hf_r3_dumpm41t81_reg0c_1houralm, { "1 Hour Alarm", "r3.m41t81.reg0c.1houralm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2834 { &hf_r3_dumpm41t81_reg0d_rpt2, { "RPT2", "r3.m41t81.reg0d.rpt2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2835 { &hf_r3_dumpm41t81_reg0d_10minalm, { "10 Min Alarm", "r3.m41t81.reg0d.10minalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2836 { &hf_r3_dumpm41t81_reg0d_1minalm, { "1 Min Alarm", "r3.m41t81.reg0d.1minalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2837 { &hf_r3_dumpm41t81_reg0e_rpt1, { "RPT1", "r3.m41t81.reg0e.rpt1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2838 { &hf_r3_dumpm41t81_reg0e_10secalm, { "10 Sec Alarm", "r3.m41t81.reg0e.10secalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2839 { &hf_r3_dumpm41t81_reg0e_1secalm, { "1 Sec Alarm", "r3.m41t81.reg0e.1secalm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2840 { &hf_r3_dumpm41t81_reg0f_wdf, { "WDF", "r3.m41t81.reg0f.wdf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2841 { &hf_r3_dumpm41t81_reg0f_af, { "AF", "r3.m41t81.reg0f.af", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2842 { &hf_r3_dumpm41t81_reg0f_notused, { "(not used)", "r3.m41t81.reg0f.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2843 { &hf_r3_dumpm41t81_reg10_notused, { "(not used)", "r3.m41t81.reg10.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2844 { &hf_r3_dumpm41t81_reg11_notused, { "(not used)", "r3.m41t81.reg11.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2845 { &hf_r3_dumpm41t81_reg12_notused, { "(not used)", "r3.m41t81.reg12.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2846 { &hf_r3_dumpm41t81_reg13_rs, { "RS", "r3.m41t81.reg13.rs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2847 { &hf_r3_dumpm41t81_reg13_notused, { "(not used)", "r3.m41t81.reg13.notused", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
2849 { &hf_r3_debuglog_recordnumber, { "Record Number", "r3.debuglog.recordnumber", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2850 { &hf_r3_debuglog_flags, { "Flags", "r3.debuglog.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2851 { &hf_r3_debuglog_tick, { "Tick", "r3.debuglog.tick", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2853 { &hf_r3_adduserparamtype, { "Upstream Field", "r3.manageuser", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2854 { &hf_r3_adduserparamtypelength, { "Field Length", "r3.manageuser.length", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2855 { &hf_r3_adduserparamtypetype, { "Field Type", "r3.manageuser.type", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_adduserparamtypenames_ext, 0x0, NULL, HFILL }},
2856 { &hf_r3_adduserparamtypedatalen, { "Data Length", "r3.manageuser.datalen", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2857 { &hf_r3_adduserparamtypeerror, { "Error", "r3.manageuser.error", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2858 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_DISPOSITION], { "Disposition", "r3.manageuser.disposition", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_dispositionnames_ext, 0x0, NULL, HFILL }},
2859 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERNO], { "User Number", "r3.manageuser.usernumber", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2860 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSALWAYS], { "Access Always", "r3.manageuser.accessalways", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2861 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSMODE], { "Access Mode", "r3.manageuser.accessmode", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0, NULL, HFILL }},
2862 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_CACHED], { "Cached", "r3.manageuser.cached", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2863 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERTYPE], { "User Type", "r3.manageuser.usertype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0, NULL, HFILL }},
2864 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELD], { "Primary Field", "r3.manageuser.primaryfield", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2865 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELDTYPE], { "Primary Field Type", "r3.manageuser.primaryfieldtype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2866 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELD], { "Aux Field", "r3.manageuser.auxfield", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
2867 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELDTYPE], { "Aux Field Type", "r3.manageuser.auxfieldtype", FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0, NULL, HFILL }},
2868 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USECOUNT], { "Use Count", "r3.manageuser.usecount", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2869 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXCEPTIONGROUP], { "Exception Group", "r3.manageuser.exceptiongroup", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL }},
2870 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXPIREON], { "Expire On", "r3.manageuser.expireon", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
2871 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_TIMEZONE], { "Timezone", "r3.manageuser.timezone", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }}
2874 typedef struct dissectorParser_s
2876 cmdCommand_e command;
2877 void (*dissector) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree);
2882 * Dissectors for each command
2884 static void dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2885 static void dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2886 static void dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2887 static void dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2888 static void dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2889 static void dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2890 static void dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2891 static void dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2892 static void dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2893 static void dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2894 static void dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2895 static void dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2896 static void dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2897 static void dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2898 static void dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2899 static void dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2900 static void dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2901 static void dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2902 static void dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2903 static void dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2904 static void dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2905 static void dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2906 static void dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2907 static void dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2908 static void dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2909 static void dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2910 static void dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2911 static void dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2912 static void dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2913 static void dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2914 static void dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2915 static void dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2917 static dissectorParser_t r3command_dissect [] =
2919 { CMD_RESPONSE, dissect_r3_cmd_response },
2920 { CMD_HANDSHAKE, dissect_r3_cmd_handshake },
2921 { CMD_KILLSESSION, dissect_r3_cmd_killsession },
2922 { CMD_QUERYSERIALNUMBER, dissect_r3_cmd_queryserialnumber },
2923 { CMD_QUERYVERSION, dissect_r3_cmd_queryversion },
2924 { CMD_SETDATETIME, dissect_r3_cmd_setdatetime },
2925 { CMD_QUERYDATETIME, dissect_r3_cmd_querydatetime },
2926 { CMD_SETCONFIG, dissect_r3_cmd_setconfig },
2927 { CMD_GETCONFIG, dissect_r3_cmd_getconfig },
2928 { CMD_MANAGEUSER, dissect_r3_cmd_manageuser },
2929 { CMD_DELETEUSERS, dissect_r3_cmd_deleteusers },
2930 { CMD_DEFINEEXCEPTION, dissect_r3_cmd_defineexception },
2931 { CMD_DEFINEEXCEPTIONGROUP, dissect_r3_cmd_defineexceptiongroup },
2932 { CMD_DEFINECALENDAR, dissect_r3_cmd_definecalendar },
2933 { CMD_DEFINETIMEZONE, dissect_r3_cmd_definetimezone },
2934 { CMD_RMTAUTHRETRY, dissect_r3_cmd_rmtauthretry },
2935 { CMD_FILTERS, dissect_r3_cmd_filters },
2936 { CMD_ALARMCONFIGURE, dissect_r3_cmd_alarmconfigure },
2937 { CMD_EVENTLOGDUMP, dissect_r3_cmd_eventlogdump },
2938 { CMD_DECLINEDLOGDUMP, dissect_r3_cmd_declinedlogdump },
2939 { CMD_ALARMLOGDUMP, dissect_r3_cmd_alarmlogdump },
2940 { CMD_DOWNLOADFIRMWARE, dissect_r3_cmd_downloadfirmware },
2941 { CMD_DOWNLOADFIRMWARETIMEOUT, dissect_r3_cmd_downloadfirmwaretimeout },
2942 { CMD_POWERTABLESELECTION, dissect_r3_cmd_powertableselection },
2943 { CMD_CLEARNVRAM, dissect_r3_cmd_clearnvram },
2944 { CMD_DPAC, dissect_r3_cmd_dpac },
2945 { CMD_SELFTEST, dissect_r3_cmd_selftest },
2946 { CMD_RESET, dissect_r3_cmd_reset },
2947 { CMD_LOGWRITE, dissect_r3_cmd_logwrite },
2948 { CMD_MFGCOMMAND, dissect_r3_cmd_mfgcommand },
2949 { CMD_NVRAMBACKUP, dissect_r3_cmd_nvrambackup },
2950 { CMD_EXTENDEDRESPONSE, dissect_r3_cmd_extendedresponse }
2953 static void dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2954 static void dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2955 static void dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2956 static void dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2957 static void dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2958 static void dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2959 static void dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2960 static void dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2961 static void dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2962 static void dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2963 static void dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2964 static void dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2965 static void dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2966 static void dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2967 static void dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2968 static void dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2969 static void dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2970 static void dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2971 static void dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2972 static void dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2973 static void dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2974 static void dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2975 static void dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2976 static void dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2977 static void dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2978 static void dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2979 static void dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2980 static void dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2981 static void dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2982 static void dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2983 static void dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2984 static void dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2985 static void dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2986 static void dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2987 static void dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
2989 static dissectorParser_t r3commandmfg_dissect [] =
2991 { CMDMFG_SETSERIALNUMBER, dissect_r3_cmdmfg_setserialnumber },
2992 { CMDMFG_SETCRYPTKEY, dissect_r3_cmdmfg_setcryptkey },
2993 { CMDMFG_DUMPNVRAM, dissect_r3_cmdmfg_dumpnvram },
2994 { CMDMFG_TERMINAL, dissect_r3_cmdmfg_terminal },
2995 { CMDMFG_REMOTEUNLOCK, dissect_r3_cmdmfg_remoteunlock },
2996 { CMDMFG_AUXCTLRVERSION, dissect_r3_cmdmfg_auxctlrversion },
2997 { CMDMFG_IOPINS, dissect_r3_cmdmfg_iopins },
2998 { CMDMFG_ADCS, dissect_r3_cmdmfg_adcs },
2999 { CMDMFG_HARDWAREID, dissect_r3_cmdmfg_hardwareid },
3000 { CMDMFG_CHECKPOINTLOGDUMP, dissect_r3_cmdmfg_checkpointlogdump },
3001 { CMDMFG_CHECKPOINTLOGCLEAR, dissect_r3_cmdmfg_checkpointlogclear },
3002 { CMDMFG_READREGISTERS, dissect_r3_cmdmfg_readregisters },
3003 { CMDMFG_FORCEOPTIONS, dissect_r3_cmdmfg_forceoptions },
3004 { CMDMFG_COMMUSER, dissect_r3_cmdmfg_commuser },
3005 { CMDMFG_DUMPKEYPAD, dissect_r3_cmdmfg_dumpkeypad },
3006 { CMDMFG_BATTERYCHECK, dissect_r3_cmdmfg_batterycheck },
3007 { CMDMFG_RAMREFRESH, dissect_r3_cmdmfg_ramrefresh },
3008 { CMDMFG_TASKFLAGS, dissect_r3_cmdmfg_taskflags },
3009 { CMDMFG_TIMERCHAIN, dissect_r3_cmdmfg_timerchain },
3010 { CMDMFG_PEEKPOKE, dissect_r3_cmdmfg_peekpoke },
3011 { CMDMFG_LOCKSTATE, dissect_r3_cmdmfg_lockstate },
3012 { CMDMFG_CAPABILITIES, dissect_r3_cmdmfg_capabilities },
3013 { CMDMFG_DUMPM41T81, dissect_r3_cmdmfg_dumpm41t81 },
3014 { CMDMFG_DEBUGLOGDUMP, dissect_r3_cmdmfg_debuglogdump },
3015 { CMDMFG_DEBUGLOGCLEAR, dissect_r3_cmdmfg_debuglogclear },
3016 { CMDMFG_TESTWDT, dissect_r3_cmdmfg_testwdt },
3017 { CMDMFG_QUERYCKSUM, dissect_r3_cmdmfg_querycksum },
3018 { CMDMFG_VALIDATECHECKSUMS, dissect_r3_cmdmfg_validatechecksums },
3019 { CMDMFG_REBUILDLRUCACHE, dissect_r3_cmdmfg_rebuildlrucache },
3020 { CMDMFG_TZUPDATE, dissect_r3_cmdmfg_tzupdate },
3021 { CMDMFG_TESTPRESERVE, dissect_r3_cmdmfg_testpreserve },
3022 { CMDMFG_MORTISESTATELOGDUMP, dissect_r3_cmdmfg_mortisestatelogdump },
3023 { CMDMFG_MORTISESTATELOGCLEAR, dissect_r3_cmdmfg_mortisestatelogclear },
3024 { CMDMFG_MORTISEPINS, dissect_r3_cmdmfg_mortisepins },
3025 { CMDMFG_HALTANDCATCHFIRE, dissect_r3_cmdmfg_haltandcatchfire }
3028 static void dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3029 static void dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3031 static dissectorParser_t r3response_dissect [] =
3033 { RESPONSETYPE_OK, dissect_r3_response_singlebyte },
3034 { RESPONSETYPE_ERROR, dissect_r3_response_singlebyte },
3035 { RESPONSETYPE_HASDATA, dissect_r3_response_hasdata },
3036 { RESPONSETYPE_NOHANDLER, dissect_r3_response_singlebyte },
3037 { RESPONSETYPE_NOSESSION, dissect_r3_response_singlebyte },
3038 { RESPONSETYPE_BADCOMMAND, dissect_r3_response_singlebyte },
3039 { RESPONSETYPE_BADPARAMETER, dissect_r3_response_singlebyte },
3040 { RESPONSETYPE_BADPARAMETERLEN, dissect_r3_response_singlebyte },
3041 { RESPONSETYPE_MISSINGPARAMETER, dissect_r3_response_singlebyte },
3042 { RESPONSETYPE_DUPLICATEPARAMETER, dissect_r3_response_singlebyte },
3043 { RESPONSETYPE_PARAMETERCONFLICT, dissect_r3_response_singlebyte },
3044 { RESPONSETYPE_BADDEVICE, dissect_r3_response_singlebyte },
3045 { RESPONSETYPE_NVRAMERROR, dissect_r3_response_singlebyte },
3046 { RESPONSETYPE_NVRAMERRORNOACK, dissect_r3_response_singlebyte },
3047 { RESPONSETYPE_NVRAMERRORNOACK32, dissect_r3_response_singlebyte },
3048 { RESPONSETYPE_NOTI2CADDRESS, dissect_r3_response_singlebyte },
3049 { RESPONSETYPE_FIRMWAREERROR, dissect_r3_response_singlebyte },
3050 { RESPONSETYPE_DUMPINPROGRESS, dissect_r3_response_singlebyte },
3051 { RESPONSETYPE_INTERNALERROR, dissect_r3_response_singlebyte },
3052 { RESPONSETYPE_NOTIMPLEMENTED, dissect_r3_response_singlebyte },
3053 { RESPONSETYPE_PINFORMATERROR, dissect_r3_response_singlebyte },
3054 { RESPONSETYPE_PINEXISTS, dissect_r3_response_singlebyte },
3055 { RESPONSETYPE_PINNOTFOUND, dissect_r3_response_singlebyte },
3056 { RESPONSETYPE_USERACTIVE, dissect_r3_response_singlebyte },
3057 { RESPONSETYPE_USERINACTIVE, dissect_r3_response_singlebyte },
3058 { RESPONSETYPE_PARENTNOTFOUND, dissect_r3_response_singlebyte },
3059 { RESPONSETYPE_NOCHAIN, dissect_r3_response_singlebyte },
3060 { RESPONSETYPE_CAUGHTINLOOP, dissect_r3_response_singlebyte },
3061 { RESPONSETYPE_EVENTFILTERED, dissect_r3_response_singlebyte },
3062 { RESPONSETYPE_PAYLOADTOOLARGE, dissect_r3_response_singlebyte },
3063 { RESPONSETYPE_ENDOFDATA, dissect_r3_response_singlebyte },
3064 { RESPONSETYPE_RMTAUTHREJECTED, dissect_r3_response_singlebyte },
3065 { RESPONSETYPE_NVRAMVERSIONERROR, dissect_r3_response_singlebyte },
3066 { RESPONSETYPE_NOHARDWARE, dissect_r3_response_singlebyte },
3067 { RESPONSETYPE_SCHEDULERCONFLICT, dissect_r3_response_singlebyte },
3068 { RESPONSETYPE_NVRAMWRITEERROR, dissect_r3_response_singlebyte },
3069 { RESPONSETYPE_DECLINEDFILTERED, dissect_r3_response_singlebyte },
3070 { RESPONSETYPE_NECONFIGPARM, dissect_r3_response_singlebyte },
3071 { RESPONSETYPE_FLASHERASEERROR, dissect_r3_response_singlebyte },
3072 { RESPONSETYPE_FLASHWRITEERROR, dissect_r3_response_singlebyte },
3073 { RESPONSETYPE_BADNVBACKUP, dissect_r3_response_singlebyte },
3074 { RESPONSETYPE_EARLYACK, dissect_r3_response_singlebyte },
3075 { RESPONSETYPE_ALARMFILTERED, dissect_r3_response_singlebyte },
3076 { RESPONSETYPE_ACVFAILURE, dissect_r3_response_singlebyte },
3077 { RESPONSETYPE_USERCHECKSUMERROR, dissect_r3_response_singlebyte },
3078 { RESPONSETYPE_CHECKSUMERROR, dissect_r3_response_singlebyte },
3079 { RESPONSETYPE_RTCSQWFAILURE, dissect_r3_response_singlebyte },
3080 { RESPONSETYPE_PRIORITYSHUTDOWN, dissect_r3_response_singlebyte },
3081 { RESPONSETYPE_NOTMODIFIABLE, dissect_r3_response_singlebyte },
3082 { RESPONSETYPE_CANTPRESERVE, dissect_r3_response_singlebyte },
3083 { RESPONSETYPE_INPASSAGEMODE, dissect_r3_response_singlebyte }
3086 static void dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3087 static void dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3088 static void dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3089 static void dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3090 static void dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3091 static void dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3092 static void dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3093 static void dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3094 static void dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3095 static void dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3096 static void dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3097 static void dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3098 static void dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3099 static void dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3100 static void dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3101 static void dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3102 static void dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3103 static void dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3104 static void dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3105 static void dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3106 static void dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3107 static void dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3108 static void dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3109 static void dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3110 static void dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3111 static void dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3113 static dissectorParser_t r3upstreamcommand_dissect [] =
3115 { UPSTREAMCOMMAND_RESERVED, dissect_r3_upstreamcommand_reserved },
3116 { UPSTREAMCOMMAND_DEBUGMSG, dissect_r3_upstreamcommand_debugmsg },
3117 { UPSTREAMCOMMAND_QUERYVERSION, dissect_r3_upstreamcommand_queryversion },
3118 { UPSTREAMCOMMAND_QUERYDATETIME, dissect_r3_upstreamcommand_querydatetime },
3119 { UPSTREAMCOMMAND_QUERYSERIALNUMBER, dissect_r3_upstreamcommand_queryserialnumber },
3120 { UPSTREAMCOMMAND_DUMPEVENTLOG, dissect_r3_upstreamcommand_dumpeventlog },
3121 { UPSTREAMCOMMAND_DUMPNVRAM, dissect_r3_upstreamcommand_dumpnvram },
3122 { UPSTREAMCOMMAND_RMTAUTHREQUEST, dissect_r3_upstreamcommand_rmtquthrequest },
3123 { UPSTREAMCOMMAND_RETRIEVEUSER, dissect_r3_upstreamcommand_retrieveuser },
3124 { UPSTREAMCOMMAND_QUERYCONFIG, dissect_r3_upstreamcommand_queryconfig },
3125 { UPSTREAMCOMMAND_RMTEVENTLOGRECORD, dissect_r3_upstreamcommand_rmteventlogrecord },
3126 { UPSTREAMCOMMAND_DPAC, dissect_r3_upstreamcommand_dpac },
3127 { UPSTREAMCOMMAND_NOTIFY, dissect_r3_upstreamcommand_notify },
3128 { UPSTREAMCOMMAND_MFG, dissect_r3_upstreamcommand_mfg },
3129 { UPSTREAMCOMMAND_EVENTLOGWARNING, dissect_r3_upstreamcommand_eventlogwarning },
3130 { UPSTREAMCOMMAND_DUMPNVRAMRLE, dissect_r3_upstreamcommand_dumpnvramrle },
3131 { UPSTREAMCOMMAND_RMTDECLINEDRECORD, dissect_r3_upstreamcommand_rmtdeclinedrecord },
3132 { UPSTREAMCOMMAND_DECLINEDWARNING, dissect_r3_upstreamcommand_declinedwarning },
3133 { UPSTREAMCOMMAND_DUMPDECLINEDLOG, dissect_r3_upstreamcommand_dumpdeclinedlog },
3134 { UPSTREAMCOMMAND_RMTALARMRECORD, dissect_r3_upstreamcommand_rmtalarmrecord },
3135 { UPSTREAMCOMMAND_ALARMWARNING, dissect_r3_upstreamcommand_alarmwarning },
3136 { UPSTREAMCOMMAND_DUMPALARMLOG, dissect_r3_upstreamcommand_dumpalarmlog },
3137 { UPSTREAMCOMMAND_CONNECTSCHEDULER, dissect_r3_upstreamcommand_connectscheduler },
3138 { UPSTREAMCOMMAND_CONNECTCOMMUSER, dissect_r3_upstreamcommand_connectcommuser },
3139 { UPSTREAMCOMMAND_CONNECTALARM, dissect_r3_upstreamcommand_commandalarm },
3140 { UPSTREAMCOMMAND_DUMPDEBUGLOG, dissect_r3_upstreamcommand_dumpdebuglog }
3143 static void dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3144 static void dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3145 static void dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3146 static void dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3147 static void dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3148 static void dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3149 static void dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3150 static void dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3151 static void dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3152 static void dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3153 static void dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3154 static void dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3155 static void dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3156 static void dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3157 static void dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3158 static void dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3159 static void dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3160 static void dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3162 static dissectorParser_t r3upstreammfgfield_dissect [] =
3164 { MFGFIELD_IOPINS, dissect_r3_upstreammfgfield_iopins },
3165 { MFGFIELD_ADCS, dissect_r3_upstreammfgfield_adcs },
3166 { MFGFIELD_HARDWAREID, dissect_r3_upstreammfgfield_hardwareid },
3167 { MFGFIELD_CHECKPOINTLOG, dissect_r3_upstreammfgfield_checkpointlog },
3168 { MFGFIELD_CPUREGISTERS, dissect_r3_upstreammfgfield_cpuregisters },
3169 { MFGFIELD_TASKFLAGS, dissect_r3_upstreammfgfield_taskflags },
3170 { MFGFIELD_TIMERCHAIN, dissect_r3_upstreammfgfield_timerchain },
3171 { MFGFIELD_PEEKPOKE, dissect_r3_upstreammfgfield_peekpoke },
3172 { MFGFIELD_LOCKSTATE, dissect_r3_upstreammfgfield_lockstate },
3173 { MFGFIELD_CAPABILITIES, dissect_r3_upstreammfgfield_capabilities },
3174 { MFGFIELD_DUMPM41T81, dissect_r3_upstreammfgfield_dumpm41t81 },
3175 { MFGFIELD_NVRAMCHECKSUMVALUE, dissect_r3_upstreammfgfield_nvramchecksumvalue },
3176 { MFGFIELD_CHECKSUMRESULTS, dissect_r3_upstreammfgfield_checksumresults },
3177 { MFGFIELD_MORTISESTATELOG, dissect_r3_upstreammfgfield_mortisestatelog },
3178 { MFGFIELD_MORTISEPINS, dissect_r3_upstreammfgfield_mortisepins },
3179 { MFGFIELD_KEYPADCHAR, dissect_r3_upstreammfgfield_keypadchar },
3180 { MFGFIELD_MAGCARD, dissect_r3_upstreammfgfield_magcard },
3181 { MFGFIELD_PROXCARD, dissect_r3_upstreammfgfield_proxcard }
3185 * ***************************************************************************
3187 * Cannot use epan/crc routines as ccitt-x25 uses a starting value of 0xffff
3188 * and we use 0x0000 (legacy compatibility). If an override method to set
3189 * the starting value existed, these could be replaced.
3191 static const guint16 ccitt_16 [256] =
3193 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
3194 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
3195 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
3196 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
3197 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
3198 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
3199 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
3200 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
3201 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
3202 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
3203 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
3204 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
3205 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
3206 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
3207 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
3208 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
3209 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
3210 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
3211 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
3212 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
3213 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
3214 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
3215 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
3216 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
3217 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
3218 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
3219 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
3220 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
3221 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
3222 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
3223 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
3224 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
3227 static guint16 utilCrcCalculate (const void *ptr, guint16 len, guint16 crc)
3229 const guint8 *p = (guint8 *) ptr;
3232 crc = (guint16) ((crc << 8) ^ ccitt_16 [(crc >> 8) ^ *p++]);
3238 * ***************************************************************************
3240 static void dissect_serialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree, int hf_index)
3242 proto_item *sn_item = NULL;
3243 proto_tree *sn_tree = NULL;
3244 const gchar *s = NULL;
3246 tvb_ensure_bytes_exist (tvb, start_offset, 16);
3248 sn_item = proto_tree_add_item (tree, hf_index, tvb, start_offset, 16, TRUE);
3249 sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
3251 s = tvb_get_ephemeral_string (tvb, start_offset + 0, 2);
3252 proto_tree_add_text (sn_tree, tvb, start_offset + 0, 2, "Manufacturer .. : %s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
3253 s = tvb_get_ephemeral_string (tvb, start_offset + 2, 1);
3254 proto_tree_add_text (sn_tree, tvb, start_offset + 2, 1, "Year .......... : %s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
3255 s = tvb_get_ephemeral_string (tvb, start_offset + 3, 2);
3256 proto_tree_add_text (sn_tree, tvb, start_offset + 3, 2, "Week .......... : %s", s);
3257 s = tvb_get_ephemeral_string (tvb, start_offset + 5, 1);
3258 proto_tree_add_text (sn_tree, tvb, start_offset + 5, 1, "Model ......... : %s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
3259 s = tvb_get_ephemeral_string (tvb, start_offset + 6, 4);
3260 proto_tree_add_text (sn_tree, tvb, start_offset + 6, 4, "Sequence ...... : %s", s);
3261 s = tvb_get_ephemeral_string (tvb, start_offset + 10, 1);
3262 proto_tree_add_text (sn_tree, tvb, start_offset + 10, 1, "Group ......... : %s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
3263 s = tvb_get_ephemeral_string (tvb, start_offset + 11, 1);
3264 proto_tree_add_text (sn_tree, tvb, start_offset + 11, 1, "NID ........... : %s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
3265 s = tvb_get_ephemeral_string (tvb, start_offset + 12, 2);
3266 proto_tree_add_text (sn_tree, tvb, start_offset + 12, 2, "HID ........... : %s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
3267 s = tvb_get_ephemeral_string (tvb, start_offset + 14, 1);
3268 proto_tree_add_text (sn_tree, tvb, start_offset + 14, 1, "Power Supply .. : %s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
3269 s = tvb_get_ephemeral_string (tvb, start_offset + 15, 1);
3270 proto_tree_add_text (sn_tree, tvb, start_offset + 15, 1, "Mortise ....... : %s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
3274 * ***************************************************************************
3276 * We've already ensured we have enough bytes in the table via tvb_ensure_bytes_exist()
3279 static void dissect_r3_upstreamfields (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length, packet_info *pinfo, proto_tree *tree)
3283 while (offset < tvb_reported_length (tvb))
3285 guint32 fieldLength = tvb_get_guint8 (tvb, offset + 0);
3286 guint32 fieldType = tvb_get_guint8 (tvb, offset + 1);
3287 guint32 dataLength = fieldLength - 2;
3288 proto_item *upstreamfield_item = NULL;
3289 proto_tree *upstreamfield_tree = NULL;
3290 const gchar *usfn = NULL;
3292 usfn = val_to_str_ext_const (fieldType, &r3_upstreamfieldnames_ext, "[Unknown Field]");
3294 upstreamfield_item = proto_tree_add_none_format (tree, hf_r3_upstreamfield, tvb, offset + 0, fieldLength, "Upstream Field: %s (%u)", usfn, fieldType);
3295 upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3297 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldlength, tvb, offset + 0, 1, TRUE);
3298 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldtype, tvb, offset + 1, 1, TRUE);
3305 * Strings, booleans, 8 & 16 bit values
3307 case UPSTREAMFIELD_NOTUSED :
3308 case UPSTREAMFIELD_PIN :
3309 case UPSTREAMFIELD_VERSION :
3310 case UPSTREAMFIELD_PRIMARYPIN :
3311 case UPSTREAMFIELD_AUXPIN :
3312 case UPSTREAMFIELD_AUXCTLRVERSION :
3313 case UPSTREAMFIELD_ACCESSALWAYS :
3314 case UPSTREAMFIELD_CACHED :
3315 case UPSTREAMFIELD_ENTRYDEVICE :
3316 case UPSTREAMFIELD_PPMIFIELDTYPE :
3317 case UPSTREAMFIELD_RESPONSEWINDOW :
3318 case UPSTREAMFIELD_USERTYPE :
3319 case UPSTREAMFIELD_PRIMARYFIELDTYPE :
3320 case UPSTREAMFIELD_AUXFIELDTYPE :
3321 case UPSTREAMFIELD_ACCESSMODE :
3322 case UPSTREAMFIELD_USECOUNT :
3323 case UPSTREAMFIELD_EXCEPTIONGROUP :
3324 case UPSTREAMFIELD_NAR :
3325 case UPSTREAMFIELD_SEQUENCENUMBER :
3326 case UPSTREAMFIELD_USERNUMBER :
3327 case UPSTREAMFIELD_EVENTLOGRECORDCOUNT :
3328 case UPSTREAMFIELD_DECLINEDRECORDCOUNT :
3329 case UPSTREAMFIELD_ALARMRECORDCOUNT :
3330 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, TRUE);
3336 case UPSTREAMFIELD_SERIALNUMBER :
3338 tvbuff_t *sn_tvb = tvb_new_subset (tvb, offset, dataLength, dataLength);
3340 dissect_serialnumber (sn_tvb, 0, length, pinfo, upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType]);
3344 case UPSTREAMFIELD_EVENTLOGRECORD :
3346 proto_item *eventlog_item = NULL;
3347 proto_tree *eventlog_tree = NULL;
3349 if (dataLength != 9)
3350 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed event log field -- expected 9 octets");
3353 eventlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 9, "Event Log Record");
3354 eventlog_tree = proto_item_add_subtree (eventlog_item, ett_r3eventlogrecord);
3356 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, offset + 0, 1, TRUE);
3357 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, offset + 1, 1, TRUE);
3358 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, offset + 2, 1, TRUE);
3359 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, offset + 3, 1, TRUE);
3360 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, offset + 4, 1, TRUE);
3361 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, offset + 5, 1, TRUE);
3362 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, offset + 6, 2, TRUE);
3363 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, offset + 8, 1, TRUE);
3368 case UPSTREAMFIELD_DATETIME :
3370 proto_item *datetime_item = NULL;
3371 proto_tree *datetime_tree = NULL;
3373 if (dataLength != 8)
3374 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed date/time field -- expected 8 octets");
3377 datetime_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 8, "Date/Time: %02u/%02u/%02u-%u %02u:%02u:%02u %u",
3378 tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1), tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 3),
3379 tvb_get_guint8 (tvb, offset + 4), tvb_get_guint8 (tvb, offset + 5), tvb_get_guint8 (tvb, offset + 6), tvb_get_guint8 (tvb, offset + 7));
3380 datetime_tree = proto_item_add_subtree (datetime_item, ett_r3datetime);
3382 proto_tree_add_item (datetime_tree, hf_r3_datetime_year, tvb, offset + 0, 1, TRUE);
3383 proto_tree_add_item (datetime_tree, hf_r3_datetime_month, tvb, offset + 1, 1, TRUE);
3384 proto_tree_add_item (datetime_tree, hf_r3_datetime_day, tvb, offset + 2, 1, TRUE);
3385 proto_tree_add_item (datetime_tree, hf_r3_datetime_dow, tvb, offset + 3, 1, TRUE);
3386 proto_tree_add_item (datetime_tree, hf_r3_datetime_hours, tvb, offset + 4, 1, TRUE);
3387 proto_tree_add_item (datetime_tree, hf_r3_datetime_minutes, tvb, offset + 5, 1, TRUE);
3388 proto_tree_add_item (datetime_tree, hf_r3_datetime_seconds, tvb, offset + 6, 1, TRUE);
3389 proto_tree_add_item (datetime_tree, hf_r3_datetime_dst, tvb, offset + 7, 1, TRUE);
3394 case UPSTREAMFIELD_DECLINEDRECORD :
3396 proto_item *declinedlog_item = NULL;
3397 proto_tree *declinedlog_tree = NULL;
3398 guint8 cred1type = 0;
3399 guint8 cred2type = 0;
3401 if (dataLength != 49)
3402 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed declined log field -- expected 49 octets");
3405 declinedlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 49, "Declined Log Record");
3406 declinedlog_tree = proto_item_add_subtree (declinedlog_item, ett_r3declinedlogrecord);
3408 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, offset + 0, 1, TRUE);
3409 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, offset + 1, 1, TRUE);
3410 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, offset + 2, 1, TRUE);
3411 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, offset + 3, 1, TRUE);
3412 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, offset + 4, 1, TRUE);
3413 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, offset + 5, 1, TRUE);
3414 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, offset + 6, 2, TRUE);
3416 cred1type = tvb_get_guint8 (tvb, offset + 8) & 0x07;
3417 cred2type = (tvb_get_guint8 (tvb, offset + 8) & 0x38) >> 3;
3419 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, offset, 1, cred1type);
3420 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, offset, 1, cred2type);
3421 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, offset + 9, 19, TRUE);
3422 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, offset + 28, 19, TRUE);
3427 case UPSTREAMFIELD_EXPIREON :
3429 proto_item *expireon_item = NULL;
3430 proto_tree *expireon_tree = NULL;
3432 if (dataLength != 3)
3433 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed expiration field -- expected 3 octets");
3436 expireon_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 3, "Expire YY/MM/DD: %02u/%02u/%02u",
3437 tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1));
3438 expireon_tree = proto_item_add_subtree (expireon_item, ett_r3expireon);
3440 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, tvb, offset + 0, 1, TRUE);
3441 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, tvb, offset + 1, 1, TRUE);
3442 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, tvb, offset + 2, 1, TRUE);
3447 case UPSTREAMFIELD_TIMEZONE :
3451 proto_item *timezone_item = NULL;
3452 proto_tree *timezone_tree = NULL;
3454 if (dataLength != 4)
3455 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed timezone field -- expected 4 octets");
3458 tz = tvb_get_letohl (tvb, offset);
3459 timezone_item = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, 4, TRUE);
3460 timezone_tree = proto_item_add_subtree (timezone_item, ett_r3timezone);
3462 for (i = 0; i < 32; i++)
3463 proto_tree_add_boolean (timezone_tree, hf_r3_timezonearray [i], tvb, offset, 4, tz);
3468 case UPSTREAMFIELD_ALARMRECORD :
3470 proto_item *alarmlog_item = NULL;
3471 proto_tree *alarmlog_tree = NULL;
3473 alarmlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 9, "Alarm Record");
3474 alarmlog_tree = proto_item_add_subtree (alarmlog_item, ett_r3alarmlogrecord);
3476 if (dataLength != 9)
3477 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed alarm log field -- expected 9 octets");
3480 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, offset + 0, 1, TRUE);
3481 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, offset + 1, 1, TRUE);
3482 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, offset + 2, 1, TRUE);
3483 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, offset + 3, 1, TRUE);
3484 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, offset + 4, 1, TRUE);
3485 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, offset + 5, 1, TRUE);
3486 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, offset + 6, 1, TRUE);
3487 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, offset + 7, 2, TRUE);
3493 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset, dataLength, "Unknown Field Type");
3497 offset += dataLength;
3502 * ***************************************************************************
3504 * These are passed a tvb that contains whatever occurs after the [UPSTREAMCOMMAND_*] byte
3506 static void dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb _U_, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
3508 DISSECTOR_ASSERT (0);
3511 static void dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3513 proto_item *debugmsg_item = NULL;
3514 proto_tree *debugmsg_tree = NULL;
3516 debugmsg_item = proto_tree_add_text (tree, tvb, start_offset, -1, "Debug message");
3517 debugmsg_tree = proto_item_add_subtree (debugmsg_item, ett_r3debugmsg);
3519 proto_tree_add_item (debugmsg_tree, hf_r3_debugmsg, tvb, start_offset + 1, -1, TRUE);
3522 static void dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3524 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3527 static void dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3529 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3532 static void dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3534 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3537 static void dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3539 proto_item *eventlog_item = NULL;
3540 proto_tree *eventlog_tree = NULL;
3541 const gchar *en = NULL;
3543 tvb_ensure_bytes_exist (tvb, start_offset, 11);
3546 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed event log record -- expected 10 octets");
3549 en = val_to_str_ext_const (tvb_get_guint8 (tvb, start_offset + 10), &r3_eventnames_ext, "[Unknown Event]");
3551 eventlog_item = proto_tree_add_text (tree, tvb, start_offset, 10, "Event Log Record %u (%s)", tvb_get_letohs (tvb, start_offset + 0), en);
3552 eventlog_tree = proto_item_add_subtree (eventlog_item, ett_r3eventlogrecord);
3554 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_recordnumber, tvb, start_offset + 0, 2, TRUE);
3555 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, start_offset + 2, 1, TRUE);
3556 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, start_offset + 3, 1, TRUE);
3557 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, start_offset + 4, 1, TRUE);
3558 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, start_offset + 5, 1, TRUE);
3559 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, start_offset + 6, 1, TRUE);
3560 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, start_offset + 7, 1, TRUE);
3561 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, start_offset + 8, 2, TRUE);
3562 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, start_offset + 10, 1, TRUE);
3566 static void dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3568 tvb_ensure_bytes_exist (tvb, start_offset, 3);
3570 proto_tree_add_item (tree, hf_r3_nvramdump_record, tvb, start_offset + 0, 2, TRUE);
3571 proto_tree_add_item (tree, hf_r3_nvramdump_length, tvb, start_offset + 2, 1, TRUE);
3572 proto_tree_add_item (tree, hf_r3_nvramdump_data, tvb, start_offset + 3, tvb_get_guint8 (tvb, start_offset + 2), TRUE);
3575 static void dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3577 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3580 static void dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3582 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3585 static void dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3589 while (offset < tvb_reported_length (tvb))
3591 proto_item *upstreamfield_item = NULL;
3592 proto_tree *upstreamfield_tree = NULL;
3593 const gchar *ci = NULL;
3595 ci = val_to_str_ext_const (tvb_get_guint8 (tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
3597 upstreamfield_item = proto_tree_add_text (tree, tvb, offset + 0, tvb_get_guint8 (tvb, offset + 0), "Config Field: %s (%u)", ci, tvb_get_guint8 (tvb, offset + 1));
3598 upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3600 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemlength, tvb, offset + 0, 1, TRUE);
3601 proto_tree_add_item (upstreamfield_tree, hf_r3_configitem, tvb, offset + 1, 1, TRUE);
3602 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemtype, tvb, offset + 2, 1, TRUE);
3604 switch (tvb_get_guint8 (tvb, offset + 2))
3606 case CONFIGTYPE_NONE :
3607 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata, tvb, offset + 3, tvb_get_guint8 (tvb, offset + 0) - 3, TRUE);
3610 case CONFIGTYPE_BOOL :
3611 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_bool, tvb, offset + 3, 1, TRUE);
3615 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_8, tvb, offset + 3, 1, TRUE);
3618 case CONFIGTYPE_16 :
3619 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_16, tvb, offset + 3, 2, TRUE);
3622 case CONFIGTYPE_32 :
3623 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_32, tvb, offset + 3, 4, TRUE);
3626 case CONFIGTYPE_STRING :
3627 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_string, tvb, offset + 3, tvb_get_guint8 (tvb, offset + 0) - 3, TRUE);
3631 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset + 3, tvb_get_guint8 (tvb, offset + 0) - 3, "Unknown Field Type");
3635 offset += tvb_get_guint8 (tvb, offset + 0);
3639 static void dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3641 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3644 static void dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3646 proto_tree_add_item (tree, hf_r3_dpacreply_stuff, tvb, start_offset + 2, 1, TRUE);
3647 proto_tree_add_item (tree, hf_r3_dpacreply_length, tvb, start_offset + 3, 1, TRUE);
3648 proto_tree_add_item (tree, hf_r3_dpacreply_reply, tvb, start_offset + 4, -1, TRUE);
3651 static void dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3653 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3656 static void dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length, packet_info *pinfo, proto_tree *tree)
3658 proto_item *mfg_item = NULL;
3659 proto_tree *mfg_tree = NULL;
3660 tvbuff_t *mfg_tvb = NULL;
3663 mfg_tvb = tvb_new_subset (tvb, 2, tvb_reported_length (tvb) - 2, tvb_reported_length (tvb) - 2);
3665 cn = val_to_str_ext_const (tvb_get_guint8 (tvb, 1), &r3_mfgfieldnames_ext, "[Unknown Mfg Field]");
3667 proto_tree_add_item (tree, hf_r3_mfgfield_length, tvb, 0, 1, TRUE);
3669 mfg_item = proto_tree_add_text (tree, tvb, 1, -1, "Upstream Manufacturing Field: %s (%u)", cn, tvb_get_guint8 (tvb, 1));
3670 mfg_tree = proto_item_add_subtree (mfg_item, ett_r3commandmfg);
3672 proto_tree_add_item (mfg_tree, hf_r3_mfgfield, tvb, 1, 1, TRUE);
3674 if (tvb_get_guint8 (tvb, 1) >= MFGFIELD_LAST)
3675 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Unknown manufacturing command value");
3676 else if (r3upstreammfgfield_dissect [tvb_get_guint8 (tvb, 1)].dissector)
3677 (*r3upstreammfgfield_dissect [tvb_get_guint8 (tvb, 1)].dissector) (mfg_tvb, 0, length, pinfo, mfg_tree);
3680 static void dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3682 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3685 static void dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3687 proto_tree_add_item (tree, hf_r3_nvramdumprle_record, tvb, start_offset + 0, 2, TRUE);
3688 proto_tree_add_item (tree, hf_r3_nvramdumprle_length, tvb, start_offset + 3, 1, TRUE);
3689 proto_tree_add_item (tree, hf_r3_nvramdumprle_data, tvb, start_offset + 4, tvb_get_guint8 (tvb, start_offset + 3), TRUE);
3692 static void dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3694 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3697 static void dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3699 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3702 static void dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3704 proto_item *declinedlog_item = NULL;
3705 proto_tree *declinedlog_tree = NULL;
3706 guint8 cred1type = 0;
3707 guint8 cred2type = 0;
3709 declinedlog_item = proto_tree_add_text (tree, tvb, start_offset, 49, "Declined Log Record %u", tvb_get_letohs (tvb, start_offset + 0));
3710 declinedlog_tree = proto_item_add_subtree (declinedlog_item, ett_r3declinedlogrecord);
3712 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_recordnumber, tvb, start_offset, 2, TRUE); start_offset += 2;
3713 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, start_offset, 1, TRUE); start_offset += 1;
3714 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, start_offset, 1, TRUE); start_offset += 1;
3715 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, start_offset, 1, TRUE); start_offset += 1;
3716 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, start_offset, 1, TRUE); start_offset += 1;
3717 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, start_offset, 1, TRUE); start_offset += 1;
3718 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, start_offset, 1, TRUE); start_offset += 1;
3719 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, start_offset, 2, TRUE); start_offset += 2;
3721 cred1type = tvb_get_guint8 (tvb, start_offset) & 0x07;
3722 cred2type = (tvb_get_guint8 (tvb, start_offset) & 0x38) >> 3;
3724 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, start_offset, 1, cred1type); start_offset += 0;
3725 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, start_offset, 1, cred2type); start_offset += 1;
3726 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, start_offset, 19, TRUE); start_offset += 19;
3727 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, start_offset, 19, TRUE);
3730 static void dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3732 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3735 static void dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3737 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3740 static void dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3742 proto_item *alarmlog_item = proto_tree_add_text (tree, tvb, start_offset, 9, "Alarm Log Record %u", tvb_get_letohs (tvb, start_offset + 0));
3743 proto_tree *alarmlog_tree = proto_item_add_subtree (alarmlog_item, ett_r3alarmlogrecord);
3745 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_recordnumber, tvb, start_offset + 0, 2, TRUE);
3746 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, start_offset + 2, 1, TRUE);
3747 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, start_offset + 3, 1, TRUE);
3748 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, start_offset + 4, 1, TRUE);
3749 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, start_offset + 5, 1, TRUE);
3750 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, start_offset + 6, 1, TRUE);
3751 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, start_offset + 7, 1, TRUE);
3752 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, start_offset + 8, 1, TRUE);
3753 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, start_offset + 9, 2, TRUE);
3756 static void dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3758 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3761 static void dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3763 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3766 static void dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3768 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3771 static void dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3773 proto_item *debuglog_item = proto_tree_add_text (tree, tvb, start_offset, 8, "Debug Log Record %u", tvb_get_letohs (tvb, start_offset + 0));
3774 proto_tree *debuglog_tree = proto_item_add_subtree (debuglog_item, ett_r3debuglogrecord);
3776 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_recordnumber, tvb, start_offset + 0, 2, TRUE);
3777 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_flags, tvb, start_offset + 2, 4, TRUE);
3778 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_tick, tvb, start_offset + 6, 2, TRUE);
3782 * ***************************************************************************
3784 static void dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
3787 guint32 l = tvb_length_remaining (tvb, start_offset);
3788 char portname = 'A';
3791 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "IOPINS data length not modulo 3 == 0");
3794 for (i = 0; i < l; i += 3, portname++)
3796 proto_item *port_item = proto_tree_add_text (tree, tvb, start_offset + i, 3, "Port %c Configuration", (portname == 'I') ? ++portname : portname);
3797 proto_tree *port_tree = proto_item_add_subtree (port_item, ett_r3iopins);
3799 proto_tree_add_item (port_tree, hf_r3_iopins_lat, tvb, start_offset + i + 0, 1, TRUE);
3800 proto_tree_add_item (port_tree, hf_r3_iopins_port, tvb, start_offset + i + 1, 1, TRUE);
3801 proto_tree_add_item (port_tree, hf_r3_iopins_tris, tvb, start_offset + i + 2, 1, TRUE);
3806 static void dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3810 for (i = 0; i < tvb_reported_length (tvb); i++)
3812 proto_item *item = proto_tree_add_item (tree, hf_r3_adc [i], tvb, start_offset + i, 1, TRUE);
3813 proto_item_append_text (item, " (%.2f Volts)", (float) tvb_get_guint8 (tvb, start_offset + i) * 0.04154);
3817 static void dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3819 proto_tree_add_item (tree, hf_r3_hardwareid_board, tvb, 0, 1, TRUE);
3820 proto_tree_add_item (tree, hf_r3_hardwareid_cpuid, tvb, 1, 2, TRUE);
3821 proto_tree_add_item (tree, hf_r3_hardwareid_cpurev, tvb, 3, 1, TRUE);
3824 static void dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3826 proto_item *cpl_item = NULL;
3827 proto_tree *cpl_tree = NULL;
3829 guint l = tvb_length_remaining (tvb, start_offset + 1);
3832 proto_tree_add_item (tree, hf_r3_checkpointlog_entryptr, tvb, start_offset, 1, TRUE);
3833 cpl_item = proto_tree_add_text (tree, tvb, start_offset + 1, -1, "Checkpoint Log");
3834 cpl_tree = proto_item_add_subtree (cpl_item, ett_r3checkpointlog);
3836 for (start_offset++, i = 0; i < l; i += 2, counter++)
3838 guint rcon = tvb_get_guint8 (tvb, start_offset + i + 0);
3839 guint cp = tvb_get_guint8 (tvb, start_offset + i + 1);
3840 guint resettype = 0;
3841 proto_item *cpe_item = proto_tree_add_text (cpl_tree, tvb, start_offset + i + 0, 2, "Checkpoint Log Entry %u", counter);
3842 proto_tree *cpe_tree = proto_item_add_subtree (cpe_item, ett_r3checkpointlogentry);
3843 const gchar *resets [] = { "Stack underflow", "Stack overflow", "Power-On", "Software", "Brown-out", "MCLR in sleep", "WDT", "Normal", "[Unknown Reset Type]" };
3846 desc = val_to_str_ext_const (cp, &r3_checkpointnames_ext, "[Unknown Checkpoint]");
3856 else if ((rcon & 0x10) == 0x00)
3858 else if ((rcon & 0x1d) == 0x1c)
3860 else if ((rcon & 0x0c) == 0x08)
3862 else if ((rcon & 0x0c) == 0x04)
3868 proto_item_append_text (cpe_item, " (%s, %s)", resets [resettype], desc);
3869 proto_item_append_text (proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_rcon, tvb, start_offset + i + 0, 1, TRUE), " (%s)", resets [resettype]);
3870 proto_item_append_text (proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_checkpoint, tvb, start_offset + i + 1, 1, TRUE), " (%s)", desc);
3874 static void dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3876 proto_tree *tmp_tree [19];
3877 proto_item *cr_item = proto_tree_add_text (tree, tvb, start_offset, -1, "CPU Registers");
3878 proto_tree *cr_tree = proto_item_add_subtree (cr_item, ett_r3cpuregisters);
3880 tmp_tree [ 0] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon, tvb, start_offset + 0, 1, TRUE), ett_r3cpuregister);
3881 tmp_tree [ 1] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon2, tvb, start_offset + 1, 1, TRUE), ett_r3cpuregister);
3882 tmp_tree [ 2] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon3, tvb, start_offset + 2, 1, TRUE), ett_r3cpuregister);
3883 tmp_tree [ 3] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir1, tvb, start_offset + 3, 1, TRUE), ett_r3cpuregister);
3884 tmp_tree [ 4] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir2, tvb, start_offset + 4, 1, TRUE), ett_r3cpuregister);
3885 tmp_tree [ 5] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir3, tvb, start_offset + 5, 1, TRUE), ett_r3cpuregister);
3886 tmp_tree [ 6] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie1, tvb, start_offset + 6, 1, TRUE), ett_r3cpuregister);
3887 tmp_tree [ 7] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie2, tvb, start_offset + 7, 1, TRUE), ett_r3cpuregister);
3888 tmp_tree [ 8] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie3, tvb, start_offset + 8, 1, TRUE), ett_r3cpuregister);
3889 tmp_tree [ 9] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr1, tvb, start_offset + 9, 1, TRUE), ett_r3cpuregister);
3890 tmp_tree [10] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr2, tvb, start_offset + 10, 1, TRUE), ett_r3cpuregister);
3891 tmp_tree [11] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr3, tvb, start_offset + 11, 1, TRUE), ett_r3cpuregister);
3892 tmp_tree [12] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcon, tvb, start_offset + 12, 1, TRUE), ett_r3cpuregister);
3893 tmp_tree [13] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_osccon, tvb, start_offset + 13, 1, TRUE), ett_r3cpuregister);
3894 tmp_tree [14] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcsta, tvb, start_offset + 14, 1, TRUE), ett_r3cpuregister);
3895 tmp_tree [15] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_txsta, tvb, start_offset + 15, 1, TRUE), ett_r3cpuregister);
3896 tmp_tree [16] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcsta2, tvb, start_offset + 16, 1, TRUE), ett_r3cpuregister);
3897 tmp_tree [17] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_txsta2, tvb, start_offset + 17, 1, TRUE), ett_r3cpuregister);
3898 tmp_tree [18] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_wdtcon, tvb, start_offset + 18, 1, TRUE), ett_r3cpuregister);
3900 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbif, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3901 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0if, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3902 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0if, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3903 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbie, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3904 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0ie, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3905 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0ie, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3906 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_giel, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3907 proto_tree_add_boolean (tmp_tree [ 0], hf_r3_cpuregisters_intcon_gieh, tvb, start_offset + 0, 1, tvb_get_guint8 (tvb, start_offset + 0));
3908 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbip, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3909 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_int3ip, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3910 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_tmr0ip, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3911 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg3, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3912 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg2, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3913 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg1, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3914 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg0, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3915 proto_tree_add_boolean (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbpu, tvb, start_offset + 1, 1, tvb_get_guint8 (tvb, start_offset + 1));
3916 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1if, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3917 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2if, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3918 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3if, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3919 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ie, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3920 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ie, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3921 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3ie, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3922 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ip, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3923 proto_tree_add_boolean (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ip, tvb, start_offset + 2, 1, tvb_get_guint8 (tvb, start_offset + 2));
3924 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr1if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3925 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr2if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3926 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ccp1if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3927 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ssp1if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3928 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tx1if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3929 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_rc1if, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3930 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_adif, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3931 proto_tree_add_boolean (tmp_tree [ 3], hf_r3_cpuregisters_pir1_pspif, tvb, start_offset + 3, 1, tvb_get_guint8 (tvb, start_offset + 3));
3932 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_ccp2if, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3933 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_tmr3if, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3934 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_hlvdif, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3935 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_bcl1if, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3936 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_eeif, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3937 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_unused5, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3938 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_cmif, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3939 proto_tree_add_boolean (tmp_tree [ 4], hf_r3_cpuregisters_pir2_oscfif, tvb, start_offset + 4, 1, tvb_get_guint8 (tvb, start_offset + 4));
3940 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp3if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3941 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp4if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3942 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp5if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3943 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tmr4if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3944 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tx2if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3945 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_rc2if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3946 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_bcl2if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3947 proto_tree_add_boolean (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ssp2if, tvb, start_offset + 5, 1, tvb_get_guint8 (tvb, start_offset + 5));
3948 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr1ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3949 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr2ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3950 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ccp1ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3951 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ssp1ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3952 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tx1ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3953 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_rc1ie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3954 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_adie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3955 proto_tree_add_boolean (tmp_tree [ 6], hf_r3_cpuregisters_pie1_pspie, tvb, start_offset + 6, 1, tvb_get_guint8 (tvb, start_offset + 6));
3956 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_oscfie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3957 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_cmie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3958 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_unused2, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3959 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_eeie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3960 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_bcl1ie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3961 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_hlvdie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3962 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_tmr3ie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3963 proto_tree_add_boolean (tmp_tree [ 7], hf_r3_cpuregisters_pie2_ccp2ie, tvb, start_offset + 7, 1, tvb_get_guint8 (tvb, start_offset + 7));
3964 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp3ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3965 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp4ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3966 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp5ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3967 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tmr4ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3968 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tx2ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3969 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_rc2ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3970 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_bcl2ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3971 proto_tree_add_boolean (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ssp2ie, tvb, start_offset + 8, 1, tvb_get_guint8 (tvb, start_offset + 8));
3972 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr1ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3973 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr2ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3974 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ccp1ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3975 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ssp1ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3976 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tx1ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3977 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_rc1ip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3978 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_adip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3979 proto_tree_add_boolean (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_pspip, tvb, start_offset + 9, 1, tvb_get_guint8 (tvb, start_offset + 9));
3980 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_ccp2ip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3981 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_tmr3ip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3982 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_hlvdip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3983 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_bcl1ip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3984 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_eeip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3985 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_unused5, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3986 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_cmip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3987 proto_tree_add_boolean (tmp_tree [10], hf_r3_cpuregisters_ipr2_oscfip, tvb, start_offset + 10, 1, tvb_get_guint8 (tvb, start_offset + 10));
3988 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp2ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3989 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp4ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3990 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp5ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3991 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_tmr4ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3992 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_tx2ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3993 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_rc2ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3994 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_bcl2ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3995 proto_tree_add_boolean (tmp_tree [11], hf_r3_cpuregisters_ipr3_ssp2ip, tvb, start_offset + 11, 1, tvb_get_guint8 (tvb, start_offset + 11));
3996 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_bor, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
3997 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_por, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
3998 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_pd, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
3999 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_to, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
4000 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_unused4, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
4001 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_ri, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
4002 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_sboren, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
4003 proto_tree_add_boolean (tmp_tree [12], hf_r3_cpuregisters_rcon_ipen, tvb, start_offset + 12, 1, tvb_get_guint8 (tvb, start_offset + 12));
4004 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_scs0, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4005 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_scs1, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4006 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_iofs, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4007 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_osts, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4008 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf0, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4009 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf1, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4010 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf2, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4011 proto_tree_add_boolean (tmp_tree [13], hf_r3_cpuregisters_osccon_idlen, tvb, start_offset + 13, 1, tvb_get_guint8 (tvb, start_offset + 13));
4012 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9d, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4013 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_oerr, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4014 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_ferr, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4015 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_adden, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4016 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_cren, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4017 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_sren, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4018 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4019 proto_tree_add_boolean (tmp_tree [14], hf_r3_cpuregisters_rcsta_spen, tvb, start_offset + 14, 1, tvb_get_guint8 (tvb, start_offset + 14));
4020 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9d, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4021 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_trmt, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4022 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_brgh, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4023 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_sendb, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4024 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_sync, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4025 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_txen, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4026 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4027 proto_tree_add_boolean (tmp_tree [15], hf_r3_cpuregisters_txsta_csrc, tvb, start_offset + 15, 1, tvb_get_guint8 (tvb, start_offset + 15));
4028 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9d, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4029 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_oerr, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4030 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_ferr, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4031 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_adden, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4032 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_cren, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4033 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_sren, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4034 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4035 proto_tree_add_boolean (tmp_tree [16], hf_r3_cpuregisters_rcsta2_spen, tvb, start_offset + 16, 1, tvb_get_guint8 (tvb, start_offset + 16));
4036 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9d, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4037 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_trmt, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4038 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_brgh, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4039 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_sendb, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4040 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_sync, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4041 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_txen, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4042 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4043 proto_tree_add_boolean (tmp_tree [17], hf_r3_cpuregisters_txsta2_csrc, tvb, start_offset + 17, 1, tvb_get_guint8 (tvb, start_offset + 17));
4044 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_swdten, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4045 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused1, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4046 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused2, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4047 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused3, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4048 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused4, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4049 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused5, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4050 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused6, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4051 proto_tree_add_boolean (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused7, tvb, start_offset + 18, 1, tvb_get_guint8 (tvb, start_offset + 18));
4054 static void dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4056 guint l = tvb_length_remaining (tvb, start_offset);
4059 proto_item *tfg_item = proto_tree_add_text (tree, tvb, start_offset, -1, "Task Flags (%u tasks)", l / 5);
4060 proto_tree *tfg_tree = proto_item_add_subtree (tfg_item, ett_r3taskflags);
4062 for (i = 0; i < l; i += 5)
4064 proto_item *tf_item = proto_tree_add_text (tfg_tree, tvb, start_offset + i, 5, "Task Flags (%2d: 0x%06x)", tvb_get_guint8 (tvb, start_offset + i + 0), tvb_get_letohl (tvb, start_offset + i + 1));
4065 proto_tree *tf_tree = proto_item_add_subtree (tf_item, ett_r3taskflagsentry);
4067 proto_tree_add_item (tf_tree, hf_r3_taskflags_taskid, tvb, start_offset + i + 0, 1, TRUE);
4068 proto_tree_add_item (tf_tree, hf_r3_taskflags_flags, tvb, start_offset + i + 1, 4, TRUE);
4072 static void dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4074 guint l = tvb_length_remaining (tvb, start_offset + 3);
4077 proto_tree_add_item (tree, hf_r3_timerchain_newtick, tvb, start_offset + 0, 2, TRUE);
4078 proto_tree_add_item (tree, hf_r3_timerchain_currentboundary, tvb, start_offset + 2, 1, TRUE);
4080 for (start_offset += 3, i = 0; i < l; i += 12)
4082 proto_item *tc_item = proto_tree_add_text (tree, tvb, start_offset + i, 12, "Timer Chain Entry");
4083 proto_tree *tc_tree = proto_item_add_subtree (tc_item, ett_r3timerchain);
4085 proto_tree_add_item (tc_tree, hf_r3_timerchain_tasktag, tvb, start_offset + i + 0, 1, TRUE);
4086 proto_tree_add_item (tc_tree, hf_r3_timerchain_address, tvb, start_offset + i + 1, 2, TRUE);
4087 proto_tree_add_item (tc_tree, hf_r3_timerchain_reload, tvb, start_offset + i + 3, 2, TRUE);
4088 proto_tree_add_item (tc_tree, hf_r3_timerchain_boundary, tvb, start_offset + i + 5, 1, TRUE);
4089 proto_tree_add_item (tc_tree, hf_r3_timerchain_count, tvb, start_offset + i + 6, 2, TRUE);
4090 proto_tree_add_item (tc_tree, hf_r3_timerchain_flags, tvb, start_offset + i + 8, 4, TRUE);
4094 static void dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4097 guint l = tvb_length_remaining (tvb, start_offset);
4099 for (i = 0; i < l; i += 3)
4101 proto_item *peekpoke_item = proto_tree_add_text (tree, tvb, start_offset + i, 3, "%s", "");
4102 proto_tree *peekpoke_tree = proto_item_add_subtree (peekpoke_item, ett_r3peekpoke);
4104 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, TRUE);
4105 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, start_offset + i + 1, 2, TRUE);
4107 switch (tvb_get_guint8 (tvb, start_offset + i + 0))
4109 case PEEKPOKE_READU8 :
4110 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x = 0x%02x)", tvb_get_letohs (tvb, start_offset + i + 1), tvb_get_guint8 (tvb, start_offset + i + 3));
4111 proto_item_set_len (peekpoke_item, 4);
4112 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, TRUE);
4116 case PEEKPOKE_READU16 :
4117 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x = 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1), tvb_get_letohs (tvb, start_offset + i + 3));
4118 proto_item_set_len (peekpoke_item, 5);
4119 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, TRUE);
4123 case PEEKPOKE_READU24 :
4124 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x = 0x%06x)", tvb_get_letohs (tvb, start_offset + i + 1), tvb_get_letoh24 (tvb, start_offset + i + 3));
4125 proto_item_set_len (peekpoke_item, 6);
4126 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, TRUE);
4130 case PEEKPOKE_READU32 :
4131 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x = 0x%08x)", tvb_get_letohs (tvb, start_offset + i + 1), tvb_get_letohl (tvb, start_offset + i + 3));
4132 proto_item_set_len (peekpoke_item, 7);
4133 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, TRUE);
4137 case PEEKPOKE_READSTRING :
4138 proto_item_append_text (peekpoke_item, "Read (%u Bytes @ 0x%04x)", tvb_get_guint8 (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
4139 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, start_offset + i + 3));
4140 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, TRUE);
4141 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4, tvb_get_guint8 (tvb, start_offset + i + 3), TRUE);
4142 i += tvb_get_guint8 (tvb, start_offset + i + 3) + 1;
4146 DISSECTOR_ASSERT (0);
4151 static void dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4153 proto_item *ls_item = proto_tree_add_text (tree, tvb, start_offset, tvb_length_remaining (tvb, start_offset), "Lock State (0x%06x)", tvb_get_letoh24 (tvb, start_offset));
4154 proto_tree *ls_tree = proto_item_add_subtree (ls_item, ett_r3lockstate);
4155 guint ls = tvb_get_letoh24 (tvb, start_offset);
4157 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_passage, tvb, start_offset, 3, ls);
4158 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_panic, tvb, start_offset, 3, ls);
4159 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_lockout, tvb, start_offset, 3, ls);
4160 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_relock, tvb, start_offset, 3, ls);
4161 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autoopen, tvb, start_offset, 3, ls);
4162 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nextauto, tvb, start_offset, 3, ls);
4163 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_lockstate, tvb, start_offset, 3, ls);
4164 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_wantstate, tvb, start_offset, 3, ls);
4165 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_remote, tvb, start_offset, 3, ls);
4166 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_update, tvb, start_offset, 3, ls);
4167 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_exceptionspresent, tvb, start_offset, 3, ls);
4168 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_exceptionsactive, tvb, start_offset, 3, ls);
4169 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_timezonespresent, tvb, start_offset, 3, ls);
4170 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_timezonesactive, tvb, start_offset, 3, ls);
4171 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autounlockspresent, tvb, start_offset, 3, ls);
4172 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autounlocksactive, tvb, start_offset, 3, ls);
4173 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmspresent, tvb, start_offset, 3, ls);
4174 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmsactive, tvb, start_offset, 3, ls);
4175 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmrelockspresent, tvb, start_offset, 3, ls);
4176 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmreslocksactive, tvb, start_offset, 3, ls);
4177 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nvramprotect, tvb, start_offset, 3, ls);
4178 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nvramchecksum, tvb, start_offset, 3, ls);
4181 static void dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4183 proto_item *cf_item = NULL;
4184 proto_tree *cf_tree= NULL;
4185 guint l = tvb_length_remaining (tvb, start_offset);
4194 octets = tvb_get_guint8 (tvb, start_offset + i);
4197 cf_item = proto_tree_add_text (tree, tvb, start_offset, l, "Capabilities (unknown items)");
4198 expert_add_info_format(pinfo, cf_item, PI_MALFORMED, PI_WARN, "Capabilities could not be decoded because length of 0 encountered");
4204 cf_item = proto_tree_add_text (tree, tvb, start_offset, l, "Capabilities (%u items)", items);
4205 cf_tree = proto_item_add_subtree (cf_item, ett_r3capabilities);
4207 for (i = start_offset; i < l; i += tvb_get_guint8 (tvb, start_offset + i))
4209 proto_item *tmp_item = proto_tree_add_item (cf_tree, hf_r3_capabilities, tvb, start_offset + i, tvb_get_guint8 (tvb, start_offset + i), TRUE);
4210 proto_tree *tmp_tree = proto_item_add_subtree (tmp_item, ett_r3capabilities);
4213 fn = val_to_str_ext_const (tvb_get_guint8 (tvb, start_offset + i + 1), &r3_capabilitiesnames_ext, "[Unknown Field Name]");
4215 proto_item_append_text (tmp_item, " (%s, %u)", fn, tvb_get_letohs (tvb, start_offset + i + 2));
4216 proto_tree_add_item (tmp_tree, hf_r3_capabilities_length, tvb, start_offset + i + 0, 1, TRUE);
4217 proto_tree_add_item (tmp_tree, hf_r3_capabilities_type, tvb, start_offset + i + 1, 1, TRUE);
4218 proto_tree_add_item (tmp_tree, hf_r3_capabilities_value, tvb, start_offset + i + 2, 2, TRUE);
4222 static void dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4224 proto_item *rtc_item = proto_tree_add_text (tree, tvb, start_offset, -1, "M41T81 RTC Registers");
4225 proto_tree *rtc_tree = proto_item_add_subtree (rtc_item, ett_r3m41t81registers);
4226 proto_tree *tmp_tree [20];
4227 guint offset_in_bits = start_offset * 8;
4229 if (tvb_length_remaining (tvb, start_offset) != 20)
4230 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Length of M41T81 RTC register dump not 20 octets");
4233 tmp_tree [ 0] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg00, tvb, start_offset + 0, 1, TRUE), ett_r3m41t81register);
4234 tmp_tree [ 1] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg01, tvb, start_offset + 1, 1, TRUE), ett_r3m41t81register);
4235 tmp_tree [ 2] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg02, tvb, start_offset + 2, 1, TRUE), ett_r3m41t81register);
4236 tmp_tree [ 3] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg03, tvb, start_offset + 3, 1, TRUE), ett_r3m41t81register);
4237 tmp_tree [ 4] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg04, tvb, start_offset + 4, 1, TRUE), ett_r3m41t81register);
4238 tmp_tree [ 5] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg05, tvb, start_offset + 5, 1, TRUE), ett_r3m41t81register);
4239 tmp_tree [ 6] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg06, tvb, start_offset + 6, 1, TRUE), ett_r3m41t81register);
4240 tmp_tree [ 7] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg07, tvb, start_offset + 7, 1, TRUE), ett_r3m41t81register);
4241 tmp_tree [ 8] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg08, tvb, start_offset + 8, 1, TRUE), ett_r3m41t81register);
4242 tmp_tree [ 9] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg09, tvb, start_offset + 9, 1, TRUE), ett_r3m41t81register);
4243 tmp_tree [10] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0a, tvb, start_offset + 10, 1, TRUE), ett_r3m41t81register);
4244 tmp_tree [11] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0b, tvb, start_offset + 11, 1, TRUE), ett_r3m41t81register);
4245 tmp_tree [12] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0c, tvb, start_offset + 12, 1, TRUE), ett_r3m41t81register);
4246 tmp_tree [13] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0d, tvb, start_offset + 13, 1, TRUE), ett_r3m41t81register);
4247 tmp_tree [14] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0e, tvb, start_offset + 14, 1, TRUE), ett_r3m41t81register);
4248 tmp_tree [15] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0f, tvb, start_offset + 15, 1, TRUE), ett_r3m41t81register);
4249 tmp_tree [16] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg10, tvb, start_offset + 16, 1, TRUE), ett_r3m41t81register);
4250 tmp_tree [17] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg11, tvb, start_offset + 17, 1, TRUE), ett_r3m41t81register);
4251 tmp_tree [18] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg12, tvb, start_offset + 18, 1, TRUE), ett_r3m41t81register);
4252 tmp_tree [19] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg13, tvb, start_offset + 19, 1, TRUE), ett_r3m41t81register);
4254 proto_tree_add_bits_item (tmp_tree [ 0], hf_r3_dumpm41t81_reg00_sec1, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4255 proto_tree_add_bits_item (tmp_tree [ 0], hf_r3_dumpm41t81_reg00_sec01, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4256 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_st, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4257 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_10sec, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4258 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_1sec, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4259 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_notused, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4260 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_10min, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4261 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_1min, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4262 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_cbe, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4263 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_cb, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4264 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_10hour, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4265 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_1hour, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4266 proto_tree_add_bits_item (tmp_tree [ 4], hf_r3_dumpm41t81_reg04_notused, tvb, offset_in_bits, 5, TRUE); offset_in_bits += 5;
4267 proto_tree_add_bits_item (tmp_tree [ 4], hf_r3_dumpm41t81_reg04_dow, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4268 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_notused, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4269 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_10day, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4270 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_1day, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4271 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_notused, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4272 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_10month, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4273 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_1month, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4274 proto_tree_add_bits_item (tmp_tree [ 7], hf_r3_dumpm41t81_reg07_10year, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4275 proto_tree_add_bits_item (tmp_tree [ 7], hf_r3_dumpm41t81_reg07_1year, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4276 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_out, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4277 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_ft, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4278 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_s, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4279 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_cal, tvb, offset_in_bits, 5, TRUE); offset_in_bits += 5;
4280 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_notused, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4281 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_bmb, tvb, offset_in_bits, 5, TRUE); offset_in_bits += 5;
4282 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_rb, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4283 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_afe, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4284 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_sqwe, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4285 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_abe, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4286 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_10monthalm, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4287 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_1monthalm, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4288 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_rpt5, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4289 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_rpt4, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4290 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_10dayalm, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4291 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_1dayalm, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4292 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_rpt3, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4293 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_ht, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4294 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_10houralm, tvb, offset_in_bits, 2, TRUE); offset_in_bits += 2;
4295 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_1houralm, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4296 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_rpt2, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4297 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_10minalm, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4298 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_1minalm, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4299 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_rpt1, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4300 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_10secalm, tvb, offset_in_bits, 3, TRUE); offset_in_bits += 3;
4301 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_1secalm, tvb, offset_in_bits, 4, TRUE); offset_in_bits += 4;
4302 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_wdf, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4303 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_af, tvb, offset_in_bits, 1, TRUE); offset_in_bits += 1;
4304 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_notused, tvb, offset_in_bits, 6, TRUE); offset_in_bits += 6;
4305 proto_tree_add_bits_item (tmp_tree [16], hf_r3_dumpm41t81_reg10_notused, tvb, offset_in_bits, 8, TRUE); offset_in_bits += 8;
4306 proto_tree_add_bits_item (tmp_tree [17], hf_r3_dumpm41t81_reg11_notused, tvb, offset_in_bits, 8, TRUE); offset_in_bits += 8;
4307 proto_tree_add_bits_item (tmp_tree [18], hf_r3_dumpm41t81_reg12_notused, tvb, offset_in_bits, 8, TRUE); offset_in_bits += 8;
4308 proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_rs, tvb, offset_in_bits - 8, 4, TRUE); offset_in_bits += 4;
4309 proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_notused, tvb, offset_in_bits - 8, 4, TRUE); offset_in_bits += 4;
4313 static void dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4315 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue, tvb, start_offset + 0, 4, TRUE);
4316 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue_fixup, tvb, start_offset + 4, 4, TRUE);
4319 static void dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4321 proto_item *cksum_item = NULL;
4322 proto_tree *cksum_tree= NULL;
4323 guint32 l = tvb_length_remaining (tvb, start_offset);
4324 guint32 error = FALSE;
4328 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Checksum results data length not modulo 3 == 0");
4331 for (i = start_offset; i < l; i += tvb_get_guint8 (tvb, start_offset + i))
4332 error |= tvb_get_guint8 (tvb, start_offset + i + 2);
4334 cksum_item = proto_tree_add_text (tree, tvb, start_offset, l, "Checksum Results (%s)", error ? "Error" : "No Errors");
4335 cksum_tree = proto_item_add_subtree (cksum_item, ett_r3checksumresults);
4337 for (i = 0; i < l; i += tvb_get_guint8 (tvb, start_offset + i))
4339 proto_item *res_item = proto_tree_add_item (cksum_tree, hf_r3_checksumresults, tvb, start_offset + i, tvb_get_guint8 (tvb, start_offset + i), TRUE);
4340 proto_tree *res_tree = proto_item_add_subtree (res_item, ett_r3checksumresultsfield);
4343 fn = val_to_str_ext_const (tvb_get_guint8 (tvb, start_offset + i + 1), &r3_checksumresultnames_ext, "[Unknown Field Name]");
4345 proto_item_append_text (res_item, " %s (%s)", fn, tvb_get_guint8 (tvb, start_offset + i + 2) ? "Error" : "No Error");
4347 proto_tree_add_item (res_tree, hf_r3_checksumresults_length, tvb, start_offset + i + 0, 1, TRUE);
4348 proto_tree_add_item (res_tree, hf_r3_checksumresults_field, tvb, start_offset + i + 1, 1, TRUE);
4349 proto_tree_add_item (res_tree, hf_r3_checksumresults_state, tvb, start_offset + i + 2, 1, TRUE);
4354 static void dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4356 guint l = tvb_length_remaining (tvb, start_offset + 3);
4359 proto_tree_add_item (tree, hf_r3_mortisestatelog_pointer, tvb, start_offset + 0, 1, TRUE);
4360 proto_tree_add_item (tree, hf_r3_mortisestatelog_mortisetype, tvb, start_offset + 1, 1, TRUE);
4361 proto_tree_add_item (tree, hf_r3_mortisestatelog_waiting, tvb, start_offset + 2, 1, TRUE);
4363 for (start_offset += 3, i = 0; i < l; i += 3)
4365 guint state = tvb_get_guint8 (tvb, start_offset + i + 0);
4366 guint last = tvb_get_guint8 (tvb, start_offset + i + 1);
4367 guint event = tvb_get_guint8 (tvb, start_offset + i + 2);
4368 proto_item *ms_item = proto_tree_add_text (tree, tvb, start_offset + i, 3, "State Log Entry %2d (State=0x%02x, Last=0x%02x, Event=%s (0x%02x))", i / 3, state, last, val_to_str_ext_const (event, &r3_mortiseeventnames_ext, "[Unknown]"), event);
4369 proto_tree *ms_tree = proto_item_add_subtree (ms_item, ett_r3mortisestatelog);
4371 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_state, tvb, start_offset + i + 0, 1, TRUE);
4372 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_last, tvb, start_offset + i + 1, 1, TRUE);
4373 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_event, tvb, start_offset + i + 2, 1, TRUE);
4377 static void dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4379 proto_item *iopins_item = proto_tree_add_text (tree, tvb, start_offset, 1, "Mortise Pin States (0x%02x)", tvb_get_guint8 (tvb, start_offset));
4380 proto_tree *iopins_tree = proto_item_add_subtree (iopins_item, ett_r3iopins);
4382 proto_tree_add_boolean (iopins_tree, hf_r3_mortisepins_s1, tvb, start_offset, 1, tvb_get_guint8 (tvb, start_offset));
4383 proto_tree_add_boolean (iopins_tree, hf_r3_mortisepins_s2, tvb, start_offset, 1, tvb_get_guint8 (tvb, start_offset));
4384 proto_tree_add_boolean (iopins_tree, hf_r3_mortisepins_s3, tvb, start_offset, 1, tvb_get_guint8 (tvb, start_offset));
4385 proto_tree_add_boolean (iopins_tree, hf_r3_mortisepins_s4, tvb, start_offset, 1, tvb_get_guint8 (tvb, start_offset));
4388 static void dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4390 proto_item_append_text (proto_tree_add_item (tree, hf_r3_testkeypad, tvb, 0, 1, TRUE), " ('%c')", tvb_get_guint8 (tvb, 0));
4393 static void dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4395 proto_tree_add_item (tree, hf_r3_testmagcard, tvb, 0, -1, TRUE);
4398 static void dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4400 proto_tree_add_item (tree, hf_r3_testproxcard, tvb, 0, -1, TRUE);
4404 * ***************************************************************************
4406 * This is passed a tvb that contains [length] [CMD_RESPONSE] [responseType_e] [cmdCommand_e]
4408 static void dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4410 proto_tree_add_item (tree, hf_r3_responsetype, tvb, start_offset + 2, 1, TRUE);
4411 proto_tree_add_item (tree, hf_r3_responsetocommand, tvb, start_offset + 3, 1, TRUE);
4415 * This is passed a tvb that contains [length] [CMD_RESPONSE] [RESPONSETYPE_HASDATA] [UPSTREAMCOMMAND_*]
4417 static void dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4419 proto_item *upstreamcommand_item = NULL;
4420 proto_tree *upstreamcommand_tree = NULL;
4421 tvbuff_t *upstreamcommand_tvb;
4422 guint32 commandPacketLen;
4423 const gchar *ct = NULL;
4425 tvb_ensure_bytes_exist (tvb, start_offset, 4);
4426 commandPacketLen = tvb_get_guint8 (tvb, 0);
4427 upstreamcommand_tvb = tvb_new_subset (tvb, 4, commandPacketLen - 4, commandPacketLen - 4);
4429 if (tvb_get_guint8 (tvb, 1) != CMD_RESPONSE)
4430 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Octet 1 not CMD_RESPONSE");
4431 else if (tvb_get_guint8 (tvb, 2) != RESPONSETYPE_HASDATA)
4432 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Octet 2 not RESPONSE_HASDATA");
4433 else if (tvb_get_guint8 (tvb, 3) >= UPSTREAMCOMMAND_LAST)
4434 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST");
4437 ct = val_to_str_ext_const (tvb_get_guint8 (tvb, 3), &r3_upstreamcommandnames_ext, "[Unknown Command Type]");
4439 proto_tree_add_item (tree, hf_r3_responsetype, tvb, 2, 1, TRUE);
4441 upstreamcommand_item = proto_tree_add_text (tree, tvb, 3, -1, "Upstream Command: %s (%u)", ct, tvb_get_guint8 (tvb, 3));
4442 upstreamcommand_tree = proto_item_add_subtree (upstreamcommand_item, ett_r3upstreamcommand);
4444 proto_tree_add_item (upstreamcommand_tree, hf_r3_upstreamcommand, tvb, 3, 1, TRUE);
4446 tvb_ensure_bytes_exist (tvb, start_offset, commandPacketLen - 4);
4448 if (r3upstreamcommand_dissect [tvb_get_guint8 (tvb, 3)].dissector)
4449 (*r3upstreamcommand_dissect [tvb_get_guint8 (tvb, 3)].dissector) (upstreamcommand_tvb, 0, commandPacketLen - 4, pinfo, upstreamcommand_tree);
4454 * ***************************************************************************
4456 * These are passed a tvb that starts with [length] [CMD_RESPONSE] ...
4458 static void dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4460 guint8 responseLen = tvb_get_guint8 (tvb, start_offset + 0);
4461 responseType_e responseType = tvb_get_guint8 (tvb, start_offset + 2);
4462 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset, responseLen, responseLen);
4463 const gchar *rt = NULL;
4465 rt = val_to_str_ext_const (responseType, &r3_responsetypenames_ext, "[Unknown Response Type]");
4467 proto_item_set_text (proto_tree_get_parent (tree), "Response Packet: %s (%u)", rt, responseType);
4468 proto_tree_add_item (tree, hf_r3_responselength, tvb, start_offset + 0, 1, TRUE);
4469 proto_tree_add_item (tree, hf_r3_responsecommand, tvb, start_offset + 1, 1, TRUE);
4471 if (tvb_get_guint8 (tvb, start_offset + 2) >= RESPONSETYPE_LAST)
4472 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST");
4473 else if (r3response_dissect [responseType].dissector)
4474 (*r3response_dissect [responseType].dissector) (payload_tvb, 0, length, pinfo, tree);
4478 * These are passed a tvb that contains [length] [cmdCommand_e] [[data]]
4480 static void dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4482 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4483 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4486 static void dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4488 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4489 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4492 static void dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4494 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4495 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4498 static void dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4500 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4501 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4504 static void dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4506 proto_tree *dt_tree = NULL;
4507 proto_item *dt_item = NULL;
4508 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4509 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4511 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4512 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4514 dt_item = proto_tree_add_text (tree, payload_tvb, 0, -1, "Set Date/Time (%02u/%02u/%02u-%u %02u:%02u:%02u)", tvb_get_guint8 (payload_tvb, 0), tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2), tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4), tvb_get_guint8 (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 6));
4515 dt_tree = proto_item_add_subtree (dt_item, ett_r3setdatetime);
4517 proto_tree_add_item (dt_tree, hf_r3_setdate_year, payload_tvb, 0, 1, TRUE);
4518 proto_tree_add_item (dt_tree, hf_r3_setdate_month, payload_tvb, 1, 1, TRUE);
4519 proto_tree_add_item (dt_tree, hf_r3_setdate_day, payload_tvb, 2, 1, TRUE);
4520 proto_tree_add_item (dt_tree, hf_r3_setdate_dow, payload_tvb, 3, 1, TRUE);
4521 proto_tree_add_item (dt_tree, hf_r3_setdate_hours, payload_tvb, 4, 1, TRUE);
4522 proto_tree_add_item (dt_tree, hf_r3_setdate_minutes, payload_tvb, 5, 1, TRUE);
4523 proto_tree_add_item (dt_tree, hf_r3_setdate_seconds, payload_tvb, 6, 1, TRUE);
4526 static void dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4528 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4529 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4532 static void dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4534 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4535 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4538 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4539 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4541 while (offset < tvb_reported_length (payload_tvb))
4543 proto_item *sc_item = NULL;
4544 proto_tree *sc_tree = NULL;
4545 const gchar *ci = NULL;
4547 ci = val_to_str_ext_const (tvb_get_guint8 (payload_tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
4549 sc_item = proto_tree_add_text (tree, payload_tvb, offset + 0, tvb_get_guint8 (payload_tvb, offset + 0), "Config Field: %s (%u)", ci, tvb_get_guint8 (payload_tvb, offset + 1));
4550 sc_tree = proto_item_add_subtree (sc_item, ett_r3upstreamfield);
4552 proto_tree_add_item (sc_tree, hf_r3_configitemlength, payload_tvb, offset + 0, 1, TRUE);
4553 proto_tree_add_item (sc_tree, hf_r3_configitem, payload_tvb, offset + 1, 1, TRUE);
4555 if (tvb_get_guint8 (payload_tvb, offset + 1) < array_length (configMap))
4557 switch (configMap [tvb_get_guint8 (payload_tvb, offset + 1)].configType)
4559 case CONFIGTYPE_NONE :
4560 proto_tree_add_item (sc_tree, hf_r3_configitemdata, payload_tvb, offset + 2, tvb_get_guint8 (payload_tvb, offset + 0) - 3, TRUE);
4563 case CONFIGTYPE_BOOL :
4564 proto_tree_add_item (sc_tree, hf_r3_configitemdata_bool, payload_tvb, offset + 2, 1, TRUE);
4568 proto_tree_add_item (sc_tree, hf_r3_configitemdata_8, payload_tvb, offset + 2, 1, TRUE);
4571 case CONFIGTYPE_16 :
4572 proto_tree_add_item (sc_tree, hf_r3_configitemdata_16, payload_tvb, offset + 2, 2, TRUE);
4575 case CONFIGTYPE_32 :
4576 proto_tree_add_item (sc_tree, hf_r3_configitemdata_32, payload_tvb, offset + 2, 4, TRUE);
4579 case CONFIGTYPE_STRING :
4580 proto_tree_add_item (sc_tree, hf_r3_configitemdata_string, payload_tvb, offset + 2, tvb_get_guint8 (payload_tvb, offset + 0) - 2, TRUE);
4584 proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2, tvb_get_guint8 (payload_tvb, offset + 0) - 2, "Unknown Field Type");
4589 proto_tree_add_text (sc_tree, payload_tvb, offset + 2, tvb_get_guint8 (payload_tvb, offset + 0) - 2, "[Unknown Field Type]");
4591 offset += tvb_get_guint8 (payload_tvb, offset + 0);
4595 static void dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4597 proto_item *config_item = NULL;
4598 proto_tree *config_tree = NULL;
4599 guint32 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4602 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4603 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4605 config_item = proto_tree_add_item (tree, hf_r3_configitems, tvb, start_offset + 2, cmdLen - 2, TRUE);
4606 config_tree = proto_item_add_subtree (config_item, ett_r3configitem);
4608 for (i = 2; i < cmdLen; i++)
4609 proto_tree_add_item (config_tree, hf_r3_configitem, tvb, start_offset + i, 1, TRUE);
4612 static void dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4614 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4615 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4618 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4619 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4621 while (offset < tvb_reported_length (payload_tvb))
4623 guint32 paramLength = tvb_get_guint8 (payload_tvb, offset + 0);
4624 guint32 paramType = tvb_get_guint8 (payload_tvb, offset + 1);
4625 guint32 dataLength = paramLength - 2;
4626 proto_tree *mu_tree = NULL;
4627 const gchar *auptn = NULL;
4629 auptn = val_to_str_ext_const (paramType, &r3_adduserparamtypenames_ext, "[Unknown Field]");
4631 mu_tree = proto_item_add_subtree (proto_tree_add_none_format (tree, hf_r3_adduserparamtype, payload_tvb, offset + 0, paramLength, "Manage User Field: %s (%u)", auptn, paramType), ett_r3manageuser);
4633 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypelength, payload_tvb, offset + 0, 1, TRUE);
4634 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypetype, payload_tvb, offset + 1, 1, TRUE);
4640 case ADDUSERPARAMTYPE_DISPOSITION :
4641 case ADDUSERPARAMTYPE_ACCESSALWAYS :
4642 case ADDUSERPARAMTYPE_ACCESSMODE :
4643 case ADDUSERPARAMTYPE_CACHED :
4644 case ADDUSERPARAMTYPE_USERTYPE :
4645 case ADDUSERPARAMTYPE_PRIMARYFIELDTYPE :
4646 case ADDUSERPARAMTYPE_AUXFIELDTYPE :
4647 case ADDUSERPARAMTYPE_USECOUNT :
4648 case ADDUSERPARAMTYPE_EXCEPTIONGROUP :
4649 if (dataLength != 1)
4650 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed field -- expected 1 octet");
4652 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, TRUE);
4655 case ADDUSERPARAMTYPE_USERNO :
4656 if (dataLength != 2)
4657 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed field -- expected 2 octets");
4659 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, TRUE);
4662 case ADDUSERPARAMTYPE_PRIMARYFIELD :
4663 case ADDUSERPARAMTYPE_AUXFIELD :
4664 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, TRUE);
4667 case ADDUSERPARAMTYPE_EXPIREON :
4669 proto_item *expireon_item = NULL;
4670 proto_tree *expireon_tree = NULL;
4672 if (dataLength != 3)
4673 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed expiration field -- expected 3 octets");
4676 expireon_item = proto_tree_add_text (mu_tree, payload_tvb, offset, 3, "Expire YY/MM/DD: %02u/%02u/%02u",
4677 tvb_get_guint8 (payload_tvb, offset + 2), tvb_get_guint8 (payload_tvb, offset + 0), tvb_get_guint8 (payload_tvb, offset + 1));
4678 expireon_tree = proto_item_add_subtree (expireon_item, ett_r3expireon);
4680 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, payload_tvb, offset + 0, 1, TRUE);
4681 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, payload_tvb, offset + 1, 1, TRUE);
4682 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, payload_tvb, offset + 2, 1, TRUE);
4687 case ADDUSERPARAMTYPE_TIMEZONE :
4691 proto_item *timezone_item = NULL;
4692 proto_tree *timezone_tree = NULL;
4694 if (dataLength != 4)
4695 expert_add_info_format (pinfo, tree, PI_UNDECODED, PI_WARN, "Malformed timezone field -- expected 4 octets");
4698 tz = tvb_get_letohl (payload_tvb, offset);
4699 timezone_item = proto_tree_add_item (mu_tree, hf_r3_upstreamfieldarray [paramType], payload_tvb, offset, 4, TRUE);
4700 timezone_tree = proto_item_add_subtree (timezone_item, ett_r3timezone);
4702 for (i = 0; i < 32; i++)
4703 proto_tree_add_boolean (timezone_tree, hf_r3_timezonearray [i], payload_tvb, offset, 4, tz);
4709 proto_tree_add_string (mu_tree, hf_r3_upstreamfielderror, payload_tvb, offset, dataLength, "Unknown Field Type");
4713 offset += dataLength;
4717 static void dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4719 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4720 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4722 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4723 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4724 proto_tree_add_item (tree, hf_r3_deleteusers, payload_tvb, 0, 1, TRUE);
4727 static void dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4729 proto_item *startdate_item = NULL;
4730 proto_tree *startdate_tree = NULL;
4731 proto_item *enddate_item = NULL;
4732 proto_tree *enddate_tree = NULL;
4733 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4734 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4736 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4737 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4738 proto_tree_add_item (tree, hf_r3_defineexception_number, payload_tvb, 0, 1, TRUE);
4740 startdate_item = proto_tree_add_text (tree, payload_tvb, 1, 4, "Start MM/DD HH:MM (%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2), tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4));
4741 startdate_tree = proto_item_add_subtree (startdate_item, ett_r3defineexceptionstartdate);
4742 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_month, payload_tvb, 1, 1, TRUE);
4743 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_day, payload_tvb, 2, 1, TRUE);
4744 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_hours, payload_tvb, 3, 1, TRUE);
4745 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_minutes, payload_tvb, 4, 1, TRUE);
4747 enddate_item = proto_tree_add_text (tree, payload_tvb, 5, 4, "End MM/DD HH:MM (%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 6), tvb_get_guint8 (payload_tvb, 7), tvb_get_guint8 (payload_tvb, 8));
4748 enddate_tree = proto_item_add_subtree (enddate_item, ett_r3defineexceptionenddate);
4749 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_month, payload_tvb, 5, 1, TRUE);
4750 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_day, payload_tvb, 6, 1, TRUE);
4751 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_hours, payload_tvb, 7, 1, TRUE);
4752 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_minutes, payload_tvb, 8, 1, TRUE);
4755 static void dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4757 proto_item *bits_item = NULL;
4758 proto_tree *bits_tree = NULL;
4759 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4760 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4764 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4765 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4766 proto_tree_add_item (tree, hf_r3_defineexceptiongroup_number, payload_tvb, 0, 1, TRUE);
4768 bits_item = proto_tree_add_text (tree, payload_tvb, 1, -1, "Exception Group Bit Field");
4769 bits_tree = proto_item_add_subtree (bits_item, ett_r3defineexceptiongroupbits);
4771 for (i = 1; i < tvb_reported_length (payload_tvb); i++)
4774 guint8 byte = tvb_get_guint8 (payload_tvb, i);
4776 for (j = 0; j < 8; j++)
4777 proto_tree_add_none_format (bits_tree, hf_r3_defineexceptiongroup_bits, payload_tvb, i, 1, "Exception Group %2d: %s", bit++, (byte & (1 << j)) ? "Enabled" : "Disabled");
4781 static void dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4783 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4784 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4788 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4789 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4790 proto_tree_add_item (tree, hf_r3_definecalendar_number, payload_tvb, 0, 1, TRUE);
4792 for (i = 0; i < 12; i++)
4794 guint32 daymap = tvb_get_letohl (payload_tvb, (i * 4) + 1);
4795 proto_item *calendar_item = proto_tree_add_text (tree, payload_tvb, (i * 4) + 1, 4, "Calendar Bit Field - %s (0x%08x)", (mn = val_to_str_ext_const (i + 1, &r3_monthnames_ext, "[Unknown Month]")), daymap);
4796 proto_tree *calendar_tree = proto_item_add_subtree (calendar_item, ett_r3definecalendarmonth [i + 1]);
4799 for (j = 0; j < 31; j++)
4800 proto_tree_add_none_format (calendar_tree, hf_r3_definecalendar_bits, payload_tvb, (i * 4) + 1, 4, "%s Of %s: %s", val_to_str_ext_const (j + 1, &r3_monthdaynames_ext, "[Unknown Day]"), mn, (daymap & (1 << j)) ? "Enabled" : "Disabled");
4804 static void dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4806 proto_item *starttime_item = NULL;
4807 proto_tree *starttime_tree = NULL;
4808 proto_item *endtime_item = NULL;
4809 proto_tree *endtime_tree = NULL;
4810 proto_item *daymap_item = NULL;
4811 proto_tree *daymap_tree = NULL;
4812 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4813 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4817 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4818 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4819 proto_tree_add_item (tree, hf_r3_definetimezone_number, payload_tvb, 0, 1, TRUE);
4821 starttime_item = proto_tree_add_text (tree, payload_tvb, 1, 2, "Start HH:MM (%02u:%02u)", tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2));
4822 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3definetimezonestarttime);
4823 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_hours, payload_tvb, 1, 1, TRUE);
4824 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_minutes, payload_tvb, 2, 1, TRUE);
4826 endtime_item = proto_tree_add_text (tree, payload_tvb, 3, 2, "End HH:MM (%02u:%02u)", tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4));
4827 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3definetimezoneendtime);
4828 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_hours, payload_tvb, 3, 1, TRUE);
4829 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_minutes, payload_tvb, 4, 1, TRUE);
4831 daymap_item = proto_tree_add_text (tree, payload_tvb, 5, 1, "Day Map (0x%02x)", tvb_get_guint8 (payload_tvb, 5));
4832 daymap_tree = proto_item_add_subtree (daymap_item, ett_r3definetimezonedaymap);
4834 for (i = 0; i < 7; i++)
4835 proto_tree_add_boolean (daymap_tree, hf_r3_definetimezone_daymap [i], payload_tvb, 5, 1, tvb_get_guint8 (payload_tvb, 5));
4837 proto_tree_add_item (tree, hf_r3_definetimezone_exceptiongroup, payload_tvb, 6, 1, TRUE);
4838 proto_tree_add_uint (tree, hf_r3_definetimezone_mode, payload_tvb, 7, 1, (tzmode = tvb_get_guint8 (payload_tvb, 7)) & 0x0f);
4839 proto_tree_add_none_format (tree, hf_r3_definetimezone_calendar, payload_tvb, 7, 1, "Access Always: %s", (tzmode & 0x10) ? "True" : "False");
4842 static void dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4844 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4845 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4847 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4848 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4849 proto_tree_add_item (tree, hf_r3_rmtauthretry_sequence, payload_tvb, 0, 2, TRUE);
4850 proto_tree_add_item (tree, hf_r3_rmtauthretry_retry, payload_tvb, 2, 1, TRUE);
4853 static void dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4855 proto_item *filter_item = NULL;
4856 proto_tree *filter_tree = NULL;
4857 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4858 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4861 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4862 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4863 proto_tree_add_item (tree, hf_r3_filter_type, payload_tvb, 1, 1, TRUE);
4865 filter_item = proto_tree_add_text (tree, payload_tvb, 2, -1, "Filters (%u specified)", tvb_get_guint8 (payload_tvb, 0));
4866 filter_tree = proto_item_add_subtree (filter_item, ett_r3filters);
4868 for (i = 0; i < tvb_get_guint8 (payload_tvb, 0); i++)
4869 proto_tree_add_item (filter_tree, hf_r3_filter_list, payload_tvb, i + 2, 1, TRUE);
4872 static void dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4874 proto_item *alarm_item = NULL;
4875 proto_tree *alarm_tree = NULL;
4876 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4877 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4881 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4882 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4884 alarm_item = proto_tree_add_text (tree, payload_tvb, 0, -1, "Alarm List (0 items)");
4885 alarm_tree = proto_item_add_subtree (alarm_item, ett_r3alarmlist);
4887 while (offset < tvb_reported_length (payload_tvb))
4889 proto_item *alarmcfg_item = NULL;
4890 proto_tree *alarmcfg_tree = NULL;
4894 if (!(ai = match_strval_ext (tvb_get_guint8 (payload_tvb, offset + 1), &r3_alarmidnames_ext)))
4896 ai = "[Unknown Alarm ID]";
4900 as = (tvb_get_guint8 (payload_tvb, offset + 2) & 0xfe) ? "Error" : (tvb_get_guint8 (payload_tvb, offset + 2) & 0x01) ? "Enabled" : "Disabled";
4902 alarmcfg_item = proto_tree_add_text (alarm_tree, payload_tvb, offset, tvb_get_guint8 (payload_tvb, offset), "Alarm Item (%s, %s)", ai, as);
4903 alarmcfg_tree = proto_item_add_subtree (alarmcfg_item, ett_r3alarmcfg);
4905 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_length, payload_tvb, offset + 0, 1, TRUE);
4906 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_id, payload_tvb, offset + 1, 1, TRUE);
4907 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_state, payload_tvb, offset + 2, 1, TRUE);
4910 offset += tvb_get_guint8 (payload_tvb, offset);
4914 proto_item_set_text (alarm_item, "Alarm List (%d items)", alarms);
4917 static void dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4919 proto_item *starttime_item = NULL;
4920 proto_tree *starttime_tree = NULL;
4921 proto_item *endtime_item = NULL;
4922 proto_tree *endtime_tree = NULL;
4923 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4924 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4926 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4927 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4929 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5, "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 0), tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2), tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4));
4930 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3eventlogdumpstarttime);
4931 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_year, payload_tvb, 0, 1, TRUE);
4932 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_month, payload_tvb, 1, 1, TRUE);
4933 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_day, payload_tvb, 2, 1, TRUE);
4934 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_hours, payload_tvb, 3, 1, TRUE);
4935 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_minutes, payload_tvb, 4, 1, TRUE);
4937 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5, "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 6), tvb_get_guint8 (payload_tvb, 7), tvb_get_guint8 (payload_tvb, 8), tvb_get_guint8 (payload_tvb, 9));
4938 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3eventlogdumpendtime);
4939 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_year, payload_tvb, 5, 1, TRUE);
4940 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_month, payload_tvb, 6, 1, TRUE);
4941 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_day, payload_tvb, 7, 1, TRUE);
4942 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_hours, payload_tvb, 8, 1, TRUE);
4943 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_minutes, payload_tvb, 9, 1, TRUE);
4945 proto_tree_add_item (tree, hf_r3_eventlogdump_user, payload_tvb, 10, 2, TRUE);
4948 static void dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4950 proto_item *starttime_item = NULL;
4951 proto_tree *starttime_tree = NULL;
4952 proto_item *endtime_item = NULL;
4953 proto_tree *endtime_tree = NULL;
4954 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4955 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4957 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4958 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4960 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5, "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 0), tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2), tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4));
4961 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3declinedlogdumpstarttime);
4962 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_year, payload_tvb, 0, 1, TRUE);
4963 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_month, payload_tvb, 1, 1, TRUE);
4964 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_day, payload_tvb, 2, 1, TRUE);
4965 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_hours, payload_tvb, 3, 1, TRUE);
4966 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_minutes, payload_tvb, 4, 1, TRUE);
4968 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5, "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 6), tvb_get_guint8 (payload_tvb, 7), tvb_get_guint8 (payload_tvb, 8), tvb_get_guint8 (payload_tvb, 9));
4969 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3declinedlogdumpendtime);
4970 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_year, payload_tvb, 5, 1, TRUE);
4971 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_month, payload_tvb, 6, 1, TRUE);
4972 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_day, payload_tvb, 7, 1, TRUE);
4973 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_hours, payload_tvb, 8, 1, TRUE);
4974 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_minutes, payload_tvb, 9, 1, TRUE);
4977 static void dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4979 proto_item *starttime_item = NULL;
4980 proto_tree *starttime_tree = NULL;
4981 proto_item *endtime_item = NULL;
4982 proto_tree *endtime_tree = NULL;
4983 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
4984 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
4986 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
4987 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
4989 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5, "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 0), tvb_get_guint8 (payload_tvb, 1), tvb_get_guint8 (payload_tvb, 2), tvb_get_guint8 (payload_tvb, 3), tvb_get_guint8 (payload_tvb, 4));
4990 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3alarmlogdumpstarttime);
4991 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_year, payload_tvb, 0, 1, TRUE);
4992 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_month, payload_tvb, 1, 1, TRUE);
4993 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_day, payload_tvb, 2, 1, TRUE);
4994 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_hours, payload_tvb, 3, 1, TRUE);
4995 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_minutes, payload_tvb, 4, 1, TRUE);
4997 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5, "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)", tvb_get_guint8 (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 6), tvb_get_guint8 (payload_tvb, 7), tvb_get_guint8 (payload_tvb, 8), tvb_get_guint8 (payload_tvb, 9));
4998 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3alarmlogdumpendtime);
4999 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_year, payload_tvb, 5, 1, TRUE);
5000 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_month, payload_tvb, 6, 1, TRUE);
5001 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_day, payload_tvb, 7, 1, TRUE);
5002 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_hours, payload_tvb, 8, 1, TRUE);
5003 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_minutes, payload_tvb, 9, 1, TRUE);
5006 static void dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5008 proto_item *dlfw_item = NULL;
5009 proto_tree *dlfw_tree = NULL;
5010 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5011 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5012 guint32 packetCRC = 0;
5013 guint32 calculatedCRC = 0;
5015 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5016 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5018 dlfw_item = proto_tree_add_text (tree, payload_tvb, 0, -1, "Download Record (Record #%u, ", tvb_get_letohs (payload_tvb, 2));
5019 dlfw_tree = proto_item_add_subtree (dlfw_item, ett_r3downloadfirmware);
5021 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_length, payload_tvb, 0, 2, TRUE);
5022 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_record, payload_tvb, 2, 2, TRUE);
5023 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_action, payload_tvb, 4, 1, TRUE);
5025 switch (tvb_get_guint8 (payload_tvb, 4))
5027 case DOWNLOADFIRMWARE_START :
5028 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_START)");
5029 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_timeout, payload_tvb, 5, 1, TRUE);
5030 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_nvram, payload_tvb, 6, 1, TRUE);
5033 case DOWNLOADFIRMWARE_DATA :
5034 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_DATA, Address 0x%08x, %u Bytes)", tvb_get_letohl (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 9));
5035 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_address, payload_tvb, 5, 4, TRUE);
5036 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_bytes, payload_tvb, 9, 1, TRUE);
5037 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_data, payload_tvb, 10, tvb_get_guint8 (payload_tvb, 9), TRUE);
5040 case DOWNLOADFIRMWARE_COMPLETE :
5041 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_COMPLETE)");
5044 case DOWNLOADFIRMWARE_ABORT :
5045 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_ABORT)");
5048 case DOWNLOADFIRMWARE_RESET :
5049 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_RESET)");
5053 DISSECTOR_ASSERT (0);
5056 packetCRC = tvb_get_letohs (payload_tvb, tvb_reported_length (payload_tvb) - 2);
5058 if ((calculatedCRC = utilCrcCalculate (tvb_get_ptr (payload_tvb, 0, tvb_reported_length (payload_tvb) - 2), tvb_reported_length (payload_tvb) - 2, 0x0000)) == packetCRC)
5059 proto_tree_add_uint_format (dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb, tvb_reported_length (payload_tvb) - 2, 2, packetCRC, "CRC: 0x%04x (correct)", packetCRC);
5062 proto_item *tmp_item;
5064 proto_tree_add_uint_format (dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb, tvb_reported_length (payload_tvb) - 2, 2, packetCRC, "CRC: 0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
5065 tmp_item = proto_tree_add_boolean (dlfw_tree, hf_r3_firmwaredownload_crc_bad, payload_tvb, tvb_reported_length (payload_tvb) - 2, 2, TRUE);
5066 PROTO_ITEM_SET_GENERATED (tmp_item);
5070 static void dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5072 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5073 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5075 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5076 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5077 proto_tree_add_item (tree, hf_r3_commanddata, payload_tvb, 0, -1, TRUE);
5078 DISSECTOR_ASSERT (0); /* ### Need nice warning here */
5081 static void dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5083 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5084 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5086 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5087 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5088 proto_tree_add_item (tree, hf_r3_powertableselection, payload_tvb, 0, 1, TRUE);
5091 static void dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5093 proto_item *nvram_item = NULL;
5094 proto_tree *nvram_tree = NULL;
5095 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5096 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5097 guint32 nvramclearoptions = tvb_get_letohs (payload_tvb, 0);
5100 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5101 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5103 nvram_item = proto_tree_add_text (tree, payload_tvb, 0, 2, "NVRAM Clean Options (0x%04x)", nvramclearoptions);
5104 nvram_tree = proto_item_add_subtree (nvram_item, ett_r3clearnvram);
5106 for (i = 0; i < 16; i++)
5107 proto_tree_add_boolean (nvram_tree, hf_r3_nvramclearoptions [i], payload_tvb, 0, 2, nvramclearoptions);
5110 static void dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5112 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5113 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5115 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5116 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5117 proto_tree_add_item (tree, hf_r3_dpac_action, payload_tvb, 0, 1, TRUE);
5118 proto_tree_add_item (tree, hf_r3_dpac_waittime, payload_tvb, 1, 2, TRUE);
5119 proto_tree_add_item (tree, hf_r3_dpac_command, payload_tvb, 3, -1, TRUE);
5122 static void dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5124 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5125 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5128 static void dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5130 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5131 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5134 static void dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5136 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5137 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5139 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5140 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5141 proto_tree_add_item (tree, hf_r3_writeeventlog_user, payload_tvb, 0, 2, TRUE);
5142 proto_tree_add_item (tree, hf_r3_writeeventlog_event, payload_tvb, 2, 1, TRUE);
5145 static void dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5147 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5148 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5149 mfgCommandFlag = TRUE;
5152 static void dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5154 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5155 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5158 static void dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5160 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, TRUE);
5161 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, TRUE);
5165 * ***************************************************************************
5167 static void dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5169 tvbuff_t *sn_tvb = tvb_new_subset (tvb, start_offset + 2, 16, 16);
5171 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5172 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5173 dissect_serialnumber (sn_tvb, 0, length, pinfo, tree, hf_r3_mfgsetserialnumber);
5176 static void dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5178 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5179 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5180 proto_tree_add_item (tree, hf_r3_mfgsetcryptkey, tvb, start_offset + 2, -1, TRUE);
5183 static void dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5185 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5186 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5187 proto_tree_add_item (tree, hf_r3_mfgdumpnvram, tvb, start_offset + 2, 1, TRUE);
5190 static void dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5192 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5193 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5196 static void dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5198 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5199 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5200 proto_tree_add_item (tree, hf_r3_mfgremoteunlock, tvb, start_offset + 2, 1, TRUE);
5203 static void dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5205 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5206 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5209 static void dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5211 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5212 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5215 static void dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5217 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5218 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5221 static void dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5223 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5224 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5227 static void dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5229 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5230 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5233 static void dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5235 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5236 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5239 static void dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5241 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5242 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5245 static void dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5250 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5251 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5254 l = tvb_length_remaining (tvb, start_offset);
5256 for (i = 0; i < l; i += tvb_get_guint8 (tvb, start_offset + i))
5258 proto_item *force_item = proto_tree_add_text (tree, tvb, start_offset + i, tvb_get_guint8 (tvb, start_offset + i), "Force Option %s (%u)", val_to_str_ext_const (tvb_get_guint8 (tvb, start_offset + i + 1), &r3_forceitemnames_ext, "[Unknown]"), tvb_get_guint8 (tvb, start_offset + i + 1));
5259 proto_tree *force_tree = proto_item_add_subtree (force_item, ett_r3forceoptions);
5261 proto_tree_add_item (force_tree, hf_r3_forceoptions_length, tvb, start_offset + i + 0, 1, TRUE);
5262 proto_tree_add_item (force_tree, hf_r3_forceoptions_item, tvb, start_offset + i + 1, 1, TRUE);
5264 switch (tvb_get_guint8 (tvb, start_offset + i) - 2)
5266 case 1 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_8, tvb, start_offset + i + 2, 1, TRUE); break;
5267 case 2 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_16, tvb, start_offset + i + 2, 2, TRUE); break;
5268 case 3 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_24, tvb, start_offset + i + 2, 3, TRUE); break;
5269 case 4 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_32, tvb, start_offset + i + 2, 4, TRUE); break;
5270 default : DISSECTOR_ASSERT (0);
5275 static void dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5277 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5278 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5281 static void dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5283 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5284 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5287 static void dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5289 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5290 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5293 static void dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5295 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5296 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5299 static void dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5301 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5302 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5305 static void dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5307 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5308 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5311 static void dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5316 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5317 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5320 l = tvb_length_remaining (tvb, start_offset);
5322 for (i = 0; i < l; i += 3)
5324 proto_item *peekpoke_item = proto_tree_add_text (tree, tvb, start_offset + i, 3, "%s", "");
5325 proto_tree *peekpoke_tree = proto_item_add_subtree (peekpoke_item, ett_r3peekpoke);
5327 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, TRUE);
5328 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, start_offset + i + 1, 2, TRUE);
5330 switch (tvb_get_guint8 (tvb, start_offset + i + 0))
5332 case PEEKPOKE_READU8 :
5333 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
5336 case PEEKPOKE_READU16 :
5337 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
5340 case PEEKPOKE_READU24 :
5341 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
5344 case PEEKPOKE_READU32 :
5345 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
5348 case PEEKPOKE_READSTRING :
5349 proto_item_append_text (peekpoke_item, "Read (%d Bytes @ 0x%04x)", tvb_get_guint8 (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5350 proto_item_set_len (peekpoke_item, 4);
5351 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, TRUE);
5355 case PEEKPOKE_WRITEU8 :
5356 proto_item_append_text (peekpoke_item, "Write (8 Bits: 0x%02x @ 0x%04x)", tvb_get_guint8 (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5357 proto_item_set_len (peekpoke_item, 4);
5358 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, TRUE);
5362 case PEEKPOKE_WRITEU16 :
5363 proto_item_append_text (peekpoke_item, "Write (16 Bits: 0x%04x @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5364 proto_item_set_len (peekpoke_item, 5);
5365 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, TRUE);
5369 case PEEKPOKE_WRITEU24 :
5370 proto_item_append_text (peekpoke_item, "Write (24 Bits: 0x%06x @ 0x%04x)", tvb_get_letoh24 (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5371 proto_item_set_len (peekpoke_item, 6);
5372 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, TRUE);
5376 case PEEKPOKE_WRITEU32 :
5377 proto_item_append_text (peekpoke_item, "Write (32 Bits: 0x%08x @ 0x%04x)", tvb_get_letohl (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5378 proto_item_set_len (peekpoke_item, 7);
5379 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, TRUE);
5383 case PEEKPOKE_WRITESTRING :
5384 proto_item_append_text (peekpoke_item, "Write (%d Bytes @ 0x%04x)", tvb_get_guint8 (tvb, start_offset + i + 3), tvb_get_letohs (tvb, start_offset + i + 1));
5385 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, start_offset + i + 3));
5386 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, TRUE);
5387 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4, tvb_get_guint8 (tvb, start_offset + i + 3), TRUE);
5388 i += tvb_get_guint8 (tvb, start_offset + i + 3) + 1;
5392 DISSECTOR_ASSERT (0);
5397 static void dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5399 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5400 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5403 static void dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5405 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5406 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5409 static void dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5411 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5412 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5415 static void dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5417 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5418 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5421 static void dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5423 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5424 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5427 static void dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5429 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5430 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5433 static void dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5435 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5436 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5439 static void dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5441 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5442 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5445 static void dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5447 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5448 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5451 static void dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5453 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5454 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5457 static void dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5459 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5460 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5461 proto_tree_add_item (tree, hf_r3_mfgtestpreserve, tvb, start_offset + 2, 1, TRUE);
5464 static void dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5466 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5467 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5470 static void dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5472 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5473 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5476 static void dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5478 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5479 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5482 static void dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5484 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, TRUE);
5485 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, TRUE);
5489 * ***************************************************************************
5491 * If no tree, don't bother parsing anything else since it doesn't affect return results
5493 static gint dissect_r3_command (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree)
5497 proto_item *cmd_item = NULL;
5498 proto_tree *cmd_tree = NULL;
5499 const gchar *cn = NULL;
5500 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5501 guint8 cmd = tvb_get_guint8 (tvb, start_offset + 1);
5503 tvb_ensure_bytes_exist (tvb, start_offset, 2);
5505 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5506 cmd = tvb_get_guint8 (tvb, start_offset + 1);
5508 if (!mfgCommandFlag)
5509 cn = val_to_str_ext_const (cmd, &r3_cmdnames_ext, "[Unknown Command]");
5511 cn = val_to_str_ext_const (cmd, &r3_cmdmfgnames_ext, "[Unknown Mfg Command]");
5513 cmd_item = proto_tree_add_text (r3_tree, tvb, start_offset, cmdLen, "Command Packet: %s (%d)", cn, cmd);
5514 cmd_tree = proto_item_add_subtree (cmd_item, ett_r3cmd);
5518 if (!mfgCommandFlag)
5520 if (cmd >= CMD_LAST)
5521 expert_add_info_format (pinfo, cmd_tree, PI_UNDECODED, PI_WARN, "Unknown command value");
5522 else if (r3command_dissect [cmd].dissector)
5523 (*r3command_dissect [cmd].dissector) (tvb, start_offset, length, pinfo, cmd_tree);
5527 mfgCommandFlag = FALSE;
5529 if (cmd >= CMDMFG_LAST)
5530 expert_add_info_format (pinfo, cmd_tree, PI_UNDECODED, PI_WARN, "Unknown manufacturing command value");
5531 else if (r3commandmfg_dissect [cmd].dissector)
5532 (*r3commandmfg_dissect [cmd].dissector) (tvb, start_offset, length, pinfo, cmd_tree);
5537 return tvb_get_guint8 (tvb, start_offset);
5541 * ***************************************************************************
5543 * Dissect a single packet, return bytes consumed
5546 * >0 = number of bytes consumed
5547 * 0 = packet is just the right length
5548 * <0 = need more bytes
5550 static gint dissect_r3_packet (tvbuff_t *tvb, guint start_offset, packet_info *pinfo, proto_tree *r3_tree)
5554 gint available = tvb_length_remaining (tvb, start_offset);
5556 if (!(tvb_strneql (tvb, start_offset, "~~~ds", 5)))
5559 proto_tree_add_item (r3_tree, hf_r3_tildex3ds, tvb, start_offset + 0, -1, TRUE);
5561 offset = start_offset + 5;
5568 return available - 4;
5571 packetLen = tvb_get_guint8 (tvb, start_offset + 3) + 1;
5573 if (packetLen > available)
5574 return available - packetLen;
5580 * Show basic header stuff
5584 proto_item *header_item = proto_tree_add_item (r3_tree, hf_r3_header, tvb, start_offset + 0, 5, TRUE);
5585 proto_tree *header_tree = proto_item_add_subtree (header_item, ett_r3header);
5587 proto_tree_add_item (header_tree, hf_r3_sigil, tvb, start_offset + 0, 1, TRUE);
5588 proto_tree_add_item (header_tree, hf_r3_address, tvb, start_offset + 1, 1, TRUE);
5589 proto_tree_add_item (header_tree, hf_r3_packetnumber, tvb, start_offset + 2, 1, TRUE);
5590 proto_tree_add_item (header_tree, hf_r3_packetlength, tvb, start_offset + 3, 1, TRUE);
5591 proto_tree_add_item (header_tree, hf_r3_encryption, tvb, start_offset + 4, 1, TRUE);
5595 * If the packet has enough data, try to decode it
5599 proto_item *payload_item = NULL;
5600 proto_tree *payload_tree = NULL;
5601 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 5, packetLen - 7, packetLen - 7);
5605 payload_item = proto_tree_add_item (r3_tree, hf_r3_payload, payload_tvb, 0, -1, TRUE);
5606 payload_tree = proto_item_add_subtree (payload_item, ett_r3payload);
5609 while (offset < tvb_reported_length (payload_tvb))
5611 octConsumed = dissect_r3_command (payload_tvb, offset, 0, pinfo, payload_tree);
5614 expert_add_info_format (pinfo, payload_tree, PI_MALFORMED, PI_WARN, "Command length equal to 0; payload could be partially decoded");
5615 offset = tvb_reported_length (payload_tvb);
5618 offset += octConsumed;
5622 offset += start_offset;
5625 * Show the CRC and XOR status
5629 proto_item *tail_item = proto_tree_add_item (r3_tree, hf_r3_tail, tvb, offset + 5, 3, TRUE);
5630 proto_tree *tail_tree = proto_item_add_subtree (tail_item, ett_r3tail);
5631 guint32 packetCRC = tvb_get_letohs (tvb, offset + 5);
5632 guint32 packetXor = tvb_get_guint8 (tvb, offset + 7);
5633 guint32 calculatedCRC = 0;
5634 guint32 calculatedXor = 0;
5636 if ((calculatedCRC = utilCrcCalculate (tvb_get_ptr (tvb, start_offset + 1, packetLen - 3), packetLen - 3, 0x0000)) == packetCRC)
5637 proto_tree_add_uint_format (tail_tree, hf_r3_crc, tvb, offset + 5, 2, packetCRC, "CRC: 0x%04x (correct)", packetCRC);
5640 proto_item *tmp_item;
5642 proto_tree_add_uint_format (tail_tree, hf_r3_crc, tvb, offset + 5, 2, packetCRC, "CRC: 0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
5643 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_crc_bad, tvb, offset + 5, 2, TRUE);
5644 PROTO_ITEM_SET_GENERATED (tmp_item);
5647 if ((calculatedXor = (packetLen ^ 0xff)) == packetXor)
5648 proto_tree_add_uint_format (tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor, "XOR: 0x%02x (correct)", packetXor);
5651 proto_item *tmp_item;
5653 proto_tree_add_uint_format (tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor, "XOR: 0x%02x (incorrect, should be 0x%02x)", packetXor, packetLen ^ 0xff);
5654 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_xor_bad, tvb, offset + 7, 1, TRUE);
5655 PROTO_ITEM_SET_GENERATED (tmp_item);
5662 return offset - start_offset;
5666 * ***************************************************************************
5668 * Main dissector entry points
5670 static void dissect_r3_message (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5672 proto_item *r3_item = NULL;
5673 proto_tree *r3_tree = NULL;
5676 col_set_str (pinfo->cinfo, COL_PROTOCOL, "R3");
5677 col_clear (pinfo->cinfo, COL_INFO);
5681 r3_item = proto_tree_add_item (tree, proto_r3, tvb, 0, -1, TRUE);
5682 r3_tree = proto_item_add_subtree (r3_item, ett_r3);
5685 while (offset < tvb_reported_length (tvb))
5687 gint res = dissect_r3_packet (tvb, offset, pinfo, r3_tree);
5692 proto_item_set_len (r3_item, offset);
5703 static guint get_r3_message_len (packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
5705 return (guint) tvb_get_guint8 (tvb, offset + 3) + 1;
5708 static void dissect_r3 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5710 tcp_dissect_pdus (tvb, pinfo, tree, TRUE, 4, get_r3_message_len, dissect_r3_message);
5714 * ***************************************************************************
5716 void proto_register_r3 (void)
5718 proto_r3 = proto_register_protocol ("Assa Abloy R3", "R3", "r3");
5719 register_dissector ("r3", dissect_r3, proto_r3);
5720 proto_register_field_array (proto_r3, hf, array_length (hf));
5721 proto_register_subtree_array (ett, array_length (ett));
5724 void proto_reg_handoff_r3 (void)
5726 dissector_handle_t r3_handle = find_dissector ("r3");
5727 dissector_add_uint ("tcp.port", 2571, r3_handle);
5728 dissector_add_uint ("tcp.port", 8023, r3_handle);
5738 * indent-tabs-mode: nil
5741 * vim: set tabstop=2 softtabstop=2 shiftwidth=2 expandtab: