HACK: pinfo->private_data points to smb_info again
[wireshark-wip.git] / epan / dissectors / packet-assa_r3.c
blob758955f6c6a3a2b9bb3b60c88e5e6fde0f08d1f1
1 /* packet-assa_r3.c
2 * Routines for R3 packet dissection
3 * Copyright (c) 2009 Assa Abloy USA <jcwren[AT]assaabloyusa.com>
5 * R3 is an electronic lock management protocol for configuring operational
6 * parameters, adding/removing/altering users, dumping log files, etc.
8 * $Id$
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29 #include "config.h"
31 #include <glib.h>
33 #include <epan/packet.h>
34 #include <epan/expert.h>
35 #include <epan/dissectors/packet-tcp.h>
37 void proto_register_r3(void);
38 void proto_reg_handoff_r3(void);
40 #if 0
41 /* */
42 /* System limits */
43 /* */
44 #define MAX_USERS 2400
45 #define MAX_TIMEZONES 32
46 #define MAX_EXCEPTIONS 64
47 #define MAX_EXCEPTIONGROUPS 64
48 #define MAX_EVENTENTRIES 10000
49 #define MAX_DECLINEDENTRIES 500
50 #define MAX_ALARMENTRIES 200
51 #endif
54 * Enumerations
56 typedef enum
58 ACCESSMODE_NONE = 0, /* 0 - No access mode (not used, not legal, I think) */
59 ACCESSMODE_PRIMARYONLY, /* 1 - Primary only */
60 ACCESSMODE_PRIMARYORAUX, /* 2 - Primary or aux field */
61 ACCESSMODE_PRIMARYANDAUX, /* 3 - Primary and aux field */
62 ACCESSMODE_PRIMARYTHENAUX, /* 4 - Primary required first, then aux */
63 ACCESSMODE_LAST /* 5 - Dummy, for range checking */
65 accessMode_e;
67 typedef enum
69 ADDUSERPARAMTYPE_DISPOSITION = 0, /* 0 - What we're supposed to do (add, delete, etc) */
70 ADDUSERPARAMTYPE_USERNO, /* 1 - User to manage (user number, U16) */
71 ADDUSERPARAMTYPE_ACCESSALWAYS, /* 2 - Access always (boolean) */
72 ADDUSERPARAMTYPE_ACCESSMODE, /* 3 - Access type (accessMode_e) */
73 ADDUSERPARAMTYPE_CACHED, /* 4 - Entry is managed by cache system (boolean) */
74 ADDUSERPARAMTYPE_USERTYPE, /* 5 - User type (userType_e) */
75 ADDUSERPARAMTYPE_PRIMARYFIELD, /* 6 - Primary field (MAX_CREDENTIALBYTES) */
76 ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, /* 7 - Primary field type (fieldType_e); */
77 ADDUSERPARAMTYPE_AUXFIELD, /* 8 - Auxiliary field (MAX_CREDENTIALBYTES) */
78 ADDUSERPARAMTYPE_AUXFIELDTYPE, /* 9 - Auxiliary field type (fieldType_e) */
79 ADDUSERPARAMTYPE_TIMEZONE, /* 10 - Timezone bitmap (U32) */
80 ADDUSERPARAMTYPE_EXPIREON, /* 11 - Date on which user no longer granted access, if non-0 */
81 ADDUSERPARAMTYPE_USECOUNT, /* 12 - Use count */
82 ADDUSERPARAMTYPE_EXCEPTIONGROUP, /* 13 - Exception group */
83 ADDUSERPARAMTYPE_LAST
85 addUserParamType_e;
87 typedef enum
89 ALARMID_NONE = 0, /* 0 - No alarm */
90 ALARMID_VALIDIN, /* 1 - Valid entry */
91 ALARMID_DENIEDACCESS, /* 2 - Denied access (bad credential) */
92 ALARMID_SECURED, /* 3 - Door closed & secured (only seen after alarms 3 or 4) */
93 ALARMID_DOORFORCED, /* 4 - Door forced */
94 ALARMID_KEYOVERRIDE, /* 5 - Key override */
95 ALARMID_INVALIDENTRY, /* 6 - Door open but invalid entry (key used?) */
96 ALARMID_DOORAJAR, /* 7 - Door ajar (needs .ja woman with Engrish accent) */
97 ALARMID_LOWBATTERY, /* 8 - Low battery alarm */
98 ALARMID_RXHELD, /* 9 - RX held */
99 ALARMID_LAST
101 alarmID_e;
103 typedef enum
105 CAPABILITIES_USERS = 0, /* 0 - Number of users supported */
106 CAPABILITIES_TIMEZONES, /* 1 - Number of timezone supported */
107 CAPABILITIES_EXCEPTIONS, /* 2 - Number of exceptions supported */
108 CAPABILITIES_EXCEPTIONGROUPS, /* 3 - Number of exception groups supported */
109 CAPABILITIES_EVENTLOG, /* 4 - Number of event log entries supported */
110 CAPABILITIES_DECLINEDLOG, /* 5 - Number of declined log entries supported */
111 CAPABILITIES_ALARMLOG, /* 6 - Number of alarm log entries supported */
112 CAPABILITIES_TOTALEVENTS, /* 7 - Total events (EVENT_LAST - 1) */
113 CAPABILITIES_LAST
115 capabilities_e;
117 typedef enum
119 CHECKSUMRESULT_CONFIGURATIONNVRAM = 0, /* 0 - Checksum results of the configuration NVRAM */
120 CHECKSUMRESULT_EXCEPTIONS, /* 1 - Checksum results of the exceptions NVRAM */
121 CHECKSUMRESULT_EXCEPTIONGROUPS, /* 2 - Checksum results of the exception groups NVRAM */
122 CHECKSUMRESULT_TZCALENDARS, /* 3 - Checksum results of the time zone calendar NVRAM */
123 CHECKSUMRESULT_TIMEZONES, /* 4 - Checksum results of the time zone NVRAM */
124 CHECKSUMRESULT_USERS, /* 5 - Checksum results of the users NVRAM */
125 CHECKSUMRESULT_CACHELRU, /* 6 - Checksum results of the cache LRU */
126 CHECKSUMRESULT_LAST
128 checksumResult_e;
130 typedef enum
132 CMD_RESPONSE = 0, /* 0 - Response to command */
133 CMD_HANDSHAKE, /* 1 - Establish session */
134 CMD_KILLSESSION, /* 2 - Kill session */
135 CMD_QUERYSERIALNUMBER, /* 3 - Query serial number */
136 CMD_QUERYVERSION, /* 4 - Query version */
137 CMD_SETDATETIME, /* 5 - Set date and time */
138 CMD_QUERYDATETIME, /* 6 - Query date and time */
139 CMD_SETCONFIG, /* 7 - Set configuration options */
140 CMD_GETCONFIG, /* 8 - Read configuration options */
141 CMD_MANAGEUSER, /* 9 - Manage users (add/delete/replace/update) */
142 CMD_DELETEUSERS, /* 10 - Delete users (all/most/cached) */
143 CMD_DEFINEEXCEPTION, /* 11 - Define exception (old block holiday) */
144 CMD_DEFINEEXCEPTIONGROUP, /* 12 - Define exception group */
145 CMD_DEFINECALENDAR, /* 13 - Define calendar */
146 CMD_DEFINETIMEZONE, /* 14 - Define time zone */
147 CMD_RMTAUTHRETRY, /* 15 - Remote authorization retry */
148 CMD_FILTERS, /* 16 - Event log filter configuration */
149 CMD_ALARMCONFIGURE, /* 17 - Alarm condition configuration */
150 CMD_EVENTLOGDUMP, /* 18 - Dump event log */
151 CMD_DECLINEDLOGDUMP, /* 19 - Dump declined log */
152 CMD_ALARMLOGDUMP, /* 20 - Dump alarm log */
153 CMD_DOWNLOADFIRMWARE, /* 21 - Download firmware */
154 CMD_DOWNLOADFIRMWARETIMEOUT, /* 22 - Download firmware timeout (internal command only) */
155 CMD_POWERTABLESELECTION, /* 23 - Power table selection */
156 CMD_CLEARNVRAM, /* 24 - Clear nvram (config/event log/declined log/etc) */
157 CMD_DPAC, /* 25 - DPAC manipulation commands */
158 CMD_SELFTEST, /* 26 - Selftest (heh) */
159 CMD_RESET, /* 27 - Restart controller */
160 CMD_LOGWRITE, /* 28 - Write event to event log */
161 CMD_MFGCOMMAND, /* 29 - Manufacturing commands */
162 CMD_NVRAMBACKUP, /* 30 - Backup/restore/erase NVRAM */
163 CMD_EXTENDEDRESPONSE, /* 31 - Response to command (extended version) */
164 CMD_LAST
166 cmdCommand_e;
168 typedef enum
170 CMDMFG_SETSERIALNUMBER = 0, /* 0 - Set serial number */
171 CMDMFG_SETCRYPTKEY, /* 1 - Set encryption key */
172 CMDMFG_DUMPNVRAM, /* 2 - Dump NVRAM */
173 CMDMFG_TERMINAL, /* 3 - DPAC terminal mode */
174 CMDMFG_REMOTEUNLOCK, /* 4 - Remote unlock (only on 'd' builds) */
175 CMDMFG_AUXCTLRVERSION, /* 5 - Request version of auxiliary controller */
176 CMDMFG_IOPINS, /* 6 - Read I/O pin states */
177 CMDMFG_ADCS, /* 7 - Read ADC values */
178 CMDMFG_HARDWAREID, /* 8 - Read hardware ID and CPU ID */
179 CMDMFG_CHECKPOINTLOGDUMP, /* 9 - Dump checkpoint log */
180 CMDMFG_CHECKPOINTLOGCLEAR, /* 10 - Clear checkpoint log */
181 CMDMFG_READREGISTERS, /* 11 - Read selected CPU registers */
182 CMDMFG_FORCEOPTIONS, /* 12 - Force I/O lines to certain states */
183 CMDMFG_COMMUSER, /* 13 - Fake a comm user entry */
184 CMDMFG_DUMPKEYPAD, /* 14 - Dump keypad debugging buffer */
185 CMDMFG_BATTERYCHECK, /* 15 - Force battery check */
186 CMDMFG_RAMREFRESH, /* 16 - Refresh RAM variables from NVRAM */
187 CMDMFG_TASKFLAGS, /* 17 - Dump task flags */
188 CMDMFG_TIMERCHAIN, /* 18 - Dump active timer chains */
189 CMDMFG_PEEKPOKE, /* 19 - Peek/poke CPU RAM memory */
190 CMDMFG_LOCKSTATE, /* 20 - Display global gLockState variable */
191 CMDMFG_CAPABILITIES, /* 21 - Read firmware capabilities (# users/event log entries, etc) */
192 CMDMFG_DUMPM41T81, /* 22 - Dump M41T81 RTC registers */
193 CMDMFG_DEBUGLOGDUMP, /* 23 - Dump debugging log */
194 CMDMFG_DEBUGLOGCLEAR, /* 24 - Clear debugging log */
195 CMDMFG_TESTWDT, /* 25 - Test watchdog */
196 CMDMFG_QUERYCKSUM, /* 26 - Query NVRAM checksum value */
197 CMDMFG_VALIDATECHECKSUMS, /* 27 - Validate checksums */
198 CMDMFG_REBUILDLRUCACHE, /* 28 - Rebuild LRC cache */
199 CMDMFG_TZUPDATE, /* 29 - Send TZCHANGE to tod.c */
200 CMDMFG_TESTPRESERVE, /* 30 - Test preserve save/restore code */
201 CMDMFG_MORTISESTATELOGDUMP, /* 31 - Dump the mortise state log */
202 CMDMFG_MORTISESTATELOGCLEAR, /* 32 - Clear the mortise state log */
203 CMDMFG_MORTISEPINS, /* 33 - Display current mortise pin status */
204 CMDMFG_HALTANDCATCHFIRE, /* 34 - Stop processor (optionally catch fire) */
205 CMDMFG_LAST
207 cmdMfgCommand_e;
209 typedef enum
211 CONFIGITEM_SERIAL_NUMBER = 0, /* 0 - Ye olde serial number */
212 CONFIGITEM_CRYPT_KEY, /* 1 - The encryption/decryption key */
213 CONFIGITEM_HARDWARE_OPTIONS_MFG, /* 2 - Bit map of hardware options at manufacturing time (hardwareOptions_e) */
214 CONFIGITEM_HARDWARE_OPTIONS, /* 3 - Bit map of hardware options at runtime time (hardwareOptions_e) */
215 CONFIGITEM_NVRAM_CHANGES, /* 4 - Log of NVRAM changes since reset (which blocks were reset) */
217 CONFIGITEM_NVRAMDIRTY, /* 5 - NVRAM is (or might be) dirty */
218 CONFIGITEM_NVRAM_WV, /* 6 - NVRAM write verify (I2C parts only) */
219 CONFIGITEM_ENABLE_WDT, /* 7 - If true, and OPT_WATCHDOG enabled, enables WDT */
220 CONFIGITEM_EARLY_ACK, /* 8 - Generates early RESPONSE_COMMANDRECEIVED message for commands that take some time */
221 CONFIGITEM_CONSOLE_AES_ONLY, /* 9 - If set, requires AES encryption on serial communications */
222 CONFIGITEM_RADIO_AES_ONLY, /* 10 - If set, requires AES encryption on radio communications */
223 CONFIGITEM_NDRLE, /* 11 - RLE (Run Length Encoding) NVRAM dump enable/disable */
224 CONFIGITEM_SOMF, /* 12 - Stop on mortise failure */
225 CONFIGITEM_NOGAF, /* 13 - Prevents what should be fatal errors from being fatal (i.e, No One Gives A Flip) */
226 CONFIGITEM_CARD_READER_POWER, /* 14 - External mag reader power supply control */
227 CONFIGITEM_PROX_ENABLE, /* 15 - Prox into permanent sleep mode */
228 CONFIGITEM_CKSUMCONFIG, /* 16 - Configuration NVRAM checksum enable/disable */
229 CONFIGITEM_DAILY_BATTERY_CHECK, /* 17 - Enable/disable daily battery check */
230 CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, /* 18 - If daily battery check enabled, top of the hour to check at */
231 CONFIGITEM_BATTERY_LOW, /* 19 - Return low battery status (TRUE = low) */
233 CONFIGITEM_LRU_HEAD, /* 20 - Cache LRU head pointer */
234 CONFIGITEM_LRU_TAIL, /* 21 - Cache LRU tail pointer */
235 CONFIGITEM_RTC_CALIBRATION, /* 22 - Signed 6 bit value written to M41T81 calibration register */
236 CONFIGITEM_ACVREQUESTER, /* 23 - Auxiliary controller version requester (fromDevice_e, internal variable) */
237 CONFIGITEM_LOCAL_LED, /* 24 - Local LED function assignment */
239 CONFIGITEM_ERRCNT_XORLEN, /* 25 - Error counter for XOR length not matching in protocol.c */
240 CONFIGITEM_ERRCNT_CRC, /* 26 - Error counter for bad CRC in protocol.c */
241 CONFIGITEM_ERRCNT_NOTSIGIL, /* 27 - Error counter for character received was not sigil in protocol.c */
242 CONFIGITEM_ERRCNT_TIMEOUT, /* 28 - Error counter for timeout in protocol.c */
243 CONFIGITEM_ERRCNT_TOOLONG, /* 29 - Error counter for packet too long in protocol.c */
244 CONFIGITEM_ERRCNT_TOOSHORT, /* 30 - Error counter for packet too short in protocol.c */
245 CONFIGITEM_ERRCNT_HITDEFAULT, /* 31 - Error counter for hitting default handler in protocol.c */
246 CONFIGITEM_ERRCNT_OVERRUN, /* 32 - Error counter for serial buffer overrun in serial.c */
247 CONFIGITEM_ERRCNT_UARTFE, /* 33 - Error counter for UART framing error in serial.c */
248 CONFIGITEM_ERRCNT_UARTOE, /* 34 - Error counter for UART overrun error in serial.c */
250 CONFIGITEM_DST_SET, /* 35 - Daylight savings time currently active */
251 CONFIGITEM_DST_MODE, /* 36 - Determines if repeating month/date, repeating month/day, or specific month/date (dstMode_e) */
252 CONFIGITEM_DST_FORWARD_MONTH, /* 37 - Month to skip forward on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
253 CONFIGITEM_DST_FORWARD_DOM, /* 38 - Day of month to skip forward on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
254 CONFIGITEM_DST_FORWARD_OOD, /* 39 - Occurence number of CONFIGITEM_DST_FORWARD_DOW to skip forward on (1-5) (DSTMODE_REPEATINGDOW) */
255 CONFIGITEM_DST_FORWARD_DOW, /* 40 - Day of week to skip forward on (1-7) (DSTMODE_REPEATINGDOW) */
256 CONFIGITEM_DST_FORWARD_HOUR, /* 41 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
257 CONFIGITEM_DST_FORWARD_MINUTE, /* 42 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
258 CONFIGITEM_DST_FORWARD_ADJUST, /* 43 - Number of minutes to move forward */
259 CONFIGITEM_DST_BACK_MONTH, /* 44 - Month to fall back on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDAY, DSTMODE_ONETIMEDATE) */
260 CONFIGITEM_DST_BACK_DOM, /* 45 - Day of month to fall back on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
261 CONFIGITEM_DST_BACK_OOD, /* 46 - Occurence number of CONFIGITEM_DST_BACK_DOW to fall back on (1-5) (DSTMODE_REPEATINGDOW) */
262 CONFIGITEM_DST_BACK_DOW, /* 47 - Day of week to fall back on (1-7) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
263 CONFIGITEM_DST_BACK_HOUR, /* 48 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
264 CONFIGITEM_DST_BACK_MINUTE, /* 49 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
265 CONFIGITEM_DST_BACK_ADJUST, /* 50 - Number of minutes to move backwards */
267 CONFIGITEM_EVENTLOG_ZEROMEM, /* 51 - If set, event log memory is zeroed when event log cleared */
268 CONFIGITEM_EVENTLOG_BEGIN, /* 52 - Beginning record number when event log cleared */
269 CONFIGITEM_EVENTLOG_RECORD, /* 53 - Next event log record to write */
270 CONFIGITEM_EVENTLOG_ENTRIES, /* 54 - Number of entries in event log */
271 CONFIGITEM_EVENTLOG_WARNDEVICE, /* 55 - Event log warning device */
272 CONFIGITEM_EVENTLOG_WARNEVERY, /* 56 - Warn at every 'n' records (more or less) */
273 CONFIGITEM_EVENTLOG_RMTDEVICE, /* 57 - Device event log entries copied to (fromDevice_e) */
275 CONFIGITEM_DECLINEDLOG_ZEROMEM, /* 58 - If set, declined log memory is zeroed when declined log cleared */
276 CONFIGITEM_DECLINEDLOG_BEGIN, /* 59 - Beginning record number when declined log cleared */
277 CONFIGITEM_DECLINEDLOG_RECORD, /* 60 - Next declined log record to write */
278 CONFIGITEM_DECLINEDLOG_ENTRIES, /* 61 - Number of entries in declined log */
279 CONFIGITEM_DECLINEDLOG_WARNDEVICE, /* 62 - Declined record warning device */
280 CONFIGITEM_DECLINEDLOG_WARNEVERY, /* 63 - Warn at every 'n' records (more or less) */
281 CONFIGITEM_DECLINEDLOG_RMTDEVICE, /* 64 - Device declined entries copied to (fromDevice_e) */
283 CONFIGITEM_ALARMLOG_ZEROMEM, /* 65 - If set, alarm log memory is zeroed when alarm log cleared */
284 CONFIGITEM_ALARMLOG_BEGIN, /* 66 - Beginning record number when alarm log cleared */
285 CONFIGITEM_ALARMLOG_RECORD, /* 67 - Next alarm log record to write */
286 CONFIGITEM_ALARMLOG_ENTRIES, /* 68 - Number of entries in alarm log */
287 CONFIGITEM_ALARMLOG_WARNDEVICE, /* 69 - Alarm record warning device */
288 CONFIGITEM_ALARMLOG_WARNEVERY, /* 70 - Warn at every 'n' records (more or less) */
289 CONFIGITEM_ALARMLOG_RMTDEVICE, /* 71 - Device alarm entries copied to (fromDevice_e) */
291 CONFIGITEM_VISIBLE_FEEDBACK, /* 72 - Visible feedback on keypad presses enabled */
292 CONFIGITEM_AUDIBLE_FEEDBACK, /* 73 - Audible feedback on keypad presses enabled */
293 CONFIGITEM_VISIBLE_INDICATORS, /* 74 - Visible indicators on all actions (run dark) */
294 CONFIGITEM_AUDIBLE_INDICATORS, /* 75 - Audible indicators on all actions (run silent) */
295 CONFIGITEM_2NDPINDURATION, /* 76 - Number of seconds to wait for second PIN */
296 CONFIGITEM_LOCKOUT_ATTEMPTS, /* 77 - Number of pin/prox/magcard attempts before lockout */
297 CONFIGITEM_LOCKOUT_DURATION, /* 78 - Duration of lockout, in penta-seconds */
298 CONFIGITEM_KEYPAD_INACTIVITY, /* 79 - Duration in seconds with no key entries before key buffer cleared */
299 CONFIGITEM_ICIDLE_DURATION, /* 80 - If last credential was invalid, invalid attempt counter reset after this many seconds */
300 CONFIGITEM_WRITE_DECLINED_LOG, /* 81 - Declined log writing enable/disable */
301 CONFIGITEM_LOW_BATTERY_INDICATOR, /* 82 - Low battery audio/visual indicator enable/disable */
303 CONFIGITEM_PANIC_MODE, /* 83 - Enable/disable panic mode */
305 CONFIGITEM_TIMEZONE_ENABLE, /* 84 - Timezones enabled (applies to users, not passage modes) */
306 CONFIGITEM_EXCEPTION_ENABLE, /* 85 - Exceptions enabled (applies to users and passage modes) */
307 CONFIGITEM_AUTOUNLOCK_ENABLE, /* 86 - Auto-unlocking (schedule based) enabled */
309 CONFIGITEM_LOCK_PRIORITY_EMERGENCY, /* 87 - DPAC/PWM lock priority for emergency users (lockPriority_e) */
310 CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, /* 88 - DPAC/PWM lock priority for supervisors (lockPriority_e) */
311 CONFIGITEM_LOCK_PRIORITY_USER, /* 89 - DPAC/PWM lock priority for users (lockPriority_e) */
312 CONFIGITEM_LOCK_PRIORITY_PASSAGE, /* 90 - DPAC/PWM lock priority for passage mode (lockPriority_e) */
313 CONFIGITEM_LOCK_PRIORITY_PANIC, /* 91 - DPAC/PWM lock priority for panic mode/panic users (lockPriority_e) */
314 CONFIGITEM_LOCK_PRIORITY_LOCKOUT, /* 92 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
315 CONFIGITEM_LOCK_PRIORITY_RELOCK, /* 93 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
316 CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, /* 94 - DPAC/PWM lock priority for bolt thrown (lockPriority_e) */
317 CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, /* 95 - DPAC/PWM lock priority for configuration change (CONFIGITEM_LOCK_TYPE) (lockPriority_e) */
318 CONFIGITEM_LOCK_PRIORITY_REMOTE, /* 96 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
319 CONFIGITEM_LOCK_TYPE, /* 97 - Type of lock (PWM, electric, magnetic) */
320 CONFIGITEM_DOUBLE_PULSE, /* 98 - Lock double pulse enabled */
321 CONFIGITEM_DOUBLE_DELAY, /* 99 - Delay between double pulses, in centiseconds */
322 CONFIGITEM_MOTOR_DURATION, /* 100 - Duration lock motor to run, in centiseconds */
323 CONFIGITEM_MORTISE_TYPE, /* 101 - Type of mortise connected to controller */
324 CONFIGITEM_UNLOCK_TIME, /* 102 - Normal unlock duration in seconds */
325 CONFIGITEM_EXT_UNLOCK_TIME, /* 103 - Extended unlock duration, in seconds */
326 CONFIGITEM_DOOR_AJAR_TIME, /* 104 - Time before door considered stuck open, in seconds */
328 CONFIGITEM_SESSION_TIMEOUT, /* 105 - Session timeout, in seconds */
329 CONFIGITEM_RETRY_ON_TIMEOUT, /* 106 - Retry lock-initiated sessions if comm session timed out (instead of terminated by remote end) */
331 CONFIGITEM_UNSOLICITED_ENCRYPT, /* 107 - Unsolicited messages are encrypted (encryptionScheme_e) */
332 CONFIGITEM_RMT_AUTH_TIMEOUT, /* 108 - Seconds to wait for remote authorization timeout (0 = no remote auth) */
333 CONFIGITEM_RMT_AUTH_DEVICE, /* 109 - Device remote authorization requests sent over (fromDevice_e) */
334 CONFIGITEM_ALARM_DEVICE, /* 110 - Device alarm condition connects via */
335 CONFIGITEM_NOTIFY_DEVICE, /* 111 - Notify user device */
336 CONFIGITEM_COMMUSER_DEVICE, /* 112 - Device comm user connects via */
337 CONFIGITEM_SCHEDULER_DEVICE, /* 113 - Device scheduler connects via */
339 CONFIGITEM_SCHEDULER_TYPE, /* 114 - Scheduling algorithm to use (schedulerType_e) */
340 CONFIGITEM_SCHEDULER_AWAKE, /* 115 - Number of decaseconds scheduler is awake for */
341 CONFIGITEM_SCHEDULER_PERIOD, /* 116 - Interval in minutes between scheduled wakeups (SCHEDULERTYPE_SIMPLE) */
342 CONFIGITEM_SCHEDULER_HOD, /* 117 - Hour of day map (SCHEDULERTYPE_HOD) */
343 CONFIGITEM_SCHEDULER_DOW, /* 118 - Day of month map (SCHEDULERTYPE_DOW) */
344 CONFIGITEM_SCHEDULER_DOM, /* 119 - Day of month map (SCHEDULERTYPE_DOM) */
345 CONFIGITEM_SCHEDULER_HM1, /* 120 - On at hour:minute #1 */
346 CONFIGITEM_SCHEDULER_HM2, /* 121 - On at hour:minute #2 */
347 CONFIGITEM_SCHEDULER_HM3, /* 122 - On at hour:minute #3 */
348 CONFIGITEM_SCHEDULER_HM4, /* 123 - On at hour:minute #4 */
350 CONFIGITEM_RADIO_TYPE, /* 124 - Radio type (None, DPAC, WiPort, etc) */
351 CONFIGITEM_RADIO_MODE, /* 125 - Radio mode (DPAC=active/passive) */
352 CONFIGITEM_RADIO_TIMEOUT, /* 126 - Number of seconds before we decide server didn't hear us (only in RADIOMODE_LOCKINITIATED) */
353 CONFIGITEM_RADIO_ATTEMPTS, /* 127 - Number of times to attempt connection to server (only in RADIOMODE_LOCKINITIATED) */
354 CONFIGITEM_RADIO_HOUSEKEEPING, /* 128 - Time we allow for radio housekeeping (associate with AP, etc) */
355 CONFIGITEM_RADIO_LEAPUSERNAME, /* 129 - LEAP username */
356 CONFIGITEM_RADIO_LEAPPASSWORD, /* 130 - LEAP password */
358 CONFIGITEM_INHIBIT_VOLTAGE, /* 131 - Voltage when battery is considered dead */
359 CONFIGITEM_LOW_VOLTAGE, /* 132 - Voltage when battery is considered low */
360 CONFIGITEM_PT_RANGE_1, /* 133 - Power table for 0.00 to 5.99 volts */
361 CONFIGITEM_PT_RANGE_2, /* 134 - Power table for 6.00 to 6.49 volts */
362 CONFIGITEM_PT_RANGE_3, /* 135 - Power table for 6.50 to 6.99 volts */
363 CONFIGITEM_PT_RANGE_4, /* 136 - Power table for 7.00 to 7.49 volts */
364 CONFIGITEM_PT_RANGE_5, /* 137 - Power table for 7.50 to 7.99 volts */
365 CONFIGITEM_PT_RANGE_6, /* 138 - Power table for 8.00 to 8.49 volts */
366 CONFIGITEM_PT_RANGE_7, /* 139 - Power table for 8.50 to 8.99 volts */
367 CONFIGITEM_PT_RANGE_8, /* 140 - Power table for 9.00 and up volts */
369 CONFIGITEM_MAGCARD_IFS, /* 141 - Include field separator character in returned data */
370 CONFIGITEM_MAGCARD_FIELDS, /* 142 - Mag card fields to include */
371 CONFIGITEM_MAGCARD_OFFSET, /* 143 - Offset into concatenated field */
372 CONFIGITEM_MAGCARD_DIGITS, /* 144 - Number of digits to return past offset */
374 CONFIGITEM_ALARMS, /* 145 - Alarms (not writable) */
375 CONFIGITEM_FILTERS, /* 146 - Event filter storage (not writable) */
376 CONFIGITEM_ALARMSTATE, /* 147 - Current alarm state (alarmID_e) */
377 CONFIGITEM_DOORSTATE, /* 148 - Current door state (doorState_e) */
379 CONFIGITEM_DPACDEBUG, /* 149 - Enable DPAC debug events to event log */
380 CONFIGITEM_FAILOPENSECURE, /* 150 - Fail open (false) or secure (true) on battery dead */
382 CONFIGITEM_REPLACED_VOLTAGE, /* 151 - If battery above this voltage, it's been replaced */
384 CONFIGITEM_RX_HELD_TIME, /* 152 - If RX held longer than this, sent RX held alarm */
385 CONFIGITEM_PACKET_TIMEOUT, /* 153 - Time (in seconds) that a complete packet must arrive in */
387 CONFIGITEM_EXTENDEDRESPONSE, /* 154 - Enables extended response (which includes original sequence number) */
388 CONFIGITEM_PASSAGEMODEINDICATOR, /* 155 - When lock in passage mode, LEDs show denied if set, granted if cleared (Squish #1133) */
390 CONFIGITEM_PFMRETURNTIME, /* 156 - Number of seconds power must be present to exit power fail death loop */
392 CONFIGITEM_LAST /* Must be last item defined (All non-virtual items added above) */
394 #if 0 /* XXX: unused ? */
396 CONFIGITEM_MAGIC_FIRST = 239, /* Next item is first magic command */
397 CONFIGITEM_MAGIC_USERFIELD, /* 240 - Virtual command to delete PIN '8989', add user '8989' */
398 CONFIGITEM_MAGIC_USERADD, /* 241 - Virtual command to add a user (PIN only) */
399 CONFIGITEM_MAGIC_USERDELETE, /* 242 - Virtual command to delete a user */
400 CONFIGITEM_MAGIC_NVRAMBACKUP, /* 243 - Virtual command to backup NVRAM to FLASH */
401 CONFIGITEM_MAGIC_NVRAMRESTORE, /* 244 - Virtual command to restore NVRAM from FLASH */
402 CONFIGITEM_MAGIC_NVRAMERASE, /* 245 - Virtual command to erase backed-up NVRAM */
403 CONFIGITEM_MAGIC_LAST /* *Really* the last item */
404 #endif
406 configItem_e;
408 typedef enum
410 DELETEUSERS_ALL = 0, /* 0 - Delete ALL users, including master and emergency, restores default users */
411 DELETEUSERS_CACHED, /* 1 - Delete only cached users */
412 DELETEUSERS_LAST
414 deleteUsers_e;
416 typedef enum
418 DISPOSITION_ADD = 0, /* 0 - Add, must not exist (by user number only) */
419 DISPOSITION_REPLACE, /* 1 - Replace, (add, but overwrite if necessary) */
420 DISPOSITION_UPDATE, /* 2 - Update, must already exist */
421 DISPOSITION_DELETE, /* 3 - Delete, exists or not is irrelevant */
422 DISPOSITION_RETRIEVE, /* 4 - Retrieve, must exist */
423 DISPOSITION_LAST
425 disposition_e;
427 #if 0
428 typedef enum
430 DOORSTATE_NONE = 0, /* 0 - No door state available */
431 DOORSTATE_SECURED, /* 1 - Door closed & secured */
432 DOORSTATE_DOORFORCED, /* 2 - Door forced */
433 DOORSTATE_KEYOVERRIDE, /* 3 - Key override */
434 DOORSTATE_DOORAJAR, /* 4 - Door ajar */
435 DOORSTATE_LAST
437 doorState_e;
438 #endif
440 #if 0
441 typedef enum
443 DSTMODE_NONE, /* 0 - Automatic DST switching disabled */
444 DSTMODE_REPEATINGDOM, /* 1 - Particular day on a particular month (Apr 2nd) */
445 DSTMODE_REPEATINGDOW, /* 2 - Day of week on a particular week of a particular month (Sunday of last week of April) */
446 DSTMODE_ONETIMEDOM, /* 3 - Like DSTMODE_REPEATINGDOM, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|DAY] items */
447 DSTMODE_ONETIMEDOW, /* 4 - Like DSTMODE_REPEATINGDOW, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|OOD|DOW] items */
448 DSTMODE_LAST
450 dstMode_e;
451 #endif
453 typedef enum
455 ENCRYPTIONSCHEME_NONE = 0, /* 0 - No encryption */
456 ENCRYPTIONSCHEME_ROLLING, /* 1 - XOR with crypt key, shift each byte */
457 ENCRYPTIONSCHEME_SN, /* 2 - XOR with serial number, shift each byte */
458 ENCRYPTIONSCHEME_AESIV, /* 3 - AES implementation (set initial vector) */
459 ENCRYPTIONSCHEME_AES, /* 4 - AES implementation */
460 ENCRYPTIONSCHEME_LAST
462 encryptionScheme_e;
464 typedef enum
466 EVENT_INVALIDPIN = 0, /* 0 - Entered PIN was invalid */
467 EVENT_USER, /* 1 - Regular user has been granted access */
468 EVENT_ONETIME, /* 2 - One-time user has been granted access */
469 EVENT_PASSAGEBEGIN, /* 3 - Lock has unlocked because of auto-unlock mode */
470 EVENT_PASSAGEEND, /* 4 - Lock has relocked because of auto-unlock mode */
471 EVENT_BADTIME, /* 5 - Access attempted outside of allowed time/date */
472 EVENT_LOCKEDOUT, /* 6 - Access attempted during panic or lockout */
473 EVENT_LOWBATTERY, /* 7 - Battery is low */
474 EVENT_DEADBATTERY, /* 8 - Battery is dead */
475 EVENT_BATTERYREPLACED, /* 9 - Battery has been replaced */
476 EVENT_USERADDED, /* 10 - User added or changed */
477 EVENT_USERDELETED, /* 11 - User deleted */
478 EVENT_EMERGENCY, /* 12 - The emergency code was entered */
479 EVENT_PANIC, /* 13 - Somebody pushed the panic button */
480 EVENT_RELOCK, /* 14 - Relock code was entered */
481 EVENT_LOCKOUTBEGIN, /* 15 - Lockout code was entered */
482 EVENT_LOCKOUTEND, /* 16 - Lockout code was entered again */
483 EVENT_RESET, /* 17 - Lock was reset (restarted) */
484 EVENT_DATETIMESET, /* 18 - System date & time was set */
485 EVENT_LOGCLEARED, /* 19 - Event log cleared */
486 EVENT_DBRESET, /* 20 - User database reset */
487 EVENT_COMMSTARTED, /* 21 - Communications session started */
488 EVENT_COMMENDED, /* 22 - Communications session ended */
489 EVENT_FIRMWAREABORT, /* 23 - A firmware update aborted */
490 EVENT_FIRMWAREERROR, /* 24 - A firmware update encountered an error */
491 EVENT_FIRMWARETIMEOUT, /* 25 - Timeout expecting firmware download data record */
492 EVENT_DSTFALLBACK, /* 26 - Clock set back */
493 EVENT_DSTSPRINGFORWARD, /* 27 - Clock set forward */
494 EVENT_BOLTTHROWN, /* 28 - Bolt thrown */
495 EVENT_BOLTRETRACTED, /* 29 - Bolt retracted */
496 EVENT_MASTERCODE, /* 30 - Master code entered (clears panic, relock, and lockout) */
497 EVENT_COMMUSER, /* 31 - A comm user was activated */
498 EVENT_DPACDISABLED, /* 32 - DPAC disabled */
499 EVENT_NOTIFY, /* 33 - Notify user has been granted access */
500 EVENT_EXPIRED, /* 34 - Expired user attempted access */
501 EVENT_SUPERVISOR, /* 35 - The supervisor code was entered */
502 EVENT_MCCENTER, /* 36 - Entered MCC programming mode */
503 EVENT_MCCEXIT, /* 37 - Exited MCC programming mode */
504 EVENT_SERIALRXOVERRUN, /* 38 - Serial receiver overrun */
505 EVENT_DPACRXOVERRUN, /* 39 - DPAC receiver overrun */
506 EVENT_NVRAMPBCLEAR, /* 40 - NVRAM cleared by pushybutton */
507 EVENT_NVRAMLAYOUTCHANGE, /* 41 - NVRAM cleared by revision */
508 EVENT_NVRAMOK, /* 42 - NVRAM wasn't changed */
509 EVENT_USERREPLACED, /* 43 - User replaced */
510 EVENT_RADIOTIMEOUT, /* 44 - Radio timed out waiting for remote login */
511 EVENT_SUSPENDEDUSER, /* 45 - Suspended user attempted access */
512 EVENT_USERUPDATED, /* 46 - User updated */
513 EVENT_DOORBOLTED, /* 47 - Access denied because door is bolted */
514 EVENT_PANICACTIVE, /* 48 - Access denied because lock is in panic mode */
515 EVENT_PASSAGEACTIVE, /* 49 - Access denied because lock is in passage mode */
516 EVENT_PASSAGEINACTIVE, /* 50 - Access denied because lock is not in passage mode */
517 EVENT_BADACCESSMODE, /* 51 - Access denied because access mode is weird */
518 EVENT_CLOCKERR, /* 52 - Error reading RTC */
519 EVENT_REMOTEUNLOCK, /* 53 - Remote unlock */
520 EVENT_TZHAUDISABLED, /* 54 - Time zone, exceptions, and auto-unlock functionality disabled */
521 EVENT_EVENTLOGWRAPPED, /* 55 - Event log wrapped */
522 EVENT_DECLINEDLOGWRAPPED, /* 56 - Declined log wrapped */
523 EVENT_ALARMLOGWRAPPED, /* 57 - Alarm log wrapped */
524 EVENT_RADIOBUSYEMERGENCY, /* 58 - Access denied because radio is busy */
525 EVENT_RADIOBUSYSUPERVISOR, /* 59 - Access denied because radio is busy */
526 EVENT_RADIOBUSYONETIME, /* 60 - Access denied because radio is busy */
527 EVENT_RADIOBUSYUSER, /* 61 - Access denied because radio is busy */
528 EVENT_RADIOBUSYPANIC, /* 62 - Access denied because radio is busy */
529 EVENT_RADIOBUSYREX, /* 63 - Access denied because radio is busy */
530 EVENT_RADIOBUSYLOCKOUT, /* 64 - Access denied because radio is busy */
531 EVENT_RADIOBUSYRELOCK, /* 65 - Access denied because radio is busy */
532 EVENT_BATTERYCHECKHELDOFF, /* 66 - Battery check was not performed (user number says why) */
533 EVENT_RMTAUTHREQUEST, /* 67 - Remote authorization request made */
534 EVENT_FIRMWAREUPDATE, /* 68 - A firmware update was attempted, and succeeded */
535 EVENT_FIRMWAREUPDATEFAILED, /* 69 - A firmware update was attempted, and failed */
536 EVENT_MSMFAILURE, /* 70 - Mortise state machine failure */
537 EVENT_CLOCKRESET, /* 71 - The RTC was reset, likely due to ESD */
538 EVENT_POWERFAIL, /* 72 - Power Fail Monitor (PFM) circuit triggered */
539 EVENT_DPAC501WENTSTUPID, /* 73 - DPAC-501 failed to release CTS on power up */
541 * These are all internal debugging events. Real events should go before these.
543 EVENT_CHECKSUMCONFIG, /* 74 - Performing checksum on configuration NVRAM */
544 EVENT_CHECKSUMTZ, /* 75 - Performing checksum on timezone data NVRAM */
545 EVENT_DEBUG, /* 76 - Debug event, could mean anything (programmer discretion) */
546 EVENT_LAST /* 77 - Everything must go before this entry */
548 event_e;
550 typedef enum
552 FIELDTYPE_NONE = 0, /* 0 - Field contains nothing */
553 FIELDTYPE_PIN, /* 1 - Field contains PIN */
554 FIELDTYPE_PROX, /* 2 - Field contains Prox card */
555 FIELDTYPE_MAGCARD, /* 3 - Field contains mag card */
556 FIELDTYPE_LAST
558 fieldType_e;
560 #if 0
561 typedef enum
563 FILTERMODE_NORMAL = 0, /* 0 - Filters events specified */
564 FILTERMODE_INVERT, /* 1 - Filters events not specified */
565 FILTERMODE_LAST
567 filterMode_e;
568 #endif
570 typedef enum
572 FILTERSELECT_RECORDING = 0, /* 0 - Recording filters */
573 FILTERSELECT_REPORTING, /* 1 - Reporting filters */
574 FILTERSELECT_LAST
576 filterSelect_e;
579 /* XXX: enum vals don't all match vals in comments ??? */
580 typedef enum
582 FORCEITEM_RADIOPOWER = 0, /* 0 - Radio power */
583 FORCEITEM_RADIOENABLE, /* 1 - Radio enable */
584 FORCEITEM_LEDRED, /* 2 - Red keypad LED */
585 FORCEITEM_LEDGREEN, /* 3 - Green keypad LED */
586 FORCEITEM_LEDYELLOW, /* 4 - Yellow keypad LED */
587 FORCEITEM_PIEZO, /* 5 - Keypad peizo */
588 FORCEITEM_MAGPOWER, /* 6 - Mag card reader power supply */
589 FORCEITEM_MAGLEDA, /* 7 - Mag card LED A (usually red) */
590 FORCEITEM_MAGLEDB, /* 8 - Mag card LED B (usually green) */
591 FORCEITEM_PROXPOWER, /* 13 - Prox circuitry power (opamps, etc) */
592 FORCEITEM_PROXPING, /* 14 - Prox PIC12F629 ping/sleep mode */
593 FORCEITEM_PROXMODE, /* 15 - Prox ping/read mode (selects 50hz/125KHz filters) */
594 FORCEITEM_I2CPOWER, /* 16 - I2C power */
595 FORCEITEM_MOTORARUN, /* 17 - Motor A run (to H-bridge) */
596 FORCEITEM_MOTORBRUN, /* 18 - Motor B run (to H-bridge) */
597 FORCEITEM_VMON, /* 19 - VMon (ADC 0 battery sense) */
598 FORCEITEM_PROX, /* 20 - Prox test mode (continuous 125KHz read) */
599 FORCEITEM_MORTISETEST, /* 21 - Force mortise into test mode */
600 FORCEITEM_KEYPADTEST, /* 22 - Force keypad into test mode */
601 FORCEITEM_MAGTEST, /* 23 - Force mag card test mode */
602 FORCEITEM_PROXTEST, /* 24 - Force prox card test mode */
603 FORCEITEM_ICLASSPOWER, /* 25 - iClass Prox power */
604 FORCEITEM_ICLASSRESET, /* 26 - iClass Prox reset */
605 FORCEITEM_LAST
607 forceItem_e;
609 typedef enum
611 FROMDEVICE_NONE = 0, /* 0 - Used to indicate no device */
612 FROMDEVICE_INTERNAL, /* 1 - Generated internally */
613 FROMDEVICE_KEYPAD, /* 2 - Generated from keypad */
614 FROMDEVICE_CONSOLE, /* 3 - Generated from console */
615 FROMDEVICE_WIFI, /* 4 - Generated from wi-fi (DPAC) */
616 FROMDEVICE_LAST
618 fromDevice_e;
620 #if 0
621 typedef enum
623 HARDWAREOPTIONS_NONE = 0x0000, /* No options installed (?!) */
624 HARDWAREOPTIONS_CLOCK = 0x0001, /* Has RTC installed (always set) */
625 HARDWAREOPTIONS_CONSOLE = 0x0002, /* Has serial console (always set) */
626 HARDWAREOPTIONS_KEYPAD = 0x0004, /* Has keypad installed */
627 HARDWAREOPTIONS_PROXREADER = 0x0008, /* Has Prox card circuitry installed */
628 HARDWAREOPTIONS_MAGREADER = 0x0010, /* Has magnetic card reader attached */
629 HARDWAREOPTIONS_1WIRE = 0x0020, /* Has Dallas 1-wire interface installed */
630 HARDWAREOPTIONS_WIFI = 0x0040, /* Has WiFi module installed (DPAC only, for now) */
631 HARDWAREOPTIONS_RS485 = 0x0080, /* Has RS-485 optioning (RS-232 assumed if not) */
632 HARDWAREOPTIONS_IR = 0x0100, /* Has IR LED communications interface installed */
633 HARDWAREOPTIONS_PUSHBUTTON = 0x0200, /* Has MCC pushbutton */
634 HARDWAREOPTIONS_WATCHDOG = 0x0400, /* Has watchdog option compiled in */
635 HARDWAREOPTIONS_ICLASSREADER = 0x0800, /* Has iClass OEM75 prox reader installed */
636 HARDWAREOPTIONS_AVAIL1000 = 0x1000, /* Not defined */
637 HARDWAREOPTIONS_AVAIL2000 = 0x2000, /* Not defined */
638 HARDWAREOPTIONS_AVAIL4000 = 0x4000, /* Not defined */
639 HARDWAREOPTIONS_AVAIL8000 = 0x8000, /* Not defined */
641 HARDWAREOPTIONS_RADIO = (HARDWAREOPTIONS_WIFI),
643 HARDWAREOPTIONS_LAST = 0xffff /* Place holder, don't use */
645 hardwareOptions_e;
646 #endif
648 #if 0
649 typedef enum
651 LOCALLED_NONE = 0, /* 0 - No assignment */
652 LOCALLED_RADIOPOWER, /* 1 - Follows radio power supply (lit=power on) */
653 LOCALLED_LOCKUNLOCKED, /* 2 - Follows strike state (lit=locked) */
654 LOCALLED_I2CPOWER, /* 3 - Follows I2C power (lit=power on) */
655 LOCALLED_AUTHCONSOLE, /* 4 - Follows authorization from console port (lit=authorized) */
656 LOCALLED_AUTHWIFI, /* 5 - Follows authorization from Wifi port (lit=authorized) */
657 LOCALLED_BATTERYLOW, /* 6 - Follows battery low status (lit=low) */
658 LOCALLED_BATTERYDEAD, /* 7 - Follows battery dead status (lit=battery dead) */
659 LOCALLED_PROXREADY, /* 8 - Follows Prox ready to read (lit=ready) */
660 LOCALLED_APACQUIRED, /* 9 - Follows WAP acquired via DPAC (lit=acquired) */
661 LOCALLED_PASSMODE, /* 10 - Follows DPAC entering pass mode (lit=pass mode successful) */
662 LOCALLED_PROXREAD, /* 11 - Follows receiving a prox read event (PROXCARDEVENT_READCARD) */
663 LOCALLED_CONNECTED, /* 12 - Follows the DPAC interrupt line, indicating connection status */
664 LOCALLED_DPACCTSTIMER, /* 13 - Follows DPAC CTS line, if asserted more than 5 seconds */
665 LOCALLED_PFMCHARGING, /* 14 - Follows the state of the PFM super-cap charger */
666 LOCALLED_LAST
668 localLED_e;
669 #endif
671 #if 0
672 typedef enum
674 LOCKPRIORITY_NONE = 0, /* 0 - Radio is not shut down for motor run, access not denied if radio is on */
675 LOCKPRIORITY_DPAC, /* 1 - Radio is not shut down for motor run, access denied if radio is on */
676 LOCKPRIORITY_LOCK, /* 2 - Radio is shut down for motor run, access not denied if radio is on */
677 LOCKPRIORITY_LAST
679 lockPriority_e;
680 #endif
682 #if 0
683 typedef enum
685 LOCKTYPE_NONE = 0, /* 0 - No lock present */
686 LOCKTYPE_PWM, /* 1 - PWM motor */
687 LOCKTYPE_ELECTRIC_STRIKE, /* 2 - Electric strike (normally de-energized, uses Motor A side of H-bridge) */
688 LOCKTYPE_MAGNETIC_LOCK, /* 3 - Magnetic lock (normally energized, uses Motor A side of H-bridge) */
689 LOCKTYPE_RELAY, /* 4 - Relay (normally de-energized, uses Motor B side of H-bridge) */
690 LOCKTYPE_LAST
692 lockType_e;
693 #endif
695 typedef enum
697 MFGFIELD_IOPINS = 0, /* 0 - Contains data about the state of the IO pins */
698 MFGFIELD_ADCS, /* 1 - Contains raw ADC data */
699 MFGFIELD_HARDWAREID, /* 2 - Contains hardware ID & revision of PIC */
700 MFGFIELD_CHECKPOINTLOG, /* 3 - Contains the checkpoint log data */
701 MFGFIELD_CPUREGISTERS, /* 4 - Contains the contents of selected PIC registers */
702 MFGFIELD_TASKFLAGS, /* 5 - Contains a list of all task flag values */
703 MFGFIELD_TIMERCHAIN, /* 6 - Contains a complete list of all active timers (timerData_t) */
704 MFGFIELD_PEEKPOKE, /* 7 - Contains results of peeking memory (U8, U16, U32, or string) */
705 MFGFIELD_LOCKSTATE, /* 8 - Contains the current passage mode flags (lockState_t) */
706 MFGFIELD_CAPABILITIES, /* 9 - Contains lock capability info (# users, event log entries, etc) */
707 MFGFIELD_DUMPM41T81, /* 10 - Contains a complete dump of the M41T81 RTC registers */
708 MFGFIELD_NVRAMCHECKSUMVALUE, /* 11 - Contains the 32-bit NVRAM checksum value */
709 MFGFIELD_CHECKSUMRESULTS, /* 12 - Contains results from checksumming exceptions, exceptiong roups, time zone calendars and time zones */
710 MFGFIELD_MORTISESTATELOG, /* 13 - Contains the last 32 mortise state changes */
711 MFGFIELD_MORTISEPINS, /* 14 - Contains the mortise pin status (S1,S2,S3,S4) */
712 MFGFIELD_KEYPADCHAR, /* 15 - Contains a character from the keypad */
713 MFGFIELD_MAGCARD, /* 16 - Contains mag card data */
714 MFGFIELD_PROXCARD, /* 17 - Contains prox card data */
715 MFGFIELD_LAST
717 mfgField_e;
719 typedef enum
721 MORTISETYPE_NONE = 0, /* 0 - No mortise installed */
722 MORTISETYPE_S82276, /* 1 - Sargent 82276 mortise (A) */
723 MORTISETYPE_S82277, /* 2 - Sargent 82277 mortise, no cylinder (B) */
724 MORTISETYPE_S82278, /* 3 - Sargent 82278 mortise, no deadbolt (C) */
725 MORTISETYPE_S82279, /* 4 - Sargent 82279 mortise, no cylinder or deadbolt (D) */
726 MORTISETYPE_S10G77, /* 5 - Sargent 10G77 bored lock body (E) */
727 MORTISETYPE_S8877, /* 6 - Sargent 8877 mortise exit device (F) */
728 MORTISETYPE_S8878, /* 7 - Sargent 8878 mortise exit device, no cylinder (G) */
729 MORTISETYPE_S8977, /* 8 - Sargent 8977 mortise exit device (H) */
730 MORTISETYPE_S8978, /* 9 - Sargent 8978 mortise exit device, no cylinder (I) */
731 MORTISETYPE_CRML20x36, /* 10 - Corbin-Russwin ML20736/ML20836 mortise (J) */
732 MORTISETYPE_CRML20x35, /* 11 - Corbin-Russwin ML20735/ML20835 mortise, no cylinder (K) */
733 MORTISETYPE_CRML20x34, /* 12 - Corbin-Russwin ML20734/ML20834 mortise, no deadbolt (L) */
734 MORTISETYPE_CRML20x33, /* 13 - Corbin-Russwin ML20733/ML20833 mortise, no cylinder or deadbolt (M) */
735 MORTISETYPE_CRCL33x34, /* 14 - Corbin-Russwin CL33734/CL33834 bored lock body (N) */
736 MORTISETYPE_CR9X34, /* 15 - Corbin-Russwin 9734/9834 bored lock body (O) */
737 MORTISETYPE_CR9X33, /* 16 - Corbin-Russwin 9833/9833 bored lock body, no cylinder (P) */
738 MORTISETYPE_CR9MX34, /* 17 - Corbin-Russwin 9M734/9M834 bored lock body (Q) */
739 MORTISETYPE_CR9MX33, /* 18 - Corbin-Russwin 9M733/9M833 bored lock body, no cylinder (R) */
740 MORTISETYPE_LAST
742 mortiseType_e;
744 #if 0
745 typedef enum
747 NVRAMCLEAROPTIONS_NONE = 0x0000, /* Place holder */
748 NVRAMCLEAROPTIONS_CFGINSTALLER = 0x0001, /* Options settable by the installer (lock type, etc) */
749 NVRAMCLEAROPTIONS_CFGADMIN = 0x0002, /* Options settable by the lock administrator (time, date, etc) */
750 NVRAMCLEAROPTIONS_EXCEPTIONS = 0x0004, /* The exceptions definitions */
751 NVRAMCLEAROPTIONS_EXCEPTIONGROUPS = 0x0008, /* The exception group definitions */
752 NVRAMCLEAROPTIONS_CALENDARS = 0x0010, /* The timezones calendar definitions */
753 NVRAMCLEAROPTIONS_TIMEZONES = 0x0020, /* The timezones definitions */
754 NVRAMCLEAROPTIONS_FILTERS = 0x0040, /* Recording filters */
755 NVRAMCLEAROPTIONS_EVENTLOG = 0x0080, /* The event log */
756 NVRAMCLEAROPTIONS_USERDATA = 0x0100, /* The actual user database */
757 NVRAMCLEAROPTIONS_DECLINEDLOG = 0x0200, /* Declined credentials log */
758 NVRAMCLEAROPTIONS_ALARMLOG = 0x0400, /* Alarm log */
759 NVRAMCLEAROPTIONS_LRUCACHE = 0x0800, /* LRU cache for remote authorization (status, user doesn't clear explicitly) */
760 NVRAMCLEAROPTIONS_DBHASH = 0x1000, /* User database hash (status, user doesn't clear explicitly) */
761 NVRAMCLEAROPTIONS_CFGSYSTEM = 0x2000, /* Factory settable options, system variables (status, user doesn't clear explicitly) */
762 NVRAMCLEAROPTIONS_AVAIL4000 = 0x4000, /* Unused */
763 NVRAMCLEAROPTIONS_ALL = 0x7fff, /* All of the above */
764 NVRAMCLEAROPTIONS_USEBACKUP = 0x8000 /* If set, installer and admin options are set according from NVRAM backup (if valid) */
766 nvramClearOptions_e;
767 #endif
769 #if 0
770 typedef enum
772 NVRAMCOMMAND_BACKUP = 0, /* 0 - Backup NVRAM to backup region */
773 NVRAMCOMMAND_ERASE, /* 1 - Erase backup region */
774 NVRAMCOMMAND_RESTORE, /* 2 - Restore NVRAM from backup region */
775 NVRAMCOMMAND_LAST
777 nvramCommand_e;
778 #endif
780 #if 0
781 typedef enum
783 NVRAMDUMPSELECT_ALL = 0, /* 0 - Dump all */
784 NVRAMDUMPSELECT_PIC, /* 1 - Dump NVRAM on PIC */
785 NVRAMDUMPSELECT_USER, /* 2 - Dump I2C NVRAM containing user data, exceptions, exception groups, calendars, timezones */
786 NVRAMDUMPSELECT_EVENT, /* 3 - Dump I2C NVRAM containing event log, declined log, alarm log, LRU cache */
787 NVRAMDUMPSELECT_LAST
789 nvramDumpSelect_e;
790 #endif
792 typedef enum
794 PEEKPOKE_READU8 = 0, /* 0 - Read 8 bit value */
795 PEEKPOKE_READU16, /* 1 - Read 16 bit value */
796 PEEKPOKE_READU24, /* 2 - Read 24 bit value */
797 PEEKPOKE_READU32, /* 3 - Read 32 bit value */
798 PEEKPOKE_READSTRING, /* 4 - Read 'n' 8 bit values */
799 PEEKPOKE_WRITEU8, /* 5 - Write 8 bit value */
800 PEEKPOKE_WRITEU16, /* 6 - Write 16 bit value */
801 PEEKPOKE_WRITEU24, /* 7 - Write 24 bit value */
802 PEEKPOKE_WRITEU32, /* 8 - Write 32 bit value */
803 PEEKPOKE_WRITESTRING, /* 9 - Write 'n' 8 bit values */
804 PEEKPOKE_LAST
806 peekPoke_e;
808 typedef enum
810 PPMISOURCE_NONE = 0, /* 0 - PPMI came from nowhere (not set) */
811 PPMISOURCE_PIN, /* 1 - PPMI came from PIN */
812 PPMISOURCE_PROX, /* 2 - PPMI came from Prox */
813 PPMISOURCE_MAGCARD, /* 3 - PPMI came from mag card */
814 PPMISOURCE_LAST
816 ppmiSource_e;
818 #if 0
819 typedef enum
821 RADIOMODE_HOSTINITIATED = 0, /* 0 - DPAC in listen mode (default) */
822 RADIOMODE_LOCKINITIATED, /* 1 - DPAC in pass-through mode */
823 RADIOMODE_LAST
825 radioMode_e;
826 #endif
828 #if 0
829 typedef enum
831 RADIOTYPE_NONE = 0, /* 0 - No radio present */
832 RADIOTYPE_WIPORTNR, /* 1 - WiPortNR */
833 RADIOTYPE_DPAC80211B, /* 2 - DPAC 802.11b */
834 RADIOTYPE_DPAC80211BG, /* 3 - DPAC 802.11bg */
835 RADIOTYPE_LAST
837 radioType_e;
838 #endif
840 typedef enum
842 RESPONSETYPE_OK = 0, /* 0 - All is well */
843 RESPONSETYPE_ERROR, /* 1 - Generic error */
844 RESPONSETYPE_HASDATA, /* 2 - Response has data */
845 RESPONSETYPE_NOHANDLER, /* 3 - Command requested with no handler (internal error) */
846 RESPONSETYPE_NOSESSION, /* 4 - No session established */
847 RESPONSETYPE_BADCOMMAND, /* 5 - Bad command value */
848 RESPONSETYPE_BADPARAMETER, /* 6 - Bad parameter (can mean a lot of things) */
849 RESPONSETYPE_BADPARAMETERLEN, /* 7 - Bad parameter length (too short, too long) */
850 RESPONSETYPE_MISSINGPARAMETER, /* 8 - Missing parameter (something was required, what'd you forget?) */
851 RESPONSETYPE_DUPLICATEPARAMETER, /* 9 - Parameter supplied more than once (D'oh!) */
852 RESPONSETYPE_PARAMETERCONFLICT, /* 10 - Parameters conflict (usually mutually exclusive items) */
853 RESPONSETYPE_BADDEVICE, /* 11 - Bad device (command came from a device that's not allowed) */
854 RESPONSETYPE_NVRAMERROR, /* 12 - Hardware problem... */
855 RESPONSETYPE_NVRAMERRORNOACK, /* 13 - Hardware problem... */
856 RESPONSETYPE_NVRAMERRORNOACK32, /* 14 - Hardware problem... */
857 RESPONSETYPE_NOTI2CADDRESS, /* 15 - Illegal I2C address in i2cStart */
858 RESPONSETYPE_FIRMWAREERROR, /* 16 - Generic firmware upload error (can mean lots of things) */
859 RESPONSETYPE_DUMPINPROGRESS, /* 17 - Can't do something, a dump is in progress */
860 RESPONSETYPE_INTERNALERROR, /* 18 - Something Bad Happened(tm) */
861 RESPONSETYPE_NOTIMPLEMENTED, /* 19 - Command or function not implemented */
862 RESPONSETYPE_PINFORMATERROR, /* 20 - Error in formatting of PIN (non hex character) */
863 RESPONSETYPE_PINEXISTS, /* 21 - PIN already exists in database */
864 RESPONSETYPE_PINNOTFOUND, /* 22 - PIN wasn't found (actionManageUsers) */
865 RESPONSETYPE_USERACTIVE, /* 23 - The record for this user is active (not deleted or free) */
866 RESPONSETYPE_USERINACTIVE, /* 24 - The record for this user is inactive (not in use) */
867 RESPONSETYPE_PARENTNOTFOUND, /* 25 - Users parent couldn't be found (used internally by dbmgr.c) */
868 RESPONSETYPE_NOCHAIN, /* 26 - No users in chain (used internally by dbmgr.c) */
869 RESPONSETYPE_CAUGHTINLOOP, /* 27 - Caught in a loop somewhere */
870 RESPONSETYPE_EVENTFILTERED, /* 28 - Event record was filtered (eventlog.c) */
871 RESPONSETYPE_PAYLOADTOOLARGE, /* 29 - Message payload too large (protocol.c) */
872 RESPONSETYPE_ENDOFDATA, /* 30 - No more data (used internally by eventlog.c) */
873 RESPONSETYPE_RMTAUTHREJECTED, /* 31 - Remote authorization rejected (lockmgr.c) */
874 RESPONSETYPE_NVRAMVERSIONERROR, /* 32 - NVRAM version doesn't match expected value */
875 RESPONSETYPE_NOHARDWARE, /* 33 - Operation requested for unsupported hardware */
876 RESPONSETYPE_SCHEDULERCONFLICT, /* 34 - Scheduler not in correct mode for this operation */
877 RESPONSETYPE_NVRAMWRITEERROR, /* 35 - NVRAM write compare error */
878 RESPONSETYPE_DECLINEDFILTERED, /* 36 - Declined record was filtered (declinedlog.c) */
879 RESPONSETYPE_NECONFIGPARM, /* 37 - Non-existent configuration parameter */
880 RESPONSETYPE_FLASHERASEERROR, /* 38 - Error erasing FLASH */
881 RESPONSETYPE_FLASHWRITEERROR, /* 39 - Error writing FLASH */
882 RESPONSETYPE_BADNVBACKUP, /* 40 - NVBackup length doesn't match sizeof (configParametersNV_t) */
883 RESPONSETYPE_EARLYACK, /* 41 - Sent prior to long commands if CONFIGITEM_EARLYACK set */
884 RESPONSETYPE_ALARMFILTERED, /* 42 - Alarm record was filtered (alarm.c) */
885 RESPONSETYPE_ACVFAILURE, /* 43 - Auxiliary controller version request failure */
886 RESPONSETYPE_USERCHECKSUMERROR, /* 44 - User checksum value error */
887 RESPONSETYPE_CHECKSUMERROR, /* 45 - Generic checksum error */
888 RESPONSETYPE_RTCSQWFAILURE, /* 46 - RTC isn't generating square wave */
889 RESPONSETYPE_PRIORITYSHUTDOWN, /* 47 - Session terminated early because lock has priority over communications */
890 RESPONSETYPE_NOTMODIFIABLE, /* 48 - Configuration parameter is not user modifiable */
891 RESPONSETYPE_CANTPRESERVE, /* 49 - Can't preserve configuration (config.c, not enough space) */
892 RESPONSETYPE_INPASSAGEMODE, /* 50 - Lock is in passage mode, can't do remote unlock */
893 RESPONSETYPE_LAST
894 #if 0
897 * These should not be exposed to the user
899 RESPONSETYPE_NOREPLY, /* 51 - Do not send a reply, subroutine is posting its own */
900 RESPONSETYPE_TAKEABREAK, /* 52 - Intermediate return result, when log searches taking too long */
901 RESPONSETYPE_DPACBLOCKS, /* 53 - PWM lock, battery powered, DPAC takes priority */
902 RESPONSETYPE_ACKNAKTIMEOUT, /* 54 - Added for console.c, not used in lock firmware */
903 RESPONSETYPE_UNKNOWNCPUSPEED /* 55 - Unknown CPU speed (utils.c, utilCalculateClockRate()) */
904 #endif
906 responseType_e;
908 #if 0
909 typedef enum
911 SCHEDULERTYPE_HARDON = 0, /* 0 - Radio is always on */
912 SCHEDULERTYPE_SIMPLE, /* 1 - Simple 'x' minutes off, 'y' seconds on scheduler */
913 SCHEDULERTYPE_DOM, /* 2 - Day of month scheduling */
914 SCHEDULERTYPE_DOW, /* 3 - Day of week scheduling */
915 SCHEDULERTYPE_COMMUSER, /* 4 - Only a comm user triggers power on */
916 SCHEDULERTYPE_HOD, /* 5 - Hour of day scheduling */
917 SCHEDULERTYPE_OFF, /* 6 - Nothing wakes up radio */
918 SCHEDULERTYPE_LAST
920 schedulerType_e;
921 #endif
923 typedef enum
925 TIMEZONEMODE_NORMAL = 0, /* 0 - Timezone is applied to user, no auto unlocking */
926 TIMEZONEMODE_EXCLUSION, /* 1 - User NOT permitted access if in this zone at this time */
927 TIMEZONEMODE_AUTOTIME, /* 2 - Auto unlock at the start of the TZ, lock at end */
928 TIMEZONEMODE_AUTOFPT, /* 3 - Unlock on first person through, lock at end */
929 TIMEZONEMODE_UAPM, /* 4 - Permits user activated passage mode when active */
930 TIMEZONEMODE_LAST
932 timeZoneMode_e;
934 #if 0
935 typedef enum
937 UNLOCKMODE_NORMAL = 0, /* 0 - Normal unlock (CONFIGITEM_UNLOCK_TIME duration) */
938 UNLOCKMODE_UNLOCK, /* 1 - Unlock, switching to passage mode */
939 UNLOCKMODE_LOCK, /* 2 - Lock, regardless of mode */
940 UNLOCKMODE_LAST
942 unlockMode_e;
943 #endif
945 /* XXX: enum vals don't all match vals in comments ??? */
946 typedef enum
948 UPSTREAMCOMMAND_RESERVED = 0, /* 0 - Not used */
949 UPSTREAMCOMMAND_DEBUGMSG, /* 1 - Debug message (zero terminated) */
950 UPSTREAMCOMMAND_QUERYVERSION, /* 2 - Version string (zero terminated) */
951 UPSTREAMCOMMAND_QUERYDATETIME, /* 3 - Current date/time */
952 UPSTREAMCOMMAND_QUERYSERIALNUMBER, /* 5 - Serial number (MAX_SERIALNUM_LENGTH bytes) */
953 UPSTREAMCOMMAND_DUMPEVENTLOG, /* 6 - Event log record */
954 UPSTREAMCOMMAND_DUMPNVRAM, /* 7 - NVRAM dump record */
955 UPSTREAMCOMMAND_RMTAUTHREQUEST, /* 8 - Remote authorization request */
956 UPSTREAMCOMMAND_RETRIEVEUSER, /* 9 - Retrieve user record */
957 UPSTREAMCOMMAND_QUERYCONFIG, /* 10 - Query configuration */
958 UPSTREAMCOMMAND_RMTEVENTLOGRECORD, /* 11 - Remote event log record */
959 UPSTREAMCOMMAND_DPAC, /* 12 - DPAC related message */
960 UPSTREAMCOMMAND_NOTIFY, /* 14 - Notify user message */
961 UPSTREAMCOMMAND_MFG, /* 15 - Manufacturing data */
962 UPSTREAMCOMMAND_EVENTLOGWARNING, /* 16 - Event log warning level message */
963 UPSTREAMCOMMAND_DUMPNVRAMRLE, /* 17 - Run Length Encoded (RLE) NVRAM dump record */
964 UPSTREAMCOMMAND_RMTDECLINEDRECORD, /* 18 - Remote declined log record */
965 UPSTREAMCOMMAND_DECLINEDWARNING, /* 19 - Declined log warning level message */
966 UPSTREAMCOMMAND_DUMPDECLINEDLOG, /* 20 - Declined log record dump */
967 UPSTREAMCOMMAND_RMTALARMRECORD, /* 21 - Remote alarm log record */
968 UPSTREAMCOMMAND_ALARMWARNING, /* 22 - Alarm log warning level message */
969 UPSTREAMCOMMAND_DUMPALARMLOG, /* 23 - Alarm log record dump */
970 UPSTREAMCOMMAND_CONNECTSCHEDULER, /* 24 - Connection because of scheduler, contains serial number */
971 UPSTREAMCOMMAND_CONNECTCOMMUSER, /* 25 - Connection because of comm user, contains serial number */
972 UPSTREAMCOMMAND_CONNECTALARM, /* 26 - Connection because of alarm event, contains serial number */
973 UPSTREAMCOMMAND_DUMPDEBUGLOG, /* 27 - Debug log dump record */
974 UPSTREAMCOMMAND_LAST
976 upstreamCommand_e;
978 /* XXX: enum vals don't all match vals in comments ??? */
979 typedef enum
981 UPSTREAMFIELD_NOTUSED = 0, /* 0 - Not used */
982 UPSTREAMFIELD_SERIALNUMBER, /* 1 - Contains unit serial number */
983 UPSTREAMFIELD_NAR, /* 2 - Contains 16 bit Next Available Record */
984 UPSTREAMFIELD_ENTRYDEVICE, /* 3 - Contains a ppmSource_e */
985 UPSTREAMFIELD_PPMIFIELDTYPE, /* 4 - Contains a type of _PIN (auxFieldType_e) */
986 UPSTREAMFIELD_PIN, /* 5 - Contains a PIN, Prox, mag key */
987 UPSTREAMFIELD_SEQUENCENUMBER, /* 6 - Contains 16 bit sequence number */
988 UPSTREAMFIELD_RESPONSEWINDOW, /* 7 - Contains 8 bit response window (number of seconds) */
989 UPSTREAMFIELD_USERNUMBER, /* 8 - Contains 16 bit user number */
990 UPSTREAMFIELD_VERSION, /* 9 - Contains version string */
991 UPSTREAMFIELD_EVENTLOGRECORD, /* 10 - Contains eventLog_e event log record */
992 UPSTREAMFIELD_DATETIME, /* 11 - Contains 8 byte date/time data */
993 UPSTREAMFIELD_EVENTLOGRECORDCOUNT, /* 17 - Contains number of event log records */
994 UPSTREAMFIELD_DECLINEDRECORDCOUNT, /* 20 - Contains number of declined log records */
995 UPSTREAMFIELD_DECLINEDRECORD, /* 21 - Contains declinedLog_t declined log record */
996 UPSTREAMFIELD_USERTYPE, /* 23 - Contains the user type (master, emergency, normal, etc) */
997 UPSTREAMFIELD_ACCESSALWAYS, /* 24 - Contains the access always mode (true, false) */
998 UPSTREAMFIELD_CACHED, /* 25 - Contains the cached flag (true, false) */
999 UPSTREAMFIELD_PRIMARYFIELDTYPE, /* 26 - Contains the primary field type (pin, prox, mag) */
1000 UPSTREAMFIELD_AUXFIELDTYPE, /* 27 - Contains the aux field type (pin, prox, mag) */
1001 UPSTREAMFIELD_ACCESSMODE, /* 28 - Contains the access mode (aux only, aux + pin, aux or pin, etc) */
1002 UPSTREAMFIELD_EXPIREON, /* 29 - Contains the date the user expires on (00/00/00 if not set) */
1003 UPSTREAMFIELD_USECOUNT, /* 30 - Contains the use count (if user type is ONE_TIME) */
1004 UPSTREAMFIELD_TIMEZONE, /* 31 - Contains the timezone bit map */
1005 UPSTREAMFIELD_EXCEPTIONGROUP, /* 32 - Contains the exception group */
1006 UPSTREAMFIELD_PRIMARYPIN, /* 33 - Contains the primary PPMI (ASCII, 0 terminated) */
1007 UPSTREAMFIELD_AUXPIN, /* 34 - Contains the aux PPMI (ASCII, 0 terminated) */
1008 UPSTREAMFIELD_ALARMRECORDCOUNT, /* 35 - Contains number of alarm log records */
1009 UPSTREAMFIELD_ALARMRECORD, /* 36 - Contains alarmLog_t alarm log record */
1010 UPSTREAMFIELD_AUXCTLRVERSION, /* 37 - Contains the version number of the auxiliary controller */
1011 UPSTREAMFIELD_LAST
1013 upstreamField_e;
1015 typedef enum
1017 USERTYPE_NONE = 0, /* 0 - No user */
1018 USERTYPE_MASTER, /* 1 - Master user (clears panic, relock, lockout and auto open) */
1019 USERTYPE_EMERGENCY, /* 2 - Opens door regardless of state */
1020 USERTYPE_SUPERVISOR, /* 3 - Like emergency user, except won't unlock when in panic mode */
1021 USERTYPE_USER, /* 4 - Generic user */
1022 USERTYPE_EXTENDED, /* 5 - Same as _USER, but strike can be kept open longer */
1023 USERTYPE_PASSAGE, /* 6 - Toggles strike between passage and non-passage modes */
1024 USERTYPE_ONETIME, /* 7 - User may be used one time */
1025 USERTYPE_PANIC, /* 8 - Locks down locks, no user except master valid */
1026 USERTYPE_LOCKOUT, /* 9 - Locks out regular, extended, passage, one time, and notify users */
1027 USERTYPE_RELOCK, /* 10 - Relock cancels passage mode, but can't unlock */
1028 USERTYPE_NOTIFY, /* 11 - Same as _USER, only sends unsolicited message to server */
1029 USERTYPE_COMM, /* 12 - Kicks a communications sessions off if not running _HARDON scheduler */
1030 USERTYPE_SUSPENDED, /* 13 - User is suspended */
1031 USERTYPE_LAST
1033 userType_e;
1037 * Wireshark ID of the R3 protocol
1039 static gint proto_r3 = -1;
1042 * Packet variables
1044 static gint hf_r3_tildex3ds = -1; /* Got ~~~ds */
1046 static gint hf_r3_header = -1; /* Packet header */
1047 static gint hf_r3_payload = -1; /* Packet payload */
1048 static gint hf_r3_tail = -1; /* Packet tail */
1050 static gint hf_r3_sigil = -1; /* Packet sigil */
1051 static gint hf_r3_address = -1; /* Packet address */
1052 static gint hf_r3_packetnumber = -1; /* Packet number */
1053 static gint hf_r3_packetlength = -1; /* Packet length */
1054 static gint hf_r3_encryption = -1; /* Packet encryption scheme */
1055 static gint hf_r3_crc = -1; /* Packet CRC */
1056 static gint hf_r3_crc_bad = -1; /* Packet CRC bad (for filtering) */
1057 static gint hf_r3_xor = -1; /* Packet Xor */
1058 static gint hf_r3_xor_bad = -1; /* Packet Xor bad (for filtering) */
1060 static gint hf_r3_commandlength = -1; /* Command length */
1061 static gint hf_r3_command = -1; /* Command (cmdCommand_e) */
1062 static gint hf_r3_commanddata = -1; /* Command data (not always present) */
1064 static gint hf_r3_commandmfglength = -1; /* Mfg Command length */
1065 static gint hf_r3_commandmfg = -1; /* Mfg Command (cmdCommand_e) */
1066 /*static gint hf_r3_commandmfgdata = -1;*/ /* Mfg Command data (not always present) */
1068 static gint hf_r3_responselength = -1; /* Response length */
1069 static gint hf_r3_responsecommand = -1; /* Response command */
1070 static gint hf_r3_responsetype = -1; /* Response type (responseType_e) */
1071 static gint hf_r3_responsetocommand = -1; /* Response to command (cmdCommand_e) */
1072 /*static gint hf_r3_responsedata = -1;*/ /* Response data (not always present) */
1074 static gint hf_r3_upstreamcommand = -1;
1076 static gint hf_r3_upstreamfield = -1; /* Upstream field (length + type + data) */
1077 static gint hf_r3_upstreamfieldlength = -1; /* Upstream field length */
1078 static gint hf_r3_upstreamfieldtype = -1; /* Upstream field type (upstreamField_e) */
1079 /*static gint hf_r3_upstreamfielddatalen = -1;*/ /* Upstream field data length */
1080 static gint hf_r3_upstreamfielderror = -1; /* Upstream field is unknown type */
1081 static gint hf_r3_upstreamfieldarray[UPSTREAMFIELD_LAST];
1083 static gint hf_r3_configitems = -1;
1084 static gint hf_r3_configitem = -1;
1085 /*static gint hf_r3_configfield = -1;*/
1086 static gint hf_r3_configitemlength = -1;
1087 static gint hf_r3_configitemtype = -1;
1088 static gint hf_r3_configitemdata = -1;
1089 static gint hf_r3_configitemdata_bool = -1;
1090 static gint hf_r3_configitemdata_8 = -1;
1091 static gint hf_r3_configitemdata_16 = -1;
1092 static gint hf_r3_configitemdata_32 = -1;
1093 static gint hf_r3_configitemdata_string = -1;
1095 static gint hf_r3_timezonearray [32];
1097 static gint hf_r3_expireon_year = -1;
1098 static gint hf_r3_expireon_month = -1;
1099 static gint hf_r3_expireon_day = -1;
1101 static gint hf_r3_datetime_year = -1;
1102 static gint hf_r3_datetime_month = -1;
1103 static gint hf_r3_datetime_day = -1;
1104 static gint hf_r3_datetime_dow = -1;
1105 static gint hf_r3_datetime_hours = -1;
1106 static gint hf_r3_datetime_minutes = -1;
1107 static gint hf_r3_datetime_seconds = -1;
1108 static gint hf_r3_datetime_dst = -1;
1110 static gint hf_r3_eventlog_recordnumber = -1;
1111 static gint hf_r3_eventlog_year = -1;
1112 static gint hf_r3_eventlog_month = -1;
1113 static gint hf_r3_eventlog_day = -1;
1114 static gint hf_r3_eventlog_hour = -1;
1115 static gint hf_r3_eventlog_minute = -1;
1116 static gint hf_r3_eventlog_second = -1;
1117 static gint hf_r3_eventlog_usernumber = -1;
1118 static gint hf_r3_eventlog_event = -1;
1120 static gint hf_r3_declinedlog_recordnumber = -1;
1121 static gint hf_r3_declinedlog_year = -1;
1122 static gint hf_r3_declinedlog_month = -1;
1123 static gint hf_r3_declinedlog_day = -1;
1124 static gint hf_r3_declinedlog_hour = -1;
1125 static gint hf_r3_declinedlog_minute = -1;
1126 static gint hf_r3_declinedlog_second = -1;
1127 static gint hf_r3_declinedlog_usernumber = -1;
1128 static gint hf_r3_declinedlog_cred1type = -1;
1129 static gint hf_r3_declinedlog_cred2type = -1;
1130 static gint hf_r3_declinedlog_cred1 = -1;
1131 static gint hf_r3_declinedlog_cred2 = -1;
1133 static gint hf_r3_alarmlog_recordnumber = -1;
1134 static gint hf_r3_alarmlog_year = -1;
1135 static gint hf_r3_alarmlog_month = -1;
1136 static gint hf_r3_alarmlog_day = -1;
1137 static gint hf_r3_alarmlog_hour = -1;
1138 static gint hf_r3_alarmlog_minute = -1;
1139 static gint hf_r3_alarmlog_second = -1;
1140 static gint hf_r3_alarmlog_id = -1;
1141 static gint hf_r3_alarmlog_usernumber = -1;
1143 static gint hf_r3_debugmsg = -1;
1145 static gint hf_r3_setdate_year = -1;
1146 static gint hf_r3_setdate_month = -1;
1147 static gint hf_r3_setdate_day = -1;
1148 static gint hf_r3_setdate_dow = -1;
1149 static gint hf_r3_setdate_hours = -1;
1150 static gint hf_r3_setdate_minutes = -1;
1151 static gint hf_r3_setdate_seconds = -1;
1153 static gint hf_r3_deleteusers = -1;
1155 static gint hf_r3_defineexception_number = -1;
1156 static gint hf_r3_defineexception_startdate_month = -1;
1157 static gint hf_r3_defineexception_startdate_day = -1;
1158 static gint hf_r3_defineexception_startdate_hours = -1;
1159 static gint hf_r3_defineexception_startdate_minutes = -1;
1160 static gint hf_r3_defineexception_enddate_month = -1;
1161 static gint hf_r3_defineexception_enddate_day = -1;
1162 static gint hf_r3_defineexception_enddate_hours = -1;
1163 static gint hf_r3_defineexception_enddate_minutes = -1;
1165 static gint hf_r3_defineexceptiongroup_number = -1;
1166 static gint hf_r3_defineexceptiongroup_bits = -1;
1168 static gint hf_r3_definecalendar_number = -1;
1169 static gint hf_r3_definecalendar_bits = -1;
1171 static gint hf_r3_definetimezone_number = -1;
1172 static gint hf_r3_definetimezone_starttime_hours = -1;
1173 static gint hf_r3_definetimezone_starttime_minutes = -1;
1174 static gint hf_r3_definetimezone_endtime_hours = -1;
1175 static gint hf_r3_definetimezone_endtime_minutes = -1;
1176 static gint hf_r3_definetimezone_daymap [7];
1177 static gint hf_r3_definetimezone_exceptiongroup = -1;
1178 static gint hf_r3_definetimezone_mode = -1;
1179 static gint hf_r3_definetimezone_calendar = -1;
1181 static gint hf_r3_rmtauthretry_sequence = -1;
1182 static gint hf_r3_rmtauthretry_retry = -1;
1184 static gint hf_r3_eventlogdump_starttime_year = -1;
1185 static gint hf_r3_eventlogdump_starttime_month = -1;
1186 static gint hf_r3_eventlogdump_starttime_day = -1;
1187 static gint hf_r3_eventlogdump_starttime_hours = -1;
1188 static gint hf_r3_eventlogdump_starttime_minutes = -1;
1189 static gint hf_r3_eventlogdump_endtime_year = -1;
1190 static gint hf_r3_eventlogdump_endtime_month = -1;
1191 static gint hf_r3_eventlogdump_endtime_day = -1;
1192 static gint hf_r3_eventlogdump_endtime_hours = -1;
1193 static gint hf_r3_eventlogdump_endtime_minutes = -1;
1194 static gint hf_r3_eventlogdump_user = -1;
1196 static gint hf_r3_declinedlogdump_starttime_year = -1;
1197 static gint hf_r3_declinedlogdump_starttime_month = -1;
1198 static gint hf_r3_declinedlogdump_starttime_day = -1;
1199 static gint hf_r3_declinedlogdump_starttime_hours = -1;
1200 static gint hf_r3_declinedlogdump_starttime_minutes = -1;
1201 static gint hf_r3_declinedlogdump_endtime_year = -1;
1202 static gint hf_r3_declinedlogdump_endtime_month = -1;
1203 static gint hf_r3_declinedlogdump_endtime_day = -1;
1204 static gint hf_r3_declinedlogdump_endtime_hours = -1;
1205 static gint hf_r3_declinedlogdump_endtime_minutes = -1;
1207 static gint hf_r3_alarmlogdump_starttime_year = -1;
1208 static gint hf_r3_alarmlogdump_starttime_month = -1;
1209 static gint hf_r3_alarmlogdump_starttime_day = -1;
1210 static gint hf_r3_alarmlogdump_starttime_hours = -1;
1211 static gint hf_r3_alarmlogdump_starttime_minutes = -1;
1212 static gint hf_r3_alarmlogdump_endtime_year = -1;
1213 static gint hf_r3_alarmlogdump_endtime_month = -1;
1214 static gint hf_r3_alarmlogdump_endtime_day = -1;
1215 static gint hf_r3_alarmlogdump_endtime_hours = -1;
1216 static gint hf_r3_alarmlogdump_endtime_minutes = -1;
1218 static gint hf_r3_nvramclearoptions [16];
1220 static gint hf_r3_writeeventlog_user = -1;
1221 static gint hf_r3_writeeventlog_event = -1;
1223 static gint hf_r3_powertableselection = -1;
1225 static gint hf_r3_filter_type = -1;
1226 static gint hf_r3_filter_list = -1;
1228 static gint hf_r3_alarm_length = -1;
1229 static gint hf_r3_alarm_id = -1;
1230 static gint hf_r3_alarm_state = -1;
1232 static gint hf_r3_dpac_action = -1;
1233 static gint hf_r3_dpac_waittime = -1;
1234 static gint hf_r3_dpac_command = -1;
1236 static gint hf_r3_dpacreply_stuff = -1;
1237 static gint hf_r3_dpacreply_length = -1;
1238 static gint hf_r3_dpacreply_reply = -1;
1240 static gint hf_r3_mfgfield_length = -1;
1241 static gint hf_r3_mfgfield = -1;
1242 /*static gint hf_r3_mfgfield_data = -1;*/
1244 static gint hf_r3_mfgsetserialnumber = -1;
1245 static gint hf_r3_mfgsetcryptkey = -1;
1246 static gint hf_r3_mfgdumpnvram = -1;
1247 static gint hf_r3_mfgremoteunlock = -1;
1248 static gint hf_r3_mfgtestpreserve = -1;
1250 static gint hf_r3_adc [8];
1252 static gint hf_r3_hardwareid_board = -1;
1253 static gint hf_r3_hardwareid_cpuid = -1;
1254 static gint hf_r3_hardwareid_cpurev = -1;
1256 static gint hf_r3_testkeypad = -1;
1257 static gint hf_r3_testmagcard = -1;
1258 static gint hf_r3_testproxcard = -1;
1260 static gint hf_r3_nvramdump_record = -1;
1261 static gint hf_r3_nvramdump_length = -1;
1262 static gint hf_r3_nvramdump_data = -1;
1264 static gint hf_r3_nvramdumprle_record = -1;
1265 static gint hf_r3_nvramdumprle_length = -1;
1266 static gint hf_r3_nvramdumprle_data = -1;
1268 static gint hf_r3_iopins_lat = -1;
1269 static gint hf_r3_iopins_port = -1;
1270 static gint hf_r3_iopins_tris = -1;
1272 static gint hf_r3_mortisepins_s1 = -1;
1273 static gint hf_r3_mortisepins_s2 = -1;
1274 static gint hf_r3_mortisepins_s3 = -1;
1275 static gint hf_r3_mortisepins_s4 = -1;
1277 static gint hf_r3_checksumresults = -1;
1278 static gint hf_r3_checksumresults_field = -1;
1279 static gint hf_r3_checksumresults_length = -1;
1280 static gint hf_r3_checksumresults_state = -1;
1282 static gint hf_r3_forceoptions_length = -1;
1283 static gint hf_r3_forceoptions_item = -1;
1284 static gint hf_r3_forceoptions_state_8= -1;
1285 static gint hf_r3_forceoptions_state_16 = -1;
1286 static gint hf_r3_forceoptions_state_24 = -1;
1287 static gint hf_r3_forceoptions_state_32 = -1;
1289 static gint hf_r3_peekpoke_operation = -1;
1290 static gint hf_r3_peekpoke_address = -1;
1291 static gint hf_r3_peekpoke_length = -1;
1292 static gint hf_r3_peekpoke_poke8 = -1;
1293 static gint hf_r3_peekpoke_poke16 = -1;
1294 static gint hf_r3_peekpoke_poke24 = -1;
1295 static gint hf_r3_peekpoke_poke32 = -1;
1296 static gint hf_r3_peekpoke_pokestring = -1;
1298 static gint hf_r3_firmwaredownload_length = -1;
1299 static gint hf_r3_firmwaredownload_record = -1;
1300 static gint hf_r3_firmwaredownload_action = -1;
1301 static gint hf_r3_firmwaredownload_timeout = -1;
1302 static gint hf_r3_firmwaredownload_nvram = -1;
1303 static gint hf_r3_firmwaredownload_address = -1;
1304 static gint hf_r3_firmwaredownload_bytes = -1;
1305 static gint hf_r3_firmwaredownload_data = -1;
1306 static gint hf_r3_firmwaredownload_crc = -1;
1307 static gint hf_r3_firmwaredownload_crc_bad = -1;
1309 static gint hf_r3_nvramchecksumvalue = -1;
1310 static gint hf_r3_nvramchecksumvalue_fixup = -1;
1312 static gint hf_r3_capabilities = -1;
1313 static gint hf_r3_capabilities_length = -1;
1314 static gint hf_r3_capabilities_type = -1;
1315 static gint hf_r3_capabilities_value = -1;
1317 static gint hf_r3_lockstate_passage = -1;
1318 static gint hf_r3_lockstate_panic = -1;
1319 static gint hf_r3_lockstate_lockout = -1;
1320 static gint hf_r3_lockstate_relock = -1;
1321 static gint hf_r3_lockstate_autoopen = -1;
1322 static gint hf_r3_lockstate_nextauto = -1;
1323 static gint hf_r3_lockstate_lockstate = -1;
1324 static gint hf_r3_lockstate_wantstate = -1;
1325 static gint hf_r3_lockstate_remote = -1;
1326 static gint hf_r3_lockstate_update = -1;
1327 static gint hf_r3_lockstate_exceptionspresent = -1;
1328 static gint hf_r3_lockstate_exceptionsactive = -1;
1329 static gint hf_r3_lockstate_timezonespresent = -1;
1330 static gint hf_r3_lockstate_timezonesactive = -1;
1331 static gint hf_r3_lockstate_autounlockspresent = -1;
1332 static gint hf_r3_lockstate_autounlocksactive = -1;
1333 static gint hf_r3_lockstate_uapmspresent = -1;
1334 static gint hf_r3_lockstate_uapmsactive = -1;
1335 static gint hf_r3_lockstate_uapmrelockspresent = -1;
1336 static gint hf_r3_lockstate_uapmreslocksactive = -1;
1337 static gint hf_r3_lockstate_nvramprotect = -1;
1338 static gint hf_r3_lockstate_nvramchecksum = -1;
1340 /*static gint hf_r3_mortisestatelog = -1;*/
1341 static gint hf_r3_mortisestatelog_pointer = -1;
1342 static gint hf_r3_mortisestatelog_mortisetype = -1;
1343 static gint hf_r3_mortisestatelog_waiting = -1;
1344 static gint hf_r3_mortisestatelog_state = -1;
1345 static gint hf_r3_mortisestatelog_last = -1;
1346 static gint hf_r3_mortisestatelog_event = -1;
1348 static gint hf_r3_timerchain_newtick = -1;
1349 static gint hf_r3_timerchain_currentboundary = -1;
1350 static gint hf_r3_timerchain_tasktag = -1;
1351 static gint hf_r3_timerchain_address = -1;
1352 static gint hf_r3_timerchain_reload = -1;
1353 static gint hf_r3_timerchain_boundary = -1;
1354 static gint hf_r3_timerchain_count = -1;
1355 static gint hf_r3_timerchain_flags = -1;
1357 static gint hf_r3_taskflags_taskid = -1;
1358 static gint hf_r3_taskflags_flags = -1;
1360 static gint hf_r3_checkpointlog_entryptr = -1;
1361 static gint hf_r3_checkpointlog_rcon = -1;
1362 static gint hf_r3_checkpointlog_checkpoint = -1;
1364 static gint hf_r3_cpuregisters_intcon = -1;
1365 static gint hf_r3_cpuregisters_intcon2 = -1;
1366 static gint hf_r3_cpuregisters_intcon3 = -1;
1367 static gint hf_r3_cpuregisters_pir1 = -1;
1368 static gint hf_r3_cpuregisters_pir2 = -1;
1369 static gint hf_r3_cpuregisters_pir3 = -1;
1370 static gint hf_r3_cpuregisters_pie1 = -1;
1371 static gint hf_r3_cpuregisters_pie2 = -1;
1372 static gint hf_r3_cpuregisters_pie3 = -1;
1373 static gint hf_r3_cpuregisters_ipr1 = -1;
1374 static gint hf_r3_cpuregisters_ipr2 = -1;
1375 static gint hf_r3_cpuregisters_ipr3 = -1;
1376 static gint hf_r3_cpuregisters_rcon = -1;
1377 static gint hf_r3_cpuregisters_osccon = -1;
1378 static gint hf_r3_cpuregisters_rcsta = -1;
1379 static gint hf_r3_cpuregisters_txsta = -1;
1380 static gint hf_r3_cpuregisters_rcsta2 = -1;
1381 static gint hf_r3_cpuregisters_txsta2 = -1;
1382 static gint hf_r3_cpuregisters_wdtcon = -1;
1384 static gint hf_r3_cpuregisters_intcon_rbif = -1;
1385 static gint hf_r3_cpuregisters_intcon_int0if = -1;
1386 static gint hf_r3_cpuregisters_intcon_tmr0if = -1;
1387 static gint hf_r3_cpuregisters_intcon_rbie = -1;
1388 static gint hf_r3_cpuregisters_intcon_int0ie = -1;
1389 static gint hf_r3_cpuregisters_intcon_tmr0ie = -1;
1390 static gint hf_r3_cpuregisters_intcon_giel = -1;
1391 static gint hf_r3_cpuregisters_intcon_gieh = -1;
1392 static gint hf_r3_cpuregisters_intcon2_rbip = -1;
1393 static gint hf_r3_cpuregisters_intcon2_int3ip = -1;
1394 static gint hf_r3_cpuregisters_intcon2_tmr0ip = -1;
1395 static gint hf_r3_cpuregisters_intcon2_intedg3 = -1;
1396 static gint hf_r3_cpuregisters_intcon2_intedg2 = -1;
1397 static gint hf_r3_cpuregisters_intcon2_intedg1 = -1;
1398 static gint hf_r3_cpuregisters_intcon2_intedg0 = -1;
1399 static gint hf_r3_cpuregisters_intcon2_rbpu = -1;
1400 static gint hf_r3_cpuregisters_intcon3_int1if = -1;
1401 static gint hf_r3_cpuregisters_intcon3_int2if = -1;
1402 static gint hf_r3_cpuregisters_intcon3_int3if = -1;
1403 static gint hf_r3_cpuregisters_intcon3_int1ie = -1;
1404 static gint hf_r3_cpuregisters_intcon3_int2ie = -1;
1405 static gint hf_r3_cpuregisters_intcon3_int3ie = -1;
1406 static gint hf_r3_cpuregisters_intcon3_int1ip = -1;
1407 static gint hf_r3_cpuregisters_intcon3_int2ip = -1;
1408 static gint hf_r3_cpuregisters_pir1_tmr1if = -1;
1409 static gint hf_r3_cpuregisters_pir1_tmr2if = -1;
1410 static gint hf_r3_cpuregisters_pir1_ccp1if = -1;
1411 static gint hf_r3_cpuregisters_pir1_ssp1if = -1;
1412 static gint hf_r3_cpuregisters_pir1_tx1if = -1;
1413 static gint hf_r3_cpuregisters_pir1_rc1if = -1;
1414 static gint hf_r3_cpuregisters_pir1_adif = -1;
1415 static gint hf_r3_cpuregisters_pir1_pspif = -1;
1416 static gint hf_r3_cpuregisters_pir2_ccp2if = -1;
1417 static gint hf_r3_cpuregisters_pir2_tmr3if = -1;
1418 static gint hf_r3_cpuregisters_pir2_hlvdif = -1;
1419 static gint hf_r3_cpuregisters_pir2_bcl1if = -1;
1420 static gint hf_r3_cpuregisters_pir2_eeif = -1;
1421 static gint hf_r3_cpuregisters_pir2_unused5 = -1;
1422 static gint hf_r3_cpuregisters_pir2_cmif = -1;
1423 static gint hf_r3_cpuregisters_pir2_oscfif = -1;
1424 static gint hf_r3_cpuregisters_pir3_ccp3if = -1;
1425 static gint hf_r3_cpuregisters_pir3_ccp4if = -1;
1426 static gint hf_r3_cpuregisters_pir3_ccp5if = -1;
1427 static gint hf_r3_cpuregisters_pir3_tmr4if = -1;
1428 static gint hf_r3_cpuregisters_pir3_tx2if = -1;
1429 static gint hf_r3_cpuregisters_pir3_rc2if = -1;
1430 static gint hf_r3_cpuregisters_pir3_bcl2if = -1;
1431 static gint hf_r3_cpuregisters_pir3_ssp2if = -1;
1432 static gint hf_r3_cpuregisters_pie1_tmr1ie = -1;
1433 static gint hf_r3_cpuregisters_pie1_tmr2ie = -1;
1434 static gint hf_r3_cpuregisters_pie1_ccp1ie = -1;
1435 static gint hf_r3_cpuregisters_pie1_ssp1ie = -1;
1436 static gint hf_r3_cpuregisters_pie1_tx1ie = -1;
1437 static gint hf_r3_cpuregisters_pie1_rc1ie = -1;
1438 static gint hf_r3_cpuregisters_pie1_adie = -1;
1439 static gint hf_r3_cpuregisters_pie1_pspie = -1;
1440 static gint hf_r3_cpuregisters_pie2_oscfie = -1;
1441 static gint hf_r3_cpuregisters_pie2_cmie = -1;
1442 static gint hf_r3_cpuregisters_pie2_unused2 = -1;
1443 static gint hf_r3_cpuregisters_pie2_eeie = -1;
1444 static gint hf_r3_cpuregisters_pie2_bcl1ie = -1;
1445 static gint hf_r3_cpuregisters_pie2_hlvdie = -1;
1446 static gint hf_r3_cpuregisters_pie2_tmr3ie = -1;
1447 static gint hf_r3_cpuregisters_pie2_ccp2ie = -1;
1448 static gint hf_r3_cpuregisters_pie3_ccp3ie = -1;
1449 static gint hf_r3_cpuregisters_pie3_ccp4ie = -1;
1450 static gint hf_r3_cpuregisters_pie3_ccp5ie = -1;
1451 static gint hf_r3_cpuregisters_pie3_tmr4ie = -1;
1452 static gint hf_r3_cpuregisters_pie3_tx2ie = -1;
1453 static gint hf_r3_cpuregisters_pie3_rc2ie = -1;
1454 static gint hf_r3_cpuregisters_pie3_bcl2ie = -1;
1455 static gint hf_r3_cpuregisters_pie3_ssp2ie = -1;
1456 static gint hf_r3_cpuregisters_ipr1_tmr1ip = -1;
1457 static gint hf_r3_cpuregisters_ipr1_tmr2ip = -1;
1458 static gint hf_r3_cpuregisters_ipr1_ccp1ip = -1;
1459 static gint hf_r3_cpuregisters_ipr1_ssp1ip = -1;
1460 static gint hf_r3_cpuregisters_ipr1_tx1ip = -1;
1461 static gint hf_r3_cpuregisters_ipr1_rc1ip = -1;
1462 static gint hf_r3_cpuregisters_ipr1_adip = -1;
1463 static gint hf_r3_cpuregisters_ipr1_pspip = -1;
1464 static gint hf_r3_cpuregisters_ipr2_ccp2ip = -1;
1465 static gint hf_r3_cpuregisters_ipr2_tmr3ip = -1;
1466 static gint hf_r3_cpuregisters_ipr2_hlvdip = -1;
1467 static gint hf_r3_cpuregisters_ipr2_bcl1ip = -1;
1468 static gint hf_r3_cpuregisters_ipr2_eeip = -1;
1469 static gint hf_r3_cpuregisters_ipr2_unused5 = -1;
1470 static gint hf_r3_cpuregisters_ipr2_cmip = -1;
1471 static gint hf_r3_cpuregisters_ipr2_oscfip = -1;
1472 static gint hf_r3_cpuregisters_ipr3_ccp2ip = -1;
1473 static gint hf_r3_cpuregisters_ipr3_ccp4ip = -1;
1474 static gint hf_r3_cpuregisters_ipr3_ccp5ip = -1;
1475 static gint hf_r3_cpuregisters_ipr3_tmr4ip = -1;
1476 static gint hf_r3_cpuregisters_ipr3_tx2ip = -1;
1477 static gint hf_r3_cpuregisters_ipr3_rc2ip = -1;
1478 static gint hf_r3_cpuregisters_ipr3_bcl2ip = -1;
1479 static gint hf_r3_cpuregisters_ipr3_ssp2ip = -1;
1480 static gint hf_r3_cpuregisters_rcon_bor = -1;
1481 static gint hf_r3_cpuregisters_rcon_por = -1;
1482 static gint hf_r3_cpuregisters_rcon_pd = -1;
1483 static gint hf_r3_cpuregisters_rcon_to = -1;
1484 static gint hf_r3_cpuregisters_rcon_unused4 = -1;
1485 static gint hf_r3_cpuregisters_rcon_ri = -1;
1486 static gint hf_r3_cpuregisters_rcon_sboren = -1;
1487 static gint hf_r3_cpuregisters_rcon_ipen = -1;
1488 static gint hf_r3_cpuregisters_osccon_scs0 = -1;
1489 static gint hf_r3_cpuregisters_osccon_scs1 = -1;
1490 static gint hf_r3_cpuregisters_osccon_iofs = -1;
1491 static gint hf_r3_cpuregisters_osccon_osts = -1;
1492 static gint hf_r3_cpuregisters_osccon_ircf0 = -1;
1493 static gint hf_r3_cpuregisters_osccon_ircf1 = -1;
1494 static gint hf_r3_cpuregisters_osccon_ircf2 = -1;
1495 static gint hf_r3_cpuregisters_osccon_idlen = -1;
1496 static gint hf_r3_cpuregisters_rcsta_rx9d = -1;
1497 static gint hf_r3_cpuregisters_rcsta_oerr = -1;
1498 static gint hf_r3_cpuregisters_rcsta_ferr = -1;
1499 static gint hf_r3_cpuregisters_rcsta_adden = -1;
1500 static gint hf_r3_cpuregisters_rcsta_cren = -1;
1501 static gint hf_r3_cpuregisters_rcsta_sren = -1;
1502 static gint hf_r3_cpuregisters_rcsta_rx9 = -1;
1503 static gint hf_r3_cpuregisters_rcsta_spen = -1;
1504 static gint hf_r3_cpuregisters_txsta_tx9d = -1;
1505 static gint hf_r3_cpuregisters_txsta_trmt = -1;
1506 static gint hf_r3_cpuregisters_txsta_brgh = -1;
1507 static gint hf_r3_cpuregisters_txsta_sendb = -1;
1508 static gint hf_r3_cpuregisters_txsta_sync = -1;
1509 static gint hf_r3_cpuregisters_txsta_txen = -1;
1510 static gint hf_r3_cpuregisters_txsta_tx9 = -1;
1511 static gint hf_r3_cpuregisters_txsta_csrc = -1;
1512 static gint hf_r3_cpuregisters_rcsta2_rx9d = -1;
1513 static gint hf_r3_cpuregisters_rcsta2_oerr = -1;
1514 static gint hf_r3_cpuregisters_rcsta2_ferr = -1;
1515 static gint hf_r3_cpuregisters_rcsta2_adden = -1;
1516 static gint hf_r3_cpuregisters_rcsta2_cren = -1;
1517 static gint hf_r3_cpuregisters_rcsta2_sren = -1;
1518 static gint hf_r3_cpuregisters_rcsta2_rx9 = -1;
1519 static gint hf_r3_cpuregisters_rcsta2_spen = -1;
1520 static gint hf_r3_cpuregisters_txsta2_tx9d = -1;
1521 static gint hf_r3_cpuregisters_txsta2_trmt = -1;
1522 static gint hf_r3_cpuregisters_txsta2_brgh = -1;
1523 static gint hf_r3_cpuregisters_txsta2_sendb = -1;
1524 static gint hf_r3_cpuregisters_txsta2_sync = -1;
1525 static gint hf_r3_cpuregisters_txsta2_txen = -1;
1526 static gint hf_r3_cpuregisters_txsta2_tx9 = -1;
1527 static gint hf_r3_cpuregisters_txsta2_csrc = -1;
1528 static gint hf_r3_cpuregisters_wdtcon_swdten = -1;
1529 static gint hf_r3_cpuregisters_wdtcon_unused1 = -1;
1530 static gint hf_r3_cpuregisters_wdtcon_unused2 = -1;
1531 static gint hf_r3_cpuregisters_wdtcon_unused3 = -1;
1532 static gint hf_r3_cpuregisters_wdtcon_unused4 = -1;
1533 static gint hf_r3_cpuregisters_wdtcon_unused5 = -1;
1534 static gint hf_r3_cpuregisters_wdtcon_unused6 = -1;
1535 static gint hf_r3_cpuregisters_wdtcon_unused7 = -1;
1537 static gint hf_r3_dumpm41t81_reg00 = -1;
1538 static gint hf_r3_dumpm41t81_reg01 = -1;
1539 static gint hf_r3_dumpm41t81_reg02 = -1;
1540 static gint hf_r3_dumpm41t81_reg03 = -1;
1541 static gint hf_r3_dumpm41t81_reg04 = -1;
1542 static gint hf_r3_dumpm41t81_reg05 = -1;
1543 static gint hf_r3_dumpm41t81_reg06 = -1;
1544 static gint hf_r3_dumpm41t81_reg07 = -1;
1545 static gint hf_r3_dumpm41t81_reg08 = -1;
1546 static gint hf_r3_dumpm41t81_reg09 = -1;
1547 static gint hf_r3_dumpm41t81_reg0a = -1;
1548 static gint hf_r3_dumpm41t81_reg0b = -1;
1549 static gint hf_r3_dumpm41t81_reg0c = -1;
1550 static gint hf_r3_dumpm41t81_reg0d = -1;
1551 static gint hf_r3_dumpm41t81_reg0e = -1;
1552 static gint hf_r3_dumpm41t81_reg0f = -1;
1553 static gint hf_r3_dumpm41t81_reg10 = -1;
1554 static gint hf_r3_dumpm41t81_reg11 = -1;
1555 static gint hf_r3_dumpm41t81_reg12 = -1;
1556 static gint hf_r3_dumpm41t81_reg13 = -1;
1558 static gint hf_r3_dumpm41t81_reg00_sec1 = -1;
1559 static gint hf_r3_dumpm41t81_reg00_sec01 = -1;
1560 static gint hf_r3_dumpm41t81_reg01_st = -1;
1561 static gint hf_r3_dumpm41t81_reg01_10sec = -1;
1562 static gint hf_r3_dumpm41t81_reg01_1sec = -1;
1563 static gint hf_r3_dumpm41t81_reg02_notused = -1;
1564 static gint hf_r3_dumpm41t81_reg02_10min = -1;
1565 static gint hf_r3_dumpm41t81_reg02_1min = -1;
1566 static gint hf_r3_dumpm41t81_reg03_cbe = -1;
1567 static gint hf_r3_dumpm41t81_reg03_cb = -1;
1568 static gint hf_r3_dumpm41t81_reg03_10hour = -1;
1569 static gint hf_r3_dumpm41t81_reg03_1hour = -1;
1570 static gint hf_r3_dumpm41t81_reg04_notused = -1;
1571 static gint hf_r3_dumpm41t81_reg04_dow = -1;
1572 static gint hf_r3_dumpm41t81_reg05_notused = -1;
1573 static gint hf_r3_dumpm41t81_reg05_10day = -1;
1574 static gint hf_r3_dumpm41t81_reg05_1day = -1;
1575 static gint hf_r3_dumpm41t81_reg06_notused = -1;
1576 static gint hf_r3_dumpm41t81_reg06_10month = -1;
1577 static gint hf_r3_dumpm41t81_reg06_1month = -1;
1578 static gint hf_r3_dumpm41t81_reg07_10year = -1;
1579 static gint hf_r3_dumpm41t81_reg07_1year = -1;
1580 static gint hf_r3_dumpm41t81_reg08_out = -1;
1581 static gint hf_r3_dumpm41t81_reg08_ft = -1;
1582 static gint hf_r3_dumpm41t81_reg08_s = -1;
1583 static gint hf_r3_dumpm41t81_reg08_cal = -1;
1584 static gint hf_r3_dumpm41t81_reg09_notused = -1;
1585 static gint hf_r3_dumpm41t81_reg09_bmb = -1;
1586 static gint hf_r3_dumpm41t81_reg09_rb = -1;
1587 static gint hf_r3_dumpm41t81_reg0a_afe = -1;
1588 static gint hf_r3_dumpm41t81_reg0a_sqwe = -1;
1589 static gint hf_r3_dumpm41t81_reg0a_abe = -1;
1590 static gint hf_r3_dumpm41t81_reg0a_10monthalm = -1;
1591 static gint hf_r3_dumpm41t81_reg0a_1monthalm = -1;
1592 static gint hf_r3_dumpm41t81_reg0b_rpt5 = -1;
1593 static gint hf_r3_dumpm41t81_reg0b_rpt4 = -1;
1594 static gint hf_r3_dumpm41t81_reg0b_10dayalm = -1;
1595 static gint hf_r3_dumpm41t81_reg0b_1dayalm = -1;
1596 static gint hf_r3_dumpm41t81_reg0c_rpt3 = -1;
1597 static gint hf_r3_dumpm41t81_reg0c_ht = -1;
1598 static gint hf_r3_dumpm41t81_reg0c_10houralm = -1;
1599 static gint hf_r3_dumpm41t81_reg0c_1houralm = -1;
1600 static gint hf_r3_dumpm41t81_reg0d_rpt2 = -1;
1601 static gint hf_r3_dumpm41t81_reg0d_10minalm = -1;
1602 static gint hf_r3_dumpm41t81_reg0d_1minalm = -1;
1603 static gint hf_r3_dumpm41t81_reg0e_rpt1 = -1;
1604 static gint hf_r3_dumpm41t81_reg0e_10secalm = -1;
1605 static gint hf_r3_dumpm41t81_reg0e_1secalm = -1;
1606 static gint hf_r3_dumpm41t81_reg0f_wdf = -1;
1607 static gint hf_r3_dumpm41t81_reg0f_af = -1;
1608 static gint hf_r3_dumpm41t81_reg0f_notused = -1;
1609 static gint hf_r3_dumpm41t81_reg10_notused = -1;
1610 static gint hf_r3_dumpm41t81_reg11_notused = -1;
1611 static gint hf_r3_dumpm41t81_reg12_notused = -1;
1612 static gint hf_r3_dumpm41t81_reg13_rs = -1;
1613 static gint hf_r3_dumpm41t81_reg13_notused = -1;
1615 static gint hf_r3_debuglog_recordnumber = -1;
1616 static gint hf_r3_debuglog_flags = -1;
1617 static gint hf_r3_debuglog_tick = -1;
1619 static gint hf_r3_adduserparamtype = -1;
1620 static gint hf_r3_adduserparamtypelength = -1;
1621 static gint hf_r3_adduserparamtypetype = -1;
1622 /*static gint hf_r3_adduserparamtypedatalen = -1;*/
1623 /*static gint hf_r3_adduserparamtypeerror = -1;*/
1624 static gint hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_LAST];
1626 static gint ett_r3 = -1;
1627 static gint ett_r3header = -1;
1628 static gint ett_r3tail = -1;
1629 static gint ett_r3payload = -1;
1630 static gint ett_r3cmd = -1;
1631 static gint ett_r3configitem = -1;
1632 static gint ett_r3upstreamcommand = -1;
1633 static gint ett_r3upstreamfield = -1;
1634 static gint ett_r3timezone = -1;
1635 static gint ett_r3expireon = -1;
1636 static gint ett_r3datetime = -1;
1637 static gint ett_r3eventlogrecord = -1;
1638 static gint ett_r3declinedlogrecord = -1;
1639 static gint ett_r3alarmlogrecord = -1;
1640 static gint ett_r3debugmsg = -1;
1641 static gint ett_r3defineexceptionstartdate = -1;
1642 static gint ett_r3defineexceptionenddate = -1;
1643 static gint ett_r3defineexceptiongroupbits = -1;
1644 static gint ett_r3definecalendarmonth [13] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
1645 static gint ett_r3definetimezonestarttime = -1;
1646 static gint ett_r3definetimezoneendtime = -1;
1647 static gint ett_r3definetimezonedaymap = -1;
1648 static gint ett_r3eventlogdumpstarttime = -1;
1649 static gint ett_r3eventlogdumpendtime = -1;
1650 static gint ett_r3declinedlogdumpstarttime = -1;
1651 static gint ett_r3declinedlogdumpendtime = -1;
1652 static gint ett_r3alarmlogdumpstarttime = -1;
1653 static gint ett_r3alarmlogdumpendtime = -1;
1654 static gint ett_r3clearnvram = -1;
1655 static gint ett_r3filters = -1;
1656 static gint ett_r3alarmlist = -1;
1657 static gint ett_r3alarmcfg = -1;
1658 static gint ett_r3commandmfg = -1;
1659 static gint ett_r3serialnumber = -1;
1660 static gint ett_r3iopins = -1;
1661 static gint ett_r3checksumresults = -1;
1662 static gint ett_r3checksumresultsfield = -1;
1663 static gint ett_r3forceoptions = -1;
1664 static gint ett_r3peekpoke = -1;
1665 static gint ett_r3downloadfirmware = -1;
1666 static gint ett_r3capabilities = -1;
1667 static gint ett_r3lockstate = -1;
1668 static gint ett_r3mortisestatelog = -1;
1669 static gint ett_r3timerchain = -1;
1670 static gint ett_r3taskflags = -1;
1671 static gint ett_r3taskflagsentry = -1;
1672 static gint ett_r3checkpointlog = -1;
1673 static gint ett_r3checkpointlogentry = -1;
1674 static gint ett_r3cpuregisters = -1;
1675 static gint ett_r3cpuregister = -1;
1676 static gint ett_r3m41t81registers = -1;
1677 static gint ett_r3m41t81register = -1;
1678 static gint ett_r3debuglogrecord = -1;
1679 static gint ett_r3setdatetime = -1;
1680 static gint ett_r3manageuser = -1;
1682 static expert_field ei_r3_response_hasdata_octet_2 = EI_INIT;
1683 static expert_field ei_r3_mfgfield_too_many_adc_values = EI_INIT;
1684 static expert_field ei_r3_peekpoke_operation = EI_INIT;
1685 static expert_field ei_r3_response_hasdata_octet_1 = EI_INIT;
1686 static expert_field ei_r3_reserved_upstream_command_value = EI_INIT;
1687 static expert_field ei_r3_firmwaredownload_action = EI_INIT;
1688 static expert_field ei_r3_malformed_length = EI_INIT;
1689 static expert_field ei_r3_mfgfield = EI_INIT;
1690 static expert_field ei_r3_unknown_command_value = EI_INIT;
1691 static expert_field ei_r3_response_hasdata_octet_3 = EI_INIT;
1692 static expert_field ei_r3_cmd_downloadfirmwaretimeout = EI_INIT;
1695 * Indicates next command to be processed as a manufacturing command
1697 static gint mfgCommandFlag = FALSE;
1700 * Some enums that don't exist in public.h and should
1702 typedef enum
1704 CHECKPOINT_NONE = 0,
1705 CHECKPOINT_ADC,
1706 CHECKPOINT_DPAC1,
1707 CHECKPOINT_DPAC2,
1708 CHECKPOINT_I2C1,
1709 CHECKPOINT_I2C2,
1710 CHECKPOINT_I2C3,
1711 CHECKPOINT_I2C4,
1712 CHECKPOINT_I2C5,
1713 CHECKPOINT_I2C6,
1714 CHECKPOINT_I2C7,
1715 CHECKPOINT_I2C8,
1716 CHECKPOINT_I2C9,
1717 CHECKPOINT_I2C10,
1718 CHECKPOINT_I2C11,
1719 CHECKPOINT_I2C12,
1720 CHECKPOINT_I2C13,
1721 CHECKPOINT_I2C14,
1722 CHECKPOINT_I2C15,
1723 CHECKPOINT_I2C16,
1724 CHECKPOINT_I2C17,
1725 CHECKPOINT_I2C18,
1726 CHECKPOINT_I2C19,
1727 CHECKPOINT_I2C20,
1728 CHECKPOINT_I2C21,
1729 CHECKPOINT_I2C22,
1730 CHECKPOINT_I2C23,
1731 CHECKPOINT_I2C24,
1732 CHECKPOINT_I2C25,
1733 CHECKPOINT_I2C26,
1734 CHECKPOINT_I2C27,
1735 CHECKPOINT_I2C28,
1736 CHECKPOINT_I2C29,
1737 CHECKPOINT_I2C30,
1738 CHECKPOINT_I2C31,
1739 CHECKPOINT_I2C32,
1740 CHECKPOINT_I2C33,
1741 CHECKPOINT_I2C34,
1742 CHECKPOINT_I2C35,
1743 CHECKPOINT_I2C36,
1744 CHECKPOINT_I2C37,
1745 CHECKPOINT_I2C38,
1746 CHECKPOINT_I2C39,
1747 CHECKPOINT_I2C40,
1748 CHECKPOINT_I2C41,
1749 CHECKPOINT_I2C42,
1750 CHECKPOINT_I2C43,
1751 CHECKPOINT_I2C44,
1752 CHECKPOINT_I2C45,
1753 CHECKPOINT_NVRAM,
1754 CHECKPOINT_SERIAL1,
1755 CHECKPOINT_SERIAL2,
1756 CHECKPOINT_SERIAL3,
1757 CHECKPOINT_WANDERING,
1758 CHECKPOINT_STRAYHPINT,
1759 CHECKPOINT_STRAYLPINT,
1760 CHECKPOINT_TESTWDT,
1761 CHECKPOINT_DPACDEBUG,
1762 CHECKPOINT_LAST
1764 checkPoint_e;
1766 typedef enum
1768 CONFIGTYPE_NONE = 0,
1769 CONFIGTYPE_BOOL,
1770 CONFIGTYPE_8,
1771 CONFIGTYPE_16,
1772 CONFIGTYPE_32,
1773 CONFIGTYPE_STRING,
1774 CONFIGTYPE_LAST
1776 configType_e;
1778 typedef enum
1780 DOWNLOADFIRMWARE_START = 0,
1781 DOWNLOADFIRMWARE_DATA,
1782 DOWNLOADFIRMWARE_COMPLETE,
1783 DOWNLOADFIRMWARE_ABORT,
1784 DOWNLOADFIRMWARE_RESET,
1785 DOWNLOADFIRMWARE_LAST
1787 downloadFirmware_e;
1789 typedef enum
1791 MORTISEEVENT_DX_THROWN = 0,
1792 MORTISEEVENT_DX_RETRACTED,
1793 MORTISEEVENT_LX_RETRACTED,
1794 MORTISEEVENT_LX_EXTENDED,
1795 MORTISEEVENT_AX_EXTENDED,
1796 MORTISEEVENT_AX_RETRACTED,
1797 MORTISEEVENT_RX_DEPRESSED,
1798 MORTISEEVENT_RX_RELEASED,
1799 MORTISEEVENT_PX_OPEN,
1800 MORTISEEVENT_PX_CLOSED,
1801 MORTISEEVENT_MX_UNLOCKED,
1802 MORTISEEVENT_MX_LOCKED,
1803 MORTISEEVENT_LAST,
1804 MORTISEEVENT_IGNORE
1806 mortiseEvent_e;
1809 * Print things with nice textual names
1811 static const value_string r3_accessmodenames [] =
1813 { ACCESSMODE_NONE, "ACCESMODE_NONE" },
1814 { ACCESSMODE_PRIMARYONLY, "ACCESSMODE_PRIMARYONLY" },
1815 { ACCESSMODE_PRIMARYORAUX, "ACCESSMODE_PRIMARYORAUX" },
1816 { ACCESSMODE_PRIMARYANDAUX, "ACCESSMODE_PRIMARYANDAUX" },
1817 { ACCESSMODE_PRIMARYTHENAUX, "ACCESSMODE_PRIMARYTHENAUX" },
1818 { 0, NULL }
1820 static value_string_ext r3_accessmodenames_ext = VALUE_STRING_EXT_INIT(r3_accessmodenames);
1822 static const value_string r3_adduserparamtypenames [] =
1824 { ADDUSERPARAMTYPE_DISPOSITION, "ADDUSERPARAMTYPE_DISPOSITION" },
1825 { ADDUSERPARAMTYPE_USERNO, "ADDUSERPARAMTYPE_USERNO" },
1826 { ADDUSERPARAMTYPE_ACCESSALWAYS, "ADDUSERPARAMTYPE_ACCESSALWAYS" },
1827 { ADDUSERPARAMTYPE_ACCESSMODE, "ADDUSERPARAMTYPE_ACCESSMODE" },
1828 { ADDUSERPARAMTYPE_CACHED, "ADDUSERPARAMTYPE_CACHED" },
1829 { ADDUSERPARAMTYPE_USERTYPE, "ADDUSERPARAMTYPE_USERTYPE" },
1830 { ADDUSERPARAMTYPE_PRIMARYFIELD, "ADDUSERPARAMTYPE_PRIMARYFIELD" },
1831 { ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, "ADDUSERPARAMTYPE_PRIMARYFIELDTYPE" },
1832 { ADDUSERPARAMTYPE_AUXFIELD, "ADDUSERPARAMTYPE_AUXFIELD" },
1833 { ADDUSERPARAMTYPE_AUXFIELDTYPE, "ADDUSERPARAMTYPE_AUXFIELDTYPE" },
1834 { ADDUSERPARAMTYPE_TIMEZONE, "ADDUSERPARAMTYPE_TIMEZONE" },
1835 { ADDUSERPARAMTYPE_EXPIREON, "ADDUSERPARAMTYPE_EXPIREON" },
1836 { ADDUSERPARAMTYPE_USECOUNT, "ADDUSERPARAMTYPE_USECOUNT" },
1837 { ADDUSERPARAMTYPE_EXCEPTIONGROUP, "ADDUSERPARAMTYPE_EXCEPTIONGROUP" },
1838 { 0, NULL }
1840 static value_string_ext r3_adduserparamtypenames_ext = VALUE_STRING_EXT_INIT(r3_adduserparamtypenames);
1842 static const value_string r3_alarmidnames [] =
1844 { ALARMID_NONE, "ALARMID_NONE" },
1845 { ALARMID_VALIDIN, "ALARMID_VALIDIN" },
1846 { ALARMID_DENIEDACCESS, "ALARMID_DENIEDACCESS" },
1847 { ALARMID_SECURED, "ALARMID_SECURED" },
1848 { ALARMID_DOORFORCED, "ALARMID_DOORFORCED" },
1849 { ALARMID_KEYOVERRIDE, "ALARMID_KEYOVERRIDE" },
1850 { ALARMID_INVALIDENTRY, "ALARMID_INVALIDENTRY" },
1851 { ALARMID_DOORAJAR, "ALARMID_DOORAJAR" },
1852 { ALARMID_LOWBATTERY, "ALARMID_LOWBATTERY" },
1853 { ALARMID_RXHELD, "ALARMID_RXHELD" },
1854 { 0, NULL }
1856 static value_string_ext r3_alarmidnames_ext = VALUE_STRING_EXT_INIT(r3_alarmidnames);
1858 static const value_string r3_capabilitiesnames [] =
1860 { CAPABILITIES_USERS, "CAPABILITIES_USERS" },
1861 { CAPABILITIES_TIMEZONES, "CAPABILITIES_TIMEZONES" },
1862 { CAPABILITIES_EXCEPTIONS, "CAPABILITIES_EXCEPTIONS" },
1863 { CAPABILITIES_EXCEPTIONGROUPS, "CAPABILITIES_EXCEPTIONGROUPS" },
1864 { CAPABILITIES_EVENTLOG, "CAPABILITIES_EVENTLOG" },
1865 { CAPABILITIES_DECLINEDLOG, "CAPABILITIES_DECLINEDLOG" },
1866 { CAPABILITIES_ALARMLOG, "CAPABILITIES_ALARMLOG" },
1867 { CAPABILITIES_TOTALEVENTS, "CAPABILITIES_TOTALEVENTS" },
1868 { 0, NULL }
1870 static value_string_ext r3_capabilitiesnames_ext = VALUE_STRING_EXT_INIT(r3_capabilitiesnames);
1872 static const value_string r3_checkpointnames [] =
1874 { CHECKPOINT_NONE, "CHECKPOINT_NONE" },
1875 { CHECKPOINT_ADC, "CHECKPOINT_ADC" },
1876 { CHECKPOINT_DPAC1, "CHECKPOINT_DPAC1" },
1877 { CHECKPOINT_DPAC2, "CHECKPOINT_DPAC2" },
1878 { CHECKPOINT_I2C1, "CHECKPOINT_I2C1" },
1879 { CHECKPOINT_I2C2, "CHECKPOINT_I2C2" },
1880 { CHECKPOINT_I2C3, "CHECKPOINT_I2C3" },
1881 { CHECKPOINT_I2C4, "CHECKPOINT_I2C4" },
1882 { CHECKPOINT_I2C5, "CHECKPOINT_I2C5" },
1883 { CHECKPOINT_I2C6, "CHECKPOINT_I2C6" },
1884 { CHECKPOINT_I2C7, "CHECKPOINT_I2C7" },
1885 { CHECKPOINT_I2C8, "CHECKPOINT_I2C8" },
1886 { CHECKPOINT_I2C9, "CHECKPOINT_I2C9" },
1887 { CHECKPOINT_I2C10, "CHECKPOINT_I2C10" },
1888 { CHECKPOINT_I2C11, "CHECKPOINT_I2C11" },
1889 { CHECKPOINT_I2C12, "CHECKPOINT_I2C12" },
1890 { CHECKPOINT_I2C13, "CHECKPOINT_I2C13" },
1891 { CHECKPOINT_I2C14, "CHECKPOINT_I2C14" },
1892 { CHECKPOINT_I2C15, "CHECKPOINT_I2C15" },
1893 { CHECKPOINT_I2C16, "CHECKPOINT_I2C16" },
1894 { CHECKPOINT_I2C17, "CHECKPOINT_I2C17" },
1895 { CHECKPOINT_I2C18, "CHECKPOINT_I2C18" },
1896 { CHECKPOINT_I2C19, "CHECKPOINT_I2C19" },
1897 { CHECKPOINT_I2C20, "CHECKPOINT_I2C20" },
1898 { CHECKPOINT_I2C21, "CHECKPOINT_I2C21" },
1899 { CHECKPOINT_I2C22, "CHECKPOINT_I2C22" },
1900 { CHECKPOINT_I2C23, "CHECKPOINT_I2C23" },
1901 { CHECKPOINT_I2C24, "CHECKPOINT_I2C24" },
1902 { CHECKPOINT_I2C25, "CHECKPOINT_I2C25" },
1903 { CHECKPOINT_I2C26, "CHECKPOINT_I2C26" },
1904 { CHECKPOINT_I2C27, "CHECKPOINT_I2C27" },
1905 { CHECKPOINT_I2C28, "CHECKPOINT_I2C28" },
1906 { CHECKPOINT_I2C29, "CHECKPOINT_I2C29" },
1907 { CHECKPOINT_I2C30, "CHECKPOINT_I2C30" },
1908 { CHECKPOINT_I2C31, "CHECKPOINT_I2C31" },
1909 { CHECKPOINT_I2C32, "CHECKPOINT_I2C32" },
1910 { CHECKPOINT_I2C33, "CHECKPOINT_I2C33" },
1911 { CHECKPOINT_I2C34, "CHECKPOINT_I2C34" },
1912 { CHECKPOINT_I2C35, "CHECKPOINT_I2C35" },
1913 { CHECKPOINT_I2C36, "CHECKPOINT_I2C36" },
1914 { CHECKPOINT_I2C37, "CHECKPOINT_I2C37" },
1915 { CHECKPOINT_I2C38, "CHECKPOINT_I2C38" },
1916 { CHECKPOINT_I2C39, "CHECKPOINT_I2C39" },
1917 { CHECKPOINT_I2C40, "CHECKPOINT_I2C40" },
1918 { CHECKPOINT_I2C41, "CHECKPOINT_I2C41" },
1919 { CHECKPOINT_I2C42, "CHECKPOINT_I2C42" },
1920 { CHECKPOINT_I2C43, "CHECKPOINT_I2C43" },
1921 { CHECKPOINT_I2C44, "CHECKPOINT_I2C44" },
1922 { CHECKPOINT_I2C45, "CHECKPOINT_I2C45" },
1923 { CHECKPOINT_NVRAM, "CHECKPOINT_NVRAM" },
1924 { CHECKPOINT_SERIAL1, "CHECKPOINT_SERIAL1" },
1925 { CHECKPOINT_SERIAL2, "CHECKPOINT_SERIAL2" },
1926 { CHECKPOINT_SERIAL3, "CHECKPOINT_SERIAL3" },
1927 { CHECKPOINT_WANDERING, "CHECKPOINT_WANDERING" },
1928 { CHECKPOINT_STRAYHPINT, "CHECKPOINT_STRAYHPINT" },
1929 { CHECKPOINT_STRAYLPINT, "CHECKPOINT_STRAYLPINT" },
1930 { CHECKPOINT_TESTWDT, "CHECKPOINT_TESTWDT" },
1931 { CHECKPOINT_DPACDEBUG, "CHECKPOINT_DPACDEBUG" },
1932 { 0, NULL }
1934 static value_string_ext r3_checkpointnames_ext = VALUE_STRING_EXT_INIT(r3_checkpointnames);
1936 static const value_string r3_checksumresultnames [] =
1938 { CHECKSUMRESULT_CONFIGURATIONNVRAM, "CHECKSUMRESULT_CONFIGURATIONNVRAM" },
1939 { CHECKSUMRESULT_EXCEPTIONS, "CHECKSUMRESULT_EXCEPTIONS" },
1940 { CHECKSUMRESULT_EXCEPTIONGROUPS, "CHECKSUMRESULT_EXCEPTIONGROUPS" },
1941 { CHECKSUMRESULT_TZCALENDARS, "CHECKSUMRESULT_TZCALENDARS" },
1942 { CHECKSUMRESULT_TIMEZONES, "CHECKSUMRESULT_TIMEZONES" },
1943 { CHECKSUMRESULT_USERS, "CHECKSUMRESULT_USERS" },
1944 { CHECKSUMRESULT_CACHELRU, "CHECKSUMRESULT_CACHELRU" },
1945 { 0, NULL }
1947 static value_string_ext r3_checksumresultnames_ext = VALUE_STRING_EXT_INIT(r3_checksumresultnames);
1949 static const value_string r3_cmdnames [] =
1951 { CMD_RESPONSE, "CMD_RESPONSE" },
1952 { CMD_HANDSHAKE, "CMD_HANDSHAKE" },
1953 { CMD_KILLSESSION, "CMD_KILLSESSION" },
1954 { CMD_QUERYSERIALNUMBER, "CMD_QUERYSERIALNUMBER" },
1955 { CMD_QUERYVERSION, "CMD_QUERYVERSION" },
1956 { CMD_SETDATETIME, "CMD_SETDATETIME" },
1957 { CMD_QUERYDATETIME, "CMD_QUERYDATETIME" },
1958 { CMD_SETCONFIG, "CMD_SETCONFIG" },
1959 { CMD_GETCONFIG, "CMD_GETCONFIG" },
1960 { CMD_MANAGEUSER, "CMD_MANAGEUSER" },
1961 { CMD_DELETEUSERS, "CMD_DELETEUSERS" },
1962 { CMD_DEFINEEXCEPTION, "CMD_DEFINEEXCEPTION" },
1963 { CMD_DEFINEEXCEPTIONGROUP, "CMD_DEFINEEXCEPTIONGROUP" },
1964 { CMD_DEFINECALENDAR, "CMD_DEFINECALENDAR" },
1965 { CMD_DEFINETIMEZONE, "CMD_DEFINETIMEZONE" },
1966 { CMD_RMTAUTHRETRY, "CMD_RMTAUTHRETRY" },
1967 { CMD_FILTERS, "CMD_FILTERS" },
1968 { CMD_ALARMCONFIGURE, "CMD_ALARMCONFIGURE" },
1969 { CMD_EVENTLOGDUMP, "CMD_EVENTLOGDUMP" },
1970 { CMD_DECLINEDLOGDUMP, "CMD_DECLINEDLOGDUMP" },
1971 { CMD_ALARMLOGDUMP, "CMD_ALARMLOGDUMP" },
1972 { CMD_DOWNLOADFIRMWARE, "CMD_DOWNLOADFIRMWARE" },
1973 { CMD_DOWNLOADFIRMWARETIMEOUT, "CMD_DOWNLOADFIRMWARETIMEOUT" },
1974 { CMD_POWERTABLESELECTION, "CMD_POWERTABLESELECTION" },
1975 { CMD_CLEARNVRAM, "CMD_CLEARNVRAM" },
1976 { CMD_DPAC, "CMD_DPAC" },
1977 { CMD_SELFTEST, "CMD_SELFTEST" },
1978 { CMD_RESET, "CMD_RESET" },
1979 { CMD_LOGWRITE, "CMD_LOGWRITE" },
1980 { CMD_MFGCOMMAND, "CMD_MFGCOMMAND" },
1981 { CMD_NVRAMBACKUP, "CMD_NVRAMBACKUP" },
1982 { CMD_EXTENDEDRESPONSE, "CMD_EXTENDEDRESPONSE" },
1983 { 0, NULL }
1985 static value_string_ext r3_cmdnames_ext = VALUE_STRING_EXT_INIT(r3_cmdnames);
1987 static const value_string r3_cmdmfgnames [] =
1989 { CMDMFG_SETSERIALNUMBER, "CMDMFG_SETSERIALNUMBER" },
1990 { CMDMFG_SETCRYPTKEY, "CMDMFG_SETCRYPTKEY" },
1991 { CMDMFG_DUMPNVRAM, "CMDMFG_DUMPNVRAM" },
1992 { CMDMFG_TERMINAL, "CMDMFG_TERMINAL" },
1993 { CMDMFG_REMOTEUNLOCK, "CMDMFG_REMOTEUNLOCK" },
1994 { CMDMFG_AUXCTLRVERSION, "CMDMFG_AUXCTLRVERSION" },
1995 { CMDMFG_IOPINS, "CMDMFG_IOPINS" },
1996 { CMDMFG_ADCS, "CMDMFG_ADCS" },
1997 { CMDMFG_HARDWAREID, "CMDMFG_HARDWAREID" },
1998 { CMDMFG_CHECKPOINTLOGDUMP, "CMDMFG_CHECKPOINTLOGDUMP" },
1999 { CMDMFG_CHECKPOINTLOGCLEAR, "CMDMFG_CHECKPOINTLOGCLEAR" },
2000 { CMDMFG_READREGISTERS, "CMDMFG_READREGISTERS" },
2001 { CMDMFG_FORCEOPTIONS, "CMDMFG_FORCEOPTIONS" },
2002 { CMDMFG_COMMUSER, "CMDMFG_COMMUSER" },
2003 { CMDMFG_DUMPKEYPAD, "CMDMFG_DUMPKEYPAD" },
2004 { CMDMFG_BATTERYCHECK, "CMDMFG_BATTERYCHECK" },
2005 { CMDMFG_RAMREFRESH, "CMDMFG_RAMREFRESH" },
2006 { CMDMFG_TASKFLAGS, "CMDMFG_TASKFLAGS" },
2007 { CMDMFG_TIMERCHAIN, "CMDMFG_TIMERCHAIN" },
2008 { CMDMFG_PEEKPOKE, "CMDMFG_PEEKPOKE" },
2009 { CMDMFG_LOCKSTATE, "CMDMFG_LOCKSTATE" },
2010 { CMDMFG_CAPABILITIES, "CMDMFG_CAPABILITIES" },
2011 { CMDMFG_DUMPM41T81, "CMDMFG_DUMPM41T81" },
2012 { CMDMFG_DEBUGLOGDUMP, "CMDMFG_DEBUGLOGDUMP" },
2013 { CMDMFG_DEBUGLOGCLEAR, "CMDMFG_DEBUGLOGCLEAR" },
2014 { CMDMFG_TESTWDT, "CMDMFG_TESTWDT" },
2015 { CMDMFG_QUERYCKSUM, "CMDMFG_QUERYCKSUM" },
2016 { CMDMFG_VALIDATECHECKSUMS, "CMDMFG_VALIDATECHECKSUMS" },
2017 { CMDMFG_REBUILDLRUCACHE, "CMDMFG_REBUILDLRUCACHE" },
2018 { CMDMFG_TZUPDATE, "CMDMFG_TZUPDATE" },
2019 { CMDMFG_TESTPRESERVE, "CMDMFG_TESTPRESERVE" },
2020 { CMDMFG_MORTISESTATELOGDUMP, "CMDMFG_MORTISESTATELOGDUMP" },
2021 { CMDMFG_MORTISESTATELOGCLEAR, "CMDMFG_MORTISESTATELOGCLEAR" },
2022 { CMDMFG_MORTISEPINS, "CMDMFG_MORTISEPINS" },
2023 { CMDMFG_HALTANDCATCHFIRE, "CMDMFG_HALTANDCATCHFIRE" },
2024 { 0, NULL }
2026 static value_string_ext r3_cmdmfgnames_ext = VALUE_STRING_EXT_INIT(r3_cmdmfgnames);
2028 static const value_string r3_configitemnames [] =
2030 { CONFIGITEM_SERIAL_NUMBER, "CONFIGITEM_SERIAL_NUMBER" },
2031 { CONFIGITEM_CRYPT_KEY, "CONFIGITEM_CRYPT_KEY" },
2032 { CONFIGITEM_HARDWARE_OPTIONS_MFG, "CONFIGITEM_HARDWARE_OPTIONS_MFG" },
2033 { CONFIGITEM_HARDWARE_OPTIONS, "CONFIGITEM_HARDWARE_OPTIONS" },
2034 { CONFIGITEM_NVRAM_CHANGES, "CONFIGITEM_NVRAM_CHANGES" },
2035 { CONFIGITEM_NVRAMDIRTY, "CONFIGITEM_NVRAMDIRTY" },
2036 { CONFIGITEM_NVRAM_WV, "CONFIGITEM_NVRAM_WV" },
2037 { CONFIGITEM_ENABLE_WDT, "CONFIGITEM_ENABLE_WDT" },
2038 { CONFIGITEM_EARLY_ACK, "CONFIGITEM_EARLY_ACK" },
2039 { CONFIGITEM_CONSOLE_AES_ONLY, "CONFIGITEM_CONSOLE_AES_ONLY" },
2040 { CONFIGITEM_RADIO_AES_ONLY, "CONFIGITEM_RADIO_AES_ONLY" },
2041 { CONFIGITEM_NDRLE, "CONFIGITEM_NDRLE" },
2042 { CONFIGITEM_SOMF, "CONFIGITEM_SOMF" },
2043 { CONFIGITEM_NOGAF, "CONFIGITEM_NOGAF" },
2044 { CONFIGITEM_CARD_READER_POWER, "CONFIGITEM_CARD_READER_POWER" },
2045 { CONFIGITEM_PROX_ENABLE, "CONFIGITEM_PROX_ENABLE" },
2046 { CONFIGITEM_CKSUMCONFIG, "CONFIGITEM_CKSUMCONFIG" },
2047 { CONFIGITEM_DAILY_BATTERY_CHECK, "CONFIGITEM_DAILY_BATTERY_CHECK" },
2048 { CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, "CONFIGITEM_DAILY_BATTERY_CHECK_HOUR" },
2049 { CONFIGITEM_BATTERY_LOW, "CONFIGITEM_BATTERY_LOW" },
2050 { CONFIGITEM_LRU_HEAD, "CONFIGITEM_LRU_HEAD" },
2051 { CONFIGITEM_LRU_TAIL, "CONFIGITEM_LRU_TAIL" },
2052 { CONFIGITEM_RTC_CALIBRATION, "CONFIGITEM_RTC_CALIBRATION" },
2053 { CONFIGITEM_ACVREQUESTER, "CONFIGITEM_ACVREQUESTER" },
2054 { CONFIGITEM_LOCAL_LED, "CONFIGITEM_LOCAL_LED" },
2055 { CONFIGITEM_ERRCNT_XORLEN, "CONFIGITEM_ERRCNT_XORLEN" },
2056 { CONFIGITEM_ERRCNT_CRC, "CONFIGITEM_ERRCNT_CRC" },
2057 { CONFIGITEM_ERRCNT_NOTSIGIL, "CONFIGITEM_ERRCNT_NOTSIGIL" },
2058 { CONFIGITEM_ERRCNT_TIMEOUT, "CONFIGITEM_ERRCNT_TIMEOUT" },
2059 { CONFIGITEM_ERRCNT_TOOLONG, "CONFIGITEM_ERRCNT_TOOLONG" },
2060 { CONFIGITEM_ERRCNT_TOOSHORT, "CONFIGITEM_ERRCNT_TOOSHORT" },
2061 { CONFIGITEM_ERRCNT_HITDEFAULT, "CONFIGITEM_ERRCNT_HITDEFAULT" },
2062 { CONFIGITEM_ERRCNT_OVERRUN, "CONFIGITEM_ERRCNT_OVERRUN" },
2063 { CONFIGITEM_ERRCNT_UARTFE, "CONFIGITEM_ERRCNT_UARTFE" },
2064 { CONFIGITEM_ERRCNT_UARTOE, "CONFIGITEM_ERRCNT_UARTOE" },
2065 { CONFIGITEM_DST_SET, "CONFIGITEM_DST_SET" },
2066 { CONFIGITEM_DST_MODE, "CONFIGITEM_DST_MODE" },
2067 { CONFIGITEM_DST_FORWARD_MONTH, "CONFIGITEM_DST_FORWARD_MONTH" },
2068 { CONFIGITEM_DST_FORWARD_DOM, "CONFIGITEM_DST_FORWARD_DOM" },
2069 { CONFIGITEM_DST_FORWARD_OOD, "CONFIGITEM_DST_FORWARD_OOD" },
2070 { CONFIGITEM_DST_FORWARD_DOW, "CONFIGITEM_DST_FORWARD_DOW" },
2071 { CONFIGITEM_DST_FORWARD_HOUR, "CONFIGITEM_DST_FORWARD_HOUR" },
2072 { CONFIGITEM_DST_FORWARD_MINUTE, "CONFIGITEM_DST_FORWARD_MINUTE" },
2073 { CONFIGITEM_DST_FORWARD_ADJUST, "CONFIGITEM_DST_FORWARD_ADJUST" },
2074 { CONFIGITEM_DST_BACK_MONTH, "CONFIGITEM_DST_BACK_MONTH" },
2075 { CONFIGITEM_DST_BACK_DOM, "CONFIGITEM_DST_BACK_DOM" },
2076 { CONFIGITEM_DST_BACK_OOD, "CONFIGITEM_DST_BACK_OOD" },
2077 { CONFIGITEM_DST_BACK_DOW, "CONFIGITEM_DST_BACK_DOW" },
2078 { CONFIGITEM_DST_BACK_HOUR, "CONFIGITEM_DST_BACK_HOUR" },
2079 { CONFIGITEM_DST_BACK_MINUTE, "CONFIGITEM_DST_BACK_MINUTE" },
2080 { CONFIGITEM_DST_BACK_ADJUST, "CONFIGITEM_DST_BACK_ADJUST" },
2081 { CONFIGITEM_EVENTLOG_ZEROMEM, "CONFIGITEM_EVENTLOG_ZEROMEM" },
2082 { CONFIGITEM_EVENTLOG_BEGIN, "CONFIGITEM_EVENTLOG_BEGIN" },
2083 { CONFIGITEM_EVENTLOG_RECORD, "CONFIGITEM_EVENTLOG_RECORD" },
2084 { CONFIGITEM_EVENTLOG_ENTRIES, "CONFIGITEM_EVENTLOG_ENTRIES" },
2085 { CONFIGITEM_EVENTLOG_WARNDEVICE, "CONFIGITEM_EVENTLOG_WARNDEVICE" },
2086 { CONFIGITEM_EVENTLOG_WARNEVERY, "CONFIGITEM_EVENTLOG_WARNEVERY" },
2087 { CONFIGITEM_EVENTLOG_RMTDEVICE, "CONFIGITEM_EVENTLOG_RMTDEVICE" },
2088 { CONFIGITEM_DECLINEDLOG_ZEROMEM, "CONFIGITEM_DECLINEDLOG_ZEROMEM" },
2089 { CONFIGITEM_DECLINEDLOG_BEGIN, "CONFIGITEM_DECLINEDLOG_BEGIN" },
2090 { CONFIGITEM_DECLINEDLOG_RECORD, "CONFIGITEM_DECLINEDLOG_RECORD" },
2091 { CONFIGITEM_DECLINEDLOG_ENTRIES, "CONFIGITEM_DECLINEDLOG_ENTRIES" },
2092 { CONFIGITEM_DECLINEDLOG_WARNDEVICE, "CONFIGITEM_DECLINEDLOG_WARNDEVICE" },
2093 { CONFIGITEM_DECLINEDLOG_WARNEVERY, "CONFIGITEM_DECLINEDLOG_WARNEVERY" },
2094 { CONFIGITEM_DECLINEDLOG_RMTDEVICE, "CONFIGITEM_DECLINEDLOG_RMTDEVICE" },
2095 { CONFIGITEM_ALARMLOG_ZEROMEM, "CONFIGITEM_ALARMLOG_ZEROMEM" },
2096 { CONFIGITEM_ALARMLOG_BEGIN, "CONFIGITEM_ALARMLOG_BEGIN" },
2097 { CONFIGITEM_ALARMLOG_RECORD, "CONFIGITEM_ALARMLOG_RECORD" },
2098 { CONFIGITEM_ALARMLOG_ENTRIES, "CONFIGITEM_ALARMLOG_ENTRIES" },
2099 { CONFIGITEM_ALARMLOG_WARNDEVICE, "CONFIGITEM_ALARMLOG_WARNDEVICE" },
2100 { CONFIGITEM_ALARMLOG_WARNEVERY, "CONFIGITEM_ALARMLOG_WARNEVERY" },
2101 { CONFIGITEM_ALARMLOG_RMTDEVICE, "CONFIGITEM_ALARMLOG_RMTDEVICE" },
2102 { CONFIGITEM_VISIBLE_FEEDBACK, "CONFIGITEM_VISIBLE_FEEDBACK" },
2103 { CONFIGITEM_AUDIBLE_FEEDBACK, "CONFIGITEM_AUDIBLE_FEEDBACK" },
2104 { CONFIGITEM_VISIBLE_INDICATORS, "CONFIGITEM_VISIBLE_INDICATORS" },
2105 { CONFIGITEM_AUDIBLE_INDICATORS, "CONFIGITEM_AUDIBLE_INDICATORS" },
2106 { CONFIGITEM_2NDPINDURATION, "CONFIGITEM_2NDPINDURATION" },
2107 { CONFIGITEM_LOCKOUT_ATTEMPTS, "CONFIGITEM_LOCKOUT_ATTEMPTS" },
2108 { CONFIGITEM_LOCKOUT_DURATION, "CONFIGITEM_LOCKOUT_DURATION" },
2109 { CONFIGITEM_KEYPAD_INACTIVITY, "CONFIGITEM_KEYPAD_INACTIVITY" },
2110 { CONFIGITEM_ICIDLE_DURATION, "CONFIGITEM_ICIDLE_DURATION" },
2111 { CONFIGITEM_WRITE_DECLINED_LOG, "CONFIGITEM_WRITE_DECLINED_LOG" },
2112 { CONFIGITEM_LOW_BATTERY_INDICATOR, "CONFIGITEM_LOW_BATTERY_INDICATOR" },
2113 { CONFIGITEM_PANIC_MODE, "CONFIGITEM_PANIC_MODE" },
2114 { CONFIGITEM_TIMEZONE_ENABLE, "CONFIGITEM_TIMEZONE_ENABLE" },
2115 { CONFIGITEM_EXCEPTION_ENABLE, "CONFIGITEM_EXCEPTION_ENABLE" },
2116 { CONFIGITEM_AUTOUNLOCK_ENABLE, "CONFIGITEM_AUTOUNLOCK_ENABLE" },
2117 { CONFIGITEM_LOCK_PRIORITY_EMERGENCY, "CONFIGITEM_LOCK_PRIORITY_EMERGENCY" },
2118 { CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, "CONFIGITEM_LOCK_PRIORITY_SUPERVISOR" },
2119 { CONFIGITEM_LOCK_PRIORITY_USER, "CONFIGITEM_LOCK_PRIORITY_USER" },
2120 { CONFIGITEM_LOCK_PRIORITY_PASSAGE, "CONFIGITEM_LOCK_PRIORITY_PASSAGE" },
2121 { CONFIGITEM_LOCK_PRIORITY_PANIC, "CONFIGITEM_LOCK_PRIORITY_PANIC" },
2122 { CONFIGITEM_LOCK_PRIORITY_LOCKOUT, "CONFIGITEM_LOCK_PRIORITY_LOCKOUT" },
2123 { CONFIGITEM_LOCK_PRIORITY_RELOCK, "CONFIGITEM_LOCK_PRIORITY_RELOCK" },
2124 { CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, "CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN" },
2125 { CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, "CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE" },
2126 { CONFIGITEM_LOCK_PRIORITY_REMOTE, "CONFIGITEM_LOCK_PRIORITY_REMOTE" },
2127 { CONFIGITEM_LOCK_TYPE, "CONFIGITEM_LOCK_TYPE" },
2128 { CONFIGITEM_DOUBLE_PULSE, "CONFIGITEM_DOUBLE_PULSE" },
2129 { CONFIGITEM_DOUBLE_DELAY, "CONFIGITEM_DOUBLE_DELAY" },
2130 { CONFIGITEM_MOTOR_DURATION, "CONFIGITEM_MOTOR_DURATION" },
2131 { CONFIGITEM_MORTISE_TYPE, "CONFIGITEM_MORTISE_TYPE" },
2132 { CONFIGITEM_UNLOCK_TIME, "CONFIGITEM_UNLOCK_TIME" },
2133 { CONFIGITEM_EXT_UNLOCK_TIME, "CONFIGITEM_EXT_UNLOCK_TIME" },
2134 { CONFIGITEM_DOOR_AJAR_TIME, "CONFIGITEM_DOOR_AJAR_TIME" },
2135 { CONFIGITEM_SESSION_TIMEOUT, "CONFIGITEM_SESSION_TIMEOUT" },
2136 { CONFIGITEM_RETRY_ON_TIMEOUT, "CONFIGITEM_RETRY_ON_TIMEOUT" },
2137 { CONFIGITEM_UNSOLICITED_ENCRYPT, "CONFIGITEM_UNSOLICITED_ENCRYPT" },
2138 { CONFIGITEM_RMT_AUTH_TIMEOUT, "CONFIGITEM_RMT_AUTH_TIMEOUT" },
2139 { CONFIGITEM_RMT_AUTH_DEVICE, "CONFIGITEM_RMT_AUTH_DEVICE" },
2140 { CONFIGITEM_ALARM_DEVICE, "CONFIGITEM_ALARM_DEVICE" },
2141 { CONFIGITEM_NOTIFY_DEVICE, "CONFIGITEM_NOTIFY_DEVICE" },
2142 { CONFIGITEM_COMMUSER_DEVICE, "CONFIGITEM_COMMUSER_DEVICE" },
2143 { CONFIGITEM_SCHEDULER_DEVICE, "CONFIGITEM_SCHEDULER_DEVICE" },
2144 { CONFIGITEM_SCHEDULER_TYPE, "CONFIGITEM_SCHEDULER_TYPE" },
2145 { CONFIGITEM_SCHEDULER_AWAKE, "CONFIGITEM_SCHEDULER_AWAKE" },
2146 { CONFIGITEM_SCHEDULER_PERIOD, "CONFIGITEM_SCHEDULER_PERIOD" },
2147 { CONFIGITEM_SCHEDULER_HOD, "CONFIGITEM_SCHEDULER_HOD" },
2148 { CONFIGITEM_SCHEDULER_DOW, "CONFIGITEM_SCHEDULER_DOW" },
2149 { CONFIGITEM_SCHEDULER_DOM, "CONFIGITEM_SCHEDULER_DOM" },
2150 { CONFIGITEM_SCHEDULER_HM1, "CONFIGITEM_SCHEDULER_HM1" },
2151 { CONFIGITEM_SCHEDULER_HM2, "CONFIGITEM_SCHEDULER_HM2" },
2152 { CONFIGITEM_SCHEDULER_HM3, "CONFIGITEM_SCHEDULER_HM3" },
2153 { CONFIGITEM_SCHEDULER_HM4, "CONFIGITEM_SCHEDULER_HM4" },
2154 { CONFIGITEM_RADIO_TYPE, "CONFIGITEM_RADIO_TYPE" },
2155 { CONFIGITEM_RADIO_MODE, "CONFIGITEM_RADIO_MODE" },
2156 { CONFIGITEM_RADIO_TIMEOUT, "CONFIGITEM_RADIO_TIMEOUT" },
2157 { CONFIGITEM_RADIO_ATTEMPTS, "CONFIGITEM_RADIO_ATTEMPTS" },
2158 { CONFIGITEM_RADIO_HOUSEKEEPING, "CONFIGITEM_RADIO_HOUSEKEEPING" },
2159 { CONFIGITEM_RADIO_LEAPUSERNAME, "CONFIGITEM_RADIO_LEAPUSERNAME" },
2160 { CONFIGITEM_RADIO_LEAPPASSWORD, "CONFIGITEM_RADIO_LEAPPASSWORD" },
2161 { CONFIGITEM_INHIBIT_VOLTAGE, "CONFIGITEM_INHIBIT_VOLTAGE" },
2162 { CONFIGITEM_LOW_VOLTAGE, "CONFIGITEM_LOW_VOLTAGE" },
2163 { CONFIGITEM_PT_RANGE_1, "CONFIGITEM_PT_RANGE_1" },
2164 { CONFIGITEM_PT_RANGE_2, "CONFIGITEM_PT_RANGE_2" },
2165 { CONFIGITEM_PT_RANGE_3, "CONFIGITEM_PT_RANGE_3" },
2166 { CONFIGITEM_PT_RANGE_4, "CONFIGITEM_PT_RANGE_4" },
2167 { CONFIGITEM_PT_RANGE_5, "CONFIGITEM_PT_RANGE_5" },
2168 { CONFIGITEM_PT_RANGE_6, "CONFIGITEM_PT_RANGE_6" },
2169 { CONFIGITEM_PT_RANGE_7, "CONFIGITEM_PT_RANGE_7" },
2170 { CONFIGITEM_PT_RANGE_8, "CONFIGITEM_PT_RANGE_8" },
2171 { CONFIGITEM_MAGCARD_IFS, "CONFIGITEM_MAGCARD_IFS" },
2172 { CONFIGITEM_MAGCARD_FIELDS, "CONFIGITEM_MAGCARD_FIELDS" },
2173 { CONFIGITEM_MAGCARD_OFFSET, "CONFIGITEM_MAGCARD_OFFSET" },
2174 { CONFIGITEM_MAGCARD_DIGITS, "CONFIGITEM_MAGCARD_DIGITS" },
2175 { CONFIGITEM_ALARMS, "CONFIGITEM_ALARMS" },
2176 { CONFIGITEM_FILTERS, "CONFIGITEM_FILTERS" },
2177 { CONFIGITEM_ALARMSTATE, "CONFIGITEM_ALARMSTATE" },
2178 { CONFIGITEM_DOORSTATE, "CONFIGITEM_DOORSTATE" },
2179 { CONFIGITEM_DPACDEBUG, "CONFIGITEM_DPACDEBUG" },
2180 { CONFIGITEM_FAILOPENSECURE, "CONFIGITEM_FAILOPENSECURE" },
2181 { CONFIGITEM_REPLACED_VOLTAGE, "CONFIGITEM_REPLACED_VOLTAGE" },
2182 { CONFIGITEM_RX_HELD_TIME, "CONFIGITEM_RX_HELD_TIME" },
2183 { CONFIGITEM_PACKET_TIMEOUT, "CONFIGITEM_PACKET_TIMEOUT" },
2184 { CONFIGITEM_EXTENDEDRESPONSE, "CONFIGITEM_EXTENDEDRESPONSE" },
2185 { CONFIGITEM_PASSAGEMODEINDICATOR, "CONFIGITEM_PASSAGEMODEINDICATOR" },
2186 { CONFIGITEM_PFMRETURNTIME, "CONFIGITEM_PFMRETURNTIME" },
2187 { 0, NULL }
2189 static value_string_ext r3_configitemnames_ext = VALUE_STRING_EXT_INIT(r3_configitemnames);
2191 static const value_string r3_configtypenames [] =
2193 { CONFIGTYPE_NONE, "CONFIGTYPE_NONE" },
2194 { CONFIGTYPE_BOOL, "CONFIGTYPE_BOOL" },
2195 { CONFIGTYPE_8, "CONFIGTYPE_8" },
2196 { CONFIGTYPE_16, "CONFIGTYPE_16" },
2197 { CONFIGTYPE_32, "CONFIGTYPE_32" },
2198 { CONFIGTYPE_STRING, "CONFIGTYPE_STRING" },
2199 { 0, NULL }
2201 static value_string_ext r3_configtypenames_ext = VALUE_STRING_EXT_INIT(r3_configtypenames);
2203 static const value_string r3_dispositionnames [] =
2205 { DISPOSITION_ADD, "DISPOSITION_ADD" },
2206 { DISPOSITION_REPLACE, "DISPOSITION_REPLACE" },
2207 { DISPOSITION_UPDATE, "DISPOSITION_UPDATE" },
2208 { DISPOSITION_DELETE, "DISPOSITION_DELETE" },
2209 { DISPOSITION_RETRIEVE, "DISPOSITION_RETRIEVE" },
2210 { 0, NULL }
2212 static value_string_ext r3_dispositionnames_ext = VALUE_STRING_EXT_INIT(r3_dispositionnames);
2214 static const value_string r3_deleteusersnames [] =
2216 { DELETEUSERS_ALL, "DELETEUSER_ALL" },
2217 { DELETEUSERS_CACHED, "DELETEUSER_CACHED" },
2218 { 0, NULL }
2220 static value_string_ext r3_deleteusersnames_ext = VALUE_STRING_EXT_INIT(r3_deleteusersnames);
2222 static const value_string r3_downloadfirmwarenames [] =
2224 { DOWNLOADFIRMWARE_START, "DOWNLOADFIRMWARE_START" },
2225 { DOWNLOADFIRMWARE_DATA, "DOWNLOADFIRMWARE_DATA" },
2226 { DOWNLOADFIRMWARE_COMPLETE, "DOWNLOADFIRMWARE_COMPLETE" },
2227 { DOWNLOADFIRMWARE_ABORT, "DOWNLOADFIRMWARE_ABORT" },
2228 { DOWNLOADFIRMWARE_RESET, "DOWNLOADFIRMWARE_RESET" },
2229 { 0, NULL }
2231 static value_string_ext r3_downloadfirmwarenames_ext = VALUE_STRING_EXT_INIT(r3_downloadfirmwarenames);
2233 static const value_string r3_encryptionschemenames [] =
2235 { ENCRYPTIONSCHEME_NONE, "ENCRYPTIONSCHEME_NONE" },
2236 { ENCRYPTIONSCHEME_ROLLING, "ENCRYPTIONSCHEME_ROLLING" },
2237 { ENCRYPTIONSCHEME_SN, "ENCRYPTIONSCHEME_SN" },
2238 { ENCRYPTIONSCHEME_AESIV, "ENCRYPTIONSCHEME_AESIV" },
2239 { ENCRYPTIONSCHEME_AES, "ENCRYPTIONSCHEME_AES" },
2240 { 0, NULL }
2242 static value_string_ext r3_encryptionschemenames_ext = VALUE_STRING_EXT_INIT(r3_encryptionschemenames);
2244 static const value_string r3_eventnames [] =
2246 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
2247 { EVENT_USER, "EVENT_USER" },
2248 { EVENT_ONETIME, "EVENT_ONETIME" },
2249 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
2250 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
2251 { EVENT_BADTIME, "EVENT_BADTIME" },
2252 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
2253 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
2254 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
2255 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
2256 { EVENT_USERADDED, "EVENT_USERADDED" },
2257 { EVENT_USERDELETED, "EVENT_USERDELETED" },
2258 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
2259 { EVENT_PANIC, "EVENT_PANIC" },
2260 { EVENT_RELOCK, "EVENT_RELOCK" },
2261 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
2262 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
2263 { EVENT_RESET, "EVENT_RESET" },
2264 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
2265 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
2266 { EVENT_DBRESET, "EVENT_DBRESET" },
2267 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
2268 { EVENT_COMMENDED, "EVENT_COMMENDED" },
2269 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
2270 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
2271 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
2272 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
2273 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
2274 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
2275 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
2276 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
2277 { EVENT_COMMUSER, "EVENT_COMMUSER" },
2278 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
2279 { EVENT_NOTIFY, "EVENT_NOTIFY" },
2280 { EVENT_EXPIRED, "EVENT_EXPIRED" },
2281 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
2282 { EVENT_MCCENTER, "EVENT_MCCENTER" },
2283 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
2284 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
2285 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
2286 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
2287 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
2288 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
2289 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
2290 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
2291 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
2292 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
2293 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
2294 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
2295 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
2296 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
2297 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
2298 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
2299 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
2300 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
2301 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
2302 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
2303 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
2304 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
2305 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
2306 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
2307 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
2308 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
2309 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
2310 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
2311 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
2312 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
2313 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
2314 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
2315 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
2316 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
2317 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
2318 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
2319 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
2320 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
2321 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
2322 { EVENT_DEBUG, "EVENT_DEBUG" },
2323 { 0, NULL }
2325 static value_string_ext r3_eventnames_ext = VALUE_STRING_EXT_INIT(r3_eventnames);
2327 static const value_string r3_fieldtypenames [] =
2329 { FIELDTYPE_NONE, "FIELDTYPE_NONE" },
2330 { FIELDTYPE_PIN, "FIELDTYPE_PIN" },
2331 { FIELDTYPE_PROX, "FIELDTYPE_PROX" },
2332 { FIELDTYPE_MAGCARD, "FIELDTYPE_MAGCARD" },
2333 { 0, NULL }
2335 static value_string_ext r3_fieldtypenames_ext = VALUE_STRING_EXT_INIT(r3_fieldtypenames);
2337 static const value_string r3_filtereventnames [] =
2339 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
2340 { EVENT_USER, "EVENT_USER" },
2341 { EVENT_ONETIME, "EVENT_ONETIME" },
2342 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
2343 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
2344 { EVENT_BADTIME, "EVENT_BADTIME" },
2345 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
2346 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
2347 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
2348 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
2349 { EVENT_USERADDED, "EVENT_USERADDED" },
2350 { EVENT_USERDELETED, "EVENT_USERDELETED" },
2351 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
2352 { EVENT_PANIC, "EVENT_PANIC" },
2353 { EVENT_RELOCK, "EVENT_RELOCK" },
2354 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
2355 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
2356 { EVENT_RESET, "EVENT_RESET" },
2357 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
2358 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
2359 { EVENT_DBRESET, "EVENT_DBRESET" },
2360 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
2361 { EVENT_COMMENDED, "EVENT_COMMENDED" },
2362 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
2363 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
2364 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
2365 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
2366 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
2367 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
2368 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
2369 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
2370 { EVENT_COMMUSER, "EVENT_COMMUSER" },
2371 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
2372 { EVENT_NOTIFY, "EVENT_NOTIFY" },
2373 { EVENT_EXPIRED, "EVENT_EXPIRED" },
2374 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
2375 { EVENT_MCCENTER, "EVENT_MCCENTER" },
2376 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
2377 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
2378 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
2379 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
2380 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
2381 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
2382 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
2383 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
2384 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
2385 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
2386 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
2387 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
2388 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
2389 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
2390 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
2391 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
2392 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
2393 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
2394 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
2395 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
2396 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
2397 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
2398 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
2399 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
2400 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
2401 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
2402 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
2403 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
2404 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
2405 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
2406 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
2407 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
2408 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
2409 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
2410 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
2411 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
2412 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
2413 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
2414 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
2415 { EVENT_DEBUG, "EVENT_DEBUG" },
2416 { 0xfe, "(Enable All Filters)" },
2417 { 0xff, "(Disable All Filters)" },
2418 { 0, NULL }
2420 static value_string_ext r3_filtereventnames_ext = VALUE_STRING_EXT_INIT(r3_filtereventnames);
2422 static const value_string r3_filtertypenames [] =
2424 { FILTERSELECT_RECORDING, "FILTERSELECT_RECORDING" },
2425 { FILTERSELECT_REPORTING, "FILTERSELECT_REPORTING" },
2426 { 0, NULL }
2428 static value_string_ext r3_filtertypenames_ext = VALUE_STRING_EXT_INIT(r3_filtertypenames);
2430 static const value_string r3_forceitemnames [] =
2432 { FORCEITEM_RADIOPOWER, "FORCEITEM_RADIOPOWER" },
2433 { FORCEITEM_RADIOENABLE, "FORCEITEM_RADIOENABLE" },
2434 { FORCEITEM_LEDRED, "FORCEITEM_LEDRED" },
2435 { FORCEITEM_LEDGREEN, "FORCEITEM_LEDGREEN" },
2436 { FORCEITEM_LEDYELLOW, "FORCEITEM_LEDYELLOW" },
2437 { FORCEITEM_PIEZO, "FORCEITEM_PIEZO" },
2438 { FORCEITEM_MAGPOWER, "FORCEITEM_MAGPOWER" },
2439 { FORCEITEM_MAGLEDA, "FORCEITEM_MAGLEDA" },
2440 { FORCEITEM_MAGLEDB, "FORCEITEM_MAGLEDB" },
2441 { FORCEITEM_PROXPOWER, "FORCEITEM_PROXPOWER" },
2442 { FORCEITEM_PROXPING, "FORCEITEM_PROXPING" },
2443 { FORCEITEM_PROXMODE, "FORCEITEM_PROXMODE" },
2444 { FORCEITEM_I2CPOWER, "FORCEITEM_I2CPOWER" },
2445 { FORCEITEM_MOTORARUN, "FORCEITEM_MOTORARUN" },
2446 { FORCEITEM_MOTORBRUN, "FORCEITEM_MOTORBRUN" },
2447 { FORCEITEM_VMON, "FORCEITEM_VMON" },
2448 { FORCEITEM_PROX, "FORCEITEM_PROX" },
2449 { FORCEITEM_MORTISETEST, "FORCEITEM_MORTISETEST" },
2450 { FORCEITEM_KEYPADTEST, "FORCEITEM_KEYPADTEST" },
2451 { FORCEITEM_MAGTEST, "FORCEITEM_MAGTEST" },
2452 { FORCEITEM_PROXTEST, "FORCEITEM_PROXTEST" },
2453 { 0, NULL }
2455 static value_string_ext r3_forceitemnames_ext = VALUE_STRING_EXT_INIT(r3_forceitemnames);
2457 static const value_string r3_mfgfieldnames [] =
2459 { MFGFIELD_IOPINS, "MFGFIELD_IOPINS" },
2460 { MFGFIELD_ADCS, "MFGFIELD_ADCS" },
2461 { MFGFIELD_HARDWAREID, "MFGFIELD_HARDWAREID" },
2462 { MFGFIELD_CHECKPOINTLOG, "MFGFIELD_CHECKPOINTLOG" },
2463 { MFGFIELD_CPUREGISTERS, "MFGFIELD_CPUREGISTERS" },
2464 { MFGFIELD_TASKFLAGS, "MFGFIELD_TASKFLAGS" },
2465 { MFGFIELD_TIMERCHAIN, "MFGFIELD_TIMERCHAIN" },
2466 { MFGFIELD_PEEKPOKE, "MFGFIELD_PEEKPOKE" },
2467 { MFGFIELD_LOCKSTATE, "MFGFIELD_LOCKSTATE" },
2468 { MFGFIELD_CAPABILITIES, "MFGFIELD_CAPABILITIES" },
2469 { MFGFIELD_DUMPM41T81, "MFGFIELD_DUMPM41T81" },
2470 { MFGFIELD_NVRAMCHECKSUMVALUE, "MFGFIELD_NVRAMCHECKSUMVALUE" },
2471 { MFGFIELD_CHECKSUMRESULTS, "MFGFIELD_CHECKSUMRESULTS" },
2472 { MFGFIELD_MORTISESTATELOG, "MFGFIELD_MORTISESTATELOG" },
2473 { MFGFIELD_MORTISEPINS, "MFGFIELD_MORTISEPINS" },
2474 { MFGFIELD_KEYPADCHAR, "MFGFIELD_KEYPADCHAR" },
2475 { MFGFIELD_MAGCARD, "MFGFIELD_MAGCARD" },
2476 { MFGFIELD_PROXCARD, "MFGFIELD_PROXCARD" },
2477 { 0, NULL }
2479 static value_string_ext r3_mfgfieldnames_ext = VALUE_STRING_EXT_INIT(r3_mfgfieldnames);
2481 static const value_string r3_mortiseeventnames [] =
2483 { MORTISEEVENT_DX_THROWN, "MORTISEEVENT_DX_THROWN" },
2484 { MORTISEEVENT_DX_RETRACTED, "MORTISEEVENT_DX_RETRACTED" },
2485 { MORTISEEVENT_LX_RETRACTED, "MORTISEEVENT_LX_RETRACTED" },
2486 { MORTISEEVENT_LX_EXTENDED, "MORTISEEVENT_LX_EXTENDED" },
2487 { MORTISEEVENT_AX_EXTENDED, "MORTISEEVENT_AX_EXTENDED" },
2488 { MORTISEEVENT_AX_RETRACTED, "MORTISEEVENT_AX_RETRACTED" },
2489 { MORTISEEVENT_RX_DEPRESSED, "MORTISEEVENT_RX_DEPRESSED" },
2490 { MORTISEEVENT_RX_RELEASED, "MORTISEEVENT_RX_RELEASED" },
2491 { MORTISEEVENT_PX_OPEN, "MORTISEEVENT_PX_OPEN" },
2492 { MORTISEEVENT_PX_CLOSED, "MORTISEEVENT_PX_CLOSED" },
2493 { MORTISEEVENT_MX_UNLOCKED, "MORTISEEVENT_MX_UNLOCKED" },
2494 { MORTISEEVENT_MX_LOCKED, "MORTISEEVENT_MX_LOCKED" },
2495 { MORTISEEVENT_LAST, "MORTISEEVENT_LAST" },
2496 { MORTISEEVENT_IGNORE, "MORTISEEVENT_IGNORE" },
2497 { 0, NULL }
2499 static value_string_ext r3_mortiseeventnames_ext = VALUE_STRING_EXT_INIT(r3_mortiseeventnames);
2501 static const value_string r3_mortisetypenames [] =
2503 { MORTISETYPE_NONE, "MORTISETYPE_NONE" },
2504 { MORTISETYPE_S82276, "MORTISETYPE_S82276" },
2505 { MORTISETYPE_S82277, "MORTISETYPE_S82277" },
2506 { MORTISETYPE_S82278, "MORTISETYPE_S82278" },
2507 { MORTISETYPE_S82279, "MORTISETYPE_S82279" },
2508 { MORTISETYPE_S10G77, "MORTISETYPE_S10G77" },
2509 { MORTISETYPE_S8877, "MORTISETYPE_S8877" },
2510 { MORTISETYPE_S8878, "MORTISETYPE_S8878" },
2511 { MORTISETYPE_S8977, "MORTISETYPE_S8977" },
2512 { MORTISETYPE_S8978, "MORTISETYPE_S8978" },
2513 { MORTISETYPE_CRML20x36, "MORTISETYPE_CRML20x36" },
2514 { MORTISETYPE_CRML20x35, "MORTISETYPE_CRML20x35" },
2515 { MORTISETYPE_CRML20x34, "MORTISETYPE_CRML20x34" },
2516 { MORTISETYPE_CRML20x33, "MORTISETYPE_CRML20x33" },
2517 { MORTISETYPE_CRCL33x34, "MORTISETYPE_CRCL33x34" },
2518 { MORTISETYPE_CR9X34, "MORTISETYPE_CR9X34" },
2519 { MORTISETYPE_CR9X33, "MORTISETYPE_CR9X33" },
2520 { MORTISETYPE_CR9MX34, "MORTISETYPE_CR9MX34" },
2521 { MORTISETYPE_CR9MX33, "MORTISETYPE_CR9MX33" },
2522 { 0, NULL }
2524 static value_string_ext r3_mortisetypenames_ext = VALUE_STRING_EXT_INIT(r3_mortisetypenames);
2526 static const value_string r3_peekpokenames [] =
2528 { PEEKPOKE_READU8, "PEEKPOKE_READU8" },
2529 { PEEKPOKE_READU16, "PEEKPOKE_READU16" },
2530 { PEEKPOKE_READU24, "PEEKPOKE_READU24" },
2531 { PEEKPOKE_READU32, "PEEKPOKE_READU32" },
2532 { PEEKPOKE_READSTRING, "PEEKPOKE_READSTRING" },
2533 { PEEKPOKE_WRITEU8, "PEEKPOKE_WRITEU8" },
2534 { PEEKPOKE_WRITEU16, "PEEKPOKE_WRITEU16" },
2535 { PEEKPOKE_WRITEU24, "PEEKPOKE_WRITEU24" },
2536 { PEEKPOKE_WRITEU32, "PEEKPOKE_WRITEU32" },
2537 { PEEKPOKE_WRITESTRING, "PEEKPOKE_WRITESTRING" },
2538 { 0, NULL }
2540 static value_string_ext r3_peekpokenames_ext = VALUE_STRING_EXT_INIT(r3_peekpokenames);
2542 static const value_string r3_ppmisourcenames [] =
2544 { PPMISOURCE_NONE, "PPMISOURCE_NONE" },
2545 { PPMISOURCE_PIN, "PPMISOURCE_PIN" },
2546 { PPMISOURCE_PROX, "PPMISOURCE_PROX" },
2547 { PPMISOURCE_MAGCARD, "PPMISOURCE_MAGCARD" },
2548 { 0, NULL }
2550 static value_string_ext r3_ppmisourcenames_ext = VALUE_STRING_EXT_INIT(r3_ppmisourcenames);
2552 static const value_string r3_responsetypenames [] =
2554 { RESPONSETYPE_OK, "RESPONSETYPE_OK" },
2555 { RESPONSETYPE_ERROR, "RESPONSETYPE_ERROR" },
2556 { RESPONSETYPE_HASDATA, "RESPONSETYPE_HASDATA" },
2557 { RESPONSETYPE_NOHANDLER, "RESPONSETYPE_NOHANDLER" },
2558 { RESPONSETYPE_NOSESSION, "RESPONSETYPE_NOSESSION" },
2559 { RESPONSETYPE_BADCOMMAND, "RESPONSETYPE_BADCOMMAND" },
2560 { RESPONSETYPE_BADPARAMETER, "RESPONSETYPE_BADPARAMETER" },
2561 { RESPONSETYPE_BADPARAMETERLEN, "RESPONSETYPE_BADPARAMETERLEN" },
2562 { RESPONSETYPE_MISSINGPARAMETER, "RESPONSETYPE_MISSINGPARAMETER" },
2563 { RESPONSETYPE_DUPLICATEPARAMETER, "RESPONSETYPE_DUPLICATEPARAMETER" },
2564 { RESPONSETYPE_PARAMETERCONFLICT, "RESPONSETYPE_PARAMETERCONFLICT" },
2565 { RESPONSETYPE_BADDEVICE, "RESPONSETYPE_BADDEVICE" },
2566 { RESPONSETYPE_NVRAMERROR, "RESPONSETYPE_NVRAMERROR" },
2567 { RESPONSETYPE_NVRAMERRORNOACK, "RESPONSETYPE_NVRAMERRORNOACK" },
2568 { RESPONSETYPE_NVRAMERRORNOACK32, "RESPONSETYPE_NVRAMERRORNOACK32" },
2569 { RESPONSETYPE_NOTI2CADDRESS, "RESPONSETYPE_NOTI2CADDRESS" },
2570 { RESPONSETYPE_FIRMWAREERROR, "RESPONSETYPE_FIRMWAREERROR" },
2571 { RESPONSETYPE_DUMPINPROGRESS, "RESPONSETYPE_DUMPINPROGRESS" },
2572 { RESPONSETYPE_INTERNALERROR, "RESPONSETYPE_INTERNALERROR" },
2573 { RESPONSETYPE_NOTIMPLEMENTED, "RESPONSETYPE_NOTIMPLEMENTED" },
2574 { RESPONSETYPE_PINFORMATERROR, "RESPONSETYPE_PINFORMATERROR" },
2575 { RESPONSETYPE_PINEXISTS, "RESPONSETYPE_PINEXISTS" },
2576 { RESPONSETYPE_PINNOTFOUND, "RESPONSETYPE_PINNOTFOUND" },
2577 { RESPONSETYPE_USERACTIVE, "RESPONSETYPE_USERACTIVE" },
2578 { RESPONSETYPE_USERINACTIVE, "RESPONSETYPE_USERINACTIVE" },
2579 { RESPONSETYPE_PARENTNOTFOUND, "RESPONSETYPE_PARENTNOTFOUND" },
2580 { RESPONSETYPE_NOCHAIN, "RESPONSETYPE_NOCHAIN" },
2581 { RESPONSETYPE_CAUGHTINLOOP, "RESPONSETYPE_CAUGHTINLOOP" },
2582 { RESPONSETYPE_EVENTFILTERED, "RESPONSETYPE_EVENTFILTERED" },
2583 { RESPONSETYPE_PAYLOADTOOLARGE, "RESPONSETYPE_PAYLOADTOOLARGE" },
2584 { RESPONSETYPE_ENDOFDATA, "RESPONSETYPE_ENDOFDATA" },
2585 { RESPONSETYPE_RMTAUTHREJECTED, "RESPONSETYPE_RMTAUTHREJECTED" },
2586 { RESPONSETYPE_NVRAMVERSIONERROR, "RESPONSETYPE_NVRAMVERSIONERROR" },
2587 { RESPONSETYPE_NOHARDWARE, "RESPONSETYPE_NOHARDWARE" },
2588 { RESPONSETYPE_SCHEDULERCONFLICT, "RESPONSETYPE_SCHEDULERCONFLICT" },
2589 { RESPONSETYPE_NVRAMWRITEERROR, "RESPONSETYPE_NVRAMWRITEERROR" },
2590 { RESPONSETYPE_DECLINEDFILTERED, "RESPONSETYPE_DECLINEDFILTERED" },
2591 { RESPONSETYPE_NECONFIGPARM, "RESPONSETYPE_NECONFIGPARM" },
2592 { RESPONSETYPE_FLASHERASEERROR, "RESPONSETYPE_FLASHERASEERROR" },
2593 { RESPONSETYPE_FLASHWRITEERROR, "RESPONSETYPE_FLASHWRITEERROR" },
2594 { RESPONSETYPE_BADNVBACKUP, "RESPONSETYPE_BADNVBACKUP" },
2595 { RESPONSETYPE_EARLYACK, "RESPONSETYPE_EARLYACK" },
2596 { RESPONSETYPE_ALARMFILTERED, "RESPONSETYPE_ALARMFILTERED" },
2597 { RESPONSETYPE_ACVFAILURE, "RESPONSETYPE_ACVFAILURE" },
2598 { RESPONSETYPE_USERCHECKSUMERROR, "RESPONSETYPE_USERCHECKSUMERROR" },
2599 { RESPONSETYPE_CHECKSUMERROR, "RESPONSETYPE_CHECKSUMERROR" },
2600 { RESPONSETYPE_RTCSQWFAILURE, "RESPONSETYPE_RTCSQWFAILURE" },
2601 { RESPONSETYPE_PRIORITYSHUTDOWN, "RESPONSETYPE_PRIORITYSHUTDOWN" },
2602 { RESPONSETYPE_NOTMODIFIABLE, "RESPONSETYPE_NOTMODIFIABLE" },
2603 { RESPONSETYPE_CANTPRESERVE, "RESPONSETYPE_CANTPRESERVE" },
2604 { RESPONSETYPE_INPASSAGEMODE, "RESPONSETYPE_INPASSAGEMODE" },
2605 { 0, NULL }
2607 static value_string_ext r3_responsetypenames_ext = VALUE_STRING_EXT_INIT(r3_responsetypenames);
2609 static const value_string r3_timezonemodenames [] =
2611 { TIMEZONEMODE_NORMAL, "TIMEZONEMODE_NORMAL" },
2612 { TIMEZONEMODE_EXCLUSION, "TIMEZONEMODE_EXCLUSION" },
2613 { TIMEZONEMODE_AUTOTIME, "TIMEZONEMODE_AUTOTIME" },
2614 { TIMEZONEMODE_AUTOFPT, "TIMEZONEMODE_AUTOFPT" },
2615 { TIMEZONEMODE_UAPM, "TIMEZONEMODE_UAPM" },
2616 { 0, NULL }
2618 static value_string_ext r3_timezonemodenames_ext = VALUE_STRING_EXT_INIT(r3_timezonemodenames);
2620 static const value_string r3_upstreamcommandnames [] =
2622 { UPSTREAMCOMMAND_RESERVED, "UPSTREAMCOMMAND_RESERVED" },
2623 { UPSTREAMCOMMAND_DEBUGMSG, "UPSTREAMCOMMAND_DEBUGMSG" },
2624 { UPSTREAMCOMMAND_QUERYVERSION, "UPSTREAMCOMMAND_QUERYVERSION" },
2625 { UPSTREAMCOMMAND_QUERYDATETIME, "UPSTREAMCOMMAND_QUERYDATETIME" },
2626 { UPSTREAMCOMMAND_QUERYSERIALNUMBER, "UPSTREAMCOMMAND_QUERYSERIALNUMBER" },
2627 { UPSTREAMCOMMAND_DUMPEVENTLOG, "UPSTREAMCOMMAND_DUMPEVENTLOG" },
2628 { UPSTREAMCOMMAND_DUMPNVRAM, "UPSTREAMCOMMAND_DUMPNVRAM" },
2629 { UPSTREAMCOMMAND_RMTAUTHREQUEST, "UPSTREAMCOMMAND_RMTAUTHREQUEST" },
2630 { UPSTREAMCOMMAND_RETRIEVEUSER, "UPSTREAMCOMMAND_RETRIEVEUSER" },
2631 { UPSTREAMCOMMAND_QUERYCONFIG, "UPSTREAMCOMMAND_QUERYCONFIG" },
2632 { UPSTREAMCOMMAND_RMTEVENTLOGRECORD, "UPSTREAMCOMMAND_RMTEVENTLOGRECORD" },
2633 { UPSTREAMCOMMAND_DPAC, "UPSTREAMCOMMAND_DPAC" },
2634 { UPSTREAMCOMMAND_NOTIFY, "UPSTREAMCOMMAND_NOTIFY" },
2635 { UPSTREAMCOMMAND_MFG, "UPSTREAMCOMMAND_MFG" },
2636 { UPSTREAMCOMMAND_EVENTLOGWARNING, "UPSTREAMCOMMAND_EVENTLOGWARNING" },
2637 { UPSTREAMCOMMAND_DUMPNVRAMRLE, "UPSTREAMCOMMAND_DUMPNVRAMRLE" },
2638 { UPSTREAMCOMMAND_RMTDECLINEDRECORD, "UPSTREAMCOMMAND_RMTDECLINEDRECORD" },
2639 { UPSTREAMCOMMAND_DECLINEDWARNING, "UPSTREAMCOMMAND_DECLINEDWARNING" },
2640 { UPSTREAMCOMMAND_DUMPDECLINEDLOG, "UPSTREAMCOMMAND_DUMPDECLINEDLOG" },
2641 { UPSTREAMCOMMAND_RMTALARMRECORD, "UPSTREAMCOMMAND_RMTALARMRECORD" },
2642 { UPSTREAMCOMMAND_ALARMWARNING, "UPSTREAMCOMMAND_ALARMWARNING" },
2643 { UPSTREAMCOMMAND_DUMPALARMLOG, "UPSTREAMCOMMAND_DUMPALARMLOG" },
2644 { UPSTREAMCOMMAND_CONNECTSCHEDULER, "UPSTREAMCOMMAND_CONNECTSCHEDULER" },
2645 { UPSTREAMCOMMAND_CONNECTCOMMUSER, "UPSTREAMCOMMAND_CONNECTCOMMUSER" },
2646 { UPSTREAMCOMMAND_CONNECTALARM, "UPSTREAMCOMMAND_CONNECTALARM" },
2647 { UPSTREAMCOMMAND_DUMPDEBUGLOG, "UPSTREAMCOMMAND_DUMPDEBUGLOG" },
2648 { 0, NULL }
2650 static value_string_ext r3_upstreamcommandnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamcommandnames);
2652 static const value_string r3_upstreamfieldnames [] =
2654 { UPSTREAMFIELD_NOTUSED, "UPSTREAMFIELD_NOTUSED" },
2655 { UPSTREAMFIELD_SERIALNUMBER, "UPSTREAMFIELD_SERIALNUMBER" },
2656 { UPSTREAMFIELD_NAR, "UPSTREAMFIELD_NAR" },
2657 { UPSTREAMFIELD_ENTRYDEVICE, "UPSTREAMFIELD_ENTRYDEVICE" },
2658 { UPSTREAMFIELD_PPMIFIELDTYPE, "UPSTREAMFIELD_PPMIFIELDTYPE" },
2659 { UPSTREAMFIELD_PIN, "UPSTREAMFIELD_PIN" },
2660 { UPSTREAMFIELD_SEQUENCENUMBER, "UPSTREAMFIELD_SEQUENCENUMBER" },
2661 { UPSTREAMFIELD_RESPONSEWINDOW, "UPSTREAMFIELD_RESPONSEWINDOW" },
2662 { UPSTREAMFIELD_USERNUMBER, "UPSTREAMFIELD_USERNUMBER" },
2663 { UPSTREAMFIELD_VERSION, "UPSTREAMFIELD_VERSION" },
2664 { UPSTREAMFIELD_EVENTLOGRECORD, "UPSTREAMFIELD_EVENTLOGRECORD" },
2665 { UPSTREAMFIELD_DATETIME, "UPSTREAMFIELD_DATETIME" },
2666 { UPSTREAMFIELD_EVENTLOGRECORDCOUNT, "UPSTREAMFIELD_EVENTLOGRECORDCOUNT" },
2667 { UPSTREAMFIELD_DECLINEDRECORDCOUNT, "UPSTREAMFIELD_DECLINEDRECORDCOUNT" },
2668 { UPSTREAMFIELD_DECLINEDRECORD, "UPSTREAMFIELD_DECLINEDRECORD" },
2669 { UPSTREAMFIELD_USERTYPE, "UPSTREAMFIELD_USERTYPE" },
2670 { UPSTREAMFIELD_ACCESSALWAYS, "UPSTREAMFIELD_ACCESSALWAYS" },
2671 { UPSTREAMFIELD_CACHED, "UPSTREAMFIELD_CACHED" },
2672 { UPSTREAMFIELD_PRIMARYFIELDTYPE, "UPSTREAMFIELD_PRIMARYFIELDTYPE" },
2673 { UPSTREAMFIELD_AUXFIELDTYPE, "UPSTREAMFIELD_AUXFIELDTYPE" },
2674 { UPSTREAMFIELD_ACCESSMODE, "UPSTREAMFIELD_ACCESSMODE" },
2675 { UPSTREAMFIELD_EXPIREON, "UPSTREAMFIELD_EXPIREON" },
2676 { UPSTREAMFIELD_USECOUNT, "UPSTREAMFIELD_USECOUNT" },
2677 { UPSTREAMFIELD_TIMEZONE, "UPSTREAMFIELD_TIMEZONE" },
2678 { UPSTREAMFIELD_EXCEPTIONGROUP, "UPSTREAMFIELD_EXCEPTIONGROUP" },
2679 { UPSTREAMFIELD_PRIMARYPIN, "UPSTREAMFIELD_PRIMARYPIN" },
2680 { UPSTREAMFIELD_AUXPIN, "UPSTREAMFIELD_AUXPIN" },
2681 { UPSTREAMFIELD_ALARMRECORDCOUNT, "UPSTREAMFIELD_ALARMRECORDCOUNT" },
2682 { UPSTREAMFIELD_ALARMRECORD, "UPSTREAMFIELD_ALARMRECORD" },
2683 { UPSTREAMFIELD_AUXCTLRVERSION, "UPSTREAMFIELD_AUXCTLRVERSION" },
2684 { 0, NULL }
2686 static value_string_ext r3_upstreamfieldnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamfieldnames);
2688 static const value_string r3_usertypenames [] =
2690 { USERTYPE_NONE, "USERTYPE_NONE" },
2691 { USERTYPE_MASTER, "USERTYPE_MASTER" },
2692 { USERTYPE_EMERGENCY, "USERTYPE_EMERGENCY" },
2693 { USERTYPE_SUPERVISOR, "USERTYPE_SUPERVISOR" },
2694 { USERTYPE_USER, "USERTYPE_USER" },
2695 { USERTYPE_EXTENDED, "USERTYPE_EXTENDED" },
2696 { USERTYPE_PASSAGE, "USERTYPE_PASSAGE" },
2697 { USERTYPE_ONETIME, "USERTYPE_ONETIME" },
2698 { USERTYPE_PANIC, "USERTYPE_PANIC" },
2699 { USERTYPE_LOCKOUT, "USERTYPE_LOCKOUT" },
2700 { USERTYPE_RELOCK, "USERTYPE_RELOCK" },
2701 { USERTYPE_NOTIFY, "USERTYPE_NOTIFY" },
2702 { USERTYPE_COMM, "USERTYPE_COMM" },
2703 { USERTYPE_SUSPENDED, "USERTYPE_SUSPENDED" },
2704 { 0, NULL }
2706 static value_string_ext r3_usertypenames_ext = VALUE_STRING_EXT_INIT(r3_usertypenames);
2708 static const value_string r3_mfgnvramdumpnames [] =
2710 { 0, "All" },
2711 { 1, "PIC" },
2712 { 2, "User" },
2713 { 3, "Event" },
2714 { 0, NULL }
2716 static value_string_ext r3_mfgnvramdumpnames_ext = VALUE_STRING_EXT_INIT(r3_mfgnvramdumpnames);
2718 static const value_string r3_mfgremoteunlocknames [] =
2720 { 0, "Normal" },
2721 { 1, "Unlock" },
2722 { 2, "Lock" },
2723 { 0, NULL }
2725 static value_string_ext r3_mfgremoteunlocknames_ext = VALUE_STRING_EXT_INIT(r3_mfgremoteunlocknames);
2727 static const value_string r3_mfgtestpreservenames [] =
2729 { 0, "Save" },
2730 { 1, "Restore" },
2731 { 0, NULL }
2733 static value_string_ext r3_mfgtestpreservenames_ext = VALUE_STRING_EXT_INIT(r3_mfgtestpreservenames);
2735 static const value_string r3_daynames [] =
2737 { 0, "Sunday" },
2738 { 1, "Monday" },
2739 { 2, "Tueday" },
2740 { 3, "Wednesday" },
2741 { 4, "Thursday" },
2742 { 5, "Friday" },
2743 { 6, "Saturday" },
2744 { 0, NULL }
2746 static value_string_ext r3_daynames_ext = VALUE_STRING_EXT_INIT(r3_daynames);
2748 static const value_string r3_monthnames [] =
2750 { 0, "ERROR!" },
2751 { 1, "January" },
2752 { 2, "February" },
2753 { 3, "March" },
2754 { 4, "April" },
2755 { 5, "May" },
2756 { 6, "June" },
2757 { 7, "July" },
2758 { 8, "August" },
2759 { 9, "September" },
2760 { 10, "October" },
2761 { 11, "November" },
2762 { 12, "December" },
2763 { 0, NULL }
2765 static value_string_ext r3_monthnames_ext = VALUE_STRING_EXT_INIT(r3_monthnames);
2767 static const value_string r3_monthdaynames [] =
2769 { 0, "ERROR!" },
2770 { 1, " 1st" },
2771 { 2, " 2nd" },
2772 { 3, " 3rd" },
2773 { 4, " 4th" },
2774 { 5, " 5th" },
2775 { 6, " 6th" },
2776 { 7, " 7th" },
2777 { 8, " 8th" },
2778 { 9, " 9th" },
2779 { 10, "10th" },
2780 { 11, "11th" },
2781 { 12, "12th" },
2782 { 13, "13th" },
2783 { 14, "14th" },
2784 { 15, "15th" },
2785 { 16, "16th" },
2786 { 17, "17th" },
2787 { 18, "18th" },
2788 { 19, "19th" },
2789 { 20, "20th" },
2790 { 21, "21st" },
2791 { 22, "22nd" },
2792 { 23, "23rd" },
2793 { 24, "24th" },
2794 { 25, "25th" },
2795 { 26, "26th" },
2796 { 27, "27th" },
2797 { 28, "28th" },
2798 { 29, "29th" },
2799 { 30, "30th" },
2800 { 31, "31st" },
2801 { 0, NULL }
2803 static value_string_ext r3_monthdaynames_ext = VALUE_STRING_EXT_INIT(r3_monthdaynames);
2805 static const value_string r3_powertablenames [] =
2807 { 1, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2808 { 2, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2809 { 3, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2810 { 4, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2811 { 5, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {13, 12, 12, 11, 11, 10, 10, 9}" },
2812 { 6, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {14, 13, 13, 12, 12, 11, 11, 10}" },
2813 { 7, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {15, 14, 14, 13, 13, 12, 12, 11}" },
2814 { 8, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {16, 15, 15, 14, 14, 13, 13, 12}" },
2815 { 0, NULL }
2817 static value_string_ext r3_powertablenames_ext = VALUE_STRING_EXT_INIT(r3_powertablenames);
2819 static const true_false_string tfs_rmtauthretry_flags =
2821 "Retry",
2822 "Deny"
2825 static const true_false_string tfs_mortisepins_flags =
2827 "High",
2828 "Low"
2831 static const true_false_string tfs_errornoerror_flags =
2833 "Error",
2834 "No Error"
2837 static const string_string r3_snmanufacturernames [] =
2839 { "IT", "ITS" },
2840 { "KC", "Kimchuk" },
2841 { NULL, NULL }
2844 static const string_string r3_snyearnames [] =
2846 { "5", "2005" },
2847 { "6", "2006" },
2848 { "7", "2007" },
2849 { "8", "2008" },
2850 { "9", "2009" },
2851 { "0", "2010" },
2852 { "1", "2011" },
2853 { "2", "2012" },
2854 { "3", "2013" },
2855 { "4", "2014" },
2856 { NULL, NULL }
2859 static const string_string r3_snmodelnames [] =
2861 { "H", "Sx controller" },
2862 { "J", "Px controller" },
2863 { "D", "PG offline interface board" },
2864 { "E", "Px online interface board" },
2865 { "N", "Ethernet-PD board" },
2866 { "O", "CAM board" },
2867 { NULL, NULL }
2870 static const string_string r3_sngroupnames [] =
2872 { "S", "Sargent" },
2873 { "P", "Persona" },
2874 { "C", "Corbin-Russwin" },
2875 { NULL, NULL }
2878 static const string_string r3_snnidnames [] =
2880 { "A", "Ethernet" },
2881 { "B", "DPAC 802.11b" },
2882 { "C", "DPAC 802.11bg" },
2883 { "D", "Zigbee" },
2884 { "E", "GPRS" },
2885 { NULL, NULL }
2888 static const string_string r3_snhidnames [] =
2890 { "00", "[None]" },
2891 { "01", "Keypad" },
2892 { "02", "eProx" },
2893 { "03", "eProx, Keypad" },
2894 { "04", "iProx" },
2895 { "05", "iProx, Keypad" },
2896 { "06", "iProx, eProx" },
2897 { "07", "iProx, eProx, Keypad" },
2898 { "08", "Mag Card" },
2899 { "09", "Mag Card, Keypad" },
2900 { "0a", "Mag Card, eProx" },
2901 { "0b", "Mag Card, eProx, Keypad" },
2902 { "0c", "Mag Card, iProx" },
2903 { "0d", "Mag Card, iProx, Keypad" },
2904 { "0e", "Mag Card, iProx, eProx" },
2905 { "0f", "Mag Card, iProx, eProx, Keypad" },
2906 { "10", "Biometric" },
2907 { "11", "Biometric, Keypad" },
2908 { "12", "Biometric, eProx" },
2909 { "13", "Biometric, eProx, Keypad" },
2910 { "14", "Biometric, iProx" },
2911 { "15", "Biometric, iProx, Keypad" },
2912 { "16", "Biometric, iProx, eProx" },
2913 { "17", "Biometric, iProx, eProx, Keypad" },
2914 { "18", "Biometric, Mag Card" },
2915 { "19", "Biometric, Mag Card, Keypad" },
2916 { "1a", "Biometric, Mag Card, eProx" },
2917 { "1b", "Biometric, Mag Card, eProx, Keypad" },
2918 { "1c", "Biometric, Mag Card, iProx" },
2919 { "1d", "Biometric, Mag Card, iProx, Keypad" },
2920 { "1e", "Biometric, Mag Card, iProx, eProx" },
2921 { "1f", "Biometric, Mag Card, iProx, eProx, Keypad" },
2922 { NULL, NULL }
2925 static const string_string r3_snpowersupplynames [] =
2927 { "A", "Batteries" },
2928 { "B", "External power" },
2929 { "C", "Power over Ethernet" },
2930 { "D", "External power w/ backup" },
2931 { "E", "Power over Ethernet w/ backup" },
2932 { NULL, NULL }
2935 static const string_string r3_snmortisenames [] =
2937 { "A", "Sargent 82276 mortise" },
2938 { "B", "Sargent 82277 mortise" },
2939 { "C", "Sargent 82278 mortise" },
2940 { "D", "Sargent 82279 mortise" },
2941 { "E", "Sargent 10G77 bored" },
2942 { "F", "Sargent 8877 exit" },
2943 { "G", "Sargent 8878 exit" },
2944 { "H", "Sargent 8977 exit" },
2945 { "I", "Sargent 8878 exit" },
2946 { "J", "Corbin-Russwin ML20736/ML20836 mortise" },
2947 { "K", "Corbin-Russwin ML20735/ML20835 mortise" },
2948 { "L", "Corbin-Russwin ML20734/ML20834 mortise" },
2949 { "M", "Corbin-Russwin ML20733/ML20833 mortise" },
2950 { "N", "Corbin-Russwin CL33734/CL33834 bored" },
2951 { "O", "Corbin-Russwin 9734/9834 exit" },
2952 { "P", "Corbin-Russwin 9733/9833 exit" },
2953 { "Q", "Corbin-Russwin 9M734/9M834 exit" },
2954 { "R", "Corbin-Russwin 9M733/9M833 exit" },
2955 { NULL, NULL }
2959 * Mapping table so dissect_r3_cmd_setconfig() knows what the configuration item type is
2961 static configType_e configMap [] =
2963 /* CONFIGITEM_SERIAL_NUMBER */ CONFIGTYPE_STRING,
2964 /* CONFIGITEM_CRYPT_KEY */ CONFIGTYPE_STRING,
2965 /* CONFIGITEM_HARDWARE_OPTIONS_MFG */ CONFIGTYPE_16,
2966 /* CONFIGITEM_HARDWARE_OPTIONS */ CONFIGTYPE_16,
2967 /* CONFIGITEM_NVRAM_CHANGES */ CONFIGTYPE_16,
2968 /* CONFIGITEM_NVRAMDIRTY */ CONFIGTYPE_BOOL,
2969 /* CONFIGITEM_NVRAM_WV */ CONFIGTYPE_BOOL,
2970 /* CONFIGITEM_ENABLE_WDT */ CONFIGTYPE_BOOL,
2971 /* CONFIGITEM_EARLY_ACK */ CONFIGTYPE_BOOL,
2972 /* CONFIGITEM_CONSOLE_AES_ONLY */ CONFIGTYPE_BOOL,
2973 /* CONFIGITEM_RADIO_AES_ONLY */ CONFIGTYPE_BOOL,
2974 /* CONFIGITEM_NDRLE */ CONFIGTYPE_BOOL,
2975 /* CONFIGITEM_SOMF */ CONFIGTYPE_BOOL,
2976 /* CONFIGITEM_NOGAF */ CONFIGTYPE_BOOL,
2977 /* CONFIGITEM_CARD_READER_POWER */ CONFIGTYPE_BOOL,
2978 /* CONFIGITEM_PROX_ENABLE */ CONFIGTYPE_BOOL,
2979 /* CONFIGITEM_CKSUMCONFIG */ CONFIGTYPE_BOOL,
2980 /* CONFIGITEM_DAILY_BATTERY_CHECK */ CONFIGTYPE_BOOL,
2981 /* CONFIGITEM_DAILY_BATTERY_CHECK_HOUR */ CONFIGTYPE_8,
2982 /* CONFIGITEM_BATTERY_LOW */ CONFIGTYPE_BOOL,
2983 /* CONFIGITEM_LRU_HEAD */ CONFIGTYPE_16,
2984 /* CONFIGITEM_LRU_TAIL */ CONFIGTYPE_16,
2985 /* CONFIGITEM_RTC_CALIBRATION */ CONFIGTYPE_8,
2986 /* CONFIGITEM_ACVREQUESTER */ CONFIGTYPE_8,
2987 /* CONFIGITEM_LOCAL_LED */ CONFIGTYPE_8,
2988 /* CONFIGITEM_ERRCNT_XORLEN */ CONFIGTYPE_16,
2989 /* CONFIGITEM_ERRCNT_CRC */ CONFIGTYPE_16,
2990 /* CONFIGITEM_ERRCNT_NOTSIGIL */ CONFIGTYPE_16,
2991 /* CONFIGITEM_ERRCNT_TIMEOUT */ CONFIGTYPE_16,
2992 /* CONFIGITEM_ERRCNT_TOOLONG */ CONFIGTYPE_16,
2993 /* CONFIGITEM_ERRCNT_TOOSHORT */ CONFIGTYPE_16,
2994 /* CONFIGITEM_ERRCNT_HITDEFAULT */ CONFIGTYPE_16,
2995 /* CONFIGITEM_ERRCNT_OVERRUN */ CONFIGTYPE_16,
2996 /* CONFIGITEM_ERRCNT_UARTFE */ CONFIGTYPE_16,
2997 /* CONFIGITEM_ERRCNT_UARTOE */ CONFIGTYPE_16,
2998 /* CONFIGITEM_DST_SET */ CONFIGTYPE_BOOL,
2999 /* CONFIGITEM_DST_MODE */ CONFIGTYPE_8,
3000 /* CONFIGITEM_DST_FORWARD_MONTH */ CONFIGTYPE_8,
3001 /* CONFIGITEM_DST_FORWARD_DOM */ CONFIGTYPE_8,
3002 /* CONFIGITEM_DST_FORWARD_OOD */ CONFIGTYPE_8,
3003 /* CONFIGITEM_DST_FORWARD_DOW */ CONFIGTYPE_8,
3004 /* CONFIGITEM_DST_FORWARD_HOUR */ CONFIGTYPE_8,
3005 /* CONFIGITEM_DST_FORWARD_MINUTE */ CONFIGTYPE_8,
3006 /* CONFIGITEM_DST_FORWARD_ADJUST */ CONFIGTYPE_8,
3007 /* CONFIGITEM_DST_BACK_MONTH */ CONFIGTYPE_8,
3008 /* CONFIGITEM_DST_BACK_DOM */ CONFIGTYPE_8,
3009 /* CONFIGITEM_DST_BACK_OOD */ CONFIGTYPE_8,
3010 /* CONFIGITEM_DST_BACK_DOW */ CONFIGTYPE_8,
3011 /* CONFIGITEM_DST_BACK_HOUR */ CONFIGTYPE_8,
3012 /* CONFIGITEM_DST_BACK_MINUTE */ CONFIGTYPE_8,
3013 /* CONFIGITEM_DST_BACK_ADJUST */ CONFIGTYPE_8,
3014 /* CONFIGITEM_EVENTLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3015 /* CONFIGITEM_EVENTLOG_BEGIN */ CONFIGTYPE_16,
3016 /* CONFIGITEM_EVENTLOG_RECORD */ CONFIGTYPE_16,
3017 /* CONFIGITEM_EVENTLOG_ENTRIES */ CONFIGTYPE_16,
3018 /* CONFIGITEM_EVENTLOG_WARNDEVICE */ CONFIGTYPE_8,
3019 /* CONFIGITEM_EVENTLOG_WARNEVERY */ CONFIGTYPE_16,
3020 /* CONFIGITEM_EVENTLOG_RMTDEVICE */ CONFIGTYPE_8,
3021 /* CONFIGITEM_DECLINEDLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3022 /* CONFIGITEM_DECLINEDLOG_BEGIN */ CONFIGTYPE_16,
3023 /* CONFIGITEM_DECLINEDLOG_RECORD */ CONFIGTYPE_16,
3024 /* CONFIGITEM_DECLINEDLOG_ENTRIES */ CONFIGTYPE_16,
3025 /* CONFIGITEM_DECLINEDLOG_WARNDEVICE */ CONFIGTYPE_8,
3026 /* CONFIGITEM_DECLINEDLOG_WARNEVERY */ CONFIGTYPE_16,
3027 /* CONFIGITEM_DECLINEDLOG_RMTDEVICE */ CONFIGTYPE_8,
3028 /* CONFIGITEM_ALARMLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3029 /* CONFIGITEM_ALARMLOG_BEGIN */ CONFIGTYPE_16,
3030 /* CONFIGITEM_ALARMLOG_RECORD */ CONFIGTYPE_16,
3031 /* CONFIGITEM_ALARMLOG_ENTRIES */ CONFIGTYPE_16,
3032 /* CONFIGITEM_ALARMLOG_WARNDEVICE */ CONFIGTYPE_8,
3033 /* CONFIGITEM_ALARMLOG_WARNEVERY */ CONFIGTYPE_16,
3034 /* CONFIGITEM_ALARMLOG_RMTDEVICE */ CONFIGTYPE_8,
3035 /* CONFIGITEM_VISIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
3036 /* CONFIGITEM_AUDIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
3037 /* CONFIGITEM_VISIBLE_INDICATORS */ CONFIGTYPE_BOOL,
3038 /* CONFIGITEM_AUDIBLE_INDICATORS */ CONFIGTYPE_BOOL,
3039 /* CONFIGITEM_2NDPINDURATION */ CONFIGTYPE_8,
3040 /* CONFIGITEM_LOCKOUT_ATTEMPTS */ CONFIGTYPE_8,
3041 /* CONFIGITEM_LOCKOUT_DURATION */ CONFIGTYPE_8,
3042 /* CONFIGITEM_KEYPAD_INACTIVITY */ CONFIGTYPE_8,
3043 /* CONFIGITEM_ICIDLE_DURATION */ CONFIGTYPE_8,
3044 /* CONFIGITEM_WRITE_DECLINED_LOG */ CONFIGTYPE_BOOL,
3045 /* CONFIGITEM_LOW_BATTERY_INDICATOR */ CONFIGTYPE_BOOL,
3046 /* CONFIGITEM_PANIC_MODE */ CONFIGTYPE_BOOL,
3047 /* CONFIGITEM_TIMEZONE_ENABLE */ CONFIGTYPE_BOOL,
3048 /* CONFIGITEM_EXCEPTION_ENABLE */ CONFIGTYPE_BOOL,
3049 /* CONFIGITEM_AUTOUNLOCK_ENABLE */ CONFIGTYPE_BOOL,
3050 /* CONFIGITEM_LOCK_PRIORITY_EMERGENCY */ CONFIGTYPE_8,
3051 /* CONFIGITEM_LOCK_PRIORITY_SUPERVISOR */ CONFIGTYPE_8,
3052 /* CONFIGITEM_LOCK_PRIORITY_USER */ CONFIGTYPE_8,
3053 /* CONFIGITEM_LOCK_PRIORITY_PASSAGE */ CONFIGTYPE_8,
3054 /* CONFIGITEM_LOCK_PRIORITY_PANIC */ CONFIGTYPE_8,
3055 /* CONFIGITEM_LOCK_PRIORITY_LOCKOUT */ CONFIGTYPE_8,
3056 /* CONFIGITEM_LOCK_PRIORITY_RELOCK */ CONFIGTYPE_8,
3057 /* CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN */ CONFIGTYPE_8,
3058 /* CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE */ CONFIGTYPE_8,
3059 /* CONFIGITEM_LOCK_PRIORITY_REMOTE */ CONFIGTYPE_8,
3060 /* CONFIGITEM_LOCK_TYPE */ CONFIGTYPE_8,
3061 /* CONFIGITEM_DOUBLE_PULSE */ CONFIGTYPE_BOOL,
3062 /* CONFIGITEM_DOUBLE_DELAY */ CONFIGTYPE_8,
3063 /* CONFIGITEM_MOTOR_DURATION */ CONFIGTYPE_8,
3064 /* CONFIGITEM_MORTISE_TYPE */ CONFIGTYPE_8,
3065 /* CONFIGITEM_UNLOCK_TIME */ CONFIGTYPE_8,
3066 /* CONFIGITEM_EXT_UNLOCK_TIME */ CONFIGTYPE_8,
3067 /* CONFIGITEM_DOOR_AJAR_TIME */ CONFIGTYPE_8,
3068 /* CONFIGITEM_SESSION_TIMEOUT */ CONFIGTYPE_8,
3069 /* CONFIGITEM_RETRY_ON_TIMEOUT */ CONFIGTYPE_BOOL,
3070 /* CONFIGITEM_UNSOLICITED_ENCRYPT */ CONFIGTYPE_8,
3071 /* CONFIGITEM_RMT_AUTH_TIMEOUT */ CONFIGTYPE_8,
3072 /* CONFIGITEM_RMT_AUTH_DEVICE */ CONFIGTYPE_8,
3073 /* CONFIGITEM_ALARM_DEVICE */ CONFIGTYPE_8,
3074 /* CONFIGITEM_NOTIFY_DEVICE */ CONFIGTYPE_8,
3075 /* CONFIGITEM_COMMUSER_DEVICE */ CONFIGTYPE_8,
3076 /* CONFIGITEM_SCHEDULER_DEVICE */ CONFIGTYPE_8,
3077 /* CONFIGITEM_SCHEDULER_TYPE */ CONFIGTYPE_8,
3078 /* CONFIGITEM_SCHEDULER_AWAKE */ CONFIGTYPE_8,
3079 /* CONFIGITEM_SCHEDULER_PERIOD */ CONFIGTYPE_16,
3080 /* CONFIGITEM_SCHEDULER_HOD */ CONFIGTYPE_STRING,
3081 /* CONFIGITEM_SCHEDULER_DOW */ CONFIGTYPE_8,
3082 /* CONFIGITEM_SCHEDULER_DOM */ CONFIGTYPE_32,
3083 /* CONFIGITEM_SCHEDULER_HM1 */ CONFIGTYPE_16,
3084 /* CONFIGITEM_SCHEDULER_HM2 */ CONFIGTYPE_16,
3085 /* CONFIGITEM_SCHEDULER_HM3 */ CONFIGTYPE_16,
3086 /* CONFIGITEM_SCHEDULER_HM4 */ CONFIGTYPE_16,
3087 /* CONFIGITEM_RADIO_TYPE */ CONFIGTYPE_8,
3088 /* CONFIGITEM_RADIO_MODE */ CONFIGTYPE_8,
3089 /* CONFIGITEM_RADIO_TIMEOUT */ CONFIGTYPE_8,
3090 /* CONFIGITEM_RADIO_ATTEMPTS */ CONFIGTYPE_8,
3091 /* CONFIGITEM_RADIO_HOUSEKEEPING */ CONFIGTYPE_8,
3092 /* CONFIGITEM_RADIO_LEAPUSERNAME */ CONFIGTYPE_STRING,
3093 /* CONFIGITEM_RADIO_LEAPPASSWORD */ CONFIGTYPE_STRING,
3094 /* CONFIGITEM_INHIBIT_VOLTAGE */ CONFIGTYPE_8,
3095 /* CONFIGITEM_LOW_VOLTAGE */ CONFIGTYPE_8,
3096 /* CONFIGITEM_PT_RANGE_1 */ CONFIGTYPE_8,
3097 /* CONFIGITEM_PT_RANGE_2 */ CONFIGTYPE_8,
3098 /* CONFIGITEM_PT_RANGE_3 */ CONFIGTYPE_8,
3099 /* CONFIGITEM_PT_RANGE_4 */ CONFIGTYPE_8,
3100 /* CONFIGITEM_PT_RANGE_5 */ CONFIGTYPE_8,
3101 /* CONFIGITEM_PT_RANGE_6 */ CONFIGTYPE_8,
3102 /* CONFIGITEM_PT_RANGE_7 */ CONFIGTYPE_8,
3103 /* CONFIGITEM_PT_RANGE_8 */ CONFIGTYPE_8,
3104 /* CONFIGITEM_MAGCARD_IFS */ CONFIGTYPE_BOOL,
3105 /* CONFIGITEM_MAGCARD_FIELDS */ CONFIGTYPE_8,
3106 /* CONFIGITEM_MAGCARD_OFFSET */ CONFIGTYPE_8,
3107 /* CONFIGITEM_MAGCARD_DIGITS */ CONFIGTYPE_8,
3108 /* CONFIGITEM_ALARMS */ CONFIGTYPE_STRING,
3109 /* CONFIGITEM_FILTERS */ CONFIGTYPE_STRING,
3110 /* CONFIGITEM_ALARMSTATE */ CONFIGTYPE_8,
3111 /* CONFIGITEM_DOORSTATE */ CONFIGTYPE_8,
3112 /* CONFIGITEM_DPACDEBUG */ CONFIGTYPE_BOOL,
3113 /* CONFIGITEM_FAILOPENSECURE */ CONFIGTYPE_BOOL,
3114 /* CONFIGITEM_REPLACED_VOLTAGE */ CONFIGTYPE_8,
3115 /* CONFIGITEM_RX_HELD_TIME */ CONFIGTYPE_8,
3116 /* CONFIGITEM_PACKET_TIMEOUT */ CONFIGTYPE_8,
3117 /* CONFIGITEM_EXTENDEDRESPONSE */ CONFIGTYPE_BOOL,
3118 /* CONFIGITEM_PASSAGEMODEINDICATOR */ CONFIGTYPE_BOOL,
3119 /* CONFIGITEM_PFMRETURNTIME */ CONFIGTYPE_8
3124 * Dissectors for each command
3126 static void dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3127 static void dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3128 static void dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3129 static void dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3130 static void dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3131 static void dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3132 static void dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3133 static void dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3134 static void dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3135 static void dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3136 static void dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3137 static void dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3138 static void dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3139 static void dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3140 static void dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3141 static void dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3142 static void dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3143 static void dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3144 static void dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3145 static void dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3146 static void dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3147 static void dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3148 static void dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3149 static void dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3150 static void dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3151 static void dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3152 static void dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3153 static void dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3154 static void dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3155 static void dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3156 static void dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3157 static void dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3159 static void (*r3command_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
3161 /* CMD_RESPONSE */ dissect_r3_cmd_response,
3162 /* CMD_HANDSHAKE */ dissect_r3_cmd_handshake,
3163 /* CMD_KILLSESSION */ dissect_r3_cmd_killsession,
3164 /* CMD_QUERYSERIALNUMBER */ dissect_r3_cmd_queryserialnumber,
3165 /* CMD_QUERYVERSION */ dissect_r3_cmd_queryversion,
3166 /* CMD_SETDATETIME */ dissect_r3_cmd_setdatetime,
3167 /* CMD_QUERYDATETIME */ dissect_r3_cmd_querydatetime,
3168 /* CMD_SETCONFIG */ dissect_r3_cmd_setconfig,
3169 /* CMD_GETCONFIG */ dissect_r3_cmd_getconfig,
3170 /* CMD_MANAGEUSER */ dissect_r3_cmd_manageuser,
3171 /* CMD_DELETEUSERS */ dissect_r3_cmd_deleteusers,
3172 /* CMD_DEFINEEXCEPTION */ dissect_r3_cmd_defineexception,
3173 /* CMD_DEFINEEXCEPTIONGROUP */ dissect_r3_cmd_defineexceptiongroup,
3174 /* CMD_DEFINECALENDAR */ dissect_r3_cmd_definecalendar,
3175 /* CMD_DEFINETIMEZONE */ dissect_r3_cmd_definetimezone,
3176 /* CMD_RMTAUTHRETRY */ dissect_r3_cmd_rmtauthretry,
3177 /* CMD_FILTERS */ dissect_r3_cmd_filters,
3178 /* CMD_ALARMCONFIGURE */ dissect_r3_cmd_alarmconfigure,
3179 /* CMD_EVENTLOGDUMP */ dissect_r3_cmd_eventlogdump,
3180 /* CMD_DECLINEDLOGDUMP */ dissect_r3_cmd_declinedlogdump,
3181 /* CMD_ALARMLOGDUMP */ dissect_r3_cmd_alarmlogdump,
3182 /* CMD_DOWNLOADFIRMWARE */ dissect_r3_cmd_downloadfirmware,
3183 /* CMD_DOWNLOADFIRMWARETIMEOUT */ dissect_r3_cmd_downloadfirmwaretimeout,
3184 /* CMD_POWERTABLESELECTION */ dissect_r3_cmd_powertableselection,
3185 /* CMD_CLEARNVRAM */ dissect_r3_cmd_clearnvram,
3186 /* CMD_DPAC */ dissect_r3_cmd_dpac,
3187 /* CMD_SELFTEST */ dissect_r3_cmd_selftest,
3188 /* CMD_RESET */ dissect_r3_cmd_reset,
3189 /* CMD_LOGWRITE */ dissect_r3_cmd_logwrite,
3190 /* CMD_MFGCOMMAND */ dissect_r3_cmd_mfgcommand,
3191 /* CMD_NVRAMBACKUP */ dissect_r3_cmd_nvrambackup,
3192 /* CMD_EXTENDEDRESPONSE */ dissect_r3_cmd_extendedresponse
3195 static void dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3196 static void dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3197 static void dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3198 static void dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3199 static void dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3200 static void dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3201 static void dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3202 static void dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3203 static void dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3204 static void dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3205 static void dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3206 static void dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3207 static void dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3208 static void dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3209 static void dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3210 static void dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3211 static void dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3212 static void dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3213 static void dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3214 static void dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3215 static void dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3216 static void dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3217 static void dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3218 static void dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3219 static void dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3220 static void dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3221 static void dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3222 static void dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3223 static void dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3224 static void dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3225 static void dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3226 static void dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3227 static void dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3228 static void dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3229 static void dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3231 static void (*r3commandmfg_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
3233 /* CMDMFG_SETSERIALNUMBER */ dissect_r3_cmdmfg_setserialnumber,
3234 /* CMDMFG_SETCRYPTKEY */ dissect_r3_cmdmfg_setcryptkey,
3235 /* CMDMFG_DUMPNVRAM */ dissect_r3_cmdmfg_dumpnvram,
3236 /* CMDMFG_TERMINAL */ dissect_r3_cmdmfg_terminal,
3237 /* CMDMFG_REMOTEUNLOCK */ dissect_r3_cmdmfg_remoteunlock,
3238 /* CMDMFG_AUXCTLRVERSION */ dissect_r3_cmdmfg_auxctlrversion,
3239 /* CMDMFG_IOPINS */ dissect_r3_cmdmfg_iopins,
3240 /* CMDMFG_ADCS */ dissect_r3_cmdmfg_adcs,
3241 /* CMDMFG_HARDWAREID */ dissect_r3_cmdmfg_hardwareid,
3242 /* CMDMFG_CHECKPOINTLOGDUMP */ dissect_r3_cmdmfg_checkpointlogdump,
3243 /* CMDMFG_CHECKPOINTLOGCLEAR */ dissect_r3_cmdmfg_checkpointlogclear,
3244 /* CMDMFG_READREGISTERS */ dissect_r3_cmdmfg_readregisters,
3245 /* CMDMFG_FORCEOPTIONS */ dissect_r3_cmdmfg_forceoptions,
3246 /* CMDMFG_COMMUSER */ dissect_r3_cmdmfg_commuser,
3247 /* CMDMFG_DUMPKEYPAD */ dissect_r3_cmdmfg_dumpkeypad,
3248 /* CMDMFG_BATTERYCHECK */ dissect_r3_cmdmfg_batterycheck,
3249 /* CMDMFG_RAMREFRESH */ dissect_r3_cmdmfg_ramrefresh,
3250 /* CMDMFG_TASKFLAGS */ dissect_r3_cmdmfg_taskflags,
3251 /* CMDMFG_TIMERCHAIN */ dissect_r3_cmdmfg_timerchain,
3252 /* CMDMFG_PEEKPOKE */ dissect_r3_cmdmfg_peekpoke,
3253 /* CMDMFG_LOCKSTATE */ dissect_r3_cmdmfg_lockstate,
3254 /* CMDMFG_CAPABILITIES */ dissect_r3_cmdmfg_capabilities,
3255 /* CMDMFG_DUMPM41T81 */ dissect_r3_cmdmfg_dumpm41t81,
3256 /* CMDMFG_DEBUGLOGDUMP */ dissect_r3_cmdmfg_debuglogdump,
3257 /* CMDMFG_DEBUGLOGCLEAR */ dissect_r3_cmdmfg_debuglogclear,
3258 /* CMDMFG_TESTWDT */ dissect_r3_cmdmfg_testwdt,
3259 /* CMDMFG_QUERYCKSUM */ dissect_r3_cmdmfg_querycksum,
3260 /* CMDMFG_VALIDATECHECKSUMS */ dissect_r3_cmdmfg_validatechecksums,
3261 /* CMDMFG_REBUILDLRUCACHE */ dissect_r3_cmdmfg_rebuildlrucache,
3262 /* CMDMFG_TZUPDATE */ dissect_r3_cmdmfg_tzupdate,
3263 /* CMDMFG_TESTPRESERVE */ dissect_r3_cmdmfg_testpreserve,
3264 /* CMDMFG_MORTISESTATELOGDUMP */ dissect_r3_cmdmfg_mortisestatelogdump,
3265 /* CMDMFG_MORTISESTATELOGCLEAR */ dissect_r3_cmdmfg_mortisestatelogclear,
3266 /* CMDMFG_MORTISEPINS */ dissect_r3_cmdmfg_mortisepins,
3267 /* CMDMFG_HALTANDCATCHFIRE */ dissect_r3_cmdmfg_haltandcatchfire
3270 static void dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3271 static void dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3273 static void (*r3response_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
3275 /* RESPONSETYPE_OK */ dissect_r3_response_singlebyte,
3276 /* RESPONSETYPE_ERROR */ dissect_r3_response_singlebyte,
3277 /* RESPONSETYPE_HASDATA */ dissect_r3_response_hasdata,
3278 /* RESPONSETYPE_NOHANDLER */ dissect_r3_response_singlebyte,
3279 /* RESPONSETYPE_NOSESSION */ dissect_r3_response_singlebyte,
3280 /* RESPONSETYPE_BADCOMMAND */ dissect_r3_response_singlebyte,
3281 /* RESPONSETYPE_BADPARAMETER */ dissect_r3_response_singlebyte,
3282 /* RESPONSETYPE_BADPARAMETERLEN */ dissect_r3_response_singlebyte,
3283 /* RESPONSETYPE_MISSINGPARAMETER */ dissect_r3_response_singlebyte,
3284 /* RESPONSETYPE_DUPLICATEPARAMETER */ dissect_r3_response_singlebyte,
3285 /* RESPONSETYPE_PARAMETERCONFLICT */ dissect_r3_response_singlebyte,
3286 /* RESPONSETYPE_BADDEVICE */ dissect_r3_response_singlebyte,
3287 /* RESPONSETYPE_NVRAMERROR */ dissect_r3_response_singlebyte,
3288 /* RESPONSETYPE_NVRAMERRORNOACK */ dissect_r3_response_singlebyte,
3289 /* RESPONSETYPE_NVRAMERRORNOACK32 */ dissect_r3_response_singlebyte,
3290 /* RESPONSETYPE_NOTI2CADDRESS */ dissect_r3_response_singlebyte,
3291 /* RESPONSETYPE_FIRMWAREERROR */ dissect_r3_response_singlebyte,
3292 /* RESPONSETYPE_DUMPINPROGRESS */ dissect_r3_response_singlebyte,
3293 /* RESPONSETYPE_INTERNALERROR */ dissect_r3_response_singlebyte,
3294 /* RESPONSETYPE_NOTIMPLEMENTED */ dissect_r3_response_singlebyte,
3295 /* RESPONSETYPE_PINFORMATERROR */ dissect_r3_response_singlebyte,
3296 /* RESPONSETYPE_PINEXISTS */ dissect_r3_response_singlebyte,
3297 /* RESPONSETYPE_PINNOTFOUND */ dissect_r3_response_singlebyte,
3298 /* RESPONSETYPE_USERACTIVE */ dissect_r3_response_singlebyte,
3299 /* RESPONSETYPE_USERINACTIVE */ dissect_r3_response_singlebyte,
3300 /* RESPONSETYPE_PARENTNOTFOUND */ dissect_r3_response_singlebyte,
3301 /* RESPONSETYPE_NOCHAIN */ dissect_r3_response_singlebyte,
3302 /* RESPONSETYPE_CAUGHTINLOOP */ dissect_r3_response_singlebyte,
3303 /* RESPONSETYPE_EVENTFILTERED */ dissect_r3_response_singlebyte,
3304 /* RESPONSETYPE_PAYLOADTOOLARGE */ dissect_r3_response_singlebyte,
3305 /* RESPONSETYPE_ENDOFDATA */ dissect_r3_response_singlebyte,
3306 /* RESPONSETYPE_RMTAUTHREJECTED */ dissect_r3_response_singlebyte,
3307 /* RESPONSETYPE_NVRAMVERSIONERROR */ dissect_r3_response_singlebyte,
3308 /* RESPONSETYPE_NOHARDWARE */ dissect_r3_response_singlebyte,
3309 /* RESPONSETYPE_SCHEDULERCONFLICT */ dissect_r3_response_singlebyte,
3310 /* RESPONSETYPE_NVRAMWRITEERROR */ dissect_r3_response_singlebyte,
3311 /* RESPONSETYPE_DECLINEDFILTERED */ dissect_r3_response_singlebyte,
3312 /* RESPONSETYPE_NECONFIGPARM */ dissect_r3_response_singlebyte,
3313 /* RESPONSETYPE_FLASHERASEERROR */ dissect_r3_response_singlebyte,
3314 /* RESPONSETYPE_FLASHWRITEERROR */ dissect_r3_response_singlebyte,
3315 /* RESPONSETYPE_BADNVBACKUP */ dissect_r3_response_singlebyte,
3316 /* RESPONSETYPE_EARLYACK */ dissect_r3_response_singlebyte,
3317 /* RESPONSETYPE_ALARMFILTERED */ dissect_r3_response_singlebyte,
3318 /* RESPONSETYPE_ACVFAILURE */ dissect_r3_response_singlebyte,
3319 /* RESPONSETYPE_USERCHECKSUMERROR */ dissect_r3_response_singlebyte,
3320 /* RESPONSETYPE_CHECKSUMERROR */ dissect_r3_response_singlebyte,
3321 /* RESPONSETYPE_RTCSQWFAILURE */ dissect_r3_response_singlebyte,
3322 /* RESPONSETYPE_PRIORITYSHUTDOWN */ dissect_r3_response_singlebyte,
3323 /* RESPONSETYPE_NOTMODIFIABLE */ dissect_r3_response_singlebyte,
3324 /* RESPONSETYPE_CANTPRESERVE */ dissect_r3_response_singlebyte,
3325 /* RESPONSETYPE_INPASSAGEMODE */ dissect_r3_response_singlebyte
3328 static void dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3329 static void dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3330 static void dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3331 static void dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3332 static void dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3333 static void dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3334 static void dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3335 static void dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3336 static void dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3337 static void dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3338 static void dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3339 static void dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3340 static void dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3341 static void dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3342 static void dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3343 static void dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3344 static void dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3345 static void dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3346 static void dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3347 static void dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3348 static void dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3349 static void dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3350 static void dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3351 static void dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3352 static void dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3353 static void dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3355 static void (*r3upstreamcommand_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
3357 /* UPSTREAMCOMMAND_RESERVED */ dissect_r3_upstreamcommand_reserved,
3358 /* UPSTREAMCOMMAND_DEBUGMSG */ dissect_r3_upstreamcommand_debugmsg,
3359 /* UPSTREAMCOMMAND_QUERYVERSION */ dissect_r3_upstreamcommand_queryversion,
3360 /* UPSTREAMCOMMAND_QUERYDATETIME */ dissect_r3_upstreamcommand_querydatetime,
3361 /* UPSTREAMCOMMAND_QUERYSERIALNUMBER */ dissect_r3_upstreamcommand_queryserialnumber,
3362 /* UPSTREAMCOMMAND_DUMPEVENTLOG */ dissect_r3_upstreamcommand_dumpeventlog,
3363 /* UPSTREAMCOMMAND_DUMPNVRAM */ dissect_r3_upstreamcommand_dumpnvram,
3364 /* UPSTREAMCOMMAND_RMTAUTHREQUEST */ dissect_r3_upstreamcommand_rmtquthrequest,
3365 /* UPSTREAMCOMMAND_RETRIEVEUSER */ dissect_r3_upstreamcommand_retrieveuser,
3366 /* UPSTREAMCOMMAND_QUERYCONFIG */ dissect_r3_upstreamcommand_queryconfig,
3367 /* UPSTREAMCOMMAND_RMTEVENTLOGRECORD */ dissect_r3_upstreamcommand_rmteventlogrecord,
3368 /* UPSTREAMCOMMAND_DPAC */ dissect_r3_upstreamcommand_dpac,
3369 /* UPSTREAMCOMMAND_NOTIFY */ dissect_r3_upstreamcommand_notify,
3370 /* UPSTREAMCOMMAND_MFG */ dissect_r3_upstreamcommand_mfg,
3371 /* UPSTREAMCOMMAND_EVENTLOGWARNING */ dissect_r3_upstreamcommand_eventlogwarning,
3372 /* UPSTREAMCOMMAND_DUMPNVRAMRLE */ dissect_r3_upstreamcommand_dumpnvramrle,
3373 /* UPSTREAMCOMMAND_RMTDECLINEDRECORD */ dissect_r3_upstreamcommand_rmtdeclinedrecord,
3374 /* UPSTREAMCOMMAND_DECLINEDWARNING */ dissect_r3_upstreamcommand_declinedwarning,
3375 /* UPSTREAMCOMMAND_DUMPDECLINEDLOG */ dissect_r3_upstreamcommand_dumpdeclinedlog,
3376 /* UPSTREAMCOMMAND_RMTALARMRECORD */ dissect_r3_upstreamcommand_rmtalarmrecord,
3377 /* UPSTREAMCOMMAND_ALARMWARNING */ dissect_r3_upstreamcommand_alarmwarning,
3378 /* UPSTREAMCOMMAND_DUMPALARMLOG */ dissect_r3_upstreamcommand_dumpalarmlog,
3379 /* UPSTREAMCOMMAND_CONNECTSCHEDULER */ dissect_r3_upstreamcommand_connectscheduler,
3380 /* UPSTREAMCOMMAND_CONNECTCOMMUSER */ dissect_r3_upstreamcommand_connectcommuser,
3381 /* UPSTREAMCOMMAND_CONNECTALARM */ dissect_r3_upstreamcommand_commandalarm,
3382 /* UPSTREAMCOMMAND_DUMPDEBUGLOG */ dissect_r3_upstreamcommand_dumpdebuglog
3385 static void dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3386 static void dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3387 static void dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3388 static void dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3389 static void dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3390 static void dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3391 static void dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3392 static void dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3393 static void dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3394 static void dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3395 static void dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3396 static void dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3397 static void dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3398 static void dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3399 static void dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3400 static void dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3401 static void dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3402 static void dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
3404 static void (*r3upstreammfgfield_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
3406 /* MFGFIELD_IOPINS */ dissect_r3_upstreammfgfield_iopins,
3407 /* MFGFIELD_ADCS */ dissect_r3_upstreammfgfield_adcs,
3408 /* MFGFIELD_HARDWAREID */ dissect_r3_upstreammfgfield_hardwareid,
3409 /* MFGFIELD_CHECKPOINTLOG */ dissect_r3_upstreammfgfield_checkpointlog,
3410 /* MFGFIELD_CPUREGISTERS */ dissect_r3_upstreammfgfield_cpuregisters,
3411 /* MFGFIELD_TASKFLAGS */ dissect_r3_upstreammfgfield_taskflags,
3412 /* MFGFIELD_TIMERCHAIN */ dissect_r3_upstreammfgfield_timerchain,
3413 /* MFGFIELD_PEEKPOKE */ dissect_r3_upstreammfgfield_peekpoke,
3414 /* MFGFIELD_LOCKSTATE */ dissect_r3_upstreammfgfield_lockstate,
3415 /* MFGFIELD_CAPABILITIES */ dissect_r3_upstreammfgfield_capabilities,
3416 /* MFGFIELD_DUMPM41T81 */ dissect_r3_upstreammfgfield_dumpm41t81,
3417 /* MFGFIELD_NVRAMCHECKSUMVALUE */ dissect_r3_upstreammfgfield_nvramchecksumvalue,
3418 /* MFGFIELD_CHECKSUMRESULTS */ dissect_r3_upstreammfgfield_checksumresults,
3419 /* MFGFIELD_MORTISESTATELOG */ dissect_r3_upstreammfgfield_mortisestatelog,
3420 /* MFGFIELD_MORTISEPINS */ dissect_r3_upstreammfgfield_mortisepins,
3421 /* MFGFIELD_KEYPADCHAR */ dissect_r3_upstreammfgfield_keypadchar,
3422 /* MFGFIELD_MAGCARD */ dissect_r3_upstreammfgfield_magcard,
3423 /* MFGFIELD_PROXCARD */ dissect_r3_upstreammfgfield_proxcard
3427 * ***************************************************************************
3429 * Cannot use wsutil/crc routines as ccitt-x25 uses a starting value of 0xffff
3430 * and we use 0x0000 (legacy compatibility). If an override method to set
3431 * the starting value existed, these could be replaced.
3433 static const guint16 ccitt_16 [256] =
3435 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
3436 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
3437 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
3438 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
3439 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
3440 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
3441 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
3442 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
3443 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
3444 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
3445 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
3446 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
3447 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
3448 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
3449 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
3450 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
3451 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
3452 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
3453 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
3454 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
3455 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
3456 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
3457 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
3458 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
3459 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
3460 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
3461 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
3462 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
3463 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
3464 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
3465 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
3466 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
3469 static guint16
3470 utilCrcCalculate (const void *ptr, guint16 len, guint16 crc)
3472 const guint8 *p = (const guint8 *) ptr;
3474 while (len--)
3475 crc = (guint16) ((crc << 8) ^ ccitt_16 [(crc >> 8) ^ *p++]);
3477 return crc;
3481 * ***************************************************************************
3483 static void
3484 dissect_serialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree, int hf_index)
3486 proto_item *sn_item;
3487 proto_tree *sn_tree;
3488 const gchar *s;
3490 tvb_ensure_bytes_exist (tvb, start_offset, 16);
3492 if (!tree)
3493 return;
3495 sn_item = proto_tree_add_item (tree, hf_index, tvb, start_offset, 16, ENC_ASCII|ENC_NA);
3496 sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
3498 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 0, 2);
3499 proto_tree_add_text (sn_tree, tvb, start_offset + 0, 2, "Manufacturer .. : %s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
3500 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 2, 1);
3501 proto_tree_add_text (sn_tree, tvb, start_offset + 2, 1, "Year .......... : %s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
3502 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 3, 2);
3503 proto_tree_add_text (sn_tree, tvb, start_offset + 3, 2, "Week .......... : %s", s);
3504 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 5, 1);
3505 proto_tree_add_text (sn_tree, tvb, start_offset + 5, 1, "Model ......... : %s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
3506 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 6, 4);
3507 proto_tree_add_text (sn_tree, tvb, start_offset + 6, 4, "Sequence ...... : %s", s);
3508 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 10, 1);
3509 proto_tree_add_text (sn_tree, tvb, start_offset + 10, 1, "Group ......... : %s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
3510 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 11, 1);
3511 proto_tree_add_text (sn_tree, tvb, start_offset + 11, 1, "NID ........... : %s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
3512 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 12, 2);
3513 proto_tree_add_text (sn_tree, tvb, start_offset + 12, 2, "HID ........... : %s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
3514 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 14, 1);
3515 proto_tree_add_text (sn_tree, tvb, start_offset + 14, 1, "Power Supply .. : %s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
3516 s = tvb_get_string (wmem_packet_scope(), tvb, start_offset + 15, 1);
3517 proto_tree_add_text (sn_tree, tvb, start_offset + 15, 1, "Mortise ....... : %s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
3521 * ***************************************************************************
3523 * We've already ensured we have enough bytes in the table via tvb_ensure_bytes_exist()
3526 static void
3527 dissect_r3_upstreamfields (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3529 guint32 offset = 0;
3531 DISSECTOR_ASSERT(start_offset == 0);
3533 while (offset < tvb_reported_length (tvb))
3535 guint32 fieldLength = tvb_get_guint8 (tvb, offset + 0);
3536 guint32 fieldType = tvb_get_guint8 (tvb, offset + 1);
3537 guint32 dataLength = fieldLength - 2;
3538 proto_item *upstreamfield_item;
3539 proto_item *upstreamfield_length;
3540 proto_tree *upstreamfield_tree;
3541 const gchar *usfn;
3543 usfn = val_to_str_ext_const (fieldType, &r3_upstreamfieldnames_ext, "[Unknown Field]");
3545 upstreamfield_item = proto_tree_add_none_format (tree, hf_r3_upstreamfield, tvb, offset + 0, fieldLength, "Upstream Field: %s (%u)", usfn, fieldType);
3546 upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3548 upstreamfield_length = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3549 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldtype, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3551 if (fieldLength < 2)
3553 dataLength = 0;
3554 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
3557 offset += 2;
3559 switch (fieldType)
3562 * Booleans, 8 & 16 bit values
3564 case UPSTREAMFIELD_NOTUSED :
3565 case UPSTREAMFIELD_PRIMARYPIN :
3566 case UPSTREAMFIELD_AUXPIN :
3567 case UPSTREAMFIELD_ACCESSALWAYS :
3568 case UPSTREAMFIELD_CACHED :
3569 case UPSTREAMFIELD_ENTRYDEVICE :
3570 case UPSTREAMFIELD_PPMIFIELDTYPE :
3571 case UPSTREAMFIELD_RESPONSEWINDOW :
3572 case UPSTREAMFIELD_USERTYPE :
3573 case UPSTREAMFIELD_PRIMARYFIELDTYPE :
3574 case UPSTREAMFIELD_AUXFIELDTYPE :
3575 case UPSTREAMFIELD_ACCESSMODE :
3576 case UPSTREAMFIELD_USECOUNT :
3577 case UPSTREAMFIELD_EXCEPTIONGROUP :
3578 case UPSTREAMFIELD_NAR :
3579 case UPSTREAMFIELD_SEQUENCENUMBER :
3580 case UPSTREAMFIELD_USERNUMBER :
3581 case UPSTREAMFIELD_EVENTLOGRECORDCOUNT :
3582 case UPSTREAMFIELD_DECLINEDRECORDCOUNT :
3583 case UPSTREAMFIELD_ALARMRECORDCOUNT :
3584 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
3585 break;
3588 * Strings
3590 case UPSTREAMFIELD_PIN :
3591 case UPSTREAMFIELD_VERSION :
3592 case UPSTREAMFIELD_AUXCTLRVERSION :
3593 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_ASCII|ENC_NA);
3594 break;
3597 * Special types
3599 case UPSTREAMFIELD_SERIALNUMBER :
3601 tvbuff_t *sn_tvb = tvb_new_subset (tvb, offset, dataLength, dataLength);
3603 dissect_serialnumber (sn_tvb, 0, length, pinfo, upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType]);
3605 break;
3607 case UPSTREAMFIELD_EVENTLOGRECORD :
3609 if (dataLength != 9)
3611 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed event log field -- expected 9 octets");
3613 else
3615 proto_item *eventlog_item;
3616 proto_tree *eventlog_tree;
3618 if (!upstreamfield_tree)
3619 break;
3621 eventlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 9, "Event Log Record");
3622 eventlog_tree = proto_item_add_subtree (eventlog_item, ett_r3eventlogrecord);
3624 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3625 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3626 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3627 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3628 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3629 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3630 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3631 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, offset + 8, 1, ENC_LITTLE_ENDIAN);
3634 break;
3636 case UPSTREAMFIELD_DATETIME :
3638 if (dataLength != 8)
3640 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed date/time field -- expected 8 octets");
3642 else
3644 proto_item *datetime_item;
3645 proto_tree *datetime_tree;
3647 if (!upstreamfield_tree)
3648 break;
3650 datetime_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 8, "Date/Time: %02u/%02u/%02u-%u %02u:%02u:%02u %u",
3651 tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1), tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 3),
3652 tvb_get_guint8 (tvb, offset + 4), tvb_get_guint8 (tvb, offset + 5), tvb_get_guint8 (tvb, offset + 6), tvb_get_guint8 (tvb, offset + 7));
3653 datetime_tree = proto_item_add_subtree (datetime_item, ett_r3datetime);
3655 proto_tree_add_item (datetime_tree, hf_r3_datetime_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3656 proto_tree_add_item (datetime_tree, hf_r3_datetime_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3657 proto_tree_add_item (datetime_tree, hf_r3_datetime_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3658 proto_tree_add_item (datetime_tree, hf_r3_datetime_dow, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3659 proto_tree_add_item (datetime_tree, hf_r3_datetime_hours, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3660 proto_tree_add_item (datetime_tree, hf_r3_datetime_minutes, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3661 proto_tree_add_item (datetime_tree, hf_r3_datetime_seconds, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3662 proto_tree_add_item (datetime_tree, hf_r3_datetime_dst, tvb, offset + 7, 1, ENC_LITTLE_ENDIAN);
3665 break;
3667 case UPSTREAMFIELD_DECLINEDRECORD :
3670 if (dataLength != 49)
3672 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed declined log field -- expected 49 octets");
3674 else
3676 proto_item *declinedlog_item;
3677 proto_tree *declinedlog_tree;
3678 guint8 cred1type;
3679 guint8 cred2type;
3681 if (!upstreamfield_tree)
3682 break;
3684 declinedlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 49, "Declined Log Record");
3685 declinedlog_tree = proto_item_add_subtree (declinedlog_item, ett_r3declinedlogrecord);
3687 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3688 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3689 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3690 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3691 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3692 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3693 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3695 cred1type = tvb_get_guint8 (tvb, offset + 8) & 0x07;
3696 cred2type = (tvb_get_guint8 (tvb, offset + 8) & 0x38) >> 3;
3698 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, offset, 1, cred1type);
3699 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, offset, 1, cred2type);
3700 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, offset + 9, 19, ENC_NA);
3701 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, offset + 28, 19, ENC_NA);
3704 break;
3706 case UPSTREAMFIELD_EXPIREON :
3708 if (dataLength != 3)
3710 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
3712 else
3714 proto_item *expireon_item;
3715 proto_tree *expireon_tree;
3717 if (!upstreamfield_tree)
3718 break;
3720 expireon_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 3, "Expire YY/MM/DD: %02u/%02u/%02u",
3721 tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1));
3722 expireon_tree = proto_item_add_subtree (expireon_item, ett_r3expireon);
3724 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3725 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3726 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3729 break;
3731 case UPSTREAMFIELD_TIMEZONE :
3733 if (dataLength != 4)
3735 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
3737 else
3739 proto_item *timezone_item;
3740 proto_tree *timezone_tree;
3741 guint32 i;
3742 guint32 tz;
3744 if (!upstreamfield_tree)
3745 break;
3747 tz = tvb_get_letohl (tvb, offset);
3748 timezone_item = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, 4, ENC_LITTLE_ENDIAN);
3749 timezone_tree = proto_item_add_subtree (timezone_item, ett_r3timezone);
3751 for (i = 0; i < 32; i++)
3752 proto_tree_add_boolean (timezone_tree, hf_r3_timezonearray [i], tvb, offset, 4, tz);
3755 break;
3757 case UPSTREAMFIELD_ALARMRECORD :
3759 if (dataLength != 9)
3761 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed alarm log field -- expected 9 octets");
3763 else
3765 proto_item *alarmlog_item;
3766 proto_tree *alarmlog_tree;
3768 if (!upstreamfield_tree)
3769 break;
3771 alarmlog_item = proto_tree_add_text (upstreamfield_tree, tvb, offset, 9, "Alarm Record");
3772 alarmlog_tree = proto_item_add_subtree (alarmlog_item, ett_r3alarmlogrecord);
3774 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3775 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3776 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3777 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3778 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3779 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3780 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3781 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, offset + 7, 2, ENC_LITTLE_ENDIAN);
3784 break;
3786 default :
3787 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset, dataLength, "Unknown Field Type");
3788 break;
3791 offset += dataLength;
3796 * ***************************************************************************
3798 * These are passed a tvb that contains whatever occurs after the [UPSTREAMCOMMAND_*] byte
3800 static void
3801 dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb _U_, guint32 start_offset _U_, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
3803 proto_tree_add_expert(tree, pinfo, &ei_r3_reserved_upstream_command_value, tvb, start_offset, length);
3806 static void
3807 dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3809 proto_item *debugmsg_item;
3810 proto_tree *debugmsg_tree;
3812 if (!tree)
3813 return;
3815 DISSECTOR_ASSERT(start_offset == 0);
3817 debugmsg_item = proto_tree_add_text (tree, tvb, 0, -1, "Debug message");
3818 debugmsg_tree = proto_item_add_subtree (debugmsg_item, ett_r3debugmsg);
3820 proto_tree_add_item (debugmsg_tree, hf_r3_debugmsg, tvb, 1, -1, ENC_ASCII|ENC_NA);
3823 static void
3824 dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3826 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3829 static void
3830 dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3832 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3835 static void
3836 dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3838 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3841 static void
3842 dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3844 DISSECTOR_ASSERT(start_offset == 0);
3846 tvb_ensure_bytes_exist (tvb, 0, 11);
3848 if (length != 11)
3850 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Malformed event log record -- expected 10 octets");
3852 else
3854 proto_item *eventlog_item;
3855 proto_tree *eventlog_tree;
3856 const gchar *en;
3858 if (!tree)
3859 return;
3861 en = val_to_str_ext_const (tvb_get_guint8 (tvb, 10), &r3_eventnames_ext, "[Unknown Event]");
3863 eventlog_item = proto_tree_add_text (tree, tvb, start_offset, 10, "Event Log Record %u (%s)", tvb_get_letohs (tvb, 0), en);
3864 eventlog_tree = proto_item_add_subtree (eventlog_item, ett_r3eventlogrecord);
3866 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
3867 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3868 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
3869 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
3870 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
3871 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
3872 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
3873 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
3874 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, 10, 1, ENC_LITTLE_ENDIAN);
3878 static void
3879 dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3881 DISSECTOR_ASSERT(start_offset == 0);
3883 tvb_ensure_bytes_exist (tvb, 0, 3);
3885 if (!tree)
3886 return;
3888 proto_tree_add_item (tree, hf_r3_nvramdump_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
3889 proto_tree_add_item (tree, hf_r3_nvramdump_length, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3890 proto_tree_add_item (tree, hf_r3_nvramdump_data, tvb, 3, tvb_get_guint8 (tvb, 2), ENC_NA);
3893 static void
3894 dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3896 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3899 static void
3900 dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3902 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3905 static void
3906 dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3908 guint32 offset = 0;
3910 DISSECTOR_ASSERT(start_offset == 0);
3912 if (!tree)
3913 return;
3915 while (offset < tvb_reported_length (tvb))
3917 proto_item *upstreamfield_item, *pi;
3918 proto_tree *upstreamfield_tree;
3919 const gchar *ci;
3920 guint8 item_length;
3922 ci = val_to_str_ext_const (tvb_get_guint8 (tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
3924 item_length = tvb_get_guint8 (tvb, offset + 0);
3925 upstreamfield_item = proto_tree_add_text (tree, tvb, offset + 0, item_length, "Config Field: %s (%u)", ci, tvb_get_guint8 (tvb, offset + 1));
3926 upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3928 pi = proto_tree_add_item (upstreamfield_tree, hf_r3_configitemlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3929 if (item_length == 0) {
3930 expert_add_info_format(pinfo, pi, &ei_r3_malformed_length, "Invalid item length");
3931 return;
3934 proto_tree_add_item (upstreamfield_tree, hf_r3_configitem, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3935 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemtype, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3937 switch (tvb_get_guint8 (tvb, offset + 2))
3939 case CONFIGTYPE_NONE :
3940 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata, tvb, offset + 3, item_length - 3, ENC_NA);
3941 break;
3943 case CONFIGTYPE_BOOL :
3944 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_bool, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3945 break;
3947 case CONFIGTYPE_8 :
3948 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_8, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3949 break;
3951 case CONFIGTYPE_16 :
3952 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_16, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN);
3953 break;
3955 case CONFIGTYPE_32 :
3956 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_32, tvb, offset + 3, 4, ENC_LITTLE_ENDIAN);
3957 break;
3959 case CONFIGTYPE_STRING :
3960 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_string, tvb, offset + 3, item_length - 3, ENC_ASCII|ENC_NA);
3961 break;
3963 default :
3964 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset + 3, item_length - 3, "Unknown Field Type");
3965 break;
3968 offset += item_length;
3972 static void
3973 dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3975 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3978 static void
3979 dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
3981 if (tree)
3983 DISSECTOR_ASSERT(start_offset == 0);
3984 /* XXX: hf[] entries for the following hf indexes originally missing */
3985 proto_tree_add_item (tree, hf_r3_dpacreply_stuff, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3986 proto_tree_add_item (tree, hf_r3_dpacreply_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
3987 proto_tree_add_item (tree, hf_r3_dpacreply_reply, tvb, 4, -1, ENC_NA);
3991 static void
3992 dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
3994 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3997 static void
3998 dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4000 proto_tree *mfg_tree = NULL;
4001 guint8 mfg_fld;
4002 tvbuff_t *mfg_tvb;
4003 proto_item *mfg_item;
4004 const gchar *cn;
4006 DISSECTOR_ASSERT(start_offset == 0);
4008 mfg_tvb = tvb_new_subset_remaining (tvb, 2);
4009 mfg_fld = tvb_get_guint8 (tvb, 1);
4011 cn = val_to_str_ext_const (mfg_fld, &r3_mfgfieldnames_ext, "[Unknown Mfg Field]");
4013 proto_tree_add_item (tree, hf_r3_mfgfield_length, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4015 mfg_item = proto_tree_add_text (tree, tvb, 1, -1, "Upstream Manufacturing Field: %s (%u)", cn, mfg_fld);
4016 mfg_tree = proto_item_add_subtree (mfg_item, ett_r3commandmfg);
4018 proto_tree_add_item (mfg_tree, hf_r3_mfgfield, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4020 if (mfg_fld >= MFGFIELD_LAST)
4022 expert_add_info(pinfo, mfg_item, &ei_r3_mfgfield);
4024 else if (r3upstreammfgfield_dissect [mfg_fld])
4025 (*r3upstreammfgfield_dissect [mfg_fld]) (mfg_tvb, 0, length, pinfo, mfg_tree);
4028 static void
4029 dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4031 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4034 static void
4035 dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4037 if (!tree)
4038 return;
4040 DISSECTOR_ASSERT(start_offset == 0);
4042 proto_tree_add_item (tree, hf_r3_nvramdumprle_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4043 proto_tree_add_item (tree, hf_r3_nvramdumprle_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4044 proto_tree_add_item (tree, hf_r3_nvramdumprle_data, tvb, 4, tvb_get_guint8 (tvb, 3), ENC_NA);
4047 static void
4048 dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4050 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4053 static void
4054 dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4056 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4059 static void
4060 dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4062 proto_item *declinedlog_item;
4063 proto_tree *declinedlog_tree;
4064 guint8 cred1type;
4065 guint8 cred2type;
4067 if (!tree)
4068 return;
4070 DISSECTOR_ASSERT(start_offset == 0);
4072 declinedlog_item = proto_tree_add_text (tree, tvb, start_offset, 49, "Declined Log Record %u", tvb_get_letohs (tvb, 0));
4073 declinedlog_tree = proto_item_add_subtree (declinedlog_item, ett_r3declinedlogrecord);
4075 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4076 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4077 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4078 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4079 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4080 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4081 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4082 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
4084 cred1type = tvb_get_guint8 (tvb, 10) & 0x07;
4085 cred2type = (tvb_get_guint8 (tvb, 10) & 0x38) >> 3;
4087 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, 10, 1, cred1type);
4088 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, 10, 1, cred2type);
4089 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, 11, 19, ENC_NA);
4090 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, 30, 19, ENC_NA);
4093 static void
4094 dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4096 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4099 static void
4100 dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4102 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4105 static void
4106 dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4108 proto_item *alarmlog_item;
4109 proto_tree *alarmlog_tree;
4111 if (!tree)
4112 return;
4114 DISSECTOR_ASSERT(start_offset == 0);
4116 alarmlog_item = proto_tree_add_text (tree, tvb, start_offset, 9, "Alarm Log Record %u", tvb_get_letohs (tvb, 0));
4117 alarmlog_tree = proto_item_add_subtree (alarmlog_item, ett_r3alarmlogrecord);
4119 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4120 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4121 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4122 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4123 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4124 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4125 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4126 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4127 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, 9, 2, ENC_LITTLE_ENDIAN);
4130 static void
4131 dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4133 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4136 static void
4137 dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4139 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4142 static void
4143 dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
4145 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4148 static void
4149 dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4151 proto_item *debuglog_item;
4152 proto_tree *debuglog_tree;
4154 if (!tree)
4155 return;
4157 DISSECTOR_ASSERT(start_offset == 0);
4159 debuglog_item = proto_tree_add_text (tree, tvb, start_offset, 8, "Debug Log Record %u", tvb_get_letohs (tvb, 0));
4160 debuglog_tree = proto_item_add_subtree (debuglog_item, ett_r3debuglogrecord);
4162 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4163 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_flags, tvb, 2, 4, ENC_LITTLE_ENDIAN);
4164 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_tick, tvb, 6, 2, ENC_LITTLE_ENDIAN);
4168 * ***************************************************************************
4170 static void
4171 dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4173 gint len;
4175 DISSECTOR_ASSERT(start_offset == 0);
4177 len = MAX(0, tvb_length_remaining(tvb, start_offset));
4178 if (len % 3 != 0)
4180 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "IOPINS data length not modulo 3 == 0");
4182 else
4184 char portname = 'A';
4185 gint i;
4187 if (!tree)
4188 return;
4190 for (i = 0; i < len; i += 3, portname++)
4192 proto_item *port_item = proto_tree_add_text (tree, tvb, i, 3,
4193 "Port %c Configuration", (portname == 'I') ? ++portname : portname);
4194 proto_tree *port_tree = proto_item_add_subtree (port_item, ett_r3iopins);
4196 proto_tree_add_item (port_tree, hf_r3_iopins_lat, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4197 proto_tree_add_item (port_tree, hf_r3_iopins_port, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4198 proto_tree_add_item (port_tree, hf_r3_iopins_tris, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4203 static void
4204 dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4206 guint len;
4207 guint32 i;
4209 if (!tree)
4210 return;
4212 DISSECTOR_ASSERT(start_offset == 0);
4214 len = tvb_reported_length(tvb);
4216 for (i = 0; i < MIN(len,8); i++)
4218 proto_item *item = proto_tree_add_item (tree, hf_r3_adc [i], tvb, i, 1, ENC_LITTLE_ENDIAN);
4219 proto_item_append_text (item, " (%.2f Volts)", (float) tvb_get_guint8 (tvb, i) * 0.04154);
4222 if (len > 8)
4224 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_mfgfield_too_many_adc_values);
4229 static void
4230 dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4232 if (!tree)
4233 return;
4235 DISSECTOR_ASSERT(start_offset == 0);
4237 proto_tree_add_item (tree, hf_r3_hardwareid_board, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4238 proto_tree_add_item (tree, hf_r3_hardwareid_cpuid, tvb, 1, 2, ENC_LITTLE_ENDIAN);
4239 proto_tree_add_item (tree, hf_r3_hardwareid_cpurev, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4242 static void
4243 dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4245 proto_item *cpl_item;
4246 proto_tree *cpl_tree;
4247 guint counter;
4248 gint len;
4249 gint i;
4251 if (!tree)
4252 return;
4254 DISSECTOR_ASSERT(start_offset == 0);
4256 len = tvb_length_remaining (tvb, 1);
4258 proto_tree_add_item (tree, hf_r3_checkpointlog_entryptr, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4259 cpl_item = proto_tree_add_text (tree, tvb, 1, -1, "Checkpoint Log");
4260 cpl_tree = proto_item_add_subtree (cpl_item, ett_r3checkpointlog);
4262 counter = 0;
4263 for (i = 0; i < len; i += 2, counter++)
4265 guint rcon = tvb_get_guint8 (tvb, i + 0);
4266 guint cp = tvb_get_guint8 (tvb, i + 1);
4267 proto_item *cpe_item = proto_tree_add_text (cpl_tree, tvb, i + 0, 2, "Checkpoint Log Entry %u", counter);
4268 proto_tree *cpe_tree = proto_item_add_subtree (cpe_item, ett_r3checkpointlogentry);
4269 guint resettype;
4270 const gchar *desc;
4271 static const gchar *resets [] = { "Stack underflow", "Stack overflow", "Power-On",
4272 "Software", "Brown-out", "MCLR in sleep", "WDT",
4273 "Normal", "[Unknown Reset Type]" };
4275 desc = val_to_str_ext_const (cp, &r3_checkpointnames_ext, "[Unknown Checkpoint]");
4277 if (rcon == 0xff)
4278 resettype = 8;
4279 else
4281 rcon &= 0x1f;
4283 if (rcon == 0x1c)
4284 resettype = 2;
4285 else if ((rcon & 0x10) == 0x00)
4286 resettype = 3;
4287 else if ((rcon & 0x1d) == 0x1c)
4288 resettype = 4;
4289 else if ((rcon & 0x0c) == 0x08)
4290 resettype = 5;
4291 else if ((rcon & 0x0c) == 0x04)
4292 resettype = 6;
4293 else
4294 resettype = 7;
4297 proto_item_append_text (cpe_item, " (%s, %s)", resets [resettype], desc);
4298 proto_item_append_text (
4299 proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_rcon, tvb, i + 0, 1, ENC_LITTLE_ENDIAN),
4300 " (%s)", resets [resettype]);
4301 proto_item_append_text (
4302 proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_checkpoint, tvb, i + 1, 1, ENC_LITTLE_ENDIAN),
4303 " (%s)", desc);
4307 static void
4308 dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4310 proto_tree *tmp_tree [19];
4311 proto_item *cr_item;
4312 proto_tree *cr_tree;
4314 if (!tree)
4315 return;
4317 DISSECTOR_ASSERT(start_offset == 0);
4319 cr_item = proto_tree_add_text (tree, tvb, start_offset, -1, "CPU Registers");
4320 cr_tree = proto_item_add_subtree (cr_item, ett_r3cpuregisters);
4322 tmp_tree [ 0] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon, tvb, 0, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4323 tmp_tree [ 1] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon2, tvb, 1, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4324 tmp_tree [ 2] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_intcon3, tvb, 2, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4325 tmp_tree [ 3] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir1, tvb, 3, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4326 tmp_tree [ 4] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir2, tvb, 4, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4327 tmp_tree [ 5] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pir3, tvb, 5, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4328 tmp_tree [ 6] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie1, tvb, 6, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4329 tmp_tree [ 7] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie2, tvb, 7, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4330 tmp_tree [ 8] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_pie3, tvb, 8, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4331 tmp_tree [ 9] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr1, tvb, 9, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4332 tmp_tree [10] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr2, tvb, 10, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4333 tmp_tree [11] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_ipr3, tvb, 11, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4334 tmp_tree [12] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcon, tvb, 12, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4335 tmp_tree [13] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_osccon, tvb, 13, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4336 tmp_tree [14] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcsta, tvb, 14, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4337 tmp_tree [15] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_txsta, tvb, 15, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4338 tmp_tree [16] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_rcsta2, tvb, 16, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4339 tmp_tree [17] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_txsta2, tvb, 17, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4340 tmp_tree [18] = proto_item_add_subtree (proto_tree_add_item (cr_tree, hf_r3_cpuregisters_wdtcon, tvb, 18, 1, ENC_LITTLE_ENDIAN), ett_r3cpuregister);
4342 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbif, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4343 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4344 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4345 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4346 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4347 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4348 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_giel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4349 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_gieh, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4350 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4351 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_int3ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4352 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_tmr0ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4353 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg3, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4354 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg2, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4355 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg1, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4356 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg0, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4357 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbpu, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4358 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4359 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4360 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4361 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4362 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4363 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4364 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4365 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4366 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4367 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr2if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4368 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ccp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4369 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ssp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4370 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tx1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4371 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_rc1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4372 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_adif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4373 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_pspif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4374 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_ccp2if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4375 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_tmr3if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4376 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_hlvdif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4377 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_bcl1if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4378 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_eeif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4379 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_unused5, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4380 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_cmif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4381 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_oscfif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4382 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp3if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4383 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4384 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp5if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4385 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tmr4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4386 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tx2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4387 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_rc2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4388 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_bcl2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4389 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ssp2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4390 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4391 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr2ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4392 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ccp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4393 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ssp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4394 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tx1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4395 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_rc1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4396 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_adie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4397 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_pspie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4398 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_oscfie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4399 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_cmie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4400 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_unused2, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4401 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_eeie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4402 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_bcl1ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4403 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_hlvdie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4404 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_tmr3ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4405 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_ccp2ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4406 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp3ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4407 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4408 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp5ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4409 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tmr4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4410 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tx2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4411 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_rc2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4412 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_bcl2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4413 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ssp2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4414 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4415 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr2ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4416 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ccp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4417 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ssp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4418 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tx1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4419 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_rc1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4420 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_adip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4421 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_pspip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4422 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_ccp2ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4423 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_tmr3ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4424 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_hlvdip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4425 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_bcl1ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4426 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_eeip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4427 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_unused5, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4428 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_cmip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4429 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_oscfip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4430 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4431 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4432 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp5ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4433 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tmr4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4434 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tx2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4435 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_rc2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4436 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_bcl2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4437 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ssp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4438 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_bor, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4439 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_por, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4440 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_pd, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4441 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_to, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4442 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_unused4, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4443 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ri, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4444 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_sboren, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4445 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ipen, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4446 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4447 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4448 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_iofs, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4449 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_osts, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4450 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4451 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4452 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf2, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4453 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_idlen, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4454 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9d, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4455 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_oerr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4456 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_ferr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4457 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_adden, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4458 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_cren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4459 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_sren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4460 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4461 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_spen, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4462 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9d, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4463 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_trmt, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4464 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_brgh, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4465 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sendb, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4466 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sync, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4467 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_txen, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4468 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4469 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_csrc, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4470 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9d, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4471 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_oerr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4472 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_ferr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4473 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_adden, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4474 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_cren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4475 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_sren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4476 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4477 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_spen, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4478 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9d, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4479 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_trmt, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4480 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_brgh, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4481 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sendb, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4482 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sync, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4483 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_txen, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4484 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4485 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_csrc, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4486 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_swdten, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4487 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused1, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4488 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused2, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4489 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused3, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4490 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused4, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4491 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused5, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4492 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused6, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4493 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused7, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4496 static void
4497 dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4499 gint len;
4500 gint i;
4501 proto_item *tfg_item;
4502 proto_tree *tfg_tree;
4504 DISSECTOR_ASSERT(start_offset == 0);
4506 len = MAX(0, tvb_length_remaining (tvb, 0));
4507 tfg_item = proto_tree_add_text (tree, tvb, 0, -1, "Task Flags (%u tasks)", len / 5);
4508 tfg_tree = proto_item_add_subtree (tfg_item, ett_r3taskflags);
4510 for (i = 0; i < len; i += 5)
4512 proto_item *tf_item = proto_tree_add_text (tfg_tree, tvb, i, 5,
4513 "Task Flags (%2d: 0x%06x)",
4514 tvb_get_guint8 (tvb, i + 0),
4515 tvb_get_letohl (tvb, i + 1));
4516 proto_tree *tf_tree = proto_item_add_subtree (tf_item, ett_r3taskflagsentry);
4518 proto_tree_add_item (tf_tree, hf_r3_taskflags_taskid, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4519 proto_tree_add_item (tf_tree, hf_r3_taskflags_flags, tvb, i + 1, 4, ENC_LITTLE_ENDIAN);
4523 static void
4524 dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4526 gint len;
4527 gint i;
4529 if (!tree)
4530 return;
4532 DISSECTOR_ASSERT(start_offset == 0);
4534 len = tvb_length_remaining (tvb, 3);
4536 proto_tree_add_item (tree, hf_r3_timerchain_newtick, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4537 proto_tree_add_item (tree, hf_r3_timerchain_currentboundary, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4539 for (i = 0; i < len; i += 12)
4541 proto_item *tc_item = proto_tree_add_text (tree, tvb, 3 + i, 12, "Timer Chain Entry");
4542 proto_tree *tc_tree = proto_item_add_subtree (tc_item, ett_r3timerchain);
4544 proto_tree_add_item (tc_tree, hf_r3_timerchain_tasktag, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4545 proto_tree_add_item (tc_tree, hf_r3_timerchain_address, tvb, 3 + i + 1, 2, ENC_LITTLE_ENDIAN);
4546 proto_tree_add_item (tc_tree, hf_r3_timerchain_reload, tvb, 3 + i + 3, 2, ENC_LITTLE_ENDIAN);
4547 proto_tree_add_item (tc_tree, hf_r3_timerchain_boundary, tvb, 3 + i + 5, 1, ENC_LITTLE_ENDIAN);
4548 proto_tree_add_item (tc_tree, hf_r3_timerchain_count, tvb, 3 + i + 6, 2, ENC_LITTLE_ENDIAN);
4549 proto_tree_add_item (tc_tree, hf_r3_timerchain_flags, tvb, 3 + i + 8, 4, ENC_LITTLE_ENDIAN);
4553 static void
4554 dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4556 gint i;
4557 gint len;
4559 DISSECTOR_ASSERT(start_offset == 0);
4561 len = tvb_length_remaining (tvb, 0);
4563 for (i = 0; i < len; i += 3)
4565 proto_item *peekpoke_item = NULL;
4566 proto_item *peekpoke_op_item = NULL;
4567 proto_tree *peekpoke_tree = NULL;
4569 if (tree)
4571 peekpoke_item = proto_tree_add_text (tree, tvb, i, 3, "%s", "");
4572 peekpoke_tree = proto_item_add_subtree (peekpoke_item, ett_r3peekpoke);
4574 peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4575 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, i + 1, 2, ENC_LITTLE_ENDIAN);
4578 switch (tvb_get_guint8 (tvb, i + 0))
4580 case PEEKPOKE_READU8 :
4581 if (peekpoke_tree)
4583 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x = 0x%02x)",
4584 tvb_get_letohs (tvb, i + 1),
4585 tvb_get_guint8 (tvb, i + 3));
4586 proto_item_set_len (peekpoke_item, 4);
4587 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4589 i += 1;
4590 break;
4592 case PEEKPOKE_READU16 :
4593 if (peekpoke_tree)
4595 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x = 0x%04x)",
4596 tvb_get_letohs (tvb, i + 1),
4597 tvb_get_letohs (tvb, i + 3));
4598 proto_item_set_len (peekpoke_item, 5);
4599 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, i + 3, 2, ENC_LITTLE_ENDIAN);
4601 i += 2;
4602 break;
4604 case PEEKPOKE_READU24 :
4605 if (peekpoke_tree)
4607 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x = 0x%06x)",
4608 tvb_get_letohs (tvb, i + 1),
4609 tvb_get_letoh24 (tvb, i + 3));
4610 proto_item_set_len (peekpoke_item, 6);
4611 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, i + 3, 3, ENC_LITTLE_ENDIAN);
4613 i += 3;
4614 break;
4616 case PEEKPOKE_READU32 :
4617 if (peekpoke_tree)
4619 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x = 0x%08x)",
4620 tvb_get_letohs (tvb, i + 1),
4621 tvb_get_letohl (tvb, i + 3));
4622 proto_item_set_len (peekpoke_item, 7);
4623 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, i + 3, 4, ENC_LITTLE_ENDIAN);
4625 i += 4;
4626 break;
4628 case PEEKPOKE_READSTRING :
4629 if (peekpoke_tree)
4631 proto_item_append_text (peekpoke_item, "Read (%u Bytes @ 0x%04x)",
4632 tvb_get_guint8 (tvb, i + 3),
4633 tvb_get_letohs (tvb, i + 1));
4634 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, i + 3));
4635 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4636 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, i + 4, tvb_get_guint8 (tvb, i + 3), ENC_NA);
4638 i += tvb_get_guint8 (tvb, i + 3) + 1;
4639 break;
4641 default :
4642 expert_add_info(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation);
4643 return; /* quit */
4648 static void
4649 dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4651 proto_item *ls_item;
4652 proto_tree *ls_tree;
4653 guint ls;
4655 if (!tree)
4656 return;
4658 DISSECTOR_ASSERT(start_offset == 0);
4660 ls = tvb_get_letoh24 (tvb, 0);
4661 ls_item = proto_tree_add_text (tree, tvb, 0, -1, "Lock State (0x%06x)", ls);
4662 ls_tree = proto_item_add_subtree (ls_item, ett_r3lockstate);
4664 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_passage, tvb, 0, 3, ls);
4665 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_panic, tvb, 0, 3, ls);
4666 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_lockout, tvb, 0, 3, ls);
4667 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_relock, tvb, 0, 3, ls);
4668 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autoopen, tvb, 0, 3, ls);
4669 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nextauto, tvb, 0, 3, ls);
4670 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_lockstate, tvb, 0, 3, ls);
4671 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_wantstate, tvb, 0, 3, ls);
4672 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_remote, tvb, 0, 3, ls);
4673 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_update, tvb, 0, 3, ls);
4674 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_exceptionspresent, tvb, 0, 3, ls);
4675 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_exceptionsactive, tvb, 0, 3, ls);
4676 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_timezonespresent, tvb, 0, 3, ls);
4677 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_timezonesactive, tvb, 0, 3, ls);
4678 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autounlockspresent, tvb, 0, 3, ls);
4679 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_autounlocksactive, tvb, 0, 3, ls);
4680 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmspresent, tvb, 0, 3, ls);
4681 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmsactive, tvb, 0, 3, ls);
4682 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmrelockspresent, tvb, 0, 3, ls);
4683 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_uapmreslocksactive, tvb, 0, 3, ls);
4684 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nvramprotect, tvb, 0, 3, ls);
4685 proto_tree_add_boolean (ls_tree, hf_r3_lockstate_nvramchecksum, tvb, 0, 3, ls);
4688 static void
4689 dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4691 proto_item *cf_item;
4692 proto_tree *cf_tree;
4693 gint len;
4694 guint items;
4695 guint octets;
4696 gint i;
4697 guint8 step;
4699 DISSECTOR_ASSERT(start_offset == 0);
4701 len = MAX(0, tvb_length_remaining (tvb, 0));
4703 items = 0;
4704 i = 0;
4706 while (i < len)
4708 items++;
4709 octets = tvb_get_guint8 (tvb, i);
4710 if (!octets)
4712 proto_tree_add_expert_format(tree, pinfo, &ei_r3_malformed_length, tvb, 0, len, "Capabilities could not be decoded because length of 0 encountered");
4713 return;
4715 i += octets;
4718 if (!tree)
4719 return;
4721 cf_item = proto_tree_add_text (tree, tvb, 0, len, "Capabilities (%u items)", items);
4722 cf_tree = proto_item_add_subtree (cf_item, ett_r3capabilities);
4724 i = 0;
4725 while (i<len && (step=tvb_get_guint8(tvb, i))>0)
4727 proto_item *tmp_item = proto_tree_add_item (cf_tree, hf_r3_capabilities, tvb, i, tvb_get_guint8 (tvb, i), ENC_NA);
4728 proto_tree *tmp_tree = proto_item_add_subtree (tmp_item, ett_r3capabilities);
4729 const gchar *fn;
4731 fn = val_to_str_ext_const (tvb_get_guint8 (tvb, i + 1), &r3_capabilitiesnames_ext, "[Unknown Field Name]");
4733 proto_item_append_text (tmp_item, " (%s, %u)", fn, tvb_get_letohs (tvb, i + 2));
4734 proto_tree_add_item (tmp_tree, hf_r3_capabilities_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4735 proto_tree_add_item (tmp_tree, hf_r3_capabilities_type, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4736 proto_tree_add_item (tmp_tree, hf_r3_capabilities_value, tvb, i + 2, 2, ENC_LITTLE_ENDIAN);
4738 i += step;
4742 static void
4743 dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4745 DISSECTOR_ASSERT(start_offset == 0);
4747 if (tvb_length_remaining (tvb, 0) != 20)
4749 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Length of M41T81 RTC register dump not 20 octets");
4751 else
4753 proto_item *rtc_item;
4754 proto_tree *rtc_tree;
4755 proto_tree *tmp_tree [20];
4756 guint offset_in_bits;
4758 if (!tree)
4759 return;
4761 rtc_item = proto_tree_add_text (tree, tvb, 0, -1, "M41T81 RTC Registers");
4762 rtc_tree = proto_item_add_subtree (rtc_item, ett_r3m41t81registers);
4764 tmp_tree [ 0] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg00, tvb, 0, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4765 tmp_tree [ 1] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg01, tvb, 1, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4766 tmp_tree [ 2] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg02, tvb, 2, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4767 tmp_tree [ 3] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg03, tvb, 3, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4768 tmp_tree [ 4] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg04, tvb, 4, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4769 tmp_tree [ 5] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg05, tvb, 5, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4770 tmp_tree [ 6] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg06, tvb, 6, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4771 tmp_tree [ 7] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg07, tvb, 7, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4772 tmp_tree [ 8] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg08, tvb, 8, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4773 tmp_tree [ 9] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg09, tvb, 9, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4774 tmp_tree [10] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0a, tvb, 10, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4775 tmp_tree [11] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0b, tvb, 11, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4776 tmp_tree [12] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0c, tvb, 12, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4777 tmp_tree [13] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0d, tvb, 13, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4778 tmp_tree [14] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0e, tvb, 14, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4779 tmp_tree [15] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg0f, tvb, 15, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4780 tmp_tree [16] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg10, tvb, 16, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4781 tmp_tree [17] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg11, tvb, 17, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4782 tmp_tree [18] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg12, tvb, 18, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4783 tmp_tree [19] = proto_item_add_subtree (proto_tree_add_item (rtc_tree, hf_r3_dumpm41t81_reg13, tvb, 19, 1, ENC_LITTLE_ENDIAN), ett_r3m41t81register);
4785 offset_in_bits = 0 * 8;
4787 proto_tree_add_bits_item (tmp_tree [ 0], hf_r3_dumpm41t81_reg00_sec1, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4788 proto_tree_add_bits_item (tmp_tree [ 0], hf_r3_dumpm41t81_reg00_sec01, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4789 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_st, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4790 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_10sec, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4791 proto_tree_add_bits_item (tmp_tree [ 1], hf_r3_dumpm41t81_reg01_1sec, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4792 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_notused, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4793 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_10min, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4794 proto_tree_add_bits_item (tmp_tree [ 2], hf_r3_dumpm41t81_reg02_1min, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4795 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_cbe, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4796 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_cb, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4797 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_10hour, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4798 proto_tree_add_bits_item (tmp_tree [ 3], hf_r3_dumpm41t81_reg03_1hour, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4799 proto_tree_add_bits_item (tmp_tree [ 4], hf_r3_dumpm41t81_reg04_notused, tvb, offset_in_bits, 5, ENC_LITTLE_ENDIAN); offset_in_bits += 5;
4800 proto_tree_add_bits_item (tmp_tree [ 4], hf_r3_dumpm41t81_reg04_dow, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4801 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_notused, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4802 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_10day, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4803 proto_tree_add_bits_item (tmp_tree [ 5], hf_r3_dumpm41t81_reg05_1day, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4804 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_notused, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4805 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_10month, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4806 proto_tree_add_bits_item (tmp_tree [ 6], hf_r3_dumpm41t81_reg06_1month, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4807 proto_tree_add_bits_item (tmp_tree [ 7], hf_r3_dumpm41t81_reg07_10year, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4808 proto_tree_add_bits_item (tmp_tree [ 7], hf_r3_dumpm41t81_reg07_1year, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4809 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_out, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4810 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_ft, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4811 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_s, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4812 proto_tree_add_bits_item (tmp_tree [ 8], hf_r3_dumpm41t81_reg08_cal, tvb, offset_in_bits, 5, ENC_LITTLE_ENDIAN); offset_in_bits += 5;
4813 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_notused, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4814 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_bmb, tvb, offset_in_bits, 5, ENC_LITTLE_ENDIAN); offset_in_bits += 5;
4815 proto_tree_add_bits_item (tmp_tree [ 9], hf_r3_dumpm41t81_reg09_rb, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4816 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_afe, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4817 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_sqwe, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4818 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_abe, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4819 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_10monthalm, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4820 proto_tree_add_bits_item (tmp_tree [10], hf_r3_dumpm41t81_reg0a_1monthalm, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4821 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_rpt5, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4822 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_rpt4, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4823 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_10dayalm, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4824 proto_tree_add_bits_item (tmp_tree [11], hf_r3_dumpm41t81_reg0b_1dayalm, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4825 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_rpt3, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4826 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_ht, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4827 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_10houralm, tvb, offset_in_bits, 2, ENC_LITTLE_ENDIAN); offset_in_bits += 2;
4828 proto_tree_add_bits_item (tmp_tree [12], hf_r3_dumpm41t81_reg0c_1houralm, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4829 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_rpt2, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4830 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_10minalm, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4831 proto_tree_add_bits_item (tmp_tree [13], hf_r3_dumpm41t81_reg0d_1minalm, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4832 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_rpt1, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4833 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_10secalm, tvb, offset_in_bits, 3, ENC_LITTLE_ENDIAN); offset_in_bits += 3;
4834 proto_tree_add_bits_item (tmp_tree [14], hf_r3_dumpm41t81_reg0e_1secalm, tvb, offset_in_bits, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4835 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_wdf, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4836 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_af, tvb, offset_in_bits, 1, ENC_LITTLE_ENDIAN); offset_in_bits += 1;
4837 proto_tree_add_bits_item (tmp_tree [15], hf_r3_dumpm41t81_reg0f_notused, tvb, offset_in_bits, 6, ENC_LITTLE_ENDIAN); offset_in_bits += 6;
4838 proto_tree_add_bits_item (tmp_tree [16], hf_r3_dumpm41t81_reg10_notused, tvb, offset_in_bits, 8, ENC_LITTLE_ENDIAN); offset_in_bits += 8;
4839 proto_tree_add_bits_item (tmp_tree [17], hf_r3_dumpm41t81_reg11_notused, tvb, offset_in_bits, 8, ENC_LITTLE_ENDIAN); offset_in_bits += 8;
4840 proto_tree_add_bits_item (tmp_tree [18], hf_r3_dumpm41t81_reg12_notused, tvb, offset_in_bits, 8, ENC_LITTLE_ENDIAN); offset_in_bits += 8;
4841 proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_rs, tvb, offset_in_bits - 8, 4, ENC_LITTLE_ENDIAN); offset_in_bits += 4;
4842 proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_notused, tvb, offset_in_bits - 8, 4, ENC_LITTLE_ENDIAN);
4846 static void
4847 dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4849 if (tree)
4851 DISSECTOR_ASSERT(start_offset == 0);
4853 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue, tvb, 0, 4, ENC_LITTLE_ENDIAN);
4854 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue_fixup, tvb, 4, 4, ENC_LITTLE_ENDIAN);
4858 static void
4859 dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
4861 gint len;
4863 DISSECTOR_ASSERT(start_offset == 0);
4865 len = MAX(0, tvb_length_remaining(tvb, 0));
4866 if (len % 3 != 0)
4868 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Checksum results data length not modulo 3 == 0");
4870 else
4872 proto_item *cksum_item;
4873 proto_tree *cksum_tree;
4874 guint32 error = FALSE;
4875 gint i;
4876 guint8 step;
4878 if (!tree)
4879 return;
4881 i = 0;
4882 while (i<len && (step=tvb_get_guint8(tvb, i))>0)
4884 error |= tvb_get_guint8 (tvb, i + 2);
4885 i += step;
4888 cksum_item = proto_tree_add_text (tree, tvb, 0, len, "Checksum Results (%s)", error ? "Error" : "No Errors");
4889 cksum_tree = proto_item_add_subtree (cksum_item, ett_r3checksumresults);
4891 i = 0;
4892 while (i<len && (step=tvb_get_guint8(tvb, i))>0)
4894 proto_item *res_item = proto_tree_add_item (cksum_tree, hf_r3_checksumresults,
4895 tvb,
4897 tvb_get_guint8 (tvb, i),
4898 ENC_NA);
4899 proto_tree *res_tree = proto_item_add_subtree (res_item, ett_r3checksumresultsfield);
4900 const gchar *fn;
4902 fn = val_to_str_ext_const (tvb_get_guint8 (tvb, i + 1), &r3_checksumresultnames_ext, "[Unknown Field Name]");
4904 proto_item_append_text (res_item, " %s (%s)", fn, tvb_get_guint8 (tvb, i + 2) ? "Error" : "No Error");
4906 proto_tree_add_item (res_tree, hf_r3_checksumresults_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4907 proto_tree_add_item (res_tree, hf_r3_checksumresults_field, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4908 proto_tree_add_item (res_tree, hf_r3_checksumresults_state, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4910 i += step;
4915 static void
4916 dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4918 gint len;
4919 gint i;
4921 if (!tree)
4922 return;
4924 DISSECTOR_ASSERT(start_offset == 0);
4926 len = tvb_length_remaining (tvb, 3);
4928 proto_tree_add_item (tree, hf_r3_mortisestatelog_pointer, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4929 proto_tree_add_item (tree, hf_r3_mortisestatelog_mortisetype, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4930 proto_tree_add_item (tree, hf_r3_mortisestatelog_waiting, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4932 for (i = 0; i < len; i += 3)
4934 guint state = tvb_get_guint8 (tvb, 3 + i + 0);
4935 guint last = tvb_get_guint8 (tvb, 3 + i + 1);
4936 guint event = tvb_get_guint8 (tvb, 3 + i + 2);
4937 proto_item *ms_item = proto_tree_add_text (tree, tvb, 3 + i, 3,
4938 "State Log Entry %2d (State=0x%02x, Last=0x%02x, Event=%s (0x%02x))",
4939 i / 3,
4940 state,
4941 last,
4942 val_to_str_ext_const (event, &r3_mortiseeventnames_ext, "[Unknown]"),
4943 event);
4944 proto_tree *ms_tree = proto_item_add_subtree (ms_item, ett_r3mortisestatelog);
4946 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_state, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4947 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_last, tvb, 3 + i + 1, 1, ENC_LITTLE_ENDIAN);
4948 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_event, tvb, 3 + i + 2, 1, ENC_LITTLE_ENDIAN);
4952 static void
4953 dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4955 proto_item *iopins_item;
4956 proto_tree *iopins_tree;
4958 if (!tree)
4959 return;
4961 DISSECTOR_ASSERT(start_offset == 0);
4963 iopins_item = proto_tree_add_text (tree, tvb, 0, 1,
4964 "Mortise Pin States (0x%02x)", tvb_get_guint8 (tvb, 0));
4965 iopins_tree = proto_item_add_subtree (iopins_item, ett_r3iopins);
4967 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s1, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4968 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s2, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4969 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s3, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4970 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s4, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4973 static void
4974 dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4976 if (!tree)
4977 return;
4979 DISSECTOR_ASSERT(start_offset == 0);
4981 proto_item_append_text (
4982 proto_tree_add_item (tree, hf_r3_testkeypad, tvb, 0, 1, ENC_LITTLE_ENDIAN),
4983 " ('%c')", tvb_get_guint8 (tvb, 0));
4986 static void
4987 dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4989 DISSECTOR_ASSERT(start_offset == 0);
4991 proto_tree_add_item (tree, hf_r3_testmagcard, tvb, 0, -1, ENC_ASCII|ENC_NA);
4994 static void
4995 dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
4997 DISSECTOR_ASSERT(start_offset == 0);
4999 proto_tree_add_item (tree, hf_r3_testproxcard, tvb, 0, -1, ENC_ASCII|ENC_NA);
5003 * ***************************************************************************
5005 * This is passed a tvb that contains [length] [CMD_RESPONSE] [responseType_e] [cmdCommand_e]
5007 static void
5008 dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5010 if (tree)
5012 proto_tree_add_item (tree, hf_r3_responsetype, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
5013 proto_tree_add_item (tree, hf_r3_responsetocommand, tvb, start_offset + 3, 1, ENC_LITTLE_ENDIAN);
5018 * This is passed a tvb that contains [length] [CMD_RESPONSE] [RESPONSETYPE_HASDATA] [UPSTREAMCOMMAND_*]
5020 static void
5021 dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
5023 guint32 commandPacketLen;
5024 guint8 upstreamCmd;
5026 DISSECTOR_ASSERT(start_offset == 0);
5028 tvb_ensure_bytes_exist (tvb, 0, 4);
5030 commandPacketLen = tvb_get_guint8 (tvb, 0);
5031 upstreamCmd = tvb_get_guint8 (tvb, 3);
5033 if (tvb_get_guint8 (tvb, 1) != CMD_RESPONSE)
5034 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_1);
5035 else if (tvb_get_guint8 (tvb, 2) != RESPONSETYPE_HASDATA)
5036 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_2);
5037 else if (upstreamCmd >= UPSTREAMCOMMAND_LAST)
5038 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5039 else
5041 proto_tree *upstreamcommand_tree = NULL;
5042 tvbuff_t *upstreamcommand_tvb;
5044 if (tree)
5046 proto_item *upstreamcommand_item;
5047 const gchar *ct;
5048 ct = val_to_str_ext_const (upstreamCmd, &r3_upstreamcommandnames_ext, "[Unknown Command Type]");
5050 proto_tree_add_item (tree, hf_r3_responsetype, tvb, 2, 1, ENC_LITTLE_ENDIAN);
5052 upstreamcommand_item = proto_tree_add_text (tree, tvb, 3, -1,
5053 "Upstream Command: %s (%u)", ct, upstreamCmd);
5054 upstreamcommand_tree = proto_item_add_subtree (upstreamcommand_item, ett_r3upstreamcommand);
5056 proto_tree_add_item (upstreamcommand_tree, hf_r3_upstreamcommand, tvb, 3, 1, ENC_LITTLE_ENDIAN);
5058 tvb_ensure_bytes_exist (tvb, 0, commandPacketLen - 4);
5060 upstreamcommand_tvb = tvb_new_subset (tvb, 4, commandPacketLen - 4, commandPacketLen - 4);
5061 if (r3upstreamcommand_dissect [upstreamCmd])
5062 (*r3upstreamcommand_dissect [upstreamCmd]) (upstreamcommand_tvb, 0, commandPacketLen - 4, pinfo, upstreamcommand_tree);
5067 * ***************************************************************************
5069 * These are passed a tvb that starts with [length] [CMD_RESPONSE] ...
5071 static void
5072 dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
5074 guint8 responseLen = tvb_get_guint8 (tvb, start_offset + 0);
5075 responseType_e responseType = (responseType_e)tvb_get_guint8 (tvb, start_offset + 2);
5076 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset, responseLen, responseLen);
5078 if (tree)
5080 const gchar *rt;
5082 rt = val_to_str_ext_const (responseType, &r3_responsetypenames_ext, "[Unknown Response Type]");
5084 proto_item_set_text (proto_tree_get_parent (tree), "Response Packet: %s (%u)", rt, responseType);
5085 proto_tree_add_item (tree, hf_r3_responselength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5086 proto_tree_add_item (tree, hf_r3_responsecommand, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5089 if (responseType >= RESPONSETYPE_LAST)
5091 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5093 else if (r3response_dissect [responseType])
5094 (*r3response_dissect [responseType]) (payload_tvb, 0, length, pinfo, tree);
5098 * These are passed a tvb that contains [length] [cmdCommand_e] [[data]]
5100 static void
5101 dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5103 if (tree)
5105 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5106 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5110 static void
5111 dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5113 if (tree)
5115 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5116 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5120 static void
5121 dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5123 if (tree)
5125 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5126 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5130 static void
5131 dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5133 if (tree)
5135 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5136 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5140 static void
5141 dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5143 proto_tree *dt_tree;
5144 proto_item *dt_item;
5145 guint8 cmdLen;
5146 tvbuff_t *payload_tvb;
5148 if (!tree)
5149 return;
5151 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5152 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5154 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5155 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5157 dt_item = proto_tree_add_text (tree, payload_tvb, 0, -1,
5158 "Set Date/Time (%02u/%02u/%02u-%u %02u:%02u:%02u)",
5159 tvb_get_guint8 (payload_tvb, 0),
5160 tvb_get_guint8 (payload_tvb, 1),
5161 tvb_get_guint8 (payload_tvb, 2),
5162 tvb_get_guint8 (payload_tvb, 3),
5163 tvb_get_guint8 (payload_tvb, 4),
5164 tvb_get_guint8 (payload_tvb, 5),
5165 tvb_get_guint8 (payload_tvb, 6));
5166 dt_tree = proto_item_add_subtree (dt_item, ett_r3setdatetime);
5168 proto_tree_add_item (dt_tree, hf_r3_setdate_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5169 proto_tree_add_item (dt_tree, hf_r3_setdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5170 proto_tree_add_item (dt_tree, hf_r3_setdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5171 proto_tree_add_item (dt_tree, hf_r3_setdate_dow, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5172 proto_tree_add_item (dt_tree, hf_r3_setdate_hours, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5173 proto_tree_add_item (dt_tree, hf_r3_setdate_minutes, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5174 proto_tree_add_item (dt_tree, hf_r3_setdate_seconds, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5177 static void
5178 dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5180 if (tree)
5182 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5183 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5187 static void
5188 dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
5190 guint cmdLen;
5191 tvbuff_t *payload_tvb;
5192 guint32 offset = 0;
5194 if (!tree)
5195 return;
5197 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5198 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5200 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5201 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5203 while (offset < (cmdLen - 2))
5205 proto_item *sc_item;
5206 proto_tree *sc_tree;
5207 const gchar *ci;
5208 guint8 configItem;
5209 guint8 item_length;
5211 configItem = tvb_get_guint8 (payload_tvb, offset + 1);
5213 ci = val_to_str_ext_const (
5214 configItem,
5215 &r3_configitemnames_ext,
5216 "[Unknown Configuration Item]");
5218 item_length = tvb_get_guint8 (payload_tvb, offset + 0);
5219 sc_item = proto_tree_add_text (tree, payload_tvb, offset + 0, item_length,
5220 "Config Field: %s (%u)", ci, configItem);
5221 sc_tree = proto_item_add_subtree (sc_item, ett_r3upstreamfield);
5223 sc_item = proto_tree_add_item (sc_tree, hf_r3_configitemlength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5224 proto_tree_add_item (sc_tree, hf_r3_configitem, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5225 if (item_length == 0) {
5226 expert_add_info_format(pinfo, sc_item, &ei_r3_malformed_length, "Invalid item length");
5227 return;
5230 if (configItem < array_length (configMap))
5232 switch (configMap [configItem])
5234 case CONFIGTYPE_NONE :
5235 proto_tree_add_item (sc_tree, hf_r3_configitemdata, payload_tvb, offset + 2, item_length - 3, ENC_NA);
5236 break;
5238 case CONFIGTYPE_BOOL :
5239 proto_tree_add_item (sc_tree, hf_r3_configitemdata_bool, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5240 break;
5242 case CONFIGTYPE_8 :
5243 proto_tree_add_item (sc_tree, hf_r3_configitemdata_8, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5244 break;
5246 case CONFIGTYPE_16 :
5247 proto_tree_add_item (sc_tree, hf_r3_configitemdata_16, payload_tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
5248 break;
5250 case CONFIGTYPE_32 :
5251 proto_tree_add_item (sc_tree, hf_r3_configitemdata_32, payload_tvb, offset + 2, 4, ENC_LITTLE_ENDIAN);
5252 break;
5254 case CONFIGTYPE_STRING :
5255 proto_tree_add_item (sc_tree, hf_r3_configitemdata_string, payload_tvb, offset + 2,
5256 item_length - 2, ENC_ASCII|ENC_NA);
5257 break;
5259 default :
5260 proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
5261 item_length - 2, "Unknown Field Type");
5262 break;
5265 else {
5266 proto_tree_add_text (sc_tree, payload_tvb, offset + 2, item_length - 2, "[Unknown Field Type]");
5269 offset += item_length;
5273 static void
5274 dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5276 proto_item *config_item;
5277 proto_tree *config_tree;
5278 guint32 cmdLen;
5279 guint32 i;
5281 if (!tree)
5282 return;
5284 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5286 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5287 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5289 config_item = proto_tree_add_item (tree, hf_r3_configitems, tvb, start_offset + 2, cmdLen - 2, ENC_NA);
5290 config_tree = proto_item_add_subtree (config_item, ett_r3configitem);
5292 for (i = 2; i < cmdLen; i++)
5293 proto_tree_add_item (config_tree, hf_r3_configitem, tvb, start_offset + i, 1, ENC_LITTLE_ENDIAN);
5296 static void
5297 dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
5299 guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5300 tvbuff_t *payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5301 guint32 offset = 0;
5303 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5304 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5306 while (offset < tvb_reported_length (payload_tvb))
5308 guint32 paramLength = tvb_get_guint8 (payload_tvb, offset + 0);
5309 guint32 paramType = tvb_get_guint8 (payload_tvb, offset + 1);
5310 guint32 dataLength = paramLength - 2;
5311 proto_tree *mu_tree = NULL;
5312 proto_item *len_field = NULL;
5314 if (tree)
5316 const gchar *auptn;
5317 auptn = val_to_str_ext_const (paramType, &r3_adduserparamtypenames_ext, "[Unknown Field]");
5319 mu_tree = proto_item_add_subtree (
5320 proto_tree_add_none_format (tree, hf_r3_adduserparamtype, payload_tvb, offset + 0, paramLength,
5321 "Manage User Field: %s (%u)", auptn, paramType), ett_r3manageuser);
5323 len_field = proto_tree_add_item (mu_tree, hf_r3_adduserparamtypelength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5324 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypetype, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5327 if (paramLength < 2)
5329 dataLength = 0;
5330 expert_add_info_format(pinfo, len_field, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
5333 offset += 2;
5335 switch (paramType)
5337 case ADDUSERPARAMTYPE_DISPOSITION :
5338 case ADDUSERPARAMTYPE_ACCESSALWAYS :
5339 case ADDUSERPARAMTYPE_ACCESSMODE :
5340 case ADDUSERPARAMTYPE_CACHED :
5341 case ADDUSERPARAMTYPE_USERTYPE :
5342 case ADDUSERPARAMTYPE_PRIMARYFIELDTYPE :
5343 case ADDUSERPARAMTYPE_AUXFIELDTYPE :
5344 case ADDUSERPARAMTYPE_USECOUNT :
5345 case ADDUSERPARAMTYPE_EXCEPTIONGROUP :
5346 if (dataLength != 1)
5348 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 1 octet");
5350 else
5351 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5352 break;
5354 case ADDUSERPARAMTYPE_USERNO :
5355 if (dataLength != 2)
5357 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 2 octets");
5359 else
5360 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5361 break;
5363 case ADDUSERPARAMTYPE_PRIMARYFIELD :
5364 case ADDUSERPARAMTYPE_AUXFIELD :
5365 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_NA);
5366 break;
5368 case ADDUSERPARAMTYPE_EXPIREON :
5370 if (dataLength != 3)
5372 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
5374 else
5376 proto_item *expireon_item;
5377 proto_tree *expireon_tree;
5379 if (!tree)
5380 break;
5382 expireon_item = proto_tree_add_text (mu_tree, payload_tvb, offset, 3,
5383 "Expire YY/MM/DD: %02u/%02u/%02u",
5384 tvb_get_guint8 (payload_tvb, offset + 2),
5385 tvb_get_guint8 (payload_tvb, offset + 0),
5386 tvb_get_guint8 (payload_tvb, offset + 1));
5387 expireon_tree = proto_item_add_subtree (expireon_item, ett_r3expireon);
5389 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5390 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5391 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5394 break;
5396 case ADDUSERPARAMTYPE_TIMEZONE :
5398 if (dataLength != 4)
5400 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
5402 else
5404 proto_item *timezone_item;
5405 proto_tree *timezone_tree;
5406 guint32 i;
5407 guint32 tz;
5409 if (!tree)
5410 break;
5412 tz = tvb_get_letohl (payload_tvb, offset);
5413 timezone_item = proto_tree_add_item (mu_tree, hf_r3_upstreamfieldarray [paramType], payload_tvb, offset, 4, ENC_LITTLE_ENDIAN);
5414 timezone_tree = proto_item_add_subtree (timezone_item, ett_r3timezone);
5416 for (i = 0; i < 32; i++)
5417 proto_tree_add_boolean (timezone_tree, hf_r3_timezonearray [i], payload_tvb, offset, 4, tz);
5420 break;
5422 default :
5423 proto_tree_add_string (mu_tree, hf_r3_upstreamfielderror, payload_tvb, offset, dataLength, "Unknown Field Type");
5424 break;
5427 offset += dataLength;
5431 static void
5432 dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5434 guint8 cmdLen;
5435 tvbuff_t *payload_tvb;
5437 if (!tree)
5438 return;
5440 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5441 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5443 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5444 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5446 proto_tree_add_item (tree, hf_r3_deleteusers, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5449 static void
5450 dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5452 proto_item *startdate_item;
5453 proto_tree *startdate_tree;
5454 proto_item *enddate_item;
5455 proto_tree *enddate_tree;
5456 guint8 cmdLen;
5457 tvbuff_t *payload_tvb;
5459 if (!tree)
5460 return;
5462 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5463 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5465 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5466 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5468 proto_tree_add_item (tree, hf_r3_defineexception_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5470 startdate_item = proto_tree_add_text (tree, payload_tvb, 1, 4,
5471 "Start MM/DD HH:MM (%02u/%02u %02u:%02u)",
5472 tvb_get_guint8 (payload_tvb, 1),
5473 tvb_get_guint8 (payload_tvb, 2),
5474 tvb_get_guint8 (payload_tvb, 3),
5475 tvb_get_guint8 (payload_tvb, 4));
5476 startdate_tree = proto_item_add_subtree (startdate_item, ett_r3defineexceptionstartdate);
5477 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5478 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5479 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5480 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5482 enddate_item = proto_tree_add_text (tree, payload_tvb, 5, 4,
5483 "End MM/DD HH:MM (%02u/%02u %02u:%02u)",
5484 tvb_get_guint8 (payload_tvb, 5),
5485 tvb_get_guint8 (payload_tvb, 6),
5486 tvb_get_guint8 (payload_tvb, 7),
5487 tvb_get_guint8 (payload_tvb, 8));
5488 enddate_tree = proto_item_add_subtree (enddate_item, ett_r3defineexceptionenddate);
5489 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_month, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5490 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_day, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5491 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_hours, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5492 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_minutes, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5495 static void
5496 dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5498 proto_item *bits_item;
5499 proto_tree *bits_tree;
5500 guint cmdLen;
5501 tvbuff_t *payload_tvb;
5502 guint32 i;
5503 guint32 bit = 0;
5505 if (!tree)
5506 return;
5508 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5509 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5511 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5512 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5514 proto_tree_add_item (tree, hf_r3_defineexceptiongroup_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5516 bits_item = proto_tree_add_text (tree, payload_tvb, 1, -1, "Exception Group Bit Field");
5517 bits_tree = proto_item_add_subtree (bits_item, ett_r3defineexceptiongroupbits);
5519 for (i = 1; i < (cmdLen - 2); i++)
5521 guint32 j;
5522 guint8 byte = tvb_get_guint8 (payload_tvb, i);
5524 for (j = 0; j < 8; j++)
5525 proto_tree_add_none_format (bits_tree, hf_r3_defineexceptiongroup_bits, payload_tvb, i, 1,
5526 "Exception Group %2d: %s", bit++, (byte & (1 << j)) ? "Enabled" : "Disabled");
5530 static void
5531 dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5533 guint8 cmdLen;
5534 tvbuff_t *payload_tvb;
5535 const gchar *mn;
5536 guint32 i;
5538 if (!tree)
5539 return;
5541 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5542 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5544 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5545 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5547 proto_tree_add_item (tree, hf_r3_definecalendar_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5549 for (i = 0; i < 12; i++)
5551 guint32 daymap = tvb_get_letohl (payload_tvb, (i * 4) + 1);
5552 proto_item *calendar_item = proto_tree_add_text (tree, payload_tvb, (i * 4) + 1, 4,
5553 "Calendar Bit Field - %s (0x%08x)",
5554 (mn = val_to_str_ext_const (i + 1, &r3_monthnames_ext, "[Unknown Month]")),
5555 daymap);
5556 proto_tree *calendar_tree = proto_item_add_subtree (calendar_item, ett_r3definecalendarmonth [i + 1]);
5557 guint32 j;
5559 for (j = 0; j < 31; j++)
5560 proto_tree_add_none_format (calendar_tree, hf_r3_definecalendar_bits, payload_tvb, (i * 4) + 1, 4,
5561 "%s Of %s: %s",
5562 val_to_str_ext_const (j + 1, &r3_monthdaynames_ext, "[Unknown Day]"),
5564 (daymap & (1 << j)) ? "Enabled" : "Disabled");
5568 static void
5569 dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5571 proto_item *starttime_item;
5572 proto_tree *starttime_tree;
5573 proto_item *endtime_item;
5574 proto_tree *endtime_tree;
5575 proto_item *daymap_item;
5576 proto_tree *daymap_tree;
5577 guint8 cmdLen;
5578 tvbuff_t *payload_tvb;
5579 guint32 i;
5580 guint8 tzmode;
5582 if (!tree)
5583 return;
5585 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5586 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5588 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5589 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5591 proto_tree_add_item (tree, hf_r3_definetimezone_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5593 starttime_item = proto_tree_add_text (tree, payload_tvb, 1, 2,
5594 "Start HH:MM (%02u:%02u)",
5595 tvb_get_guint8 (payload_tvb, 1),
5596 tvb_get_guint8 (payload_tvb, 2));
5597 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3definetimezonestarttime);
5598 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_hours, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5599 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_minutes, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5601 endtime_item = proto_tree_add_text (tree, payload_tvb, 3, 2,
5602 "End HH:MM (%02u:%02u)",
5603 tvb_get_guint8 (payload_tvb, 3),
5604 tvb_get_guint8 (payload_tvb, 4));
5605 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3definetimezoneendtime);
5606 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5607 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5609 daymap_item = proto_tree_add_text (tree, payload_tvb, 5, 1, "Day Map (0x%02x)", tvb_get_guint8 (payload_tvb, 5));
5610 daymap_tree = proto_item_add_subtree (daymap_item, ett_r3definetimezonedaymap);
5612 for (i = 0; i < 7; i++)
5613 proto_tree_add_boolean (daymap_tree, hf_r3_definetimezone_daymap [i], payload_tvb, 5, 1,
5614 tvb_get_guint8 (payload_tvb, 5));
5616 proto_tree_add_item (tree, hf_r3_definetimezone_exceptiongroup, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5617 proto_tree_add_uint (tree, hf_r3_definetimezone_mode, payload_tvb, 7, 1,
5618 (tzmode = tvb_get_guint8 (payload_tvb, 7)) & 0x0f);
5619 proto_tree_add_none_format (tree, hf_r3_definetimezone_calendar, payload_tvb, 7, 1,
5620 "Access Always: %s", (tzmode & 0x10) ? "True" : "False");
5623 static void
5624 dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5626 guint8 cmdLen;
5627 tvbuff_t *payload_tvb;
5629 if (!tree)
5630 return;
5632 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5633 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5635 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5636 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5638 proto_tree_add_item (tree, hf_r3_rmtauthretry_sequence, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5639 proto_tree_add_item (tree, hf_r3_rmtauthretry_retry, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5642 static void
5643 dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5645 proto_item *filter_item;
5646 proto_tree *filter_tree;
5647 guint8 cmdLen;
5648 tvbuff_t *payload_tvb;
5649 guint32 i;
5651 if (!tree)
5652 return;
5654 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5655 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5657 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5658 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5660 proto_tree_add_item (tree, hf_r3_filter_type, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5662 filter_item = proto_tree_add_text (tree, payload_tvb, 2, -1,
5663 "Filters (%u specified)", tvb_get_guint8 (payload_tvb, 0));
5664 filter_tree = proto_item_add_subtree (filter_item, ett_r3filters);
5666 for (i = 0; i < tvb_get_guint8 (payload_tvb, 0); i++)
5667 proto_tree_add_item (filter_tree, hf_r3_filter_list, payload_tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
5670 static void
5671 dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
5673 proto_item *alarm_item;
5674 proto_tree *alarm_tree;
5675 guint cmdLen;
5676 tvbuff_t *payload_tvb;
5677 guint32 offset = 0;
5678 guint32 alarms = 0;
5680 if (!tree)
5681 return;
5683 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5684 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5686 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5687 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5689 alarm_item = proto_tree_add_text (tree, payload_tvb, 0, -1, "Alarm List (0 items)");
5690 alarm_tree = proto_item_add_subtree (alarm_item, ett_r3alarmlist);
5692 while (offset < (cmdLen - 2))
5694 proto_item *alarmcfg_item, *pi;
5695 proto_tree *alarmcfg_tree;
5696 const gchar *ai;
5697 const gchar *as;
5698 guint32 alarm_len;
5700 if (!(ai = try_val_to_str_ext (tvb_get_guint8 (payload_tvb, offset + 1), &r3_alarmidnames_ext)))
5702 ai = "[Unknown Alarm ID]";
5703 as = "N/A";
5705 else
5706 as = (tvb_get_guint8 (payload_tvb, offset + 2) & 0xfe) ?
5707 "Error" : (tvb_get_guint8 (payload_tvb, offset + 2) & 0x01) ? "Enabled" : "Disabled";
5709 alarmcfg_item = proto_tree_add_text (alarm_tree, payload_tvb, offset, tvb_get_guint8 (payload_tvb, offset),
5710 "Alarm Item (%s, %s)", ai, as);
5711 alarmcfg_tree = proto_item_add_subtree (alarmcfg_item, ett_r3alarmcfg);
5713 alarm_len = tvb_get_guint8 (payload_tvb, offset + 0);
5714 pi = proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_length, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5715 if (alarm_len == 0) {
5716 expert_add_info_format (pinfo, pi, &ei_r3_malformed_length,
5717 "Alarm length equal to 0. Payload could be partially decoded");
5718 break;
5721 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_id, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5722 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_state, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5724 alarms++;
5725 offset += alarm_len;
5728 if (alarms)
5729 proto_item_set_text (alarm_item, "Alarm List (%d items)", alarms);
5732 static void
5733 dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5735 proto_item *starttime_item;
5736 proto_tree *starttime_tree;
5737 proto_item *endtime_item;
5738 proto_tree *endtime_tree;
5739 guint8 cmdLen;
5740 tvbuff_t *payload_tvb;
5742 if (!tree)
5743 return;
5745 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5746 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5748 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5749 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5751 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5,
5752 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5753 tvb_get_guint8 (payload_tvb, 0),
5754 tvb_get_guint8 (payload_tvb, 1),
5755 tvb_get_guint8 (payload_tvb, 2),
5756 tvb_get_guint8 (payload_tvb, 3),
5757 tvb_get_guint8 (payload_tvb, 4));
5758 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3eventlogdumpstarttime);
5759 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5760 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5761 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5762 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5763 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5765 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5,
5766 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5767 tvb_get_guint8 (payload_tvb, 5),
5768 tvb_get_guint8 (payload_tvb, 6),
5769 tvb_get_guint8 (payload_tvb, 7),
5770 tvb_get_guint8 (payload_tvb, 8),
5771 tvb_get_guint8 (payload_tvb, 9));
5772 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3eventlogdumpendtime);
5773 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5774 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5775 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5776 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5777 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5779 proto_tree_add_item (tree, hf_r3_eventlogdump_user, payload_tvb, 10, 2, ENC_LITTLE_ENDIAN);
5782 static void
5783 dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5785 proto_item *starttime_item;
5786 proto_tree *starttime_tree;
5787 proto_item *endtime_item;
5788 proto_tree *endtime_tree;
5789 guint8 cmdLen;
5790 tvbuff_t *payload_tvb;
5792 if (!tree)
5793 return;
5795 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5796 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5798 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5799 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5801 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5,
5802 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5803 tvb_get_guint8 (payload_tvb, 0),
5804 tvb_get_guint8 (payload_tvb, 1),
5805 tvb_get_guint8 (payload_tvb, 2),
5806 tvb_get_guint8 (payload_tvb, 3),
5807 tvb_get_guint8 (payload_tvb, 4));
5808 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3declinedlogdumpstarttime);
5809 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5810 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5811 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5812 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5813 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5815 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5,
5816 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5817 tvb_get_guint8 (payload_tvb, 5),
5818 tvb_get_guint8 (payload_tvb, 6),
5819 tvb_get_guint8 (payload_tvb, 7),
5820 tvb_get_guint8 (payload_tvb, 8),
5821 tvb_get_guint8 (payload_tvb, 9));
5822 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3declinedlogdumpendtime);
5823 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5824 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5825 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5826 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5827 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5830 static void
5831 dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5833 proto_item *starttime_item;
5834 proto_tree *starttime_tree;
5835 proto_item *endtime_item;
5836 proto_tree *endtime_tree;
5837 guint8 cmdLen;
5838 tvbuff_t *payload_tvb;
5840 if (!tree)
5841 return;
5843 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5844 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5846 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5847 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5849 starttime_item = proto_tree_add_text (tree, payload_tvb, 0, 5,
5850 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5851 tvb_get_guint8 (payload_tvb, 0),
5852 tvb_get_guint8 (payload_tvb, 1),
5853 tvb_get_guint8 (payload_tvb, 2),
5854 tvb_get_guint8 (payload_tvb, 3),
5855 tvb_get_guint8 (payload_tvb, 4));
5856 starttime_tree = proto_item_add_subtree (starttime_item, ett_r3alarmlogdumpstarttime);
5857 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5858 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5859 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5860 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5861 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5863 endtime_item = proto_tree_add_text (tree, payload_tvb, 5, 5,
5864 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5865 tvb_get_guint8 (payload_tvb, 5),
5866 tvb_get_guint8 (payload_tvb, 6),
5867 tvb_get_guint8 (payload_tvb, 7),
5868 tvb_get_guint8 (payload_tvb, 8),
5869 tvb_get_guint8 (payload_tvb, 9));
5870 endtime_tree = proto_item_add_subtree (endtime_item, ett_r3alarmlogdumpendtime);
5871 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5872 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5873 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5874 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5875 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5878 static void
5879 dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5881 proto_item *dlfw_item = NULL;
5882 proto_item *dlfw_action_item = NULL;
5883 proto_tree *dlfw_tree = NULL;
5884 guint8 cmdLen;
5885 tvbuff_t *payload_tvb;
5886 guint32 packetCRC;
5887 guint32 calculatedCRC;
5889 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5890 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5892 if (tree)
5894 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5895 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5897 dlfw_item = proto_tree_add_text (tree, payload_tvb, 0, -1,
5898 "Download Record (Record #%u, ", tvb_get_letohs (payload_tvb, 2));
5899 dlfw_tree = proto_item_add_subtree (dlfw_item, ett_r3downloadfirmware);
5901 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_length, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5902 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_record, payload_tvb, 2, 2, ENC_LITTLE_ENDIAN);
5903 dlfw_action_item = proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_action, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5906 switch (tvb_get_guint8 (payload_tvb, 4))
5908 case DOWNLOADFIRMWARE_START :
5909 if (!dlfw_tree)
5910 break;
5911 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_START)");
5912 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_timeout, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5913 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_nvram, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5914 break;
5916 case DOWNLOADFIRMWARE_DATA :
5917 if (!dlfw_tree)
5918 break;
5919 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_DATA, Address 0x%08x, %u Bytes)",
5920 tvb_get_letohl (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 9));
5921 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_address, payload_tvb, 5, 4, ENC_LITTLE_ENDIAN);
5922 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_bytes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5923 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_data, payload_tvb, 10,
5924 tvb_get_guint8 (payload_tvb, 9), ENC_NA);
5925 break;
5927 case DOWNLOADFIRMWARE_COMPLETE :
5928 if (!dlfw_tree)
5929 break;
5930 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_COMPLETE)");
5931 break;
5933 case DOWNLOADFIRMWARE_ABORT :
5934 if (!dlfw_tree)
5935 break;
5936 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_ABORT)");
5937 break;
5939 case DOWNLOADFIRMWARE_RESET :
5940 if (!dlfw_tree)
5941 break;
5942 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_RESET)");
5943 break;
5945 default :
5946 expert_add_info(pinfo, dlfw_action_item, &ei_r3_firmwaredownload_action);
5947 return; /* quit */
5950 if (!dlfw_tree)
5951 return;
5953 packetCRC = tvb_get_letohs (payload_tvb, cmdLen - 2 - 2);
5955 if ((calculatedCRC = utilCrcCalculate (tvb_get_ptr (payload_tvb, 0, cmdLen - 2 - 2),
5956 cmdLen - 2,
5957 0x0000))
5958 == packetCRC)
5959 proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5960 cmdLen - 2 - 2, 2,
5961 packetCRC, "0x%04x (correct)", packetCRC);
5962 else
5964 proto_item *tmp_item;
5966 proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5967 cmdLen - 2 - 2, 2,
5968 packetCRC, "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
5969 tmp_item = proto_tree_add_boolean (dlfw_tree, hf_r3_firmwaredownload_crc_bad, payload_tvb,
5970 cmdLen - 2 - 2, 2, TRUE);
5971 PROTO_ITEM_SET_GENERATED (tmp_item);
5975 static void
5976 dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
5978 guint8 cmdLen;
5979 tvbuff_t *payload_tvb;
5981 if (tree)
5983 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
5984 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
5986 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5987 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5989 proto_tree_add_item (tree, hf_r3_commanddata, payload_tvb, 0, -1, ENC_NA);
5991 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_cmd_downloadfirmwaretimeout); /* XXX: ??? */
5994 static void
5995 dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
5997 guint8 cmdLen;
5998 tvbuff_t *payload_tvb;
6000 if (!tree)
6001 return;
6003 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
6004 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
6006 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6007 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6009 proto_tree_add_item (tree, hf_r3_powertableselection, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
6012 static void
6013 dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6015 proto_item *nvram_item;
6016 proto_tree *nvram_tree;
6017 guint8 cmdLen;
6018 tvbuff_t *payload_tvb;
6019 guint32 nvramclearoptions;
6020 guint32 i;
6022 if (!tree)
6023 return;
6025 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
6026 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
6028 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6029 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6031 nvramclearoptions = tvb_get_letohs (payload_tvb, 0);
6033 nvram_item = proto_tree_add_text (tree, payload_tvb, 0, 2, "NVRAM Clean Options (0x%04x)", nvramclearoptions);
6034 nvram_tree = proto_item_add_subtree (nvram_item, ett_r3clearnvram);
6036 for (i = 0; i < 16; i++)
6037 proto_tree_add_boolean (nvram_tree, hf_r3_nvramclearoptions [i], payload_tvb, 0, 2, nvramclearoptions);
6040 static void
6041 dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6043 guint8 cmdLen;
6044 tvbuff_t *payload_tvb;
6046 if (!tree)
6047 return;
6049 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
6050 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
6052 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6053 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6055 /* XXX: hf[] entries for the following hf indexes originally missing */
6056 proto_tree_add_item (tree, hf_r3_dpac_action, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
6057 proto_tree_add_item (tree, hf_r3_dpac_waittime, payload_tvb, 1, 2, ENC_LITTLE_ENDIAN);
6058 proto_tree_add_item (tree, hf_r3_dpac_command, payload_tvb, 3, -1, ENC_NA);
6061 static void
6062 dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6064 if (tree)
6066 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6067 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6071 static void
6072 dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6074 if (tree)
6076 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6077 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6081 static void
6082 dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6084 guint8 cmdLen;
6085 tvbuff_t *payload_tvb;
6087 if (!tree)
6088 return;
6090 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
6091 payload_tvb = tvb_new_subset (tvb, start_offset + 2, cmdLen - 2, cmdLen - 2);
6093 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6094 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6096 proto_tree_add_item (tree, hf_r3_writeeventlog_user, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
6097 proto_tree_add_item (tree, hf_r3_writeeventlog_event, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
6100 static void
6101 dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6103 if (tree)
6105 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6106 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6108 mfgCommandFlag = TRUE;
6111 static void
6112 dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6114 if (tree)
6116 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6117 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6121 static void
6122 dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6124 if (tree)
6126 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6127 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6132 * ***************************************************************************
6134 static void
6135 dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6137 tvbuff_t *sn_tvb = tvb_new_subset (tvb, start_offset + 2, 16, 16);
6139 if (tree)
6141 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6142 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6144 dissect_serialnumber (sn_tvb, 0, length, pinfo, tree, hf_r3_mfgsetserialnumber);
6147 static void
6148 dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6150 if (tree)
6152 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6153 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6154 proto_tree_add_item (tree, hf_r3_mfgsetcryptkey, tvb, start_offset + 2, -1, ENC_NA);
6158 static void
6159 dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6161 if (tree)
6163 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6164 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6165 proto_tree_add_item (tree, hf_r3_mfgdumpnvram, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6169 static void
6170 dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6172 if (tree)
6174 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6175 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6179 static void
6180 dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6182 if (tree)
6184 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6185 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6186 proto_tree_add_item (tree, hf_r3_mfgremoteunlock, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6190 static void
6191 dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6193 if (tree)
6195 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6196 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6200 static void
6201 dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6203 if (tree)
6205 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6206 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6210 static void
6211 dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6213 if (tree)
6215 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6216 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6220 static void
6221 dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6223 if (tree)
6225 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6226 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6230 static void
6231 dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6233 if (tree)
6235 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6236 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6240 static void
6241 dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6243 if (tree)
6245 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6246 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6250 static void
6251 dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6253 if (tree)
6255 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6256 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6260 static void
6261 dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6263 gint i;
6264 gint len;
6265 guint8 step;
6267 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6268 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6270 start_offset += 2;
6271 len = tvb_length_remaining (tvb, start_offset);
6273 i = 0;
6274 while (i<len && (step=tvb_get_guint8(tvb, start_offset + i))>0)
6276 proto_item *force_item = proto_tree_add_text (tree, tvb, start_offset + i, tvb_get_guint8 (tvb, start_offset + i),
6277 "Force Option %s (%u)",
6278 val_to_str_ext_const (
6279 tvb_get_guint8 (tvb, start_offset + i + 1),
6280 &r3_forceitemnames_ext, "[Unknown]"),
6281 tvb_get_guint8 (tvb, start_offset + i + 1));
6282 proto_tree *force_tree = proto_item_add_subtree (force_item, ett_r3forceoptions);
6283 proto_item *force_item_item;
6285 proto_tree_add_item (force_tree, hf_r3_forceoptions_length, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6286 force_item_item = proto_tree_add_item (force_tree, hf_r3_forceoptions_item, tvb, start_offset + i + 1, 1, ENC_LITTLE_ENDIAN);
6288 switch (tvb_get_guint8 (tvb, start_offset + i) - 2)
6290 case 1 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_8, tvb, start_offset + i + 2, 1, ENC_LITTLE_ENDIAN);
6291 break;
6292 case 2 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_16, tvb, start_offset + i + 2, 2, ENC_LITTLE_ENDIAN);
6293 break;
6294 case 3 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_24, tvb, start_offset + i + 2, 3, ENC_LITTLE_ENDIAN);
6295 break;
6296 case 4 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_32, tvb, start_offset + i + 2, 4, ENC_LITTLE_ENDIAN);
6297 break;
6298 default :
6299 expert_add_info_format(pinfo, force_item_item, &ei_r3_malformed_length, "Invalid length for Forceoptions State entry");
6300 return; /* quit */
6301 break;
6304 i += step;
6308 static void
6309 dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6311 if (tree)
6313 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6314 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6318 static void
6319 dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6321 if (tree)
6323 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6324 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6328 static void
6329 dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6331 if (tree)
6333 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6334 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6338 static void
6339 dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6341 if (tree)
6343 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6344 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6348 static void
6349 dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6351 if (tree)
6353 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6354 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6358 static void
6359 dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6361 if (tree)
6363 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6364 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6368 static void
6369 dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6371 gint i;
6372 gint len;
6374 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6375 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6377 start_offset += 2;
6378 len = tvb_length_remaining (tvb, start_offset);
6380 for (i = 0; i < len; i += 3)
6382 proto_item *peekpoke_item;
6383 proto_item *peekpoke_op_item;
6384 proto_tree *peekpoke_tree;
6386 peekpoke_item = proto_tree_add_text (tree, tvb, start_offset + i, 3, "%s", "");
6387 peekpoke_tree = proto_item_add_subtree (peekpoke_item, ett_r3peekpoke);
6389 peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6390 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, start_offset + i + 1, 2, ENC_LITTLE_ENDIAN);
6392 switch (tvb_get_guint8 (tvb, start_offset + i + 0))
6394 case PEEKPOKE_READU8 :
6395 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6396 break;
6398 case PEEKPOKE_READU16 :
6399 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6400 break;
6402 case PEEKPOKE_READU24 :
6403 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6404 break;
6406 case PEEKPOKE_READU32 :
6407 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6408 break;
6410 case PEEKPOKE_READSTRING :
6411 proto_item_append_text (peekpoke_item,
6412 "Read (%d Bytes @ 0x%04x)",
6413 tvb_get_guint8 (tvb, start_offset + i + 3),
6414 tvb_get_letohs (tvb, start_offset + i + 1));
6415 proto_item_set_len (peekpoke_item, 4);
6416 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6417 i += 1;
6418 break;
6420 case PEEKPOKE_WRITEU8 :
6421 proto_item_append_text (peekpoke_item,
6422 "Write (8 Bits: 0x%02x @ 0x%04x)",
6423 tvb_get_guint8 (tvb, start_offset + i + 3),
6424 tvb_get_letohs (tvb, start_offset + i + 1));
6425 proto_item_set_len (peekpoke_item, 4);
6426 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6427 i += 1;
6428 break;
6430 case PEEKPOKE_WRITEU16 :
6431 proto_item_append_text (peekpoke_item,
6432 "Write (16 Bits: 0x%04x @ 0x%04x)",
6433 tvb_get_letohs (tvb, start_offset + i + 3),
6434 tvb_get_letohs (tvb, start_offset + i + 1));
6435 proto_item_set_len (peekpoke_item, 5);
6436 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, ENC_LITTLE_ENDIAN);
6437 i += 2;
6438 break;
6440 case PEEKPOKE_WRITEU24 :
6441 proto_item_append_text (peekpoke_item,
6442 "Write (24 Bits: 0x%06x @ 0x%04x)",
6443 tvb_get_letoh24 (tvb, start_offset + i + 3),
6444 tvb_get_letohs (tvb, start_offset + i + 1));
6445 proto_item_set_len (peekpoke_item, 6);
6446 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, ENC_LITTLE_ENDIAN);
6447 i += 3;
6448 break;
6450 case PEEKPOKE_WRITEU32 :
6451 proto_item_append_text (peekpoke_item,
6452 "Write (32 Bits: 0x%08x @ 0x%04x)",
6453 tvb_get_letohl (tvb, start_offset + i + 3),
6454 tvb_get_letohs (tvb, start_offset + i + 1));
6455 proto_item_set_len (peekpoke_item, 7);
6456 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, ENC_LITTLE_ENDIAN);
6457 i += 4;
6458 break;
6460 case PEEKPOKE_WRITESTRING :
6461 proto_item_append_text (peekpoke_item,
6462 "Write (%d Bytes @ 0x%04x)",
6463 tvb_get_guint8 (tvb, start_offset + i + 3),
6464 tvb_get_letohs (tvb, start_offset + i + 1));
6465 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, start_offset + i + 3));
6466 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6467 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4,
6468 tvb_get_guint8 (tvb, start_offset + i + 3), ENC_NA);
6469 i += tvb_get_guint8 (tvb, start_offset + i + 3) + 1;
6470 break;
6472 default :
6473 expert_add_info_format(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation, "Unknown Mfg peekpoke operation value");
6474 return; /* quit */
6479 static void
6480 dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6482 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6483 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6486 static void
6487 dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6489 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6490 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6493 static void
6494 dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6496 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6497 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6500 static void
6501 dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6503 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6504 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6507 static void
6508 dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6510 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6511 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6514 static void
6515 dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6517 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6518 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6521 static void
6522 dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6524 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6525 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6528 static void
6529 dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6531 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6532 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6535 static void
6536 dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6538 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6539 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6542 static void
6543 dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6545 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6546 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6549 static void
6550 dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6552 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6553 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6554 proto_tree_add_item (tree, hf_r3_mfgtestpreserve, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6557 static void
6558 dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6560 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6561 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6564 static void
6565 dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6567 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6568 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6571 static void
6572 dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6574 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6575 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6578 static void
6579 dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
6581 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6582 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6587 static gint
6588 dissect_r3_command (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree)
6590 proto_item *cmd_item;
6591 proto_tree *cmd_tree;
6592 const gchar *cn;
6593 guint8 cmdLen;
6594 guint8 cmd;
6596 tvb_ensure_bytes_exist (tvb, start_offset, 2);
6598 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
6599 cmd = tvb_get_guint8 (tvb, start_offset + 1);
6601 if (!mfgCommandFlag)
6602 cn = val_to_str_ext_const (cmd, &r3_cmdnames_ext, "[Unknown Command]");
6603 else
6604 cn = val_to_str_ext_const (cmd, &r3_cmdmfgnames_ext, "[Unknown Mfg Command]");
6606 cmd_item = proto_tree_add_text (r3_tree, tvb, start_offset, cmdLen, "Command Packet: %s (%d)", cn, cmd);
6607 cmd_tree = proto_item_add_subtree (cmd_item, ett_r3cmd);
6609 if (!mfgCommandFlag)
6611 if (cmd >= CMD_LAST)
6612 expert_add_info(pinfo, proto_tree_get_parent (cmd_tree), &ei_r3_unknown_command_value);
6613 else if (r3command_dissect [cmd])
6614 (*r3command_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6616 else
6618 mfgCommandFlag = FALSE;
6620 if (cmd >= CMDMFG_LAST)
6622 expert_add_info_format(pinfo, proto_tree_get_parent (cmd_tree), &ei_r3_unknown_command_value, "Unknown manufacturing command value");
6624 else if (r3commandmfg_dissect [cmd])
6625 (*r3commandmfg_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6628 return tvb_get_guint8 (tvb, start_offset + 0);
6632 * ***************************************************************************
6634 * Dissect a single r3 PDU
6636 * return: amount consumed
6638 static int
6639 dissect_r3_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tree *r3_tree)
6641 proto_item *payload_item = NULL;
6642 proto_tree *payload_tree = NULL;
6643 guint offset = 0;
6644 guint32 packetLen;
6645 guint octConsumed;
6647 if (tvb_strneql (tvb, 0, "~~~ds", 5) == 0)
6649 if (r3_tree)
6650 proto_tree_add_item (r3_tree, hf_r3_tildex3ds, tvb, 0, -1, ENC_ASCII|ENC_NA);
6652 return 5;
6656 * Show basic header stuff
6658 if (r3_tree)
6660 proto_item *header_item = proto_tree_add_item (r3_tree, hf_r3_header, tvb, 0, 5, ENC_NA);
6661 proto_tree *header_tree = proto_item_add_subtree (header_item, ett_r3header);
6663 proto_tree_add_item (header_tree, hf_r3_sigil, tvb, 0, 1, ENC_LITTLE_ENDIAN);
6664 proto_tree_add_item (header_tree, hf_r3_address, tvb, 1, 1, ENC_LITTLE_ENDIAN);
6665 proto_tree_add_item (header_tree, hf_r3_packetnumber, tvb, 2, 1, ENC_LITTLE_ENDIAN);
6666 proto_tree_add_item (header_tree, hf_r3_packetlength, tvb, 3, 1, ENC_LITTLE_ENDIAN);
6667 proto_tree_add_item (header_tree, hf_r3_encryption, tvb, 4, 1, ENC_LITTLE_ENDIAN);
6670 /* Note: packetLen == tvb_reported_length() */
6672 packetLen = tvb_get_guint8 (tvb, 3);
6674 if (r3_tree)
6676 payload_item = proto_tree_add_item (r3_tree, hf_r3_payload, tvb, 5, -1, ENC_NA);
6677 payload_tree = proto_item_add_subtree (payload_item, ett_r3payload);
6680 offset = 5;
6682 mfgCommandFlag = FALSE; /* XXX: Assumption: mfgCmd always follows Cmd in same r3 "packet" */
6683 while (offset < (packetLen - 3))
6685 octConsumed = dissect_r3_command (tvb, offset, 0, pinfo, payload_tree);
6686 if(octConsumed == 0)
6688 expert_add_info_format(pinfo, proto_tree_get_parent (payload_tree), &ei_r3_malformed_length,
6689 "Command length equal to 0. Payload could be partially decoded");
6690 offset = tvb_reported_length (tvb) - 3; /* just do CRC stuff ?? */
6691 break;
6693 offset += octConsumed;
6697 * Show the CRC and XOR status
6699 if (r3_tree)
6701 proto_item *tail_item = proto_tree_add_item (r3_tree, hf_r3_tail, tvb, offset, 3, ENC_NA);
6702 proto_tree *tail_tree = proto_item_add_subtree (tail_item, ett_r3tail);
6703 guint32 packetCRC = tvb_get_letohs (tvb, offset);
6704 guint32 packetXor = tvb_get_guint8 (tvb, offset + 2);
6705 guint32 calculatedCRC;
6707 if ((calculatedCRC = utilCrcCalculate (tvb_get_ptr (tvb, 1, packetLen - 3), packetLen - 3, 0x0000)) == packetCRC)
6708 proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC, "0x%04x (correct)", packetCRC);
6709 else
6711 proto_item *tmp_item;
6713 proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC,
6714 "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
6715 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_crc_bad, tvb, offset, 2, TRUE);
6716 PROTO_ITEM_SET_GENERATED (tmp_item);
6719 if ((packetLen ^ 0xff) == packetXor)
6720 proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 2, 1, packetXor,
6721 "0x%02x (correct)", packetXor);
6722 else
6724 proto_item *tmp_item;
6726 proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor,
6727 "0x%02x (incorrect, should be 0x%02x)", packetXor, packetLen ^ 0xff);
6728 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_xor_bad, tvb, offset + 7, 1, TRUE);
6729 PROTO_ITEM_SET_GENERATED (tmp_item);
6733 offset += 3;
6735 return offset;
6739 * ***************************************************************************
6741 * Main dissector entry points
6743 static int
6744 dissect_r3_message (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
6746 proto_tree *r3_tree = NULL;
6748 col_set_str (pinfo->cinfo, COL_PROTOCOL, "R3");
6749 col_clear (pinfo->cinfo, COL_INFO);
6751 /* Note: The tvb (provided via tcp_dissect_pdus()) will contain (at most) one PDU of the length
6752 * specified via get_r3_message_len()
6755 if (tree)
6757 proto_item *r3_item;
6758 r3_item = proto_tree_add_item (tree, proto_r3, tvb, 0, -1, ENC_NA);
6759 r3_tree = proto_item_add_subtree (r3_item, ett_r3);
6762 dissect_r3_packet (tvb, pinfo, r3_tree);
6764 return tvb_length(tvb);
6767 static guint
6768 get_r3_message_len (packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
6770 return (guint) tvb_get_guint8 (tvb, offset + 3) + 1;
6773 static int
6774 dissect_r3 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
6776 tcp_dissect_pdus (tvb, pinfo, tree, TRUE, 4, get_r3_message_len, dissect_r3_message, data);
6777 return tvb_length(tvb);
6781 * ***************************************************************************
6783 void proto_register_r3 (void)
6786 /* Setup list of header fields */
6787 static hf_register_info hf [] =
6789 { &hf_r3_tildex3ds,
6790 { "DPAC Attention", "r3.dpac_attention",
6791 FT_STRING, BASE_NONE, NULL, 0x0,
6792 NULL, HFILL }
6795 { &hf_r3_header,
6796 { "Header", "r3.header",
6797 FT_NONE, BASE_NONE, NULL, 0x0,
6798 NULL, HFILL }
6800 { &hf_r3_payload,
6801 { "Payload", "r3.payload",
6802 FT_NONE, BASE_NONE, NULL, 0x0,
6803 NULL, HFILL }
6805 { &hf_r3_tail,
6806 { "Tail", "r3.tail",
6807 FT_NONE, BASE_NONE, NULL, 0x0,
6808 NULL, HFILL }
6811 { &hf_r3_sigil,
6812 { "Sigil", "r3.sigil",
6813 FT_UINT8, BASE_HEX, NULL, 0x0,
6814 NULL, HFILL }
6816 { &hf_r3_address,
6817 { "Address", "r3.address",
6818 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6819 NULL, HFILL }
6821 { &hf_r3_packetnumber,
6822 { "Packet Number", "r3.packetnumber",
6823 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6824 NULL, HFILL }
6826 { &hf_r3_packetlength,
6827 { "Packet Length", "r3.packetlength",
6828 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6829 NULL, HFILL }
6831 { &hf_r3_encryption,
6832 { "Crypt Type", "r3.encryption",
6833 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_encryptionschemenames_ext, 0x0,
6834 NULL, HFILL }
6836 { &hf_r3_crc,
6837 { "CRC", "r3.crc",
6838 FT_UINT16, BASE_HEX, NULL, 0x0,
6839 NULL, HFILL }
6841 { &hf_r3_crc_bad,
6842 { "Bad CRC", "r3.crc_bad",
6843 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6844 NULL, HFILL }
6846 { &hf_r3_xor,
6847 { "XOR", "r3.xor",
6848 FT_UINT8, BASE_HEX, NULL, 0x0,
6849 NULL, HFILL }
6851 { &hf_r3_xor_bad,
6852 { "Bad XOR", "r3.xor_bad",
6853 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6854 NULL, HFILL }
6857 { &hf_r3_commandlength,
6858 { "Command Length", "r3.command.length",
6859 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6860 NULL, HFILL }
6862 { &hf_r3_command,
6863 { "Command", "r3.command.command",
6864 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6865 NULL, HFILL }
6867 { &hf_r3_commanddata,
6868 { "Command Data", "r3.command.data",
6869 FT_NONE, BASE_NONE, NULL, 0x0,
6870 NULL, HFILL }
6873 { &hf_r3_commandmfglength,
6874 { "Mfg Command Length", "r3.commandmfg.length",
6875 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6876 NULL, HFILL }
6878 { &hf_r3_commandmfg,
6879 { "Mfg Command", "r3.commandmfg.command",
6880 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdmfgnames_ext, 0x0,
6881 NULL, HFILL }
6883 #if 0
6884 { &hf_r3_commandmfgdata,
6885 { "Mfg Command Data", "r3.commandmfg.data",
6886 FT_NONE, BASE_NONE, NULL, 0x0,
6887 NULL, HFILL }
6889 #endif
6891 { &hf_r3_responselength,
6892 { "Response Length", "r3.response.length",
6893 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6894 NULL, HFILL }
6896 { &hf_r3_responsecommand,
6897 { "Response Command", "r3.response.command",
6898 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6899 NULL, HFILL }
6901 { &hf_r3_responsetype,
6902 { "Response Type", "r3.response.responsetype",
6903 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_responsetypenames_ext, 0x0,
6904 NULL, HFILL }
6906 { &hf_r3_responsetocommand,
6907 { "Response To Command", "r3.response.to_command",
6908 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6909 NULL, HFILL }
6911 #if 0
6912 { &hf_r3_responsedata,
6913 { "Response Data", "r3.response.data",
6914 FT_NONE, BASE_NONE, NULL, 0x0,
6915 NULL, HFILL }
6917 #endif
6919 { &hf_r3_upstreamcommand,
6920 { "Upstream Command", "r3.upstreamcommand.command",
6921 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamcommandnames_ext, 0x0,
6922 NULL, HFILL }
6925 { &hf_r3_upstreamfield,
6926 { "Upstream Field", "r3.upstreamfield",
6927 FT_NONE, BASE_NONE, NULL, 0x0,
6928 NULL, HFILL }
6930 { &hf_r3_upstreamfieldlength,
6931 { "Field Length", "r3.upstreamfield.length",
6932 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6933 NULL, HFILL }
6935 { &hf_r3_upstreamfieldtype,
6936 { "Field Type", "r3.upstreamfield.type",
6937 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamfieldnames_ext, 0x0,
6938 NULL, HFILL }
6940 #if 0
6941 { &hf_r3_upstreamfielddatalen,
6942 { "Data Length", "r3.upstreamfield.datalen",
6943 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6944 NULL, HFILL }
6946 #endif
6947 { &hf_r3_upstreamfielderror,
6948 { "Error", "r3.upstreamfield.error",
6949 FT_STRING, BASE_NONE, NULL, 0x0,
6950 NULL, HFILL }
6952 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SERIALNUMBER],
6953 { "Serial Number", "r3.upstreamfield.serialnumber",
6954 FT_STRING, BASE_NONE, NULL, 0x0,
6955 NULL, HFILL }
6957 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_NAR],
6958 { "Next Available Record", "r3.upstreamfield.nar",
6959 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6960 NULL, HFILL }
6962 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ENTRYDEVICE],
6963 { "Entry Device", "r3.upstreamfield.entrydevice",
6964 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6965 NULL, HFILL }
6967 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PPMIFIELDTYPE],
6968 { "PPMI Field Type", "r3.upstreamfield.ppmifieldtype",
6969 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6970 NULL, HFILL }
6972 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PIN],
6973 { "PIN", "r3.upstreamfield.pin",
6974 FT_STRING, BASE_NONE, NULL, 0x0,
6975 NULL, HFILL }
6977 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SEQUENCENUMBER],
6978 { "Sequence Number", "r3.upstreamfield.sequencenumber",
6979 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6980 NULL, HFILL }
6982 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_RESPONSEWINDOW],
6983 { "Response Window", "r3.upstreamfield.responsewindow",
6984 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6985 NULL, HFILL }
6987 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERNUMBER],
6988 { "User Number", "r3.upstreamfield.usernumber",
6989 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6990 NULL, HFILL }
6992 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_VERSION],
6993 { "Version", "r3.upstreamfield.version",
6994 FT_STRING, BASE_NONE, NULL, 0x0,
6995 NULL, HFILL }
6997 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORD],
6998 { "Event Log Record", "r3.upstreamfield.eventlogrecord",
6999 FT_BYTES, BASE_NONE, NULL, 0x0,
7000 NULL, HFILL }
7002 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DATETIME],
7003 { "Date/Time", "r3.upstreamfield.datetime",
7004 FT_BYTES, BASE_NONE, NULL, 0x0,
7005 NULL, HFILL }
7007 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORDCOUNT],
7008 { "Event Log Record Count", "r3.upstreamfield.eventlogrecordcount",
7009 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7010 NULL, HFILL }
7012 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORDCOUNT],
7013 { "Declined Log Record", "r3.upstreamfield.declinedlogrecord",
7014 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7015 NULL, HFILL }
7017 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORD],
7018 { "Declined Log", "r3.upstreamfield.declinedlog",
7019 FT_BYTES, BASE_NONE, NULL, 0x0,
7020 NULL, HFILL }
7022 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERTYPE],
7023 { "User Type", "r3.upstreamfield.usertype",
7024 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
7025 NULL, HFILL }
7027 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSALWAYS],
7028 { "Access Always", "r3.upstreamfield.accessalways",
7029 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7030 NULL, HFILL }
7032 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_CACHED],
7033 { "Cached", "r3.upstreamfield.cached",
7034 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7035 NULL, HFILL }
7037 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYFIELDTYPE],
7038 { "Primary Field Type", "r3.upstreamfield.primaryfieldtype",
7039 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
7040 NULL, HFILL }
7042 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXFIELDTYPE],
7043 { "Aux Field Type", "r3.upstreamfield.auxfieldtype",
7044 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
7045 NULL, HFILL }
7047 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSMODE],
7048 { "Access Mode", "r3.upstreamfield.accessmode",
7049 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
7050 NULL, HFILL }
7052 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXPIREON],
7053 { "Expire On", "r3.upstreamfield.expireon",
7054 FT_UINT24, BASE_HEX, NULL, 0x0,
7055 NULL, HFILL }
7057 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USECOUNT],
7058 { "Use Count", "r3.upstreamfield.usecount",
7059 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7060 NULL, HFILL }
7062 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_TIMEZONE],
7063 { "Timezone", "r3.upstreamfield.timezone",
7064 FT_UINT32, BASE_HEX, NULL, 0x0,
7065 NULL, HFILL }
7067 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXCEPTIONGROUP],
7068 { "Exception Group", "r3.upstreamfield.exceptiongroup",
7069 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7070 NULL, HFILL }
7072 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYPIN],
7073 { "Primary PIN", "r3.upstreamfield.primarypin",
7074 FT_BYTES, BASE_NONE, NULL, 0x0,
7075 NULL, HFILL }
7077 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXPIN],
7078 { "Aux PIN", "r3.upstreamfield.auxpin",
7079 FT_BYTES, BASE_NONE, NULL, 0x0,
7080 NULL, HFILL }
7082 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORDCOUNT],
7083 { "Alarm Record Count", "r3.upstreamfield.alarmrecordcount",
7084 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7085 NULL, HFILL }
7087 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORD],
7088 { "Alarm Record", "r3.upstreamfield.alarmrecord",
7089 FT_BYTES, BASE_NONE, NULL, 0x0,
7090 NULL, HFILL }
7092 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXCTLRVERSION],
7093 { "Aux Controller Version", "r3.upstreamfield.auxctlrversion",
7094 FT_STRING, BASE_NONE, NULL, 0x0,
7095 NULL, HFILL }
7098 { &hf_r3_configitems,
7099 { "Configuration Item List", "r3.configitems",
7100 FT_NONE, BASE_NONE, NULL, 0x0,
7101 NULL, HFILL }
7103 { &hf_r3_configitem,
7104 { "Configuration Item", "r3.configitem",
7105 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configitemnames_ext, 0x0,
7106 NULL, HFILL }
7108 #if 0
7109 { &hf_r3_configfield,
7110 { "Config Field", "r3.configfield",
7111 FT_NONE, BASE_NONE, NULL, 0x0,
7112 NULL, HFILL }
7114 #endif
7115 { &hf_r3_configitemlength,
7116 { "Configuration Item Length", "r3.configitem.length",
7117 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7118 NULL, HFILL }
7120 { &hf_r3_configitemtype,
7121 { "Configuration Item Type", "r3.configitem.type",
7122 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configtypenames_ext, 0x0,
7123 NULL, HFILL }
7125 { &hf_r3_configitemdata,
7126 { "Configuration Item Data", "r3.configitem.data",
7127 FT_NONE, BASE_NONE, NULL, 0x0,
7128 NULL, HFILL }
7130 { &hf_r3_configitemdata_bool,
7131 { "Configuration Item Boolean", "r3.configitem.data_boolean",
7132 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7133 NULL, HFILL }
7135 { &hf_r3_configitemdata_8,
7136 { "Configuration Item 8-bit", "r3.configitem.data_8",
7137 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7138 NULL, HFILL }
7140 { &hf_r3_configitemdata_16,
7141 { "Configuration Item 16-bit", "r3.configitem.data_16",
7142 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7143 NULL, HFILL }
7145 { &hf_r3_configitemdata_32,
7146 { "Configuration Item 32-bit", "r3.configitem.data_32",
7147 FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
7148 NULL, HFILL }
7150 { &hf_r3_configitemdata_string,
7151 { "Configuration Item String", "r3.configitem.data_string",
7152 FT_STRING, BASE_NONE, NULL, 0x0,
7153 NULL, HFILL }
7156 { &hf_r3_timezonearray [ 0],
7157 { "Timezone 0", "r3.timezone.0",
7158 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000001,
7159 NULL, HFILL }
7161 { &hf_r3_timezonearray [ 1],
7162 { "Timezone 1", "r3.timezone.1",
7163 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000002,
7164 NULL, HFILL }
7166 { &hf_r3_timezonearray [ 2],
7167 { "Timezone 2", "r3.timezone.2",
7168 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000004,
7169 NULL, HFILL }
7171 { &hf_r3_timezonearray [ 3],
7172 { "Timezone 3", "r3.timezone.3",
7173 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000008,
7174 NULL, HFILL }
7176 { &hf_r3_timezonearray [ 4],
7177 { "Timezone 4", "r3.timezone.4",
7178 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000010,
7179 NULL, HFILL }
7181 { &hf_r3_timezonearray [ 5],
7182 { "Timezone 5", "r3.timezone.5",
7183 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000020,
7184 NULL, HFILL }
7186 { &hf_r3_timezonearray [ 6],
7187 { "Timezone 6", "r3.timezone.6",
7188 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000040,
7189 NULL, HFILL }
7191 { &hf_r3_timezonearray [ 7],
7192 { "Timezone 7", "r3.timezone.7",
7193 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000080,
7194 NULL, HFILL }
7196 { &hf_r3_timezonearray [ 8],
7197 { "Timezone 8", "r3.timezone.8",
7198 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000100,
7199 NULL, HFILL }
7201 { &hf_r3_timezonearray [ 9],
7202 { "Timezone 9", "r3.timezone.9",
7203 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000200,
7204 NULL, HFILL }
7206 { &hf_r3_timezonearray [10],
7207 { "Timezone 10", "r3.timezone.10",
7208 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000400,
7209 NULL, HFILL }
7211 { &hf_r3_timezonearray [11],
7212 { "Timezone 11", "r3.timezone.11",
7213 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000800,
7214 NULL, HFILL }
7216 { &hf_r3_timezonearray [12],
7217 { "Timezone 12", "r3.timezone.12",
7218 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00001000,
7219 NULL, HFILL }
7221 { &hf_r3_timezonearray [13],
7222 { "Timezone 13", "r3.timezone.13",
7223 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00002000,
7224 NULL, HFILL }
7226 { &hf_r3_timezonearray [14],
7227 { "Timezone 14", "r3.timezone.14",
7228 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00004000,
7229 NULL, HFILL }
7231 { &hf_r3_timezonearray [15],
7232 { "Timezone 15", "r3.timezone.15",
7233 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00008000,
7234 NULL, HFILL }
7236 { &hf_r3_timezonearray [16],
7237 { "Timezone 16", "r3.timezone.16",
7238 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00010000,
7239 NULL, HFILL }
7241 { &hf_r3_timezonearray [17],
7242 { "Timezone 17", "r3.timezone.17",
7243 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00020000,
7244 NULL, HFILL }
7246 { &hf_r3_timezonearray [18],
7247 { "Timezone 18", "r3.timezone.18",
7248 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00040000,
7249 NULL, HFILL }
7251 { &hf_r3_timezonearray [19],
7252 { "Timezone 19", "r3.timezone.19",
7253 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00080000,
7254 NULL, HFILL }
7256 { &hf_r3_timezonearray [20],
7257 { "Timezone 20", "r3.timezone.20",
7258 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00100000,
7259 NULL, HFILL }
7261 { &hf_r3_timezonearray [21],
7262 { "Timezone 21", "r3.timezone.21",
7263 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00200000,
7264 NULL, HFILL }
7266 { &hf_r3_timezonearray [22],
7267 { "Timezone 22", "r3.timezone.22",
7268 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00400000,
7269 NULL, HFILL }
7271 { &hf_r3_timezonearray [23],
7272 { "Timezone 23", "r3.timezone.23",
7273 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00800000,
7274 NULL, HFILL }
7276 { &hf_r3_timezonearray [24],
7277 { "Timezone 24", "r3.timezone.24",
7278 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x01000000,
7279 NULL, HFILL }
7281 { &hf_r3_timezonearray [25],
7282 { "Timezone 25", "r3.timezone.25",
7283 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x02000000,
7284 NULL, HFILL }
7286 { &hf_r3_timezonearray [26],
7287 { "Timezone 26", "r3.timezone.26",
7288 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x04000000,
7289 NULL, HFILL }
7291 { &hf_r3_timezonearray [27],
7292 { "Timezone 27", "r3.timezone.27",
7293 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x08000000,
7294 NULL, HFILL }
7296 { &hf_r3_timezonearray [28],
7297 { "Timezone 28", "r3.timezone.28",
7298 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x10000000,
7299 NULL, HFILL }
7301 { &hf_r3_timezonearray [29],
7302 { "Timezone 29", "r3.timezone.29",
7303 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x20000000,
7304 NULL, HFILL }
7306 { &hf_r3_timezonearray [30],
7307 { "Timezone 30", "r3.timezone.30",
7308 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x40000000,
7309 NULL, HFILL }
7311 { &hf_r3_timezonearray [31],
7312 { "Timezone 31", "r3.timezone.31",
7313 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x80000000,
7314 NULL, HFILL }
7317 { &hf_r3_expireon_year,
7318 { "Expiration Year", "r3.expireon.year",
7319 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7320 NULL, HFILL }
7322 { &hf_r3_expireon_month,
7323 { "Expiration Month", "r3.expireon.month",
7324 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7325 NULL, HFILL }
7327 { &hf_r3_expireon_day,
7328 { "Expiration Day", "r3.expireon.day",
7329 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7330 NULL, HFILL }
7333 { &hf_r3_datetime_year,
7334 { "Date/Time Year", "r3.datetime.year",
7335 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7336 NULL, HFILL }
7338 { &hf_r3_datetime_month,
7339 { "Date/Time Month", "r3.datetime.month",
7340 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7341 NULL, HFILL }
7343 { &hf_r3_datetime_day,
7344 { "Date/Time Day", "r3.datetime.day",
7345 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7346 NULL, HFILL }
7348 { &hf_r3_datetime_dow,
7349 { "Date/Time DOW", "r3.datetime.dow",
7350 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7351 NULL, HFILL }
7353 { &hf_r3_datetime_hours,
7354 { "Date/Time Hours", "r3.datetime.hours",
7355 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7356 NULL, HFILL }
7358 { &hf_r3_datetime_minutes,
7359 { "Date/Time Minutes", "r3.datetime.minutes",
7360 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7361 NULL, HFILL }
7363 { &hf_r3_datetime_seconds,
7364 { "Date/Time Seconds", "r3.datetime.seconds",
7365 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7366 NULL, HFILL }
7368 { &hf_r3_datetime_dst,
7369 { "Date/Time DST", "r3.datetime.dst",
7370 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7371 NULL, HFILL }
7374 { &hf_r3_eventlog_recordnumber,
7375 { "Record Number", "r3.eventlog.recordnumber",
7376 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7377 NULL, HFILL }
7379 { &hf_r3_eventlog_year,
7380 { "Year", "r3.eventlog.year",
7381 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7382 NULL, HFILL }
7384 { &hf_r3_eventlog_month,
7385 { "Month", "r3.eventlog.month",
7386 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7387 NULL, HFILL }
7389 { &hf_r3_eventlog_day,
7390 { "Day", "r3.eventlog.day",
7391 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7392 NULL, HFILL }
7394 { &hf_r3_eventlog_hour,
7395 { "Hours", "r3.eventlog.hours",
7396 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7397 NULL, HFILL }
7399 { &hf_r3_eventlog_minute,
7400 { "Minutes", "r3.eventlog.minutes",
7401 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7402 NULL, HFILL }
7404 { &hf_r3_eventlog_second,
7405 { "Seconds", "r3.eventlog.seconds",
7406 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7407 NULL, HFILL }
7409 { &hf_r3_eventlog_usernumber,
7410 { "User Number", "r3.eventlog.usernumber",
7411 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7412 NULL, HFILL }
7414 { &hf_r3_eventlog_event,
7415 { "ID", "r3.eventlog.id",
7416 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7417 NULL, HFILL }
7420 { &hf_r3_declinedlog_recordnumber,
7421 { "Record Number", "r3.declinedlog.recordnumber",
7422 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7423 NULL, HFILL }
7425 { &hf_r3_declinedlog_year,
7426 { "Year", "r3.declinedlog.year",
7427 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7428 NULL, HFILL }
7430 { &hf_r3_declinedlog_month,
7431 { "Month", "r3.declinedlog.month",
7432 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7433 NULL, HFILL }
7435 { &hf_r3_declinedlog_day,
7436 { "Day", "r3.declinedlog.day",
7437 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7438 NULL, HFILL }
7440 { &hf_r3_declinedlog_hour,
7441 { "Hours", "r3.declinedlog.hours",
7442 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7443 NULL, HFILL }
7445 { &hf_r3_declinedlog_minute,
7446 { "Minutes", "r3.declinedlog.minutes",
7447 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7448 NULL, HFILL }
7450 { &hf_r3_declinedlog_second,
7451 { "Seconds", "r3.declinedlog.seconds",
7452 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7453 NULL, HFILL }
7455 { &hf_r3_declinedlog_usernumber,
7456 { "User Number", "r3.declinedlog.usernumber",
7457 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7458 NULL, HFILL }
7460 { &hf_r3_declinedlog_cred1type,
7461 { "Credential 1 Type", "r3.declinedlog.cred1type",
7462 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7463 NULL, HFILL }
7465 { &hf_r3_declinedlog_cred2type,
7466 { "Credential 2 Type", "r3.declinedlog.cred2type",
7467 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7468 NULL, HFILL }
7470 { &hf_r3_declinedlog_cred1,
7471 { "Credential 1", "r3.declinedlog.cred1",
7472 FT_BYTES, BASE_NONE, NULL, 0x0,
7473 NULL, HFILL }
7475 { &hf_r3_declinedlog_cred2,
7476 { "Credential 2", "r3.declinedlog.cred2",
7477 FT_BYTES, BASE_NONE, NULL, 0x0,
7478 NULL, HFILL }
7481 { &hf_r3_alarmlog_recordnumber,
7482 { "Record Number", "r3.alarmlog.recordnumber",
7483 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7484 NULL, HFILL }
7486 { &hf_r3_alarmlog_year,
7487 { "Year", "r3.alarmlog.year",
7488 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7489 NULL, HFILL }
7491 { &hf_r3_alarmlog_month,
7492 { "Month", "r3.alarmlog.month",
7493 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7494 NULL, HFILL }
7496 { &hf_r3_alarmlog_day,
7497 { "Day", "r3.alarmlog.day",
7498 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7499 NULL, HFILL }
7501 { &hf_r3_alarmlog_hour,
7502 { "Hours", "r3.alarmlog.hours",
7503 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7504 NULL, HFILL }
7506 { &hf_r3_alarmlog_minute,
7507 { "Minutes", "r3.alarmlog.minutes",
7508 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7509 NULL, HFILL }
7511 { &hf_r3_alarmlog_second,
7512 { "Seconds", "r3.alarmlog.seconds",
7513 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7514 NULL, HFILL }
7516 { &hf_r3_alarmlog_id,
7517 { "ID", "r3.alarmlog.id",
7518 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
7519 NULL, HFILL }
7521 { &hf_r3_alarmlog_usernumber,
7522 { "User Number", "r3.alarmlog.usernumber",
7523 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7524 NULL, HFILL }
7527 { &hf_r3_debugmsg,
7528 { "Debug Message", "r3.debug",
7529 FT_STRING, BASE_NONE, NULL, 0x0,
7530 NULL, HFILL }
7533 { &hf_r3_setdate_year,
7534 { "Year", "r3.setdate.year",
7535 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7536 NULL, HFILL }
7538 { &hf_r3_setdate_month,
7539 { "Month", "r3.setdate.month",
7540 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7541 NULL, HFILL }
7543 { &hf_r3_setdate_day,
7544 { "Day", "r3.setdate.day",
7545 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7546 NULL, HFILL }
7548 { &hf_r3_setdate_dow,
7549 { "Day-Of-Week", "r3.setdate.dow",
7550 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7551 NULL, HFILL }
7553 { &hf_r3_setdate_hours,
7554 { "Hours", "r3.setdate.hours",
7555 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7556 NULL, HFILL }
7558 { &hf_r3_setdate_minutes,
7559 { "Minutes", "r3.setdate.minutes",
7560 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7561 NULL, HFILL }
7563 { &hf_r3_setdate_seconds,
7564 { "Seconds", "r3.setdate.seconds",
7565 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7566 NULL, HFILL }
7569 { &hf_r3_deleteusers,
7570 { "Delete Users", "r3.deleteusers",
7571 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_deleteusersnames_ext, 0x0,
7572 NULL, HFILL }
7575 { &hf_r3_defineexception_number,
7576 { "Exception Number", "r3.defineexception.number",
7577 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7578 NULL, HFILL }
7580 { &hf_r3_defineexception_startdate_month,
7581 { "Start Month", "r3.defineexception.start.month",
7582 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7583 NULL, HFILL }
7585 { &hf_r3_defineexception_startdate_day,
7586 { "Start Day", "r3.defineexception.start.day",
7587 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7588 NULL, HFILL }
7590 { &hf_r3_defineexception_startdate_hours,
7591 { "Start Hours", "r3.defineexception.start.hours",
7592 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7593 NULL, HFILL }
7595 { &hf_r3_defineexception_startdate_minutes,
7596 { "Start Minutes", "r3.defineexception.start.minutes",
7597 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7598 NULL, HFILL }
7600 { &hf_r3_defineexception_enddate_month,
7601 { "End Month", "r3.defineexception.end.month",
7602 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7603 NULL, HFILL }
7605 { &hf_r3_defineexception_enddate_day,
7606 { "End Day", "r3.defineexception.end.day",
7607 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7608 NULL, HFILL }
7610 { &hf_r3_defineexception_enddate_hours,
7611 { "End Hours", "r3.defineexception.end.hours",
7612 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7613 NULL, HFILL }
7615 { &hf_r3_defineexception_enddate_minutes,
7616 { "End Minutes", "r3.defineexception.end.minutes",
7617 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7618 NULL, HFILL }
7621 { &hf_r3_defineexceptiongroup_number,
7622 { "Define Exception Group Number", "r3.defineexceptiongroup.number",
7623 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7624 NULL, HFILL }
7626 { &hf_r3_defineexceptiongroup_bits,
7627 { "Define Exception Group Bit Field", "r3.defineexceptiongroup.field",
7628 FT_NONE, BASE_NONE, NULL, 0x0,
7629 NULL, HFILL }
7632 { &hf_r3_definecalendar_number,
7633 { "Define Calendar Number", "r3.definecalendar.number",
7634 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7635 NULL, HFILL }
7637 { &hf_r3_definecalendar_bits,
7638 { "Define Calendar Bit Field", "r3.definecalendar.field",
7639 FT_NONE, BASE_NONE, NULL, 0x0,
7640 NULL, HFILL }
7643 { &hf_r3_definetimezone_number,
7644 { "Timezone Number", "r3.definetimezone.number",
7645 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7646 NULL, HFILL }
7648 { &hf_r3_definetimezone_starttime_hours,
7649 { "Start Hours", "r3.definetimezone.start.hours",
7650 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7651 NULL, HFILL }
7653 { &hf_r3_definetimezone_starttime_minutes,
7654 { "Start Minutes", "r3.definetimezone.start.minutes",
7655 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7656 NULL, HFILL }
7658 { &hf_r3_definetimezone_endtime_hours,
7659 { "End Hours", "r3.definetimezone.end.hours",
7660 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7661 NULL, HFILL }
7663 { &hf_r3_definetimezone_endtime_minutes,
7664 { "End Minutes", "r3.definetimezone.end.minutes",
7665 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7666 NULL, HFILL }
7668 { &hf_r3_definetimezone_daymap [0],
7669 { "Sunday", "r3.definetimezone.daymap.sunday",
7670 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000001,
7671 NULL, HFILL }
7673 { &hf_r3_definetimezone_daymap [1],
7674 { "Monday", "r3.definetimezone.daymap.monday",
7675 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000002,
7676 NULL, HFILL }
7678 { &hf_r3_definetimezone_daymap [2],
7679 { "Tuesday", "r3.definetimezone.daymap.tuesday",
7680 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000004,
7681 NULL, HFILL }
7683 { &hf_r3_definetimezone_daymap [3],
7684 { "Wednesday", "r3.definetimezone.daymap.wednesday",
7685 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000008,
7686 NULL, HFILL }
7688 { &hf_r3_definetimezone_daymap [4],
7689 { "Thursday", "r3.definetimezone.daymap.thursday",
7690 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000010,
7691 NULL, HFILL }
7693 { &hf_r3_definetimezone_daymap [5],
7694 { "Friday", "r3.definetimezone.daymap.friday",
7695 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000020,
7696 NULL, HFILL }
7698 { &hf_r3_definetimezone_daymap [6],
7699 { "Saturday", "r3.definetimezone.daymap.saturday",
7700 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000040,
7701 NULL, HFILL }
7703 { &hf_r3_definetimezone_exceptiongroup,
7704 { "Exception Group", "r3.definetimezone.exceptiongroup",
7705 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7706 NULL, HFILL }
7708 { &hf_r3_definetimezone_mode,
7709 { "Mode", "r3.definetimezone.mode",
7710 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_timezonemodenames_ext, 0x0,
7711 NULL, HFILL }
7713 { &hf_r3_definetimezone_calendar,
7714 { "Calendar", "r3.definetimezone.calendar",
7715 FT_NONE, BASE_NONE, NULL, 0x0,
7716 NULL, HFILL }
7719 { &hf_r3_rmtauthretry_sequence,
7720 { "Remote Auth Retry Sequence", "r3.rmtauthretry.sequence",
7721 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7722 NULL, HFILL }
7724 { &hf_r3_rmtauthretry_retry,
7725 { "Remote Auth Retry Mode", "r3.rmtauthretry.mode",
7726 FT_BOOLEAN, BASE_NONE, TFS (&tfs_rmtauthretry_flags), 0x0,
7727 NULL, HFILL }
7730 { &hf_r3_eventlogdump_starttime_year,
7731 { "Start Year", "r3.eventlogdump.start.year",
7732 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7733 NULL, HFILL }
7735 { &hf_r3_eventlogdump_starttime_month,
7736 { "Start Month", "r3.eventlogdump.start.month",
7737 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7738 NULL, HFILL }
7740 { &hf_r3_eventlogdump_starttime_day,
7741 { "Start Day", "r3.eventlogdump.start.day",
7742 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7743 NULL, HFILL }
7745 { &hf_r3_eventlogdump_starttime_hours,
7746 { "Start Hours", "r3.eventlogdump.start.hours",
7747 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7748 NULL, HFILL }
7750 { &hf_r3_eventlogdump_starttime_minutes,
7751 { "Start Minutes", "r3.eventlogdump.start.minutes",
7752 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7753 NULL, HFILL }
7755 { &hf_r3_eventlogdump_endtime_year,
7756 { "End Year", "r3.eventlogdump.end.year",
7757 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7758 NULL, HFILL }
7760 { &hf_r3_eventlogdump_endtime_month,
7761 { "End Month", "r3.eventlogdump.end.month",
7762 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7763 NULL, HFILL }
7765 { &hf_r3_eventlogdump_endtime_day,
7766 { "End Day", "r3.eventlogdump.end.day",
7767 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7768 NULL, HFILL }
7770 { &hf_r3_eventlogdump_endtime_hours,
7771 { "End Hours", "r3.eventlogdump.end.hours",
7772 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7773 NULL, HFILL }
7775 { &hf_r3_eventlogdump_endtime_minutes,
7776 { "End Minutes", "r3.eventlogdump.end.minutes",
7777 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7778 NULL, HFILL }
7780 { &hf_r3_eventlogdump_user,
7781 { "Filter User", "r3.eventlogdump.user",
7782 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7783 NULL, HFILL }
7786 { &hf_r3_declinedlogdump_starttime_year,
7787 { "Start Year", "r3.declinedlogdump.start.year",
7788 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7789 NULL, HFILL }
7791 { &hf_r3_declinedlogdump_starttime_month,
7792 { "Start Month", "r3.declinedlogdump.start.month",
7793 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7794 NULL, HFILL }
7796 { &hf_r3_declinedlogdump_starttime_day,
7797 { "Start Day", "r3.declinedlogdump.start.day",
7798 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7799 NULL, HFILL }
7801 { &hf_r3_declinedlogdump_starttime_hours,
7802 { "Start Hours", "r3.declinedlogdump.start.hours",
7803 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7804 NULL, HFILL }
7806 { &hf_r3_declinedlogdump_starttime_minutes,
7807 { "Start Minutes", "r3.declinedlogdump.start.minutes",
7808 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7809 NULL, HFILL }
7811 { &hf_r3_declinedlogdump_endtime_year,
7812 { "End Year", "r3.declinedlogdump.end.year",
7813 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7814 NULL, HFILL }
7816 { &hf_r3_declinedlogdump_endtime_month,
7817 { "End Month", "r3.declinedlogdump.end.month",
7818 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7819 NULL, HFILL }
7821 { &hf_r3_declinedlogdump_endtime_day,
7822 { "End Day", "r3.declinedlogdump.end.day",
7823 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7824 NULL, HFILL }
7826 { &hf_r3_declinedlogdump_endtime_hours,
7827 { "End Hours", "r3.declinedlogdump.end.hours",
7828 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7829 NULL, HFILL }
7831 { &hf_r3_declinedlogdump_endtime_minutes,
7832 { "End Minutes", "r3.declinedlogdump.end.minutes",
7833 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7834 NULL, HFILL }
7837 { &hf_r3_alarmlogdump_starttime_year,
7838 { "Start Year", "r3.alarmlogdump.start.year",
7839 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7840 NULL, HFILL }
7842 { &hf_r3_alarmlogdump_starttime_month,
7843 { "Start Month", "r3.alarmlogdump.start.month",
7844 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7845 NULL, HFILL }
7847 { &hf_r3_alarmlogdump_starttime_day,
7848 { "Start Day", "r3.alarmlogdump.start.day",
7849 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7850 NULL, HFILL }
7852 { &hf_r3_alarmlogdump_starttime_hours,
7853 { "Start Hours", "r3.alarmlogdump.start.hours",
7854 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7855 NULL, HFILL }
7857 { &hf_r3_alarmlogdump_starttime_minutes,
7858 { "Start Minutes", "r3.alarmlogdump.start.minutes",
7859 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7860 NULL, HFILL }
7862 { &hf_r3_alarmlogdump_endtime_year,
7863 { "End Year", "r3.alarmlogdump.end.year",
7864 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7865 NULL, HFILL }
7867 { &hf_r3_alarmlogdump_endtime_month,
7868 { "End Month", "r3.alarmlogdump.end.month",
7869 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7870 NULL, HFILL }
7872 { &hf_r3_alarmlogdump_endtime_day,
7873 { "End Day", "r3.alarmlogdump.end.day",
7874 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7875 NULL, HFILL }
7877 { &hf_r3_alarmlogdump_endtime_hours,
7878 { "End Hours", "r3.alarmlogdump.end.hours",
7879 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7880 NULL, HFILL }
7882 { &hf_r3_alarmlogdump_endtime_minutes,
7883 { "End Minutes", "r3.alarmlogdump.end.minutes",
7884 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7885 NULL, HFILL }
7888 { &hf_r3_nvramclearoptions [ 0],
7889 { "NVRAMCLEAROPTIONS_CFGINSTALLER", "r3.nvramclear.cfginstaller",
7890 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000001,
7891 NULL, HFILL }
7893 { &hf_r3_nvramclearoptions [ 1],
7894 { "NVRAMCLEAROPTIONS_CFGADMIN", "r3.nvramclear.cfgadmin",
7895 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000002,
7896 NULL, HFILL }
7898 { &hf_r3_nvramclearoptions [ 2],
7899 { "NVRAMCLEAROPTIONS_EXCEPTIONS", "r3.nvramclear.exceptions",
7900 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000004,
7901 NULL, HFILL }
7903 { &hf_r3_nvramclearoptions [ 3],
7904 { "NVRAMCLEAROPTIONS_EXCEPTIONGROUPS", "r3.nvramclear.exceptiongroups",
7905 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000008,
7906 NULL, HFILL }
7908 { &hf_r3_nvramclearoptions [ 4],
7909 { "NVRAMCLEAROPTIONS_CALENDARS", "r3.nvramclear.calendars",
7910 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000010,
7911 NULL, HFILL }
7913 { &hf_r3_nvramclearoptions [ 5],
7914 { "NVRAMCLEAROPTIONS_TIMEZONES", "r3.nvramclear.timezones",
7915 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000020,
7916 NULL, HFILL }
7918 { &hf_r3_nvramclearoptions [ 6],
7919 { "NVRAMCLEAROPTIONS_FILTERS", "r3.nvramclear.filters",
7920 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000040,
7921 NULL, HFILL }
7923 { &hf_r3_nvramclearoptions [ 7],
7924 { "NVRAMCLEAROPTIONS_EVENTLOG", "r3.nvramclear.eventlog",
7925 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000080,
7926 NULL, HFILL }
7928 { &hf_r3_nvramclearoptions [ 8],
7929 { "NVRAMCLEAROPTIONS_USERDATA", "r3.nvramclear.userdata",
7930 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000100,
7931 NULL, HFILL }
7933 { &hf_r3_nvramclearoptions [ 9],
7934 { "NVRAMCLEAROPTIONS_DECLINEDLOG", "r3.nvramclear.declinedlog",
7935 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000200,
7936 NULL, HFILL }
7938 { &hf_r3_nvramclearoptions [10],
7939 { "NVRAMCLEAROPTIONS_ALARMLOG", "r3.nvramclear.alarmlog",
7940 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000400,
7941 NULL, HFILL }
7943 { &hf_r3_nvramclearoptions [11],
7944 { "NVRAMCLEAROPTIONS_LRUCACHE", "r3.nvramclear.lrucache",
7945 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000800,
7946 NULL, HFILL }
7948 { &hf_r3_nvramclearoptions [12],
7949 { "NVRAMCLEAROPTIONS_DBHASH", "r3.nvramclear.dbhash",
7950 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00001000,
7951 NULL, HFILL }
7953 { &hf_r3_nvramclearoptions [13],
7954 { "NVRAMCLEAROPTIONS_CFGSYSTEM", "r3.nvramclear.cfgsystem",
7955 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00002000,
7956 NULL, HFILL }
7958 { &hf_r3_nvramclearoptions [14],
7959 { "NVRAMCLEAROPTIONS_UNUSED", "r3.nvramclear.unused",
7960 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00004000,
7961 NULL, HFILL }
7963 { &hf_r3_nvramclearoptions [15],
7964 { "NVRAMCLEAROPTIONS_USEBACKUP", "r3.nvramclear.usebackup",
7965 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00008000,
7966 NULL, HFILL }
7969 { &hf_r3_writeeventlog_user,
7970 { "User", "r3.writeeventlog.user",
7971 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7972 NULL, HFILL }
7974 { &hf_r3_writeeventlog_event,
7975 { "Event", "r3.writeeventlog.event",
7976 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7977 NULL, HFILL }
7980 { &hf_r3_powertableselection,
7981 { "Table", "r3.powertableselection",
7982 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_powertablenames_ext, 0x0,
7983 NULL, HFILL }
7986 { &hf_r3_filter_type,
7987 { "Type", "r3.filter.type",
7988 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtertypenames_ext, 0x0,
7989 NULL, HFILL }
7991 { &hf_r3_filter_list,
7992 { "Event", "r3.filter.event",
7993 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtereventnames_ext, 0x0,
7994 NULL, HFILL }
7997 { &hf_r3_alarm_length,
7998 { "Length", "r3.alarm.length",
7999 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8000 NULL, HFILL }
8002 { &hf_r3_alarm_id,
8003 { "ID", "r3.alarm.id",
8004 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
8005 NULL, HFILL }
8007 { &hf_r3_alarm_state,
8008 { "State", "r3.alarm.state",
8009 FT_BOOLEAN, BASE_NONE, TFS (&tfs_enabled_disabled), 0x0,
8010 NULL, HFILL }
8013 /* XXX: start: Originally missing: Best guess */
8014 { &hf_r3_dpac_action,
8015 { "Dpac Action", "r3.dpac.action",
8016 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8017 NULL, HFILL }
8020 { &hf_r3_dpac_waittime,
8021 { "Dpac Waittime", "r3.dpac.waittime",
8022 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8023 NULL, HFILL }
8026 { &hf_r3_dpac_command,
8027 { "Dpac Command", "r3.dpac.command",
8028 FT_BYTES, BASE_NONE, NULL, 0x0,
8029 NULL, HFILL }
8032 { &hf_r3_dpacreply_stuff,
8033 { "Dpac Reply Stuff", "r3.dpacreply.stuff",
8034 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8035 NULL, HFILL }
8038 { &hf_r3_dpacreply_length,
8039 { "Dpac Reply Length", "r3.dpacreply.length",
8040 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8041 NULL, HFILL }
8044 { &hf_r3_dpacreply_reply,
8045 { "Dpac Reply", "r3.dpacreply.reply",
8046 FT_BYTES, BASE_NONE, NULL, 0x0,
8047 NULL, HFILL }
8049 /* XXX: end: Originally missing --- */
8051 { &hf_r3_mfgfield_length,
8052 { "Field Length", "r3.mfgfield.length",
8053 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8054 NULL, HFILL }
8056 { &hf_r3_mfgfield,
8057 { "Field", "r3.mfgfield.field",
8058 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgfieldnames_ext, 0x0,
8059 NULL, HFILL }
8061 #if 0
8062 { &hf_r3_mfgfield_data,
8063 { "Field Data", "r3.mfgfield.data",
8064 FT_NONE, BASE_NONE, NULL, 0x0,
8065 NULL, HFILL }
8067 #endif
8069 { &hf_r3_mfgsetserialnumber,
8070 { "Serial Number", "r3.mfgsetserialnumber",
8071 FT_STRING, BASE_NONE, NULL, 0x0,
8072 NULL, HFILL }
8074 { &hf_r3_mfgsetcryptkey,
8075 { "Crypt Key", "r3.mfgsetcryptkey",
8076 FT_BYTES, BASE_NONE, NULL, 0x0,
8077 NULL, HFILL }
8079 { &hf_r3_mfgdumpnvram,
8080 { "NVRAM Section", "r3.mfgnvramdump",
8081 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgnvramdumpnames_ext, 0x0,
8082 NULL, HFILL }
8084 { &hf_r3_mfgremoteunlock,
8085 { "Remote Unlock", "r3.mfgremoteunlock",
8086 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgremoteunlocknames_ext, 0x0,
8087 NULL, HFILL }
8089 { &hf_r3_mfgtestpreserve,
8090 { "Preserve Mode", "r3.mfgtestpreserve",
8091 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgtestpreservenames_ext, 0x0,
8092 NULL, HFILL }
8095 { &hf_r3_adc [0],
8096 { "ADC 0", "r3.adc.0",
8097 FT_UINT8, BASE_HEX, NULL, 0x0,
8098 NULL, HFILL }
8100 { &hf_r3_adc [1],
8101 { "ADC 1", "r3.adc.1",
8102 FT_UINT8, BASE_HEX, NULL, 0x0,
8103 NULL, HFILL }
8105 { &hf_r3_adc [2],
8106 { "ADC 2", "r3.adc.2",
8107 FT_UINT8, BASE_HEX, NULL, 0x0,
8108 NULL, HFILL }
8110 { &hf_r3_adc [3],
8111 { "ADC 3", "r3.adc.3",
8112 FT_UINT8, BASE_HEX, NULL, 0x0,
8113 NULL, HFILL }
8115 { &hf_r3_adc [4],
8116 { "ADC 4", "r3.adc.4",
8117 FT_UINT8, BASE_HEX, NULL, 0x0,
8118 NULL, HFILL }
8120 { &hf_r3_adc [5],
8121 { "ADC 5", "r3.adc.5",
8122 FT_UINT8, BASE_HEX, NULL, 0x0,
8123 NULL, HFILL }
8125 { &hf_r3_adc [6],
8126 { "ADC 6", "r3.adc.6",
8127 FT_UINT8, BASE_HEX, NULL, 0x0,
8128 NULL, HFILL }
8130 { &hf_r3_adc [7],
8131 { "ADC 7", "r3.adc.7",
8132 FT_UINT8, BASE_HEX, NULL, 0x0,
8133 NULL, HFILL }
8136 { &hf_r3_hardwareid_board,
8137 { "Board ID", "r3.hardwareid.board",
8138 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8139 NULL, HFILL }
8141 { &hf_r3_hardwareid_cpuid,
8142 { "CPU ID", "r3.hardwareid.cpuid",
8143 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8144 NULL, HFILL }
8146 { &hf_r3_hardwareid_cpurev,
8147 { "CPU Rev", "r3.hardwareid.cpurev",
8148 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8149 NULL, HFILL }
8152 { &hf_r3_testkeypad,
8153 { "Keypad Char", "r3.test.keypad",
8154 FT_UINT8, BASE_HEX, NULL, 0x0,
8155 NULL, HFILL }
8157 { &hf_r3_testmagcard,
8158 { "Mag Card", "r3.test.magcard",
8159 FT_STRING, BASE_NONE, NULL, 0x0,
8160 NULL, HFILL }
8162 { &hf_r3_testproxcard,
8163 { "Prox Card", "r3.test.proxcard",
8164 FT_STRING, BASE_NONE, NULL, 0x0,
8165 NULL, HFILL }
8168 { &hf_r3_nvramdump_record,
8169 { "Record Number", "r3.nvramdump.record",
8170 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8171 NULL, HFILL }
8173 { &hf_r3_nvramdump_length,
8174 { "Record Length", "r3.nvramdump.length",
8175 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8176 NULL, HFILL }
8178 { &hf_r3_nvramdump_data,
8179 { "Record Data", "r3.nvramdump.data",
8180 FT_NONE, BASE_NONE, NULL, 0x0,
8181 NULL, HFILL }
8184 { &hf_r3_nvramdumprle_record,
8185 { "Record Number", "r3.nvramdumprle.record",
8186 FT_UINT24, BASE_DEC_HEX, NULL, 0x0,
8187 NULL, HFILL }
8189 { &hf_r3_nvramdumprle_length,
8190 { "Record Length", "r3.nvramdumprle.length",
8191 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8192 NULL, HFILL }
8194 { &hf_r3_nvramdumprle_data,
8195 { "Record Data", "r3.nvramdumprle.data",
8196 FT_NONE, BASE_NONE, NULL, 0x0,
8197 NULL, HFILL }
8200 { &hf_r3_iopins_lat,
8201 { "LAT", "r3.iopins.lat",
8202 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8203 NULL, HFILL }
8205 { &hf_r3_iopins_port,
8206 { "PORT", "r3.iopins.port",
8207 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8208 NULL, HFILL }
8210 { &hf_r3_iopins_tris,
8211 { "TRIS", "r3.iopins.tris",
8212 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8213 NULL, HFILL }
8216 { &hf_r3_mortisepins_s1,
8217 { "Mortise Pin S1", "r3.mortisepins.s1",
8218 FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000001,
8219 NULL, HFILL }
8221 { &hf_r3_mortisepins_s2,
8222 { "Mortise Pin S2", "r3.mortisepins.s2",
8223 FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000002,
8224 NULL, HFILL }
8226 { &hf_r3_mortisepins_s3,
8227 { "Mortise Pin S3", "r3.mortisepins.s3",
8228 FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000004,
8229 NULL, HFILL }
8231 { &hf_r3_mortisepins_s4,
8232 { "Mortise Pin S4", "r3.mortisepins.s4",
8233 FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000008,
8234 NULL, HFILL }
8237 { &hf_r3_checksumresults ,
8238 { "Checksum Results", "r3.checksumresults",
8239 FT_NONE, BASE_NONE, NULL, 0x0,
8240 NULL, HFILL }
8242 { &hf_r3_checksumresults_field,
8243 { "Field", "r3.checksumresults.field",
8244 FT_UINT8, BASE_HEX|BASE_EXT_STRING, & r3_checksumresultnames_ext, 0x0,
8245 NULL, HFILL }
8247 { &hf_r3_checksumresults_length,
8248 { "Length", "r3.checksumresults.length",
8249 FT_UINT8, BASE_HEX, NULL, 0x0,
8250 NULL, HFILL }
8252 { &hf_r3_checksumresults_state,
8253 { "State", "r3.checksumresults.state",
8254 FT_BOOLEAN, BASE_NONE, TFS (&tfs_errornoerror_flags), 0x0,
8255 NULL, HFILL }
8258 { &hf_r3_forceoptions_item,
8259 { "Item", "r3.forceoptions.item",
8260 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_forceitemnames_ext, 0x0,
8261 NULL, HFILL }
8263 { &hf_r3_forceoptions_length,
8264 { "Length", "r3.forceoptions.length",
8265 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8266 NULL, HFILL }
8268 { &hf_r3_forceoptions_state_8,
8269 { "State", "r3.forceoptions.state",
8270 FT_BOOLEAN, BASE_NONE, TFS (&tfs_enabled_disabled), 0x0,
8271 NULL, HFILL }
8273 { &hf_r3_forceoptions_state_16,
8274 { "State", "r3.forceoptions.state",
8275 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8276 NULL, HFILL }
8278 { &hf_r3_forceoptions_state_24,
8279 { "State", "r3.forceoptions.state",
8280 FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8281 NULL, HFILL }
8283 { &hf_r3_forceoptions_state_32,
8284 { "State", "r3.forceoptions.state",
8285 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8286 NULL, HFILL }
8289 { &hf_r3_peekpoke_operation,
8290 { "Operation", "r3.peekpoke.operation",
8291 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_peekpokenames_ext, 0x0,
8292 NULL, HFILL }
8294 { &hf_r3_peekpoke_address,
8295 { "Address", "r3.peekpoke.address",
8296 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8297 NULL, HFILL }
8299 { &hf_r3_peekpoke_length,
8300 { "Length", "r3.peekpoke.length",
8301 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8302 NULL, HFILL }
8304 { &hf_r3_peekpoke_poke8,
8305 { "8 Bit Value", "r3.peekpoke.poke8",
8306 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8307 NULL, HFILL }
8309 { &hf_r3_peekpoke_poke16,
8310 { "16 Bit Value", "r3.peekpoke.poke16",
8311 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8312 NULL, HFILL }
8314 { &hf_r3_peekpoke_poke24,
8315 { "24 Bit Value", "r3.peekpoke.poke24",
8316 FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8317 NULL, HFILL }
8319 { &hf_r3_peekpoke_poke32,
8320 { "32 Bit Value", "r3.peekpoke.poke32",
8321 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8322 NULL, HFILL }
8324 { &hf_r3_peekpoke_pokestring,
8325 { "String Value", "r3.peekpoke.pokestring",
8326 FT_BYTES, BASE_NONE, NULL, 0x0,
8327 NULL, HFILL }
8330 { &hf_r3_firmwaredownload_length,
8331 { "Length", "r3.firmwaredownload.length",
8332 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8333 NULL, HFILL }
8335 { &hf_r3_firmwaredownload_record,
8336 { "Record Number", "r3.firmwaredownload.record",
8337 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8338 NULL, HFILL }
8340 { &hf_r3_firmwaredownload_action,
8341 { "Action", "r3.firmwaredownload.action",
8342 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_downloadfirmwarenames_ext, 0x0,
8343 NULL, HFILL }
8345 { &hf_r3_firmwaredownload_timeout,
8346 { "Timeout", "r3.firmwaredownload.timeout",
8347 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8348 NULL, HFILL }
8350 { &hf_r3_firmwaredownload_nvram,
8351 { "NVRAM", "r3.firmwaredownload.nvram",
8352 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8353 NULL, HFILL }
8355 { &hf_r3_firmwaredownload_address,
8356 { "Address", "r3.firmwaredownload.address",
8357 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8358 NULL, HFILL }
8360 { &hf_r3_firmwaredownload_bytes,
8361 { "Bytes", "r3.firmwaredownload.bytes",
8362 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8363 NULL, HFILL }
8365 { &hf_r3_firmwaredownload_data,
8366 { "Data", "r3.firmwaredownload.data",
8367 FT_NONE, BASE_NONE, NULL, 0x0,
8368 NULL, HFILL }
8370 { &hf_r3_firmwaredownload_crc,
8371 { "CRC", "r3.firmwaredownload.crc",
8372 FT_UINT16, BASE_HEX, NULL, 0x0,
8373 NULL, HFILL }
8375 { &hf_r3_firmwaredownload_crc_bad,
8376 { "Bad CRC", "r3.firmwaredownload.crc_bad",
8377 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8378 NULL, HFILL }
8381 { &hf_r3_nvramchecksumvalue,
8382 { "Value", "r3.nvramchecksum.value",
8383 FT_UINT32, BASE_HEX, NULL, 0x0,
8384 NULL, HFILL }
8386 { &hf_r3_nvramchecksumvalue_fixup,
8387 { "Fixup", "r3.nvramchecksum.fixup",
8388 FT_UINT32, BASE_HEX, NULL, 0x0,
8389 NULL, HFILL }
8392 { &hf_r3_capabilities,
8393 { "Capability", "r3.capabilities",
8394 FT_NONE, BASE_NONE, NULL, 0x0,
8395 NULL, HFILL }
8397 { &hf_r3_capabilities_length,
8398 { "Length", "r3.capabilities.length",
8399 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8400 NULL, HFILL }
8402 { &hf_r3_capabilities_type,
8403 { "Type", "r3.capabilities.type",
8404 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_capabilitiesnames_ext, 0x0,
8405 NULL, HFILL }
8407 { &hf_r3_capabilities_value,
8408 { "Value", "r3.capabilities.value",
8409 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8410 NULL, HFILL }
8413 { &hf_r3_lockstate_passage,
8414 { "Passage", "r3.lockstate.passage",
8415 FT_BOOLEAN, 24, NULL, 0x00000001,
8416 NULL, HFILL }
8418 { &hf_r3_lockstate_panic,
8419 { "Panic", "r3.lockstate.panic",
8420 FT_BOOLEAN, 24, NULL, 0x00000002,
8421 NULL, HFILL }
8423 { &hf_r3_lockstate_lockout,
8424 { "Lockout", "r3.lockstate.lockout",
8425 FT_BOOLEAN, 24, NULL, 0x00000004,
8426 NULL, HFILL }
8428 { &hf_r3_lockstate_relock,
8429 { "Relock", "r3.lockstate.relock",
8430 FT_BOOLEAN, 24, NULL, 0x00000008,
8431 NULL, HFILL }
8433 { &hf_r3_lockstate_autoopen,
8434 { "Auto Open", "r3.lockstate.autoopen",
8435 FT_BOOLEAN, 24, NULL, 0x00000010,
8436 NULL, HFILL }
8438 { &hf_r3_lockstate_nextauto,
8439 { "Next Auto", "r3.lockstate.nextauto",
8440 FT_BOOLEAN, 24, NULL, 0x00000020,
8441 NULL, HFILL }
8443 { &hf_r3_lockstate_lockstate,
8444 { "Lock State", "r3.lockstate.lockstate",
8445 FT_BOOLEAN, 24, NULL, 0x00000040,
8446 NULL, HFILL }
8448 { &hf_r3_lockstate_wantstate,
8449 { "Want State", "r3.lockstate.wantstate",
8450 FT_BOOLEAN, 24, NULL, 0x00000080,
8451 NULL, HFILL }
8453 { &hf_r3_lockstate_remote,
8454 { "Remote", "r3.lockstate.remote",
8455 FT_BOOLEAN, 24, NULL, 0x00000100,
8456 NULL, HFILL }
8458 { &hf_r3_lockstate_update,
8459 { "Update", "r3.lockstate.update",
8460 FT_BOOLEAN, 24, NULL, 0x00000200,
8461 NULL, HFILL }
8463 { &hf_r3_lockstate_exceptionspresent,
8464 { "Exceptions Present", "r3.lockstate.exceptionspresent",
8465 FT_BOOLEAN, 24, NULL, 0x00000400,
8466 NULL, HFILL }
8468 { &hf_r3_lockstate_exceptionsactive,
8469 { "Exceptions Active", "r3.lockstate.exceptionsactive",
8470 FT_BOOLEAN, 24, NULL, 0x00000800,
8471 NULL, HFILL }
8473 { &hf_r3_lockstate_timezonespresent,
8474 { "Timezones Presents", "r3.lockstate.timezonespresent",
8475 FT_BOOLEAN, 24, NULL, 0x00001000,
8476 NULL, HFILL }
8478 { &hf_r3_lockstate_timezonesactive,
8479 { "Timezones Active", "r3.lockstate.timezonesactive",
8480 FT_BOOLEAN, 24, NULL, 0x00002000,
8481 NULL, HFILL }
8483 { &hf_r3_lockstate_autounlockspresent,
8484 { "Auto Unlocks Present", "r3.lockstate.autounlockspresent",
8485 FT_BOOLEAN, 24, NULL, 0x00004000,
8486 NULL, HFILL }
8488 { &hf_r3_lockstate_autounlocksactive,
8489 { "Auto Unlocks Active", "r3.lockstate.autounlocksactive",
8490 FT_BOOLEAN, 24, NULL, 0x00008000,
8491 NULL, HFILL }
8493 { &hf_r3_lockstate_uapmspresent,
8494 { "UAPMs Present", "r3.lockstate.uapmspresent",
8495 FT_BOOLEAN, 24, NULL, 0x00010000,
8496 NULL, HFILL }
8498 { &hf_r3_lockstate_uapmsactive,
8499 { "UAPMs Active", "r3.lockstate.uapmsactive",
8500 FT_BOOLEAN, 24, NULL, 0x00020000,
8501 NULL, HFILL }
8503 { &hf_r3_lockstate_uapmrelockspresent,
8504 { "UAPM Relocks Present", "r3.lockstate.uapmrelockspresent",
8505 FT_BOOLEAN, 24, NULL, 0x00040000,
8506 NULL, HFILL }
8508 { &hf_r3_lockstate_uapmreslocksactive,
8509 { "UAPM Relocks Active", "r3.lockstate.uapmreslocksactive",
8510 FT_BOOLEAN, 24, NULL, 0x00080000,
8511 NULL, HFILL }
8513 { &hf_r3_lockstate_nvramprotect,
8514 { "NVRAM Protect", "r3.lockstate.nvramprotect",
8515 FT_BOOLEAN, 24, NULL, 0x00100000,
8516 NULL, HFILL }
8518 { &hf_r3_lockstate_nvramchecksum,
8519 { "MVRAM Checksum", "r3.lockstate.nvramchecksum",
8520 FT_BOOLEAN, 24, NULL, 0x00200000,
8521 NULL, HFILL }
8524 #if 0
8525 { &hf_r3_mortisestatelog,
8526 { "Mortise State Log", "r3.mortisestatelog",
8527 FT_NONE, BASE_NONE, NULL, 0x0,
8528 NULL, HFILL }
8530 #endif
8531 { &hf_r3_mortisestatelog_pointer,
8532 { "Event Pointer", "r3.mortisestatelog.pointer",
8533 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8534 NULL, HFILL }
8536 { &hf_r3_mortisestatelog_mortisetype,
8537 { "Mortise Type", "r3.mortisestatelog.mortisetype",
8538 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortisetypenames_ext, 0x0,
8539 NULL, HFILL }
8541 { &hf_r3_mortisestatelog_waiting,
8542 { "Waiting For Door Closed", "r3.mortisestatelog.waiting",
8543 FT_BOOLEAN, BASE_NONE, TFS (&tfs_true_false ), 0x00,
8544 NULL, HFILL }
8546 { &hf_r3_mortisestatelog_state,
8547 { "State", "r3.mortisestatelog.state",
8548 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8549 NULL, HFILL }
8551 { &hf_r3_mortisestatelog_last,
8552 { "Last State", "r3.mortisestatelog.laststate",
8553 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8554 NULL, HFILL }
8556 { &hf_r3_mortisestatelog_event,
8557 { "Event", "r3.mortisestatelog.event",
8558 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortiseeventnames_ext, 0x0,
8559 NULL, HFILL }
8562 { &hf_r3_timerchain_newtick,
8563 { "New Tick", "r3.timerchain.newtick",
8564 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8565 NULL, HFILL }
8567 { &hf_r3_timerchain_currentboundary,
8568 { "Current Boundary", "r3.timerchain.currentboundary",
8569 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8570 NULL, HFILL }
8572 { &hf_r3_timerchain_tasktag,
8573 { "Task Tag", "r3.timerchain.tasktag",
8574 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8575 NULL, HFILL }
8577 { &hf_r3_timerchain_address,
8578 { "Address", "r3.timerchain.address",
8579 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8580 NULL, HFILL }
8582 { &hf_r3_timerchain_reload,
8583 { "Reload", "r3.timerchain.reload",
8584 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8585 NULL, HFILL }
8587 { &hf_r3_timerchain_boundary,
8588 { "Boundary", "r3.timerchain.boundary",
8589 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8590 NULL, HFILL }
8592 { &hf_r3_timerchain_count,
8593 { "Count", "r3.timerchain.count",
8594 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8595 NULL, HFILL }
8597 { &hf_r3_timerchain_flags,
8598 { "Flags", "r3.timerchain.flags",
8599 FT_UINT32, BASE_HEX, NULL, 0x0,
8600 NULL, HFILL }
8603 { &hf_r3_taskflags_taskid,
8604 { "Task ID", "r3.taskflags.taskid",
8605 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8606 NULL, HFILL }
8608 { &hf_r3_taskflags_flags,
8609 { "Flags", "r3.taskflags.flags",
8610 FT_UINT32, BASE_HEX, NULL, 0x0,
8611 NULL, HFILL }
8614 { &hf_r3_checkpointlog_entryptr,
8615 { "Entry Pointer", "r3.checkpointlog.entrypointer",
8616 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8617 NULL, HFILL }
8619 { &hf_r3_checkpointlog_rcon,
8620 { "RCON", "r3.checkpointlog.rcon",
8621 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8622 NULL, HFILL }
8624 { &hf_r3_checkpointlog_checkpoint,
8625 { "Checkpoint", "r3.checkpointlog.checkpoint",
8626 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8627 NULL, HFILL }
8630 { &hf_r3_cpuregisters_intcon,
8631 { "INTCON", "r3.cpuregisters.intcon",
8632 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8633 NULL, HFILL }
8635 { &hf_r3_cpuregisters_intcon2,
8636 { "INTCON2", "r3.cpuregisters.intcon2",
8637 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8638 NULL, HFILL }
8640 { &hf_r3_cpuregisters_intcon3,
8641 { "INTCON3", "r3.cpuregisters.intcon3",
8642 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8643 NULL, HFILL }
8645 { &hf_r3_cpuregisters_pir1,
8646 { "PIR1", "r3.cpuregisters.pir1",
8647 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8648 NULL, HFILL }
8650 { &hf_r3_cpuregisters_pir2,
8651 { "PIR2", "r3.cpuregisters.pir2",
8652 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8653 NULL, HFILL }
8655 { &hf_r3_cpuregisters_pir3,
8656 { "PIR3", "r3.cpuregisters.pir3",
8657 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8658 NULL, HFILL }
8660 { &hf_r3_cpuregisters_pie1,
8661 { "PIE1", "r3.cpuregisters.pie1",
8662 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8663 NULL, HFILL }
8665 { &hf_r3_cpuregisters_pie2,
8666 { "PIE2", "r3.cpuregisters.pie2",
8667 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8668 NULL, HFILL }
8670 { &hf_r3_cpuregisters_pie3,
8671 { "PIE3", "r3.cpuregisters.pie3",
8672 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8673 NULL, HFILL }
8675 { &hf_r3_cpuregisters_ipr1,
8676 { "IPR1", "r3.cpuregisters.ipr1",
8677 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8678 NULL, HFILL }
8680 { &hf_r3_cpuregisters_ipr2,
8681 { "IPR2", "r3.cpuregisters.ipr2",
8682 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8683 NULL, HFILL }
8685 { &hf_r3_cpuregisters_ipr3,
8686 { "IPR3", "r3.cpuregisters.ipr3",
8687 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8688 NULL, HFILL }
8690 { &hf_r3_cpuregisters_rcon,
8691 { "RCON", "r3.cpuregisters.rcon",
8692 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8693 NULL, HFILL }
8695 { &hf_r3_cpuregisters_osccon,
8696 { "OSCCON", "r3.cpuregisters.osccon",
8697 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8698 NULL, HFILL }
8700 { &hf_r3_cpuregisters_rcsta,
8701 { "RCSTA", "r3.cpuregisters.rcsta",
8702 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8703 NULL, HFILL }
8705 { &hf_r3_cpuregisters_txsta,
8706 { "TXSTA", "r3.cpuregisters.txsta",
8707 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8708 NULL, HFILL }
8710 { &hf_r3_cpuregisters_rcsta2,
8711 { "RCSTA2", "r3.cpuregisters.rcsta2",
8712 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8713 NULL, HFILL }
8715 { &hf_r3_cpuregisters_txsta2,
8716 { "TXSTA2", "r3.cpuregisters.txsta2",
8717 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8718 NULL, HFILL }
8720 { &hf_r3_cpuregisters_wdtcon,
8721 { "WDTCON", "r3.cpuregisters.wdtcon",
8722 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8723 NULL, HFILL }
8726 { &hf_r3_cpuregisters_intcon_rbif,
8727 { "INTCON.RBIF", "r3.cpuregisters.intcon.rbif",
8728 FT_BOOLEAN, 8, NULL, 0x01,
8729 NULL, HFILL }
8731 { &hf_r3_cpuregisters_intcon_int0if,
8732 { "INTCON.INT0IF", "r3.cpuregisters.intcon.int0if",
8733 FT_BOOLEAN, 8, NULL, 0x02,
8734 NULL, HFILL }
8736 { &hf_r3_cpuregisters_intcon_tmr0if,
8737 { "INTCON.TMR0IF", "r3.cpuregisters.intcon.tmr0if",
8738 FT_BOOLEAN, 8, NULL, 0x04,
8739 NULL, HFILL }
8741 { &hf_r3_cpuregisters_intcon_rbie,
8742 { "INTCON.RBIE", "r3.cpuregisters.intcon.rbie",
8743 FT_BOOLEAN, 8, NULL, 0x08,
8744 NULL, HFILL }
8746 { &hf_r3_cpuregisters_intcon_int0ie,
8747 { "INTCON.INT0IE", "r3.cpuregisters.intcon.int0ie",
8748 FT_BOOLEAN, 8, NULL, 0x10,
8749 NULL, HFILL }
8751 { &hf_r3_cpuregisters_intcon_tmr0ie,
8752 { "INTCON.TMR0IE", "r3.cpuregisters.intcon.tmr0ie",
8753 FT_BOOLEAN, 8, NULL, 0x20,
8754 NULL, HFILL }
8756 { &hf_r3_cpuregisters_intcon_giel,
8757 { "INTCON.GIEL", "r3.cpuregisters.intcon.giel",
8758 FT_BOOLEAN, 8, NULL, 0x40,
8759 NULL, HFILL }
8761 { &hf_r3_cpuregisters_intcon_gieh,
8762 { "INTCON.GIEH", "r3.cpuregisters.intcon.gieh",
8763 FT_BOOLEAN, 8, NULL, 0x80,
8764 NULL, HFILL }
8766 { &hf_r3_cpuregisters_intcon2_rbip,
8767 { "INTCON2.RBIP", "r3_cpuregisters_intcon2_rbip",
8768 FT_BOOLEAN, 8, NULL, 0x01,
8769 NULL, HFILL }
8771 { &hf_r3_cpuregisters_intcon2_int3ip,
8772 { "INTCON2.INT3IP", "r3_cpuregisters_intcon2_int3ip",
8773 FT_BOOLEAN, 8, NULL, 0x02,
8774 NULL, HFILL }
8776 { &hf_r3_cpuregisters_intcon2_tmr0ip,
8777 { "INTCON2.TMR0IP", "r3_cpuregisters_intcon2_tmr0ip",
8778 FT_BOOLEAN, 8, NULL, 0x04,
8779 NULL, HFILL }
8781 { &hf_r3_cpuregisters_intcon2_intedg3,
8782 { "INTCON2.INTEDG3", "r3_cpuregisters_intcon2_intedg3",
8783 FT_BOOLEAN, 8, NULL, 0x08,
8784 NULL, HFILL }
8786 { &hf_r3_cpuregisters_intcon2_intedg2,
8787 { "INTCON2.INTEDG2", "r3_cpuregisters_intcon2_intedg2",
8788 FT_BOOLEAN, 8, NULL, 0x10,
8789 NULL, HFILL }
8791 { &hf_r3_cpuregisters_intcon2_intedg1,
8792 { "INTCON2.INTEDG1", "r3_cpuregisters_intcon2_intedg1",
8793 FT_BOOLEAN, 8, NULL, 0x20,
8794 NULL, HFILL }
8796 { &hf_r3_cpuregisters_intcon2_intedg0,
8797 { "INTCON2.INTEDG0", "r3_cpuregisters_intcon2_intedg0",
8798 FT_BOOLEAN, 8, NULL, 0x40,
8799 NULL, HFILL }
8801 { &hf_r3_cpuregisters_intcon2_rbpu,
8802 { "INTCON2.RBPU", "r3_cpuregisters_intcon2_rbpu",
8803 FT_BOOLEAN, 8, NULL, 0x80,
8804 NULL, HFILL }
8806 { &hf_r3_cpuregisters_intcon3_int1if,
8807 { "INTCON3.INT1IF", "r3.cpuregisters.intcon3.int1if",
8808 FT_BOOLEAN, 8, NULL, 0x01,
8809 NULL, HFILL }
8811 { &hf_r3_cpuregisters_intcon3_int2if,
8812 { "INTCON3.INT2IF", "r3.cpuregisters.intcon3.int2if",
8813 FT_BOOLEAN, 8, NULL, 0x02,
8814 NULL, HFILL }
8816 { &hf_r3_cpuregisters_intcon3_int3if,
8817 { "INTCON3.INT3IF", "r3.cpuregisters.intcon3.int3if",
8818 FT_BOOLEAN, 8, NULL, 0x04,
8819 NULL, HFILL }
8821 { &hf_r3_cpuregisters_intcon3_int1ie,
8822 { "INTCON3.INT1IE", "r3.cpuregisters.intcon3.int1ie",
8823 FT_BOOLEAN, 8, NULL, 0x08,
8824 NULL, HFILL }
8826 { &hf_r3_cpuregisters_intcon3_int2ie,
8827 { "INTCON3.INT2IE", "r3.cpuregisters.intcon3.int2ie",
8828 FT_BOOLEAN, 8, NULL, 0x10,
8829 NULL, HFILL }
8831 { &hf_r3_cpuregisters_intcon3_int3ie,
8832 { "INTCON3.INT3IE", "r3.cpuregisters.intcon3.int3ie",
8833 FT_BOOLEAN, 8, NULL, 0x20,
8834 NULL, HFILL }
8836 { &hf_r3_cpuregisters_intcon3_int1ip,
8837 { "INTCON3.INT1IP", "r3.cpuregisters.intcon3.int1ip",
8838 FT_BOOLEAN, 8, NULL, 0x40,
8839 NULL, HFILL }
8841 { &hf_r3_cpuregisters_intcon3_int2ip,
8842 { "INTCON3.INT2IP", "r3.cpuregisters.intcon3.int2ip",
8843 FT_BOOLEAN, 8, NULL, 0x80,
8844 NULL, HFILL }
8846 { &hf_r3_cpuregisters_pir1_tmr1if,
8847 { "PIR1.TMR1IF", "r3.cpuregisters.pir1.tmr1if",
8848 FT_BOOLEAN, 8, NULL, 0x01,
8849 NULL, HFILL }
8851 { &hf_r3_cpuregisters_pir1_tmr2if,
8852 { "PIR1.TMR2IF", "r3.cpuregisters.pir1.tmr2if",
8853 FT_BOOLEAN, 8, NULL, 0x02,
8854 NULL, HFILL }
8856 { &hf_r3_cpuregisters_pir1_ccp1if,
8857 { "PIR1.CCP1IF", "r3.cpuregisters.pir1.ccp1if",
8858 FT_BOOLEAN, 8, NULL, 0x04,
8859 NULL, HFILL }
8861 { &hf_r3_cpuregisters_pir1_ssp1if,
8862 { "PIR1.SSP1IF", "r3.cpuregisters.pir1.ssp1if",
8863 FT_BOOLEAN, 8, NULL, 0x08,
8864 NULL, HFILL }
8866 { &hf_r3_cpuregisters_pir1_tx1if,
8867 { "PIR1.TX1IF", "r3.cpuregisters.pir1.tx1if",
8868 FT_BOOLEAN, 8, NULL, 0x10,
8869 NULL, HFILL }
8871 { &hf_r3_cpuregisters_pir1_rc1if,
8872 { "PIR1.RC1IF", "r3.cpuregisters.pir1.rc1if",
8873 FT_BOOLEAN, 8, NULL, 0x20,
8874 NULL, HFILL }
8876 { &hf_r3_cpuregisters_pir1_adif,
8877 { "PIR1.ADIF", "r3.cpuregisters.pir1.adif",
8878 FT_BOOLEAN, 8, NULL, 0x40,
8879 NULL, HFILL }
8881 { &hf_r3_cpuregisters_pir1_pspif,
8882 { "PIR1.PSPIF", "r3.cpuregisters.pir1.pspif",
8883 FT_BOOLEAN, 8, NULL, 0x80,
8884 NULL, HFILL }
8886 { &hf_r3_cpuregisters_pir2_ccp2if,
8887 { "PIR2.CCP2IF", "r3.cpuregisters.pir2.ccp2if",
8888 FT_BOOLEAN, 8, NULL, 0x01,
8889 NULL, HFILL }
8891 { &hf_r3_cpuregisters_pir2_tmr3if,
8892 { "PIR2.TMR3IF", "r3.cpuregisters.pir2.tmr3if",
8893 FT_BOOLEAN, 8, NULL, 0x02,
8894 NULL, HFILL }
8896 { &hf_r3_cpuregisters_pir2_hlvdif,
8897 { "PIR2.HLVDIF", "r3.cpuregisters.pir2.hlvdif",
8898 FT_BOOLEAN, 8, NULL, 0x04,
8899 NULL, HFILL }
8901 { &hf_r3_cpuregisters_pir2_bcl1if,
8902 { "PIR2.BCL1IF", "r3.cpuregisters.pir2.bcl1if",
8903 FT_BOOLEAN, 8, NULL, 0x08,
8904 NULL, HFILL }
8906 { &hf_r3_cpuregisters_pir2_eeif,
8907 { "PIR2.EEIF", "r3.cpuregisters.pir2.eeif",
8908 FT_BOOLEAN, 8, NULL, 0x10,
8909 NULL, HFILL }
8911 { &hf_r3_cpuregisters_pir2_unused5,
8912 { "PIR2.UNUSED5", "r3.cpuregisters.pir2.unused5",
8913 FT_BOOLEAN, 8, NULL, 0x20,
8914 NULL, HFILL }
8916 { &hf_r3_cpuregisters_pir2_cmif,
8917 { "PIR2.CMIF", "r3.cpuregisters.pir2.cmif",
8918 FT_BOOLEAN, 8, NULL, 0x40,
8919 NULL, HFILL }
8921 { &hf_r3_cpuregisters_pir2_oscfif,
8922 { "PIR2.OSCFIF", "r3.cpuregisters.pir2.oscfif",
8923 FT_BOOLEAN, 8, NULL, 0x80,
8924 NULL, HFILL }
8926 { &hf_r3_cpuregisters_pir3_ccp3if,
8927 { "PIR3.CCP3IF", "r3.cpuregisters.pir3.ccp3if",
8928 FT_BOOLEAN, 8, NULL, 0x01,
8929 NULL, HFILL }
8931 { &hf_r3_cpuregisters_pir3_ccp4if,
8932 { "PIR3.CCP4IF", "r3.cpuregisters.pir3.ccp4if",
8933 FT_BOOLEAN, 8, NULL, 0x02,
8934 NULL, HFILL }
8936 { &hf_r3_cpuregisters_pir3_ccp5if,
8937 { "PIR3.CCP5IF", "r3.cpuregisters.pir3.ccp5if",
8938 FT_BOOLEAN, 8, NULL, 0x04,
8939 NULL, HFILL }
8941 { &hf_r3_cpuregisters_pir3_tmr4if,
8942 { "PIR3.TMR4IF", "r3.cpuregisters.pir3.tmr4if",
8943 FT_BOOLEAN, 8, NULL, 0x08,
8944 NULL, HFILL }
8946 { &hf_r3_cpuregisters_pir3_tx2if,
8947 { "PIR3.TX2IF", "r3.cpuregisters.pir3.tx2if",
8948 FT_BOOLEAN, 8, NULL, 0x10,
8949 NULL, HFILL }
8951 { &hf_r3_cpuregisters_pir3_rc2if,
8952 { "PIR3.RC2IF", "r3.cpuregisters.pir3.rc2if",
8953 FT_BOOLEAN, 8, NULL, 0x20,
8954 NULL, HFILL }
8956 { &hf_r3_cpuregisters_pir3_bcl2if,
8957 { "PIR3.BCL2IF", "r3.cpuregisters.pir3.bcl2if",
8958 FT_BOOLEAN, 8, NULL, 0x40,
8959 NULL, HFILL }
8961 { &hf_r3_cpuregisters_pir3_ssp2if,
8962 { "PIR3.SSP2IF", "r3.cpuregisters.pir3.ssp2if",
8963 FT_BOOLEAN, 8, NULL, 0x80,
8964 NULL, HFILL }
8966 { &hf_r3_cpuregisters_pie1_tmr1ie,
8967 { "PIE1.TMR1IE", "r3.cpuregisters.pie1.tmr1ie",
8968 FT_BOOLEAN, 8, NULL, 0x01,
8969 NULL, HFILL }
8971 { &hf_r3_cpuregisters_pie1_tmr2ie,
8972 { "PIE1.TMR2IE", "r3.cpuregisters.pie1.tmr2ie",
8973 FT_BOOLEAN, 8, NULL, 0x02,
8974 NULL, HFILL }
8976 { &hf_r3_cpuregisters_pie1_ccp1ie,
8977 { "PIE1.CCP1IE", "r3.cpuregisters.pie1.ccp1ie",
8978 FT_BOOLEAN, 8, NULL, 0x04,
8979 NULL, HFILL }
8981 { &hf_r3_cpuregisters_pie1_ssp1ie,
8982 { "PIE1.SSP1IE", "r3.cpuregisters.pie1.ssp1ie",
8983 FT_BOOLEAN, 8, NULL, 0x08,
8984 NULL, HFILL }
8986 { &hf_r3_cpuregisters_pie1_tx1ie,
8987 { "PIE1.TX1IE", "r3.cpuregisters.pie1.tx1ie",
8988 FT_BOOLEAN, 8, NULL, 0x10,
8989 NULL, HFILL }
8991 { &hf_r3_cpuregisters_pie1_rc1ie,
8992 { "PIE1.RC1IE", "r3.cpuregisters.pie1.rc1ie",
8993 FT_BOOLEAN, 8, NULL, 0x20,
8994 NULL, HFILL }
8996 { &hf_r3_cpuregisters_pie1_adie,
8997 { "PIE1.ADIE", "r3.cpuregisters.pie1.adie",
8998 FT_BOOLEAN, 8, NULL, 0x40,
8999 NULL, HFILL }
9001 { &hf_r3_cpuregisters_pie1_pspie,
9002 { "PIE1.PSPIE", "r3.cpuregisters.pie1.pspie",
9003 FT_BOOLEAN, 8, NULL, 0x80,
9004 NULL, HFILL }
9006 { &hf_r3_cpuregisters_pie2_oscfie,
9007 { "PIE2.OSCFIE", "r3.cpuregisters.pie2.oscfie",
9008 FT_BOOLEAN, 8, NULL, 0x01,
9009 NULL, HFILL }
9011 { &hf_r3_cpuregisters_pie2_cmie,
9012 { "PIE2.CMIE", "r3.cpuregisters.pie2.cmie",
9013 FT_BOOLEAN, 8, NULL, 0x02,
9014 NULL, HFILL }
9016 { &hf_r3_cpuregisters_pie2_unused2,
9017 { "PIE2.UNUSED2", "r3.cpuregisters.pie2.unused2",
9018 FT_BOOLEAN, 8, NULL, 0x04,
9019 NULL, HFILL }
9021 { &hf_r3_cpuregisters_pie2_eeie,
9022 { "PIE2.EEIE", "r3.cpuregisters.pie2.eeie",
9023 FT_BOOLEAN, 8, NULL, 0x08,
9024 NULL, HFILL }
9026 { &hf_r3_cpuregisters_pie2_bcl1ie,
9027 { "PIE2.BCL1IE", "r3.cpuregisters.pie2.bcl1ie",
9028 FT_BOOLEAN, 8, NULL, 0x10,
9029 NULL, HFILL }
9031 { &hf_r3_cpuregisters_pie2_hlvdie,
9032 { "PIE2.HLVDIE", "r3.cpuregisters.pie2.hlvdie",
9033 FT_BOOLEAN, 8, NULL, 0x20,
9034 NULL, HFILL }
9036 { &hf_r3_cpuregisters_pie2_tmr3ie,
9037 { "PIE2.TMR3IE", "r3.cpuregisters.pie2.tmr3ie",
9038 FT_BOOLEAN, 8, NULL, 0x40,
9039 NULL, HFILL }
9041 { &hf_r3_cpuregisters_pie2_ccp2ie,
9042 { "PIE2.CCP2IE", "r3.cpuregisters.pie2.ccp2ie",
9043 FT_BOOLEAN, 8, NULL, 0x80,
9044 NULL, HFILL }
9046 { &hf_r3_cpuregisters_pie3_ccp3ie,
9047 { "PIE3.CCP3IE", "r3.cpuregisters.pie3.ccp3ie",
9048 FT_BOOLEAN, 8, NULL, 0x01,
9049 NULL, HFILL }
9051 { &hf_r3_cpuregisters_pie3_ccp4ie,
9052 { "PIE3.CCP4IE", "r3.cpuregisters.pie3.ccp4ie",
9053 FT_BOOLEAN, 8, NULL, 0x02,
9054 NULL, HFILL }
9056 { &hf_r3_cpuregisters_pie3_ccp5ie,
9057 { "PIE3.CCP5IE", "r3.cpuregisters.pie3.ccp5ie",
9058 FT_BOOLEAN, 8, NULL, 0x04,
9059 NULL, HFILL }
9061 { &hf_r3_cpuregisters_pie3_tmr4ie,
9062 { "PIE3.TMR4IE", "r3.cpuregisters.pie3.tmr4ie",
9063 FT_BOOLEAN, 8, NULL, 0x08,
9064 NULL, HFILL }
9066 { &hf_r3_cpuregisters_pie3_tx2ie,
9067 { "PIE3.TX2IE", "r3.cpuregisters.pie3.tx2ie",
9068 FT_BOOLEAN, 8, NULL, 0x10,
9069 NULL, HFILL }
9071 { &hf_r3_cpuregisters_pie3_rc2ie,
9072 { "PIE3.RC2IE", "r3.cpuregisters.pie3.rc2ie",
9073 FT_BOOLEAN, 8, NULL, 0x20,
9074 NULL, HFILL }
9076 { &hf_r3_cpuregisters_pie3_bcl2ie,
9077 { "PIE3.BCL2IE", "r3.cpuregisters.pie3.bcl2ie",
9078 FT_BOOLEAN, 8, NULL, 0x40,
9079 NULL, HFILL }
9081 { &hf_r3_cpuregisters_pie3_ssp2ie,
9082 { "PIE3.SSP2IE", "r3.cpuregisters.pie3.ssp2ie",
9083 FT_BOOLEAN, 8, NULL, 0x80,
9084 NULL, HFILL }
9086 { &hf_r3_cpuregisters_ipr1_tmr1ip,
9087 { "IPR1.TMR1IP", "r3.cpuregisters.ipr1.tmr1ip",
9088 FT_BOOLEAN, 8, NULL, 0x01,
9089 NULL, HFILL }
9091 { &hf_r3_cpuregisters_ipr1_tmr2ip,
9092 { "IPR1.TMR2IP", "r3.cpuregisters.ipr1.tmr2ip",
9093 FT_BOOLEAN, 8, NULL, 0x02,
9094 NULL, HFILL }
9096 { &hf_r3_cpuregisters_ipr1_ccp1ip,
9097 { "IPR1.CCP1IP", "r3.cpuregisters.ipr1.ccp1ip",
9098 FT_BOOLEAN, 8, NULL, 0x04,
9099 NULL, HFILL }
9101 { &hf_r3_cpuregisters_ipr1_ssp1ip,
9102 { "IPR1.SSP1IP", "r3.cpuregisters.ipr1.ssp1ip",
9103 FT_BOOLEAN, 8, NULL, 0x08,
9104 NULL, HFILL }
9106 { &hf_r3_cpuregisters_ipr1_tx1ip,
9107 { "IPR1.TX1IP", "r3.cpuregisters.ipr1.tx1ip",
9108 FT_BOOLEAN, 8, NULL, 0x10,
9109 NULL, HFILL }
9111 { &hf_r3_cpuregisters_ipr1_rc1ip,
9112 { "IPR1.RC1IP", "r3.cpuregisters.ipr1.rc1ip",
9113 FT_BOOLEAN, 8, NULL, 0x20,
9114 NULL, HFILL }
9116 { &hf_r3_cpuregisters_ipr1_adip,
9117 { "IPR1.ADIP", "r3.cpuregisters.ipr1.adip",
9118 FT_BOOLEAN, 8, NULL, 0x40,
9119 NULL, HFILL }
9121 { &hf_r3_cpuregisters_ipr1_pspip,
9122 { "IPR1.PSPIP", "r3.cpuregisters.ipr1.pspip",
9123 FT_BOOLEAN, 8, NULL, 0x80,
9124 NULL, HFILL }
9126 { &hf_r3_cpuregisters_ipr2_ccp2ip,
9127 { "IPR2.CCP2IP", "r3.cpuregisters.ipr2.ccp2ip",
9128 FT_BOOLEAN, 8, NULL, 0x01,
9129 NULL, HFILL }
9131 { &hf_r3_cpuregisters_ipr2_tmr3ip,
9132 { "IPR2.TMR3IP", "r3.cpuregisters.ipr2.tmr3ip",
9133 FT_BOOLEAN, 8, NULL, 0x02,
9134 NULL, HFILL }
9136 { &hf_r3_cpuregisters_ipr2_hlvdip,
9137 { "IPR2.HLVDIP", "r3.cpuregisters.ipr2.hlvdip",
9138 FT_BOOLEAN, 8, NULL, 0x04,
9139 NULL, HFILL }
9141 { &hf_r3_cpuregisters_ipr2_bcl1ip,
9142 { "IPR2.BCL1IP", "r3.cpuregisters.ipr2.bcl1ip",
9143 FT_BOOLEAN, 8, NULL, 0x08,
9144 NULL, HFILL }
9146 { &hf_r3_cpuregisters_ipr2_eeip,
9147 { "IPR2.EEIP", "r3.cpuregisters.ipr2.eeip",
9148 FT_BOOLEAN, 8, NULL, 0x10,
9149 NULL, HFILL }
9151 { &hf_r3_cpuregisters_ipr2_unused5,
9152 { "IPR2.UNUSED5", "r3.cpuregisters.ipr2.unused5",
9153 FT_BOOLEAN, 8, NULL, 0x20,
9154 NULL, HFILL }
9156 { &hf_r3_cpuregisters_ipr2_cmip,
9157 { "IPR2.CMIP", "r3.cpuregisters.ipr2.cmip",
9158 FT_BOOLEAN, 8, NULL, 0x40,
9159 NULL, HFILL }
9161 { &hf_r3_cpuregisters_ipr2_oscfip,
9162 { "IPR2.OSCFIP", "r3.cpuregisters.ipr2.oscfip",
9163 FT_BOOLEAN, 8, NULL, 0x80,
9164 NULL, HFILL }
9166 { &hf_r3_cpuregisters_ipr3_ccp2ip,
9167 { "IPR3.CCP2IP", "r3.cpuregisters.ipr3.ccp2ip",
9168 FT_BOOLEAN, 8, NULL, 0x01,
9169 NULL, HFILL }
9171 { &hf_r3_cpuregisters_ipr3_ccp4ip,
9172 { "IPR3.CCP4IP", "r3.cpuregisters.ipr3.ccp4ip",
9173 FT_BOOLEAN, 8, NULL, 0x02,
9174 NULL, HFILL }
9176 { &hf_r3_cpuregisters_ipr3_ccp5ip,
9177 { "IPR3.CCP5IP", "r3.cpuregisters.ipr3.ccp5ip",
9178 FT_BOOLEAN, 8, NULL, 0x04,
9179 NULL, HFILL }
9181 { &hf_r3_cpuregisters_ipr3_tmr4ip,
9182 { "IPR3.TMR4IP", "r3.cpuregisters.ipr3.tmr4ip",
9183 FT_BOOLEAN, 8, NULL, 0x08,
9184 NULL, HFILL }
9186 { &hf_r3_cpuregisters_ipr3_tx2ip,
9187 { "IPR3.TX2IP", "r3.cpuregisters.ipr3.tx2ip",
9188 FT_BOOLEAN, 8, NULL, 0x10,
9189 NULL, HFILL }
9191 { &hf_r3_cpuregisters_ipr3_rc2ip,
9192 { "IPR3.RC2IP", "r3.cpuregisters.ipr3.rc2ip",
9193 FT_BOOLEAN, 8, NULL, 0x20,
9194 NULL, HFILL }
9196 { &hf_r3_cpuregisters_ipr3_bcl2ip,
9197 { "IPR3.BCL2IP", "r3.cpuregisters.ipr3.bcl2ip",
9198 FT_BOOLEAN, 8, NULL, 0x40,
9199 NULL, HFILL }
9201 { &hf_r3_cpuregisters_ipr3_ssp2ip,
9202 { "IPR3.SSP2IP", "r3.cpuregisters.ipr3.ssp2ip",
9203 FT_BOOLEAN, 8, NULL, 0x80,
9204 NULL, HFILL }
9206 { &hf_r3_cpuregisters_rcon_bor,
9207 { "RCON./BOR", "r3.cpuregisters.rcon.bor",
9208 FT_BOOLEAN, 8, NULL, 0x01,
9209 NULL, HFILL }
9211 { &hf_r3_cpuregisters_rcon_por,
9212 { "RCON./POR", "r3.cpuregisters.rcon.por",
9213 FT_BOOLEAN, 8, NULL, 0x02,
9214 NULL, HFILL }
9216 { &hf_r3_cpuregisters_rcon_pd,
9217 { "RCON./PD", "r3.cpuregisters.rcon.pd",
9218 FT_BOOLEAN, 8, NULL, 0x04,
9219 NULL, HFILL }
9221 { &hf_r3_cpuregisters_rcon_to,
9222 { "RCON./TO", "r3.cpuregisters.rcon.to",
9223 FT_BOOLEAN, 8, NULL, 0x08,
9224 NULL, HFILL }
9226 { &hf_r3_cpuregisters_rcon_unused4,
9227 { "RCON.UNUSED4", "r3.cpuregisters.rcon.unused4",
9228 FT_BOOLEAN, 8, NULL, 0x10,
9229 NULL, HFILL }
9231 { &hf_r3_cpuregisters_rcon_ri,
9232 { "RCON./RI", "r3.cpuregisters.rcon.ri",
9233 FT_BOOLEAN, 8, NULL, 0x20,
9234 NULL, HFILL }
9236 { &hf_r3_cpuregisters_rcon_sboren,
9237 { "RCON.SBOREN", "r3.cpuregisters.rcon.sboren",
9238 FT_BOOLEAN, 8, NULL, 0x40,
9239 NULL, HFILL }
9241 { &hf_r3_cpuregisters_rcon_ipen,
9242 { "RCON.IPEN", "r3.cpuregisters.rcon.ipen",
9243 FT_BOOLEAN, 8, NULL, 0x80,
9244 NULL, HFILL }
9246 { &hf_r3_cpuregisters_osccon_scs0,
9247 { "OSCCON.SCS0", "r3.cpuregisters.osccon.scs0",
9248 FT_BOOLEAN, 8, NULL, 0x01,
9249 NULL, HFILL }
9251 { &hf_r3_cpuregisters_osccon_scs1,
9252 { "OSCCON.SCS1", "r3.cpuregisters.osccon.scs1",
9253 FT_BOOLEAN, 8, NULL, 0x02,
9254 NULL, HFILL }
9256 { &hf_r3_cpuregisters_osccon_iofs,
9257 { "OSCCON.IOFS", "r3.cpuregisters.osccon.iofs",
9258 FT_BOOLEAN, 8, NULL, 0x04,
9259 NULL, HFILL }
9261 { &hf_r3_cpuregisters_osccon_osts,
9262 { "OSCCON.OSTS", "r3.cpuregisters.osccon.osts",
9263 FT_BOOLEAN, 8, NULL, 0x08,
9264 NULL, HFILL }
9266 { &hf_r3_cpuregisters_osccon_ircf0,
9267 { "OSCCON.IRCF0", "r3.cpuregisters.osccon.ircf0",
9268 FT_BOOLEAN, 8, NULL, 0x10,
9269 NULL, HFILL }
9271 { &hf_r3_cpuregisters_osccon_ircf1,
9272 { "OSCCON.IRCF1", "r3.cpuregisters.osccon.ircf1",
9273 FT_BOOLEAN, 8, NULL, 0x20,
9274 NULL, HFILL }
9276 { &hf_r3_cpuregisters_osccon_ircf2,
9277 { "OSCCON.IRCF2", "r3.cpuregisters.osccon.ircf2",
9278 FT_BOOLEAN, 8, NULL, 0x40,
9279 NULL, HFILL }
9281 { &hf_r3_cpuregisters_osccon_idlen,
9282 { "OSCCON.IDLEN", "r3.cpuregisters.osccon.idlen",
9283 FT_BOOLEAN, 8, NULL, 0x80,
9284 NULL, HFILL }
9286 { &hf_r3_cpuregisters_rcsta_rx9d,
9287 { "RCSTA.RX9D", "r3.cpuregisters.rcsta.rx9d",
9288 FT_BOOLEAN, 8, NULL, 0x01,
9289 NULL, HFILL }
9291 { &hf_r3_cpuregisters_rcsta_oerr,
9292 { "RCSTA.OERR", "r3.cpuregisters.rcsta.oerr",
9293 FT_BOOLEAN, 8, NULL, 0x02,
9294 NULL, HFILL }
9296 { &hf_r3_cpuregisters_rcsta_ferr,
9297 { "RCSTA.FERR", "r3.cpuregisters.rcsta.ferr",
9298 FT_BOOLEAN, 8, NULL, 0x04,
9299 NULL, HFILL }
9301 { &hf_r3_cpuregisters_rcsta_adden,
9302 { "RCSTA.ADDEN", "r3.cpuregisters.rcsta.adden",
9303 FT_BOOLEAN, 8, NULL, 0x08,
9304 NULL, HFILL }
9306 { &hf_r3_cpuregisters_rcsta_cren,
9307 { "RCSTA.CREN", "r3.cpuregisters.rcsta.cren",
9308 FT_BOOLEAN, 8, NULL, 0x10,
9309 NULL, HFILL }
9311 { &hf_r3_cpuregisters_rcsta_sren,
9312 { "RCSTA.SREN", "r3.cpuregisters.rcsta.sren",
9313 FT_BOOLEAN, 8, NULL, 0x20,
9314 NULL, HFILL }
9316 { &hf_r3_cpuregisters_rcsta_rx9,
9317 { "RCSTA.RX9", "r3.cpuregisters.rcsta.rx9",
9318 FT_BOOLEAN, 8, NULL, 0x40,
9319 NULL, HFILL }
9321 { &hf_r3_cpuregisters_rcsta_spen,
9322 { "RCSTA.SPEN", "r3.cpuregisters.rcsta.spen",
9323 FT_BOOLEAN, 8, NULL, 0x80,
9324 NULL, HFILL }
9326 { &hf_r3_cpuregisters_txsta_tx9d,
9327 { "TXSTA.TX9D", "r3.cpuregisters.txsta.tx9d",
9328 FT_BOOLEAN, 8, NULL, 0x01,
9329 NULL, HFILL }
9331 { &hf_r3_cpuregisters_txsta_trmt,
9332 { "TXSTA.TRMT", "r3.cpuregisters.txsta.trmt",
9333 FT_BOOLEAN, 8, NULL, 0x02,
9334 NULL, HFILL }
9336 { &hf_r3_cpuregisters_txsta_brgh,
9337 { "TXSTA.BRGH", "r3.cpuregisters.txsta.brgh",
9338 FT_BOOLEAN, 8, NULL, 0x04,
9339 NULL, HFILL }
9341 { &hf_r3_cpuregisters_txsta_sendb,
9342 { "TXSTA.SENDB", "r3.cpuregisters.txsta.sendb",
9343 FT_BOOLEAN, 8, NULL, 0x08,
9344 NULL, HFILL }
9346 { &hf_r3_cpuregisters_txsta_sync,
9347 { "TXSTA.SYNC", "r3.cpuregisters.txsta.sync",
9348 FT_BOOLEAN, 8, NULL, 0x10,
9349 NULL, HFILL }
9351 { &hf_r3_cpuregisters_txsta_txen,
9352 { "TXSTA.TXEN", "r3.cpuregisters.txsta.txen",
9353 FT_BOOLEAN, 8, NULL, 0x20,
9354 NULL, HFILL }
9356 { &hf_r3_cpuregisters_txsta_tx9,
9357 { "TXSTA.TX9", "r3.cpuregisters.txsta.tx9",
9358 FT_BOOLEAN, 8, NULL, 0x40,
9359 NULL, HFILL }
9361 { &hf_r3_cpuregisters_txsta_csrc,
9362 { "TXSTA.CSRC", "r3.cpuregisters.txsta.csrc",
9363 FT_BOOLEAN, 8, NULL, 0x80,
9364 NULL, HFILL }
9366 { &hf_r3_cpuregisters_rcsta2_rx9d,
9367 { "RCSTA2.RX9D", "r3.cpuregisters.rcsta2.rx9d",
9368 FT_BOOLEAN, 8, NULL, 0x01,
9369 NULL, HFILL }
9371 { &hf_r3_cpuregisters_rcsta2_oerr,
9372 { "RCSTA2.OERR", "r3.cpuregisters.rcsta2.oerr",
9373 FT_BOOLEAN, 8, NULL, 0x02,
9374 NULL, HFILL }
9376 { &hf_r3_cpuregisters_rcsta2_ferr,
9377 { "RCSTA2.FERR", "r3.cpuregisters.rcsta2.ferr",
9378 FT_BOOLEAN, 8, NULL, 0x04,
9379 NULL, HFILL }
9381 { &hf_r3_cpuregisters_rcsta2_adden,
9382 { "RCSTA2.ADDEN", "r3.cpuregisters.rcsta2.adden",
9383 FT_BOOLEAN, 8, NULL, 0x08,
9384 NULL, HFILL }
9386 { &hf_r3_cpuregisters_rcsta2_cren,
9387 { "RCSTA2.CREN", "r3.cpuregisters.rcsta2.cren",
9388 FT_BOOLEAN, 8, NULL, 0x10,
9389 NULL, HFILL }
9391 { &hf_r3_cpuregisters_rcsta2_sren,
9392 { "RCSTA2.SREN", "r3.cpuregisters.rcsta2.sren",
9393 FT_BOOLEAN, 8, NULL, 0x20,
9394 NULL, HFILL }
9396 { &hf_r3_cpuregisters_rcsta2_rx9,
9397 { "RCSTA2.RX9", "r3.cpuregisters.rcsta2.rx9",
9398 FT_BOOLEAN, 8, NULL, 0x40,
9399 NULL, HFILL }
9401 { &hf_r3_cpuregisters_rcsta2_spen,
9402 { "RCSTA2.SPEN", "r3.cpuregisters.rcsta2.spen",
9403 FT_BOOLEAN, 8, NULL, 0x80,
9404 NULL, HFILL }
9406 { &hf_r3_cpuregisters_txsta2_tx9d,
9407 { "TXSTA2.TX9D", "r3.cpuregisters.txsta2.tx9d",
9408 FT_BOOLEAN, 8, NULL, 0x01,
9409 NULL, HFILL }
9411 { &hf_r3_cpuregisters_txsta2_trmt,
9412 { "TXSTA2.TRMT", "r3.cpuregisters.txsta2.trmt",
9413 FT_BOOLEAN, 8, NULL, 0x02,
9414 NULL, HFILL }
9416 { &hf_r3_cpuregisters_txsta2_brgh,
9417 { "TXSTA2.BRGH", "r3.cpuregisters.txsta2.brgh",
9418 FT_BOOLEAN, 8, NULL, 0x04,
9419 NULL, HFILL }
9421 { &hf_r3_cpuregisters_txsta2_sendb,
9422 { "TXSTA2.SENDB", "r3.cpuregisters.txsta2.sendb",
9423 FT_BOOLEAN, 8, NULL, 0x08,
9424 NULL, HFILL }
9426 { &hf_r3_cpuregisters_txsta2_sync,
9427 { "TXSTA2.SYNC", "r3.cpuregisters.txsta2.sync",
9428 FT_BOOLEAN, 8, NULL, 0x10,
9429 NULL, HFILL }
9431 { &hf_r3_cpuregisters_txsta2_txen,
9432 { "TXSTA2.TXEN", "r3.cpuregisters.txsta2.txen",
9433 FT_BOOLEAN, 8, NULL, 0x20,
9434 NULL, HFILL }
9436 { &hf_r3_cpuregisters_txsta2_tx9,
9437 { "TXSTA2.TX9", "r3.cpuregisters.txsta2.tx9",
9438 FT_BOOLEAN, 8, NULL, 0x40,
9439 NULL, HFILL }
9441 { &hf_r3_cpuregisters_txsta2_csrc,
9442 { "TXSTA2.CSRC", "r3.cpuregisters.txsta2.csrc",
9443 FT_BOOLEAN, 8, NULL, 0x80,
9444 NULL, HFILL }
9446 { &hf_r3_cpuregisters_wdtcon_swdten,
9447 { "WDTCON.SWDTEN", "r3.cpuregisters.wdtcon.swdten",
9448 FT_BOOLEAN, 8, NULL, 0x01,
9449 NULL, HFILL }
9451 { &hf_r3_cpuregisters_wdtcon_unused1,
9452 { "WDTCON.UNUSED1", "r3.cpuregisters.wdtcon.unused1",
9453 FT_BOOLEAN, 8, NULL, 0x02,
9454 NULL, HFILL }
9456 { &hf_r3_cpuregisters_wdtcon_unused2,
9457 { "WDTCON.UNUSED2", "r3.cpuregisters.wdtcon.unused2",
9458 FT_BOOLEAN, 8, NULL, 0x04,
9459 NULL, HFILL }
9461 { &hf_r3_cpuregisters_wdtcon_unused3,
9462 { "WDTCON.UNUSED3", "r3.cpuregisters.wdtcon.unused3",
9463 FT_BOOLEAN, 8, NULL, 0x08,
9464 NULL, HFILL }
9466 { &hf_r3_cpuregisters_wdtcon_unused4,
9467 { "WDTCON.UNUSED4", "r3.cpuregisters.wdtcon.unused4",
9468 FT_BOOLEAN, 8, NULL, 0x10,
9469 NULL, HFILL }
9471 { &hf_r3_cpuregisters_wdtcon_unused5,
9472 { "WDTCON.UNUSED5", "r3.cpuregisters.wdtcon.unused5",
9473 FT_BOOLEAN, 8, NULL, 0x20,
9474 NULL, HFILL }
9476 { &hf_r3_cpuregisters_wdtcon_unused6,
9477 { "WDTCON.UNUSED6", "r3.cpuregisters.wdtcon.unused6",
9478 FT_BOOLEAN, 8, NULL, 0x40,
9479 NULL, HFILL }
9481 { &hf_r3_cpuregisters_wdtcon_unused7,
9482 { "WDTCON.UNUSED7", "r3.cpuregisters.wdtcon.unused7",
9483 FT_BOOLEAN, 8, NULL, 0x80,
9484 NULL, HFILL }
9487 { &hf_r3_dumpm41t81_reg00,
9488 { "REG 0x00", "r3.m41t81.reg00",
9489 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9490 NULL, HFILL }
9492 { &hf_r3_dumpm41t81_reg01,
9493 { "REG 0x01", "r3.m41t81.reg01",
9494 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9495 NULL, HFILL }
9497 { &hf_r3_dumpm41t81_reg02,
9498 { "REG 0x02", "r3.m41t81.reg02",
9499 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9500 NULL, HFILL }
9502 { &hf_r3_dumpm41t81_reg03,
9503 { "REG 0x03", "r3.m41t81.reg03",
9504 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9505 NULL, HFILL }
9507 { &hf_r3_dumpm41t81_reg04,
9508 { "REG 0x04", "r3.m41t81.reg04",
9509 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9510 NULL, HFILL }
9512 { &hf_r3_dumpm41t81_reg05,
9513 { "REG 0x05", "r3.m41t81.reg05",
9514 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9515 NULL, HFILL }
9517 { &hf_r3_dumpm41t81_reg06,
9518 { "REG 0x06", "r3.m41t81.reg06",
9519 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9520 NULL, HFILL }
9522 { &hf_r3_dumpm41t81_reg07,
9523 { "REG 0x07", "r3.m41t81.reg07",
9524 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9525 NULL, HFILL }
9527 { &hf_r3_dumpm41t81_reg08,
9528 { "REG 0x08", "r3.m41t81.reg08",
9529 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9530 NULL, HFILL }
9532 { &hf_r3_dumpm41t81_reg09,
9533 { "REG 0x09", "r3.m41t81.reg09",
9534 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9535 NULL, HFILL }
9537 { &hf_r3_dumpm41t81_reg0a,
9538 { "REG 0x0a", "r3.m41t81.reg0a",
9539 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9540 NULL, HFILL }
9542 { &hf_r3_dumpm41t81_reg0b,
9543 { "REG 0x0b", "r3.m41t81.reg0b",
9544 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9545 NULL, HFILL }
9547 { &hf_r3_dumpm41t81_reg0c,
9548 { "REG 0x0c", "r3.m41t81.reg0c",
9549 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9550 NULL, HFILL }
9552 { &hf_r3_dumpm41t81_reg0d,
9553 { "REG 0x0d", "r3.m41t81.reg0d",
9554 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9555 NULL, HFILL }
9557 { &hf_r3_dumpm41t81_reg0e,
9558 { "REG 0x0e", "r3.m41t81.reg0e",
9559 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9560 NULL, HFILL }
9562 { &hf_r3_dumpm41t81_reg0f,
9563 { "REG 0x0f", "r3.m41t81.reg0f",
9564 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9565 NULL, HFILL }
9567 { &hf_r3_dumpm41t81_reg10,
9568 { "REG 0x10", "r3.m41t81.reg10",
9569 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9570 NULL, HFILL }
9572 { &hf_r3_dumpm41t81_reg11,
9573 { "REG 0x11", "r3.m41t81.reg11",
9574 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9575 NULL, HFILL }
9577 { &hf_r3_dumpm41t81_reg12,
9578 { "REG 0x12", "r3.m41t81.reg12",
9579 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9580 NULL, HFILL }
9582 { &hf_r3_dumpm41t81_reg13,
9583 { "REG 0x13", "r3.m41t81.reg13",
9584 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9585 NULL, HFILL }
9588 { &hf_r3_dumpm41t81_reg00_sec1,
9589 { ".1 Seconds", "r3.m41t81.reg00.sec1",
9590 FT_UINT8, BASE_DEC, NULL, 0x0,
9591 NULL, HFILL }
9593 { &hf_r3_dumpm41t81_reg00_sec01,
9594 { ".01 Seconds", "r3.m41t81.reg00.sec01",
9595 FT_UINT8, BASE_DEC, NULL, 0x0,
9596 NULL, HFILL }
9598 { &hf_r3_dumpm41t81_reg01_st,
9599 { "ST", "r3.m41t81.reg01.st",
9600 FT_UINT8, BASE_DEC, NULL, 0x0,
9601 NULL, HFILL }
9603 { &hf_r3_dumpm41t81_reg01_10sec,
9604 { "10 Seconds", "r3.m41t81.reg01.10sec",
9605 FT_UINT8, BASE_DEC, NULL, 0x0,
9606 NULL, HFILL }
9608 { &hf_r3_dumpm41t81_reg01_1sec,
9609 { "1 Seconds", "r3.m41t81.reg01.1sec",
9610 FT_UINT8, BASE_DEC, NULL, 0x0,
9611 NULL, HFILL }
9613 { &hf_r3_dumpm41t81_reg02_notused,
9614 { "(not used)", "r3.m41t81.reg02.notused",
9615 FT_UINT8, BASE_DEC, NULL, 0x0,
9616 NULL, HFILL }
9618 { &hf_r3_dumpm41t81_reg02_10min,
9619 { "10 Minutes", "r3.m41t81.reg02.10min",
9620 FT_UINT8, BASE_DEC, NULL, 0x0,
9621 NULL, HFILL }
9623 { &hf_r3_dumpm41t81_reg02_1min,
9624 { "1 Minutes", "r3.m41t81.reg02.1min",
9625 FT_UINT8, BASE_DEC, NULL, 0x0,
9626 NULL, HFILL }
9628 { &hf_r3_dumpm41t81_reg03_cbe,
9629 { "CBE", "r3.m41t81.reg03.cbe",
9630 FT_UINT8, BASE_DEC, NULL, 0x0,
9631 NULL, HFILL }
9633 { &hf_r3_dumpm41t81_reg03_cb,
9634 { "CB", "r3.m41t81.reg03.cb",
9635 FT_UINT8, BASE_DEC, NULL, 0x0,
9636 NULL, HFILL }
9638 { &hf_r3_dumpm41t81_reg03_10hour,
9639 { "10 Hours", "r3.m41t81.reg03.10hour",
9640 FT_UINT8, BASE_DEC, NULL, 0x0,
9641 NULL, HFILL }
9643 { &hf_r3_dumpm41t81_reg03_1hour,
9644 { "1 Hours", "r3.m41t81.reg03.1hour",
9645 FT_UINT8, BASE_DEC, NULL, 0x0,
9646 NULL, HFILL }
9648 { &hf_r3_dumpm41t81_reg04_notused,
9649 { "(not used)", "r3.m41t81.reg04.notused",
9650 FT_UINT8, BASE_DEC, NULL, 0x0,
9651 NULL, HFILL }
9653 { &hf_r3_dumpm41t81_reg04_dow,
9654 { "DOW", "r3.m41t81.reg04.dow",
9655 FT_UINT8, BASE_DEC, NULL, 0x0,
9656 NULL, HFILL }
9658 { &hf_r3_dumpm41t81_reg05_notused,
9659 { "(not used)", "r3.m41t81.reg05.notused",
9660 FT_UINT8, BASE_DEC, NULL, 0x0,
9661 NULL, HFILL }
9663 { &hf_r3_dumpm41t81_reg05_10day,
9664 { "10 Day", "r3.m41t81.reg05.10day",
9665 FT_UINT8, BASE_DEC, NULL, 0x0,
9666 NULL, HFILL }
9668 { &hf_r3_dumpm41t81_reg05_1day,
9669 { "1 Day", "r3.m41t81.reg05.1day",
9670 FT_UINT8, BASE_DEC, NULL, 0x0,
9671 NULL, HFILL }
9673 { &hf_r3_dumpm41t81_reg06_notused,
9674 { "(not used)", "r3.m41t81.reg06.notused",
9675 FT_UINT8, BASE_DEC, NULL, 0x0,
9676 NULL, HFILL }
9678 { &hf_r3_dumpm41t81_reg06_10month,
9679 { "10 Month", "r3.m41t81.reg06.10month",
9680 FT_UINT8, BASE_DEC, NULL, 0x0,
9681 NULL, HFILL }
9683 { &hf_r3_dumpm41t81_reg06_1month,
9684 { "1 Month", "r3.m41t81.reg06.1month",
9685 FT_UINT8, BASE_DEC, NULL, 0x0,
9686 NULL, HFILL }
9688 { &hf_r3_dumpm41t81_reg07_10year,
9689 { "10 Year", "r3.m41t81.reg07.10year",
9690 FT_UINT8, BASE_DEC, NULL, 0x0,
9691 NULL, HFILL }
9693 { &hf_r3_dumpm41t81_reg07_1year,
9694 { "1 Year", "r3.m41t81.reg07.1year",
9695 FT_UINT8, BASE_DEC, NULL, 0x0,
9696 NULL, HFILL }
9698 { &hf_r3_dumpm41t81_reg08_out,
9699 { "OUT", "r3.m41t81.reg08.out",
9700 FT_UINT8, BASE_DEC, NULL, 0x0,
9701 NULL, HFILL }
9703 { &hf_r3_dumpm41t81_reg08_ft,
9704 { "FT", "r3.m41t81.reg08.ft",
9705 FT_UINT8, BASE_DEC, NULL, 0x0,
9706 NULL, HFILL }
9708 { &hf_r3_dumpm41t81_reg08_s,
9709 { "S", "r3.m41t81.reg08.s",
9710 FT_UINT8, BASE_DEC, NULL, 0x0,
9711 NULL, HFILL }
9713 { &hf_r3_dumpm41t81_reg08_cal,
9714 { "CAL", "r3.m41t81.reg08.cal",
9715 FT_UINT8, BASE_DEC, NULL, 0x0,
9716 NULL, HFILL }
9718 { &hf_r3_dumpm41t81_reg09_notused,
9719 { "(not used)", "r3.m41t81.reg09.notused",
9720 FT_UINT8, BASE_DEC, NULL, 0x0,
9721 NULL, HFILL }
9723 { &hf_r3_dumpm41t81_reg09_bmb,
9724 { "BMB", "r3.m41t81.reg09.bmb",
9725 FT_UINT8, BASE_DEC, NULL, 0x0,
9726 NULL, HFILL }
9728 { &hf_r3_dumpm41t81_reg09_rb,
9729 { "RB", "r3.m41t81.reg09.rb",
9730 FT_UINT8, BASE_DEC, NULL, 0x0,
9731 NULL, HFILL }
9733 { &hf_r3_dumpm41t81_reg0a_afe,
9734 { "AFE", "r3.m41t81.reg0a.afe",
9735 FT_UINT8, BASE_DEC, NULL, 0x0,
9736 NULL, HFILL }
9738 { &hf_r3_dumpm41t81_reg0a_sqwe,
9739 { "SQWE", "r3.m41t81.reg0a.sqwe",
9740 FT_UINT8, BASE_DEC, NULL, 0x0,
9741 NULL, HFILL }
9743 { &hf_r3_dumpm41t81_reg0a_abe,
9744 { "ABE", "r3.m41t81.reg0a.abe",
9745 FT_UINT8, BASE_DEC, NULL, 0x0,
9746 NULL, HFILL }
9748 { &hf_r3_dumpm41t81_reg0a_10monthalm,
9749 { "10 Month Alarm", "r3.m41t81.reg0a.10monthalm",
9750 FT_UINT8, BASE_DEC, NULL, 0x0,
9751 NULL, HFILL }
9753 { &hf_r3_dumpm41t81_reg0a_1monthalm,
9754 { "1 Month Alarm", "r3.m41t81.reg0a.1monthalm",
9755 FT_UINT8, BASE_DEC, NULL, 0x0,
9756 NULL, HFILL }
9758 { &hf_r3_dumpm41t81_reg0b_rpt5,
9759 { "RPT5", "r3.m41t81.reg0b.rpt5",
9760 FT_UINT8, BASE_DEC, NULL, 0x0,
9761 NULL, HFILL }
9763 { &hf_r3_dumpm41t81_reg0b_rpt4,
9764 { "RPT4", "r3.m41t81.reg0b.rpt4",
9765 FT_UINT8, BASE_DEC, NULL, 0x0,
9766 NULL, HFILL }
9768 { &hf_r3_dumpm41t81_reg0b_10dayalm,
9769 { "10 Day Alarm", "r3.m41t81.reg0b.10dayalm",
9770 FT_UINT8, BASE_DEC, NULL, 0x0,
9771 NULL, HFILL }
9773 { &hf_r3_dumpm41t81_reg0b_1dayalm,
9774 { "1 Day Alarm", "r3.m41t81.reg0b.1dayalm",
9775 FT_UINT8, BASE_DEC, NULL, 0x0,
9776 NULL, HFILL }
9778 { &hf_r3_dumpm41t81_reg0c_rpt3,
9779 { "RPT3", "r3.m41t81.reg0c.rpt3",
9780 FT_UINT8, BASE_DEC, NULL, 0x0,
9781 NULL, HFILL }
9783 { &hf_r3_dumpm41t81_reg0c_ht,
9784 { "HT", "r3.m41t81.reg0c.ht",
9785 FT_UINT8, BASE_DEC, NULL, 0x0,
9786 NULL, HFILL }
9788 { &hf_r3_dumpm41t81_reg0c_10houralm,
9789 { "10 Hour Alarm", "r3.m41t81.reg0c.10houralm",
9790 FT_UINT8, BASE_DEC, NULL, 0x0,
9791 NULL, HFILL }
9793 { &hf_r3_dumpm41t81_reg0c_1houralm,
9794 { "1 Hour Alarm", "r3.m41t81.reg0c.1houralm",
9795 FT_UINT8, BASE_DEC, NULL, 0x0,
9796 NULL, HFILL }
9798 { &hf_r3_dumpm41t81_reg0d_rpt2,
9799 { "RPT2", "r3.m41t81.reg0d.rpt2",
9800 FT_UINT8, BASE_DEC, NULL, 0x0,
9801 NULL, HFILL }
9803 { &hf_r3_dumpm41t81_reg0d_10minalm,
9804 { "10 Min Alarm", "r3.m41t81.reg0d.10minalm",
9805 FT_UINT8, BASE_DEC, NULL, 0x0,
9806 NULL, HFILL }
9808 { &hf_r3_dumpm41t81_reg0d_1minalm,
9809 { "1 Min Alarm", "r3.m41t81.reg0d.1minalm",
9810 FT_UINT8, BASE_DEC, NULL, 0x0,
9811 NULL, HFILL }
9813 { &hf_r3_dumpm41t81_reg0e_rpt1,
9814 { "RPT1", "r3.m41t81.reg0e.rpt1",
9815 FT_UINT8, BASE_DEC, NULL, 0x0,
9816 NULL, HFILL }
9818 { &hf_r3_dumpm41t81_reg0e_10secalm,
9819 { "10 Sec Alarm", "r3.m41t81.reg0e.10secalm",
9820 FT_UINT8, BASE_DEC, NULL, 0x0,
9821 NULL, HFILL }
9823 { &hf_r3_dumpm41t81_reg0e_1secalm,
9824 { "1 Sec Alarm", "r3.m41t81.reg0e.1secalm",
9825 FT_UINT8, BASE_DEC, NULL, 0x0,
9826 NULL, HFILL }
9828 { &hf_r3_dumpm41t81_reg0f_wdf,
9829 { "WDF", "r3.m41t81.reg0f.wdf",
9830 FT_UINT8, BASE_DEC, NULL, 0x0,
9831 NULL, HFILL }
9833 { &hf_r3_dumpm41t81_reg0f_af,
9834 { "AF", "r3.m41t81.reg0f.af",
9835 FT_UINT8, BASE_DEC, NULL, 0x0,
9836 NULL, HFILL }
9838 { &hf_r3_dumpm41t81_reg0f_notused,
9839 { "(not used)", "r3.m41t81.reg0f.notused",
9840 FT_UINT8, BASE_DEC, NULL, 0x0,
9841 NULL, HFILL }
9843 { &hf_r3_dumpm41t81_reg10_notused,
9844 { "(not used)", "r3.m41t81.reg10.notused",
9845 FT_UINT8, BASE_DEC, NULL, 0x0,
9846 NULL, HFILL }
9848 { &hf_r3_dumpm41t81_reg11_notused,
9849 { "(not used)", "r3.m41t81.reg11.notused",
9850 FT_UINT8, BASE_DEC, NULL, 0x0,
9851 NULL, HFILL }
9853 { &hf_r3_dumpm41t81_reg12_notused,
9854 { "(not used)", "r3.m41t81.reg12.notused",
9855 FT_UINT8, BASE_DEC, NULL, 0x0,
9856 NULL, HFILL }
9858 { &hf_r3_dumpm41t81_reg13_rs,
9859 { "RS", "r3.m41t81.reg13.rs",
9860 FT_UINT8, BASE_DEC, NULL, 0x0,
9861 NULL, HFILL }
9863 { &hf_r3_dumpm41t81_reg13_notused,
9864 { "(not used)", "r3.m41t81.reg13.notused",
9865 FT_UINT8, BASE_DEC, NULL, 0x0,
9866 NULL, HFILL }
9869 { &hf_r3_debuglog_recordnumber,
9870 { "Record Number", "r3.debuglog.recordnumber",
9871 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9872 NULL, HFILL }
9874 { &hf_r3_debuglog_flags,
9875 { "Flags", "r3.debuglog.flags",
9876 FT_UINT32, BASE_HEX, NULL, 0x0,
9877 NULL, HFILL }
9879 { &hf_r3_debuglog_tick,
9880 { "Tick", "r3.debuglog.tick",
9881 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9882 NULL, HFILL }
9885 { &hf_r3_adduserparamtype,
9886 { "Upstream Field", "r3.manageuser",
9887 FT_NONE, BASE_NONE, NULL, 0x0,
9888 NULL, HFILL }
9890 { &hf_r3_adduserparamtypelength,
9891 { "Field Length", "r3.manageuser.length",
9892 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9893 NULL, HFILL }
9895 { &hf_r3_adduserparamtypetype,
9896 { "Field Type", "r3.manageuser.type",
9897 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_adduserparamtypenames_ext, 0x0,
9898 NULL, HFILL }
9900 #if 0
9901 { &hf_r3_adduserparamtypedatalen,
9902 { "Data Length", "r3.manageuser.datalen",
9903 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9904 NULL, HFILL }
9906 { &hf_r3_adduserparamtypeerror,
9907 { "Error", "r3.manageuser.error",
9908 FT_STRING, BASE_NONE, NULL, 0x0,
9909 NULL, HFILL }
9911 #endif
9912 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_DISPOSITION],
9913 { "Disposition", "r3.manageuser.disposition",
9914 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_dispositionnames_ext, 0x0,
9915 NULL, HFILL }
9917 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERNO],
9918 { "User Number", "r3.manageuser.usernumber",
9919 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9920 NULL, HFILL }
9922 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSALWAYS],
9923 { "Access Always", "r3.manageuser.accessalways",
9924 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9925 NULL, HFILL }
9927 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSMODE],
9928 { "Access Mode", "r3.manageuser.accessmode",
9929 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
9930 NULL, HFILL }
9932 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_CACHED],
9933 { "Cached", "r3.manageuser.cached",
9934 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9935 NULL, HFILL }
9937 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERTYPE],
9938 { "User Type", "r3.manageuser.usertype",
9939 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
9940 NULL, HFILL }
9942 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELD],
9943 { "Primary Field", "r3.manageuser.primaryfield",
9944 FT_BYTES, BASE_NONE, NULL, 0x0,
9945 NULL, HFILL }
9947 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELDTYPE],
9948 { "Primary Field Type", "r3.manageuser.primaryfieldtype",
9949 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9950 NULL, HFILL }
9952 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELD],
9953 { "Aux Field", "r3.manageuser.auxfield",
9954 FT_BYTES, BASE_NONE, NULL, 0x0,
9955 NULL, HFILL }
9957 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELDTYPE],
9958 { "Aux Field Type", "r3.manageuser.auxfieldtype",
9959 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9960 NULL, HFILL }
9962 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USECOUNT],
9963 { "Use Count", "r3.manageuser.usecount",
9964 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9965 NULL, HFILL }
9967 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXCEPTIONGROUP],
9968 { "Exception Group", "r3.manageuser.exceptiongroup",
9969 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9970 NULL, HFILL }
9972 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXPIREON],
9973 { "Expire On", "r3.manageuser.expireon",
9974 FT_UINT24, BASE_HEX, NULL, 0x0,
9975 NULL, HFILL }
9977 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_TIMEZONE],
9978 { "Timezone", "r3.manageuser.timezone",
9979 FT_UINT32, BASE_HEX, NULL, 0x0,
9980 NULL, HFILL }
9984 /* Setup protocol subtree array */
9985 static gint *ett [] =
9987 &ett_r3,
9988 &ett_r3header,
9989 &ett_r3tail,
9990 &ett_r3payload,
9991 &ett_r3cmd,
9992 &ett_r3configitem,
9993 &ett_r3upstreamcommand,
9994 &ett_r3upstreamfield,
9995 &ett_r3timezone,
9996 &ett_r3expireon,
9997 &ett_r3datetime,
9998 &ett_r3eventlogrecord,
9999 &ett_r3declinedlogrecord,
10000 &ett_r3alarmlogrecord,
10001 &ett_r3debugmsg,
10002 &ett_r3defineexceptionstartdate,
10003 &ett_r3defineexceptionenddate,
10004 &ett_r3defineexceptiongroupbits,
10005 &ett_r3definecalendarmonth [1],
10006 &ett_r3definecalendarmonth [2],
10007 &ett_r3definecalendarmonth [3],
10008 &ett_r3definecalendarmonth [4],
10009 &ett_r3definecalendarmonth [5],
10010 &ett_r3definecalendarmonth [6],
10011 &ett_r3definecalendarmonth [7],
10012 &ett_r3definecalendarmonth [8],
10013 &ett_r3definecalendarmonth [9],
10014 &ett_r3definecalendarmonth [10],
10015 &ett_r3definecalendarmonth [11],
10016 &ett_r3definecalendarmonth [12],
10017 &ett_r3definetimezonestarttime,
10018 &ett_r3definetimezoneendtime,
10019 &ett_r3definetimezonedaymap,
10020 &ett_r3eventlogdumpstarttime,
10021 &ett_r3eventlogdumpendtime,
10022 &ett_r3declinedlogdumpstarttime,
10023 &ett_r3declinedlogdumpendtime,
10024 &ett_r3alarmlogdumpstarttime,
10025 &ett_r3alarmlogdumpendtime,
10026 &ett_r3clearnvram,
10027 &ett_r3filters,
10028 &ett_r3alarmlist,
10029 &ett_r3alarmcfg,
10030 &ett_r3commandmfg,
10031 &ett_r3serialnumber,
10032 &ett_r3iopins,
10033 &ett_r3checksumresults,
10034 &ett_r3checksumresultsfield,
10035 &ett_r3forceoptions,
10036 &ett_r3peekpoke,
10037 &ett_r3downloadfirmware,
10038 &ett_r3capabilities,
10039 &ett_r3lockstate,
10040 &ett_r3mortisestatelog,
10041 &ett_r3timerchain,
10042 &ett_r3taskflags,
10043 &ett_r3taskflagsentry,
10044 &ett_r3checkpointlog,
10045 &ett_r3checkpointlogentry,
10046 &ett_r3cpuregisters,
10047 &ett_r3cpuregister,
10048 &ett_r3m41t81registers,
10049 &ett_r3m41t81register,
10050 &ett_r3debuglogrecord,
10051 &ett_r3setdatetime,
10052 &ett_r3manageuser
10055 static ei_register_info ei[] = {
10056 { &ei_r3_malformed_length, { "r3.malformed_length", PI_MALFORMED, PI_ERROR, "Malformed length", EXPFILL }},
10057 { &ei_r3_reserved_upstream_command_value, { "r3.reserved_upstream_command_value", PI_UNDECODED, PI_WARN, "\"Reserved\" Upstream Command value", EXPFILL }},
10058 { &ei_r3_mfgfield, { "r3.mfgfield.field.unknown", PI_UNDECODED, PI_WARN, "Unknown manufacturing command value", EXPFILL }},
10059 { &ei_r3_mfgfield_too_many_adc_values, { "r3.mfgfield.too_many_adc_values", PI_PROTOCOL, PI_WARN, "MFG Field: too many adc values", EXPFILL }},
10060 { &ei_r3_peekpoke_operation, { "r3.peekpoke.operation.unknown", PI_UNDECODED, PI_WARN, "Unknown peekpoke operation value", EXPFILL }},
10061 { &ei_r3_response_hasdata_octet_1, { "r3.response_hasdata.octet_1_not_cmd_response", PI_PROTOCOL, PI_WARN, "Octet 1 not CMD_RESPONSE", EXPFILL }},
10062 { &ei_r3_response_hasdata_octet_2, { "r3.response_hasdata.octet_2_not_response_hasdata", PI_PROTOCOL, PI_WARN, "Octet 2 not RESPONSE_HASDATA", EXPFILL }},
10063 { &ei_r3_response_hasdata_octet_3, { "r3.response_hasdata.octet_3_ge_upstreamcommand_last", PI_PROTOCOL, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST", EXPFILL }},
10064 { &ei_r3_firmwaredownload_action, { "r3.firmwaredownload.action.unknown", PI_PROTOCOL, PI_WARN, "Unknown Firmware download action", EXPFILL }},
10065 { &ei_r3_cmd_downloadfirmwaretimeout, { "r3.r3.command.downloadfirmwaretimeout", PI_UNDECODED, PI_WARN, "Download Firmware Timeout", EXPFILL }},
10066 { &ei_r3_unknown_command_value, { "r3.command.unknown", PI_UNDECODED, PI_WARN, "Unknown command value", EXPFILL }},
10069 expert_module_t* expert_r3;
10071 proto_r3 = proto_register_protocol ("Assa Abloy R3", "R3", "r3");
10072 new_register_dissector ("r3", dissect_r3, proto_r3);
10073 proto_register_field_array (proto_r3, hf, array_length (hf));
10074 proto_register_subtree_array (ett, array_length (ett));
10075 expert_r3 = expert_register_protocol(proto_r3);
10076 expert_register_field_array(expert_r3, ei, array_length(ei));
10079 void proto_reg_handoff_r3 (void)
10081 dissector_handle_t r3_handle = find_dissector ("r3");
10082 dissector_add_uint ("tcp.port", 2571, r3_handle);
10083 dissector_add_uint ("tcp.port", 8023, r3_handle);
10088 * Editor modelines
10090 * Local variables:
10091 * c-basic-offset: 2
10092 * tab-width: 8
10093 * indent-tabs-mode: nil
10094 * End:
10096 * vim: set tabstop=2 softtabstop=2 shiftwidth=2 expandtab: