TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags
[wireshark-sm.git] / epan / dissectors / packet-assa_r3.c
blobe01edad2e37880d1fad420eac43d50afe1377f33
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 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include "config.h"
17 #include <epan/packet.h>
18 #include <epan/expert.h>
19 #include <epan/tfs.h>
20 #include <epan/crc16-tvb.h>
21 #include "packet-tcp.h"
23 void proto_register_r3(void);
24 void proto_reg_handoff_r3(void);
26 #if 0
27 /* */
28 /* System limits */
29 /* */
30 #define MAX_USERS 2400
31 #define MAX_TIMEZONES 32
32 #define MAX_EXCEPTIONS 64
33 #define MAX_EXCEPTIONGROUPS 64
34 #define MAX_EVENTENTRIES 10000
35 #define MAX_DECLINEDENTRIES 500
36 #define MAX_ALARMENTRIES 200
37 #endif
40 * Enumerations
42 typedef enum
44 ACCESSMODE_NONE = 0, /* 0 - No access mode (not used, not legal, I think) */
45 ACCESSMODE_PRIMARYONLY, /* 1 - Primary only */
46 ACCESSMODE_PRIMARYORAUX, /* 2 - Primary or aux field */
47 ACCESSMODE_PRIMARYANDAUX, /* 3 - Primary and aux field */
48 ACCESSMODE_PRIMARYTHENAUX, /* 4 - Primary required first, then aux */
49 ACCESSMODE_LAST /* 5 - Dummy, for range checking */
51 accessMode_e;
53 typedef enum
55 ADDUSERPARAMTYPE_DISPOSITION = 0, /* 0 - What we're supposed to do (add, delete, etc) */
56 ADDUSERPARAMTYPE_USERNO, /* 1 - User to manage (user number, U16) */
57 ADDUSERPARAMTYPE_ACCESSALWAYS, /* 2 - Access always (boolean) */
58 ADDUSERPARAMTYPE_ACCESSMODE, /* 3 - Access type (accessMode_e) */
59 ADDUSERPARAMTYPE_CACHED, /* 4 - Entry is managed by cache system (boolean) */
60 ADDUSERPARAMTYPE_USERTYPE, /* 5 - User type (userType_e) */
61 ADDUSERPARAMTYPE_PRIMARYFIELD, /* 6 - Primary field (MAX_CREDENTIALBYTES) */
62 ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, /* 7 - Primary field type (fieldType_e); */
63 ADDUSERPARAMTYPE_AUXFIELD, /* 8 - Auxiliary field (MAX_CREDENTIALBYTES) */
64 ADDUSERPARAMTYPE_AUXFIELDTYPE, /* 9 - Auxiliary field type (fieldType_e) */
65 ADDUSERPARAMTYPE_TIMEZONE, /* 10 - Timezone bitmap (U32) */
66 ADDUSERPARAMTYPE_EXPIREON, /* 11 - Date on which user no longer granted access, if non-0 */
67 ADDUSERPARAMTYPE_USECOUNT, /* 12 - Use count */
68 ADDUSERPARAMTYPE_EXCEPTIONGROUP, /* 13 - Exception group */
69 ADDUSERPARAMTYPE_LAST
71 addUserParamType_e;
73 typedef enum
75 ALARMID_NONE = 0, /* 0 - No alarm */
76 ALARMID_VALIDIN, /* 1 - Valid entry */
77 ALARMID_DENIEDACCESS, /* 2 - Denied access (bad credential) */
78 ALARMID_SECURED, /* 3 - Door closed & secured (only seen after alarms 3 or 4) */
79 ALARMID_DOORFORCED, /* 4 - Door forced */
80 ALARMID_KEYOVERRIDE, /* 5 - Key override */
81 ALARMID_INVALIDENTRY, /* 6 - Door open but invalid entry (key used?) */
82 ALARMID_DOORAJAR, /* 7 - Door ajar (needs .ja woman with Engrish accent) */
83 ALARMID_LOWBATTERY, /* 8 - Low battery alarm */
84 ALARMID_RXHELD, /* 9 - RX held */
85 ALARMID_LAST
87 alarmID_e;
89 typedef enum
91 CAPABILITIES_USERS = 0, /* 0 - Number of users supported */
92 CAPABILITIES_TIMEZONES, /* 1 - Number of timezone supported */
93 CAPABILITIES_EXCEPTIONS, /* 2 - Number of exceptions supported */
94 CAPABILITIES_EXCEPTIONGROUPS, /* 3 - Number of exception groups supported */
95 CAPABILITIES_EVENTLOG, /* 4 - Number of event log entries supported */
96 CAPABILITIES_DECLINEDLOG, /* 5 - Number of declined log entries supported */
97 CAPABILITIES_ALARMLOG, /* 6 - Number of alarm log entries supported */
98 CAPABILITIES_TOTALEVENTS, /* 7 - Total events (EVENT_LAST - 1) */
99 CAPABILITIES_LAST
101 capabilities_e;
103 typedef enum
105 CHECKSUMRESULT_CONFIGURATIONNVRAM = 0, /* 0 - Checksum results of the configuration NVRAM */
106 CHECKSUMRESULT_EXCEPTIONS, /* 1 - Checksum results of the exceptions NVRAM */
107 CHECKSUMRESULT_EXCEPTIONGROUPS, /* 2 - Checksum results of the exception groups NVRAM */
108 CHECKSUMRESULT_TZCALENDARS, /* 3 - Checksum results of the time zone calendar NVRAM */
109 CHECKSUMRESULT_TIMEZONES, /* 4 - Checksum results of the time zone NVRAM */
110 CHECKSUMRESULT_USERS, /* 5 - Checksum results of the users NVRAM */
111 CHECKSUMRESULT_CACHELRU, /* 6 - Checksum results of the cache LRU */
112 CHECKSUMRESULT_LAST
114 checksumResult_e;
116 typedef enum
118 CMD_RESPONSE = 0, /* 0 - Response to command */
119 CMD_HANDSHAKE, /* 1 - Establish session */
120 CMD_KILLSESSION, /* 2 - Kill session */
121 CMD_QUERYSERIALNUMBER, /* 3 - Query serial number */
122 CMD_QUERYVERSION, /* 4 - Query version */
123 CMD_SETDATETIME, /* 5 - Set date and time */
124 CMD_QUERYDATETIME, /* 6 - Query date and time */
125 CMD_SETCONFIG, /* 7 - Set configuration options */
126 CMD_GETCONFIG, /* 8 - Read configuration options */
127 CMD_MANAGEUSER, /* 9 - Manage users (add/delete/replace/update) */
128 CMD_DELETEUSERS, /* 10 - Delete users (all/most/cached) */
129 CMD_DEFINEEXCEPTION, /* 11 - Define exception (old block holiday) */
130 CMD_DEFINEEXCEPTIONGROUP, /* 12 - Define exception group */
131 CMD_DEFINECALENDAR, /* 13 - Define calendar */
132 CMD_DEFINETIMEZONE, /* 14 - Define time zone */
133 CMD_RMTAUTHRETRY, /* 15 - Remote authorization retry */
134 CMD_FILTERS, /* 16 - Event log filter configuration */
135 CMD_ALARMCONFIGURE, /* 17 - Alarm condition configuration */
136 CMD_EVENTLOGDUMP, /* 18 - Dump event log */
137 CMD_DECLINEDLOGDUMP, /* 19 - Dump declined log */
138 CMD_ALARMLOGDUMP, /* 20 - Dump alarm log */
139 CMD_DOWNLOADFIRMWARE, /* 21 - Download firmware */
140 CMD_DOWNLOADFIRMWARETIMEOUT, /* 22 - Download firmware timeout (internal command only) */
141 CMD_POWERTABLESELECTION, /* 23 - Power table selection */
142 CMD_CLEARNVRAM, /* 24 - Clear nvram (config/event log/declined log/etc) */
143 CMD_DPAC, /* 25 - DPAC manipulation commands */
144 CMD_SELFTEST, /* 26 - Selftest (heh) */
145 CMD_RESET, /* 27 - Restart controller */
146 CMD_LOGWRITE, /* 28 - Write event to event log */
147 CMD_MFGCOMMAND, /* 29 - Manufacturing commands */
148 CMD_NVRAMBACKUP, /* 30 - Backup/restore/erase NVRAM */
149 CMD_EXTENDEDRESPONSE, /* 31 - Response to command (extended version) */
150 CMD_LAST
152 cmdCommand_e;
154 typedef enum
156 CMDMFG_SETSERIALNUMBER = 0, /* 0 - Set serial number */
157 CMDMFG_SETCRYPTKEY, /* 1 - Set encryption key */
158 CMDMFG_DUMPNVRAM, /* 2 - Dump NVRAM */
159 CMDMFG_TERMINAL, /* 3 - DPAC terminal mode */
160 CMDMFG_REMOTEUNLOCK, /* 4 - Remote unlock (only on 'd' builds) */
161 CMDMFG_AUXCTLRVERSION, /* 5 - Request version of auxiliary controller */
162 CMDMFG_IOPINS, /* 6 - Read I/O pin states */
163 CMDMFG_ADCS, /* 7 - Read ADC values */
164 CMDMFG_HARDWAREID, /* 8 - Read hardware ID and CPU ID */
165 CMDMFG_CHECKPOINTLOGDUMP, /* 9 - Dump checkpoint log */
166 CMDMFG_CHECKPOINTLOGCLEAR, /* 10 - Clear checkpoint log */
167 CMDMFG_READREGISTERS, /* 11 - Read selected CPU registers */
168 CMDMFG_FORCEOPTIONS, /* 12 - Force I/O lines to certain states */
169 CMDMFG_COMMUSER, /* 13 - Fake a comm user entry */
170 CMDMFG_DUMPKEYPAD, /* 14 - Dump keypad debugging buffer */
171 CMDMFG_BATTERYCHECK, /* 15 - Force battery check */
172 CMDMFG_RAMREFRESH, /* 16 - Refresh RAM variables from NVRAM */
173 CMDMFG_TASKFLAGS, /* 17 - Dump task flags */
174 CMDMFG_TIMERCHAIN, /* 18 - Dump active timer chains */
175 CMDMFG_PEEKPOKE, /* 19 - Peek/poke CPU RAM memory */
176 CMDMFG_LOCKSTATE, /* 20 - Display global gLockState variable */
177 CMDMFG_CAPABILITIES, /* 21 - Read firmware capabilities (# users/event log entries, etc) */
178 CMDMFG_DUMPM41T81, /* 22 - Dump M41T81 RTC registers */
179 CMDMFG_DEBUGLOGDUMP, /* 23 - Dump debugging log */
180 CMDMFG_DEBUGLOGCLEAR, /* 24 - Clear debugging log */
181 CMDMFG_TESTWDT, /* 25 - Test watchdog */
182 CMDMFG_QUERYCKSUM, /* 26 - Query NVRAM checksum value */
183 CMDMFG_VALIDATECHECKSUMS, /* 27 - Validate checksums */
184 CMDMFG_REBUILDLRUCACHE, /* 28 - Rebuild LRC cache */
185 CMDMFG_TZUPDATE, /* 29 - Send TZCHANGE to tod.c */
186 CMDMFG_TESTPRESERVE, /* 30 - Test preserve save/restore code */
187 CMDMFG_MORTISESTATELOGDUMP, /* 31 - Dump the mortise state log */
188 CMDMFG_MORTISESTATELOGCLEAR, /* 32 - Clear the mortise state log */
189 CMDMFG_MORTISEPINS, /* 33 - Display current mortise pin status */
190 CMDMFG_HALTANDCATCHFIRE, /* 34 - Stop processor (optionally catch fire) */
191 CMDMFG_LAST
193 cmdMfgCommand_e;
195 typedef enum
197 CONFIGITEM_SERIAL_NUMBER = 0, /* 0 - Ye olde serial number */
198 CONFIGITEM_CRYPT_KEY, /* 1 - The encryption/decryption key */
199 CONFIGITEM_HARDWARE_OPTIONS_MFG, /* 2 - Bit map of hardware options at manufacturing time (hardwareOptions_e) */
200 CONFIGITEM_HARDWARE_OPTIONS, /* 3 - Bit map of hardware options at runtime time (hardwareOptions_e) */
201 CONFIGITEM_NVRAM_CHANGES, /* 4 - Log of NVRAM changes since reset (which blocks were reset) */
203 CONFIGITEM_NVRAMDIRTY, /* 5 - NVRAM is (or might be) dirty */
204 CONFIGITEM_NVRAM_WV, /* 6 - NVRAM write verify (I2C parts only) */
205 CONFIGITEM_ENABLE_WDT, /* 7 - If true, and OPT_WATCHDOG enabled, enables WDT */
206 CONFIGITEM_EARLY_ACK, /* 8 - Generates early RESPONSE_COMMANDRECEIVED message for commands that take some time */
207 CONFIGITEM_CONSOLE_AES_ONLY, /* 9 - If set, requires AES encryption on serial communications */
208 CONFIGITEM_RADIO_AES_ONLY, /* 10 - If set, requires AES encryption on radio communications */
209 CONFIGITEM_NDRLE, /* 11 - RLE (Run Length Encoding) NVRAM dump enable/disable */
210 CONFIGITEM_SOMF, /* 12 - Stop on mortise failure */
211 CONFIGITEM_NOGAF, /* 13 - Prevents what should be fatal errors from being fatal (i.e, No One Gives A Flip) */
212 CONFIGITEM_CARD_READER_POWER, /* 14 - External mag reader power supply control */
213 CONFIGITEM_PROX_ENABLE, /* 15 - Prox into permanent sleep mode */
214 CONFIGITEM_CKSUMCONFIG, /* 16 - Configuration NVRAM checksum enable/disable */
215 CONFIGITEM_DAILY_BATTERY_CHECK, /* 17 - Enable/disable daily battery check */
216 CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, /* 18 - If daily battery check enabled, top of the hour to check at */
217 CONFIGITEM_BATTERY_LOW, /* 19 - Return low battery status (true = low) */
219 CONFIGITEM_LRU_HEAD, /* 20 - Cache LRU head pointer */
220 CONFIGITEM_LRU_TAIL, /* 21 - Cache LRU tail pointer */
221 CONFIGITEM_RTC_CALIBRATION, /* 22 - Signed 6 bit value written to M41T81 calibration register */
222 CONFIGITEM_ACVREQUESTER, /* 23 - Auxiliary controller version requester (fromDevice_e, internal variable) */
223 CONFIGITEM_LOCAL_LED, /* 24 - Local LED function assignment */
225 CONFIGITEM_ERRCNT_XORLEN, /* 25 - Error counter for XOR length not matching in protocol.c */
226 CONFIGITEM_ERRCNT_CRC, /* 26 - Error counter for bad CRC in protocol.c */
227 CONFIGITEM_ERRCNT_NOTSIGIL, /* 27 - Error counter for character received was not sigil in protocol.c */
228 CONFIGITEM_ERRCNT_TIMEOUT, /* 28 - Error counter for timeout in protocol.c */
229 CONFIGITEM_ERRCNT_TOOLONG, /* 29 - Error counter for packet too long in protocol.c */
230 CONFIGITEM_ERRCNT_TOOSHORT, /* 30 - Error counter for packet too short in protocol.c */
231 CONFIGITEM_ERRCNT_HITDEFAULT, /* 31 - Error counter for hitting default handler in protocol.c */
232 CONFIGITEM_ERRCNT_OVERRUN, /* 32 - Error counter for serial buffer overrun in serial.c */
233 CONFIGITEM_ERRCNT_UARTFE, /* 33 - Error counter for UART framing error in serial.c */
234 CONFIGITEM_ERRCNT_UARTOE, /* 34 - Error counter for UART overrun error in serial.c */
236 CONFIGITEM_DST_SET, /* 35 - Daylight savings time currently active */
237 CONFIGITEM_DST_MODE, /* 36 - Determines if repeating month/date, repeating month/day, or specific month/date (dstMode_e) */
238 CONFIGITEM_DST_FORWARD_MONTH, /* 37 - Month to skip forward on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
239 CONFIGITEM_DST_FORWARD_DOM, /* 38 - Day of month to skip forward on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
240 CONFIGITEM_DST_FORWARD_OOD, /* 39 - Occurrence number of CONFIGITEM_DST_FORWARD_DOW to skip forward on (1-5) (DSTMODE_REPEATINGDOW) */
241 CONFIGITEM_DST_FORWARD_DOW, /* 40 - Day of week to skip forward on (1-7) (DSTMODE_REPEATINGDOW) */
242 CONFIGITEM_DST_FORWARD_HOUR, /* 41 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
243 CONFIGITEM_DST_FORWARD_MINUTE, /* 42 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
244 CONFIGITEM_DST_FORWARD_ADJUST, /* 43 - Number of minutes to move forward */
245 CONFIGITEM_DST_BACK_MONTH, /* 44 - Month to fall back on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDAY, DSTMODE_ONETIMEDATE) */
246 CONFIGITEM_DST_BACK_DOM, /* 45 - Day of month to fall back on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
247 CONFIGITEM_DST_BACK_OOD, /* 46 - Occurrence number of CONFIGITEM_DST_BACK_DOW to fall back on (1-5) (DSTMODE_REPEATINGDOW) */
248 CONFIGITEM_DST_BACK_DOW, /* 47 - Day of week to fall back on (1-7) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
249 CONFIGITEM_DST_BACK_HOUR, /* 48 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
250 CONFIGITEM_DST_BACK_MINUTE, /* 49 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
251 CONFIGITEM_DST_BACK_ADJUST, /* 50 - Number of minutes to move backwards */
253 CONFIGITEM_EVENTLOG_ZEROMEM, /* 51 - If set, event log memory is zeroed when event log cleared */
254 CONFIGITEM_EVENTLOG_BEGIN, /* 52 - Beginning record number when event log cleared */
255 CONFIGITEM_EVENTLOG_RECORD, /* 53 - Next event log record to write */
256 CONFIGITEM_EVENTLOG_ENTRIES, /* 54 - Number of entries in event log */
257 CONFIGITEM_EVENTLOG_WARNDEVICE, /* 55 - Event log warning device */
258 CONFIGITEM_EVENTLOG_WARNEVERY, /* 56 - Warn at every 'n' records (more or less) */
259 CONFIGITEM_EVENTLOG_RMTDEVICE, /* 57 - Device event log entries copied to (fromDevice_e) */
261 CONFIGITEM_DECLINEDLOG_ZEROMEM, /* 58 - If set, declined log memory is zeroed when declined log cleared */
262 CONFIGITEM_DECLINEDLOG_BEGIN, /* 59 - Beginning record number when declined log cleared */
263 CONFIGITEM_DECLINEDLOG_RECORD, /* 60 - Next declined log record to write */
264 CONFIGITEM_DECLINEDLOG_ENTRIES, /* 61 - Number of entries in declined log */
265 CONFIGITEM_DECLINEDLOG_WARNDEVICE, /* 62 - Declined record warning device */
266 CONFIGITEM_DECLINEDLOG_WARNEVERY, /* 63 - Warn at every 'n' records (more or less) */
267 CONFIGITEM_DECLINEDLOG_RMTDEVICE, /* 64 - Device declined entries copied to (fromDevice_e) */
269 CONFIGITEM_ALARMLOG_ZEROMEM, /* 65 - If set, alarm log memory is zeroed when alarm log cleared */
270 CONFIGITEM_ALARMLOG_BEGIN, /* 66 - Beginning record number when alarm log cleared */
271 CONFIGITEM_ALARMLOG_RECORD, /* 67 - Next alarm log record to write */
272 CONFIGITEM_ALARMLOG_ENTRIES, /* 68 - Number of entries in alarm log */
273 CONFIGITEM_ALARMLOG_WARNDEVICE, /* 69 - Alarm record warning device */
274 CONFIGITEM_ALARMLOG_WARNEVERY, /* 70 - Warn at every 'n' records (more or less) */
275 CONFIGITEM_ALARMLOG_RMTDEVICE, /* 71 - Device alarm entries copied to (fromDevice_e) */
277 CONFIGITEM_VISIBLE_FEEDBACK, /* 72 - Visible feedback on keypad presses enabled */
278 CONFIGITEM_AUDIBLE_FEEDBACK, /* 73 - Audible feedback on keypad presses enabled */
279 CONFIGITEM_VISIBLE_INDICATORS, /* 74 - Visible indicators on all actions (run dark) */
280 CONFIGITEM_AUDIBLE_INDICATORS, /* 75 - Audible indicators on all actions (run silent) */
281 CONFIGITEM_2NDPINDURATION, /* 76 - Number of seconds to wait for second PIN */
282 CONFIGITEM_LOCKOUT_ATTEMPTS, /* 77 - Number of pin/prox/magcard attempts before lockout */
283 CONFIGITEM_LOCKOUT_DURATION, /* 78 - Duration of lockout, in penta-seconds */
284 CONFIGITEM_KEYPAD_INACTIVITY, /* 79 - Duration in seconds with no key entries before key buffer cleared */
285 CONFIGITEM_ICIDLE_DURATION, /* 80 - If last credential was invalid, invalid attempt counter reset after this many seconds */
286 CONFIGITEM_WRITE_DECLINED_LOG, /* 81 - Declined log writing enable/disable */
287 CONFIGITEM_LOW_BATTERY_INDICATOR, /* 82 - Low battery audio/visual indicator enable/disable */
289 CONFIGITEM_PANIC_MODE, /* 83 - Enable/disable panic mode */
291 CONFIGITEM_TIMEZONE_ENABLE, /* 84 - Timezones enabled (applies to users, not passage modes) */
292 CONFIGITEM_EXCEPTION_ENABLE, /* 85 - Exceptions enabled (applies to users and passage modes) */
293 CONFIGITEM_AUTOUNLOCK_ENABLE, /* 86 - Auto-unlocking (schedule based) enabled */
295 CONFIGITEM_LOCK_PRIORITY_EMERGENCY, /* 87 - DPAC/PWM lock priority for emergency users (lockPriority_e) */
296 CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, /* 88 - DPAC/PWM lock priority for supervisors (lockPriority_e) */
297 CONFIGITEM_LOCK_PRIORITY_USER, /* 89 - DPAC/PWM lock priority for users (lockPriority_e) */
298 CONFIGITEM_LOCK_PRIORITY_PASSAGE, /* 90 - DPAC/PWM lock priority for passage mode (lockPriority_e) */
299 CONFIGITEM_LOCK_PRIORITY_PANIC, /* 91 - DPAC/PWM lock priority for panic mode/panic users (lockPriority_e) */
300 CONFIGITEM_LOCK_PRIORITY_LOCKOUT, /* 92 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
301 CONFIGITEM_LOCK_PRIORITY_RELOCK, /* 93 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
302 CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, /* 94 - DPAC/PWM lock priority for bolt thrown (lockPriority_e) */
303 CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, /* 95 - DPAC/PWM lock priority for configuration change (CONFIGITEM_LOCK_TYPE) (lockPriority_e) */
304 CONFIGITEM_LOCK_PRIORITY_REMOTE, /* 96 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
305 CONFIGITEM_LOCK_TYPE, /* 97 - Type of lock (PWM, electric, magnetic) */
306 CONFIGITEM_DOUBLE_PULSE, /* 98 - Lock double pulse enabled */
307 CONFIGITEM_DOUBLE_DELAY, /* 99 - Delay between double pulses, in centiseconds */
308 CONFIGITEM_MOTOR_DURATION, /* 100 - Duration lock motor to run, in centiseconds */
309 CONFIGITEM_MORTISE_TYPE, /* 101 - Type of mortise connected to controller */
310 CONFIGITEM_UNLOCK_TIME, /* 102 - Normal unlock duration in seconds */
311 CONFIGITEM_EXT_UNLOCK_TIME, /* 103 - Extended unlock duration, in seconds */
312 CONFIGITEM_DOOR_AJAR_TIME, /* 104 - Time before door considered stuck open, in seconds */
314 CONFIGITEM_SESSION_TIMEOUT, /* 105 - Session timeout, in seconds */
315 CONFIGITEM_RETRY_ON_TIMEOUT, /* 106 - Retry lock-initiated sessions if comm session timed out (instead of terminated by remote end) */
317 CONFIGITEM_UNSOLICITED_ENCRYPT, /* 107 - Unsolicited messages are encrypted (encryptionScheme_e) */
318 CONFIGITEM_RMT_AUTH_TIMEOUT, /* 108 - Seconds to wait for remote authorization timeout (0 = no remote auth) */
319 CONFIGITEM_RMT_AUTH_DEVICE, /* 109 - Device remote authorization requests sent over (fromDevice_e) */
320 CONFIGITEM_ALARM_DEVICE, /* 110 - Device alarm condition connects via */
321 CONFIGITEM_NOTIFY_DEVICE, /* 111 - Notify user device */
322 CONFIGITEM_COMMUSER_DEVICE, /* 112 - Device comm user connects via */
323 CONFIGITEM_SCHEDULER_DEVICE, /* 113 - Device scheduler connects via */
325 CONFIGITEM_SCHEDULER_TYPE, /* 114 - Scheduling algorithm to use (schedulerType_e) */
326 CONFIGITEM_SCHEDULER_AWAKE, /* 115 - Number of decaseconds scheduler is awake for */
327 CONFIGITEM_SCHEDULER_PERIOD, /* 116 - Interval in minutes between scheduled wakeups (SCHEDULERTYPE_SIMPLE) */
328 CONFIGITEM_SCHEDULER_HOD, /* 117 - Hour of day map (SCHEDULERTYPE_HOD) */
329 CONFIGITEM_SCHEDULER_DOW, /* 118 - Day of month map (SCHEDULERTYPE_DOW) */
330 CONFIGITEM_SCHEDULER_DOM, /* 119 - Day of month map (SCHEDULERTYPE_DOM) */
331 CONFIGITEM_SCHEDULER_HM1, /* 120 - On at hour:minute #1 */
332 CONFIGITEM_SCHEDULER_HM2, /* 121 - On at hour:minute #2 */
333 CONFIGITEM_SCHEDULER_HM3, /* 122 - On at hour:minute #3 */
334 CONFIGITEM_SCHEDULER_HM4, /* 123 - On at hour:minute #4 */
336 CONFIGITEM_RADIO_TYPE, /* 124 - Radio type (None, DPAC, WiPort, etc) */
337 CONFIGITEM_RADIO_MODE, /* 125 - Radio mode (DPAC=active/passive) */
338 CONFIGITEM_RADIO_TIMEOUT, /* 126 - Number of seconds before we decide server didn't hear us (only in RADIOMODE_LOCKINITIATED) */
339 CONFIGITEM_RADIO_ATTEMPTS, /* 127 - Number of times to attempt connection to server (only in RADIOMODE_LOCKINITIATED) */
340 CONFIGITEM_RADIO_HOUSEKEEPING, /* 128 - Time we allow for radio housekeeping (associate with AP, etc) */
341 CONFIGITEM_RADIO_LEAPUSERNAME, /* 129 - LEAP username */
342 CONFIGITEM_RADIO_LEAPPASSWORD, /* 130 - LEAP password */
344 CONFIGITEM_INHIBIT_VOLTAGE, /* 131 - Voltage when battery is considered dead */
345 CONFIGITEM_LOW_VOLTAGE, /* 132 - Voltage when battery is considered low */
346 CONFIGITEM_PT_RANGE_1, /* 133 - Power table for 0.00 to 5.99 volts */
347 CONFIGITEM_PT_RANGE_2, /* 134 - Power table for 6.00 to 6.49 volts */
348 CONFIGITEM_PT_RANGE_3, /* 135 - Power table for 6.50 to 6.99 volts */
349 CONFIGITEM_PT_RANGE_4, /* 136 - Power table for 7.00 to 7.49 volts */
350 CONFIGITEM_PT_RANGE_5, /* 137 - Power table for 7.50 to 7.99 volts */
351 CONFIGITEM_PT_RANGE_6, /* 138 - Power table for 8.00 to 8.49 volts */
352 CONFIGITEM_PT_RANGE_7, /* 139 - Power table for 8.50 to 8.99 volts */
353 CONFIGITEM_PT_RANGE_8, /* 140 - Power table for 9.00 and up volts */
355 CONFIGITEM_MAGCARD_IFS, /* 141 - Include field separator character in returned data */
356 CONFIGITEM_MAGCARD_FIELDS, /* 142 - Mag card fields to include */
357 CONFIGITEM_MAGCARD_OFFSET, /* 143 - Offset into concatenated field */
358 CONFIGITEM_MAGCARD_DIGITS, /* 144 - Number of digits to return past offset */
360 CONFIGITEM_ALARMS, /* 145 - Alarms (not writable) */
361 CONFIGITEM_FILTERS, /* 146 - Event filter storage (not writable) */
362 CONFIGITEM_ALARMSTATE, /* 147 - Current alarm state (alarmID_e) */
363 CONFIGITEM_DOORSTATE, /* 148 - Current door state (doorState_e) */
365 CONFIGITEM_DPACDEBUG, /* 149 - Enable DPAC debug events to event log */
366 CONFIGITEM_FAILOPENSECURE, /* 150 - Fail open (false) or secure (true) on battery dead */
368 CONFIGITEM_REPLACED_VOLTAGE, /* 151 - If battery above this voltage, it's been replaced */
370 CONFIGITEM_RX_HELD_TIME, /* 152 - If RX held longer than this, sent RX held alarm */
371 CONFIGITEM_PACKET_TIMEOUT, /* 153 - Time (in seconds) that a complete packet must arrive in */
373 CONFIGITEM_EXTENDEDRESPONSE, /* 154 - Enables extended response (which includes original sequence number) */
374 CONFIGITEM_PASSAGEMODEINDICATOR, /* 155 - When lock in passage mode, LEDs show denied if set, granted if cleared (Squish #1133) */
376 CONFIGITEM_PFMRETURNTIME, /* 156 - Number of seconds power must be present to exit power fail death loop */
378 CONFIGITEM_LAST /* Must be last item defined (All non-virtual items added above) */
380 #if 0 /* XXX: unused ? */
382 CONFIGITEM_MAGIC_FIRST = 239, /* Next item is first magic command */
383 CONFIGITEM_MAGIC_USERFIELD, /* 240 - Virtual command to delete PIN '8989', add user '8989' */
384 CONFIGITEM_MAGIC_USERADD, /* 241 - Virtual command to add a user (PIN only) */
385 CONFIGITEM_MAGIC_USERDELETE, /* 242 - Virtual command to delete a user */
386 CONFIGITEM_MAGIC_NVRAMBACKUP, /* 243 - Virtual command to backup NVRAM to FLASH */
387 CONFIGITEM_MAGIC_NVRAMRESTORE, /* 244 - Virtual command to restore NVRAM from FLASH */
388 CONFIGITEM_MAGIC_NVRAMERASE, /* 245 - Virtual command to erase backed-up NVRAM */
389 CONFIGITEM_MAGIC_LAST /* *Really* the last item */
390 #endif
392 configItem_e;
394 typedef enum
396 DELETEUSERS_ALL = 0, /* 0 - Delete ALL users, including master and emergency, restores default users */
397 DELETEUSERS_CACHED, /* 1 - Delete only cached users */
398 DELETEUSERS_LAST
400 deleteUsers_e;
402 typedef enum
404 DISPOSITION_ADD = 0, /* 0 - Add, must not exist (by user number only) */
405 DISPOSITION_REPLACE, /* 1 - Replace, (add, but overwrite if necessary) */
406 DISPOSITION_UPDATE, /* 2 - Update, must already exist */
407 DISPOSITION_DELETE, /* 3 - Delete, exists or not is irrelevant */
408 DISPOSITION_RETRIEVE, /* 4 - Retrieve, must exist */
409 DISPOSITION_LAST
411 disposition_e;
413 #if 0
414 typedef enum
416 DOORSTATE_NONE = 0, /* 0 - No door state available */
417 DOORSTATE_SECURED, /* 1 - Door closed & secured */
418 DOORSTATE_DOORFORCED, /* 2 - Door forced */
419 DOORSTATE_KEYOVERRIDE, /* 3 - Key override */
420 DOORSTATE_DOORAJAR, /* 4 - Door ajar */
421 DOORSTATE_LAST
423 doorState_e;
424 #endif
426 #if 0
427 typedef enum
429 DSTMODE_NONE, /* 0 - Automatic DST switching disabled */
430 DSTMODE_REPEATINGDOM, /* 1 - Particular day on a particular month (Apr 2nd) */
431 DSTMODE_REPEATINGDOW, /* 2 - Day of week on a particular week of a particular month (Sunday of last week of April) */
432 DSTMODE_ONETIMEDOM, /* 3 - Like DSTMODE_REPEATINGDOM, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|DAY] items */
433 DSTMODE_ONETIMEDOW, /* 4 - Like DSTMODE_REPEATINGDOW, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|OOD|DOW] items */
434 DSTMODE_LAST
436 dstMode_e;
437 #endif
439 typedef enum
441 ENCRYPTIONSCHEME_NONE = 0, /* 0 - No encryption */
442 ENCRYPTIONSCHEME_ROLLING, /* 1 - XOR with crypt key, shift each byte */
443 ENCRYPTIONSCHEME_SN, /* 2 - XOR with serial number, shift each byte */
444 ENCRYPTIONSCHEME_AESIV, /* 3 - AES implementation (set initial vector) */
445 ENCRYPTIONSCHEME_AES, /* 4 - AES implementation */
446 ENCRYPTIONSCHEME_LAST
448 encryptionScheme_e;
450 typedef enum
452 EVENT_INVALIDPIN = 0, /* 0 - Entered PIN was invalid */
453 EVENT_USER, /* 1 - Regular user has been granted access */
454 EVENT_ONETIME, /* 2 - One-time user has been granted access */
455 EVENT_PASSAGEBEGIN, /* 3 - Lock has unlocked because of auto-unlock mode */
456 EVENT_PASSAGEEND, /* 4 - Lock has relocked because of auto-unlock mode */
457 EVENT_BADTIME, /* 5 - Access attempted outside of allowed time/date */
458 EVENT_LOCKEDOUT, /* 6 - Access attempted during panic or lockout */
459 EVENT_LOWBATTERY, /* 7 - Battery is low */
460 EVENT_DEADBATTERY, /* 8 - Battery is dead */
461 EVENT_BATTERYREPLACED, /* 9 - Battery has been replaced */
462 EVENT_USERADDED, /* 10 - User added or changed */
463 EVENT_USERDELETED, /* 11 - User deleted */
464 EVENT_EMERGENCY, /* 12 - The emergency code was entered */
465 EVENT_PANIC, /* 13 - Somebody pushed the panic button */
466 EVENT_RELOCK, /* 14 - Relock code was entered */
467 EVENT_LOCKOUTBEGIN, /* 15 - Lockout code was entered */
468 EVENT_LOCKOUTEND, /* 16 - Lockout code was entered again */
469 EVENT_RESET, /* 17 - Lock was reset (restarted) */
470 EVENT_DATETIMESET, /* 18 - System date & time was set */
471 EVENT_LOGCLEARED, /* 19 - Event log cleared */
472 EVENT_DBRESET, /* 20 - User database reset */
473 EVENT_COMMSTARTED, /* 21 - Communications session started */
474 EVENT_COMMENDED, /* 22 - Communications session ended */
475 EVENT_FIRMWAREABORT, /* 23 - A firmware update aborted */
476 EVENT_FIRMWAREERROR, /* 24 - A firmware update encountered an error */
477 EVENT_FIRMWARETIMEOUT, /* 25 - Timeout expecting firmware download data record */
478 EVENT_DSTFALLBACK, /* 26 - Clock set back */
479 EVENT_DSTSPRINGFORWARD, /* 27 - Clock set forward */
480 EVENT_BOLTTHROWN, /* 28 - Bolt thrown */
481 EVENT_BOLTRETRACTED, /* 29 - Bolt retracted */
482 EVENT_MASTERCODE, /* 30 - Master code entered (clears panic, relock, and lockout) */
483 EVENT_COMMUSER, /* 31 - A comm user was activated */
484 EVENT_DPACDISABLED, /* 32 - DPAC disabled */
485 EVENT_NOTIFY, /* 33 - Notify user has been granted access */
486 EVENT_EXPIRED, /* 34 - Expired user attempted access */
487 EVENT_SUPERVISOR, /* 35 - The supervisor code was entered */
488 EVENT_MCCENTER, /* 36 - Entered MCC programming mode */
489 EVENT_MCCEXIT, /* 37 - Exited MCC programming mode */
490 EVENT_SERIALRXOVERRUN, /* 38 - Serial receiver overrun */
491 EVENT_DPACRXOVERRUN, /* 39 - DPAC receiver overrun */
492 EVENT_NVRAMPBCLEAR, /* 40 - NVRAM cleared by pushybutton */
493 EVENT_NVRAMLAYOUTCHANGE, /* 41 - NVRAM cleared by revision */
494 EVENT_NVRAMOK, /* 42 - NVRAM wasn't changed */
495 EVENT_USERREPLACED, /* 43 - User replaced */
496 EVENT_RADIOTIMEOUT, /* 44 - Radio timed out waiting for remote login */
497 EVENT_SUSPENDEDUSER, /* 45 - Suspended user attempted access */
498 EVENT_USERUPDATED, /* 46 - User updated */
499 EVENT_DOORBOLTED, /* 47 - Access denied because door is bolted */
500 EVENT_PANICACTIVE, /* 48 - Access denied because lock is in panic mode */
501 EVENT_PASSAGEACTIVE, /* 49 - Access denied because lock is in passage mode */
502 EVENT_PASSAGEINACTIVE, /* 50 - Access denied because lock is not in passage mode */
503 EVENT_BADACCESSMODE, /* 51 - Access denied because access mode is weird */
504 EVENT_CLOCKERR, /* 52 - Error reading RTC */
505 EVENT_REMOTEUNLOCK, /* 53 - Remote unlock */
506 EVENT_TZHAUDISABLED, /* 54 - Time zone, exceptions, and auto-unlock functionality disabled */
507 EVENT_EVENTLOGWRAPPED, /* 55 - Event log wrapped */
508 EVENT_DECLINEDLOGWRAPPED, /* 56 - Declined log wrapped */
509 EVENT_ALARMLOGWRAPPED, /* 57 - Alarm log wrapped */
510 EVENT_RADIOBUSYEMERGENCY, /* 58 - Access denied because radio is busy */
511 EVENT_RADIOBUSYSUPERVISOR, /* 59 - Access denied because radio is busy */
512 EVENT_RADIOBUSYONETIME, /* 60 - Access denied because radio is busy */
513 EVENT_RADIOBUSYUSER, /* 61 - Access denied because radio is busy */
514 EVENT_RADIOBUSYPANIC, /* 62 - Access denied because radio is busy */
515 EVENT_RADIOBUSYREX, /* 63 - Access denied because radio is busy */
516 EVENT_RADIOBUSYLOCKOUT, /* 64 - Access denied because radio is busy */
517 EVENT_RADIOBUSYRELOCK, /* 65 - Access denied because radio is busy */
518 EVENT_BATTERYCHECKHELDOFF, /* 66 - Battery check was not performed (user number says why) */
519 EVENT_RMTAUTHREQUEST, /* 67 - Remote authorization request made */
520 EVENT_FIRMWAREUPDATE, /* 68 - A firmware update was attempted, and succeeded */
521 EVENT_FIRMWAREUPDATEFAILED, /* 69 - A firmware update was attempted, and failed */
522 EVENT_MSMFAILURE, /* 70 - Mortise state machine failure */
523 EVENT_CLOCKRESET, /* 71 - The RTC was reset, likely due to ESD */
524 EVENT_POWERFAIL, /* 72 - Power Fail Monitor (PFM) circuit triggered */
525 EVENT_DPAC501WENTSTUPID, /* 73 - DPAC-501 failed to release CTS on power up */
527 * These are all internal debugging events. Real events should go before these.
529 EVENT_CHECKSUMCONFIG, /* 74 - Performing checksum on configuration NVRAM */
530 EVENT_CHECKSUMTZ, /* 75 - Performing checksum on timezone data NVRAM */
531 EVENT_DEBUG, /* 76 - Debug event, could mean anything (programmer discretion) */
532 EVENT_LAST /* 77 - Everything must go before this entry */
534 event_e;
536 typedef enum
538 FIELDTYPE_NONE = 0, /* 0 - Field contains nothing */
539 FIELDTYPE_PIN, /* 1 - Field contains PIN */
540 FIELDTYPE_PROX, /* 2 - Field contains Prox card */
541 FIELDTYPE_MAGCARD, /* 3 - Field contains mag card */
542 FIELDTYPE_LAST
544 fieldType_e;
546 #if 0
547 typedef enum
549 FILTERMODE_NORMAL = 0, /* 0 - Filters events specified */
550 FILTERMODE_INVERT, /* 1 - Filters events not specified */
551 FILTERMODE_LAST
553 filterMode_e;
554 #endif
556 typedef enum
558 FILTERSELECT_RECORDING = 0, /* 0 - Recording filters */
559 FILTERSELECT_REPORTING, /* 1 - Reporting filters */
560 FILTERSELECT_LAST
562 filterSelect_e;
565 /* XXX: enum vals don't all match vals in comments ??? */
566 typedef enum
568 FORCEITEM_RADIOPOWER = 0, /* 0 - Radio power */
569 FORCEITEM_RADIOENABLE, /* 1 - Radio enable */
570 FORCEITEM_LEDRED, /* 2 - Red keypad LED */
571 FORCEITEM_LEDGREEN, /* 3 - Green keypad LED */
572 FORCEITEM_LEDYELLOW, /* 4 - Yellow keypad LED */
573 FORCEITEM_PIEZO, /* 5 - Keypad peizo */
574 FORCEITEM_MAGPOWER, /* 6 - Mag card reader power supply */
575 FORCEITEM_MAGLEDA, /* 7 - Mag card LED A (usually red) */
576 FORCEITEM_MAGLEDB, /* 8 - Mag card LED B (usually green) */
577 FORCEITEM_PROXPOWER, /* 13 - Prox circuitry power (opamps, etc) */
578 FORCEITEM_PROXPING, /* 14 - Prox PIC12F629 ping/sleep mode */
579 FORCEITEM_PROXMODE, /* 15 - Prox ping/read mode (selects 50hz/125KHz filters) */
580 FORCEITEM_I2CPOWER, /* 16 - I2C power */
581 FORCEITEM_MOTORARUN, /* 17 - Motor A run (to H-bridge) */
582 FORCEITEM_MOTORBRUN, /* 18 - Motor B run (to H-bridge) */
583 FORCEITEM_VMON, /* 19 - VMon (ADC 0 battery sense) */
584 FORCEITEM_PROX, /* 20 - Prox test mode (continuous 125KHz read) */
585 FORCEITEM_MORTISETEST, /* 21 - Force mortise into test mode */
586 FORCEITEM_KEYPADTEST, /* 22 - Force keypad into test mode */
587 FORCEITEM_MAGTEST, /* 23 - Force mag card test mode */
588 FORCEITEM_PROXTEST, /* 24 - Force prox card test mode */
589 FORCEITEM_ICLASSPOWER, /* 25 - iClass Prox power */
590 FORCEITEM_ICLASSRESET, /* 26 - iClass Prox reset */
591 FORCEITEM_LAST
593 forceItem_e;
595 typedef enum
597 FROMDEVICE_NONE = 0, /* 0 - Used to indicate no device */
598 FROMDEVICE_INTERNAL, /* 1 - Generated internally */
599 FROMDEVICE_KEYPAD, /* 2 - Generated from keypad */
600 FROMDEVICE_CONSOLE, /* 3 - Generated from console */
601 FROMDEVICE_WIFI, /* 4 - Generated from wi-fi (DPAC) */
602 FROMDEVICE_LAST
604 fromDevice_e;
606 #if 0
607 typedef enum
609 HARDWAREOPTIONS_NONE = 0x0000, /* No options installed (?!) */
610 HARDWAREOPTIONS_CLOCK = 0x0001, /* Has RTC installed (always set) */
611 HARDWAREOPTIONS_CONSOLE = 0x0002, /* Has serial console (always set) */
612 HARDWAREOPTIONS_KEYPAD = 0x0004, /* Has keypad installed */
613 HARDWAREOPTIONS_PROXREADER = 0x0008, /* Has Prox card circuitry installed */
614 HARDWAREOPTIONS_MAGREADER = 0x0010, /* Has magnetic card reader attached */
615 HARDWAREOPTIONS_1WIRE = 0x0020, /* Has Dallas 1-wire interface installed */
616 HARDWAREOPTIONS_WIFI = 0x0040, /* Has WiFi module installed (DPAC only, for now) */
617 HARDWAREOPTIONS_RS485 = 0x0080, /* Has RS-485 optioning (RS-232 assumed if not) */
618 HARDWAREOPTIONS_IR = 0x0100, /* Has IR LED communications interface installed */
619 HARDWAREOPTIONS_PUSHBUTTON = 0x0200, /* Has MCC pushbutton */
620 HARDWAREOPTIONS_WATCHDOG = 0x0400, /* Has watchdog option compiled in */
621 HARDWAREOPTIONS_ICLASSREADER = 0x0800, /* Has iClass OEM75 prox reader installed */
622 HARDWAREOPTIONS_AVAIL1000 = 0x1000, /* Not defined */
623 HARDWAREOPTIONS_AVAIL2000 = 0x2000, /* Not defined */
624 HARDWAREOPTIONS_AVAIL4000 = 0x4000, /* Not defined */
625 HARDWAREOPTIONS_AVAIL8000 = 0x8000, /* Not defined */
627 HARDWAREOPTIONS_RADIO = (HARDWAREOPTIONS_WIFI),
629 HARDWAREOPTIONS_LAST = 0xffff /* Place holder, don't use */
631 hardwareOptions_e;
632 #endif
634 #if 0
635 typedef enum
637 LOCALLED_NONE = 0, /* 0 - No assignment */
638 LOCALLED_RADIOPOWER, /* 1 - Follows radio power supply (lit=power on) */
639 LOCALLED_LOCKUNLOCKED, /* 2 - Follows strike state (lit=locked) */
640 LOCALLED_I2CPOWER, /* 3 - Follows I2C power (lit=power on) */
641 LOCALLED_AUTHCONSOLE, /* 4 - Follows authorization from console port (lit=authorized) */
642 LOCALLED_AUTHWIFI, /* 5 - Follows authorization from Wifi port (lit=authorized) */
643 LOCALLED_BATTERYLOW, /* 6 - Follows battery low status (lit=low) */
644 LOCALLED_BATTERYDEAD, /* 7 - Follows battery dead status (lit=battery dead) */
645 LOCALLED_PROXREADY, /* 8 - Follows Prox ready to read (lit=ready) */
646 LOCALLED_APACQUIRED, /* 9 - Follows WAP acquired via DPAC (lit=acquired) */
647 LOCALLED_PASSMODE, /* 10 - Follows DPAC entering pass mode (lit=pass mode successful) */
648 LOCALLED_PROXREAD, /* 11 - Follows receiving a prox read event (PROXCARDEVENT_READCARD) */
649 LOCALLED_CONNECTED, /* 12 - Follows the DPAC interrupt line, indicating connection status */
650 LOCALLED_DPACCTSTIMER, /* 13 - Follows DPAC CTS line, if asserted more than 5 seconds */
651 LOCALLED_PFMCHARGING, /* 14 - Follows the state of the PFM super-cap charger */
652 LOCALLED_LAST
654 localLED_e;
655 #endif
657 #if 0
658 typedef enum
660 LOCKPRIORITY_NONE = 0, /* 0 - Radio is not shut down for motor run, access not denied if radio is on */
661 LOCKPRIORITY_DPAC, /* 1 - Radio is not shut down for motor run, access denied if radio is on */
662 LOCKPRIORITY_LOCK, /* 2 - Radio is shut down for motor run, access not denied if radio is on */
663 LOCKPRIORITY_LAST
665 lockPriority_e;
666 #endif
668 #if 0
669 typedef enum
671 LOCKTYPE_NONE = 0, /* 0 - No lock present */
672 LOCKTYPE_PWM, /* 1 - PWM motor */
673 LOCKTYPE_ELECTRIC_STRIKE, /* 2 - Electric strike (normally de-energized, uses Motor A side of H-bridge) */
674 LOCKTYPE_MAGNETIC_LOCK, /* 3 - Magnetic lock (normally energized, uses Motor A side of H-bridge) */
675 LOCKTYPE_RELAY, /* 4 - Relay (normally de-energized, uses Motor B side of H-bridge) */
676 LOCKTYPE_LAST
678 lockType_e;
679 #endif
681 typedef enum
683 MFGFIELD_IOPINS = 0, /* 0 - Contains data about the state of the IO pins */
684 MFGFIELD_ADCS, /* 1 - Contains raw ADC data */
685 MFGFIELD_HARDWAREID, /* 2 - Contains hardware ID & revision of PIC */
686 MFGFIELD_CHECKPOINTLOG, /* 3 - Contains the checkpoint log data */
687 MFGFIELD_CPUREGISTERS, /* 4 - Contains the contents of selected PIC registers */
688 MFGFIELD_TASKFLAGS, /* 5 - Contains a list of all task flag values */
689 MFGFIELD_TIMERCHAIN, /* 6 - Contains a complete list of all active timers (timerData_t) */
690 MFGFIELD_PEEKPOKE, /* 7 - Contains results of peeking memory (U8, U16, U32, or string) */
691 MFGFIELD_LOCKSTATE, /* 8 - Contains the current passage mode flags (lockState_t) */
692 MFGFIELD_CAPABILITIES, /* 9 - Contains lock capability info (# users, event log entries, etc) */
693 MFGFIELD_DUMPM41T81, /* 10 - Contains a complete dump of the M41T81 RTC registers */
694 MFGFIELD_NVRAMCHECKSUMVALUE, /* 11 - Contains the 32-bit NVRAM checksum value */
695 MFGFIELD_CHECKSUMRESULTS, /* 12 - Contains results from checksumming exceptions, exceptiong roups, time zone calendars and time zones */
696 MFGFIELD_MORTISESTATELOG, /* 13 - Contains the last 32 mortise state changes */
697 MFGFIELD_MORTISEPINS, /* 14 - Contains the mortise pin status (S1,S2,S3,S4) */
698 MFGFIELD_KEYPADCHAR, /* 15 - Contains a character from the keypad */
699 MFGFIELD_MAGCARD, /* 16 - Contains mag card data */
700 MFGFIELD_PROXCARD, /* 17 - Contains prox card data */
701 MFGFIELD_LAST
703 mfgField_e;
705 typedef enum
707 MORTISETYPE_NONE = 0, /* 0 - No mortise installed */
708 MORTISETYPE_S82276, /* 1 - Sargent 82276 mortise (A) */
709 MORTISETYPE_S82277, /* 2 - Sargent 82277 mortise, no cylinder (B) */
710 MORTISETYPE_S82278, /* 3 - Sargent 82278 mortise, no deadbolt (C) */
711 MORTISETYPE_S82279, /* 4 - Sargent 82279 mortise, no cylinder or deadbolt (D) */
712 MORTISETYPE_S10G77, /* 5 - Sargent 10G77 bored lock body (E) */
713 MORTISETYPE_S8877, /* 6 - Sargent 8877 mortise exit device (F) */
714 MORTISETYPE_S8878, /* 7 - Sargent 8878 mortise exit device, no cylinder (G) */
715 MORTISETYPE_S8977, /* 8 - Sargent 8977 mortise exit device (H) */
716 MORTISETYPE_S8978, /* 9 - Sargent 8978 mortise exit device, no cylinder (I) */
717 MORTISETYPE_CRML20x36, /* 10 - Corbin-Russwin ML20736/ML20836 mortise (J) */
718 MORTISETYPE_CRML20x35, /* 11 - Corbin-Russwin ML20735/ML20835 mortise, no cylinder (K) */
719 MORTISETYPE_CRML20x34, /* 12 - Corbin-Russwin ML20734/ML20834 mortise, no deadbolt (L) */
720 MORTISETYPE_CRML20x33, /* 13 - Corbin-Russwin ML20733/ML20833 mortise, no cylinder or deadbolt (M) */
721 MORTISETYPE_CRCL33x34, /* 14 - Corbin-Russwin CL33734/CL33834 bored lock body (N) */
722 MORTISETYPE_CR9X34, /* 15 - Corbin-Russwin 9734/9834 bored lock body (O) */
723 MORTISETYPE_CR9X33, /* 16 - Corbin-Russwin 9833/9833 bored lock body, no cylinder (P) */
724 MORTISETYPE_CR9MX34, /* 17 - Corbin-Russwin 9M734/9M834 bored lock body (Q) */
725 MORTISETYPE_CR9MX33, /* 18 - Corbin-Russwin 9M733/9M833 bored lock body, no cylinder (R) */
726 MORTISETYPE_LAST
728 mortiseType_e;
730 #if 0
731 typedef enum
733 NVRAMCLEAROPTIONS_NONE = 0x0000, /* Place holder */
734 NVRAMCLEAROPTIONS_CFGINSTALLER = 0x0001, /* Options settable by the installer (lock type, etc) */
735 NVRAMCLEAROPTIONS_CFGADMIN = 0x0002, /* Options settable by the lock administrator (time, date, etc) */
736 NVRAMCLEAROPTIONS_EXCEPTIONS = 0x0004, /* The exceptions definitions */
737 NVRAMCLEAROPTIONS_EXCEPTIONGROUPS = 0x0008, /* The exception group definitions */
738 NVRAMCLEAROPTIONS_CALENDARS = 0x0010, /* The timezones calendar definitions */
739 NVRAMCLEAROPTIONS_TIMEZONES = 0x0020, /* The timezones definitions */
740 NVRAMCLEAROPTIONS_FILTERS = 0x0040, /* Recording filters */
741 NVRAMCLEAROPTIONS_EVENTLOG = 0x0080, /* The event log */
742 NVRAMCLEAROPTIONS_USERDATA = 0x0100, /* The actual user database */
743 NVRAMCLEAROPTIONS_DECLINEDLOG = 0x0200, /* Declined credentials log */
744 NVRAMCLEAROPTIONS_ALARMLOG = 0x0400, /* Alarm log */
745 NVRAMCLEAROPTIONS_LRUCACHE = 0x0800, /* LRU cache for remote authorization (status, user doesn't clear explicitly) */
746 NVRAMCLEAROPTIONS_DBHASH = 0x1000, /* User database hash (status, user doesn't clear explicitly) */
747 NVRAMCLEAROPTIONS_CFGSYSTEM = 0x2000, /* Factory settable options, system variables (status, user doesn't clear explicitly) */
748 NVRAMCLEAROPTIONS_AVAIL4000 = 0x4000, /* Unused */
749 NVRAMCLEAROPTIONS_ALL = 0x7fff, /* All of the above */
750 NVRAMCLEAROPTIONS_USEBACKUP = 0x8000 /* If set, installer and admin options are set according from NVRAM backup (if valid) */
752 nvramClearOptions_e;
753 #endif
755 #if 0
756 typedef enum
758 NVRAMCOMMAND_BACKUP = 0, /* 0 - Backup NVRAM to backup region */
759 NVRAMCOMMAND_ERASE, /* 1 - Erase backup region */
760 NVRAMCOMMAND_RESTORE, /* 2 - Restore NVRAM from backup region */
761 NVRAMCOMMAND_LAST
763 nvramCommand_e;
764 #endif
766 #if 0
767 typedef enum
769 NVRAMDUMPSELECT_ALL = 0, /* 0 - Dump all */
770 NVRAMDUMPSELECT_PIC, /* 1 - Dump NVRAM on PIC */
771 NVRAMDUMPSELECT_USER, /* 2 - Dump I2C NVRAM containing user data, exceptions, exception groups, calendars, timezones */
772 NVRAMDUMPSELECT_EVENT, /* 3 - Dump I2C NVRAM containing event log, declined log, alarm log, LRU cache */
773 NVRAMDUMPSELECT_LAST
775 nvramDumpSelect_e;
776 #endif
778 typedef enum
780 PEEKPOKE_READU8 = 0, /* 0 - Read 8 bit value */
781 PEEKPOKE_READU16, /* 1 - Read 16 bit value */
782 PEEKPOKE_READU24, /* 2 - Read 24 bit value */
783 PEEKPOKE_READU32, /* 3 - Read 32 bit value */
784 PEEKPOKE_READSTRING, /* 4 - Read 'n' 8 bit values */
785 PEEKPOKE_WRITEU8, /* 5 - Write 8 bit value */
786 PEEKPOKE_WRITEU16, /* 6 - Write 16 bit value */
787 PEEKPOKE_WRITEU24, /* 7 - Write 24 bit value */
788 PEEKPOKE_WRITEU32, /* 8 - Write 32 bit value */
789 PEEKPOKE_WRITESTRING, /* 9 - Write 'n' 8 bit values */
790 PEEKPOKE_LAST
792 peekPoke_e;
794 typedef enum
796 PPMISOURCE_NONE = 0, /* 0 - PPMI came from nowhere (not set) */
797 PPMISOURCE_PIN, /* 1 - PPMI came from PIN */
798 PPMISOURCE_PROX, /* 2 - PPMI came from Prox */
799 PPMISOURCE_MAGCARD, /* 3 - PPMI came from mag card */
800 PPMISOURCE_LAST
802 ppmiSource_e;
804 #if 0
805 typedef enum
807 RADIOMODE_HOSTINITIATED = 0, /* 0 - DPAC in listen mode (default) */
808 RADIOMODE_LOCKINITIATED, /* 1 - DPAC in pass-through mode */
809 RADIOMODE_LAST
811 radioMode_e;
812 #endif
814 #if 0
815 typedef enum
817 RADIOTYPE_NONE = 0, /* 0 - No radio present */
818 RADIOTYPE_WIPORTNR, /* 1 - WiPortNR */
819 RADIOTYPE_DPAC80211B, /* 2 - DPAC 802.11b */
820 RADIOTYPE_DPAC80211BG, /* 3 - DPAC 802.11bg */
821 RADIOTYPE_LAST
823 radioType_e;
824 #endif
826 typedef enum
828 RESPONSETYPE_OK = 0, /* 0 - All is well */
829 RESPONSETYPE_ERROR, /* 1 - Generic error */
830 RESPONSETYPE_HASDATA, /* 2 - Response has data */
831 RESPONSETYPE_NOHANDLER, /* 3 - Command requested with no handler (internal error) */
832 RESPONSETYPE_NOSESSION, /* 4 - No session established */
833 RESPONSETYPE_BADCOMMAND, /* 5 - Bad command value */
834 RESPONSETYPE_BADPARAMETER, /* 6 - Bad parameter (can mean a lot of things) */
835 RESPONSETYPE_BADPARAMETERLEN, /* 7 - Bad parameter length (too short, too long) */
836 RESPONSETYPE_MISSINGPARAMETER, /* 8 - Missing parameter (something was required, what'd you forget?) */
837 RESPONSETYPE_DUPLICATEPARAMETER, /* 9 - Parameter supplied more than once (D'oh!) */
838 RESPONSETYPE_PARAMETERCONFLICT, /* 10 - Parameters conflict (usually mutually exclusive items) */
839 RESPONSETYPE_BADDEVICE, /* 11 - Bad device (command came from a device that's not allowed) */
840 RESPONSETYPE_NVRAMERROR, /* 12 - Hardware problem... */
841 RESPONSETYPE_NVRAMERRORNOACK, /* 13 - Hardware problem... */
842 RESPONSETYPE_NVRAMERRORNOACK32, /* 14 - Hardware problem... */
843 RESPONSETYPE_NOTI2CADDRESS, /* 15 - Illegal I2C address in i2cStart */
844 RESPONSETYPE_FIRMWAREERROR, /* 16 - Generic firmware upload error (can mean lots of things) */
845 RESPONSETYPE_DUMPINPROGRESS, /* 17 - Can't do something, a dump is in progress */
846 RESPONSETYPE_INTERNALERROR, /* 18 - Something Bad Happened(tm) */
847 RESPONSETYPE_NOTIMPLEMENTED, /* 19 - Command or function not implemented */
848 RESPONSETYPE_PINFORMATERROR, /* 20 - Error in formatting of PIN (non hex character) */
849 RESPONSETYPE_PINEXISTS, /* 21 - PIN already exists in database */
850 RESPONSETYPE_PINNOTFOUND, /* 22 - PIN wasn't found (actionManageUsers) */
851 RESPONSETYPE_USERACTIVE, /* 23 - The record for this user is active (not deleted or free) */
852 RESPONSETYPE_USERINACTIVE, /* 24 - The record for this user is inactive (not in use) */
853 RESPONSETYPE_PARENTNOTFOUND, /* 25 - Users parent couldn't be found (used internally by dbmgr.c) */
854 RESPONSETYPE_NOCHAIN, /* 26 - No users in chain (used internally by dbmgr.c) */
855 RESPONSETYPE_CAUGHTINLOOP, /* 27 - Caught in a loop somewhere */
856 RESPONSETYPE_EVENTFILTERED, /* 28 - Event record was filtered (eventlog.c) */
857 RESPONSETYPE_PAYLOADTOOLARGE, /* 29 - Message payload too large (protocol.c) */
858 RESPONSETYPE_ENDOFDATA, /* 30 - No more data (used internally by eventlog.c) */
859 RESPONSETYPE_RMTAUTHREJECTED, /* 31 - Remote authorization rejected (lockmgr.c) */
860 RESPONSETYPE_NVRAMVERSIONERROR, /* 32 - NVRAM version doesn't match expected value */
861 RESPONSETYPE_NOHARDWARE, /* 33 - Operation requested for unsupported hardware */
862 RESPONSETYPE_SCHEDULERCONFLICT, /* 34 - Scheduler not in correct mode for this operation */
863 RESPONSETYPE_NVRAMWRITEERROR, /* 35 - NVRAM write compare error */
864 RESPONSETYPE_DECLINEDFILTERED, /* 36 - Declined record was filtered (declinedlog.c) */
865 RESPONSETYPE_NECONFIGPARM, /* 37 - Non-existent configuration parameter */
866 RESPONSETYPE_FLASHERASEERROR, /* 38 - Error erasing FLASH */
867 RESPONSETYPE_FLASHWRITEERROR, /* 39 - Error writing FLASH */
868 RESPONSETYPE_BADNVBACKUP, /* 40 - NVBackup length doesn't match sizeof (configParametersNV_t) */
869 RESPONSETYPE_EARLYACK, /* 41 - Sent prior to long commands if CONFIGITEM_EARLYACK set */
870 RESPONSETYPE_ALARMFILTERED, /* 42 - Alarm record was filtered (alarm.c) */
871 RESPONSETYPE_ACVFAILURE, /* 43 - Auxiliary controller version request failure */
872 RESPONSETYPE_USERCHECKSUMERROR, /* 44 - User checksum value error */
873 RESPONSETYPE_CHECKSUMERROR, /* 45 - Generic checksum error */
874 RESPONSETYPE_RTCSQWFAILURE, /* 46 - RTC isn't generating square wave */
875 RESPONSETYPE_PRIORITYSHUTDOWN, /* 47 - Session terminated early because lock has priority over communications */
876 RESPONSETYPE_NOTMODIFIABLE, /* 48 - Configuration parameter is not user modifiable */
877 RESPONSETYPE_CANTPRESERVE, /* 49 - Can't preserve configuration (config.c, not enough space) */
878 RESPONSETYPE_INPASSAGEMODE, /* 50 - Lock is in passage mode, can't do remote unlock */
879 RESPONSETYPE_LAST
880 #if 0
883 * These should not be exposed to the user
885 RESPONSETYPE_NOREPLY, /* 51 - Do not send a reply, subroutine is posting its own */
886 RESPONSETYPE_TAKEABREAK, /* 52 - Intermediate return result, when log searches taking too long */
887 RESPONSETYPE_DPACBLOCKS, /* 53 - PWM lock, battery powered, DPAC takes priority */
888 RESPONSETYPE_ACKNAKTIMEOUT, /* 54 - Added for console.c, not used in lock firmware */
889 RESPONSETYPE_UNKNOWNCPUSPEED /* 55 - Unknown CPU speed (utils.c, utilCalculateClockRate()) */
890 #endif
892 responseType_e;
894 #if 0
895 typedef enum
897 SCHEDULERTYPE_HARDON = 0, /* 0 - Radio is always on */
898 SCHEDULERTYPE_SIMPLE, /* 1 - Simple 'x' minutes off, 'y' seconds on scheduler */
899 SCHEDULERTYPE_DOM, /* 2 - Day of month scheduling */
900 SCHEDULERTYPE_DOW, /* 3 - Day of week scheduling */
901 SCHEDULERTYPE_COMMUSER, /* 4 - Only a comm user triggers power on */
902 SCHEDULERTYPE_HOD, /* 5 - Hour of day scheduling */
903 SCHEDULERTYPE_OFF, /* 6 - Nothing wakes up radio */
904 SCHEDULERTYPE_LAST
906 schedulerType_e;
907 #endif
909 typedef enum
911 TIMEZONEMODE_NORMAL = 0, /* 0 - Timezone is applied to user, no auto unlocking */
912 TIMEZONEMODE_EXCLUSION, /* 1 - User NOT permitted access if in this zone at this time */
913 TIMEZONEMODE_AUTOTIME, /* 2 - Auto unlock at the start of the TZ, lock at end */
914 TIMEZONEMODE_AUTOFPT, /* 3 - Unlock on first person through, lock at end */
915 TIMEZONEMODE_UAPM, /* 4 - Permits user activated passage mode when active */
916 TIMEZONEMODE_LAST
918 timeZoneMode_e;
920 #if 0
921 typedef enum
923 UNLOCKMODE_NORMAL = 0, /* 0 - Normal unlock (CONFIGITEM_UNLOCK_TIME duration) */
924 UNLOCKMODE_UNLOCK, /* 1 - Unlock, switching to passage mode */
925 UNLOCKMODE_LOCK, /* 2 - Lock, regardless of mode */
926 UNLOCKMODE_LAST
928 unlockMode_e;
929 #endif
931 /* XXX: enum vals don't all match vals in comments ??? */
932 typedef enum
934 UPSTREAMCOMMAND_RESERVED = 0, /* 0 - Not used */
935 UPSTREAMCOMMAND_DEBUGMSG, /* 1 - Debug message (zero terminated) */
936 UPSTREAMCOMMAND_QUERYVERSION, /* 2 - Version string (zero terminated) */
937 UPSTREAMCOMMAND_QUERYDATETIME, /* 3 - Current date/time */
938 UPSTREAMCOMMAND_QUERYSERIALNUMBER, /* 5 - Serial number (MAX_SERIALNUM_LENGTH bytes) */
939 UPSTREAMCOMMAND_DUMPEVENTLOG, /* 6 - Event log record */
940 UPSTREAMCOMMAND_DUMPNVRAM, /* 7 - NVRAM dump record */
941 UPSTREAMCOMMAND_RMTAUTHREQUEST, /* 8 - Remote authorization request */
942 UPSTREAMCOMMAND_RETRIEVEUSER, /* 9 - Retrieve user record */
943 UPSTREAMCOMMAND_QUERYCONFIG, /* 10 - Query configuration */
944 UPSTREAMCOMMAND_RMTEVENTLOGRECORD, /* 11 - Remote event log record */
945 UPSTREAMCOMMAND_DPAC, /* 12 - DPAC related message */
946 UPSTREAMCOMMAND_NOTIFY, /* 14 - Notify user message */
947 UPSTREAMCOMMAND_MFG, /* 15 - Manufacturing data */
948 UPSTREAMCOMMAND_EVENTLOGWARNING, /* 16 - Event log warning level message */
949 UPSTREAMCOMMAND_DUMPNVRAMRLE, /* 17 - Run Length Encoded (RLE) NVRAM dump record */
950 UPSTREAMCOMMAND_RMTDECLINEDRECORD, /* 18 - Remote declined log record */
951 UPSTREAMCOMMAND_DECLINEDWARNING, /* 19 - Declined log warning level message */
952 UPSTREAMCOMMAND_DUMPDECLINEDLOG, /* 20 - Declined log record dump */
953 UPSTREAMCOMMAND_RMTALARMRECORD, /* 21 - Remote alarm log record */
954 UPSTREAMCOMMAND_ALARMWARNING, /* 22 - Alarm log warning level message */
955 UPSTREAMCOMMAND_DUMPALARMLOG, /* 23 - Alarm log record dump */
956 UPSTREAMCOMMAND_CONNECTSCHEDULER, /* 24 - Connection because of scheduler, contains serial number */
957 UPSTREAMCOMMAND_CONNECTCOMMUSER, /* 25 - Connection because of comm user, contains serial number */
958 UPSTREAMCOMMAND_CONNECTALARM, /* 26 - Connection because of alarm event, contains serial number */
959 UPSTREAMCOMMAND_DUMPDEBUGLOG, /* 27 - Debug log dump record */
960 UPSTREAMCOMMAND_LAST
962 upstreamCommand_e;
964 /* XXX: enum vals don't all match vals in comments ??? */
965 typedef enum
967 UPSTREAMFIELD_NOTUSED = 0, /* 0 - Not used */
968 UPSTREAMFIELD_SERIALNUMBER, /* 1 - Contains unit serial number */
969 UPSTREAMFIELD_NAR, /* 2 - Contains 16 bit Next Available Record */
970 UPSTREAMFIELD_ENTRYDEVICE, /* 3 - Contains a ppmSource_e */
971 UPSTREAMFIELD_PPMIFIELDTYPE, /* 4 - Contains a type of _PIN (auxFieldType_e) */
972 UPSTREAMFIELD_PIN, /* 5 - Contains a PIN, Prox, mag key */
973 UPSTREAMFIELD_SEQUENCENUMBER, /* 6 - Contains 16 bit sequence number */
974 UPSTREAMFIELD_RESPONSEWINDOW, /* 7 - Contains 8 bit response window (number of seconds) */
975 UPSTREAMFIELD_USERNUMBER, /* 8 - Contains 16 bit user number */
976 UPSTREAMFIELD_VERSION, /* 9 - Contains version string */
977 UPSTREAMFIELD_EVENTLOGRECORD, /* 10 - Contains eventLog_e event log record */
978 UPSTREAMFIELD_DATETIME, /* 11 - Contains 8 byte date/time data */
979 UPSTREAMFIELD_EVENTLOGRECORDCOUNT, /* 17 - Contains number of event log records */
980 UPSTREAMFIELD_DECLINEDRECORDCOUNT, /* 20 - Contains number of declined log records */
981 UPSTREAMFIELD_DECLINEDRECORD, /* 21 - Contains declinedLog_t declined log record */
982 UPSTREAMFIELD_USERTYPE, /* 23 - Contains the user type (master, emergency, normal, etc) */
983 UPSTREAMFIELD_ACCESSALWAYS, /* 24 - Contains the access always mode (true, false) */
984 UPSTREAMFIELD_CACHED, /* 25 - Contains the cached flag (true, false) */
985 UPSTREAMFIELD_PRIMARYFIELDTYPE, /* 26 - Contains the primary field type (pin, prox, mag) */
986 UPSTREAMFIELD_AUXFIELDTYPE, /* 27 - Contains the aux field type (pin, prox, mag) */
987 UPSTREAMFIELD_ACCESSMODE, /* 28 - Contains the access mode (aux only, aux + pin, aux or pin, etc) */
988 UPSTREAMFIELD_EXPIREON, /* 29 - Contains the date the user expires on (00/00/00 if not set) */
989 UPSTREAMFIELD_USECOUNT, /* 30 - Contains the use count (if user type is ONE_TIME) */
990 UPSTREAMFIELD_TIMEZONE, /* 31 - Contains the timezone bit map */
991 UPSTREAMFIELD_EXCEPTIONGROUP, /* 32 - Contains the exception group */
992 UPSTREAMFIELD_PRIMARYPIN, /* 33 - Contains the primary PPMI (ASCII, 0 terminated) */
993 UPSTREAMFIELD_AUXPIN, /* 34 - Contains the aux PPMI (ASCII, 0 terminated) */
994 UPSTREAMFIELD_ALARMRECORDCOUNT, /* 35 - Contains number of alarm log records */
995 UPSTREAMFIELD_ALARMRECORD, /* 36 - Contains alarmLog_t alarm log record */
996 UPSTREAMFIELD_AUXCTLRVERSION, /* 37 - Contains the version number of the auxiliary controller */
997 UPSTREAMFIELD_LAST
999 upstreamField_e;
1001 typedef enum
1003 USERTYPE_NONE = 0, /* 0 - No user */
1004 USERTYPE_MASTER, /* 1 - Master user (clears panic, relock, lockout and auto open) */
1005 USERTYPE_EMERGENCY, /* 2 - Opens door regardless of state */
1006 USERTYPE_SUPERVISOR, /* 3 - Like emergency user, except won't unlock when in panic mode */
1007 USERTYPE_USER, /* 4 - Generic user */
1008 USERTYPE_EXTENDED, /* 5 - Same as _USER, but strike can be kept open longer */
1009 USERTYPE_PASSAGE, /* 6 - Toggles strike between passage and non-passage modes */
1010 USERTYPE_ONETIME, /* 7 - User may be used one time */
1011 USERTYPE_PANIC, /* 8 - Locks down locks, no user except master valid */
1012 USERTYPE_LOCKOUT, /* 9 - Locks out regular, extended, passage, one time, and notify users */
1013 USERTYPE_RELOCK, /* 10 - Relock cancels passage mode, but can't unlock */
1014 USERTYPE_NOTIFY, /* 11 - Same as _USER, only sends unsolicited message to server */
1015 USERTYPE_COMM, /* 12 - Kicks a communications sessions off if not running _HARDON scheduler */
1016 USERTYPE_SUSPENDED, /* 13 - User is suspended */
1017 USERTYPE_LAST
1019 userType_e;
1022 #define ASSA_R3_PORT_RANGE "2571,8023" /* Neither are IANA registered */
1025 * Wireshark ID of the R3 protocol
1027 static int proto_r3;
1030 * Packet variables
1032 static int hf_r3_tildex3ds; /* Got ~~~ds */
1034 static int hf_r3_header; /* Packet header */
1035 static int hf_r3_payload; /* Packet payload */
1036 static int hf_r3_tail; /* Packet tail */
1038 static int hf_r3_sigil; /* Packet sigil */
1039 static int hf_r3_address; /* Packet address */
1040 static int hf_r3_packetnumber; /* Packet number */
1041 static int hf_r3_packetlength; /* Packet length */
1042 static int hf_r3_encryption; /* Packet encryption scheme */
1043 static int hf_r3_crc; /* Packet CRC */
1044 static int hf_r3_crc_bad; /* Packet CRC bad (for filtering) */
1045 static int hf_r3_xor; /* Packet Xor */
1046 static int hf_r3_xor_bad; /* Packet Xor bad (for filtering) */
1048 static int hf_r3_commandlength; /* Command length */
1049 static int hf_r3_command; /* Command (cmdCommand_e) */
1050 static int hf_r3_commanddata; /* Command data (not always present) */
1052 static int hf_r3_commandmfglength; /* Mfg Command length */
1053 static int hf_r3_commandmfg; /* Mfg Command (cmdCommand_e) */
1054 /*static int hf_r3_commandmfgdata;*/ /* Mfg Command data (not always present) */
1056 static int hf_r3_responselength; /* Response length */
1057 static int hf_r3_responsecommand; /* Response command */
1058 static int hf_r3_responsetype; /* Response type (responseType_e) */
1059 static int hf_r3_responsetocommand; /* Response to command (cmdCommand_e) */
1060 /*static int hf_r3_responsedata;*/ /* Response data (not always present) */
1062 static int hf_r3_upstreamcommand;
1064 static int hf_r3_upstreamfield; /* Upstream field (length + type + data) */
1065 static int hf_r3_upstreamfieldlength; /* Upstream field length */
1066 static int hf_r3_upstreamfieldtype; /* Upstream field type (upstreamField_e) */
1067 /*static int hf_r3_upstreamfielddatalen;*/ /* Upstream field data length */
1068 static int hf_r3_upstreamfielderror; /* Upstream field is unknown type */
1069 static int hf_r3_upstreamfieldarray[UPSTREAMFIELD_LAST];
1071 static int hf_r3_configitems;
1072 static int hf_r3_configitem;
1073 /*static int hf_r3_configfield;*/
1074 static int hf_r3_configitemlength;
1075 static int hf_r3_configitemtype;
1076 static int hf_r3_configitemdata;
1077 static int hf_r3_configitemdata_bool;
1078 static int hf_r3_configitemdata_8;
1079 static int hf_r3_configitemdata_16;
1080 static int hf_r3_configitemdata_32;
1081 static int hf_r3_configitemdata_string;
1083 static int hf_r3_timezonearray0;
1084 static int hf_r3_timezonearray1;
1085 static int hf_r3_timezonearray2;
1086 static int hf_r3_timezonearray3;
1087 static int hf_r3_timezonearray4;
1088 static int hf_r3_timezonearray5;
1089 static int hf_r3_timezonearray6;
1090 static int hf_r3_timezonearray7;
1091 static int hf_r3_timezonearray8;
1092 static int hf_r3_timezonearray9;
1093 static int hf_r3_timezonearray10;
1094 static int hf_r3_timezonearray11;
1095 static int hf_r3_timezonearray12;
1096 static int hf_r3_timezonearray13;
1097 static int hf_r3_timezonearray14;
1098 static int hf_r3_timezonearray15;
1099 static int hf_r3_timezonearray16;
1100 static int hf_r3_timezonearray17;
1101 static int hf_r3_timezonearray18;
1102 static int hf_r3_timezonearray19;
1103 static int hf_r3_timezonearray20;
1104 static int hf_r3_timezonearray21;
1105 static int hf_r3_timezonearray22;
1106 static int hf_r3_timezonearray23;
1107 static int hf_r3_timezonearray24;
1108 static int hf_r3_timezonearray25;
1109 static int hf_r3_timezonearray26;
1110 static int hf_r3_timezonearray27;
1111 static int hf_r3_timezonearray28;
1112 static int hf_r3_timezonearray29;
1113 static int hf_r3_timezonearray30;
1114 static int hf_r3_timezonearray31;
1116 static int hf_r3_expireon_year;
1117 static int hf_r3_expireon_month;
1118 static int hf_r3_expireon_day;
1120 static int hf_r3_datetime_year;
1121 static int hf_r3_datetime_month;
1122 static int hf_r3_datetime_day;
1123 static int hf_r3_datetime_dow;
1124 static int hf_r3_datetime_hours;
1125 static int hf_r3_datetime_minutes;
1126 static int hf_r3_datetime_seconds;
1127 static int hf_r3_datetime_dst;
1129 static int hf_r3_eventlog_recordnumber;
1130 static int hf_r3_eventlog_year;
1131 static int hf_r3_eventlog_month;
1132 static int hf_r3_eventlog_day;
1133 static int hf_r3_eventlog_hour;
1134 static int hf_r3_eventlog_minute;
1135 static int hf_r3_eventlog_second;
1136 static int hf_r3_eventlog_usernumber;
1137 static int hf_r3_eventlog_event;
1139 static int hf_r3_declinedlog_recordnumber;
1140 static int hf_r3_declinedlog_year;
1141 static int hf_r3_declinedlog_month;
1142 static int hf_r3_declinedlog_day;
1143 static int hf_r3_declinedlog_hour;
1144 static int hf_r3_declinedlog_minute;
1145 static int hf_r3_declinedlog_second;
1146 static int hf_r3_declinedlog_usernumber;
1147 static int hf_r3_declinedlog_cred1type;
1148 static int hf_r3_declinedlog_cred2type;
1149 static int hf_r3_declinedlog_cred1;
1150 static int hf_r3_declinedlog_cred2;
1152 static int hf_r3_alarmlog_recordnumber;
1153 static int hf_r3_alarmlog_year;
1154 static int hf_r3_alarmlog_month;
1155 static int hf_r3_alarmlog_day;
1156 static int hf_r3_alarmlog_hour;
1157 static int hf_r3_alarmlog_minute;
1158 static int hf_r3_alarmlog_second;
1159 static int hf_r3_alarmlog_id;
1160 static int hf_r3_alarmlog_usernumber;
1162 static int hf_r3_debugmsg;
1164 static int hf_r3_setdate_year;
1165 static int hf_r3_setdate_month;
1166 static int hf_r3_setdate_day;
1167 static int hf_r3_setdate_dow;
1168 static int hf_r3_setdate_hours;
1169 static int hf_r3_setdate_minutes;
1170 static int hf_r3_setdate_seconds;
1172 static int hf_r3_deleteusers;
1174 static int hf_r3_defineexception_number;
1175 static int hf_r3_defineexception_startdate_month;
1176 static int hf_r3_defineexception_startdate_day;
1177 static int hf_r3_defineexception_startdate_hours;
1178 static int hf_r3_defineexception_startdate_minutes;
1179 static int hf_r3_defineexception_enddate_month;
1180 static int hf_r3_defineexception_enddate_day;
1181 static int hf_r3_defineexception_enddate_hours;
1182 static int hf_r3_defineexception_enddate_minutes;
1184 static int hf_r3_defineexceptiongroup_number;
1185 static int hf_r3_defineexceptiongroup_bits;
1187 static int hf_r3_definecalendar_number;
1188 static int hf_r3_definecalendar_bits;
1190 static int hf_r3_definetimezone_number;
1191 static int hf_r3_definetimezone_starttime_hours;
1192 static int hf_r3_definetimezone_starttime_minutes;
1193 static int hf_r3_definetimezone_endtime_hours;
1194 static int hf_r3_definetimezone_endtime_minutes;
1195 static int hf_r3_definetimezone_daymap;
1196 static int hf_r3_definetimezone_daymap0;
1197 static int hf_r3_definetimezone_daymap1;
1198 static int hf_r3_definetimezone_daymap2;
1199 static int hf_r3_definetimezone_daymap3;
1200 static int hf_r3_definetimezone_daymap4;
1201 static int hf_r3_definetimezone_daymap5;
1202 static int hf_r3_definetimezone_daymap6;
1203 static int hf_r3_definetimezone_exceptiongroup;
1204 static int hf_r3_definetimezone_mode;
1205 static int hf_r3_definetimezone_calendar;
1207 static int hf_r3_rmtauthretry_sequence;
1208 static int hf_r3_rmtauthretry_retry;
1210 static int hf_r3_eventlogdump_starttime_year;
1211 static int hf_r3_eventlogdump_starttime_month;
1212 static int hf_r3_eventlogdump_starttime_day;
1213 static int hf_r3_eventlogdump_starttime_hours;
1214 static int hf_r3_eventlogdump_starttime_minutes;
1215 static int hf_r3_eventlogdump_endtime_year;
1216 static int hf_r3_eventlogdump_endtime_month;
1217 static int hf_r3_eventlogdump_endtime_day;
1218 static int hf_r3_eventlogdump_endtime_hours;
1219 static int hf_r3_eventlogdump_endtime_minutes;
1220 static int hf_r3_eventlogdump_user;
1222 static int hf_r3_declinedlogdump_starttime_year;
1223 static int hf_r3_declinedlogdump_starttime_month;
1224 static int hf_r3_declinedlogdump_starttime_day;
1225 static int hf_r3_declinedlogdump_starttime_hours;
1226 static int hf_r3_declinedlogdump_starttime_minutes;
1227 static int hf_r3_declinedlogdump_endtime_year;
1228 static int hf_r3_declinedlogdump_endtime_month;
1229 static int hf_r3_declinedlogdump_endtime_day;
1230 static int hf_r3_declinedlogdump_endtime_hours;
1231 static int hf_r3_declinedlogdump_endtime_minutes;
1233 static int hf_r3_alarmlogdump_starttime_year;
1234 static int hf_r3_alarmlogdump_starttime_month;
1235 static int hf_r3_alarmlogdump_starttime_day;
1236 static int hf_r3_alarmlogdump_starttime_hours;
1237 static int hf_r3_alarmlogdump_starttime_minutes;
1238 static int hf_r3_alarmlogdump_endtime_year;
1239 static int hf_r3_alarmlogdump_endtime_month;
1240 static int hf_r3_alarmlogdump_endtime_day;
1241 static int hf_r3_alarmlogdump_endtime_hours;
1242 static int hf_r3_alarmlogdump_endtime_minutes;
1244 static int hf_r3_nvramclearoptions;
1245 static int hf_r3_nvramclearoptions0;
1246 static int hf_r3_nvramclearoptions1;
1247 static int hf_r3_nvramclearoptions2;
1248 static int hf_r3_nvramclearoptions3;
1249 static int hf_r3_nvramclearoptions4;
1250 static int hf_r3_nvramclearoptions5;
1251 static int hf_r3_nvramclearoptions6;
1252 static int hf_r3_nvramclearoptions7;
1253 static int hf_r3_nvramclearoptions8;
1254 static int hf_r3_nvramclearoptions9;
1255 static int hf_r3_nvramclearoptions10;
1256 static int hf_r3_nvramclearoptions11;
1257 static int hf_r3_nvramclearoptions12;
1258 static int hf_r3_nvramclearoptions13;
1259 static int hf_r3_nvramclearoptions14;
1260 static int hf_r3_nvramclearoptions15;
1262 static int hf_r3_writeeventlog_user;
1263 static int hf_r3_writeeventlog_event;
1265 static int hf_r3_powertableselection;
1267 static int hf_r3_filter_type;
1268 static int hf_r3_filter_list;
1270 static int hf_r3_alarm_length;
1271 static int hf_r3_alarm_id;
1272 static int hf_r3_alarm_state;
1274 static int hf_r3_dpac_action;
1275 static int hf_r3_dpac_waittime;
1276 static int hf_r3_dpac_command;
1278 static int hf_r3_dpacreply_stuff;
1279 static int hf_r3_dpacreply_length;
1280 static int hf_r3_dpacreply_reply;
1282 static int hf_r3_mfgfield_length;
1283 static int hf_r3_mfgfield;
1284 /*static int hf_r3_mfgfield_data;*/
1286 static int hf_r3_mfgsetserialnumber;
1287 static int hf_r3_mfgsetcryptkey;
1288 static int hf_r3_mfgdumpnvram;
1289 static int hf_r3_mfgremoteunlock;
1290 static int hf_r3_mfgtestpreserve;
1292 static int hf_r3_adc [8];
1294 static int hf_r3_hardwareid_board;
1295 static int hf_r3_hardwareid_cpuid;
1296 static int hf_r3_hardwareid_cpurev;
1298 static int hf_r3_testkeypad;
1299 static int hf_r3_testmagcard;
1300 static int hf_r3_testproxcard;
1302 static int hf_r3_nvramdump_record;
1303 static int hf_r3_nvramdump_length;
1304 static int hf_r3_nvramdump_data;
1306 static int hf_r3_nvramdumprle_record;
1307 static int hf_r3_nvramdumprle_length;
1308 static int hf_r3_nvramdumprle_data;
1310 static int hf_r3_iopins_lat;
1311 static int hf_r3_iopins_port;
1312 static int hf_r3_iopins_tris;
1314 static int hf_r3_mortisepins_s1;
1315 static int hf_r3_mortisepins_s2;
1316 static int hf_r3_mortisepins_s3;
1317 static int hf_r3_mortisepins_s4;
1319 static int hf_r3_checksumresults;
1320 static int hf_r3_checksumresults_field;
1321 static int hf_r3_checksumresults_length;
1322 static int hf_r3_checksumresults_state;
1324 static int hf_r3_forceoptions_length;
1325 static int hf_r3_forceoptions_item;
1326 static int hf_r3_forceoptions_state_8;
1327 static int hf_r3_forceoptions_state_16;
1328 static int hf_r3_forceoptions_state_24;
1329 static int hf_r3_forceoptions_state_32;
1331 static int hf_r3_peekpoke_operation;
1332 static int hf_r3_peekpoke_address;
1333 static int hf_r3_peekpoke_length;
1334 static int hf_r3_peekpoke_poke8;
1335 static int hf_r3_peekpoke_poke16;
1336 static int hf_r3_peekpoke_poke24;
1337 static int hf_r3_peekpoke_poke32;
1338 static int hf_r3_peekpoke_pokestring;
1340 static int hf_r3_firmwaredownload_length;
1341 static int hf_r3_firmwaredownload_record;
1342 static int hf_r3_firmwaredownload_action;
1343 static int hf_r3_firmwaredownload_timeout;
1344 static int hf_r3_firmwaredownload_nvram;
1345 static int hf_r3_firmwaredownload_address;
1346 static int hf_r3_firmwaredownload_bytes;
1347 static int hf_r3_firmwaredownload_data;
1348 static int hf_r3_firmwaredownload_crc;
1349 static int hf_r3_firmwaredownload_crc_bad;
1351 static int hf_r3_nvramchecksumvalue;
1352 static int hf_r3_nvramchecksumvalue_fixup;
1354 static int hf_r3_capabilities;
1355 static int hf_r3_capabilities_length;
1356 static int hf_r3_capabilities_type;
1357 static int hf_r3_capabilities_value;
1359 static int hf_r3_lockstate;
1360 static int hf_r3_lockstate_passage;
1361 static int hf_r3_lockstate_panic;
1362 static int hf_r3_lockstate_lockout;
1363 static int hf_r3_lockstate_relock;
1364 static int hf_r3_lockstate_autoopen;
1365 static int hf_r3_lockstate_nextauto;
1366 static int hf_r3_lockstate_lockstate;
1367 static int hf_r3_lockstate_wantstate;
1368 static int hf_r3_lockstate_remote;
1369 static int hf_r3_lockstate_update;
1370 static int hf_r3_lockstate_exceptionspresent;
1371 static int hf_r3_lockstate_exceptionsactive;
1372 static int hf_r3_lockstate_timezonespresent;
1373 static int hf_r3_lockstate_timezonesactive;
1374 static int hf_r3_lockstate_autounlockspresent;
1375 static int hf_r3_lockstate_autounlocksactive;
1376 static int hf_r3_lockstate_uapmspresent;
1377 static int hf_r3_lockstate_uapmsactive;
1378 static int hf_r3_lockstate_uapmrelockspresent;
1379 static int hf_r3_lockstate_uapmreslocksactive;
1380 static int hf_r3_lockstate_nvramprotect;
1381 static int hf_r3_lockstate_nvramchecksum;
1383 /*static int hf_r3_mortisestatelog;*/
1384 static int hf_r3_mortisestatelog_pointer;
1385 static int hf_r3_mortisestatelog_mortisetype;
1386 static int hf_r3_mortisestatelog_waiting;
1387 static int hf_r3_mortisestatelog_state;
1388 static int hf_r3_mortisestatelog_last;
1389 static int hf_r3_mortisestatelog_event;
1391 static int hf_r3_timerchain_newtick;
1392 static int hf_r3_timerchain_currentboundary;
1393 static int hf_r3_timerchain_tasktag;
1394 static int hf_r3_timerchain_address;
1395 static int hf_r3_timerchain_reload;
1396 static int hf_r3_timerchain_boundary;
1397 static int hf_r3_timerchain_count;
1398 static int hf_r3_timerchain_flags;
1400 static int hf_r3_taskflags_taskid;
1401 static int hf_r3_taskflags_flags;
1403 static int hf_r3_checkpointlog_entryptr;
1404 static int hf_r3_checkpointlog_rcon;
1405 static int hf_r3_checkpointlog_checkpoint;
1407 static int hf_r3_cpuregisters_intcon;
1408 static int hf_r3_cpuregisters_intcon2;
1409 static int hf_r3_cpuregisters_intcon3;
1410 static int hf_r3_cpuregisters_pir1;
1411 static int hf_r3_cpuregisters_pir2;
1412 static int hf_r3_cpuregisters_pir3;
1413 static int hf_r3_cpuregisters_pie1;
1414 static int hf_r3_cpuregisters_pie2;
1415 static int hf_r3_cpuregisters_pie3;
1416 static int hf_r3_cpuregisters_ipr1;
1417 static int hf_r3_cpuregisters_ipr2;
1418 static int hf_r3_cpuregisters_ipr3;
1419 static int hf_r3_cpuregisters_rcon;
1420 static int hf_r3_cpuregisters_osccon;
1421 static int hf_r3_cpuregisters_rcsta;
1422 static int hf_r3_cpuregisters_txsta;
1423 static int hf_r3_cpuregisters_rcsta2;
1424 static int hf_r3_cpuregisters_txsta2;
1425 static int hf_r3_cpuregisters_wdtcon;
1427 static int hf_r3_cpuregisters_intcon_rbif;
1428 static int hf_r3_cpuregisters_intcon_int0if;
1429 static int hf_r3_cpuregisters_intcon_tmr0if;
1430 static int hf_r3_cpuregisters_intcon_rbie;
1431 static int hf_r3_cpuregisters_intcon_int0ie;
1432 static int hf_r3_cpuregisters_intcon_tmr0ie;
1433 static int hf_r3_cpuregisters_intcon_giel;
1434 static int hf_r3_cpuregisters_intcon_gieh;
1435 static int hf_r3_cpuregisters_intcon2_rbip;
1436 static int hf_r3_cpuregisters_intcon2_int3ip;
1437 static int hf_r3_cpuregisters_intcon2_tmr0ip;
1438 static int hf_r3_cpuregisters_intcon2_intedg3;
1439 static int hf_r3_cpuregisters_intcon2_intedg2;
1440 static int hf_r3_cpuregisters_intcon2_intedg1;
1441 static int hf_r3_cpuregisters_intcon2_intedg0;
1442 static int hf_r3_cpuregisters_intcon2_rbpu;
1443 static int hf_r3_cpuregisters_intcon3_int1if;
1444 static int hf_r3_cpuregisters_intcon3_int2if;
1445 static int hf_r3_cpuregisters_intcon3_int3if;
1446 static int hf_r3_cpuregisters_intcon3_int1ie;
1447 static int hf_r3_cpuregisters_intcon3_int2ie;
1448 static int hf_r3_cpuregisters_intcon3_int3ie;
1449 static int hf_r3_cpuregisters_intcon3_int1ip;
1450 static int hf_r3_cpuregisters_intcon3_int2ip;
1451 static int hf_r3_cpuregisters_pir1_tmr1if;
1452 static int hf_r3_cpuregisters_pir1_tmr2if;
1453 static int hf_r3_cpuregisters_pir1_ccp1if;
1454 static int hf_r3_cpuregisters_pir1_ssp1if;
1455 static int hf_r3_cpuregisters_pir1_tx1if;
1456 static int hf_r3_cpuregisters_pir1_rc1if;
1457 static int hf_r3_cpuregisters_pir1_adif;
1458 static int hf_r3_cpuregisters_pir1_pspif;
1459 static int hf_r3_cpuregisters_pir2_ccp2if;
1460 static int hf_r3_cpuregisters_pir2_tmr3if;
1461 static int hf_r3_cpuregisters_pir2_hlvdif;
1462 static int hf_r3_cpuregisters_pir2_bcl1if;
1463 static int hf_r3_cpuregisters_pir2_eeif;
1464 static int hf_r3_cpuregisters_pir2_unused5;
1465 static int hf_r3_cpuregisters_pir2_cmif;
1466 static int hf_r3_cpuregisters_pir2_oscfif;
1467 static int hf_r3_cpuregisters_pir3_ccp3if;
1468 static int hf_r3_cpuregisters_pir3_ccp4if;
1469 static int hf_r3_cpuregisters_pir3_ccp5if;
1470 static int hf_r3_cpuregisters_pir3_tmr4if;
1471 static int hf_r3_cpuregisters_pir3_tx2if;
1472 static int hf_r3_cpuregisters_pir3_rc2if;
1473 static int hf_r3_cpuregisters_pir3_bcl2if;
1474 static int hf_r3_cpuregisters_pir3_ssp2if;
1475 static int hf_r3_cpuregisters_pie1_tmr1ie;
1476 static int hf_r3_cpuregisters_pie1_tmr2ie;
1477 static int hf_r3_cpuregisters_pie1_ccp1ie;
1478 static int hf_r3_cpuregisters_pie1_ssp1ie;
1479 static int hf_r3_cpuregisters_pie1_tx1ie;
1480 static int hf_r3_cpuregisters_pie1_rc1ie;
1481 static int hf_r3_cpuregisters_pie1_adie;
1482 static int hf_r3_cpuregisters_pie1_pspie;
1483 static int hf_r3_cpuregisters_pie2_oscfie;
1484 static int hf_r3_cpuregisters_pie2_cmie;
1485 static int hf_r3_cpuregisters_pie2_unused2;
1486 static int hf_r3_cpuregisters_pie2_eeie;
1487 static int hf_r3_cpuregisters_pie2_bcl1ie;
1488 static int hf_r3_cpuregisters_pie2_hlvdie;
1489 static int hf_r3_cpuregisters_pie2_tmr3ie;
1490 static int hf_r3_cpuregisters_pie2_ccp2ie;
1491 static int hf_r3_cpuregisters_pie3_ccp3ie;
1492 static int hf_r3_cpuregisters_pie3_ccp4ie;
1493 static int hf_r3_cpuregisters_pie3_ccp5ie;
1494 static int hf_r3_cpuregisters_pie3_tmr4ie;
1495 static int hf_r3_cpuregisters_pie3_tx2ie;
1496 static int hf_r3_cpuregisters_pie3_rc2ie;
1497 static int hf_r3_cpuregisters_pie3_bcl2ie;
1498 static int hf_r3_cpuregisters_pie3_ssp2ie;
1499 static int hf_r3_cpuregisters_ipr1_tmr1ip;
1500 static int hf_r3_cpuregisters_ipr1_tmr2ip;
1501 static int hf_r3_cpuregisters_ipr1_ccp1ip;
1502 static int hf_r3_cpuregisters_ipr1_ssp1ip;
1503 static int hf_r3_cpuregisters_ipr1_tx1ip;
1504 static int hf_r3_cpuregisters_ipr1_rc1ip;
1505 static int hf_r3_cpuregisters_ipr1_adip;
1506 static int hf_r3_cpuregisters_ipr1_pspip;
1507 static int hf_r3_cpuregisters_ipr2_ccp2ip;
1508 static int hf_r3_cpuregisters_ipr2_tmr3ip;
1509 static int hf_r3_cpuregisters_ipr2_hlvdip;
1510 static int hf_r3_cpuregisters_ipr2_bcl1ip;
1511 static int hf_r3_cpuregisters_ipr2_eeip;
1512 static int hf_r3_cpuregisters_ipr2_unused5;
1513 static int hf_r3_cpuregisters_ipr2_cmip;
1514 static int hf_r3_cpuregisters_ipr2_oscfip;
1515 static int hf_r3_cpuregisters_ipr3_ccp2ip;
1516 static int hf_r3_cpuregisters_ipr3_ccp4ip;
1517 static int hf_r3_cpuregisters_ipr3_ccp5ip;
1518 static int hf_r3_cpuregisters_ipr3_tmr4ip;
1519 static int hf_r3_cpuregisters_ipr3_tx2ip;
1520 static int hf_r3_cpuregisters_ipr3_rc2ip;
1521 static int hf_r3_cpuregisters_ipr3_bcl2ip;
1522 static int hf_r3_cpuregisters_ipr3_ssp2ip;
1523 static int hf_r3_cpuregisters_rcon_bor;
1524 static int hf_r3_cpuregisters_rcon_por;
1525 static int hf_r3_cpuregisters_rcon_pd;
1526 static int hf_r3_cpuregisters_rcon_to;
1527 static int hf_r3_cpuregisters_rcon_unused4;
1528 static int hf_r3_cpuregisters_rcon_ri;
1529 static int hf_r3_cpuregisters_rcon_sboren;
1530 static int hf_r3_cpuregisters_rcon_ipen;
1531 static int hf_r3_cpuregisters_osccon_scs0;
1532 static int hf_r3_cpuregisters_osccon_scs1;
1533 static int hf_r3_cpuregisters_osccon_iofs;
1534 static int hf_r3_cpuregisters_osccon_osts;
1535 static int hf_r3_cpuregisters_osccon_ircf0;
1536 static int hf_r3_cpuregisters_osccon_ircf1;
1537 static int hf_r3_cpuregisters_osccon_ircf2;
1538 static int hf_r3_cpuregisters_osccon_idlen;
1539 static int hf_r3_cpuregisters_rcsta_rx9d;
1540 static int hf_r3_cpuregisters_rcsta_oerr;
1541 static int hf_r3_cpuregisters_rcsta_ferr;
1542 static int hf_r3_cpuregisters_rcsta_adden;
1543 static int hf_r3_cpuregisters_rcsta_cren;
1544 static int hf_r3_cpuregisters_rcsta_sren;
1545 static int hf_r3_cpuregisters_rcsta_rx9;
1546 static int hf_r3_cpuregisters_rcsta_spen;
1547 static int hf_r3_cpuregisters_txsta_tx9d;
1548 static int hf_r3_cpuregisters_txsta_trmt;
1549 static int hf_r3_cpuregisters_txsta_brgh;
1550 static int hf_r3_cpuregisters_txsta_sendb;
1551 static int hf_r3_cpuregisters_txsta_sync;
1552 static int hf_r3_cpuregisters_txsta_txen;
1553 static int hf_r3_cpuregisters_txsta_tx9;
1554 static int hf_r3_cpuregisters_txsta_csrc;
1555 static int hf_r3_cpuregisters_rcsta2_rx9d;
1556 static int hf_r3_cpuregisters_rcsta2_oerr;
1557 static int hf_r3_cpuregisters_rcsta2_ferr;
1558 static int hf_r3_cpuregisters_rcsta2_adden;
1559 static int hf_r3_cpuregisters_rcsta2_cren;
1560 static int hf_r3_cpuregisters_rcsta2_sren;
1561 static int hf_r3_cpuregisters_rcsta2_rx9;
1562 static int hf_r3_cpuregisters_rcsta2_spen;
1563 static int hf_r3_cpuregisters_txsta2_tx9d;
1564 static int hf_r3_cpuregisters_txsta2_trmt;
1565 static int hf_r3_cpuregisters_txsta2_brgh;
1566 static int hf_r3_cpuregisters_txsta2_sendb;
1567 static int hf_r3_cpuregisters_txsta2_sync;
1568 static int hf_r3_cpuregisters_txsta2_txen;
1569 static int hf_r3_cpuregisters_txsta2_tx9;
1570 static int hf_r3_cpuregisters_txsta2_csrc;
1571 static int hf_r3_cpuregisters_wdtcon_swdten;
1572 static int hf_r3_cpuregisters_wdtcon_unused1;
1573 static int hf_r3_cpuregisters_wdtcon_unused2;
1574 static int hf_r3_cpuregisters_wdtcon_unused3;
1575 static int hf_r3_cpuregisters_wdtcon_unused4;
1576 static int hf_r3_cpuregisters_wdtcon_unused5;
1577 static int hf_r3_cpuregisters_wdtcon_unused6;
1578 static int hf_r3_cpuregisters_wdtcon_unused7;
1580 static int hf_r3_dumpm41t81_reg00;
1581 static int hf_r3_dumpm41t81_reg01;
1582 static int hf_r3_dumpm41t81_reg02;
1583 static int hf_r3_dumpm41t81_reg03;
1584 static int hf_r3_dumpm41t81_reg04;
1585 static int hf_r3_dumpm41t81_reg05;
1586 static int hf_r3_dumpm41t81_reg06;
1587 static int hf_r3_dumpm41t81_reg07;
1588 static int hf_r3_dumpm41t81_reg08;
1589 static int hf_r3_dumpm41t81_reg09;
1590 static int hf_r3_dumpm41t81_reg0a;
1591 static int hf_r3_dumpm41t81_reg0b;
1592 static int hf_r3_dumpm41t81_reg0c;
1593 static int hf_r3_dumpm41t81_reg0d;
1594 static int hf_r3_dumpm41t81_reg0e;
1595 static int hf_r3_dumpm41t81_reg0f;
1596 static int hf_r3_dumpm41t81_reg10;
1597 static int hf_r3_dumpm41t81_reg11;
1598 static int hf_r3_dumpm41t81_reg12;
1599 static int hf_r3_dumpm41t81_reg13;
1601 static int hf_r3_dumpm41t81_reg00_sec1;
1602 static int hf_r3_dumpm41t81_reg00_sec01;
1603 static int hf_r3_dumpm41t81_reg01_st;
1604 static int hf_r3_dumpm41t81_reg01_10sec;
1605 static int hf_r3_dumpm41t81_reg01_1sec;
1606 static int hf_r3_dumpm41t81_reg02_notused;
1607 static int hf_r3_dumpm41t81_reg02_10min;
1608 static int hf_r3_dumpm41t81_reg02_1min;
1609 static int hf_r3_dumpm41t81_reg03_cbe;
1610 static int hf_r3_dumpm41t81_reg03_cb;
1611 static int hf_r3_dumpm41t81_reg03_10hour;
1612 static int hf_r3_dumpm41t81_reg03_1hour;
1613 static int hf_r3_dumpm41t81_reg04_notused;
1614 static int hf_r3_dumpm41t81_reg04_dow;
1615 static int hf_r3_dumpm41t81_reg05_notused;
1616 static int hf_r3_dumpm41t81_reg05_10day;
1617 static int hf_r3_dumpm41t81_reg05_1day;
1618 static int hf_r3_dumpm41t81_reg06_notused;
1619 static int hf_r3_dumpm41t81_reg06_10month;
1620 static int hf_r3_dumpm41t81_reg06_1month;
1621 static int hf_r3_dumpm41t81_reg07_10year;
1622 static int hf_r3_dumpm41t81_reg07_1year;
1623 static int hf_r3_dumpm41t81_reg08_out;
1624 static int hf_r3_dumpm41t81_reg08_ft;
1625 static int hf_r3_dumpm41t81_reg08_s;
1626 static int hf_r3_dumpm41t81_reg08_cal;
1627 static int hf_r3_dumpm41t81_reg09_notused;
1628 static int hf_r3_dumpm41t81_reg09_bmb;
1629 static int hf_r3_dumpm41t81_reg09_rb;
1630 static int hf_r3_dumpm41t81_reg0a_afe;
1631 static int hf_r3_dumpm41t81_reg0a_sqwe;
1632 static int hf_r3_dumpm41t81_reg0a_abe;
1633 static int hf_r3_dumpm41t81_reg0a_10monthalm;
1634 static int hf_r3_dumpm41t81_reg0a_1monthalm;
1635 static int hf_r3_dumpm41t81_reg0b_rpt5;
1636 static int hf_r3_dumpm41t81_reg0b_rpt4;
1637 static int hf_r3_dumpm41t81_reg0b_10dayalm;
1638 static int hf_r3_dumpm41t81_reg0b_1dayalm;
1639 static int hf_r3_dumpm41t81_reg0c_rpt3;
1640 static int hf_r3_dumpm41t81_reg0c_ht;
1641 static int hf_r3_dumpm41t81_reg0c_10houralm;
1642 static int hf_r3_dumpm41t81_reg0c_1houralm;
1643 static int hf_r3_dumpm41t81_reg0d_rpt2;
1644 static int hf_r3_dumpm41t81_reg0d_10minalm;
1645 static int hf_r3_dumpm41t81_reg0d_1minalm;
1646 static int hf_r3_dumpm41t81_reg0e_rpt1;
1647 static int hf_r3_dumpm41t81_reg0e_10secalm;
1648 static int hf_r3_dumpm41t81_reg0e_1secalm;
1649 static int hf_r3_dumpm41t81_reg0f_wdf;
1650 static int hf_r3_dumpm41t81_reg0f_af;
1651 static int hf_r3_dumpm41t81_reg0f_notused;
1652 static int hf_r3_dumpm41t81_reg10_notused;
1653 static int hf_r3_dumpm41t81_reg11_notused;
1654 static int hf_r3_dumpm41t81_reg12_notused;
1655 static int hf_r3_dumpm41t81_reg13_rs;
1656 static int hf_r3_dumpm41t81_reg13_notused;
1658 static int hf_r3_sn_manufacturer;
1659 static int hf_r3_sn_year;
1660 static int hf_r3_sn_week;
1661 static int hf_r3_sn_model;
1662 static int hf_r3_sn_sequence;
1663 static int hf_r3_sn_group;
1664 static int hf_r3_sn_nid;
1665 static int hf_r3_sn_hid;
1666 static int hf_r3_sn_power_supply;
1667 static int hf_r3_sn_mortise;
1669 static int hf_r3_debuglog_recordnumber;
1670 static int hf_r3_debuglog_flags;
1671 static int hf_r3_debuglog_tick;
1673 static int hf_r3_adduserparamtype;
1674 static int hf_r3_adduserparamtypelength;
1675 static int hf_r3_adduserparamtypetype;
1676 /*static int hf_r3_adduserparamtypedatalen;*/
1677 /*static int hf_r3_adduserparamtypeerror;*/
1678 static int hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_LAST];
1680 static int ett_r3;
1681 static int ett_r3header;
1682 static int ett_r3tail;
1683 static int ett_r3payload;
1684 static int ett_r3cmd;
1685 static int ett_r3configitem;
1686 static int ett_r3upstreamcommand;
1687 static int ett_r3upstreamfield;
1688 static int ett_r3timezone;
1689 static int ett_r3expireon;
1690 static int ett_r3datetime;
1691 static int ett_r3eventlogrecord;
1692 static int ett_r3declinedlogrecord;
1693 static int ett_r3alarmlogrecord;
1694 static int ett_r3debugmsg;
1695 static int ett_r3defineexceptionstartdate;
1696 static int ett_r3defineexceptionenddate;
1697 static int ett_r3defineexceptiongroupbits;
1698 static int ett_r3definecalendarmonth[13];
1699 static int ett_r3definetimezonestarttime;
1700 static int ett_r3definetimezoneendtime;
1701 static int ett_r3definetimezonedaymap;
1702 static int ett_r3eventlogdumpstarttime;
1703 static int ett_r3eventlogdumpendtime;
1704 static int ett_r3declinedlogdumpstarttime;
1705 static int ett_r3declinedlogdumpendtime;
1706 static int ett_r3alarmlogdumpstarttime;
1707 static int ett_r3alarmlogdumpendtime;
1708 static int ett_r3clearnvram;
1709 static int ett_r3filters;
1710 static int ett_r3alarmlist;
1711 static int ett_r3alarmcfg;
1712 static int ett_r3commandmfg;
1713 static int ett_r3serialnumber;
1714 static int ett_r3iopins;
1715 static int ett_r3checksumresults;
1716 static int ett_r3checksumresultsfield;
1717 static int ett_r3forceoptions;
1718 static int ett_r3peekpoke;
1719 static int ett_r3downloadfirmware;
1720 static int ett_r3capabilities;
1721 static int ett_r3lockstate;
1722 static int ett_r3mortisestatelog;
1723 static int ett_r3timerchain;
1724 static int ett_r3taskflags;
1725 static int ett_r3taskflagsentry;
1726 static int ett_r3checkpointlog;
1727 static int ett_r3checkpointlogentry;
1728 static int ett_r3cpuregisters;
1729 static int ett_r3cpuregister;
1730 static int ett_r3m41t81registers;
1731 static int ett_r3m41t81register;
1732 static int ett_r3debuglogrecord;
1733 static int ett_r3setdatetime;
1734 static int ett_r3manageuser;
1736 static expert_field ei_r3_response_hasdata_octet_2;
1737 static expert_field ei_r3_mfgfield_too_many_adc_values;
1738 static expert_field ei_r3_peekpoke_operation;
1739 static expert_field ei_r3_response_hasdata_octet_1;
1740 static expert_field ei_r3_reserved_upstream_command_value;
1741 static expert_field ei_r3_firmwaredownload_action;
1742 static expert_field ei_r3_malformed_length;
1743 static expert_field ei_r3_mfgfield;
1744 static expert_field ei_r3_unknown_command_value;
1745 static expert_field ei_r3_response_hasdata_octet_3;
1746 static expert_field ei_r3_cmd_downloadfirmwaretimeout;
1748 static dissector_handle_t r3_handle;
1751 * Indicates next command to be processed as a manufacturing command
1753 static int mfgCommandFlag;
1756 * Some enums that don't exist in public.h and should
1758 typedef enum
1760 CHECKPOINT_NONE = 0,
1761 CHECKPOINT_ADC,
1762 CHECKPOINT_DPAC1,
1763 CHECKPOINT_DPAC2,
1764 CHECKPOINT_I2C1,
1765 CHECKPOINT_I2C2,
1766 CHECKPOINT_I2C3,
1767 CHECKPOINT_I2C4,
1768 CHECKPOINT_I2C5,
1769 CHECKPOINT_I2C6,
1770 CHECKPOINT_I2C7,
1771 CHECKPOINT_I2C8,
1772 CHECKPOINT_I2C9,
1773 CHECKPOINT_I2C10,
1774 CHECKPOINT_I2C11,
1775 CHECKPOINT_I2C12,
1776 CHECKPOINT_I2C13,
1777 CHECKPOINT_I2C14,
1778 CHECKPOINT_I2C15,
1779 CHECKPOINT_I2C16,
1780 CHECKPOINT_I2C17,
1781 CHECKPOINT_I2C18,
1782 CHECKPOINT_I2C19,
1783 CHECKPOINT_I2C20,
1784 CHECKPOINT_I2C21,
1785 CHECKPOINT_I2C22,
1786 CHECKPOINT_I2C23,
1787 CHECKPOINT_I2C24,
1788 CHECKPOINT_I2C25,
1789 CHECKPOINT_I2C26,
1790 CHECKPOINT_I2C27,
1791 CHECKPOINT_I2C28,
1792 CHECKPOINT_I2C29,
1793 CHECKPOINT_I2C30,
1794 CHECKPOINT_I2C31,
1795 CHECKPOINT_I2C32,
1796 CHECKPOINT_I2C33,
1797 CHECKPOINT_I2C34,
1798 CHECKPOINT_I2C35,
1799 CHECKPOINT_I2C36,
1800 CHECKPOINT_I2C37,
1801 CHECKPOINT_I2C38,
1802 CHECKPOINT_I2C39,
1803 CHECKPOINT_I2C40,
1804 CHECKPOINT_I2C41,
1805 CHECKPOINT_I2C42,
1806 CHECKPOINT_I2C43,
1807 CHECKPOINT_I2C44,
1808 CHECKPOINT_I2C45,
1809 CHECKPOINT_NVRAM,
1810 CHECKPOINT_SERIAL1,
1811 CHECKPOINT_SERIAL2,
1812 CHECKPOINT_SERIAL3,
1813 CHECKPOINT_WANDERING,
1814 CHECKPOINT_STRAYHPINT,
1815 CHECKPOINT_STRAYLPINT,
1816 CHECKPOINT_TESTWDT,
1817 CHECKPOINT_DPACDEBUG,
1818 CHECKPOINT_LAST
1820 checkPoint_e;
1822 typedef enum
1824 CONFIGTYPE_NONE = 0,
1825 CONFIGTYPE_BOOL,
1826 CONFIGTYPE_8,
1827 CONFIGTYPE_16,
1828 CONFIGTYPE_32,
1829 CONFIGTYPE_STRING,
1830 CONFIGTYPE_LAST
1832 configType_e;
1834 typedef enum
1836 DOWNLOADFIRMWARE_START = 0,
1837 DOWNLOADFIRMWARE_DATA,
1838 DOWNLOADFIRMWARE_COMPLETE,
1839 DOWNLOADFIRMWARE_ABORT,
1840 DOWNLOADFIRMWARE_RESET,
1841 DOWNLOADFIRMWARE_LAST
1843 downloadFirmware_e;
1845 typedef enum
1847 MORTISEEVENT_DX_THROWN = 0,
1848 MORTISEEVENT_DX_RETRACTED,
1849 MORTISEEVENT_LX_RETRACTED,
1850 MORTISEEVENT_LX_EXTENDED,
1851 MORTISEEVENT_AX_EXTENDED,
1852 MORTISEEVENT_AX_RETRACTED,
1853 MORTISEEVENT_RX_DEPRESSED,
1854 MORTISEEVENT_RX_RELEASED,
1855 MORTISEEVENT_PX_OPEN,
1856 MORTISEEVENT_PX_CLOSED,
1857 MORTISEEVENT_MX_UNLOCKED,
1858 MORTISEEVENT_MX_LOCKED,
1859 MORTISEEVENT_LAST,
1860 MORTISEEVENT_IGNORE
1862 mortiseEvent_e;
1865 * Print things with nice textual names
1867 static const value_string r3_accessmodenames [] =
1869 { ACCESSMODE_NONE, "ACCESMODE_NONE" },
1870 { ACCESSMODE_PRIMARYONLY, "ACCESSMODE_PRIMARYONLY" },
1871 { ACCESSMODE_PRIMARYORAUX, "ACCESSMODE_PRIMARYORAUX" },
1872 { ACCESSMODE_PRIMARYANDAUX, "ACCESSMODE_PRIMARYANDAUX" },
1873 { ACCESSMODE_PRIMARYTHENAUX, "ACCESSMODE_PRIMARYTHENAUX" },
1874 { 0, NULL }
1876 static value_string_ext r3_accessmodenames_ext = VALUE_STRING_EXT_INIT(r3_accessmodenames);
1878 static const value_string r3_adduserparamtypenames [] =
1880 { ADDUSERPARAMTYPE_DISPOSITION, "ADDUSERPARAMTYPE_DISPOSITION" },
1881 { ADDUSERPARAMTYPE_USERNO, "ADDUSERPARAMTYPE_USERNO" },
1882 { ADDUSERPARAMTYPE_ACCESSALWAYS, "ADDUSERPARAMTYPE_ACCESSALWAYS" },
1883 { ADDUSERPARAMTYPE_ACCESSMODE, "ADDUSERPARAMTYPE_ACCESSMODE" },
1884 { ADDUSERPARAMTYPE_CACHED, "ADDUSERPARAMTYPE_CACHED" },
1885 { ADDUSERPARAMTYPE_USERTYPE, "ADDUSERPARAMTYPE_USERTYPE" },
1886 { ADDUSERPARAMTYPE_PRIMARYFIELD, "ADDUSERPARAMTYPE_PRIMARYFIELD" },
1887 { ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, "ADDUSERPARAMTYPE_PRIMARYFIELDTYPE" },
1888 { ADDUSERPARAMTYPE_AUXFIELD, "ADDUSERPARAMTYPE_AUXFIELD" },
1889 { ADDUSERPARAMTYPE_AUXFIELDTYPE, "ADDUSERPARAMTYPE_AUXFIELDTYPE" },
1890 { ADDUSERPARAMTYPE_TIMEZONE, "ADDUSERPARAMTYPE_TIMEZONE" },
1891 { ADDUSERPARAMTYPE_EXPIREON, "ADDUSERPARAMTYPE_EXPIREON" },
1892 { ADDUSERPARAMTYPE_USECOUNT, "ADDUSERPARAMTYPE_USECOUNT" },
1893 { ADDUSERPARAMTYPE_EXCEPTIONGROUP, "ADDUSERPARAMTYPE_EXCEPTIONGROUP" },
1894 { 0, NULL }
1896 static value_string_ext r3_adduserparamtypenames_ext = VALUE_STRING_EXT_INIT(r3_adduserparamtypenames);
1898 static const value_string r3_alarmidnames [] =
1900 { ALARMID_NONE, "ALARMID_NONE" },
1901 { ALARMID_VALIDIN, "ALARMID_VALIDIN" },
1902 { ALARMID_DENIEDACCESS, "ALARMID_DENIEDACCESS" },
1903 { ALARMID_SECURED, "ALARMID_SECURED" },
1904 { ALARMID_DOORFORCED, "ALARMID_DOORFORCED" },
1905 { ALARMID_KEYOVERRIDE, "ALARMID_KEYOVERRIDE" },
1906 { ALARMID_INVALIDENTRY, "ALARMID_INVALIDENTRY" },
1907 { ALARMID_DOORAJAR, "ALARMID_DOORAJAR" },
1908 { ALARMID_LOWBATTERY, "ALARMID_LOWBATTERY" },
1909 { ALARMID_RXHELD, "ALARMID_RXHELD" },
1910 { 0, NULL }
1912 static value_string_ext r3_alarmidnames_ext = VALUE_STRING_EXT_INIT(r3_alarmidnames);
1914 static const value_string r3_capabilitiesnames [] =
1916 { CAPABILITIES_USERS, "CAPABILITIES_USERS" },
1917 { CAPABILITIES_TIMEZONES, "CAPABILITIES_TIMEZONES" },
1918 { CAPABILITIES_EXCEPTIONS, "CAPABILITIES_EXCEPTIONS" },
1919 { CAPABILITIES_EXCEPTIONGROUPS, "CAPABILITIES_EXCEPTIONGROUPS" },
1920 { CAPABILITIES_EVENTLOG, "CAPABILITIES_EVENTLOG" },
1921 { CAPABILITIES_DECLINEDLOG, "CAPABILITIES_DECLINEDLOG" },
1922 { CAPABILITIES_ALARMLOG, "CAPABILITIES_ALARMLOG" },
1923 { CAPABILITIES_TOTALEVENTS, "CAPABILITIES_TOTALEVENTS" },
1924 { 0, NULL }
1926 static value_string_ext r3_capabilitiesnames_ext = VALUE_STRING_EXT_INIT(r3_capabilitiesnames);
1928 static const value_string r3_checkpointnames [] =
1930 { CHECKPOINT_NONE, "CHECKPOINT_NONE" },
1931 { CHECKPOINT_ADC, "CHECKPOINT_ADC" },
1932 { CHECKPOINT_DPAC1, "CHECKPOINT_DPAC1" },
1933 { CHECKPOINT_DPAC2, "CHECKPOINT_DPAC2" },
1934 { CHECKPOINT_I2C1, "CHECKPOINT_I2C1" },
1935 { CHECKPOINT_I2C2, "CHECKPOINT_I2C2" },
1936 { CHECKPOINT_I2C3, "CHECKPOINT_I2C3" },
1937 { CHECKPOINT_I2C4, "CHECKPOINT_I2C4" },
1938 { CHECKPOINT_I2C5, "CHECKPOINT_I2C5" },
1939 { CHECKPOINT_I2C6, "CHECKPOINT_I2C6" },
1940 { CHECKPOINT_I2C7, "CHECKPOINT_I2C7" },
1941 { CHECKPOINT_I2C8, "CHECKPOINT_I2C8" },
1942 { CHECKPOINT_I2C9, "CHECKPOINT_I2C9" },
1943 { CHECKPOINT_I2C10, "CHECKPOINT_I2C10" },
1944 { CHECKPOINT_I2C11, "CHECKPOINT_I2C11" },
1945 { CHECKPOINT_I2C12, "CHECKPOINT_I2C12" },
1946 { CHECKPOINT_I2C13, "CHECKPOINT_I2C13" },
1947 { CHECKPOINT_I2C14, "CHECKPOINT_I2C14" },
1948 { CHECKPOINT_I2C15, "CHECKPOINT_I2C15" },
1949 { CHECKPOINT_I2C16, "CHECKPOINT_I2C16" },
1950 { CHECKPOINT_I2C17, "CHECKPOINT_I2C17" },
1951 { CHECKPOINT_I2C18, "CHECKPOINT_I2C18" },
1952 { CHECKPOINT_I2C19, "CHECKPOINT_I2C19" },
1953 { CHECKPOINT_I2C20, "CHECKPOINT_I2C20" },
1954 { CHECKPOINT_I2C21, "CHECKPOINT_I2C21" },
1955 { CHECKPOINT_I2C22, "CHECKPOINT_I2C22" },
1956 { CHECKPOINT_I2C23, "CHECKPOINT_I2C23" },
1957 { CHECKPOINT_I2C24, "CHECKPOINT_I2C24" },
1958 { CHECKPOINT_I2C25, "CHECKPOINT_I2C25" },
1959 { CHECKPOINT_I2C26, "CHECKPOINT_I2C26" },
1960 { CHECKPOINT_I2C27, "CHECKPOINT_I2C27" },
1961 { CHECKPOINT_I2C28, "CHECKPOINT_I2C28" },
1962 { CHECKPOINT_I2C29, "CHECKPOINT_I2C29" },
1963 { CHECKPOINT_I2C30, "CHECKPOINT_I2C30" },
1964 { CHECKPOINT_I2C31, "CHECKPOINT_I2C31" },
1965 { CHECKPOINT_I2C32, "CHECKPOINT_I2C32" },
1966 { CHECKPOINT_I2C33, "CHECKPOINT_I2C33" },
1967 { CHECKPOINT_I2C34, "CHECKPOINT_I2C34" },
1968 { CHECKPOINT_I2C35, "CHECKPOINT_I2C35" },
1969 { CHECKPOINT_I2C36, "CHECKPOINT_I2C36" },
1970 { CHECKPOINT_I2C37, "CHECKPOINT_I2C37" },
1971 { CHECKPOINT_I2C38, "CHECKPOINT_I2C38" },
1972 { CHECKPOINT_I2C39, "CHECKPOINT_I2C39" },
1973 { CHECKPOINT_I2C40, "CHECKPOINT_I2C40" },
1974 { CHECKPOINT_I2C41, "CHECKPOINT_I2C41" },
1975 { CHECKPOINT_I2C42, "CHECKPOINT_I2C42" },
1976 { CHECKPOINT_I2C43, "CHECKPOINT_I2C43" },
1977 { CHECKPOINT_I2C44, "CHECKPOINT_I2C44" },
1978 { CHECKPOINT_I2C45, "CHECKPOINT_I2C45" },
1979 { CHECKPOINT_NVRAM, "CHECKPOINT_NVRAM" },
1980 { CHECKPOINT_SERIAL1, "CHECKPOINT_SERIAL1" },
1981 { CHECKPOINT_SERIAL2, "CHECKPOINT_SERIAL2" },
1982 { CHECKPOINT_SERIAL3, "CHECKPOINT_SERIAL3" },
1983 { CHECKPOINT_WANDERING, "CHECKPOINT_WANDERING" },
1984 { CHECKPOINT_STRAYHPINT, "CHECKPOINT_STRAYHPINT" },
1985 { CHECKPOINT_STRAYLPINT, "CHECKPOINT_STRAYLPINT" },
1986 { CHECKPOINT_TESTWDT, "CHECKPOINT_TESTWDT" },
1987 { CHECKPOINT_DPACDEBUG, "CHECKPOINT_DPACDEBUG" },
1988 { 0, NULL }
1990 static value_string_ext r3_checkpointnames_ext = VALUE_STRING_EXT_INIT(r3_checkpointnames);
1992 static const value_string r3_checksumresultnames [] =
1994 { CHECKSUMRESULT_CONFIGURATIONNVRAM, "CHECKSUMRESULT_CONFIGURATIONNVRAM" },
1995 { CHECKSUMRESULT_EXCEPTIONS, "CHECKSUMRESULT_EXCEPTIONS" },
1996 { CHECKSUMRESULT_EXCEPTIONGROUPS, "CHECKSUMRESULT_EXCEPTIONGROUPS" },
1997 { CHECKSUMRESULT_TZCALENDARS, "CHECKSUMRESULT_TZCALENDARS" },
1998 { CHECKSUMRESULT_TIMEZONES, "CHECKSUMRESULT_TIMEZONES" },
1999 { CHECKSUMRESULT_USERS, "CHECKSUMRESULT_USERS" },
2000 { CHECKSUMRESULT_CACHELRU, "CHECKSUMRESULT_CACHELRU" },
2001 { 0, NULL }
2003 static value_string_ext r3_checksumresultnames_ext = VALUE_STRING_EXT_INIT(r3_checksumresultnames);
2005 static const value_string r3_cmdnames [] =
2007 { CMD_RESPONSE, "CMD_RESPONSE" },
2008 { CMD_HANDSHAKE, "CMD_HANDSHAKE" },
2009 { CMD_KILLSESSION, "CMD_KILLSESSION" },
2010 { CMD_QUERYSERIALNUMBER, "CMD_QUERYSERIALNUMBER" },
2011 { CMD_QUERYVERSION, "CMD_QUERYVERSION" },
2012 { CMD_SETDATETIME, "CMD_SETDATETIME" },
2013 { CMD_QUERYDATETIME, "CMD_QUERYDATETIME" },
2014 { CMD_SETCONFIG, "CMD_SETCONFIG" },
2015 { CMD_GETCONFIG, "CMD_GETCONFIG" },
2016 { CMD_MANAGEUSER, "CMD_MANAGEUSER" },
2017 { CMD_DELETEUSERS, "CMD_DELETEUSERS" },
2018 { CMD_DEFINEEXCEPTION, "CMD_DEFINEEXCEPTION" },
2019 { CMD_DEFINEEXCEPTIONGROUP, "CMD_DEFINEEXCEPTIONGROUP" },
2020 { CMD_DEFINECALENDAR, "CMD_DEFINECALENDAR" },
2021 { CMD_DEFINETIMEZONE, "CMD_DEFINETIMEZONE" },
2022 { CMD_RMTAUTHRETRY, "CMD_RMTAUTHRETRY" },
2023 { CMD_FILTERS, "CMD_FILTERS" },
2024 { CMD_ALARMCONFIGURE, "CMD_ALARMCONFIGURE" },
2025 { CMD_EVENTLOGDUMP, "CMD_EVENTLOGDUMP" },
2026 { CMD_DECLINEDLOGDUMP, "CMD_DECLINEDLOGDUMP" },
2027 { CMD_ALARMLOGDUMP, "CMD_ALARMLOGDUMP" },
2028 { CMD_DOWNLOADFIRMWARE, "CMD_DOWNLOADFIRMWARE" },
2029 { CMD_DOWNLOADFIRMWARETIMEOUT, "CMD_DOWNLOADFIRMWARETIMEOUT" },
2030 { CMD_POWERTABLESELECTION, "CMD_POWERTABLESELECTION" },
2031 { CMD_CLEARNVRAM, "CMD_CLEARNVRAM" },
2032 { CMD_DPAC, "CMD_DPAC" },
2033 { CMD_SELFTEST, "CMD_SELFTEST" },
2034 { CMD_RESET, "CMD_RESET" },
2035 { CMD_LOGWRITE, "CMD_LOGWRITE" },
2036 { CMD_MFGCOMMAND, "CMD_MFGCOMMAND" },
2037 { CMD_NVRAMBACKUP, "CMD_NVRAMBACKUP" },
2038 { CMD_EXTENDEDRESPONSE, "CMD_EXTENDEDRESPONSE" },
2039 { 0, NULL }
2041 static value_string_ext r3_cmdnames_ext = VALUE_STRING_EXT_INIT(r3_cmdnames);
2043 static const value_string r3_cmdmfgnames [] =
2045 { CMDMFG_SETSERIALNUMBER, "CMDMFG_SETSERIALNUMBER" },
2046 { CMDMFG_SETCRYPTKEY, "CMDMFG_SETCRYPTKEY" },
2047 { CMDMFG_DUMPNVRAM, "CMDMFG_DUMPNVRAM" },
2048 { CMDMFG_TERMINAL, "CMDMFG_TERMINAL" },
2049 { CMDMFG_REMOTEUNLOCK, "CMDMFG_REMOTEUNLOCK" },
2050 { CMDMFG_AUXCTLRVERSION, "CMDMFG_AUXCTLRVERSION" },
2051 { CMDMFG_IOPINS, "CMDMFG_IOPINS" },
2052 { CMDMFG_ADCS, "CMDMFG_ADCS" },
2053 { CMDMFG_HARDWAREID, "CMDMFG_HARDWAREID" },
2054 { CMDMFG_CHECKPOINTLOGDUMP, "CMDMFG_CHECKPOINTLOGDUMP" },
2055 { CMDMFG_CHECKPOINTLOGCLEAR, "CMDMFG_CHECKPOINTLOGCLEAR" },
2056 { CMDMFG_READREGISTERS, "CMDMFG_READREGISTERS" },
2057 { CMDMFG_FORCEOPTIONS, "CMDMFG_FORCEOPTIONS" },
2058 { CMDMFG_COMMUSER, "CMDMFG_COMMUSER" },
2059 { CMDMFG_DUMPKEYPAD, "CMDMFG_DUMPKEYPAD" },
2060 { CMDMFG_BATTERYCHECK, "CMDMFG_BATTERYCHECK" },
2061 { CMDMFG_RAMREFRESH, "CMDMFG_RAMREFRESH" },
2062 { CMDMFG_TASKFLAGS, "CMDMFG_TASKFLAGS" },
2063 { CMDMFG_TIMERCHAIN, "CMDMFG_TIMERCHAIN" },
2064 { CMDMFG_PEEKPOKE, "CMDMFG_PEEKPOKE" },
2065 { CMDMFG_LOCKSTATE, "CMDMFG_LOCKSTATE" },
2066 { CMDMFG_CAPABILITIES, "CMDMFG_CAPABILITIES" },
2067 { CMDMFG_DUMPM41T81, "CMDMFG_DUMPM41T81" },
2068 { CMDMFG_DEBUGLOGDUMP, "CMDMFG_DEBUGLOGDUMP" },
2069 { CMDMFG_DEBUGLOGCLEAR, "CMDMFG_DEBUGLOGCLEAR" },
2070 { CMDMFG_TESTWDT, "CMDMFG_TESTWDT" },
2071 { CMDMFG_QUERYCKSUM, "CMDMFG_QUERYCKSUM" },
2072 { CMDMFG_VALIDATECHECKSUMS, "CMDMFG_VALIDATECHECKSUMS" },
2073 { CMDMFG_REBUILDLRUCACHE, "CMDMFG_REBUILDLRUCACHE" },
2074 { CMDMFG_TZUPDATE, "CMDMFG_TZUPDATE" },
2075 { CMDMFG_TESTPRESERVE, "CMDMFG_TESTPRESERVE" },
2076 { CMDMFG_MORTISESTATELOGDUMP, "CMDMFG_MORTISESTATELOGDUMP" },
2077 { CMDMFG_MORTISESTATELOGCLEAR, "CMDMFG_MORTISESTATELOGCLEAR" },
2078 { CMDMFG_MORTISEPINS, "CMDMFG_MORTISEPINS" },
2079 { CMDMFG_HALTANDCATCHFIRE, "CMDMFG_HALTANDCATCHFIRE" },
2080 { 0, NULL }
2082 static value_string_ext r3_cmdmfgnames_ext = VALUE_STRING_EXT_INIT(r3_cmdmfgnames);
2084 static const value_string r3_configitemnames [] =
2086 { CONFIGITEM_SERIAL_NUMBER, "CONFIGITEM_SERIAL_NUMBER" },
2087 { CONFIGITEM_CRYPT_KEY, "CONFIGITEM_CRYPT_KEY" },
2088 { CONFIGITEM_HARDWARE_OPTIONS_MFG, "CONFIGITEM_HARDWARE_OPTIONS_MFG" },
2089 { CONFIGITEM_HARDWARE_OPTIONS, "CONFIGITEM_HARDWARE_OPTIONS" },
2090 { CONFIGITEM_NVRAM_CHANGES, "CONFIGITEM_NVRAM_CHANGES" },
2091 { CONFIGITEM_NVRAMDIRTY, "CONFIGITEM_NVRAMDIRTY" },
2092 { CONFIGITEM_NVRAM_WV, "CONFIGITEM_NVRAM_WV" },
2093 { CONFIGITEM_ENABLE_WDT, "CONFIGITEM_ENABLE_WDT" },
2094 { CONFIGITEM_EARLY_ACK, "CONFIGITEM_EARLY_ACK" },
2095 { CONFIGITEM_CONSOLE_AES_ONLY, "CONFIGITEM_CONSOLE_AES_ONLY" },
2096 { CONFIGITEM_RADIO_AES_ONLY, "CONFIGITEM_RADIO_AES_ONLY" },
2097 { CONFIGITEM_NDRLE, "CONFIGITEM_NDRLE" },
2098 { CONFIGITEM_SOMF, "CONFIGITEM_SOMF" },
2099 { CONFIGITEM_NOGAF, "CONFIGITEM_NOGAF" },
2100 { CONFIGITEM_CARD_READER_POWER, "CONFIGITEM_CARD_READER_POWER" },
2101 { CONFIGITEM_PROX_ENABLE, "CONFIGITEM_PROX_ENABLE" },
2102 { CONFIGITEM_CKSUMCONFIG, "CONFIGITEM_CKSUMCONFIG" },
2103 { CONFIGITEM_DAILY_BATTERY_CHECK, "CONFIGITEM_DAILY_BATTERY_CHECK" },
2104 { CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, "CONFIGITEM_DAILY_BATTERY_CHECK_HOUR" },
2105 { CONFIGITEM_BATTERY_LOW, "CONFIGITEM_BATTERY_LOW" },
2106 { CONFIGITEM_LRU_HEAD, "CONFIGITEM_LRU_HEAD" },
2107 { CONFIGITEM_LRU_TAIL, "CONFIGITEM_LRU_TAIL" },
2108 { CONFIGITEM_RTC_CALIBRATION, "CONFIGITEM_RTC_CALIBRATION" },
2109 { CONFIGITEM_ACVREQUESTER, "CONFIGITEM_ACVREQUESTER" },
2110 { CONFIGITEM_LOCAL_LED, "CONFIGITEM_LOCAL_LED" },
2111 { CONFIGITEM_ERRCNT_XORLEN, "CONFIGITEM_ERRCNT_XORLEN" },
2112 { CONFIGITEM_ERRCNT_CRC, "CONFIGITEM_ERRCNT_CRC" },
2113 { CONFIGITEM_ERRCNT_NOTSIGIL, "CONFIGITEM_ERRCNT_NOTSIGIL" },
2114 { CONFIGITEM_ERRCNT_TIMEOUT, "CONFIGITEM_ERRCNT_TIMEOUT" },
2115 { CONFIGITEM_ERRCNT_TOOLONG, "CONFIGITEM_ERRCNT_TOOLONG" },
2116 { CONFIGITEM_ERRCNT_TOOSHORT, "CONFIGITEM_ERRCNT_TOOSHORT" },
2117 { CONFIGITEM_ERRCNT_HITDEFAULT, "CONFIGITEM_ERRCNT_HITDEFAULT" },
2118 { CONFIGITEM_ERRCNT_OVERRUN, "CONFIGITEM_ERRCNT_OVERRUN" },
2119 { CONFIGITEM_ERRCNT_UARTFE, "CONFIGITEM_ERRCNT_UARTFE" },
2120 { CONFIGITEM_ERRCNT_UARTOE, "CONFIGITEM_ERRCNT_UARTOE" },
2121 { CONFIGITEM_DST_SET, "CONFIGITEM_DST_SET" },
2122 { CONFIGITEM_DST_MODE, "CONFIGITEM_DST_MODE" },
2123 { CONFIGITEM_DST_FORWARD_MONTH, "CONFIGITEM_DST_FORWARD_MONTH" },
2124 { CONFIGITEM_DST_FORWARD_DOM, "CONFIGITEM_DST_FORWARD_DOM" },
2125 { CONFIGITEM_DST_FORWARD_OOD, "CONFIGITEM_DST_FORWARD_OOD" },
2126 { CONFIGITEM_DST_FORWARD_DOW, "CONFIGITEM_DST_FORWARD_DOW" },
2127 { CONFIGITEM_DST_FORWARD_HOUR, "CONFIGITEM_DST_FORWARD_HOUR" },
2128 { CONFIGITEM_DST_FORWARD_MINUTE, "CONFIGITEM_DST_FORWARD_MINUTE" },
2129 { CONFIGITEM_DST_FORWARD_ADJUST, "CONFIGITEM_DST_FORWARD_ADJUST" },
2130 { CONFIGITEM_DST_BACK_MONTH, "CONFIGITEM_DST_BACK_MONTH" },
2131 { CONFIGITEM_DST_BACK_DOM, "CONFIGITEM_DST_BACK_DOM" },
2132 { CONFIGITEM_DST_BACK_OOD, "CONFIGITEM_DST_BACK_OOD" },
2133 { CONFIGITEM_DST_BACK_DOW, "CONFIGITEM_DST_BACK_DOW" },
2134 { CONFIGITEM_DST_BACK_HOUR, "CONFIGITEM_DST_BACK_HOUR" },
2135 { CONFIGITEM_DST_BACK_MINUTE, "CONFIGITEM_DST_BACK_MINUTE" },
2136 { CONFIGITEM_DST_BACK_ADJUST, "CONFIGITEM_DST_BACK_ADJUST" },
2137 { CONFIGITEM_EVENTLOG_ZEROMEM, "CONFIGITEM_EVENTLOG_ZEROMEM" },
2138 { CONFIGITEM_EVENTLOG_BEGIN, "CONFIGITEM_EVENTLOG_BEGIN" },
2139 { CONFIGITEM_EVENTLOG_RECORD, "CONFIGITEM_EVENTLOG_RECORD" },
2140 { CONFIGITEM_EVENTLOG_ENTRIES, "CONFIGITEM_EVENTLOG_ENTRIES" },
2141 { CONFIGITEM_EVENTLOG_WARNDEVICE, "CONFIGITEM_EVENTLOG_WARNDEVICE" },
2142 { CONFIGITEM_EVENTLOG_WARNEVERY, "CONFIGITEM_EVENTLOG_WARNEVERY" },
2143 { CONFIGITEM_EVENTLOG_RMTDEVICE, "CONFIGITEM_EVENTLOG_RMTDEVICE" },
2144 { CONFIGITEM_DECLINEDLOG_ZEROMEM, "CONFIGITEM_DECLINEDLOG_ZEROMEM" },
2145 { CONFIGITEM_DECLINEDLOG_BEGIN, "CONFIGITEM_DECLINEDLOG_BEGIN" },
2146 { CONFIGITEM_DECLINEDLOG_RECORD, "CONFIGITEM_DECLINEDLOG_RECORD" },
2147 { CONFIGITEM_DECLINEDLOG_ENTRIES, "CONFIGITEM_DECLINEDLOG_ENTRIES" },
2148 { CONFIGITEM_DECLINEDLOG_WARNDEVICE, "CONFIGITEM_DECLINEDLOG_WARNDEVICE" },
2149 { CONFIGITEM_DECLINEDLOG_WARNEVERY, "CONFIGITEM_DECLINEDLOG_WARNEVERY" },
2150 { CONFIGITEM_DECLINEDLOG_RMTDEVICE, "CONFIGITEM_DECLINEDLOG_RMTDEVICE" },
2151 { CONFIGITEM_ALARMLOG_ZEROMEM, "CONFIGITEM_ALARMLOG_ZEROMEM" },
2152 { CONFIGITEM_ALARMLOG_BEGIN, "CONFIGITEM_ALARMLOG_BEGIN" },
2153 { CONFIGITEM_ALARMLOG_RECORD, "CONFIGITEM_ALARMLOG_RECORD" },
2154 { CONFIGITEM_ALARMLOG_ENTRIES, "CONFIGITEM_ALARMLOG_ENTRIES" },
2155 { CONFIGITEM_ALARMLOG_WARNDEVICE, "CONFIGITEM_ALARMLOG_WARNDEVICE" },
2156 { CONFIGITEM_ALARMLOG_WARNEVERY, "CONFIGITEM_ALARMLOG_WARNEVERY" },
2157 { CONFIGITEM_ALARMLOG_RMTDEVICE, "CONFIGITEM_ALARMLOG_RMTDEVICE" },
2158 { CONFIGITEM_VISIBLE_FEEDBACK, "CONFIGITEM_VISIBLE_FEEDBACK" },
2159 { CONFIGITEM_AUDIBLE_FEEDBACK, "CONFIGITEM_AUDIBLE_FEEDBACK" },
2160 { CONFIGITEM_VISIBLE_INDICATORS, "CONFIGITEM_VISIBLE_INDICATORS" },
2161 { CONFIGITEM_AUDIBLE_INDICATORS, "CONFIGITEM_AUDIBLE_INDICATORS" },
2162 { CONFIGITEM_2NDPINDURATION, "CONFIGITEM_2NDPINDURATION" },
2163 { CONFIGITEM_LOCKOUT_ATTEMPTS, "CONFIGITEM_LOCKOUT_ATTEMPTS" },
2164 { CONFIGITEM_LOCKOUT_DURATION, "CONFIGITEM_LOCKOUT_DURATION" },
2165 { CONFIGITEM_KEYPAD_INACTIVITY, "CONFIGITEM_KEYPAD_INACTIVITY" },
2166 { CONFIGITEM_ICIDLE_DURATION, "CONFIGITEM_ICIDLE_DURATION" },
2167 { CONFIGITEM_WRITE_DECLINED_LOG, "CONFIGITEM_WRITE_DECLINED_LOG" },
2168 { CONFIGITEM_LOW_BATTERY_INDICATOR, "CONFIGITEM_LOW_BATTERY_INDICATOR" },
2169 { CONFIGITEM_PANIC_MODE, "CONFIGITEM_PANIC_MODE" },
2170 { CONFIGITEM_TIMEZONE_ENABLE, "CONFIGITEM_TIMEZONE_ENABLE" },
2171 { CONFIGITEM_EXCEPTION_ENABLE, "CONFIGITEM_EXCEPTION_ENABLE" },
2172 { CONFIGITEM_AUTOUNLOCK_ENABLE, "CONFIGITEM_AUTOUNLOCK_ENABLE" },
2173 { CONFIGITEM_LOCK_PRIORITY_EMERGENCY, "CONFIGITEM_LOCK_PRIORITY_EMERGENCY" },
2174 { CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, "CONFIGITEM_LOCK_PRIORITY_SUPERVISOR" },
2175 { CONFIGITEM_LOCK_PRIORITY_USER, "CONFIGITEM_LOCK_PRIORITY_USER" },
2176 { CONFIGITEM_LOCK_PRIORITY_PASSAGE, "CONFIGITEM_LOCK_PRIORITY_PASSAGE" },
2177 { CONFIGITEM_LOCK_PRIORITY_PANIC, "CONFIGITEM_LOCK_PRIORITY_PANIC" },
2178 { CONFIGITEM_LOCK_PRIORITY_LOCKOUT, "CONFIGITEM_LOCK_PRIORITY_LOCKOUT" },
2179 { CONFIGITEM_LOCK_PRIORITY_RELOCK, "CONFIGITEM_LOCK_PRIORITY_RELOCK" },
2180 { CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, "CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN" },
2181 { CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, "CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE" },
2182 { CONFIGITEM_LOCK_PRIORITY_REMOTE, "CONFIGITEM_LOCK_PRIORITY_REMOTE" },
2183 { CONFIGITEM_LOCK_TYPE, "CONFIGITEM_LOCK_TYPE" },
2184 { CONFIGITEM_DOUBLE_PULSE, "CONFIGITEM_DOUBLE_PULSE" },
2185 { CONFIGITEM_DOUBLE_DELAY, "CONFIGITEM_DOUBLE_DELAY" },
2186 { CONFIGITEM_MOTOR_DURATION, "CONFIGITEM_MOTOR_DURATION" },
2187 { CONFIGITEM_MORTISE_TYPE, "CONFIGITEM_MORTISE_TYPE" },
2188 { CONFIGITEM_UNLOCK_TIME, "CONFIGITEM_UNLOCK_TIME" },
2189 { CONFIGITEM_EXT_UNLOCK_TIME, "CONFIGITEM_EXT_UNLOCK_TIME" },
2190 { CONFIGITEM_DOOR_AJAR_TIME, "CONFIGITEM_DOOR_AJAR_TIME" },
2191 { CONFIGITEM_SESSION_TIMEOUT, "CONFIGITEM_SESSION_TIMEOUT" },
2192 { CONFIGITEM_RETRY_ON_TIMEOUT, "CONFIGITEM_RETRY_ON_TIMEOUT" },
2193 { CONFIGITEM_UNSOLICITED_ENCRYPT, "CONFIGITEM_UNSOLICITED_ENCRYPT" },
2194 { CONFIGITEM_RMT_AUTH_TIMEOUT, "CONFIGITEM_RMT_AUTH_TIMEOUT" },
2195 { CONFIGITEM_RMT_AUTH_DEVICE, "CONFIGITEM_RMT_AUTH_DEVICE" },
2196 { CONFIGITEM_ALARM_DEVICE, "CONFIGITEM_ALARM_DEVICE" },
2197 { CONFIGITEM_NOTIFY_DEVICE, "CONFIGITEM_NOTIFY_DEVICE" },
2198 { CONFIGITEM_COMMUSER_DEVICE, "CONFIGITEM_COMMUSER_DEVICE" },
2199 { CONFIGITEM_SCHEDULER_DEVICE, "CONFIGITEM_SCHEDULER_DEVICE" },
2200 { CONFIGITEM_SCHEDULER_TYPE, "CONFIGITEM_SCHEDULER_TYPE" },
2201 { CONFIGITEM_SCHEDULER_AWAKE, "CONFIGITEM_SCHEDULER_AWAKE" },
2202 { CONFIGITEM_SCHEDULER_PERIOD, "CONFIGITEM_SCHEDULER_PERIOD" },
2203 { CONFIGITEM_SCHEDULER_HOD, "CONFIGITEM_SCHEDULER_HOD" },
2204 { CONFIGITEM_SCHEDULER_DOW, "CONFIGITEM_SCHEDULER_DOW" },
2205 { CONFIGITEM_SCHEDULER_DOM, "CONFIGITEM_SCHEDULER_DOM" },
2206 { CONFIGITEM_SCHEDULER_HM1, "CONFIGITEM_SCHEDULER_HM1" },
2207 { CONFIGITEM_SCHEDULER_HM2, "CONFIGITEM_SCHEDULER_HM2" },
2208 { CONFIGITEM_SCHEDULER_HM3, "CONFIGITEM_SCHEDULER_HM3" },
2209 { CONFIGITEM_SCHEDULER_HM4, "CONFIGITEM_SCHEDULER_HM4" },
2210 { CONFIGITEM_RADIO_TYPE, "CONFIGITEM_RADIO_TYPE" },
2211 { CONFIGITEM_RADIO_MODE, "CONFIGITEM_RADIO_MODE" },
2212 { CONFIGITEM_RADIO_TIMEOUT, "CONFIGITEM_RADIO_TIMEOUT" },
2213 { CONFIGITEM_RADIO_ATTEMPTS, "CONFIGITEM_RADIO_ATTEMPTS" },
2214 { CONFIGITEM_RADIO_HOUSEKEEPING, "CONFIGITEM_RADIO_HOUSEKEEPING" },
2215 { CONFIGITEM_RADIO_LEAPUSERNAME, "CONFIGITEM_RADIO_LEAPUSERNAME" },
2216 { CONFIGITEM_RADIO_LEAPPASSWORD, "CONFIGITEM_RADIO_LEAPPASSWORD" },
2217 { CONFIGITEM_INHIBIT_VOLTAGE, "CONFIGITEM_INHIBIT_VOLTAGE" },
2218 { CONFIGITEM_LOW_VOLTAGE, "CONFIGITEM_LOW_VOLTAGE" },
2219 { CONFIGITEM_PT_RANGE_1, "CONFIGITEM_PT_RANGE_1" },
2220 { CONFIGITEM_PT_RANGE_2, "CONFIGITEM_PT_RANGE_2" },
2221 { CONFIGITEM_PT_RANGE_3, "CONFIGITEM_PT_RANGE_3" },
2222 { CONFIGITEM_PT_RANGE_4, "CONFIGITEM_PT_RANGE_4" },
2223 { CONFIGITEM_PT_RANGE_5, "CONFIGITEM_PT_RANGE_5" },
2224 { CONFIGITEM_PT_RANGE_6, "CONFIGITEM_PT_RANGE_6" },
2225 { CONFIGITEM_PT_RANGE_7, "CONFIGITEM_PT_RANGE_7" },
2226 { CONFIGITEM_PT_RANGE_8, "CONFIGITEM_PT_RANGE_8" },
2227 { CONFIGITEM_MAGCARD_IFS, "CONFIGITEM_MAGCARD_IFS" },
2228 { CONFIGITEM_MAGCARD_FIELDS, "CONFIGITEM_MAGCARD_FIELDS" },
2229 { CONFIGITEM_MAGCARD_OFFSET, "CONFIGITEM_MAGCARD_OFFSET" },
2230 { CONFIGITEM_MAGCARD_DIGITS, "CONFIGITEM_MAGCARD_DIGITS" },
2231 { CONFIGITEM_ALARMS, "CONFIGITEM_ALARMS" },
2232 { CONFIGITEM_FILTERS, "CONFIGITEM_FILTERS" },
2233 { CONFIGITEM_ALARMSTATE, "CONFIGITEM_ALARMSTATE" },
2234 { CONFIGITEM_DOORSTATE, "CONFIGITEM_DOORSTATE" },
2235 { CONFIGITEM_DPACDEBUG, "CONFIGITEM_DPACDEBUG" },
2236 { CONFIGITEM_FAILOPENSECURE, "CONFIGITEM_FAILOPENSECURE" },
2237 { CONFIGITEM_REPLACED_VOLTAGE, "CONFIGITEM_REPLACED_VOLTAGE" },
2238 { CONFIGITEM_RX_HELD_TIME, "CONFIGITEM_RX_HELD_TIME" },
2239 { CONFIGITEM_PACKET_TIMEOUT, "CONFIGITEM_PACKET_TIMEOUT" },
2240 { CONFIGITEM_EXTENDEDRESPONSE, "CONFIGITEM_EXTENDEDRESPONSE" },
2241 { CONFIGITEM_PASSAGEMODEINDICATOR, "CONFIGITEM_PASSAGEMODEINDICATOR" },
2242 { CONFIGITEM_PFMRETURNTIME, "CONFIGITEM_PFMRETURNTIME" },
2243 { 0, NULL }
2245 static value_string_ext r3_configitemnames_ext = VALUE_STRING_EXT_INIT(r3_configitemnames);
2247 static const value_string r3_configtypenames [] =
2249 { CONFIGTYPE_NONE, "CONFIGTYPE_NONE" },
2250 { CONFIGTYPE_BOOL, "CONFIGTYPE_BOOL" },
2251 { CONFIGTYPE_8, "CONFIGTYPE_8" },
2252 { CONFIGTYPE_16, "CONFIGTYPE_16" },
2253 { CONFIGTYPE_32, "CONFIGTYPE_32" },
2254 { CONFIGTYPE_STRING, "CONFIGTYPE_STRING" },
2255 { 0, NULL }
2257 static value_string_ext r3_configtypenames_ext = VALUE_STRING_EXT_INIT(r3_configtypenames);
2259 static const value_string r3_dispositionnames [] =
2261 { DISPOSITION_ADD, "DISPOSITION_ADD" },
2262 { DISPOSITION_REPLACE, "DISPOSITION_REPLACE" },
2263 { DISPOSITION_UPDATE, "DISPOSITION_UPDATE" },
2264 { DISPOSITION_DELETE, "DISPOSITION_DELETE" },
2265 { DISPOSITION_RETRIEVE, "DISPOSITION_RETRIEVE" },
2266 { 0, NULL }
2268 static value_string_ext r3_dispositionnames_ext = VALUE_STRING_EXT_INIT(r3_dispositionnames);
2270 static const value_string r3_deleteusersnames [] =
2272 { DELETEUSERS_ALL, "DELETEUSER_ALL" },
2273 { DELETEUSERS_CACHED, "DELETEUSER_CACHED" },
2274 { 0, NULL }
2276 static value_string_ext r3_deleteusersnames_ext = VALUE_STRING_EXT_INIT(r3_deleteusersnames);
2278 static const value_string r3_downloadfirmwarenames [] =
2280 { DOWNLOADFIRMWARE_START, "DOWNLOADFIRMWARE_START" },
2281 { DOWNLOADFIRMWARE_DATA, "DOWNLOADFIRMWARE_DATA" },
2282 { DOWNLOADFIRMWARE_COMPLETE, "DOWNLOADFIRMWARE_COMPLETE" },
2283 { DOWNLOADFIRMWARE_ABORT, "DOWNLOADFIRMWARE_ABORT" },
2284 { DOWNLOADFIRMWARE_RESET, "DOWNLOADFIRMWARE_RESET" },
2285 { 0, NULL }
2287 static value_string_ext r3_downloadfirmwarenames_ext = VALUE_STRING_EXT_INIT(r3_downloadfirmwarenames);
2289 static const value_string r3_encryptionschemenames [] =
2291 { ENCRYPTIONSCHEME_NONE, "ENCRYPTIONSCHEME_NONE" },
2292 { ENCRYPTIONSCHEME_ROLLING, "ENCRYPTIONSCHEME_ROLLING" },
2293 { ENCRYPTIONSCHEME_SN, "ENCRYPTIONSCHEME_SN" },
2294 { ENCRYPTIONSCHEME_AESIV, "ENCRYPTIONSCHEME_AESIV" },
2295 { ENCRYPTIONSCHEME_AES, "ENCRYPTIONSCHEME_AES" },
2296 { 0, NULL }
2298 static value_string_ext r3_encryptionschemenames_ext = VALUE_STRING_EXT_INIT(r3_encryptionschemenames);
2300 static const value_string r3_eventnames [] =
2302 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
2303 { EVENT_USER, "EVENT_USER" },
2304 { EVENT_ONETIME, "EVENT_ONETIME" },
2305 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
2306 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
2307 { EVENT_BADTIME, "EVENT_BADTIME" },
2308 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
2309 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
2310 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
2311 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
2312 { EVENT_USERADDED, "EVENT_USERADDED" },
2313 { EVENT_USERDELETED, "EVENT_USERDELETED" },
2314 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
2315 { EVENT_PANIC, "EVENT_PANIC" },
2316 { EVENT_RELOCK, "EVENT_RELOCK" },
2317 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
2318 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
2319 { EVENT_RESET, "EVENT_RESET" },
2320 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
2321 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
2322 { EVENT_DBRESET, "EVENT_DBRESET" },
2323 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
2324 { EVENT_COMMENDED, "EVENT_COMMENDED" },
2325 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
2326 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
2327 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
2328 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
2329 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
2330 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
2331 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
2332 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
2333 { EVENT_COMMUSER, "EVENT_COMMUSER" },
2334 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
2335 { EVENT_NOTIFY, "EVENT_NOTIFY" },
2336 { EVENT_EXPIRED, "EVENT_EXPIRED" },
2337 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
2338 { EVENT_MCCENTER, "EVENT_MCCENTER" },
2339 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
2340 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
2341 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
2342 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
2343 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
2344 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
2345 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
2346 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
2347 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
2348 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
2349 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
2350 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
2351 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
2352 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
2353 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
2354 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
2355 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
2356 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
2357 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
2358 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
2359 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
2360 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
2361 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
2362 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
2363 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
2364 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
2365 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
2366 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
2367 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
2368 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
2369 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
2370 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
2371 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
2372 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
2373 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
2374 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
2375 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
2376 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
2377 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
2378 { EVENT_DEBUG, "EVENT_DEBUG" },
2379 { 0, NULL }
2381 static value_string_ext r3_eventnames_ext = VALUE_STRING_EXT_INIT(r3_eventnames);
2383 static const value_string r3_fieldtypenames [] =
2385 { FIELDTYPE_NONE, "FIELDTYPE_NONE" },
2386 { FIELDTYPE_PIN, "FIELDTYPE_PIN" },
2387 { FIELDTYPE_PROX, "FIELDTYPE_PROX" },
2388 { FIELDTYPE_MAGCARD, "FIELDTYPE_MAGCARD" },
2389 { 0, NULL }
2391 static value_string_ext r3_fieldtypenames_ext = VALUE_STRING_EXT_INIT(r3_fieldtypenames);
2393 static const value_string r3_filtereventnames [] =
2395 { EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
2396 { EVENT_USER, "EVENT_USER" },
2397 { EVENT_ONETIME, "EVENT_ONETIME" },
2398 { EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
2399 { EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
2400 { EVENT_BADTIME, "EVENT_BADTIME" },
2401 { EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
2402 { EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
2403 { EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
2404 { EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
2405 { EVENT_USERADDED, "EVENT_USERADDED" },
2406 { EVENT_USERDELETED, "EVENT_USERDELETED" },
2407 { EVENT_EMERGENCY, "EVENT_EMERGENCY" },
2408 { EVENT_PANIC, "EVENT_PANIC" },
2409 { EVENT_RELOCK, "EVENT_RELOCK" },
2410 { EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
2411 { EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
2412 { EVENT_RESET, "EVENT_RESET" },
2413 { EVENT_DATETIMESET, "EVENT_DATETIMESET" },
2414 { EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
2415 { EVENT_DBRESET, "EVENT_DBRESET" },
2416 { EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
2417 { EVENT_COMMENDED, "EVENT_COMMENDED" },
2418 { EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
2419 { EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
2420 { EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
2421 { EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
2422 { EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
2423 { EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
2424 { EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
2425 { EVENT_MASTERCODE, "EVENT_MASTERCODE" },
2426 { EVENT_COMMUSER, "EVENT_COMMUSER" },
2427 { EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
2428 { EVENT_NOTIFY, "EVENT_NOTIFY" },
2429 { EVENT_EXPIRED, "EVENT_EXPIRED" },
2430 { EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
2431 { EVENT_MCCENTER, "EVENT_MCCENTER" },
2432 { EVENT_MCCEXIT, "EVENT_MCCEXIT" },
2433 { EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
2434 { EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
2435 { EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
2436 { EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
2437 { EVENT_NVRAMOK, "EVENT_NVRAMOK" },
2438 { EVENT_USERREPLACED, "EVENT_USERREPLACED" },
2439 { EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
2440 { EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
2441 { EVENT_USERUPDATED, "EVENT_USERUPDATED" },
2442 { EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
2443 { EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
2444 { EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
2445 { EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
2446 { EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
2447 { EVENT_CLOCKERR, "EVENT_CLOCKERR" },
2448 { EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
2449 { EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
2450 { EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
2451 { EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
2452 { EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
2453 { EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
2454 { EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
2455 { EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
2456 { EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
2457 { EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
2458 { EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
2459 { EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
2460 { EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
2461 { EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
2462 { EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
2463 { EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
2464 { EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
2465 { EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
2466 { EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
2467 { EVENT_POWERFAIL, "EVENT_POWERFAIL" },
2468 { EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
2469 { EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
2470 { EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
2471 { EVENT_DEBUG, "EVENT_DEBUG" },
2472 { 0xfe, "(Enable All Filters)" },
2473 { 0xff, "(Disable All Filters)" },
2474 { 0, NULL }
2476 static value_string_ext r3_filtereventnames_ext = VALUE_STRING_EXT_INIT(r3_filtereventnames);
2478 static const value_string r3_filtertypenames [] =
2480 { FILTERSELECT_RECORDING, "FILTERSELECT_RECORDING" },
2481 { FILTERSELECT_REPORTING, "FILTERSELECT_REPORTING" },
2482 { 0, NULL }
2484 static value_string_ext r3_filtertypenames_ext = VALUE_STRING_EXT_INIT(r3_filtertypenames);
2486 static const value_string r3_forceitemnames [] =
2488 { FORCEITEM_RADIOPOWER, "FORCEITEM_RADIOPOWER" },
2489 { FORCEITEM_RADIOENABLE, "FORCEITEM_RADIOENABLE" },
2490 { FORCEITEM_LEDRED, "FORCEITEM_LEDRED" },
2491 { FORCEITEM_LEDGREEN, "FORCEITEM_LEDGREEN" },
2492 { FORCEITEM_LEDYELLOW, "FORCEITEM_LEDYELLOW" },
2493 { FORCEITEM_PIEZO, "FORCEITEM_PIEZO" },
2494 { FORCEITEM_MAGPOWER, "FORCEITEM_MAGPOWER" },
2495 { FORCEITEM_MAGLEDA, "FORCEITEM_MAGLEDA" },
2496 { FORCEITEM_MAGLEDB, "FORCEITEM_MAGLEDB" },
2497 { FORCEITEM_PROXPOWER, "FORCEITEM_PROXPOWER" },
2498 { FORCEITEM_PROXPING, "FORCEITEM_PROXPING" },
2499 { FORCEITEM_PROXMODE, "FORCEITEM_PROXMODE" },
2500 { FORCEITEM_I2CPOWER, "FORCEITEM_I2CPOWER" },
2501 { FORCEITEM_MOTORARUN, "FORCEITEM_MOTORARUN" },
2502 { FORCEITEM_MOTORBRUN, "FORCEITEM_MOTORBRUN" },
2503 { FORCEITEM_VMON, "FORCEITEM_VMON" },
2504 { FORCEITEM_PROX, "FORCEITEM_PROX" },
2505 { FORCEITEM_MORTISETEST, "FORCEITEM_MORTISETEST" },
2506 { FORCEITEM_KEYPADTEST, "FORCEITEM_KEYPADTEST" },
2507 { FORCEITEM_MAGTEST, "FORCEITEM_MAGTEST" },
2508 { FORCEITEM_PROXTEST, "FORCEITEM_PROXTEST" },
2509 { 0, NULL }
2511 static value_string_ext r3_forceitemnames_ext = VALUE_STRING_EXT_INIT(r3_forceitemnames);
2513 static const value_string r3_mfgfieldnames [] =
2515 { MFGFIELD_IOPINS, "MFGFIELD_IOPINS" },
2516 { MFGFIELD_ADCS, "MFGFIELD_ADCS" },
2517 { MFGFIELD_HARDWAREID, "MFGFIELD_HARDWAREID" },
2518 { MFGFIELD_CHECKPOINTLOG, "MFGFIELD_CHECKPOINTLOG" },
2519 { MFGFIELD_CPUREGISTERS, "MFGFIELD_CPUREGISTERS" },
2520 { MFGFIELD_TASKFLAGS, "MFGFIELD_TASKFLAGS" },
2521 { MFGFIELD_TIMERCHAIN, "MFGFIELD_TIMERCHAIN" },
2522 { MFGFIELD_PEEKPOKE, "MFGFIELD_PEEKPOKE" },
2523 { MFGFIELD_LOCKSTATE, "MFGFIELD_LOCKSTATE" },
2524 { MFGFIELD_CAPABILITIES, "MFGFIELD_CAPABILITIES" },
2525 { MFGFIELD_DUMPM41T81, "MFGFIELD_DUMPM41T81" },
2526 { MFGFIELD_NVRAMCHECKSUMVALUE, "MFGFIELD_NVRAMCHECKSUMVALUE" },
2527 { MFGFIELD_CHECKSUMRESULTS, "MFGFIELD_CHECKSUMRESULTS" },
2528 { MFGFIELD_MORTISESTATELOG, "MFGFIELD_MORTISESTATELOG" },
2529 { MFGFIELD_MORTISEPINS, "MFGFIELD_MORTISEPINS" },
2530 { MFGFIELD_KEYPADCHAR, "MFGFIELD_KEYPADCHAR" },
2531 { MFGFIELD_MAGCARD, "MFGFIELD_MAGCARD" },
2532 { MFGFIELD_PROXCARD, "MFGFIELD_PROXCARD" },
2533 { 0, NULL }
2535 static value_string_ext r3_mfgfieldnames_ext = VALUE_STRING_EXT_INIT(r3_mfgfieldnames);
2537 static const value_string r3_mortiseeventnames [] =
2539 { MORTISEEVENT_DX_THROWN, "MORTISEEVENT_DX_THROWN" },
2540 { MORTISEEVENT_DX_RETRACTED, "MORTISEEVENT_DX_RETRACTED" },
2541 { MORTISEEVENT_LX_RETRACTED, "MORTISEEVENT_LX_RETRACTED" },
2542 { MORTISEEVENT_LX_EXTENDED, "MORTISEEVENT_LX_EXTENDED" },
2543 { MORTISEEVENT_AX_EXTENDED, "MORTISEEVENT_AX_EXTENDED" },
2544 { MORTISEEVENT_AX_RETRACTED, "MORTISEEVENT_AX_RETRACTED" },
2545 { MORTISEEVENT_RX_DEPRESSED, "MORTISEEVENT_RX_DEPRESSED" },
2546 { MORTISEEVENT_RX_RELEASED, "MORTISEEVENT_RX_RELEASED" },
2547 { MORTISEEVENT_PX_OPEN, "MORTISEEVENT_PX_OPEN" },
2548 { MORTISEEVENT_PX_CLOSED, "MORTISEEVENT_PX_CLOSED" },
2549 { MORTISEEVENT_MX_UNLOCKED, "MORTISEEVENT_MX_UNLOCKED" },
2550 { MORTISEEVENT_MX_LOCKED, "MORTISEEVENT_MX_LOCKED" },
2551 { MORTISEEVENT_LAST, "MORTISEEVENT_LAST" },
2552 { MORTISEEVENT_IGNORE, "MORTISEEVENT_IGNORE" },
2553 { 0, NULL }
2555 static value_string_ext r3_mortiseeventnames_ext = VALUE_STRING_EXT_INIT(r3_mortiseeventnames);
2557 static const value_string r3_mortisetypenames [] =
2559 { MORTISETYPE_NONE, "MORTISETYPE_NONE" },
2560 { MORTISETYPE_S82276, "MORTISETYPE_S82276" },
2561 { MORTISETYPE_S82277, "MORTISETYPE_S82277" },
2562 { MORTISETYPE_S82278, "MORTISETYPE_S82278" },
2563 { MORTISETYPE_S82279, "MORTISETYPE_S82279" },
2564 { MORTISETYPE_S10G77, "MORTISETYPE_S10G77" },
2565 { MORTISETYPE_S8877, "MORTISETYPE_S8877" },
2566 { MORTISETYPE_S8878, "MORTISETYPE_S8878" },
2567 { MORTISETYPE_S8977, "MORTISETYPE_S8977" },
2568 { MORTISETYPE_S8978, "MORTISETYPE_S8978" },
2569 { MORTISETYPE_CRML20x36, "MORTISETYPE_CRML20x36" },
2570 { MORTISETYPE_CRML20x35, "MORTISETYPE_CRML20x35" },
2571 { MORTISETYPE_CRML20x34, "MORTISETYPE_CRML20x34" },
2572 { MORTISETYPE_CRML20x33, "MORTISETYPE_CRML20x33" },
2573 { MORTISETYPE_CRCL33x34, "MORTISETYPE_CRCL33x34" },
2574 { MORTISETYPE_CR9X34, "MORTISETYPE_CR9X34" },
2575 { MORTISETYPE_CR9X33, "MORTISETYPE_CR9X33" },
2576 { MORTISETYPE_CR9MX34, "MORTISETYPE_CR9MX34" },
2577 { MORTISETYPE_CR9MX33, "MORTISETYPE_CR9MX33" },
2578 { 0, NULL }
2580 static value_string_ext r3_mortisetypenames_ext = VALUE_STRING_EXT_INIT(r3_mortisetypenames);
2582 static const value_string r3_peekpokenames [] =
2584 { PEEKPOKE_READU8, "PEEKPOKE_READU8" },
2585 { PEEKPOKE_READU16, "PEEKPOKE_READU16" },
2586 { PEEKPOKE_READU24, "PEEKPOKE_READU24" },
2587 { PEEKPOKE_READU32, "PEEKPOKE_READU32" },
2588 { PEEKPOKE_READSTRING, "PEEKPOKE_READSTRING" },
2589 { PEEKPOKE_WRITEU8, "PEEKPOKE_WRITEU8" },
2590 { PEEKPOKE_WRITEU16, "PEEKPOKE_WRITEU16" },
2591 { PEEKPOKE_WRITEU24, "PEEKPOKE_WRITEU24" },
2592 { PEEKPOKE_WRITEU32, "PEEKPOKE_WRITEU32" },
2593 { PEEKPOKE_WRITESTRING, "PEEKPOKE_WRITESTRING" },
2594 { 0, NULL }
2596 static value_string_ext r3_peekpokenames_ext = VALUE_STRING_EXT_INIT(r3_peekpokenames);
2598 static const value_string r3_ppmisourcenames [] =
2600 { PPMISOURCE_NONE, "PPMISOURCE_NONE" },
2601 { PPMISOURCE_PIN, "PPMISOURCE_PIN" },
2602 { PPMISOURCE_PROX, "PPMISOURCE_PROX" },
2603 { PPMISOURCE_MAGCARD, "PPMISOURCE_MAGCARD" },
2604 { 0, NULL }
2606 static value_string_ext r3_ppmisourcenames_ext = VALUE_STRING_EXT_INIT(r3_ppmisourcenames);
2608 static const value_string r3_responsetypenames [] =
2610 { RESPONSETYPE_OK, "RESPONSETYPE_OK" },
2611 { RESPONSETYPE_ERROR, "RESPONSETYPE_ERROR" },
2612 { RESPONSETYPE_HASDATA, "RESPONSETYPE_HASDATA" },
2613 { RESPONSETYPE_NOHANDLER, "RESPONSETYPE_NOHANDLER" },
2614 { RESPONSETYPE_NOSESSION, "RESPONSETYPE_NOSESSION" },
2615 { RESPONSETYPE_BADCOMMAND, "RESPONSETYPE_BADCOMMAND" },
2616 { RESPONSETYPE_BADPARAMETER, "RESPONSETYPE_BADPARAMETER" },
2617 { RESPONSETYPE_BADPARAMETERLEN, "RESPONSETYPE_BADPARAMETERLEN" },
2618 { RESPONSETYPE_MISSINGPARAMETER, "RESPONSETYPE_MISSINGPARAMETER" },
2619 { RESPONSETYPE_DUPLICATEPARAMETER, "RESPONSETYPE_DUPLICATEPARAMETER" },
2620 { RESPONSETYPE_PARAMETERCONFLICT, "RESPONSETYPE_PARAMETERCONFLICT" },
2621 { RESPONSETYPE_BADDEVICE, "RESPONSETYPE_BADDEVICE" },
2622 { RESPONSETYPE_NVRAMERROR, "RESPONSETYPE_NVRAMERROR" },
2623 { RESPONSETYPE_NVRAMERRORNOACK, "RESPONSETYPE_NVRAMERRORNOACK" },
2624 { RESPONSETYPE_NVRAMERRORNOACK32, "RESPONSETYPE_NVRAMERRORNOACK32" },
2625 { RESPONSETYPE_NOTI2CADDRESS, "RESPONSETYPE_NOTI2CADDRESS" },
2626 { RESPONSETYPE_FIRMWAREERROR, "RESPONSETYPE_FIRMWAREERROR" },
2627 { RESPONSETYPE_DUMPINPROGRESS, "RESPONSETYPE_DUMPINPROGRESS" },
2628 { RESPONSETYPE_INTERNALERROR, "RESPONSETYPE_INTERNALERROR" },
2629 { RESPONSETYPE_NOTIMPLEMENTED, "RESPONSETYPE_NOTIMPLEMENTED" },
2630 { RESPONSETYPE_PINFORMATERROR, "RESPONSETYPE_PINFORMATERROR" },
2631 { RESPONSETYPE_PINEXISTS, "RESPONSETYPE_PINEXISTS" },
2632 { RESPONSETYPE_PINNOTFOUND, "RESPONSETYPE_PINNOTFOUND" },
2633 { RESPONSETYPE_USERACTIVE, "RESPONSETYPE_USERACTIVE" },
2634 { RESPONSETYPE_USERINACTIVE, "RESPONSETYPE_USERINACTIVE" },
2635 { RESPONSETYPE_PARENTNOTFOUND, "RESPONSETYPE_PARENTNOTFOUND" },
2636 { RESPONSETYPE_NOCHAIN, "RESPONSETYPE_NOCHAIN" },
2637 { RESPONSETYPE_CAUGHTINLOOP, "RESPONSETYPE_CAUGHTINLOOP" },
2638 { RESPONSETYPE_EVENTFILTERED, "RESPONSETYPE_EVENTFILTERED" },
2639 { RESPONSETYPE_PAYLOADTOOLARGE, "RESPONSETYPE_PAYLOADTOOLARGE" },
2640 { RESPONSETYPE_ENDOFDATA, "RESPONSETYPE_ENDOFDATA" },
2641 { RESPONSETYPE_RMTAUTHREJECTED, "RESPONSETYPE_RMTAUTHREJECTED" },
2642 { RESPONSETYPE_NVRAMVERSIONERROR, "RESPONSETYPE_NVRAMVERSIONERROR" },
2643 { RESPONSETYPE_NOHARDWARE, "RESPONSETYPE_NOHARDWARE" },
2644 { RESPONSETYPE_SCHEDULERCONFLICT, "RESPONSETYPE_SCHEDULERCONFLICT" },
2645 { RESPONSETYPE_NVRAMWRITEERROR, "RESPONSETYPE_NVRAMWRITEERROR" },
2646 { RESPONSETYPE_DECLINEDFILTERED, "RESPONSETYPE_DECLINEDFILTERED" },
2647 { RESPONSETYPE_NECONFIGPARM, "RESPONSETYPE_NECONFIGPARM" },
2648 { RESPONSETYPE_FLASHERASEERROR, "RESPONSETYPE_FLASHERASEERROR" },
2649 { RESPONSETYPE_FLASHWRITEERROR, "RESPONSETYPE_FLASHWRITEERROR" },
2650 { RESPONSETYPE_BADNVBACKUP, "RESPONSETYPE_BADNVBACKUP" },
2651 { RESPONSETYPE_EARLYACK, "RESPONSETYPE_EARLYACK" },
2652 { RESPONSETYPE_ALARMFILTERED, "RESPONSETYPE_ALARMFILTERED" },
2653 { RESPONSETYPE_ACVFAILURE, "RESPONSETYPE_ACVFAILURE" },
2654 { RESPONSETYPE_USERCHECKSUMERROR, "RESPONSETYPE_USERCHECKSUMERROR" },
2655 { RESPONSETYPE_CHECKSUMERROR, "RESPONSETYPE_CHECKSUMERROR" },
2656 { RESPONSETYPE_RTCSQWFAILURE, "RESPONSETYPE_RTCSQWFAILURE" },
2657 { RESPONSETYPE_PRIORITYSHUTDOWN, "RESPONSETYPE_PRIORITYSHUTDOWN" },
2658 { RESPONSETYPE_NOTMODIFIABLE, "RESPONSETYPE_NOTMODIFIABLE" },
2659 { RESPONSETYPE_CANTPRESERVE, "RESPONSETYPE_CANTPRESERVE" },
2660 { RESPONSETYPE_INPASSAGEMODE, "RESPONSETYPE_INPASSAGEMODE" },
2661 { 0, NULL }
2663 static value_string_ext r3_responsetypenames_ext = VALUE_STRING_EXT_INIT(r3_responsetypenames);
2665 static const value_string r3_timezonemodenames [] =
2667 { TIMEZONEMODE_NORMAL, "TIMEZONEMODE_NORMAL" },
2668 { TIMEZONEMODE_EXCLUSION, "TIMEZONEMODE_EXCLUSION" },
2669 { TIMEZONEMODE_AUTOTIME, "TIMEZONEMODE_AUTOTIME" },
2670 { TIMEZONEMODE_AUTOFPT, "TIMEZONEMODE_AUTOFPT" },
2671 { TIMEZONEMODE_UAPM, "TIMEZONEMODE_UAPM" },
2672 { 0, NULL }
2674 static value_string_ext r3_timezonemodenames_ext = VALUE_STRING_EXT_INIT(r3_timezonemodenames);
2676 static const value_string r3_upstreamcommandnames [] =
2678 { UPSTREAMCOMMAND_RESERVED, "UPSTREAMCOMMAND_RESERVED" },
2679 { UPSTREAMCOMMAND_DEBUGMSG, "UPSTREAMCOMMAND_DEBUGMSG" },
2680 { UPSTREAMCOMMAND_QUERYVERSION, "UPSTREAMCOMMAND_QUERYVERSION" },
2681 { UPSTREAMCOMMAND_QUERYDATETIME, "UPSTREAMCOMMAND_QUERYDATETIME" },
2682 { UPSTREAMCOMMAND_QUERYSERIALNUMBER, "UPSTREAMCOMMAND_QUERYSERIALNUMBER" },
2683 { UPSTREAMCOMMAND_DUMPEVENTLOG, "UPSTREAMCOMMAND_DUMPEVENTLOG" },
2684 { UPSTREAMCOMMAND_DUMPNVRAM, "UPSTREAMCOMMAND_DUMPNVRAM" },
2685 { UPSTREAMCOMMAND_RMTAUTHREQUEST, "UPSTREAMCOMMAND_RMTAUTHREQUEST" },
2686 { UPSTREAMCOMMAND_RETRIEVEUSER, "UPSTREAMCOMMAND_RETRIEVEUSER" },
2687 { UPSTREAMCOMMAND_QUERYCONFIG, "UPSTREAMCOMMAND_QUERYCONFIG" },
2688 { UPSTREAMCOMMAND_RMTEVENTLOGRECORD, "UPSTREAMCOMMAND_RMTEVENTLOGRECORD" },
2689 { UPSTREAMCOMMAND_DPAC, "UPSTREAMCOMMAND_DPAC" },
2690 { UPSTREAMCOMMAND_NOTIFY, "UPSTREAMCOMMAND_NOTIFY" },
2691 { UPSTREAMCOMMAND_MFG, "UPSTREAMCOMMAND_MFG" },
2692 { UPSTREAMCOMMAND_EVENTLOGWARNING, "UPSTREAMCOMMAND_EVENTLOGWARNING" },
2693 { UPSTREAMCOMMAND_DUMPNVRAMRLE, "UPSTREAMCOMMAND_DUMPNVRAMRLE" },
2694 { UPSTREAMCOMMAND_RMTDECLINEDRECORD, "UPSTREAMCOMMAND_RMTDECLINEDRECORD" },
2695 { UPSTREAMCOMMAND_DECLINEDWARNING, "UPSTREAMCOMMAND_DECLINEDWARNING" },
2696 { UPSTREAMCOMMAND_DUMPDECLINEDLOG, "UPSTREAMCOMMAND_DUMPDECLINEDLOG" },
2697 { UPSTREAMCOMMAND_RMTALARMRECORD, "UPSTREAMCOMMAND_RMTALARMRECORD" },
2698 { UPSTREAMCOMMAND_ALARMWARNING, "UPSTREAMCOMMAND_ALARMWARNING" },
2699 { UPSTREAMCOMMAND_DUMPALARMLOG, "UPSTREAMCOMMAND_DUMPALARMLOG" },
2700 { UPSTREAMCOMMAND_CONNECTSCHEDULER, "UPSTREAMCOMMAND_CONNECTSCHEDULER" },
2701 { UPSTREAMCOMMAND_CONNECTCOMMUSER, "UPSTREAMCOMMAND_CONNECTCOMMUSER" },
2702 { UPSTREAMCOMMAND_CONNECTALARM, "UPSTREAMCOMMAND_CONNECTALARM" },
2703 { UPSTREAMCOMMAND_DUMPDEBUGLOG, "UPSTREAMCOMMAND_DUMPDEBUGLOG" },
2704 { 0, NULL }
2706 static value_string_ext r3_upstreamcommandnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamcommandnames);
2708 static const value_string r3_upstreamfieldnames [] =
2710 { UPSTREAMFIELD_NOTUSED, "UPSTREAMFIELD_NOTUSED" },
2711 { UPSTREAMFIELD_SERIALNUMBER, "UPSTREAMFIELD_SERIALNUMBER" },
2712 { UPSTREAMFIELD_NAR, "UPSTREAMFIELD_NAR" },
2713 { UPSTREAMFIELD_ENTRYDEVICE, "UPSTREAMFIELD_ENTRYDEVICE" },
2714 { UPSTREAMFIELD_PPMIFIELDTYPE, "UPSTREAMFIELD_PPMIFIELDTYPE" },
2715 { UPSTREAMFIELD_PIN, "UPSTREAMFIELD_PIN" },
2716 { UPSTREAMFIELD_SEQUENCENUMBER, "UPSTREAMFIELD_SEQUENCENUMBER" },
2717 { UPSTREAMFIELD_RESPONSEWINDOW, "UPSTREAMFIELD_RESPONSEWINDOW" },
2718 { UPSTREAMFIELD_USERNUMBER, "UPSTREAMFIELD_USERNUMBER" },
2719 { UPSTREAMFIELD_VERSION, "UPSTREAMFIELD_VERSION" },
2720 { UPSTREAMFIELD_EVENTLOGRECORD, "UPSTREAMFIELD_EVENTLOGRECORD" },
2721 { UPSTREAMFIELD_DATETIME, "UPSTREAMFIELD_DATETIME" },
2722 { UPSTREAMFIELD_EVENTLOGRECORDCOUNT, "UPSTREAMFIELD_EVENTLOGRECORDCOUNT" },
2723 { UPSTREAMFIELD_DECLINEDRECORDCOUNT, "UPSTREAMFIELD_DECLINEDRECORDCOUNT" },
2724 { UPSTREAMFIELD_DECLINEDRECORD, "UPSTREAMFIELD_DECLINEDRECORD" },
2725 { UPSTREAMFIELD_USERTYPE, "UPSTREAMFIELD_USERTYPE" },
2726 { UPSTREAMFIELD_ACCESSALWAYS, "UPSTREAMFIELD_ACCESSALWAYS" },
2727 { UPSTREAMFIELD_CACHED, "UPSTREAMFIELD_CACHED" },
2728 { UPSTREAMFIELD_PRIMARYFIELDTYPE, "UPSTREAMFIELD_PRIMARYFIELDTYPE" },
2729 { UPSTREAMFIELD_AUXFIELDTYPE, "UPSTREAMFIELD_AUXFIELDTYPE" },
2730 { UPSTREAMFIELD_ACCESSMODE, "UPSTREAMFIELD_ACCESSMODE" },
2731 { UPSTREAMFIELD_EXPIREON, "UPSTREAMFIELD_EXPIREON" },
2732 { UPSTREAMFIELD_USECOUNT, "UPSTREAMFIELD_USECOUNT" },
2733 { UPSTREAMFIELD_TIMEZONE, "UPSTREAMFIELD_TIMEZONE" },
2734 { UPSTREAMFIELD_EXCEPTIONGROUP, "UPSTREAMFIELD_EXCEPTIONGROUP" },
2735 { UPSTREAMFIELD_PRIMARYPIN, "UPSTREAMFIELD_PRIMARYPIN" },
2736 { UPSTREAMFIELD_AUXPIN, "UPSTREAMFIELD_AUXPIN" },
2737 { UPSTREAMFIELD_ALARMRECORDCOUNT, "UPSTREAMFIELD_ALARMRECORDCOUNT" },
2738 { UPSTREAMFIELD_ALARMRECORD, "UPSTREAMFIELD_ALARMRECORD" },
2739 { UPSTREAMFIELD_AUXCTLRVERSION, "UPSTREAMFIELD_AUXCTLRVERSION" },
2740 { 0, NULL }
2742 static value_string_ext r3_upstreamfieldnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamfieldnames);
2744 static const value_string r3_usertypenames [] =
2746 { USERTYPE_NONE, "USERTYPE_NONE" },
2747 { USERTYPE_MASTER, "USERTYPE_MASTER" },
2748 { USERTYPE_EMERGENCY, "USERTYPE_EMERGENCY" },
2749 { USERTYPE_SUPERVISOR, "USERTYPE_SUPERVISOR" },
2750 { USERTYPE_USER, "USERTYPE_USER" },
2751 { USERTYPE_EXTENDED, "USERTYPE_EXTENDED" },
2752 { USERTYPE_PASSAGE, "USERTYPE_PASSAGE" },
2753 { USERTYPE_ONETIME, "USERTYPE_ONETIME" },
2754 { USERTYPE_PANIC, "USERTYPE_PANIC" },
2755 { USERTYPE_LOCKOUT, "USERTYPE_LOCKOUT" },
2756 { USERTYPE_RELOCK, "USERTYPE_RELOCK" },
2757 { USERTYPE_NOTIFY, "USERTYPE_NOTIFY" },
2758 { USERTYPE_COMM, "USERTYPE_COMM" },
2759 { USERTYPE_SUSPENDED, "USERTYPE_SUSPENDED" },
2760 { 0, NULL }
2762 static value_string_ext r3_usertypenames_ext = VALUE_STRING_EXT_INIT(r3_usertypenames);
2764 static const value_string r3_mfgnvramdumpnames [] =
2766 { 0, "All" },
2767 { 1, "PIC" },
2768 { 2, "User" },
2769 { 3, "Event" },
2770 { 0, NULL }
2772 static value_string_ext r3_mfgnvramdumpnames_ext = VALUE_STRING_EXT_INIT(r3_mfgnvramdumpnames);
2774 static const value_string r3_mfgremoteunlocknames [] =
2776 { 0, "Normal" },
2777 { 1, "Unlock" },
2778 { 2, "Lock" },
2779 { 0, NULL }
2781 static value_string_ext r3_mfgremoteunlocknames_ext = VALUE_STRING_EXT_INIT(r3_mfgremoteunlocknames);
2783 static const value_string r3_mfgtestpreservenames [] =
2785 { 0, "Save" },
2786 { 1, "Restore" },
2787 { 0, NULL }
2789 static value_string_ext r3_mfgtestpreservenames_ext = VALUE_STRING_EXT_INIT(r3_mfgtestpreservenames);
2791 static const value_string r3_daynames [] =
2793 { 0, "Sunday" },
2794 { 1, "Monday" },
2795 { 2, "Tuesday" },
2796 { 3, "Wednesday" },
2797 { 4, "Thursday" },
2798 { 5, "Friday" },
2799 { 6, "Saturday" },
2800 { 0, NULL }
2802 static value_string_ext r3_daynames_ext = VALUE_STRING_EXT_INIT(r3_daynames);
2804 static const value_string r3_monthnames [] =
2806 { 0, "ERROR!" },
2807 { 1, "January" },
2808 { 2, "February" },
2809 { 3, "March" },
2810 { 4, "April" },
2811 { 5, "May" },
2812 { 6, "June" },
2813 { 7, "July" },
2814 { 8, "August" },
2815 { 9, "September" },
2816 { 10, "October" },
2817 { 11, "November" },
2818 { 12, "December" },
2819 { 0, NULL }
2821 static value_string_ext r3_monthnames_ext = VALUE_STRING_EXT_INIT(r3_monthnames);
2823 static const value_string r3_monthdaynames [] =
2825 { 0, "ERROR!" },
2826 { 1, " 1st" },
2827 { 2, " 2nd" },
2828 { 3, " 3rd" },
2829 { 4, " 4th" },
2830 { 5, " 5th" },
2831 { 6, " 6th" },
2832 { 7, " 7th" },
2833 { 8, " 8th" },
2834 { 9, " 9th" },
2835 { 10, "10th" },
2836 { 11, "11th" },
2837 { 12, "12th" },
2838 { 13, "13th" },
2839 { 14, "14th" },
2840 { 15, "15th" },
2841 { 16, "16th" },
2842 { 17, "17th" },
2843 { 18, "18th" },
2844 { 19, "19th" },
2845 { 20, "20th" },
2846 { 21, "21st" },
2847 { 22, "22nd" },
2848 { 23, "23rd" },
2849 { 24, "24th" },
2850 { 25, "25th" },
2851 { 26, "26th" },
2852 { 27, "27th" },
2853 { 28, "28th" },
2854 { 29, "29th" },
2855 { 30, "30th" },
2856 { 31, "31st" },
2857 { 0, NULL }
2859 static value_string_ext r3_monthdaynames_ext = VALUE_STRING_EXT_INIT(r3_monthdaynames);
2861 static const value_string r3_powertablenames [] =
2863 { 1, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2864 { 2, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2865 { 3, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2866 { 4, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
2867 { 5, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {13, 12, 12, 11, 11, 10, 10, 9}" },
2868 { 6, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {14, 13, 13, 12, 12, 11, 11, 10}" },
2869 { 7, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {15, 14, 14, 13, 13, 12, 12, 11}" },
2870 { 8, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {16, 15, 15, 14, 14, 13, 13, 12}" },
2871 { 0, NULL }
2873 static value_string_ext r3_powertablenames_ext = VALUE_STRING_EXT_INIT(r3_powertablenames);
2875 static const true_false_string tfs_rmtauthretry_flags =
2877 "Retry",
2878 "Deny"
2881 static const true_false_string tfs_errornoerror_flags =
2883 "Error",
2884 "No Error"
2887 static const string_string r3_snmanufacturernames [] =
2889 { "IT", "ITS" },
2890 { "KC", "Kimchuk" },
2891 { NULL, NULL }
2894 static const string_string r3_snyearnames [] =
2896 { "5", "2005" },
2897 { "6", "2006" },
2898 { "7", "2007" },
2899 { "8", "2008" },
2900 { "9", "2009" },
2901 { "0", "2010" },
2902 { "1", "2011" },
2903 { "2", "2012" },
2904 { "3", "2013" },
2905 { "4", "2014" },
2906 { NULL, NULL }
2909 static const string_string r3_snmodelnames [] =
2911 { "H", "Sx controller" },
2912 { "J", "Px controller" },
2913 { "D", "PG offline interface board" },
2914 { "E", "Px online interface board" },
2915 { "N", "Ethernet-PD board" },
2916 { "O", "CAM board" },
2917 { NULL, NULL }
2920 static const string_string r3_sngroupnames [] =
2922 { "S", "Sargent" },
2923 { "P", "Persona" },
2924 { "C", "Corbin-Russwin" },
2925 { NULL, NULL }
2928 static const string_string r3_snnidnames [] =
2930 { "A", "Ethernet" },
2931 { "B", "DPAC 802.11b" },
2932 { "C", "DPAC 802.11bg" },
2933 { "D", "Zigbee" },
2934 { "E", "GPRS" },
2935 { NULL, NULL }
2938 static const string_string r3_snhidnames [] =
2940 { "00", "[None]" },
2941 { "01", "Keypad" },
2942 { "02", "eProx" },
2943 { "03", "eProx, Keypad" },
2944 { "04", "iProx" },
2945 { "05", "iProx, Keypad" },
2946 { "06", "iProx, eProx" },
2947 { "07", "iProx, eProx, Keypad" },
2948 { "08", "Mag Card" },
2949 { "09", "Mag Card, Keypad" },
2950 { "0a", "Mag Card, eProx" },
2951 { "0b", "Mag Card, eProx, Keypad" },
2952 { "0c", "Mag Card, iProx" },
2953 { "0d", "Mag Card, iProx, Keypad" },
2954 { "0e", "Mag Card, iProx, eProx" },
2955 { "0f", "Mag Card, iProx, eProx, Keypad" },
2956 { "10", "Biometric" },
2957 { "11", "Biometric, Keypad" },
2958 { "12", "Biometric, eProx" },
2959 { "13", "Biometric, eProx, Keypad" },
2960 { "14", "Biometric, iProx" },
2961 { "15", "Biometric, iProx, Keypad" },
2962 { "16", "Biometric, iProx, eProx" },
2963 { "17", "Biometric, iProx, eProx, Keypad" },
2964 { "18", "Biometric, Mag Card" },
2965 { "19", "Biometric, Mag Card, Keypad" },
2966 { "1a", "Biometric, Mag Card, eProx" },
2967 { "1b", "Biometric, Mag Card, eProx, Keypad" },
2968 { "1c", "Biometric, Mag Card, iProx" },
2969 { "1d", "Biometric, Mag Card, iProx, Keypad" },
2970 { "1e", "Biometric, Mag Card, iProx, eProx" },
2971 { "1f", "Biometric, Mag Card, iProx, eProx, Keypad" },
2972 { NULL, NULL }
2975 static const string_string r3_snpowersupplynames [] =
2977 { "A", "Batteries" },
2978 { "B", "External power" },
2979 { "C", "Power over Ethernet" },
2980 { "D", "External power w/ backup" },
2981 { "E", "Power over Ethernet w/ backup" },
2982 { NULL, NULL }
2985 static const string_string r3_snmortisenames [] =
2987 { "A", "Sargent 82276 mortise" },
2988 { "B", "Sargent 82277 mortise" },
2989 { "C", "Sargent 82278 mortise" },
2990 { "D", "Sargent 82279 mortise" },
2991 { "E", "Sargent 10G77 bored" },
2992 { "F", "Sargent 8877 exit" },
2993 { "G", "Sargent 8878 exit" },
2994 { "H", "Sargent 8977 exit" },
2995 { "I", "Sargent 8878 exit" },
2996 { "J", "Corbin-Russwin ML20736/ML20836 mortise" },
2997 { "K", "Corbin-Russwin ML20735/ML20835 mortise" },
2998 { "L", "Corbin-Russwin ML20734/ML20834 mortise" },
2999 { "M", "Corbin-Russwin ML20733/ML20833 mortise" },
3000 { "N", "Corbin-Russwin CL33734/CL33834 bored" },
3001 { "O", "Corbin-Russwin 9734/9834 exit" },
3002 { "P", "Corbin-Russwin 9733/9833 exit" },
3003 { "Q", "Corbin-Russwin 9M734/9M834 exit" },
3004 { "R", "Corbin-Russwin 9M733/9M833 exit" },
3005 { NULL, NULL }
3008 static int * const r3_timezonearray[] = {
3009 &hf_r3_timezonearray0,
3010 &hf_r3_timezonearray1,
3011 &hf_r3_timezonearray2,
3012 &hf_r3_timezonearray3,
3013 &hf_r3_timezonearray4,
3014 &hf_r3_timezonearray5,
3015 &hf_r3_timezonearray6,
3016 &hf_r3_timezonearray7,
3017 &hf_r3_timezonearray8,
3018 &hf_r3_timezonearray9,
3019 &hf_r3_timezonearray10,
3020 &hf_r3_timezonearray11,
3021 &hf_r3_timezonearray12,
3022 &hf_r3_timezonearray13,
3023 &hf_r3_timezonearray14,
3024 &hf_r3_timezonearray15,
3025 &hf_r3_timezonearray16,
3026 &hf_r3_timezonearray17,
3027 &hf_r3_timezonearray18,
3028 &hf_r3_timezonearray19,
3029 &hf_r3_timezonearray20,
3030 &hf_r3_timezonearray21,
3031 &hf_r3_timezonearray22,
3032 &hf_r3_timezonearray23,
3033 &hf_r3_timezonearray24,
3034 &hf_r3_timezonearray25,
3035 &hf_r3_timezonearray26,
3036 &hf_r3_timezonearray27,
3037 &hf_r3_timezonearray28,
3038 &hf_r3_timezonearray29,
3039 &hf_r3_timezonearray30,
3040 &hf_r3_timezonearray31,
3041 NULL
3044 static int * const r3_definetimezone_daymap[] = {
3045 &hf_r3_definetimezone_daymap0,
3046 &hf_r3_definetimezone_daymap1,
3047 &hf_r3_definetimezone_daymap2,
3048 &hf_r3_definetimezone_daymap3,
3049 &hf_r3_definetimezone_daymap4,
3050 &hf_r3_definetimezone_daymap5,
3051 &hf_r3_definetimezone_daymap6,
3052 NULL
3055 static int * const r3_nvramclearoptions[] = {
3056 &hf_r3_nvramclearoptions0,
3057 &hf_r3_nvramclearoptions1,
3058 &hf_r3_nvramclearoptions2,
3059 &hf_r3_nvramclearoptions3,
3060 &hf_r3_nvramclearoptions4,
3061 &hf_r3_nvramclearoptions5,
3062 &hf_r3_nvramclearoptions6,
3063 &hf_r3_nvramclearoptions7,
3064 &hf_r3_nvramclearoptions8,
3065 &hf_r3_nvramclearoptions9,
3066 &hf_r3_nvramclearoptions10,
3067 &hf_r3_nvramclearoptions11,
3068 &hf_r3_nvramclearoptions12,
3069 &hf_r3_nvramclearoptions13,
3070 &hf_r3_nvramclearoptions14,
3071 &hf_r3_nvramclearoptions15,
3072 NULL
3076 * Mapping table so dissect_r3_cmd_setconfig() knows what the configuration item type is
3078 static configType_e configMap [] =
3080 /* CONFIGITEM_SERIAL_NUMBER */ CONFIGTYPE_STRING,
3081 /* CONFIGITEM_CRYPT_KEY */ CONFIGTYPE_STRING,
3082 /* CONFIGITEM_HARDWARE_OPTIONS_MFG */ CONFIGTYPE_16,
3083 /* CONFIGITEM_HARDWARE_OPTIONS */ CONFIGTYPE_16,
3084 /* CONFIGITEM_NVRAM_CHANGES */ CONFIGTYPE_16,
3085 /* CONFIGITEM_NVRAMDIRTY */ CONFIGTYPE_BOOL,
3086 /* CONFIGITEM_NVRAM_WV */ CONFIGTYPE_BOOL,
3087 /* CONFIGITEM_ENABLE_WDT */ CONFIGTYPE_BOOL,
3088 /* CONFIGITEM_EARLY_ACK */ CONFIGTYPE_BOOL,
3089 /* CONFIGITEM_CONSOLE_AES_ONLY */ CONFIGTYPE_BOOL,
3090 /* CONFIGITEM_RADIO_AES_ONLY */ CONFIGTYPE_BOOL,
3091 /* CONFIGITEM_NDRLE */ CONFIGTYPE_BOOL,
3092 /* CONFIGITEM_SOMF */ CONFIGTYPE_BOOL,
3093 /* CONFIGITEM_NOGAF */ CONFIGTYPE_BOOL,
3094 /* CONFIGITEM_CARD_READER_POWER */ CONFIGTYPE_BOOL,
3095 /* CONFIGITEM_PROX_ENABLE */ CONFIGTYPE_BOOL,
3096 /* CONFIGITEM_CKSUMCONFIG */ CONFIGTYPE_BOOL,
3097 /* CONFIGITEM_DAILY_BATTERY_CHECK */ CONFIGTYPE_BOOL,
3098 /* CONFIGITEM_DAILY_BATTERY_CHECK_HOUR */ CONFIGTYPE_8,
3099 /* CONFIGITEM_BATTERY_LOW */ CONFIGTYPE_BOOL,
3100 /* CONFIGITEM_LRU_HEAD */ CONFIGTYPE_16,
3101 /* CONFIGITEM_LRU_TAIL */ CONFIGTYPE_16,
3102 /* CONFIGITEM_RTC_CALIBRATION */ CONFIGTYPE_8,
3103 /* CONFIGITEM_ACVREQUESTER */ CONFIGTYPE_8,
3104 /* CONFIGITEM_LOCAL_LED */ CONFIGTYPE_8,
3105 /* CONFIGITEM_ERRCNT_XORLEN */ CONFIGTYPE_16,
3106 /* CONFIGITEM_ERRCNT_CRC */ CONFIGTYPE_16,
3107 /* CONFIGITEM_ERRCNT_NOTSIGIL */ CONFIGTYPE_16,
3108 /* CONFIGITEM_ERRCNT_TIMEOUT */ CONFIGTYPE_16,
3109 /* CONFIGITEM_ERRCNT_TOOLONG */ CONFIGTYPE_16,
3110 /* CONFIGITEM_ERRCNT_TOOSHORT */ CONFIGTYPE_16,
3111 /* CONFIGITEM_ERRCNT_HITDEFAULT */ CONFIGTYPE_16,
3112 /* CONFIGITEM_ERRCNT_OVERRUN */ CONFIGTYPE_16,
3113 /* CONFIGITEM_ERRCNT_UARTFE */ CONFIGTYPE_16,
3114 /* CONFIGITEM_ERRCNT_UARTOE */ CONFIGTYPE_16,
3115 /* CONFIGITEM_DST_SET */ CONFIGTYPE_BOOL,
3116 /* CONFIGITEM_DST_MODE */ CONFIGTYPE_8,
3117 /* CONFIGITEM_DST_FORWARD_MONTH */ CONFIGTYPE_8,
3118 /* CONFIGITEM_DST_FORWARD_DOM */ CONFIGTYPE_8,
3119 /* CONFIGITEM_DST_FORWARD_OOD */ CONFIGTYPE_8,
3120 /* CONFIGITEM_DST_FORWARD_DOW */ CONFIGTYPE_8,
3121 /* CONFIGITEM_DST_FORWARD_HOUR */ CONFIGTYPE_8,
3122 /* CONFIGITEM_DST_FORWARD_MINUTE */ CONFIGTYPE_8,
3123 /* CONFIGITEM_DST_FORWARD_ADJUST */ CONFIGTYPE_8,
3124 /* CONFIGITEM_DST_BACK_MONTH */ CONFIGTYPE_8,
3125 /* CONFIGITEM_DST_BACK_DOM */ CONFIGTYPE_8,
3126 /* CONFIGITEM_DST_BACK_OOD */ CONFIGTYPE_8,
3127 /* CONFIGITEM_DST_BACK_DOW */ CONFIGTYPE_8,
3128 /* CONFIGITEM_DST_BACK_HOUR */ CONFIGTYPE_8,
3129 /* CONFIGITEM_DST_BACK_MINUTE */ CONFIGTYPE_8,
3130 /* CONFIGITEM_DST_BACK_ADJUST */ CONFIGTYPE_8,
3131 /* CONFIGITEM_EVENTLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3132 /* CONFIGITEM_EVENTLOG_BEGIN */ CONFIGTYPE_16,
3133 /* CONFIGITEM_EVENTLOG_RECORD */ CONFIGTYPE_16,
3134 /* CONFIGITEM_EVENTLOG_ENTRIES */ CONFIGTYPE_16,
3135 /* CONFIGITEM_EVENTLOG_WARNDEVICE */ CONFIGTYPE_8,
3136 /* CONFIGITEM_EVENTLOG_WARNEVERY */ CONFIGTYPE_16,
3137 /* CONFIGITEM_EVENTLOG_RMTDEVICE */ CONFIGTYPE_8,
3138 /* CONFIGITEM_DECLINEDLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3139 /* CONFIGITEM_DECLINEDLOG_BEGIN */ CONFIGTYPE_16,
3140 /* CONFIGITEM_DECLINEDLOG_RECORD */ CONFIGTYPE_16,
3141 /* CONFIGITEM_DECLINEDLOG_ENTRIES */ CONFIGTYPE_16,
3142 /* CONFIGITEM_DECLINEDLOG_WARNDEVICE */ CONFIGTYPE_8,
3143 /* CONFIGITEM_DECLINEDLOG_WARNEVERY */ CONFIGTYPE_16,
3144 /* CONFIGITEM_DECLINEDLOG_RMTDEVICE */ CONFIGTYPE_8,
3145 /* CONFIGITEM_ALARMLOG_ZEROMEM */ CONFIGTYPE_BOOL,
3146 /* CONFIGITEM_ALARMLOG_BEGIN */ CONFIGTYPE_16,
3147 /* CONFIGITEM_ALARMLOG_RECORD */ CONFIGTYPE_16,
3148 /* CONFIGITEM_ALARMLOG_ENTRIES */ CONFIGTYPE_16,
3149 /* CONFIGITEM_ALARMLOG_WARNDEVICE */ CONFIGTYPE_8,
3150 /* CONFIGITEM_ALARMLOG_WARNEVERY */ CONFIGTYPE_16,
3151 /* CONFIGITEM_ALARMLOG_RMTDEVICE */ CONFIGTYPE_8,
3152 /* CONFIGITEM_VISIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
3153 /* CONFIGITEM_AUDIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
3154 /* CONFIGITEM_VISIBLE_INDICATORS */ CONFIGTYPE_BOOL,
3155 /* CONFIGITEM_AUDIBLE_INDICATORS */ CONFIGTYPE_BOOL,
3156 /* CONFIGITEM_2NDPINDURATION */ CONFIGTYPE_8,
3157 /* CONFIGITEM_LOCKOUT_ATTEMPTS */ CONFIGTYPE_8,
3158 /* CONFIGITEM_LOCKOUT_DURATION */ CONFIGTYPE_8,
3159 /* CONFIGITEM_KEYPAD_INACTIVITY */ CONFIGTYPE_8,
3160 /* CONFIGITEM_ICIDLE_DURATION */ CONFIGTYPE_8,
3161 /* CONFIGITEM_WRITE_DECLINED_LOG */ CONFIGTYPE_BOOL,
3162 /* CONFIGITEM_LOW_BATTERY_INDICATOR */ CONFIGTYPE_BOOL,
3163 /* CONFIGITEM_PANIC_MODE */ CONFIGTYPE_BOOL,
3164 /* CONFIGITEM_TIMEZONE_ENABLE */ CONFIGTYPE_BOOL,
3165 /* CONFIGITEM_EXCEPTION_ENABLE */ CONFIGTYPE_BOOL,
3166 /* CONFIGITEM_AUTOUNLOCK_ENABLE */ CONFIGTYPE_BOOL,
3167 /* CONFIGITEM_LOCK_PRIORITY_EMERGENCY */ CONFIGTYPE_8,
3168 /* CONFIGITEM_LOCK_PRIORITY_SUPERVISOR */ CONFIGTYPE_8,
3169 /* CONFIGITEM_LOCK_PRIORITY_USER */ CONFIGTYPE_8,
3170 /* CONFIGITEM_LOCK_PRIORITY_PASSAGE */ CONFIGTYPE_8,
3171 /* CONFIGITEM_LOCK_PRIORITY_PANIC */ CONFIGTYPE_8,
3172 /* CONFIGITEM_LOCK_PRIORITY_LOCKOUT */ CONFIGTYPE_8,
3173 /* CONFIGITEM_LOCK_PRIORITY_RELOCK */ CONFIGTYPE_8,
3174 /* CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN */ CONFIGTYPE_8,
3175 /* CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE */ CONFIGTYPE_8,
3176 /* CONFIGITEM_LOCK_PRIORITY_REMOTE */ CONFIGTYPE_8,
3177 /* CONFIGITEM_LOCK_TYPE */ CONFIGTYPE_8,
3178 /* CONFIGITEM_DOUBLE_PULSE */ CONFIGTYPE_BOOL,
3179 /* CONFIGITEM_DOUBLE_DELAY */ CONFIGTYPE_8,
3180 /* CONFIGITEM_MOTOR_DURATION */ CONFIGTYPE_8,
3181 /* CONFIGITEM_MORTISE_TYPE */ CONFIGTYPE_8,
3182 /* CONFIGITEM_UNLOCK_TIME */ CONFIGTYPE_8,
3183 /* CONFIGITEM_EXT_UNLOCK_TIME */ CONFIGTYPE_8,
3184 /* CONFIGITEM_DOOR_AJAR_TIME */ CONFIGTYPE_8,
3185 /* CONFIGITEM_SESSION_TIMEOUT */ CONFIGTYPE_8,
3186 /* CONFIGITEM_RETRY_ON_TIMEOUT */ CONFIGTYPE_BOOL,
3187 /* CONFIGITEM_UNSOLICITED_ENCRYPT */ CONFIGTYPE_8,
3188 /* CONFIGITEM_RMT_AUTH_TIMEOUT */ CONFIGTYPE_8,
3189 /* CONFIGITEM_RMT_AUTH_DEVICE */ CONFIGTYPE_8,
3190 /* CONFIGITEM_ALARM_DEVICE */ CONFIGTYPE_8,
3191 /* CONFIGITEM_NOTIFY_DEVICE */ CONFIGTYPE_8,
3192 /* CONFIGITEM_COMMUSER_DEVICE */ CONFIGTYPE_8,
3193 /* CONFIGITEM_SCHEDULER_DEVICE */ CONFIGTYPE_8,
3194 /* CONFIGITEM_SCHEDULER_TYPE */ CONFIGTYPE_8,
3195 /* CONFIGITEM_SCHEDULER_AWAKE */ CONFIGTYPE_8,
3196 /* CONFIGITEM_SCHEDULER_PERIOD */ CONFIGTYPE_16,
3197 /* CONFIGITEM_SCHEDULER_HOD */ CONFIGTYPE_STRING,
3198 /* CONFIGITEM_SCHEDULER_DOW */ CONFIGTYPE_8,
3199 /* CONFIGITEM_SCHEDULER_DOM */ CONFIGTYPE_32,
3200 /* CONFIGITEM_SCHEDULER_HM1 */ CONFIGTYPE_16,
3201 /* CONFIGITEM_SCHEDULER_HM2 */ CONFIGTYPE_16,
3202 /* CONFIGITEM_SCHEDULER_HM3 */ CONFIGTYPE_16,
3203 /* CONFIGITEM_SCHEDULER_HM4 */ CONFIGTYPE_16,
3204 /* CONFIGITEM_RADIO_TYPE */ CONFIGTYPE_8,
3205 /* CONFIGITEM_RADIO_MODE */ CONFIGTYPE_8,
3206 /* CONFIGITEM_RADIO_TIMEOUT */ CONFIGTYPE_8,
3207 /* CONFIGITEM_RADIO_ATTEMPTS */ CONFIGTYPE_8,
3208 /* CONFIGITEM_RADIO_HOUSEKEEPING */ CONFIGTYPE_8,
3209 /* CONFIGITEM_RADIO_LEAPUSERNAME */ CONFIGTYPE_STRING,
3210 /* CONFIGITEM_RADIO_LEAPPASSWORD */ CONFIGTYPE_STRING,
3211 /* CONFIGITEM_INHIBIT_VOLTAGE */ CONFIGTYPE_8,
3212 /* CONFIGITEM_LOW_VOLTAGE */ CONFIGTYPE_8,
3213 /* CONFIGITEM_PT_RANGE_1 */ CONFIGTYPE_8,
3214 /* CONFIGITEM_PT_RANGE_2 */ CONFIGTYPE_8,
3215 /* CONFIGITEM_PT_RANGE_3 */ CONFIGTYPE_8,
3216 /* CONFIGITEM_PT_RANGE_4 */ CONFIGTYPE_8,
3217 /* CONFIGITEM_PT_RANGE_5 */ CONFIGTYPE_8,
3218 /* CONFIGITEM_PT_RANGE_6 */ CONFIGTYPE_8,
3219 /* CONFIGITEM_PT_RANGE_7 */ CONFIGTYPE_8,
3220 /* CONFIGITEM_PT_RANGE_8 */ CONFIGTYPE_8,
3221 /* CONFIGITEM_MAGCARD_IFS */ CONFIGTYPE_BOOL,
3222 /* CONFIGITEM_MAGCARD_FIELDS */ CONFIGTYPE_8,
3223 /* CONFIGITEM_MAGCARD_OFFSET */ CONFIGTYPE_8,
3224 /* CONFIGITEM_MAGCARD_DIGITS */ CONFIGTYPE_8,
3225 /* CONFIGITEM_ALARMS */ CONFIGTYPE_STRING,
3226 /* CONFIGITEM_FILTERS */ CONFIGTYPE_STRING,
3227 /* CONFIGITEM_ALARMSTATE */ CONFIGTYPE_8,
3228 /* CONFIGITEM_DOORSTATE */ CONFIGTYPE_8,
3229 /* CONFIGITEM_DPACDEBUG */ CONFIGTYPE_BOOL,
3230 /* CONFIGITEM_FAILOPENSECURE */ CONFIGTYPE_BOOL,
3231 /* CONFIGITEM_REPLACED_VOLTAGE */ CONFIGTYPE_8,
3232 /* CONFIGITEM_RX_HELD_TIME */ CONFIGTYPE_8,
3233 /* CONFIGITEM_PACKET_TIMEOUT */ CONFIGTYPE_8,
3234 /* CONFIGITEM_EXTENDEDRESPONSE */ CONFIGTYPE_BOOL,
3235 /* CONFIGITEM_PASSAGEMODEINDICATOR */ CONFIGTYPE_BOOL,
3236 /* CONFIGITEM_PFMRETURNTIME */ CONFIGTYPE_8
3241 * Dissectors for each command
3243 static void dissect_r3_cmd_response (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3244 static void dissect_r3_cmd_handshake (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3245 static void dissect_r3_cmd_killsession (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3246 static void dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3247 static void dissect_r3_cmd_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3248 static void dissect_r3_cmd_setdatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3249 static void dissect_r3_cmd_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3250 static void dissect_r3_cmd_setconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3251 static void dissect_r3_cmd_getconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3252 static void dissect_r3_cmd_manageuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3253 static void dissect_r3_cmd_deleteusers (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3254 static void dissect_r3_cmd_defineexception (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3255 static void dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3256 static void dissect_r3_cmd_definecalendar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3257 static void dissect_r3_cmd_definetimezone (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3258 static void dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3259 static void dissect_r3_cmd_filters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3260 static void dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3261 static void dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3262 static void dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3263 static void dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3264 static void dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3265 static void dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3266 static void dissect_r3_cmd_powertableselection (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3267 static void dissect_r3_cmd_clearnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3268 static void dissect_r3_cmd_dpac (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3269 static void dissect_r3_cmd_selftest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3270 static void dissect_r3_cmd_reset (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3271 static void dissect_r3_cmd_logwrite (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3272 static void dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3273 static void dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3274 static void dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3276 static void (*r3command_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3278 /* CMD_RESPONSE */ dissect_r3_cmd_response,
3279 /* CMD_HANDSHAKE */ dissect_r3_cmd_handshake,
3280 /* CMD_KILLSESSION */ dissect_r3_cmd_killsession,
3281 /* CMD_QUERYSERIALNUMBER */ dissect_r3_cmd_queryserialnumber,
3282 /* CMD_QUERYVERSION */ dissect_r3_cmd_queryversion,
3283 /* CMD_SETDATETIME */ dissect_r3_cmd_setdatetime,
3284 /* CMD_QUERYDATETIME */ dissect_r3_cmd_querydatetime,
3285 /* CMD_SETCONFIG */ dissect_r3_cmd_setconfig,
3286 /* CMD_GETCONFIG */ dissect_r3_cmd_getconfig,
3287 /* CMD_MANAGEUSER */ dissect_r3_cmd_manageuser,
3288 /* CMD_DELETEUSERS */ dissect_r3_cmd_deleteusers,
3289 /* CMD_DEFINEEXCEPTION */ dissect_r3_cmd_defineexception,
3290 /* CMD_DEFINEEXCEPTIONGROUP */ dissect_r3_cmd_defineexceptiongroup,
3291 /* CMD_DEFINECALENDAR */ dissect_r3_cmd_definecalendar,
3292 /* CMD_DEFINETIMEZONE */ dissect_r3_cmd_definetimezone,
3293 /* CMD_RMTAUTHRETRY */ dissect_r3_cmd_rmtauthretry,
3294 /* CMD_FILTERS */ dissect_r3_cmd_filters,
3295 /* CMD_ALARMCONFIGURE */ dissect_r3_cmd_alarmconfigure,
3296 /* CMD_EVENTLOGDUMP */ dissect_r3_cmd_eventlogdump,
3297 /* CMD_DECLINEDLOGDUMP */ dissect_r3_cmd_declinedlogdump,
3298 /* CMD_ALARMLOGDUMP */ dissect_r3_cmd_alarmlogdump,
3299 /* CMD_DOWNLOADFIRMWARE */ dissect_r3_cmd_downloadfirmware,
3300 /* CMD_DOWNLOADFIRMWARETIMEOUT */ dissect_r3_cmd_downloadfirmwaretimeout,
3301 /* CMD_POWERTABLESELECTION */ dissect_r3_cmd_powertableselection,
3302 /* CMD_CLEARNVRAM */ dissect_r3_cmd_clearnvram,
3303 /* CMD_DPAC */ dissect_r3_cmd_dpac,
3304 /* CMD_SELFTEST */ dissect_r3_cmd_selftest,
3305 /* CMD_RESET */ dissect_r3_cmd_reset,
3306 /* CMD_LOGWRITE */ dissect_r3_cmd_logwrite,
3307 /* CMD_MFGCOMMAND */ dissect_r3_cmd_mfgcommand,
3308 /* CMD_NVRAMBACKUP */ dissect_r3_cmd_nvrambackup,
3309 /* CMD_EXTENDEDRESPONSE */ dissect_r3_cmd_extendedresponse
3312 static void dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3313 static void dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3314 static void dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3315 static void dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3316 static void dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3317 static void dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3318 static void dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3319 static void dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3320 static void dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3321 static void dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3322 static void dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3323 static void dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3324 static void dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3325 static void dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3326 static void dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3327 static void dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3328 static void dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3329 static void dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3330 static void dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3331 static void dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3332 static void dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3333 static void dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3334 static void dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3335 static void dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3336 static void dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3337 static void dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3338 static void dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3339 static void dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3340 static void dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3341 static void dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3342 static void dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3343 static void dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3344 static void dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3345 static void dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3346 static void dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3348 static void (*r3commandmfg_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3350 /* CMDMFG_SETSERIALNUMBER */ dissect_r3_cmdmfg_setserialnumber,
3351 /* CMDMFG_SETCRYPTKEY */ dissect_r3_cmdmfg_setcryptkey,
3352 /* CMDMFG_DUMPNVRAM */ dissect_r3_cmdmfg_dumpnvram,
3353 /* CMDMFG_TERMINAL */ dissect_r3_cmdmfg_terminal,
3354 /* CMDMFG_REMOTEUNLOCK */ dissect_r3_cmdmfg_remoteunlock,
3355 /* CMDMFG_AUXCTLRVERSION */ dissect_r3_cmdmfg_auxctlrversion,
3356 /* CMDMFG_IOPINS */ dissect_r3_cmdmfg_iopins,
3357 /* CMDMFG_ADCS */ dissect_r3_cmdmfg_adcs,
3358 /* CMDMFG_HARDWAREID */ dissect_r3_cmdmfg_hardwareid,
3359 /* CMDMFG_CHECKPOINTLOGDUMP */ dissect_r3_cmdmfg_checkpointlogdump,
3360 /* CMDMFG_CHECKPOINTLOGCLEAR */ dissect_r3_cmdmfg_checkpointlogclear,
3361 /* CMDMFG_READREGISTERS */ dissect_r3_cmdmfg_readregisters,
3362 /* CMDMFG_FORCEOPTIONS */ dissect_r3_cmdmfg_forceoptions,
3363 /* CMDMFG_COMMUSER */ dissect_r3_cmdmfg_commuser,
3364 /* CMDMFG_DUMPKEYPAD */ dissect_r3_cmdmfg_dumpkeypad,
3365 /* CMDMFG_BATTERYCHECK */ dissect_r3_cmdmfg_batterycheck,
3366 /* CMDMFG_RAMREFRESH */ dissect_r3_cmdmfg_ramrefresh,
3367 /* CMDMFG_TASKFLAGS */ dissect_r3_cmdmfg_taskflags,
3368 /* CMDMFG_TIMERCHAIN */ dissect_r3_cmdmfg_timerchain,
3369 /* CMDMFG_PEEKPOKE */ dissect_r3_cmdmfg_peekpoke,
3370 /* CMDMFG_LOCKSTATE */ dissect_r3_cmdmfg_lockstate,
3371 /* CMDMFG_CAPABILITIES */ dissect_r3_cmdmfg_capabilities,
3372 /* CMDMFG_DUMPM41T81 */ dissect_r3_cmdmfg_dumpm41t81,
3373 /* CMDMFG_DEBUGLOGDUMP */ dissect_r3_cmdmfg_debuglogdump,
3374 /* CMDMFG_DEBUGLOGCLEAR */ dissect_r3_cmdmfg_debuglogclear,
3375 /* CMDMFG_TESTWDT */ dissect_r3_cmdmfg_testwdt,
3376 /* CMDMFG_QUERYCKSUM */ dissect_r3_cmdmfg_querycksum,
3377 /* CMDMFG_VALIDATECHECKSUMS */ dissect_r3_cmdmfg_validatechecksums,
3378 /* CMDMFG_REBUILDLRUCACHE */ dissect_r3_cmdmfg_rebuildlrucache,
3379 /* CMDMFG_TZUPDATE */ dissect_r3_cmdmfg_tzupdate,
3380 /* CMDMFG_TESTPRESERVE */ dissect_r3_cmdmfg_testpreserve,
3381 /* CMDMFG_MORTISESTATELOGDUMP */ dissect_r3_cmdmfg_mortisestatelogdump,
3382 /* CMDMFG_MORTISESTATELOGCLEAR */ dissect_r3_cmdmfg_mortisestatelogclear,
3383 /* CMDMFG_MORTISEPINS */ dissect_r3_cmdmfg_mortisepins,
3384 /* CMDMFG_HALTANDCATCHFIRE */ dissect_r3_cmdmfg_haltandcatchfire
3387 static void dissect_r3_response_singlebyte (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3388 static void dissect_r3_response_hasdata (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3390 static void (*r3response_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3392 /* RESPONSETYPE_OK */ dissect_r3_response_singlebyte,
3393 /* RESPONSETYPE_ERROR */ dissect_r3_response_singlebyte,
3394 /* RESPONSETYPE_HASDATA */ dissect_r3_response_hasdata,
3395 /* RESPONSETYPE_NOHANDLER */ dissect_r3_response_singlebyte,
3396 /* RESPONSETYPE_NOSESSION */ dissect_r3_response_singlebyte,
3397 /* RESPONSETYPE_BADCOMMAND */ dissect_r3_response_singlebyte,
3398 /* RESPONSETYPE_BADPARAMETER */ dissect_r3_response_singlebyte,
3399 /* RESPONSETYPE_BADPARAMETERLEN */ dissect_r3_response_singlebyte,
3400 /* RESPONSETYPE_MISSINGPARAMETER */ dissect_r3_response_singlebyte,
3401 /* RESPONSETYPE_DUPLICATEPARAMETER */ dissect_r3_response_singlebyte,
3402 /* RESPONSETYPE_PARAMETERCONFLICT */ dissect_r3_response_singlebyte,
3403 /* RESPONSETYPE_BADDEVICE */ dissect_r3_response_singlebyte,
3404 /* RESPONSETYPE_NVRAMERROR */ dissect_r3_response_singlebyte,
3405 /* RESPONSETYPE_NVRAMERRORNOACK */ dissect_r3_response_singlebyte,
3406 /* RESPONSETYPE_NVRAMERRORNOACK32 */ dissect_r3_response_singlebyte,
3407 /* RESPONSETYPE_NOTI2CADDRESS */ dissect_r3_response_singlebyte,
3408 /* RESPONSETYPE_FIRMWAREERROR */ dissect_r3_response_singlebyte,
3409 /* RESPONSETYPE_DUMPINPROGRESS */ dissect_r3_response_singlebyte,
3410 /* RESPONSETYPE_INTERNALERROR */ dissect_r3_response_singlebyte,
3411 /* RESPONSETYPE_NOTIMPLEMENTED */ dissect_r3_response_singlebyte,
3412 /* RESPONSETYPE_PINFORMATERROR */ dissect_r3_response_singlebyte,
3413 /* RESPONSETYPE_PINEXISTS */ dissect_r3_response_singlebyte,
3414 /* RESPONSETYPE_PINNOTFOUND */ dissect_r3_response_singlebyte,
3415 /* RESPONSETYPE_USERACTIVE */ dissect_r3_response_singlebyte,
3416 /* RESPONSETYPE_USERINACTIVE */ dissect_r3_response_singlebyte,
3417 /* RESPONSETYPE_PARENTNOTFOUND */ dissect_r3_response_singlebyte,
3418 /* RESPONSETYPE_NOCHAIN */ dissect_r3_response_singlebyte,
3419 /* RESPONSETYPE_CAUGHTINLOOP */ dissect_r3_response_singlebyte,
3420 /* RESPONSETYPE_EVENTFILTERED */ dissect_r3_response_singlebyte,
3421 /* RESPONSETYPE_PAYLOADTOOLARGE */ dissect_r3_response_singlebyte,
3422 /* RESPONSETYPE_ENDOFDATA */ dissect_r3_response_singlebyte,
3423 /* RESPONSETYPE_RMTAUTHREJECTED */ dissect_r3_response_singlebyte,
3424 /* RESPONSETYPE_NVRAMVERSIONERROR */ dissect_r3_response_singlebyte,
3425 /* RESPONSETYPE_NOHARDWARE */ dissect_r3_response_singlebyte,
3426 /* RESPONSETYPE_SCHEDULERCONFLICT */ dissect_r3_response_singlebyte,
3427 /* RESPONSETYPE_NVRAMWRITEERROR */ dissect_r3_response_singlebyte,
3428 /* RESPONSETYPE_DECLINEDFILTERED */ dissect_r3_response_singlebyte,
3429 /* RESPONSETYPE_NECONFIGPARM */ dissect_r3_response_singlebyte,
3430 /* RESPONSETYPE_FLASHERASEERROR */ dissect_r3_response_singlebyte,
3431 /* RESPONSETYPE_FLASHWRITEERROR */ dissect_r3_response_singlebyte,
3432 /* RESPONSETYPE_BADNVBACKUP */ dissect_r3_response_singlebyte,
3433 /* RESPONSETYPE_EARLYACK */ dissect_r3_response_singlebyte,
3434 /* RESPONSETYPE_ALARMFILTERED */ dissect_r3_response_singlebyte,
3435 /* RESPONSETYPE_ACVFAILURE */ dissect_r3_response_singlebyte,
3436 /* RESPONSETYPE_USERCHECKSUMERROR */ dissect_r3_response_singlebyte,
3437 /* RESPONSETYPE_CHECKSUMERROR */ dissect_r3_response_singlebyte,
3438 /* RESPONSETYPE_RTCSQWFAILURE */ dissect_r3_response_singlebyte,
3439 /* RESPONSETYPE_PRIORITYSHUTDOWN */ dissect_r3_response_singlebyte,
3440 /* RESPONSETYPE_NOTMODIFIABLE */ dissect_r3_response_singlebyte,
3441 /* RESPONSETYPE_CANTPRESERVE */ dissect_r3_response_singlebyte,
3442 /* RESPONSETYPE_INPASSAGEMODE */ dissect_r3_response_singlebyte
3445 static void dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3446 static void dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3447 static void dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3448 static void dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3449 static void dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3450 static void dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3451 static void dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3452 static void dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3453 static void dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3454 static void dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3455 static void dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3456 static void dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3457 static void dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3458 static void dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3459 static void dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3460 static void dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3461 static void dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3462 static void dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3463 static void dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3464 static void dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3465 static void dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3466 static void dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3467 static void dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3468 static void dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3469 static void dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3470 static void dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3472 static void (*r3upstreamcommand_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3474 /* UPSTREAMCOMMAND_RESERVED */ dissect_r3_upstreamcommand_reserved,
3475 /* UPSTREAMCOMMAND_DEBUGMSG */ dissect_r3_upstreamcommand_debugmsg,
3476 /* UPSTREAMCOMMAND_QUERYVERSION */ dissect_r3_upstreamcommand_queryversion,
3477 /* UPSTREAMCOMMAND_QUERYDATETIME */ dissect_r3_upstreamcommand_querydatetime,
3478 /* UPSTREAMCOMMAND_QUERYSERIALNUMBER */ dissect_r3_upstreamcommand_queryserialnumber,
3479 /* UPSTREAMCOMMAND_DUMPEVENTLOG */ dissect_r3_upstreamcommand_dumpeventlog,
3480 /* UPSTREAMCOMMAND_DUMPNVRAM */ dissect_r3_upstreamcommand_dumpnvram,
3481 /* UPSTREAMCOMMAND_RMTAUTHREQUEST */ dissect_r3_upstreamcommand_rmtquthrequest,
3482 /* UPSTREAMCOMMAND_RETRIEVEUSER */ dissect_r3_upstreamcommand_retrieveuser,
3483 /* UPSTREAMCOMMAND_QUERYCONFIG */ dissect_r3_upstreamcommand_queryconfig,
3484 /* UPSTREAMCOMMAND_RMTEVENTLOGRECORD */ dissect_r3_upstreamcommand_rmteventlogrecord,
3485 /* UPSTREAMCOMMAND_DPAC */ dissect_r3_upstreamcommand_dpac,
3486 /* UPSTREAMCOMMAND_NOTIFY */ dissect_r3_upstreamcommand_notify,
3487 /* UPSTREAMCOMMAND_MFG */ dissect_r3_upstreamcommand_mfg,
3488 /* UPSTREAMCOMMAND_EVENTLOGWARNING */ dissect_r3_upstreamcommand_eventlogwarning,
3489 /* UPSTREAMCOMMAND_DUMPNVRAMRLE */ dissect_r3_upstreamcommand_dumpnvramrle,
3490 /* UPSTREAMCOMMAND_RMTDECLINEDRECORD */ dissect_r3_upstreamcommand_rmtdeclinedrecord,
3491 /* UPSTREAMCOMMAND_DECLINEDWARNING */ dissect_r3_upstreamcommand_declinedwarning,
3492 /* UPSTREAMCOMMAND_DUMPDECLINEDLOG */ dissect_r3_upstreamcommand_dumpdeclinedlog,
3493 /* UPSTREAMCOMMAND_RMTALARMRECORD */ dissect_r3_upstreamcommand_rmtalarmrecord,
3494 /* UPSTREAMCOMMAND_ALARMWARNING */ dissect_r3_upstreamcommand_alarmwarning,
3495 /* UPSTREAMCOMMAND_DUMPALARMLOG */ dissect_r3_upstreamcommand_dumpalarmlog,
3496 /* UPSTREAMCOMMAND_CONNECTSCHEDULER */ dissect_r3_upstreamcommand_connectscheduler,
3497 /* UPSTREAMCOMMAND_CONNECTCOMMUSER */ dissect_r3_upstreamcommand_connectcommuser,
3498 /* UPSTREAMCOMMAND_CONNECTALARM */ dissect_r3_upstreamcommand_commandalarm,
3499 /* UPSTREAMCOMMAND_DUMPDEBUGLOG */ dissect_r3_upstreamcommand_dumpdebuglog
3502 static void dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3503 static void dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3504 static void dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3505 static void dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3506 static void dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3507 static void dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3508 static void dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3509 static void dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3510 static void dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3511 static void dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3512 static void dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3513 static void dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3514 static void dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3515 static void dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3516 static void dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3517 static void dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3518 static void dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3519 static void dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree);
3521 static void (*r3upstreammfgfield_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3523 /* MFGFIELD_IOPINS */ dissect_r3_upstreammfgfield_iopins,
3524 /* MFGFIELD_ADCS */ dissect_r3_upstreammfgfield_adcs,
3525 /* MFGFIELD_HARDWAREID */ dissect_r3_upstreammfgfield_hardwareid,
3526 /* MFGFIELD_CHECKPOINTLOG */ dissect_r3_upstreammfgfield_checkpointlog,
3527 /* MFGFIELD_CPUREGISTERS */ dissect_r3_upstreammfgfield_cpuregisters,
3528 /* MFGFIELD_TASKFLAGS */ dissect_r3_upstreammfgfield_taskflags,
3529 /* MFGFIELD_TIMERCHAIN */ dissect_r3_upstreammfgfield_timerchain,
3530 /* MFGFIELD_PEEKPOKE */ dissect_r3_upstreammfgfield_peekpoke,
3531 /* MFGFIELD_LOCKSTATE */ dissect_r3_upstreammfgfield_lockstate,
3532 /* MFGFIELD_CAPABILITIES */ dissect_r3_upstreammfgfield_capabilities,
3533 /* MFGFIELD_DUMPM41T81 */ dissect_r3_upstreammfgfield_dumpm41t81,
3534 /* MFGFIELD_NVRAMCHECKSUMVALUE */ dissect_r3_upstreammfgfield_nvramchecksumvalue,
3535 /* MFGFIELD_CHECKSUMRESULTS */ dissect_r3_upstreammfgfield_checksumresults,
3536 /* MFGFIELD_MORTISESTATELOG */ dissect_r3_upstreammfgfield_mortisestatelog,
3537 /* MFGFIELD_MORTISEPINS */ dissect_r3_upstreammfgfield_mortisepins,
3538 /* MFGFIELD_KEYPADCHAR */ dissect_r3_upstreammfgfield_keypadchar,
3539 /* MFGFIELD_MAGCARD */ dissect_r3_upstreammfgfield_magcard,
3540 /* MFGFIELD_PROXCARD */ dissect_r3_upstreammfgfield_proxcard
3544 * ***************************************************************************
3546 static void
3547 dissect_serialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree, int hf_index)
3549 proto_item *sn_item;
3550 proto_tree *sn_tree;
3551 const char *s;
3553 tvb_ensure_bytes_exist (tvb, start_offset, 16);
3555 if (!tree)
3556 return;
3558 sn_item = proto_tree_add_item (tree, hf_index, tvb, start_offset, 16, ENC_ASCII|ENC_NA);
3559 sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
3561 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 0, 2, ENC_ASCII|ENC_NA);
3562 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_manufacturer, tvb, start_offset + 0, 2, s, "%s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
3563 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 2, 1, ENC_ASCII|ENC_NA);
3564 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_year, tvb, start_offset + 2, 1, s, "%s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
3565 proto_tree_add_item(sn_tree, hf_r3_sn_week, tvb, start_offset + 3, 2, ENC_ASCII);
3566 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 5, 1, ENC_ASCII|ENC_NA);
3567 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_model, tvb, start_offset + 5, 1, s, "%s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
3568 proto_tree_add_item(sn_tree, hf_r3_sn_sequence, tvb, start_offset + 6, 4, ENC_ASCII);
3569 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 10, 1, ENC_ASCII|ENC_NA);
3570 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_group, tvb, start_offset + 10, 1, s, "%s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
3571 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 11, 1, ENC_ASCII|ENC_NA);
3572 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_nid, tvb, start_offset + 11, 1, s, "%s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
3573 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 12, 2, ENC_ASCII|ENC_NA);
3574 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_hid, tvb, start_offset + 12, 2, s, "%s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
3575 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 14, 1, ENC_ASCII|ENC_NA);
3576 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_power_supply, tvb, start_offset + 14, 1, s, "%s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
3577 s = tvb_get_string_enc (pinfo->pool, tvb, start_offset + 15, 1, ENC_ASCII|ENC_NA);
3578 proto_tree_add_string_format_value(sn_tree, hf_r3_sn_mortise, tvb, start_offset + 15, 1, s, "%s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
3582 * ***************************************************************************
3584 * We've already ensured we have enough bytes in the table via tvb_ensure_bytes_exist()
3587 static void
3588 dissect_r3_upstreamfields (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3590 uint32_t offset = 0;
3592 DISSECTOR_ASSERT(start_offset == 0);
3594 while (offset < tvb_reported_length (tvb))
3596 uint32_t fieldLength = tvb_get_uint8 (tvb, offset + 0);
3597 uint32_t fieldType = tvb_get_uint8 (tvb, offset + 1);
3598 uint32_t dataLength = fieldLength - 2;
3599 proto_item *upstreamfield_item;
3600 proto_item *upstreamfield_length;
3601 proto_tree *upstreamfield_tree;
3602 const char *usfn;
3604 usfn = val_to_str_ext_const (fieldType, &r3_upstreamfieldnames_ext, "[Unknown Field]");
3606 upstreamfield_item = proto_tree_add_none_format (tree, hf_r3_upstreamfield, tvb, offset + 0, fieldLength, "Upstream Field: %s (%u)", usfn, fieldType);
3607 upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3609 upstreamfield_length = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3610 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldtype, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3612 if (fieldLength < 2)
3614 dataLength = 0;
3615 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
3618 offset += 2;
3620 switch (fieldType)
3623 * Booleans, 8 & 16 bit values
3625 case UPSTREAMFIELD_PRIMARYPIN :
3626 case UPSTREAMFIELD_AUXPIN :
3627 case UPSTREAMFIELD_ACCESSALWAYS :
3628 case UPSTREAMFIELD_CACHED :
3629 case UPSTREAMFIELD_ENTRYDEVICE :
3630 case UPSTREAMFIELD_PPMIFIELDTYPE :
3631 case UPSTREAMFIELD_RESPONSEWINDOW :
3632 case UPSTREAMFIELD_USERTYPE :
3633 case UPSTREAMFIELD_PRIMARYFIELDTYPE :
3634 case UPSTREAMFIELD_AUXFIELDTYPE :
3635 case UPSTREAMFIELD_ACCESSMODE :
3636 case UPSTREAMFIELD_USECOUNT :
3637 case UPSTREAMFIELD_EXCEPTIONGROUP :
3638 case UPSTREAMFIELD_NAR :
3639 case UPSTREAMFIELD_SEQUENCENUMBER :
3640 case UPSTREAMFIELD_USERNUMBER :
3641 case UPSTREAMFIELD_EVENTLOGRECORDCOUNT :
3642 case UPSTREAMFIELD_DECLINEDRECORDCOUNT :
3643 case UPSTREAMFIELD_ALARMRECORDCOUNT :
3644 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
3645 break;
3648 * Strings
3650 case UPSTREAMFIELD_PIN :
3651 case UPSTREAMFIELD_VERSION :
3652 case UPSTREAMFIELD_AUXCTLRVERSION :
3653 proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_ASCII|ENC_NA);
3654 break;
3657 * Special types
3659 case UPSTREAMFIELD_SERIALNUMBER :
3661 tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, offset, dataLength);
3663 dissect_serialnumber (sn_tvb, 0, length, pinfo, upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType]);
3665 break;
3667 case UPSTREAMFIELD_EVENTLOGRECORD :
3669 if (dataLength != 9)
3671 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed event log field -- expected 9 octets");
3673 else
3675 proto_tree *eventlog_tree;
3677 if (!upstreamfield_tree)
3678 break;
3680 eventlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3eventlogrecord, NULL, "Event Log Record");
3682 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3683 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3684 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3685 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3686 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3687 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3688 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3689 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, offset + 8, 1, ENC_LITTLE_ENDIAN);
3692 break;
3694 case UPSTREAMFIELD_DATETIME :
3696 if (dataLength != 8)
3698 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed date/time field -- expected 8 octets");
3700 else
3702 proto_tree *datetime_tree;
3704 if (!upstreamfield_tree)
3705 break;
3707 datetime_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 8, ett_r3datetime, NULL,
3708 "Date/Time: %02u/%02u/%02u-%u %02u:%02u:%02u %u",
3709 tvb_get_uint8 (tvb, offset + 0), tvb_get_uint8 (tvb, offset + 1), tvb_get_uint8 (tvb, offset + 2), tvb_get_uint8 (tvb, offset + 3),
3710 tvb_get_uint8 (tvb, offset + 4), tvb_get_uint8 (tvb, offset + 5), tvb_get_uint8 (tvb, offset + 6), tvb_get_uint8 (tvb, offset + 7));
3712 proto_tree_add_item (datetime_tree, hf_r3_datetime_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3713 proto_tree_add_item (datetime_tree, hf_r3_datetime_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3714 proto_tree_add_item (datetime_tree, hf_r3_datetime_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3715 proto_tree_add_item (datetime_tree, hf_r3_datetime_dow, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3716 proto_tree_add_item (datetime_tree, hf_r3_datetime_hours, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3717 proto_tree_add_item (datetime_tree, hf_r3_datetime_minutes, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3718 proto_tree_add_item (datetime_tree, hf_r3_datetime_seconds, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3719 proto_tree_add_item (datetime_tree, hf_r3_datetime_dst, tvb, offset + 7, 1, ENC_LITTLE_ENDIAN);
3722 break;
3724 case UPSTREAMFIELD_DECLINEDRECORD :
3727 if (dataLength != 49)
3729 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed declined log field -- expected 49 octets");
3731 else
3733 proto_tree *declinedlog_tree;
3734 uint8_t cred1type;
3735 uint8_t cred2type;
3737 if (!upstreamfield_tree)
3738 break;
3740 declinedlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 49, ett_r3declinedlogrecord, NULL, "Declined Log Record");
3742 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3743 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3744 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3745 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3746 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3747 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3748 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3750 cred1type = tvb_get_uint8 (tvb, offset + 8) & 0x07;
3751 cred2type = (tvb_get_uint8 (tvb, offset + 8) & 0x38) >> 3;
3753 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, offset, 1, cred1type);
3754 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, offset, 1, cred2type);
3755 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, offset + 9, 19, ENC_NA);
3756 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, offset + 28, 19, ENC_NA);
3759 break;
3761 case UPSTREAMFIELD_EXPIREON :
3763 if (dataLength != 3)
3765 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
3767 else
3769 proto_tree *expireon_tree;
3771 if (!upstreamfield_tree)
3772 break;
3774 expireon_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 3, ett_r3expireon, NULL,
3775 "Expire YY/MM/DD: %02u/%02u/%02u",
3776 tvb_get_uint8 (tvb, offset + 2), tvb_get_uint8 (tvb, offset + 0), tvb_get_uint8 (tvb, offset + 1));
3778 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3779 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3780 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3783 break;
3785 case UPSTREAMFIELD_TIMEZONE :
3787 if (dataLength != 4)
3789 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
3791 else
3793 proto_tree_add_bitmask(upstreamfield_tree, tvb, offset, hf_r3_upstreamfieldarray[fieldType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
3796 break;
3798 case UPSTREAMFIELD_ALARMRECORD :
3800 if (dataLength != 9)
3802 expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed alarm log field -- expected 9 octets");
3804 else
3806 proto_tree *alarmlog_tree;
3808 if (!upstreamfield_tree)
3809 break;
3811 alarmlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3alarmlogrecord, NULL, "Alarm Record");
3813 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3814 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3815 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3816 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3817 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3818 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3819 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3820 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, offset + 7, 2, ENC_LITTLE_ENDIAN);
3823 break;
3825 case UPSTREAMFIELD_NOTUSED :
3826 default :
3827 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset, dataLength, "Unknown Field Type");
3828 break;
3831 offset += dataLength;
3836 * ***************************************************************************
3838 * These are passed a tvb that contains whatever occurs after the [UPSTREAMCOMMAND_*] byte
3840 static void
3841 dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3843 proto_tree_add_expert(tree, pinfo, &ei_r3_reserved_upstream_command_value, tvb, start_offset, length);
3846 static void
3847 dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
3849 proto_tree *debugmsg_tree;
3851 if (!tree)
3852 return;
3854 DISSECTOR_ASSERT(start_offset == 0);
3856 debugmsg_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3debugmsg, NULL, "Debug message");
3858 proto_tree_add_item (debugmsg_tree, hf_r3_debugmsg, tvb, 1, -1, ENC_ASCII);
3861 static void
3862 dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3864 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3867 static void
3868 dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3870 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3873 static void
3874 dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3876 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3879 static void
3880 dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3882 DISSECTOR_ASSERT(start_offset == 0);
3884 tvb_ensure_bytes_exist (tvb, 0, 11);
3886 if (length != 11)
3888 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Malformed event log record -- expected 10 octets");
3890 else
3892 proto_tree *eventlog_tree;
3893 const char *en;
3895 if (!tree)
3896 return;
3898 en = val_to_str_ext_const (tvb_get_uint8 (tvb, 10), &r3_eventnames_ext, "[Unknown Event]");
3900 eventlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 10, ett_r3eventlogrecord, NULL,
3901 "Event Log Record %u (%s)", tvb_get_letohs (tvb, 0), en);
3903 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
3904 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3905 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
3906 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
3907 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
3908 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
3909 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
3910 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
3911 proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, 10, 1, ENC_LITTLE_ENDIAN);
3915 static void
3916 dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
3918 DISSECTOR_ASSERT(start_offset == 0);
3920 tvb_ensure_bytes_exist (tvb, 0, 3);
3922 if (!tree)
3923 return;
3925 proto_tree_add_item (tree, hf_r3_nvramdump_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
3926 proto_tree_add_item (tree, hf_r3_nvramdump_length, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3927 proto_tree_add_item (tree, hf_r3_nvramdump_data, tvb, 3, tvb_get_uint8 (tvb, 2), ENC_NA);
3930 static void
3931 dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3933 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3936 static void
3937 dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3939 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3942 static void
3943 dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
3945 uint32_t offset = 0;
3947 DISSECTOR_ASSERT(start_offset == 0);
3949 if (!tree)
3950 return;
3952 while (offset < tvb_reported_length (tvb))
3954 proto_item *pi;
3955 proto_tree *upstreamfield_tree;
3956 const char *ci;
3957 uint8_t item_length;
3959 ci = val_to_str_ext_const (tvb_get_uint8 (tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
3961 item_length = tvb_get_uint8 (tvb, offset + 0);
3962 upstreamfield_tree = proto_tree_add_subtree_format(tree, tvb, offset + 0, item_length, ett_r3upstreamfield, NULL,
3963 "Config Field: %s (%u)", ci, tvb_get_uint8 (tvb, offset + 1));
3965 pi = proto_tree_add_item (upstreamfield_tree, hf_r3_configitemlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3966 if (item_length == 0) {
3967 expert_add_info_format(pinfo, pi, &ei_r3_malformed_length, "Invalid item length");
3968 return;
3971 proto_tree_add_item (upstreamfield_tree, hf_r3_configitem, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3972 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemtype, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3974 switch (tvb_get_uint8 (tvb, offset + 2))
3976 case CONFIGTYPE_NONE :
3977 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata, tvb, offset + 3, item_length - 3, ENC_NA);
3978 break;
3980 case CONFIGTYPE_BOOL :
3981 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_bool, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3982 break;
3984 case CONFIGTYPE_8 :
3985 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_8, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3986 break;
3988 case CONFIGTYPE_16 :
3989 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_16, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN);
3990 break;
3992 case CONFIGTYPE_32 :
3993 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_32, tvb, offset + 3, 4, ENC_LITTLE_ENDIAN);
3994 break;
3996 case CONFIGTYPE_STRING :
3997 proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_string, tvb, offset + 3, item_length - 3, ENC_ASCII);
3998 break;
4000 default :
4001 proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset + 3, item_length - 3, "Unknown Field Type");
4002 break;
4005 offset += item_length;
4009 static void
4010 dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4012 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4015 static void
4016 dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4018 if (tree)
4020 DISSECTOR_ASSERT(start_offset == 0);
4021 /* XXX: hf[] entries for the following hf indexes originally missing */
4022 proto_tree_add_item (tree, hf_r3_dpacreply_stuff, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4023 proto_tree_add_item (tree, hf_r3_dpacreply_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4024 proto_tree_add_item (tree, hf_r3_dpacreply_reply, tvb, 4, -1, ENC_NA);
4028 static void
4029 dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4031 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4034 static void
4035 dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4037 proto_tree *mfg_tree = NULL;
4038 uint8_t mfg_fld;
4039 tvbuff_t *mfg_tvb;
4040 proto_item *mfg_item;
4041 const char *cn;
4043 DISSECTOR_ASSERT(start_offset == 0);
4045 mfg_tvb = tvb_new_subset_remaining (tvb, 2);
4046 mfg_fld = tvb_get_uint8 (tvb, 1);
4048 cn = val_to_str_ext_const (mfg_fld, &r3_mfgfieldnames_ext, "[Unknown Mfg Field]");
4050 proto_tree_add_item (tree, hf_r3_mfgfield_length, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4052 mfg_tree = proto_tree_add_subtree_format(tree, tvb, 1, -1, ett_r3commandmfg, &mfg_item,
4053 "Upstream Manufacturing Field: %s (%u)", cn, mfg_fld);
4055 proto_tree_add_item (mfg_tree, hf_r3_mfgfield, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4057 if (mfg_fld >= MFGFIELD_LAST)
4059 expert_add_info(pinfo, mfg_item, &ei_r3_mfgfield);
4061 else if (r3upstreammfgfield_dissect [mfg_fld])
4062 (*r3upstreammfgfield_dissect [mfg_fld]) (mfg_tvb, 0, length, pinfo, mfg_tree);
4065 static void
4066 dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4068 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4071 static void
4072 dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4074 if (!tree)
4075 return;
4077 DISSECTOR_ASSERT(start_offset == 0);
4079 proto_tree_add_item (tree, hf_r3_nvramdumprle_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4080 proto_tree_add_item (tree, hf_r3_nvramdumprle_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4081 proto_tree_add_item (tree, hf_r3_nvramdumprle_data, tvb, 4, tvb_get_uint8 (tvb, 3), ENC_NA);
4084 static void
4085 dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4087 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4090 static void
4091 dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4093 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4096 static void
4097 dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4099 proto_tree *declinedlog_tree;
4100 uint8_t cred1type;
4101 uint8_t cred2type;
4103 if (!tree)
4104 return;
4106 DISSECTOR_ASSERT(start_offset == 0);
4108 declinedlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 49,
4109 ett_r3declinedlogrecord, NULL, "Declined Log Record %u", tvb_get_letohs (tvb, 0));
4111 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4112 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4113 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4114 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4115 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4116 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4117 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4118 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
4120 cred1type = tvb_get_uint8 (tvb, 10) & 0x07;
4121 cred2type = (tvb_get_uint8 (tvb, 10) & 0x38) >> 3;
4123 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, 10, 1, cred1type);
4124 proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, 10, 1, cred2type);
4125 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, 11, 19, ENC_NA);
4126 proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, 30, 19, ENC_NA);
4129 static void
4130 dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4132 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4135 static void
4136 dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4138 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4141 static void
4142 dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4144 proto_tree *alarmlog_tree;
4146 if (!tree)
4147 return;
4149 DISSECTOR_ASSERT(start_offset == 0);
4151 alarmlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 9,
4152 ett_r3alarmlogrecord, NULL, "Alarm Log Record %u", tvb_get_letohs (tvb, 0));
4154 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4155 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4156 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4157 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4158 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4159 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4160 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4161 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4162 proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, 9, 2, ENC_LITTLE_ENDIAN);
4165 static void
4166 dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4168 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4171 static void
4172 dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4174 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4177 static void
4178 dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4180 dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4183 static void
4184 dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4186 proto_tree *debuglog_tree;
4188 if (!tree)
4189 return;
4191 DISSECTOR_ASSERT(start_offset == 0);
4193 debuglog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 8,
4194 ett_r3debuglogrecord, NULL, "Debug Log Record %u", tvb_get_letohs (tvb, 0));
4196 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4197 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_flags, tvb, 2, 4, ENC_LITTLE_ENDIAN);
4198 proto_tree_add_item (debuglog_tree, hf_r3_debuglog_tick, tvb, 6, 2, ENC_LITTLE_ENDIAN);
4202 * ***************************************************************************
4204 static void
4205 dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4207 int len;
4209 DISSECTOR_ASSERT(start_offset == 0);
4211 len = MAX(0, tvb_reported_length_remaining(tvb, start_offset));
4212 if (len % 3 != 0)
4214 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "IOPINS data length not modulo 3 == 0");
4216 else
4218 char portname = 'A';
4219 int i;
4221 if (!tree)
4222 return;
4224 for (i = 0; i < len; i += 3, portname++)
4226 proto_tree *port_tree = proto_tree_add_subtree_format(tree, tvb, i, 3, ett_r3iopins, NULL,
4227 "Port %c Configuration", (portname == 'I') ? ++portname : portname);
4229 proto_tree_add_item (port_tree, hf_r3_iopins_lat, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4230 proto_tree_add_item (port_tree, hf_r3_iopins_port, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4231 proto_tree_add_item (port_tree, hf_r3_iopins_tris, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4236 static void
4237 dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4239 unsigned len;
4240 uint32_t i;
4242 if (!tree)
4243 return;
4245 DISSECTOR_ASSERT(start_offset == 0);
4247 len = tvb_reported_length(tvb);
4249 for (i = 0; i < MIN(len,8); i++)
4251 proto_item *item = proto_tree_add_item (tree, hf_r3_adc [i], tvb, i, 1, ENC_LITTLE_ENDIAN);
4252 proto_item_append_text (item, " (%.2f Volts)", (float) tvb_get_uint8 (tvb, i) * 0.04154);
4255 if (len > 8)
4257 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_mfgfield_too_many_adc_values);
4262 static void
4263 dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4265 if (!tree)
4266 return;
4268 DISSECTOR_ASSERT(start_offset == 0);
4270 proto_tree_add_item (tree, hf_r3_hardwareid_board, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4271 proto_tree_add_item (tree, hf_r3_hardwareid_cpuid, tvb, 1, 2, ENC_LITTLE_ENDIAN);
4272 proto_tree_add_item (tree, hf_r3_hardwareid_cpurev, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4275 static void
4276 dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4278 proto_tree *cpl_tree;
4279 unsigned counter;
4280 int len;
4281 int i;
4283 if (!tree)
4284 return;
4286 DISSECTOR_ASSERT(start_offset == 0);
4288 len = tvb_reported_length_remaining (tvb, 1);
4290 proto_tree_add_item (tree, hf_r3_checkpointlog_entryptr, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4291 cpl_tree = proto_tree_add_subtree(tree, tvb, 1, -1, ett_r3checkpointlog, NULL, "Checkpoint Log");
4293 counter = 0;
4294 for (i = 0; i < len; i += 2, counter++)
4296 unsigned rcon = tvb_get_uint8 (tvb, i + 0);
4297 unsigned cp = tvb_get_uint8 (tvb, i + 1);
4298 proto_item *cpe_item;
4299 proto_tree *cpe_tree;
4300 unsigned resettype;
4301 const char *desc;
4302 static const char *resets [] = { "Stack underflow", "Stack overflow", "Power-On",
4303 "Software", "Brown-out", "MCLR in sleep", "WDT",
4304 "Normal", "[Unknown Reset Type]" };
4307 cpe_tree = proto_tree_add_subtree_format(cpl_tree, tvb, i + 0, 2, ett_r3checkpointlogentry, &cpe_item,
4308 "Checkpoint Log Entry %u", counter);
4309 desc = val_to_str_ext_const (cp, &r3_checkpointnames_ext, "[Unknown Checkpoint]");
4311 if (rcon == 0xff)
4312 resettype = 8;
4313 else
4315 rcon &= 0x1f;
4317 if (rcon == 0x1c)
4318 resettype = 2;
4319 else if ((rcon & 0x10) == 0x00)
4320 resettype = 3;
4321 else if ((rcon & 0x1d) == 0x1c)
4322 resettype = 4;
4323 else if ((rcon & 0x0c) == 0x08)
4324 resettype = 5;
4325 else if ((rcon & 0x0c) == 0x04)
4326 resettype = 6;
4327 else
4328 resettype = 7;
4331 proto_item_append_text (cpe_item, " (%s, %s)", resets [resettype], desc);
4332 proto_item_append_text (
4333 proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_rcon, tvb, i + 0, 1, ENC_LITTLE_ENDIAN),
4334 " (%s)", resets [resettype]);
4335 proto_item_append_text (
4336 proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_checkpoint, tvb, i + 1, 1, ENC_LITTLE_ENDIAN),
4337 " (%s)", desc);
4341 static void
4342 dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4344 proto_tree *tmp_tree [19];
4345 proto_tree *cr_tree;
4347 if (!tree)
4348 return;
4350 DISSECTOR_ASSERT(start_offset == 0);
4352 cr_tree = proto_tree_add_subtree(tree, tvb, start_offset, -1, ett_r3cpuregisters, NULL, "CPU Registers");
4354 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);
4355 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);
4356 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);
4357 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);
4358 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);
4359 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);
4360 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);
4361 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);
4362 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);
4363 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);
4364 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);
4365 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);
4366 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);
4367 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);
4368 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);
4369 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);
4370 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);
4371 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);
4372 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);
4374 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbif, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4375 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4376 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4377 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4378 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4379 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4380 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_giel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4381 proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_gieh, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4382 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4383 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_int3ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4384 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_tmr0ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4385 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg3, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4386 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg2, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4387 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg1, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4388 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg0, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4389 proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbpu, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4390 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4391 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4392 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4393 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4394 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4395 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4396 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4397 proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4398 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4399 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr2if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4400 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ccp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4401 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ssp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4402 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tx1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4403 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_rc1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4404 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_adif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4405 proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_pspif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4406 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_ccp2if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4407 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_tmr3if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4408 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_hlvdif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4409 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_bcl1if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4410 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_eeif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4411 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_unused5, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4412 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_cmif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4413 proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_oscfif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
4414 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp3if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4415 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4416 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp5if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4417 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tmr4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4418 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tx2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4419 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_rc2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4420 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_bcl2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4421 proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ssp2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
4422 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4423 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr2ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4424 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ccp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4425 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ssp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4426 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tx1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4427 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_rc1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4428 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_adie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4429 proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_pspie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
4430 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_oscfie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4431 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_cmie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4432 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_unused2, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4433 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_eeie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4434 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_bcl1ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4435 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_hlvdie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4436 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_tmr3ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4437 proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_ccp2ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
4438 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp3ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4439 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4440 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp5ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4441 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tmr4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4442 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tx2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4443 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_rc2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4444 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_bcl2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4445 proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ssp2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
4446 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4447 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr2ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4448 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ccp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4449 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ssp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4450 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tx1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4451 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_rc1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4452 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_adip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4453 proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_pspip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
4454 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_ccp2ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4455 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_tmr3ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4456 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_hlvdip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4457 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_bcl1ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4458 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_eeip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4459 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_unused5, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4460 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_cmip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4461 proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_oscfip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
4462 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4463 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4464 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp5ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4465 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tmr4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4466 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tx2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4467 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_rc2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4468 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_bcl2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4469 proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ssp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
4470 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_bor, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4471 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_por, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4472 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_pd, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4473 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_to, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4474 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_unused4, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4475 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ri, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4476 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_sboren, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4477 proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ipen, tvb, 12, 1, ENC_LITTLE_ENDIAN);
4478 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4479 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4480 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_iofs, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4481 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_osts, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4482 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4483 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4484 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf2, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4485 proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_idlen, tvb, 13, 1, ENC_LITTLE_ENDIAN);
4486 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9d, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4487 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_oerr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4488 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_ferr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4489 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_adden, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4490 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_cren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4491 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_sren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4492 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4493 proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_spen, tvb, 14, 1, ENC_LITTLE_ENDIAN);
4494 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9d, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4495 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_trmt, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4496 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_brgh, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4497 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sendb, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4498 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sync, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4499 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_txen, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4500 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4501 proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_csrc, tvb, 15, 1, ENC_LITTLE_ENDIAN);
4502 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9d, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4503 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_oerr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4504 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_ferr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4505 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_adden, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4506 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_cren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4507 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_sren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4508 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4509 proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_spen, tvb, 16, 1, ENC_LITTLE_ENDIAN);
4510 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9d, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4511 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_trmt, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4512 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_brgh, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4513 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sendb, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4514 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sync, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4515 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_txen, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4516 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4517 proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_csrc, tvb, 17, 1, ENC_LITTLE_ENDIAN);
4518 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_swdten, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4519 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused1, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4520 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused2, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4521 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused3, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4522 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused4, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4523 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused5, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4524 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused6, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4525 proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused7, tvb, 18, 1, ENC_LITTLE_ENDIAN);
4528 static void
4529 dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4531 int len;
4532 int i;
4533 proto_tree *tfg_tree;
4535 DISSECTOR_ASSERT(start_offset == 0);
4537 len = MAX(0, tvb_reported_length_remaining (tvb, 0));
4538 tfg_tree = proto_tree_add_subtree_format(tree, tvb, 0, -1, ett_r3taskflags, NULL,
4539 "Task Flags (%u tasks)", len / 5);
4541 for (i = 0; i < len; i += 5)
4543 proto_tree *tf_tree = proto_tree_add_subtree_format(tfg_tree, tvb, i, 5,
4544 ett_r3taskflagsentry, NULL,
4545 "Task Flags (%2d: 0x%06x)",
4546 tvb_get_uint8 (tvb, i + 0),
4547 tvb_get_letohl (tvb, i + 1));
4549 proto_tree_add_item (tf_tree, hf_r3_taskflags_taskid, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4550 proto_tree_add_item (tf_tree, hf_r3_taskflags_flags, tvb, i + 1, 4, ENC_LITTLE_ENDIAN);
4554 static void
4555 dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4557 int len;
4558 int i;
4560 if (!tree)
4561 return;
4563 DISSECTOR_ASSERT(start_offset == 0);
4565 len = tvb_reported_length_remaining (tvb, 3);
4567 proto_tree_add_item (tree, hf_r3_timerchain_newtick, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4568 proto_tree_add_item (tree, hf_r3_timerchain_currentboundary, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4570 for (i = 0; i < len; i += 12)
4572 proto_tree *tc_tree = proto_tree_add_subtree(tree, tvb, 3 + i, 12, ett_r3timerchain, NULL, "Timer Chain Entry");
4574 proto_tree_add_item (tc_tree, hf_r3_timerchain_tasktag, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4575 proto_tree_add_item (tc_tree, hf_r3_timerchain_address, tvb, 3 + i + 1, 2, ENC_LITTLE_ENDIAN);
4576 proto_tree_add_item (tc_tree, hf_r3_timerchain_reload, tvb, 3 + i + 3, 2, ENC_LITTLE_ENDIAN);
4577 proto_tree_add_item (tc_tree, hf_r3_timerchain_boundary, tvb, 3 + i + 5, 1, ENC_LITTLE_ENDIAN);
4578 proto_tree_add_item (tc_tree, hf_r3_timerchain_count, tvb, 3 + i + 6, 2, ENC_LITTLE_ENDIAN);
4579 proto_tree_add_item (tc_tree, hf_r3_timerchain_flags, tvb, 3 + i + 8, 4, ENC_LITTLE_ENDIAN);
4583 static void
4584 dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4586 int i;
4587 int len;
4589 DISSECTOR_ASSERT(start_offset == 0);
4591 len = tvb_reported_length_remaining (tvb, 0);
4593 for (i = 0; i < len; i += 3)
4595 proto_item *peekpoke_item;
4596 proto_item *peekpoke_op_item;
4597 proto_tree *peekpoke_tree;
4599 peekpoke_tree = proto_tree_add_subtree(tree, tvb, i, 3, ett_r3peekpoke, &peekpoke_item, "");
4601 peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4602 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, i + 1, 2, ENC_LITTLE_ENDIAN);
4604 switch (tvb_get_uint8 (tvb, i + 0))
4606 case PEEKPOKE_READU8 :
4607 if (peekpoke_tree)
4609 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x = 0x%02x)",
4610 tvb_get_letohs (tvb, i + 1),
4611 tvb_get_uint8 (tvb, i + 3));
4612 proto_item_set_len (peekpoke_item, 4);
4613 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4615 i += 1;
4616 break;
4618 case PEEKPOKE_READU16 :
4619 if (peekpoke_tree)
4621 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x = 0x%04x)",
4622 tvb_get_letohs (tvb, i + 1),
4623 tvb_get_letohs (tvb, i + 3));
4624 proto_item_set_len (peekpoke_item, 5);
4625 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, i + 3, 2, ENC_LITTLE_ENDIAN);
4627 i += 2;
4628 break;
4630 case PEEKPOKE_READU24 :
4631 if (peekpoke_tree)
4633 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x = 0x%06x)",
4634 tvb_get_letohs (tvb, i + 1),
4635 tvb_get_letoh24 (tvb, i + 3));
4636 proto_item_set_len (peekpoke_item, 6);
4637 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, i + 3, 3, ENC_LITTLE_ENDIAN);
4639 i += 3;
4640 break;
4642 case PEEKPOKE_READU32 :
4643 if (peekpoke_tree)
4645 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x = 0x%08x)",
4646 tvb_get_letohs (tvb, i + 1),
4647 tvb_get_letohl (tvb, i + 3));
4648 proto_item_set_len (peekpoke_item, 7);
4649 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, i + 3, 4, ENC_LITTLE_ENDIAN);
4651 i += 4;
4652 break;
4654 case PEEKPOKE_READSTRING :
4655 if (peekpoke_tree)
4657 proto_item_append_text (peekpoke_item, "Read (%u Bytes @ 0x%04x)",
4658 tvb_get_uint8 (tvb, i + 3),
4659 tvb_get_letohs (tvb, i + 1));
4660 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_uint8 (tvb, i + 3));
4661 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4662 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, i + 4, tvb_get_uint8 (tvb, i + 3), ENC_NA);
4664 i += tvb_get_uint8 (tvb, i + 3) + 1;
4665 break;
4667 default :
4668 expert_add_info(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation);
4669 return; /* quit */
4674 static void
4675 dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4677 static int * const r3_lockstate_flags[] = {
4678 &hf_r3_lockstate_passage,
4679 &hf_r3_lockstate_panic,
4680 &hf_r3_lockstate_lockout,
4681 &hf_r3_lockstate_relock,
4682 &hf_r3_lockstate_autoopen,
4683 &hf_r3_lockstate_nextauto,
4684 &hf_r3_lockstate_lockstate,
4685 &hf_r3_lockstate_wantstate,
4686 &hf_r3_lockstate_remote,
4687 &hf_r3_lockstate_update,
4688 &hf_r3_lockstate_exceptionspresent,
4689 &hf_r3_lockstate_exceptionsactive,
4690 &hf_r3_lockstate_timezonespresent,
4691 &hf_r3_lockstate_timezonesactive,
4692 &hf_r3_lockstate_autounlockspresent,
4693 &hf_r3_lockstate_autounlocksactive,
4694 &hf_r3_lockstate_uapmspresent,
4695 &hf_r3_lockstate_uapmsactive,
4696 &hf_r3_lockstate_uapmrelockspresent,
4697 &hf_r3_lockstate_uapmreslocksactive,
4698 &hf_r3_lockstate_nvramprotect,
4699 &hf_r3_lockstate_nvramchecksum,
4700 NULL
4703 DISSECTOR_ASSERT(start_offset == 0);
4705 proto_tree_add_bitmask(tree, tvb, start_offset, hf_r3_lockstate, ett_r3lockstate, r3_lockstate_flags, ENC_LITTLE_ENDIAN);
4708 static void
4709 dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4711 proto_tree *cf_tree;
4712 int len;
4713 unsigned items;
4714 unsigned octets;
4715 int i;
4716 uint8_t step;
4718 DISSECTOR_ASSERT(start_offset == 0);
4720 len = MAX(0, tvb_reported_length_remaining (tvb, 0));
4722 items = 0;
4723 i = 0;
4725 while (i < len)
4727 items++;
4728 octets = tvb_get_uint8 (tvb, i);
4729 if (!octets)
4731 proto_tree_add_expert_format(tree, pinfo, &ei_r3_malformed_length, tvb, 0, len, "Capabilities could not be decoded because length of 0 encountered");
4732 return;
4734 i += octets;
4737 if (!tree)
4738 return;
4740 cf_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3capabilities, NULL, "Capabilities (%u items)", items);
4742 i = 0;
4743 while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4745 proto_item *tmp_item = proto_tree_add_item (cf_tree, hf_r3_capabilities, tvb, i, tvb_get_uint8 (tvb, i), ENC_NA);
4746 proto_tree *tmp_tree = proto_item_add_subtree (tmp_item, ett_r3capabilities);
4747 const char *fn;
4749 fn = val_to_str_ext_const (tvb_get_uint8 (tvb, i + 1), &r3_capabilitiesnames_ext, "[Unknown Field Name]");
4751 proto_item_append_text (tmp_item, " (%s, %u)", fn, tvb_get_letohs (tvb, i + 2));
4752 proto_tree_add_item (tmp_tree, hf_r3_capabilities_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4753 proto_tree_add_item (tmp_tree, hf_r3_capabilities_type, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4754 proto_tree_add_item (tmp_tree, hf_r3_capabilities_value, tvb, i + 2, 2, ENC_LITTLE_ENDIAN);
4756 i += step;
4760 static void
4761 dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4763 DISSECTOR_ASSERT(start_offset == 0);
4765 if (tvb_reported_length_remaining (tvb, 0) != 20)
4767 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Length of M41T81 RTC register dump not 20 octets");
4769 else
4771 proto_tree *rtc_tree;
4772 proto_tree *tmp_tree [20];
4773 unsigned offset_in_bits;
4775 if (!tree)
4776 return;
4778 rtc_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3m41t81registers, NULL, "M41T81 RTC Registers");
4780 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);
4781 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);
4782 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);
4783 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);
4784 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);
4785 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);
4786 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);
4787 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);
4788 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);
4789 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);
4790 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);
4791 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);
4792 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);
4793 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);
4794 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);
4795 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);
4796 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);
4797 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);
4798 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);
4799 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);
4801 offset_in_bits = 0 * 8;
4803 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;
4804 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;
4805 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;
4806 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;
4807 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;
4808 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;
4809 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;
4810 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;
4811 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;
4812 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;
4813 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;
4814 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;
4815 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;
4816 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;
4817 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;
4818 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;
4819 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;
4820 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;
4821 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;
4822 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;
4823 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;
4824 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;
4825 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;
4826 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;
4827 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;
4828 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;
4829 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;
4830 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;
4831 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;
4832 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;
4833 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;
4834 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;
4835 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;
4836 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;
4837 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;
4838 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;
4839 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;
4840 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;
4841 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;
4842 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;
4843 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;
4844 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;
4845 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;
4846 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;
4847 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;
4848 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;
4849 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;
4850 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;
4851 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;
4852 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;
4853 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;
4854 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;
4855 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;
4856 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;
4857 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;
4858 proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_notused, tvb, offset_in_bits - 8, 4, ENC_LITTLE_ENDIAN);
4862 static void
4863 dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4865 if (tree)
4867 DISSECTOR_ASSERT(start_offset == 0);
4869 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue, tvb, 0, 4, ENC_LITTLE_ENDIAN);
4870 proto_tree_add_item (tree, hf_r3_nvramchecksumvalue_fixup, tvb, 4, 4, ENC_LITTLE_ENDIAN);
4874 static void
4875 dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4877 int len;
4879 DISSECTOR_ASSERT(start_offset == 0);
4881 len = MAX(0, tvb_reported_length_remaining(tvb, 0));
4882 if (len % 3 != 0)
4884 expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Checksum results data length not modulo 3 == 0");
4886 else
4888 proto_tree *cksum_tree;
4889 uint32_t error = false;
4890 int i;
4891 uint8_t step;
4893 if (!tree)
4894 return;
4896 i = 0;
4897 while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4899 error |= tvb_get_uint8 (tvb, i + 2);
4900 i += step;
4903 cksum_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3checksumresults, NULL,
4904 "Checksum Results (%s)", error ? "Error" : "No Errors");
4906 i = 0;
4907 while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4909 proto_item *res_item = proto_tree_add_item (cksum_tree, hf_r3_checksumresults,
4910 tvb,
4912 tvb_get_uint8 (tvb, i),
4913 ENC_NA);
4914 proto_tree *res_tree = proto_item_add_subtree (res_item, ett_r3checksumresultsfield);
4915 const char *fn;
4917 fn = val_to_str_ext_const (tvb_get_uint8 (tvb, i + 1), &r3_checksumresultnames_ext, "[Unknown Field Name]");
4919 proto_item_append_text (res_item, " %s (%s)", fn, tvb_get_uint8 (tvb, i + 2) ? "Error" : "No Error");
4921 proto_tree_add_item (res_tree, hf_r3_checksumresults_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4922 proto_tree_add_item (res_tree, hf_r3_checksumresults_field, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4923 proto_tree_add_item (res_tree, hf_r3_checksumresults_state, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4925 i += step;
4930 static void
4931 dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4933 int len;
4934 int i;
4936 if (!tree)
4937 return;
4939 DISSECTOR_ASSERT(start_offset == 0);
4941 len = tvb_reported_length_remaining (tvb, 3);
4943 proto_tree_add_item (tree, hf_r3_mortisestatelog_pointer, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4944 proto_tree_add_item (tree, hf_r3_mortisestatelog_mortisetype, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4945 proto_tree_add_item (tree, hf_r3_mortisestatelog_waiting, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4947 for (i = 0; i < len; i += 3)
4949 unsigned state = tvb_get_uint8 (tvb, 3 + i + 0);
4950 unsigned last = tvb_get_uint8 (tvb, 3 + i + 1);
4951 unsigned event = tvb_get_uint8 (tvb, 3 + i + 2);
4952 proto_tree *ms_tree = proto_tree_add_subtree_format(tree, tvb, 3 + i, 3, ett_r3mortisestatelog, NULL,
4953 "State Log Entry %2d (State=0x%02x, Last=0x%02x, Event=%s (0x%02x))",
4954 i / 3,
4955 state,
4956 last,
4957 val_to_str_ext_const (event, &r3_mortiseeventnames_ext, "[Unknown]"),
4958 event);
4960 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_state, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4961 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_last, tvb, 3 + i + 1, 1, ENC_LITTLE_ENDIAN);
4962 proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_event, tvb, 3 + i + 2, 1, ENC_LITTLE_ENDIAN);
4966 static void
4967 dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4969 proto_tree *iopins_tree;
4971 if (!tree)
4972 return;
4974 DISSECTOR_ASSERT(start_offset == 0);
4976 iopins_tree = proto_tree_add_subtree_format(tree, tvb, 0, 1, ett_r3iopins, NULL,
4977 "Mortise Pin States (0x%02x)", tvb_get_uint8 (tvb, 0));
4979 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s1, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4980 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s2, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4981 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s3, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4982 proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s4, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4985 static void
4986 dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4988 if (!tree)
4989 return;
4991 DISSECTOR_ASSERT(start_offset == 0);
4993 proto_tree_add_item (tree, hf_r3_testkeypad, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4996 static void
4997 dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4999 DISSECTOR_ASSERT(start_offset == 0);
5001 proto_tree_add_item (tree, hf_r3_testmagcard, tvb, 0, -1, ENC_ASCII);
5004 static void
5005 dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5007 DISSECTOR_ASSERT(start_offset == 0);
5009 proto_tree_add_item (tree, hf_r3_testproxcard, tvb, 0, -1, ENC_ASCII);
5013 * ***************************************************************************
5015 * This is passed a tvb that contains [length] [CMD_RESPONSE] [responseType_e] [cmdCommand_e]
5017 static void
5018 dissect_r3_response_singlebyte (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5020 if (tree)
5022 proto_tree_add_item (tree, hf_r3_responsetype, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
5023 proto_tree_add_item (tree, hf_r3_responsetocommand, tvb, start_offset + 3, 1, ENC_LITTLE_ENDIAN);
5028 * This is passed a tvb that contains [length] [CMD_RESPONSE] [RESPONSETYPE_HASDATA] [UPSTREAMCOMMAND_*]
5030 static void
5031 dissect_r3_response_hasdata (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5033 uint32_t commandPacketLen;
5034 uint8_t upstreamCmd;
5036 DISSECTOR_ASSERT(start_offset == 0);
5038 tvb_ensure_bytes_exist (tvb, 0, 4);
5040 commandPacketLen = tvb_get_uint8 (tvb, 0);
5041 upstreamCmd = tvb_get_uint8 (tvb, 3);
5043 if (tvb_get_uint8 (tvb, 1) != CMD_RESPONSE)
5044 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_1);
5045 else if (tvb_get_uint8 (tvb, 2) != RESPONSETYPE_HASDATA)
5046 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_2);
5047 else if (upstreamCmd >= UPSTREAMCOMMAND_LAST)
5048 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5049 else
5051 proto_tree *upstreamcommand_tree = NULL;
5052 tvbuff_t *upstreamcommand_tvb;
5054 if (tree)
5056 const char *ct;
5057 ct = val_to_str_ext_const (upstreamCmd, &r3_upstreamcommandnames_ext, "[Unknown Command Type]");
5059 proto_tree_add_item (tree, hf_r3_responsetype, tvb, 2, 1, ENC_LITTLE_ENDIAN);
5061 upstreamcommand_tree = proto_tree_add_subtree_format(tree, tvb, 3, -1, ett_r3upstreamcommand, NULL,
5062 "Upstream Command: %s (%u)", ct, upstreamCmd);
5064 proto_tree_add_item (upstreamcommand_tree, hf_r3_upstreamcommand, tvb, 3, 1, ENC_LITTLE_ENDIAN);
5066 tvb_ensure_bytes_exist (tvb, 0, commandPacketLen - 4);
5068 upstreamcommand_tvb = tvb_new_subset_length (tvb, 4, commandPacketLen - 4);
5069 if (r3upstreamcommand_dissect [upstreamCmd])
5070 (*r3upstreamcommand_dissect [upstreamCmd]) (upstreamcommand_tvb, 0, commandPacketLen - 4, pinfo, upstreamcommand_tree);
5075 * ***************************************************************************
5077 * These are passed a tvb that starts with [length] [CMD_RESPONSE] ...
5079 static void
5080 dissect_r3_cmd_response (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
5082 uint8_t responseLen = tvb_get_uint8 (tvb, start_offset + 0);
5083 responseType_e responseType = (responseType_e)tvb_get_uint8 (tvb, start_offset + 2);
5084 tvbuff_t *payload_tvb = tvb_new_subset_length (tvb, start_offset, responseLen);
5086 if (tree)
5088 const char *rt;
5090 rt = val_to_str_ext_const (responseType, &r3_responsetypenames_ext, "[Unknown Response Type]");
5092 proto_item_set_text (proto_tree_get_parent (tree), "Response Packet: %s (%u)", rt, responseType);
5093 proto_tree_add_item (tree, hf_r3_responselength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5094 proto_tree_add_item (tree, hf_r3_responsecommand, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5097 if (responseType >= RESPONSETYPE_LAST)
5099 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5101 else if (r3response_dissect [responseType])
5102 (*r3response_dissect [responseType]) (payload_tvb, 0, length, pinfo, tree);
5106 * These are passed a tvb that contains [length] [cmdCommand_e] [[data]]
5108 static void
5109 dissect_r3_cmd_handshake (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5111 if (tree)
5113 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5114 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5118 static void
5119 dissect_r3_cmd_killsession (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5121 if (tree)
5123 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5124 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5128 static void
5129 dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5131 if (tree)
5133 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5134 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5138 static void
5139 dissect_r3_cmd_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5141 if (tree)
5143 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5144 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5148 static void
5149 dissect_r3_cmd_setdatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5151 proto_tree *dt_tree;
5152 uint8_t cmdLen;
5153 tvbuff_t *payload_tvb;
5155 if (!tree)
5156 return;
5158 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5159 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5161 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5162 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5164 dt_tree = proto_tree_add_subtree_format (tree, payload_tvb, 0, -1, ett_r3setdatetime, NULL,
5165 "Set Date/Time (%02u/%02u/%02u-%u %02u:%02u:%02u)",
5166 tvb_get_uint8 (payload_tvb, 0),
5167 tvb_get_uint8 (payload_tvb, 1),
5168 tvb_get_uint8 (payload_tvb, 2),
5169 tvb_get_uint8 (payload_tvb, 3),
5170 tvb_get_uint8 (payload_tvb, 4),
5171 tvb_get_uint8 (payload_tvb, 5),
5172 tvb_get_uint8 (payload_tvb, 6));
5174 proto_tree_add_item (dt_tree, hf_r3_setdate_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5175 proto_tree_add_item (dt_tree, hf_r3_setdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5176 proto_tree_add_item (dt_tree, hf_r3_setdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5177 proto_tree_add_item (dt_tree, hf_r3_setdate_dow, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5178 proto_tree_add_item (dt_tree, hf_r3_setdate_hours, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5179 proto_tree_add_item (dt_tree, hf_r3_setdate_minutes, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5180 proto_tree_add_item (dt_tree, hf_r3_setdate_seconds, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5183 static void
5184 dissect_r3_cmd_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5186 if (tree)
5188 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5189 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5193 static void
5194 dissect_r3_cmd_setconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5196 unsigned cmdLen;
5197 tvbuff_t *payload_tvb;
5198 uint32_t offset = 0;
5200 if (!tree)
5201 return;
5203 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5204 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5206 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5207 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5209 while (offset < (cmdLen - 2))
5211 proto_item *sc_item;
5212 proto_tree *sc_tree;
5213 const char *ci;
5214 uint8_t configItem;
5215 uint8_t item_length;
5217 configItem = tvb_get_uint8 (payload_tvb, offset + 1);
5219 ci = val_to_str_ext_const (
5220 configItem,
5221 &r3_configitemnames_ext,
5222 "[Unknown Configuration Item]");
5224 item_length = tvb_get_uint8 (payload_tvb, offset + 0);
5225 sc_tree = proto_tree_add_subtree_format(tree, payload_tvb, offset + 0, item_length,
5226 ett_r3upstreamfield, NULL, "Config Field: %s (%u)", ci, configItem);
5228 sc_item = proto_tree_add_item (sc_tree, hf_r3_configitemlength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5229 proto_tree_add_item (sc_tree, hf_r3_configitem, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5230 if (item_length == 0) {
5231 expert_add_info_format(pinfo, sc_item, &ei_r3_malformed_length, "Invalid item length");
5232 return;
5235 if (configItem < array_length (configMap))
5237 switch (configMap [configItem])
5239 case CONFIGTYPE_NONE :
5240 proto_tree_add_item (sc_tree, hf_r3_configitemdata, payload_tvb, offset + 2, item_length - 3, ENC_NA);
5241 break;
5243 case CONFIGTYPE_BOOL :
5244 proto_tree_add_item (sc_tree, hf_r3_configitemdata_bool, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5245 break;
5247 case CONFIGTYPE_8 :
5248 proto_tree_add_item (sc_tree, hf_r3_configitemdata_8, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5249 break;
5251 case CONFIGTYPE_16 :
5252 proto_tree_add_item (sc_tree, hf_r3_configitemdata_16, payload_tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
5253 break;
5255 case CONFIGTYPE_32 :
5256 proto_tree_add_item (sc_tree, hf_r3_configitemdata_32, payload_tvb, offset + 2, 4, ENC_LITTLE_ENDIAN);
5257 break;
5259 case CONFIGTYPE_STRING :
5260 proto_tree_add_item (sc_tree, hf_r3_configitemdata_string, payload_tvb, offset + 2,
5261 item_length - 2, ENC_ASCII);
5262 break;
5264 default :
5265 proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
5266 item_length - 2, "Unknown Field Type");
5267 break;
5270 else {
5271 proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
5272 item_length - 2, "Unknown Field Type");
5275 offset += item_length;
5279 static void
5280 dissect_r3_cmd_getconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5282 proto_item *config_item;
5283 proto_tree *config_tree;
5284 uint32_t cmdLen;
5285 uint32_t i;
5287 if (!tree)
5288 return;
5290 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5292 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5293 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5295 config_item = proto_tree_add_item (tree, hf_r3_configitems, tvb, start_offset + 2, cmdLen - 2, ENC_NA);
5296 config_tree = proto_item_add_subtree (config_item, ett_r3configitem);
5298 for (i = 2; i < cmdLen; i++)
5299 proto_tree_add_item (config_tree, hf_r3_configitem, tvb, start_offset + i, 1, ENC_LITTLE_ENDIAN);
5302 static void
5303 dissect_r3_cmd_manageuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5305 uint8_t cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5306 tvbuff_t *payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5307 uint32_t offset = 0;
5309 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5310 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5312 while (offset < tvb_reported_length (payload_tvb))
5314 uint32_t paramLength = tvb_get_uint8 (payload_tvb, offset + 0);
5315 uint32_t paramType = tvb_get_uint8 (payload_tvb, offset + 1);
5316 uint32_t dataLength = paramLength - 2;
5317 proto_tree *mu_tree = NULL;
5318 proto_item *len_field = NULL;
5320 if (tree)
5322 const char *auptn;
5323 auptn = val_to_str_ext_const (paramType, &r3_adduserparamtypenames_ext, "[Unknown Field]");
5325 mu_tree = proto_item_add_subtree (
5326 proto_tree_add_none_format (tree, hf_r3_adduserparamtype, payload_tvb, offset + 0, paramLength,
5327 "Manage User Field: %s (%u)", auptn, paramType), ett_r3manageuser);
5329 len_field = proto_tree_add_item (mu_tree, hf_r3_adduserparamtypelength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5330 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypetype, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5333 if (paramLength < 2)
5335 dataLength = 0;
5336 expert_add_info_format(pinfo, len_field, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
5339 offset += 2;
5341 switch (paramType)
5343 case ADDUSERPARAMTYPE_DISPOSITION :
5344 case ADDUSERPARAMTYPE_ACCESSALWAYS :
5345 case ADDUSERPARAMTYPE_ACCESSMODE :
5346 case ADDUSERPARAMTYPE_CACHED :
5347 case ADDUSERPARAMTYPE_USERTYPE :
5348 case ADDUSERPARAMTYPE_PRIMARYFIELDTYPE :
5349 case ADDUSERPARAMTYPE_AUXFIELDTYPE :
5350 case ADDUSERPARAMTYPE_USECOUNT :
5351 case ADDUSERPARAMTYPE_EXCEPTIONGROUP :
5352 if (dataLength != 1)
5354 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 1 octet");
5356 else
5357 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5358 break;
5360 case ADDUSERPARAMTYPE_USERNO :
5361 if (dataLength != 2)
5363 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 2 octets");
5365 else
5366 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5367 break;
5369 case ADDUSERPARAMTYPE_PRIMARYFIELD :
5370 case ADDUSERPARAMTYPE_AUXFIELD :
5371 proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_NA);
5372 break;
5374 case ADDUSERPARAMTYPE_EXPIREON :
5376 if (dataLength != 3)
5378 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
5380 else
5382 proto_tree *expireon_tree;
5384 if (!tree)
5385 break;
5387 expireon_tree = proto_tree_add_subtree_format(mu_tree, payload_tvb, offset, 3,
5388 ett_r3expireon, NULL,
5389 "Expire YY/MM/DD: %02u/%02u/%02u",
5390 tvb_get_uint8 (payload_tvb, offset + 2),
5391 tvb_get_uint8 (payload_tvb, offset + 0),
5392 tvb_get_uint8 (payload_tvb, offset + 1));
5394 proto_tree_add_item (expireon_tree, hf_r3_expireon_month, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5395 proto_tree_add_item (expireon_tree, hf_r3_expireon_day, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5396 proto_tree_add_item (expireon_tree, hf_r3_expireon_year, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5399 break;
5401 case ADDUSERPARAMTYPE_TIMEZONE :
5403 if (dataLength != 4)
5405 expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
5407 else
5409 proto_tree_add_bitmask(mu_tree, payload_tvb, offset, hf_r3_adduserparamtypearray[paramType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
5412 break;
5414 default :
5415 proto_tree_add_none_format (mu_tree, hf_r3_upstreamfielderror, payload_tvb, offset, dataLength, "Unknown Field Type");
5416 break;
5419 offset += dataLength;
5423 static void
5424 dissect_r3_cmd_deleteusers (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5426 uint8_t cmdLen;
5427 tvbuff_t *payload_tvb;
5429 if (!tree)
5430 return;
5432 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5433 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5435 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5436 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5438 proto_tree_add_item (tree, hf_r3_deleteusers, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5441 static void
5442 dissect_r3_cmd_defineexception (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5444 proto_tree *startdate_tree;
5445 proto_tree *enddate_tree;
5446 uint8_t cmdLen;
5447 tvbuff_t *payload_tvb;
5449 if (!tree)
5450 return;
5452 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5453 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5455 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5456 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5458 proto_tree_add_item (tree, hf_r3_defineexception_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5460 startdate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 4,
5461 ett_r3defineexceptionstartdate, NULL,
5462 "Start MM/DD HH:MM (%02u/%02u %02u:%02u)",
5463 tvb_get_uint8 (payload_tvb, 1),
5464 tvb_get_uint8 (payload_tvb, 2),
5465 tvb_get_uint8 (payload_tvb, 3),
5466 tvb_get_uint8 (payload_tvb, 4));
5467 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5468 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5469 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5470 proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5472 enddate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 4,
5473 ett_r3defineexceptionenddate, NULL,
5474 "End MM/DD HH:MM (%02u/%02u %02u:%02u)",
5475 tvb_get_uint8 (payload_tvb, 5),
5476 tvb_get_uint8 (payload_tvb, 6),
5477 tvb_get_uint8 (payload_tvb, 7),
5478 tvb_get_uint8 (payload_tvb, 8));
5479 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_month, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5480 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_day, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5481 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_hours, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5482 proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_minutes, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5485 static void
5486 dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5488 proto_tree *bits_tree;
5489 unsigned cmdLen;
5490 tvbuff_t *payload_tvb;
5491 uint32_t i;
5492 uint32_t bit = 0;
5494 if (!tree)
5495 return;
5497 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5498 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5500 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5501 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5503 proto_tree_add_item (tree, hf_r3_defineexceptiongroup_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5505 bits_tree = proto_tree_add_subtree(tree, payload_tvb, 1, -1, ett_r3defineexceptiongroupbits, NULL, "Exception Group Bit Field");
5507 for (i = 1; i < (cmdLen - 2); i++)
5509 uint32_t j;
5510 uint8_t byte = tvb_get_uint8 (payload_tvb, i);
5512 for (j = 0; j < 8; j++)
5513 proto_tree_add_none_format (bits_tree, hf_r3_defineexceptiongroup_bits, payload_tvb, i, 1,
5514 "Exception Group %2d: %s", bit++, (byte & (1 << j)) ? "Enabled" : "Disabled");
5518 static void
5519 dissect_r3_cmd_definecalendar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5521 uint8_t cmdLen;
5522 tvbuff_t *payload_tvb;
5523 const char *mn;
5524 uint32_t i;
5526 if (!tree)
5527 return;
5529 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5530 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5532 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5533 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5535 proto_tree_add_item (tree, hf_r3_definecalendar_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5537 for (i = 0; i < 12; i++)
5539 uint32_t daymap = tvb_get_letohl (payload_tvb, (i * 4) + 1);
5540 proto_tree *calendar_tree = proto_tree_add_subtree_format(tree, payload_tvb, (i * 4) + 1, 4,
5541 ett_r3definecalendarmonth [i + 1], NULL,
5542 "Calendar Bit Field - %s (0x%08x)",
5543 (mn = val_to_str_ext_const (i + 1, &r3_monthnames_ext, "[Unknown Month]")),
5544 daymap);
5545 uint32_t j;
5547 for (j = 0; j < 31; j++)
5548 proto_tree_add_none_format (calendar_tree, hf_r3_definecalendar_bits, payload_tvb, (i * 4) + 1, 4,
5549 "%s Of %s: %s",
5550 val_to_str_ext_const (j + 1, &r3_monthdaynames_ext, "[Unknown Day]"),
5552 (daymap & (1 << j)) ? "Enabled" : "Disabled");
5556 static void
5557 dissect_r3_cmd_definetimezone (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5559 proto_tree *starttime_tree;
5560 proto_tree *endtime_tree;
5561 uint8_t cmdLen;
5562 tvbuff_t *payload_tvb;
5563 uint8_t tzmode;
5565 if (!tree)
5566 return;
5568 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5569 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5571 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5572 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5574 proto_tree_add_item (tree, hf_r3_definetimezone_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5576 starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 2,
5577 ett_r3definetimezonestarttime, NULL,
5578 "Start HH:MM (%02u:%02u)",
5579 tvb_get_uint8 (payload_tvb, 1),
5580 tvb_get_uint8 (payload_tvb, 2));
5581 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_hours, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5582 proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_minutes, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5584 endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 3, 2,
5585 ett_r3definetimezoneendtime, NULL,
5586 "End HH:MM (%02u:%02u)",
5587 tvb_get_uint8 (payload_tvb, 3),
5588 tvb_get_uint8 (payload_tvb, 4));
5589 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5590 proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5592 proto_tree_add_bitmask(tree, payload_tvb, 5, hf_r3_definetimezone_daymap, ett_r3definetimezonedaymap, r3_definetimezone_daymap, ENC_NA);
5594 proto_tree_add_item (tree, hf_r3_definetimezone_exceptiongroup, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5595 proto_tree_add_uint (tree, hf_r3_definetimezone_mode, payload_tvb, 7, 1,
5596 (tzmode = tvb_get_uint8 (payload_tvb, 7)) & 0x0f);
5597 proto_tree_add_none_format (tree, hf_r3_definetimezone_calendar, payload_tvb, 7, 1,
5598 "Access Always: %s", (tzmode & 0x10) ? "True" : "False");
5601 static void
5602 dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5604 uint8_t cmdLen;
5605 tvbuff_t *payload_tvb;
5607 if (!tree)
5608 return;
5610 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5611 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5613 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5614 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5616 proto_tree_add_item (tree, hf_r3_rmtauthretry_sequence, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5617 proto_tree_add_item (tree, hf_r3_rmtauthretry_retry, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5620 static void
5621 dissect_r3_cmd_filters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5623 proto_tree *filter_tree;
5624 uint8_t cmdLen;
5625 tvbuff_t *payload_tvb;
5626 uint32_t i;
5628 if (!tree)
5629 return;
5631 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5632 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5634 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5635 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5637 proto_tree_add_item (tree, hf_r3_filter_type, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5639 filter_tree = proto_tree_add_subtree_format(tree, payload_tvb, 2, -1, ett_r3filters, NULL,
5640 "Filters (%u specified)", tvb_get_uint8 (payload_tvb, 0));
5642 for (i = 0; i < tvb_get_uint8 (payload_tvb, 0); i++)
5643 proto_tree_add_item (filter_tree, hf_r3_filter_list, payload_tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
5646 static void
5647 dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5649 proto_item *alarm_item;
5650 proto_tree *alarm_tree;
5651 unsigned cmdLen;
5652 tvbuff_t *payload_tvb;
5653 uint32_t offset = 0;
5654 uint32_t alarms = 0;
5656 if (!tree)
5657 return;
5659 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5660 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5662 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5663 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5665 alarm_tree = proto_tree_add_subtree(tree, payload_tvb, 0, -1, ett_r3alarmlist, &alarm_item, "Alarm List (0 items)");
5667 while (offset < (cmdLen - 2))
5669 proto_item *pi;
5670 proto_tree *alarmcfg_tree;
5671 const char *ai;
5672 const char *as;
5673 uint32_t alarm_len;
5675 if (!(ai = try_val_to_str_ext (tvb_get_uint8 (payload_tvb, offset + 1), &r3_alarmidnames_ext)))
5677 ai = "[Unknown Alarm ID]";
5678 as = "N/A";
5680 else
5681 as = (tvb_get_uint8 (payload_tvb, offset + 2) & 0xfe) ?
5682 "Error" : (tvb_get_uint8 (payload_tvb, offset + 2) & 0x01) ? "Enabled" : "Disabled";
5684 alarmcfg_tree = proto_tree_add_subtree_format(alarm_tree, payload_tvb, offset, tvb_get_uint8 (payload_tvb, offset),
5685 ett_r3alarmcfg, NULL, "Alarm Item (%s, %s)", ai, as);
5687 alarm_len = tvb_get_uint8 (payload_tvb, offset + 0);
5688 pi = proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_length, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5689 if (alarm_len == 0) {
5690 expert_add_info_format (pinfo, pi, &ei_r3_malformed_length,
5691 "Alarm length equal to 0. Payload could be partially decoded");
5692 break;
5695 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_id, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5696 proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_state, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5698 alarms++;
5699 offset += alarm_len;
5702 if (alarms)
5703 proto_item_set_text (alarm_item, "Alarm List (%d items)", alarms);
5706 static void
5707 dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5709 proto_tree *starttime_tree;
5710 proto_tree *endtime_tree;
5711 uint8_t cmdLen;
5712 tvbuff_t *payload_tvb;
5714 if (!tree)
5715 return;
5717 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5718 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5720 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5721 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5723 starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5724 ett_r3eventlogdumpstarttime, NULL,
5725 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5726 tvb_get_uint8 (payload_tvb, 0),
5727 tvb_get_uint8 (payload_tvb, 1),
5728 tvb_get_uint8 (payload_tvb, 2),
5729 tvb_get_uint8 (payload_tvb, 3),
5730 tvb_get_uint8 (payload_tvb, 4));
5731 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5732 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5733 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5734 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5735 proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5737 endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5738 ett_r3eventlogdumpendtime, NULL,
5739 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5740 tvb_get_uint8 (payload_tvb, 5),
5741 tvb_get_uint8 (payload_tvb, 6),
5742 tvb_get_uint8 (payload_tvb, 7),
5743 tvb_get_uint8 (payload_tvb, 8),
5744 tvb_get_uint8 (payload_tvb, 9));
5745 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5746 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5747 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5748 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5749 proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5751 proto_tree_add_item (tree, hf_r3_eventlogdump_user, payload_tvb, 10, 2, ENC_LITTLE_ENDIAN);
5754 static void
5755 dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5757 proto_tree *starttime_tree;
5758 proto_tree *endtime_tree;
5759 uint8_t cmdLen;
5760 tvbuff_t *payload_tvb;
5762 if (!tree)
5763 return;
5765 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5766 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5768 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5769 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5771 starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5772 ett_r3declinedlogdumpstarttime, NULL,
5773 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5774 tvb_get_uint8 (payload_tvb, 0),
5775 tvb_get_uint8 (payload_tvb, 1),
5776 tvb_get_uint8 (payload_tvb, 2),
5777 tvb_get_uint8 (payload_tvb, 3),
5778 tvb_get_uint8 (payload_tvb, 4));
5779 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5780 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5781 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5782 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5783 proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5785 endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5786 ett_r3declinedlogdumpendtime, NULL,
5787 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5788 tvb_get_uint8 (payload_tvb, 5),
5789 tvb_get_uint8 (payload_tvb, 6),
5790 tvb_get_uint8 (payload_tvb, 7),
5791 tvb_get_uint8 (payload_tvb, 8),
5792 tvb_get_uint8 (payload_tvb, 9));
5793 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5794 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5795 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5796 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5797 proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5800 static void
5801 dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5803 proto_tree *starttime_tree;
5804 proto_tree *endtime_tree;
5805 uint8_t cmdLen;
5806 tvbuff_t *payload_tvb;
5808 if (!tree)
5809 return;
5811 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5812 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5814 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5815 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5817 starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5818 ett_r3alarmlogdumpstarttime, NULL,
5819 "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5820 tvb_get_uint8 (payload_tvb, 0),
5821 tvb_get_uint8 (payload_tvb, 1),
5822 tvb_get_uint8 (payload_tvb, 2),
5823 tvb_get_uint8 (payload_tvb, 3),
5824 tvb_get_uint8 (payload_tvb, 4));
5825 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5826 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5827 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5828 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5829 proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5831 endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5832 ett_r3alarmlogdumpendtime, NULL,
5833 "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5834 tvb_get_uint8 (payload_tvb, 5),
5835 tvb_get_uint8 (payload_tvb, 6),
5836 tvb_get_uint8 (payload_tvb, 7),
5837 tvb_get_uint8 (payload_tvb, 8),
5838 tvb_get_uint8 (payload_tvb, 9));
5839 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5840 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5841 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5842 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5843 proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5846 static void
5847 dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5849 proto_item *dlfw_item = NULL;
5850 proto_item *dlfw_action_item = NULL;
5851 proto_tree *dlfw_tree = NULL;
5852 uint8_t cmdLen;
5853 tvbuff_t *payload_tvb;
5854 uint32_t packetCRC;
5855 uint32_t calculatedCRC;
5857 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5858 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5860 if (tree)
5862 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5863 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5865 dlfw_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, -1, ett_r3downloadfirmware, &dlfw_item,
5866 "Download Record (Record #%u, ", tvb_get_letohs (payload_tvb, 2));
5868 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_length, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5869 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_record, payload_tvb, 2, 2, ENC_LITTLE_ENDIAN);
5870 dlfw_action_item = proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_action, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5873 switch (tvb_get_uint8 (payload_tvb, 4))
5875 case DOWNLOADFIRMWARE_START :
5876 if (!dlfw_tree)
5877 break;
5878 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_START)");
5879 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_timeout, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5880 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_nvram, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5881 break;
5883 case DOWNLOADFIRMWARE_DATA :
5884 if (!dlfw_tree)
5885 break;
5886 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_DATA, Address 0x%08x, %u Bytes)",
5887 tvb_get_letohl (payload_tvb, 5), tvb_get_uint8 (payload_tvb, 9));
5888 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_address, payload_tvb, 5, 4, ENC_LITTLE_ENDIAN);
5889 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_bytes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5890 proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_data, payload_tvb, 10,
5891 tvb_get_uint8 (payload_tvb, 9), ENC_NA);
5892 break;
5894 case DOWNLOADFIRMWARE_COMPLETE :
5895 if (!dlfw_tree)
5896 break;
5897 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_COMPLETE)");
5898 break;
5900 case DOWNLOADFIRMWARE_ABORT :
5901 if (!dlfw_tree)
5902 break;
5903 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_ABORT)");
5904 break;
5906 case DOWNLOADFIRMWARE_RESET :
5907 if (!dlfw_tree)
5908 break;
5909 proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_RESET)");
5910 break;
5912 default :
5913 expert_add_info(pinfo, dlfw_action_item, &ei_r3_firmwaredownload_action);
5914 return; /* quit */
5917 if (!dlfw_tree)
5918 return;
5920 packetCRC = tvb_get_letohs (payload_tvb, cmdLen - 2 - 2);
5922 if ((calculatedCRC = crc16_r3_ccitt_tvb(payload_tvb, 0, cmdLen - 2 - 2)) == packetCRC)
5923 proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5924 cmdLen - 2 - 2, 2,
5925 packetCRC, "0x%04x (correct)", packetCRC);
5926 else
5928 proto_item *tmp_item;
5930 proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5931 cmdLen - 2 - 2, 2,
5932 packetCRC, "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
5933 tmp_item = proto_tree_add_boolean (dlfw_tree, hf_r3_firmwaredownload_crc_bad, payload_tvb,
5934 cmdLen - 2 - 2, 2, true);
5935 proto_item_set_generated (tmp_item);
5939 static void
5940 dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5942 uint8_t cmdLen;
5943 tvbuff_t *payload_tvb;
5945 if (tree)
5947 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5948 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5950 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5951 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5953 proto_tree_add_item (tree, hf_r3_commanddata, payload_tvb, 0, -1, ENC_NA);
5955 expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_cmd_downloadfirmwaretimeout); /* XXX: ??? */
5958 static void
5959 dissect_r3_cmd_powertableselection (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5961 uint8_t cmdLen;
5962 tvbuff_t *payload_tvb;
5964 if (!tree)
5965 return;
5967 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5968 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5970 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5971 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5973 proto_tree_add_item (tree, hf_r3_powertableselection, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5976 static void
5977 dissect_r3_cmd_clearnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5979 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5980 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5981 proto_tree_add_bitmask(tree, tvb, start_offset + 2, hf_r3_nvramclearoptions,
5982 ett_r3clearnvram, r3_nvramclearoptions, ENC_LITTLE_ENDIAN);
5985 static void
5986 dissect_r3_cmd_dpac (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5988 uint8_t cmdLen;
5989 tvbuff_t *payload_tvb;
5991 if (!tree)
5992 return;
5994 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5995 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5997 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5998 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6000 /* XXX: hf[] entries for the following hf indexes originally missing */
6001 proto_tree_add_item (tree, hf_r3_dpac_action, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
6002 proto_tree_add_item (tree, hf_r3_dpac_waittime, payload_tvb, 1, 2, ENC_LITTLE_ENDIAN);
6003 proto_tree_add_item (tree, hf_r3_dpac_command, payload_tvb, 3, -1, ENC_NA);
6006 static void
6007 dissect_r3_cmd_selftest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6009 if (tree)
6011 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6012 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6016 static void
6017 dissect_r3_cmd_reset (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6019 if (tree)
6021 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6022 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6026 static void
6027 dissect_r3_cmd_logwrite (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6029 uint8_t cmdLen;
6030 tvbuff_t *payload_tvb;
6032 if (!tree)
6033 return;
6035 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
6036 payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
6038 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6039 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6041 proto_tree_add_item (tree, hf_r3_writeeventlog_user, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
6042 proto_tree_add_item (tree, hf_r3_writeeventlog_event, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
6045 static void
6046 dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6048 if (tree)
6050 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6051 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6053 mfgCommandFlag = true;
6056 static void
6057 dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6059 if (tree)
6061 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6062 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6066 static void
6067 dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6069 if (tree)
6071 proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6072 proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6077 * ***************************************************************************
6079 static void
6080 dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
6082 tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, start_offset + 2, 16);
6084 if (tree)
6086 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6087 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6089 dissect_serialnumber (sn_tvb, 0, length, pinfo, tree, hf_r3_mfgsetserialnumber);
6092 static void
6093 dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6095 if (tree)
6097 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6098 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6099 proto_tree_add_item (tree, hf_r3_mfgsetcryptkey, tvb, start_offset + 2, -1, ENC_NA);
6103 static void
6104 dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6106 if (tree)
6108 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6109 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6110 proto_tree_add_item (tree, hf_r3_mfgdumpnvram, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6114 static void
6115 dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6117 if (tree)
6119 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6120 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6124 static void
6125 dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6127 if (tree)
6129 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6130 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6131 proto_tree_add_item (tree, hf_r3_mfgremoteunlock, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6135 static void
6136 dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6138 if (tree)
6140 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6141 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6145 static void
6146 dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6148 if (tree)
6150 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6151 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6155 static void
6156 dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6158 if (tree)
6160 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6161 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6165 static void
6166 dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6168 if (tree)
6170 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6171 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6175 static void
6176 dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6178 if (tree)
6180 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6181 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6185 static void
6186 dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6188 if (tree)
6190 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6191 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6195 static void
6196 dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6198 if (tree)
6200 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6201 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6205 static void
6206 dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
6208 int i;
6209 int len;
6210 uint8_t step;
6212 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6213 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6215 start_offset += 2;
6216 len = tvb_reported_length_remaining (tvb, start_offset);
6218 i = 0;
6219 while (i<len && (step=tvb_get_uint8(tvb, start_offset + i))>0)
6221 proto_tree *force_tree = proto_tree_add_subtree_format(tree, tvb, start_offset + i, tvb_get_uint8 (tvb, start_offset + i),
6222 ett_r3forceoptions, NULL,
6223 "Force Option %s (%u)",
6224 val_to_str_ext_const (
6225 tvb_get_uint8 (tvb, start_offset + i + 1),
6226 &r3_forceitemnames_ext, "[Unknown]"),
6227 tvb_get_uint8 (tvb, start_offset + i + 1));
6228 proto_item *force_item_item;
6230 proto_tree_add_item (force_tree, hf_r3_forceoptions_length, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6231 force_item_item = proto_tree_add_item (force_tree, hf_r3_forceoptions_item, tvb, start_offset + i + 1, 1, ENC_LITTLE_ENDIAN);
6233 switch (tvb_get_uint8 (tvb, start_offset + i) - 2)
6235 case 1 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_8, tvb, start_offset + i + 2, 1, ENC_LITTLE_ENDIAN);
6236 break;
6237 case 2 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_16, tvb, start_offset + i + 2, 2, ENC_LITTLE_ENDIAN);
6238 break;
6239 case 3 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_24, tvb, start_offset + i + 2, 3, ENC_LITTLE_ENDIAN);
6240 break;
6241 case 4 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_32, tvb, start_offset + i + 2, 4, ENC_LITTLE_ENDIAN);
6242 break;
6243 default :
6244 expert_add_info_format(pinfo, force_item_item, &ei_r3_malformed_length, "Invalid length for Forceoptions State entry");
6245 return; /* quit */
6248 i += step;
6252 static void
6253 dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6255 if (tree)
6257 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6258 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6262 static void
6263 dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6265 if (tree)
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);
6272 static void
6273 dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6275 if (tree)
6277 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6278 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6282 static void
6283 dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6285 if (tree)
6287 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6288 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6292 static void
6293 dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6295 if (tree)
6297 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6298 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6302 static void
6303 dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6305 if (tree)
6307 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6308 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6312 static void
6313 dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
6315 int i;
6316 int len;
6318 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6319 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6321 start_offset += 2;
6322 len = tvb_reported_length_remaining (tvb, start_offset);
6324 for (i = 0; i < len; i += 3)
6326 proto_item *peekpoke_item;
6327 proto_item *peekpoke_op_item;
6328 proto_tree *peekpoke_tree;
6330 peekpoke_tree = proto_tree_add_subtree(tree, tvb, start_offset + i, 3, ett_r3peekpoke, &peekpoke_item, "");
6332 peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6333 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, start_offset + i + 1, 2, ENC_LITTLE_ENDIAN);
6335 switch (tvb_get_uint8 (tvb, start_offset + i + 0))
6337 case PEEKPOKE_READU8 :
6338 proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6339 break;
6341 case PEEKPOKE_READU16 :
6342 proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6343 break;
6345 case PEEKPOKE_READU24 :
6346 proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6347 break;
6349 case PEEKPOKE_READU32 :
6350 proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6351 break;
6353 case PEEKPOKE_READSTRING :
6354 proto_item_append_text (peekpoke_item,
6355 "Read (%d Bytes @ 0x%04x)",
6356 tvb_get_uint8 (tvb, start_offset + i + 3),
6357 tvb_get_letohs (tvb, start_offset + i + 1));
6358 proto_item_set_len (peekpoke_item, 4);
6359 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6360 i += 1;
6361 break;
6363 case PEEKPOKE_WRITEU8 :
6364 proto_item_append_text (peekpoke_item,
6365 "Write (8 Bits: 0x%02x @ 0x%04x)",
6366 tvb_get_uint8 (tvb, start_offset + i + 3),
6367 tvb_get_letohs (tvb, start_offset + i + 1));
6368 proto_item_set_len (peekpoke_item, 4);
6369 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6370 i += 1;
6371 break;
6373 case PEEKPOKE_WRITEU16 :
6374 proto_item_append_text (peekpoke_item,
6375 "Write (16 Bits: 0x%04x @ 0x%04x)",
6376 tvb_get_letohs (tvb, start_offset + i + 3),
6377 tvb_get_letohs (tvb, start_offset + i + 1));
6378 proto_item_set_len (peekpoke_item, 5);
6379 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, ENC_LITTLE_ENDIAN);
6380 i += 2;
6381 break;
6383 case PEEKPOKE_WRITEU24 :
6384 proto_item_append_text (peekpoke_item,
6385 "Write (24 Bits: 0x%06x @ 0x%04x)",
6386 tvb_get_letoh24 (tvb, start_offset + i + 3),
6387 tvb_get_letohs (tvb, start_offset + i + 1));
6388 proto_item_set_len (peekpoke_item, 6);
6389 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, ENC_LITTLE_ENDIAN);
6390 i += 3;
6391 break;
6393 case PEEKPOKE_WRITEU32 :
6394 proto_item_append_text (peekpoke_item,
6395 "Write (32 Bits: 0x%08x @ 0x%04x)",
6396 tvb_get_letohl (tvb, start_offset + i + 3),
6397 tvb_get_letohs (tvb, start_offset + i + 1));
6398 proto_item_set_len (peekpoke_item, 7);
6399 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, ENC_LITTLE_ENDIAN);
6400 i += 4;
6401 break;
6403 case PEEKPOKE_WRITESTRING :
6404 proto_item_append_text (peekpoke_item,
6405 "Write (%d Bytes @ 0x%04x)",
6406 tvb_get_uint8 (tvb, start_offset + i + 3),
6407 tvb_get_letohs (tvb, start_offset + i + 1));
6408 proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_uint8 (tvb, start_offset + i + 3));
6409 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6410 proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4,
6411 tvb_get_uint8 (tvb, start_offset + i + 3), ENC_NA);
6412 i += tvb_get_uint8 (tvb, start_offset + i + 3) + 1;
6413 break;
6415 default :
6416 expert_add_info_format(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation, "Unknown Mfg peekpoke operation value");
6417 return; /* quit */
6422 static void
6423 dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6425 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6426 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6429 static void
6430 dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6432 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6433 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6436 static void
6437 dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6439 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6440 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6443 static void
6444 dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6446 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6447 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6450 static void
6451 dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6453 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6454 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6457 static void
6458 dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6460 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6461 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6464 static void
6465 dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6467 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6468 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6471 static void
6472 dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6474 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6475 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6478 static void
6479 dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6481 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6482 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6485 static void
6486 dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6488 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6489 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6492 static void
6493 dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6495 proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6496 proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6497 proto_tree_add_item (tree, hf_r3_mfgtestpreserve, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6500 static void
6501 dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t 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_mortisestatelogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t 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_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t 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_haltandcatchfire (tvbuff_t *tvb, uint32_t start_offset, uint32_t 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);
6530 static int
6531 dissect_r3_command (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree)
6533 proto_item *cmd_item;
6534 proto_tree *cmd_tree;
6535 const char *cn;
6536 uint8_t cmdLen;
6537 uint8_t cmd;
6539 tvb_ensure_bytes_exist (tvb, start_offset, 2);
6541 cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
6542 cmd = tvb_get_uint8 (tvb, start_offset + 1);
6544 if (!mfgCommandFlag)
6545 cn = val_to_str_ext_const (cmd, &r3_cmdnames_ext, "[Unknown Command]");
6546 else
6547 cn = val_to_str_ext_const (cmd, &r3_cmdmfgnames_ext, "[Unknown Mfg Command]");
6549 cmd_tree = proto_tree_add_subtree_format(r3_tree, tvb, start_offset, cmdLen,
6550 ett_r3cmd, &cmd_item, "Command Packet: %s (%d)", cn, cmd);
6552 if (!mfgCommandFlag)
6554 if (cmd >= CMD_LAST)
6555 expert_add_info(pinfo, cmd_item, &ei_r3_unknown_command_value);
6556 else if (r3command_dissect [cmd])
6557 (*r3command_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6559 else
6561 mfgCommandFlag = false;
6563 if (cmd >= CMDMFG_LAST)
6565 expert_add_info_format(pinfo, proto_tree_get_parent (cmd_tree), &ei_r3_unknown_command_value, "Unknown manufacturing command value");
6567 else if (r3commandmfg_dissect [cmd])
6568 (*r3commandmfg_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6571 return tvb_get_uint8 (tvb, start_offset + 0);
6575 * ***************************************************************************
6577 * Dissect a single r3 PDU
6579 * return: amount consumed
6581 static int
6582 dissect_r3_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tree *r3_tree)
6584 proto_item *payload_item = NULL;
6585 proto_tree *payload_tree = NULL;
6586 unsigned offset = 0;
6587 uint32_t packetLen;
6588 unsigned octConsumed;
6590 if (tvb_strneql (tvb, 0, "~~~ds", 5) == 0)
6592 if (r3_tree)
6593 proto_tree_add_item (r3_tree, hf_r3_tildex3ds, tvb, 0, -1, ENC_ASCII);
6595 return 5;
6599 * Show basic header stuff
6601 if (r3_tree)
6603 proto_item *header_item = proto_tree_add_item (r3_tree, hf_r3_header, tvb, 0, 5, ENC_NA);
6604 proto_tree *header_tree = proto_item_add_subtree (header_item, ett_r3header);
6606 proto_tree_add_item (header_tree, hf_r3_sigil, tvb, 0, 1, ENC_LITTLE_ENDIAN);
6607 proto_tree_add_item (header_tree, hf_r3_address, tvb, 1, 1, ENC_LITTLE_ENDIAN);
6608 proto_tree_add_item (header_tree, hf_r3_packetnumber, tvb, 2, 1, ENC_LITTLE_ENDIAN);
6609 proto_tree_add_item (header_tree, hf_r3_packetlength, tvb, 3, 1, ENC_LITTLE_ENDIAN);
6610 proto_tree_add_item (header_tree, hf_r3_encryption, tvb, 4, 1, ENC_LITTLE_ENDIAN);
6613 /* Note: packetLen == tvb_reported_length() */
6615 packetLen = tvb_get_uint8 (tvb, 3);
6617 if (r3_tree)
6619 payload_item = proto_tree_add_item (r3_tree, hf_r3_payload, tvb, 5, -1, ENC_NA);
6620 payload_tree = proto_item_add_subtree (payload_item, ett_r3payload);
6623 offset = 5;
6625 mfgCommandFlag = false; /* XXX: Assumption: mfgCmd always follows Cmd in same r3 "packet" */
6626 while (offset < (packetLen - 3))
6628 octConsumed = dissect_r3_command (tvb, offset, 0, pinfo, payload_tree);
6629 if(octConsumed == 0)
6631 expert_add_info_format(pinfo, proto_tree_get_parent (payload_tree), &ei_r3_malformed_length,
6632 "Command length equal to 0. Payload could be partially decoded");
6633 offset = tvb_reported_length (tvb) - 3; /* just do CRC stuff ?? */
6634 break;
6636 offset += octConsumed;
6640 * Show the CRC and XOR status
6642 if (r3_tree)
6644 proto_item *tail_item = proto_tree_add_item (r3_tree, hf_r3_tail, tvb, offset, 3, ENC_NA);
6645 proto_tree *tail_tree = proto_item_add_subtree (tail_item, ett_r3tail);
6646 uint32_t packetCRC = tvb_get_letohs (tvb, offset);
6647 uint32_t packetXor = tvb_get_uint8 (tvb, offset + 2);
6648 uint32_t calculatedCRC;
6650 if ((calculatedCRC = crc16_r3_ccitt_tvb(tvb, 1, packetLen - 3)) == packetCRC)
6651 proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC, "0x%04x (correct)", packetCRC);
6652 else
6654 proto_item *tmp_item;
6656 proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC,
6657 "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
6658 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_crc_bad, tvb, offset, 2, true);
6659 proto_item_set_generated (tmp_item);
6662 if ((packetLen ^ 0xff) == packetXor)
6663 proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 2, 1, packetXor,
6664 "0x%02x (correct)", packetXor);
6665 else
6667 proto_item *tmp_item;
6669 proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor,
6670 "0x%02x (incorrect, should be 0x%02x)", packetXor, packetLen ^ 0xff);
6671 tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_xor_bad, tvb, offset + 7, 1, true);
6672 proto_item_set_generated (tmp_item);
6676 offset += 3;
6678 return offset;
6682 * ***************************************************************************
6684 * Main dissector entry points
6686 static int
6687 dissect_r3_message (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
6689 proto_tree *r3_tree = NULL;
6691 col_set_str (pinfo->cinfo, COL_PROTOCOL, "R3");
6692 col_clear (pinfo->cinfo, COL_INFO);
6694 /* Note: The tvb (provided via tcp_dissect_pdus()) will contain (at most) one PDU of the length
6695 * specified via get_r3_message_len()
6698 if (tree)
6700 proto_item *r3_item;
6701 r3_item = proto_tree_add_item (tree, proto_r3, tvb, 0, -1, ENC_NA);
6702 r3_tree = proto_item_add_subtree (r3_item, ett_r3);
6705 dissect_r3_packet (tvb, pinfo, r3_tree);
6707 return tvb_reported_length(tvb);
6710 static unsigned
6711 get_r3_message_len (packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
6713 return (unsigned) tvb_get_uint8 (tvb, offset + 3) + 1;
6716 static int
6717 dissect_r3 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
6719 tcp_dissect_pdus (tvb, pinfo, tree, true, 4, get_r3_message_len, dissect_r3_message, data);
6720 return tvb_reported_length(tvb);
6724 * ***************************************************************************
6726 void proto_register_r3 (void)
6729 /* Setup list of header fields */
6730 static hf_register_info hf [] =
6732 { &hf_r3_tildex3ds,
6733 { "DPAC Attention", "r3.dpac_attention",
6734 FT_STRING, BASE_NONE, NULL, 0x0,
6735 NULL, HFILL }
6738 { &hf_r3_header,
6739 { "Header", "r3.header",
6740 FT_NONE, BASE_NONE, NULL, 0x0,
6741 NULL, HFILL }
6743 { &hf_r3_payload,
6744 { "Payload", "r3.payload",
6745 FT_NONE, BASE_NONE, NULL, 0x0,
6746 NULL, HFILL }
6748 { &hf_r3_tail,
6749 { "Tail", "r3.tail",
6750 FT_NONE, BASE_NONE, NULL, 0x0,
6751 NULL, HFILL }
6754 { &hf_r3_sigil,
6755 { "Sigil", "r3.sigil",
6756 FT_UINT8, BASE_HEX, NULL, 0x0,
6757 NULL, HFILL }
6759 { &hf_r3_address,
6760 { "Address", "r3.address",
6761 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6762 NULL, HFILL }
6764 { &hf_r3_packetnumber,
6765 { "Packet Number", "r3.packetnumber",
6766 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6767 NULL, HFILL }
6769 { &hf_r3_packetlength,
6770 { "Packet Length", "r3.packetlength",
6771 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6772 NULL, HFILL }
6774 { &hf_r3_encryption,
6775 { "Crypt Type", "r3.encryption",
6776 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_encryptionschemenames_ext, 0x0,
6777 NULL, HFILL }
6779 { &hf_r3_crc,
6780 { "CRC", "r3.crc",
6781 FT_UINT16, BASE_HEX, NULL, 0x0,
6782 NULL, HFILL }
6784 { &hf_r3_crc_bad,
6785 { "Bad CRC", "r3.crc_bad",
6786 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6787 NULL, HFILL }
6789 { &hf_r3_xor,
6790 { "XOR", "r3.xor",
6791 FT_UINT8, BASE_HEX, NULL, 0x0,
6792 NULL, HFILL }
6794 { &hf_r3_xor_bad,
6795 { "Bad XOR", "r3.xor_bad",
6796 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6797 NULL, HFILL }
6800 { &hf_r3_commandlength,
6801 { "Command Length", "r3.command.length",
6802 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6803 NULL, HFILL }
6805 { &hf_r3_command,
6806 { "Command", "r3.command.command",
6807 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6808 NULL, HFILL }
6810 { &hf_r3_commanddata,
6811 { "Command Data", "r3.command.data",
6812 FT_NONE, BASE_NONE, NULL, 0x0,
6813 NULL, HFILL }
6816 { &hf_r3_commandmfglength,
6817 { "Mfg Command Length", "r3.commandmfg.length",
6818 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6819 NULL, HFILL }
6821 { &hf_r3_commandmfg,
6822 { "Mfg Command", "r3.commandmfg.command",
6823 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdmfgnames_ext, 0x0,
6824 NULL, HFILL }
6826 #if 0
6827 { &hf_r3_commandmfgdata,
6828 { "Mfg Command Data", "r3.commandmfg.data",
6829 FT_NONE, BASE_NONE, NULL, 0x0,
6830 NULL, HFILL }
6832 #endif
6834 { &hf_r3_responselength,
6835 { "Response Length", "r3.response.length",
6836 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6837 NULL, HFILL }
6839 { &hf_r3_responsecommand,
6840 { "Response Command", "r3.response.command",
6841 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6842 NULL, HFILL }
6844 { &hf_r3_responsetype,
6845 { "Response Type", "r3.response.responsetype",
6846 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_responsetypenames_ext, 0x0,
6847 NULL, HFILL }
6849 { &hf_r3_responsetocommand,
6850 { "Response To Command", "r3.response.to_command",
6851 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6852 NULL, HFILL }
6854 #if 0
6855 { &hf_r3_responsedata,
6856 { "Response Data", "r3.response.data",
6857 FT_NONE, BASE_NONE, NULL, 0x0,
6858 NULL, HFILL }
6860 #endif
6862 { &hf_r3_upstreamcommand,
6863 { "Upstream Command", "r3.upstreamcommand.command",
6864 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamcommandnames_ext, 0x0,
6865 NULL, HFILL }
6868 { &hf_r3_upstreamfield,
6869 { "Upstream Field", "r3.upstreamfield",
6870 FT_NONE, BASE_NONE, NULL, 0x0,
6871 NULL, HFILL }
6873 { &hf_r3_upstreamfieldlength,
6874 { "Field Length", "r3.upstreamfield.length",
6875 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6876 NULL, HFILL }
6878 { &hf_r3_upstreamfieldtype,
6879 { "Field Type", "r3.upstreamfield.type",
6880 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamfieldnames_ext, 0x0,
6881 NULL, HFILL }
6883 #if 0
6884 { &hf_r3_upstreamfielddatalen,
6885 { "Data Length", "r3.upstreamfield.datalen",
6886 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6887 NULL, HFILL }
6889 #endif
6890 { &hf_r3_upstreamfielderror,
6891 { "Error", "r3.upstreamfield.error",
6892 FT_NONE, BASE_NONE, NULL, 0x0,
6893 NULL, HFILL }
6895 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SERIALNUMBER],
6896 { "Serial Number", "r3.upstreamfield.serialnumber",
6897 FT_STRING, BASE_NONE, NULL, 0x0,
6898 NULL, HFILL }
6900 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_NAR],
6901 { "Next Available Record", "r3.upstreamfield.nar",
6902 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6903 NULL, HFILL }
6905 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ENTRYDEVICE],
6906 { "Entry Device", "r3.upstreamfield.entrydevice",
6907 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6908 NULL, HFILL }
6910 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PPMIFIELDTYPE],
6911 { "PPMI Field Type", "r3.upstreamfield.ppmifieldtype",
6912 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6913 NULL, HFILL }
6915 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PIN],
6916 { "PIN", "r3.upstreamfield.pin",
6917 FT_STRING, BASE_NONE, NULL, 0x0,
6918 NULL, HFILL }
6920 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SEQUENCENUMBER],
6921 { "Sequence Number", "r3.upstreamfield.sequencenumber",
6922 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6923 NULL, HFILL }
6925 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_RESPONSEWINDOW],
6926 { "Response Window", "r3.upstreamfield.responsewindow",
6927 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6928 NULL, HFILL }
6930 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERNUMBER],
6931 { "User Number", "r3.upstreamfield.usernumber",
6932 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6933 NULL, HFILL }
6935 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_VERSION],
6936 { "Version", "r3.upstreamfield.version",
6937 FT_STRING, BASE_NONE, NULL, 0x0,
6938 NULL, HFILL }
6940 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORD],
6941 { "Event Log Record", "r3.upstreamfield.eventlogrecord",
6942 FT_BYTES, BASE_NONE, NULL, 0x0,
6943 NULL, HFILL }
6945 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DATETIME],
6946 { "Date/Time", "r3.upstreamfield.datetime",
6947 FT_BYTES, BASE_NONE, NULL, 0x0,
6948 NULL, HFILL }
6950 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORDCOUNT],
6951 { "Event Log Record Count", "r3.upstreamfield.eventlogrecordcount",
6952 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6953 NULL, HFILL }
6955 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORDCOUNT],
6956 { "Declined Log Record", "r3.upstreamfield.declinedlogrecord",
6957 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6958 NULL, HFILL }
6960 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORD],
6961 { "Declined Log", "r3.upstreamfield.declinedlog",
6962 FT_BYTES, BASE_NONE, NULL, 0x0,
6963 NULL, HFILL }
6965 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERTYPE],
6966 { "User Type", "r3.upstreamfield.usertype",
6967 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
6968 NULL, HFILL }
6970 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSALWAYS],
6971 { "Access Always", "r3.upstreamfield.accessalways",
6972 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6973 NULL, HFILL }
6975 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_CACHED],
6976 { "Cached", "r3.upstreamfield.cached",
6977 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6978 NULL, HFILL }
6980 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYFIELDTYPE],
6981 { "Primary Field Type", "r3.upstreamfield.primaryfieldtype",
6982 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6983 NULL, HFILL }
6985 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXFIELDTYPE],
6986 { "Aux Field Type", "r3.upstreamfield.auxfieldtype",
6987 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6988 NULL, HFILL }
6990 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSMODE],
6991 { "Access Mode", "r3.upstreamfield.accessmode",
6992 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
6993 NULL, HFILL }
6995 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXPIREON],
6996 { "Expire On", "r3.upstreamfield.expireon",
6997 FT_UINT24, BASE_HEX, NULL, 0x0,
6998 NULL, HFILL }
7000 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USECOUNT],
7001 { "Use Count", "r3.upstreamfield.usecount",
7002 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7003 NULL, HFILL }
7005 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_TIMEZONE],
7006 { "Timezone", "r3.upstreamfield.timezone",
7007 FT_UINT32, BASE_HEX, NULL, 0x0,
7008 NULL, HFILL }
7010 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXCEPTIONGROUP],
7011 { "Exception Group", "r3.upstreamfield.exceptiongroup",
7012 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7013 NULL, HFILL }
7015 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYPIN],
7016 { "Primary PIN", "r3.upstreamfield.primarypin",
7017 FT_BYTES, BASE_NONE, NULL, 0x0,
7018 NULL, HFILL }
7020 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXPIN],
7021 { "Aux PIN", "r3.upstreamfield.auxpin",
7022 FT_BYTES, BASE_NONE, NULL, 0x0,
7023 NULL, HFILL }
7025 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORDCOUNT],
7026 { "Alarm Record Count", "r3.upstreamfield.alarmrecordcount",
7027 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7028 NULL, HFILL }
7030 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORD],
7031 { "Alarm Record", "r3.upstreamfield.alarmrecord",
7032 FT_BYTES, BASE_NONE, NULL, 0x0,
7033 NULL, HFILL }
7035 { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXCTLRVERSION],
7036 { "Aux Controller Version", "r3.upstreamfield.auxctlrversion",
7037 FT_STRING, BASE_NONE, NULL, 0x0,
7038 NULL, HFILL }
7041 { &hf_r3_configitems,
7042 { "Configuration Item List", "r3.configitems",
7043 FT_NONE, BASE_NONE, NULL, 0x0,
7044 NULL, HFILL }
7046 { &hf_r3_configitem,
7047 { "Configuration Item", "r3.configitem",
7048 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configitemnames_ext, 0x0,
7049 NULL, HFILL }
7051 #if 0
7052 { &hf_r3_configfield,
7053 { "Config Field", "r3.configfield",
7054 FT_NONE, BASE_NONE, NULL, 0x0,
7055 NULL, HFILL }
7057 #endif
7058 { &hf_r3_configitemlength,
7059 { "Configuration Item Length", "r3.configitem.length",
7060 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7061 NULL, HFILL }
7063 { &hf_r3_configitemtype,
7064 { "Configuration Item Type", "r3.configitem.type",
7065 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configtypenames_ext, 0x0,
7066 NULL, HFILL }
7068 { &hf_r3_configitemdata,
7069 { "Configuration Item Data", "r3.configitem.data",
7070 FT_NONE, BASE_NONE, NULL, 0x0,
7071 NULL, HFILL }
7073 { &hf_r3_configitemdata_bool,
7074 { "Configuration Item Boolean", "r3.configitem.data_boolean",
7075 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7076 NULL, HFILL }
7078 { &hf_r3_configitemdata_8,
7079 { "Configuration Item 8-bit", "r3.configitem.data_8",
7080 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7081 NULL, HFILL }
7083 { &hf_r3_configitemdata_16,
7084 { "Configuration Item 16-bit", "r3.configitem.data_16",
7085 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7086 NULL, HFILL }
7088 { &hf_r3_configitemdata_32,
7089 { "Configuration Item 32-bit", "r3.configitem.data_32",
7090 FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
7091 NULL, HFILL }
7093 { &hf_r3_configitemdata_string,
7094 { "Configuration Item String", "r3.configitem.data_string",
7095 FT_STRING, BASE_NONE, NULL, 0x0,
7096 NULL, HFILL }
7099 { &hf_r3_timezonearray0,
7100 { "Timezone 0", "r3.timezone.0",
7101 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000001,
7102 NULL, HFILL }
7104 { &hf_r3_timezonearray1,
7105 { "Timezone 1", "r3.timezone.1",
7106 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000002,
7107 NULL, HFILL }
7109 { &hf_r3_timezonearray2,
7110 { "Timezone 2", "r3.timezone.2",
7111 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000004,
7112 NULL, HFILL }
7114 { &hf_r3_timezonearray3,
7115 { "Timezone 3", "r3.timezone.3",
7116 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000008,
7117 NULL, HFILL }
7119 { &hf_r3_timezonearray4,
7120 { "Timezone 4", "r3.timezone.4",
7121 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000010,
7122 NULL, HFILL }
7124 { &hf_r3_timezonearray5,
7125 { "Timezone 5", "r3.timezone.5",
7126 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000020,
7127 NULL, HFILL }
7129 { &hf_r3_timezonearray6,
7130 { "Timezone 6", "r3.timezone.6",
7131 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000040,
7132 NULL, HFILL }
7134 { &hf_r3_timezonearray7,
7135 { "Timezone 7", "r3.timezone.7",
7136 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000080,
7137 NULL, HFILL }
7139 { &hf_r3_timezonearray8,
7140 { "Timezone 8", "r3.timezone.8",
7141 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000100,
7142 NULL, HFILL }
7144 { &hf_r3_timezonearray9,
7145 { "Timezone 9", "r3.timezone.9",
7146 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000200,
7147 NULL, HFILL }
7149 { &hf_r3_timezonearray10,
7150 { "Timezone 10", "r3.timezone.10",
7151 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000400,
7152 NULL, HFILL }
7154 { &hf_r3_timezonearray11,
7155 { "Timezone 11", "r3.timezone.11",
7156 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000800,
7157 NULL, HFILL }
7159 { &hf_r3_timezonearray12,
7160 { "Timezone 12", "r3.timezone.12",
7161 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00001000,
7162 NULL, HFILL }
7164 { &hf_r3_timezonearray13,
7165 { "Timezone 13", "r3.timezone.13",
7166 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00002000,
7167 NULL, HFILL }
7169 { &hf_r3_timezonearray14,
7170 { "Timezone 14", "r3.timezone.14",
7171 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00004000,
7172 NULL, HFILL }
7174 { &hf_r3_timezonearray15,
7175 { "Timezone 15", "r3.timezone.15",
7176 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00008000,
7177 NULL, HFILL }
7179 { &hf_r3_timezonearray16,
7180 { "Timezone 16", "r3.timezone.16",
7181 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00010000,
7182 NULL, HFILL }
7184 { &hf_r3_timezonearray17,
7185 { "Timezone 17", "r3.timezone.17",
7186 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00020000,
7187 NULL, HFILL }
7189 { &hf_r3_timezonearray18,
7190 { "Timezone 18", "r3.timezone.18",
7191 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00040000,
7192 NULL, HFILL }
7194 { &hf_r3_timezonearray19,
7195 { "Timezone 19", "r3.timezone.19",
7196 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00080000,
7197 NULL, HFILL }
7199 { &hf_r3_timezonearray20,
7200 { "Timezone 20", "r3.timezone.20",
7201 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00100000,
7202 NULL, HFILL }
7204 { &hf_r3_timezonearray21,
7205 { "Timezone 21", "r3.timezone.21",
7206 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00200000,
7207 NULL, HFILL }
7209 { &hf_r3_timezonearray22,
7210 { "Timezone 22", "r3.timezone.22",
7211 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00400000,
7212 NULL, HFILL }
7214 { &hf_r3_timezonearray23,
7215 { "Timezone 23", "r3.timezone.23",
7216 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00800000,
7217 NULL, HFILL }
7219 { &hf_r3_timezonearray24,
7220 { "Timezone 24", "r3.timezone.24",
7221 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x01000000,
7222 NULL, HFILL }
7224 { &hf_r3_timezonearray25,
7225 { "Timezone 25", "r3.timezone.25",
7226 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x02000000,
7227 NULL, HFILL }
7229 { &hf_r3_timezonearray26,
7230 { "Timezone 26", "r3.timezone.26",
7231 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x04000000,
7232 NULL, HFILL }
7234 { &hf_r3_timezonearray27,
7235 { "Timezone 27", "r3.timezone.27",
7236 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x08000000,
7237 NULL, HFILL }
7239 { &hf_r3_timezonearray28,
7240 { "Timezone 28", "r3.timezone.28",
7241 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x10000000,
7242 NULL, HFILL }
7244 { &hf_r3_timezonearray29,
7245 { "Timezone 29", "r3.timezone.29",
7246 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x20000000,
7247 NULL, HFILL }
7249 { &hf_r3_timezonearray30,
7250 { "Timezone 30", "r3.timezone.30",
7251 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x40000000,
7252 NULL, HFILL }
7254 { &hf_r3_timezonearray31,
7255 { "Timezone 31", "r3.timezone.31",
7256 FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x80000000,
7257 NULL, HFILL }
7260 { &hf_r3_expireon_year,
7261 { "Expiration Year", "r3.expireon.year",
7262 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7263 NULL, HFILL }
7265 { &hf_r3_expireon_month,
7266 { "Expiration Month", "r3.expireon.month",
7267 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7268 NULL, HFILL }
7270 { &hf_r3_expireon_day,
7271 { "Expiration Day", "r3.expireon.day",
7272 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7273 NULL, HFILL }
7276 { &hf_r3_datetime_year,
7277 { "Date/Time Year", "r3.datetime.year",
7278 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7279 NULL, HFILL }
7281 { &hf_r3_datetime_month,
7282 { "Date/Time Month", "r3.datetime.month",
7283 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7284 NULL, HFILL }
7286 { &hf_r3_datetime_day,
7287 { "Date/Time Day", "r3.datetime.day",
7288 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7289 NULL, HFILL }
7291 { &hf_r3_datetime_dow,
7292 { "Date/Time DOW", "r3.datetime.dow",
7293 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7294 NULL, HFILL }
7296 { &hf_r3_datetime_hours,
7297 { "Date/Time Hours", "r3.datetime.hours",
7298 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7299 NULL, HFILL }
7301 { &hf_r3_datetime_minutes,
7302 { "Date/Time Minutes", "r3.datetime.minutes",
7303 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7304 NULL, HFILL }
7306 { &hf_r3_datetime_seconds,
7307 { "Date/Time Seconds", "r3.datetime.seconds",
7308 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7309 NULL, HFILL }
7311 { &hf_r3_datetime_dst,
7312 { "Date/Time DST", "r3.datetime.dst",
7313 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7314 NULL, HFILL }
7317 { &hf_r3_eventlog_recordnumber,
7318 { "Record Number", "r3.eventlog.recordnumber",
7319 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7320 NULL, HFILL }
7322 { &hf_r3_eventlog_year,
7323 { "Year", "r3.eventlog.year",
7324 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7325 NULL, HFILL }
7327 { &hf_r3_eventlog_month,
7328 { "Month", "r3.eventlog.month",
7329 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7330 NULL, HFILL }
7332 { &hf_r3_eventlog_day,
7333 { "Day", "r3.eventlog.day",
7334 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7335 NULL, HFILL }
7337 { &hf_r3_eventlog_hour,
7338 { "Hours", "r3.eventlog.hours",
7339 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7340 NULL, HFILL }
7342 { &hf_r3_eventlog_minute,
7343 { "Minutes", "r3.eventlog.minutes",
7344 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7345 NULL, HFILL }
7347 { &hf_r3_eventlog_second,
7348 { "Seconds", "r3.eventlog.seconds",
7349 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7350 NULL, HFILL }
7352 { &hf_r3_eventlog_usernumber,
7353 { "User Number", "r3.eventlog.usernumber",
7354 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7355 NULL, HFILL }
7357 { &hf_r3_eventlog_event,
7358 { "ID", "r3.eventlog.id",
7359 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7360 NULL, HFILL }
7363 { &hf_r3_declinedlog_recordnumber,
7364 { "Record Number", "r3.declinedlog.recordnumber",
7365 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7366 NULL, HFILL }
7368 { &hf_r3_declinedlog_year,
7369 { "Year", "r3.declinedlog.year",
7370 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7371 NULL, HFILL }
7373 { &hf_r3_declinedlog_month,
7374 { "Month", "r3.declinedlog.month",
7375 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7376 NULL, HFILL }
7378 { &hf_r3_declinedlog_day,
7379 { "Day", "r3.declinedlog.day",
7380 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7381 NULL, HFILL }
7383 { &hf_r3_declinedlog_hour,
7384 { "Hours", "r3.declinedlog.hours",
7385 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7386 NULL, HFILL }
7388 { &hf_r3_declinedlog_minute,
7389 { "Minutes", "r3.declinedlog.minutes",
7390 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7391 NULL, HFILL }
7393 { &hf_r3_declinedlog_second,
7394 { "Seconds", "r3.declinedlog.seconds",
7395 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7396 NULL, HFILL }
7398 { &hf_r3_declinedlog_usernumber,
7399 { "User Number", "r3.declinedlog.usernumber",
7400 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7401 NULL, HFILL }
7403 { &hf_r3_declinedlog_cred1type,
7404 { "Credential 1 Type", "r3.declinedlog.cred1type",
7405 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7406 NULL, HFILL }
7408 { &hf_r3_declinedlog_cred2type,
7409 { "Credential 2 Type", "r3.declinedlog.cred2type",
7410 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7411 NULL, HFILL }
7413 { &hf_r3_declinedlog_cred1,
7414 { "Credential 1", "r3.declinedlog.cred1",
7415 FT_BYTES, BASE_NONE, NULL, 0x0,
7416 NULL, HFILL }
7418 { &hf_r3_declinedlog_cred2,
7419 { "Credential 2", "r3.declinedlog.cred2",
7420 FT_BYTES, BASE_NONE, NULL, 0x0,
7421 NULL, HFILL }
7424 { &hf_r3_alarmlog_recordnumber,
7425 { "Record Number", "r3.alarmlog.recordnumber",
7426 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7427 NULL, HFILL }
7429 { &hf_r3_alarmlog_year,
7430 { "Year", "r3.alarmlog.year",
7431 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7432 NULL, HFILL }
7434 { &hf_r3_alarmlog_month,
7435 { "Month", "r3.alarmlog.month",
7436 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7437 NULL, HFILL }
7439 { &hf_r3_alarmlog_day,
7440 { "Day", "r3.alarmlog.day",
7441 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7442 NULL, HFILL }
7444 { &hf_r3_alarmlog_hour,
7445 { "Hours", "r3.alarmlog.hours",
7446 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7447 NULL, HFILL }
7449 { &hf_r3_alarmlog_minute,
7450 { "Minutes", "r3.alarmlog.minutes",
7451 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7452 NULL, HFILL }
7454 { &hf_r3_alarmlog_second,
7455 { "Seconds", "r3.alarmlog.seconds",
7456 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7457 NULL, HFILL }
7459 { &hf_r3_alarmlog_id,
7460 { "ID", "r3.alarmlog.id",
7461 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
7462 NULL, HFILL }
7464 { &hf_r3_alarmlog_usernumber,
7465 { "User Number", "r3.alarmlog.usernumber",
7466 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7467 NULL, HFILL }
7470 { &hf_r3_debugmsg,
7471 { "Debug Message", "r3.debug",
7472 FT_STRING, BASE_NONE, NULL, 0x0,
7473 NULL, HFILL }
7476 { &hf_r3_setdate_year,
7477 { "Year", "r3.setdate.year",
7478 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7479 NULL, HFILL }
7481 { &hf_r3_setdate_month,
7482 { "Month", "r3.setdate.month",
7483 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7484 NULL, HFILL }
7486 { &hf_r3_setdate_day,
7487 { "Day", "r3.setdate.day",
7488 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7489 NULL, HFILL }
7491 { &hf_r3_setdate_dow,
7492 { "Day-Of-Week", "r3.setdate.dow",
7493 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7494 NULL, HFILL }
7496 { &hf_r3_setdate_hours,
7497 { "Hours", "r3.setdate.hours",
7498 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7499 NULL, HFILL }
7501 { &hf_r3_setdate_minutes,
7502 { "Minutes", "r3.setdate.minutes",
7503 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7504 NULL, HFILL }
7506 { &hf_r3_setdate_seconds,
7507 { "Seconds", "r3.setdate.seconds",
7508 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7509 NULL, HFILL }
7512 { &hf_r3_deleteusers,
7513 { "Delete Users", "r3.deleteusers",
7514 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_deleteusersnames_ext, 0x0,
7515 NULL, HFILL }
7518 { &hf_r3_defineexception_number,
7519 { "Exception Number", "r3.defineexception.number",
7520 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7521 NULL, HFILL }
7523 { &hf_r3_defineexception_startdate_month,
7524 { "Start Month", "r3.defineexception.start.month",
7525 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7526 NULL, HFILL }
7528 { &hf_r3_defineexception_startdate_day,
7529 { "Start Day", "r3.defineexception.start.day",
7530 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7531 NULL, HFILL }
7533 { &hf_r3_defineexception_startdate_hours,
7534 { "Start Hours", "r3.defineexception.start.hours",
7535 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7536 NULL, HFILL }
7538 { &hf_r3_defineexception_startdate_minutes,
7539 { "Start Minutes", "r3.defineexception.start.minutes",
7540 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7541 NULL, HFILL }
7543 { &hf_r3_defineexception_enddate_month,
7544 { "End Month", "r3.defineexception.end.month",
7545 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7546 NULL, HFILL }
7548 { &hf_r3_defineexception_enddate_day,
7549 { "End Day", "r3.defineexception.end.day",
7550 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7551 NULL, HFILL }
7553 { &hf_r3_defineexception_enddate_hours,
7554 { "End Hours", "r3.defineexception.end.hours",
7555 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7556 NULL, HFILL }
7558 { &hf_r3_defineexception_enddate_minutes,
7559 { "End Minutes", "r3.defineexception.end.minutes",
7560 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7561 NULL, HFILL }
7564 { &hf_r3_defineexceptiongroup_number,
7565 { "Define Exception Group Number", "r3.defineexceptiongroup.number",
7566 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7567 NULL, HFILL }
7569 { &hf_r3_defineexceptiongroup_bits,
7570 { "Define Exception Group Bit Field", "r3.defineexceptiongroup.field",
7571 FT_NONE, BASE_NONE, NULL, 0x0,
7572 NULL, HFILL }
7575 { &hf_r3_definecalendar_number,
7576 { "Define Calendar Number", "r3.definecalendar.number",
7577 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7578 NULL, HFILL }
7580 { &hf_r3_definecalendar_bits,
7581 { "Define Calendar Bit Field", "r3.definecalendar.field",
7582 FT_NONE, BASE_NONE, NULL, 0x0,
7583 NULL, HFILL }
7586 { &hf_r3_definetimezone_number,
7587 { "Timezone Number", "r3.definetimezone.number",
7588 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7589 NULL, HFILL }
7591 { &hf_r3_definetimezone_starttime_hours,
7592 { "Start Hours", "r3.definetimezone.start.hours",
7593 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7594 NULL, HFILL }
7596 { &hf_r3_definetimezone_starttime_minutes,
7597 { "Start Minutes", "r3.definetimezone.start.minutes",
7598 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7599 NULL, HFILL }
7601 { &hf_r3_definetimezone_endtime_hours,
7602 { "End Hours", "r3.definetimezone.end.hours",
7603 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7604 NULL, HFILL }
7606 { &hf_r3_definetimezone_endtime_minutes,
7607 { "End Minutes", "r3.definetimezone.end.minutes",
7608 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7609 NULL, HFILL }
7611 { &hf_r3_definetimezone_daymap,
7612 { "Day Map", "r3.definetimezone.daymap",
7613 FT_UINT8, BASE_HEX, NULL, 0x0,
7614 NULL, HFILL }
7616 { &hf_r3_definetimezone_daymap0,
7617 { "Sunday", "r3.definetimezone.daymap.sunday",
7618 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
7619 NULL, HFILL }
7621 { &hf_r3_definetimezone_daymap1,
7622 { "Monday", "r3.definetimezone.daymap.monday",
7623 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02,
7624 NULL, HFILL }
7626 { &hf_r3_definetimezone_daymap2,
7627 { "Tuesday", "r3.definetimezone.daymap.tuesday",
7628 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x04,
7629 NULL, HFILL }
7631 { &hf_r3_definetimezone_daymap3,
7632 { "Wednesday", "r3.definetimezone.daymap.wednesday",
7633 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x08,
7634 NULL, HFILL }
7636 { &hf_r3_definetimezone_daymap4,
7637 { "Thursday", "r3.definetimezone.daymap.thursday",
7638 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x10,
7639 NULL, HFILL }
7641 { &hf_r3_definetimezone_daymap5,
7642 { "Friday", "r3.definetimezone.daymap.friday",
7643 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x20,
7644 NULL, HFILL }
7646 { &hf_r3_definetimezone_daymap6,
7647 { "Saturday", "r3.definetimezone.daymap.saturday",
7648 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x40,
7649 NULL, HFILL }
7651 { &hf_r3_definetimezone_exceptiongroup,
7652 { "Exception Group", "r3.definetimezone.exceptiongroup",
7653 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7654 NULL, HFILL }
7656 { &hf_r3_definetimezone_mode,
7657 { "Mode", "r3.definetimezone.mode",
7658 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_timezonemodenames_ext, 0x0,
7659 NULL, HFILL }
7661 { &hf_r3_definetimezone_calendar,
7662 { "Calendar", "r3.definetimezone.calendar",
7663 FT_NONE, BASE_NONE, NULL, 0x0,
7664 NULL, HFILL }
7667 { &hf_r3_rmtauthretry_sequence,
7668 { "Remote Auth Retry Sequence", "r3.rmtauthretry.sequence",
7669 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7670 NULL, HFILL }
7672 { &hf_r3_rmtauthretry_retry,
7673 { "Remote Auth Retry Mode", "r3.rmtauthretry.mode",
7674 FT_BOOLEAN, BASE_NONE, TFS (&tfs_rmtauthretry_flags), 0x0,
7675 NULL, HFILL }
7678 { &hf_r3_eventlogdump_starttime_year,
7679 { "Start Year", "r3.eventlogdump.start.year",
7680 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7681 NULL, HFILL }
7683 { &hf_r3_eventlogdump_starttime_month,
7684 { "Start Month", "r3.eventlogdump.start.month",
7685 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7686 NULL, HFILL }
7688 { &hf_r3_eventlogdump_starttime_day,
7689 { "Start Day", "r3.eventlogdump.start.day",
7690 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7691 NULL, HFILL }
7693 { &hf_r3_eventlogdump_starttime_hours,
7694 { "Start Hours", "r3.eventlogdump.start.hours",
7695 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7696 NULL, HFILL }
7698 { &hf_r3_eventlogdump_starttime_minutes,
7699 { "Start Minutes", "r3.eventlogdump.start.minutes",
7700 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7701 NULL, HFILL }
7703 { &hf_r3_eventlogdump_endtime_year,
7704 { "End Year", "r3.eventlogdump.end.year",
7705 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7706 NULL, HFILL }
7708 { &hf_r3_eventlogdump_endtime_month,
7709 { "End Month", "r3.eventlogdump.end.month",
7710 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7711 NULL, HFILL }
7713 { &hf_r3_eventlogdump_endtime_day,
7714 { "End Day", "r3.eventlogdump.end.day",
7715 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7716 NULL, HFILL }
7718 { &hf_r3_eventlogdump_endtime_hours,
7719 { "End Hours", "r3.eventlogdump.end.hours",
7720 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7721 NULL, HFILL }
7723 { &hf_r3_eventlogdump_endtime_minutes,
7724 { "End Minutes", "r3.eventlogdump.end.minutes",
7725 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7726 NULL, HFILL }
7728 { &hf_r3_eventlogdump_user,
7729 { "Filter User", "r3.eventlogdump.user",
7730 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7731 NULL, HFILL }
7734 { &hf_r3_declinedlogdump_starttime_year,
7735 { "Start Year", "r3.declinedlogdump.start.year",
7736 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7737 NULL, HFILL }
7739 { &hf_r3_declinedlogdump_starttime_month,
7740 { "Start Month", "r3.declinedlogdump.start.month",
7741 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7742 NULL, HFILL }
7744 { &hf_r3_declinedlogdump_starttime_day,
7745 { "Start Day", "r3.declinedlogdump.start.day",
7746 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7747 NULL, HFILL }
7749 { &hf_r3_declinedlogdump_starttime_hours,
7750 { "Start Hours", "r3.declinedlogdump.start.hours",
7751 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7752 NULL, HFILL }
7754 { &hf_r3_declinedlogdump_starttime_minutes,
7755 { "Start Minutes", "r3.declinedlogdump.start.minutes",
7756 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7757 NULL, HFILL }
7759 { &hf_r3_declinedlogdump_endtime_year,
7760 { "End Year", "r3.declinedlogdump.end.year",
7761 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7762 NULL, HFILL }
7764 { &hf_r3_declinedlogdump_endtime_month,
7765 { "End Month", "r3.declinedlogdump.end.month",
7766 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7767 NULL, HFILL }
7769 { &hf_r3_declinedlogdump_endtime_day,
7770 { "End Day", "r3.declinedlogdump.end.day",
7771 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7772 NULL, HFILL }
7774 { &hf_r3_declinedlogdump_endtime_hours,
7775 { "End Hours", "r3.declinedlogdump.end.hours",
7776 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7777 NULL, HFILL }
7779 { &hf_r3_declinedlogdump_endtime_minutes,
7780 { "End Minutes", "r3.declinedlogdump.end.minutes",
7781 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7782 NULL, HFILL }
7785 { &hf_r3_alarmlogdump_starttime_year,
7786 { "Start Year", "r3.alarmlogdump.start.year",
7787 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7788 NULL, HFILL }
7790 { &hf_r3_alarmlogdump_starttime_month,
7791 { "Start Month", "r3.alarmlogdump.start.month",
7792 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7793 NULL, HFILL }
7795 { &hf_r3_alarmlogdump_starttime_day,
7796 { "Start Day", "r3.alarmlogdump.start.day",
7797 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7798 NULL, HFILL }
7800 { &hf_r3_alarmlogdump_starttime_hours,
7801 { "Start Hours", "r3.alarmlogdump.start.hours",
7802 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7803 NULL, HFILL }
7805 { &hf_r3_alarmlogdump_starttime_minutes,
7806 { "Start Minutes", "r3.alarmlogdump.start.minutes",
7807 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7808 NULL, HFILL }
7810 { &hf_r3_alarmlogdump_endtime_year,
7811 { "End Year", "r3.alarmlogdump.end.year",
7812 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7813 NULL, HFILL }
7815 { &hf_r3_alarmlogdump_endtime_month,
7816 { "End Month", "r3.alarmlogdump.end.month",
7817 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7818 NULL, HFILL }
7820 { &hf_r3_alarmlogdump_endtime_day,
7821 { "End Day", "r3.alarmlogdump.end.day",
7822 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7823 NULL, HFILL }
7825 { &hf_r3_alarmlogdump_endtime_hours,
7826 { "End Hours", "r3.alarmlogdump.end.hours",
7827 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7828 NULL, HFILL }
7830 { &hf_r3_alarmlogdump_endtime_minutes,
7831 { "End Minutes", "r3.alarmlogdump.end.minutes",
7832 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7833 NULL, HFILL }
7836 { &hf_r3_nvramclearoptions,
7837 { "NVRAM Clean Options", "r3.nvramclear",
7838 FT_UINT16, BASE_HEX, NULL, 0x0,
7839 NULL, HFILL }
7841 { &hf_r3_nvramclearoptions0,
7842 { "NVRAMCLEAROPTIONS_CFGINSTALLER", "r3.nvramclear.cfginstaller",
7843 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0001,
7844 NULL, HFILL }
7846 { &hf_r3_nvramclearoptions1,
7847 { "NVRAMCLEAROPTIONS_CFGADMIN", "r3.nvramclear.cfgadmin",
7848 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0002,
7849 NULL, HFILL }
7851 { &hf_r3_nvramclearoptions2,
7852 { "NVRAMCLEAROPTIONS_EXCEPTIONS", "r3.nvramclear.exceptions",
7853 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0004,
7854 NULL, HFILL }
7856 { &hf_r3_nvramclearoptions3,
7857 { "NVRAMCLEAROPTIONS_EXCEPTIONGROUPS", "r3.nvramclear.exceptiongroups",
7858 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0008,
7859 NULL, HFILL }
7861 { &hf_r3_nvramclearoptions4,
7862 { "NVRAMCLEAROPTIONS_CALENDARS", "r3.nvramclear.calendars",
7863 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0010,
7864 NULL, HFILL }
7866 { &hf_r3_nvramclearoptions5,
7867 { "NVRAMCLEAROPTIONS_TIMEZONES", "r3.nvramclear.timezones",
7868 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0020,
7869 NULL, HFILL }
7871 { &hf_r3_nvramclearoptions6,
7872 { "NVRAMCLEAROPTIONS_FILTERS", "r3.nvramclear.filters",
7873 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0040,
7874 NULL, HFILL }
7876 { &hf_r3_nvramclearoptions7,
7877 { "NVRAMCLEAROPTIONS_EVENTLOG", "r3.nvramclear.eventlog",
7878 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0080,
7879 NULL, HFILL }
7881 { &hf_r3_nvramclearoptions8,
7882 { "NVRAMCLEAROPTIONS_USERDATA", "r3.nvramclear.userdata",
7883 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0100,
7884 NULL, HFILL }
7886 { &hf_r3_nvramclearoptions9,
7887 { "NVRAMCLEAROPTIONS_DECLINEDLOG", "r3.nvramclear.declinedlog",
7888 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0200,
7889 NULL, HFILL }
7891 { &hf_r3_nvramclearoptions10,
7892 { "NVRAMCLEAROPTIONS_ALARMLOG", "r3.nvramclear.alarmlog",
7893 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0400,
7894 NULL, HFILL }
7896 { &hf_r3_nvramclearoptions11,
7897 { "NVRAMCLEAROPTIONS_LRUCACHE", "r3.nvramclear.lrucache",
7898 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0800,
7899 NULL, HFILL }
7901 { &hf_r3_nvramclearoptions12,
7902 { "NVRAMCLEAROPTIONS_DBHASH", "r3.nvramclear.dbhash",
7903 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x1000,
7904 NULL, HFILL }
7906 { &hf_r3_nvramclearoptions13,
7907 { "NVRAMCLEAROPTIONS_CFGSYSTEM", "r3.nvramclear.cfgsystem",
7908 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x2000,
7909 NULL, HFILL }
7911 { &hf_r3_nvramclearoptions14,
7912 { "NVRAMCLEAROPTIONS_UNUSED", "r3.nvramclear.unused",
7913 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x4000,
7914 NULL, HFILL }
7916 { &hf_r3_nvramclearoptions15,
7917 { "NVRAMCLEAROPTIONS_USEBACKUP", "r3.nvramclear.usebackup",
7918 FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x8000,
7919 NULL, HFILL }
7922 { &hf_r3_writeeventlog_user,
7923 { "User", "r3.writeeventlog.user",
7924 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7925 NULL, HFILL }
7927 { &hf_r3_writeeventlog_event,
7928 { "Event", "r3.writeeventlog.event",
7929 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7930 NULL, HFILL }
7933 { &hf_r3_powertableselection,
7934 { "Table", "r3.powertableselection",
7935 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_powertablenames_ext, 0x0,
7936 NULL, HFILL }
7939 { &hf_r3_filter_type,
7940 { "Type", "r3.filter.type",
7941 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtertypenames_ext, 0x0,
7942 NULL, HFILL }
7944 { &hf_r3_filter_list,
7945 { "Event", "r3.filter.event",
7946 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtereventnames_ext, 0x0,
7947 NULL, HFILL }
7950 { &hf_r3_alarm_length,
7951 { "Length", "r3.alarm.length",
7952 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7953 NULL, HFILL }
7955 { &hf_r3_alarm_id,
7956 { "ID", "r3.alarm.id",
7957 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
7958 NULL, HFILL }
7960 { &hf_r3_alarm_state,
7961 { "State", "r3.alarm.state",
7962 FT_BOOLEAN, BASE_NONE, TFS (&tfs_enabled_disabled), 0x0,
7963 NULL, HFILL }
7966 /* XXX: start: Originally missing: Best guess */
7967 { &hf_r3_dpac_action,
7968 { "Dpac Action", "r3.dpac.action",
7969 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7970 NULL, HFILL }
7973 { &hf_r3_dpac_waittime,
7974 { "Dpac Waittime", "r3.dpac.waittime",
7975 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7976 NULL, HFILL }
7979 { &hf_r3_dpac_command,
7980 { "Dpac Command", "r3.dpac.command",
7981 FT_BYTES, BASE_NONE, NULL, 0x0,
7982 NULL, HFILL }
7985 { &hf_r3_dpacreply_stuff,
7986 { "Dpac Reply Stuff", "r3.dpacreply.stuff",
7987 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7988 NULL, HFILL }
7991 { &hf_r3_dpacreply_length,
7992 { "Dpac Reply Length", "r3.dpacreply.length",
7993 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7994 NULL, HFILL }
7997 { &hf_r3_dpacreply_reply,
7998 { "Dpac Reply", "r3.dpacreply.reply",
7999 FT_BYTES, BASE_NONE, NULL, 0x0,
8000 NULL, HFILL }
8002 /* XXX: end: Originally missing --- */
8004 { &hf_r3_mfgfield_length,
8005 { "Field Length", "r3.mfgfield.length",
8006 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8007 NULL, HFILL }
8009 { &hf_r3_mfgfield,
8010 { "Field", "r3.mfgfield.field",
8011 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgfieldnames_ext, 0x0,
8012 NULL, HFILL }
8014 #if 0
8015 { &hf_r3_mfgfield_data,
8016 { "Field Data", "r3.mfgfield.data",
8017 FT_NONE, BASE_NONE, NULL, 0x0,
8018 NULL, HFILL }
8020 #endif
8022 { &hf_r3_mfgsetserialnumber,
8023 { "Serial Number", "r3.mfgsetserialnumber",
8024 FT_STRING, BASE_NONE, NULL, 0x0,
8025 NULL, HFILL }
8027 { &hf_r3_mfgsetcryptkey,
8028 { "Crypt Key", "r3.mfgsetcryptkey",
8029 FT_BYTES, BASE_NONE, NULL, 0x0,
8030 NULL, HFILL }
8032 { &hf_r3_mfgdumpnvram,
8033 { "NVRAM Section", "r3.mfgnvramdump",
8034 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgnvramdumpnames_ext, 0x0,
8035 NULL, HFILL }
8037 { &hf_r3_mfgremoteunlock,
8038 { "Remote Unlock", "r3.mfgremoteunlock",
8039 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgremoteunlocknames_ext, 0x0,
8040 NULL, HFILL }
8042 { &hf_r3_mfgtestpreserve,
8043 { "Preserve Mode", "r3.mfgtestpreserve",
8044 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgtestpreservenames_ext, 0x0,
8045 NULL, HFILL }
8048 { &hf_r3_adc [0],
8049 { "ADC 0", "r3.adc.0",
8050 FT_UINT8, BASE_HEX, NULL, 0x0,
8051 NULL, HFILL }
8053 { &hf_r3_adc [1],
8054 { "ADC 1", "r3.adc.1",
8055 FT_UINT8, BASE_HEX, NULL, 0x0,
8056 NULL, HFILL }
8058 { &hf_r3_adc [2],
8059 { "ADC 2", "r3.adc.2",
8060 FT_UINT8, BASE_HEX, NULL, 0x0,
8061 NULL, HFILL }
8063 { &hf_r3_adc [3],
8064 { "ADC 3", "r3.adc.3",
8065 FT_UINT8, BASE_HEX, NULL, 0x0,
8066 NULL, HFILL }
8068 { &hf_r3_adc [4],
8069 { "ADC 4", "r3.adc.4",
8070 FT_UINT8, BASE_HEX, NULL, 0x0,
8071 NULL, HFILL }
8073 { &hf_r3_adc [5],
8074 { "ADC 5", "r3.adc.5",
8075 FT_UINT8, BASE_HEX, NULL, 0x0,
8076 NULL, HFILL }
8078 { &hf_r3_adc [6],
8079 { "ADC 6", "r3.adc.6",
8080 FT_UINT8, BASE_HEX, NULL, 0x0,
8081 NULL, HFILL }
8083 { &hf_r3_adc [7],
8084 { "ADC 7", "r3.adc.7",
8085 FT_UINT8, BASE_HEX, NULL, 0x0,
8086 NULL, HFILL }
8089 { &hf_r3_hardwareid_board,
8090 { "Board ID", "r3.hardwareid.board",
8091 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8092 NULL, HFILL }
8094 { &hf_r3_hardwareid_cpuid,
8095 { "CPU ID", "r3.hardwareid.cpuid",
8096 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8097 NULL, HFILL }
8099 { &hf_r3_hardwareid_cpurev,
8100 { "CPU Rev", "r3.hardwareid.cpurev",
8101 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8102 NULL, HFILL }
8105 { &hf_r3_testkeypad,
8106 { "Keypad Char", "r3.test.keypad",
8107 FT_CHAR, BASE_HEX, NULL, 0x0,
8108 NULL, HFILL }
8110 { &hf_r3_testmagcard,
8111 { "Mag Card", "r3.test.magcard",
8112 FT_STRING, BASE_NONE, NULL, 0x0,
8113 NULL, HFILL }
8115 { &hf_r3_testproxcard,
8116 { "Prox Card", "r3.test.proxcard",
8117 FT_STRING, BASE_NONE, NULL, 0x0,
8118 NULL, HFILL }
8121 { &hf_r3_nvramdump_record,
8122 { "Record Number", "r3.nvramdump.record",
8123 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8124 NULL, HFILL }
8126 { &hf_r3_nvramdump_length,
8127 { "Record Length", "r3.nvramdump.length",
8128 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8129 NULL, HFILL }
8131 { &hf_r3_nvramdump_data,
8132 { "Record Data", "r3.nvramdump.data",
8133 FT_NONE, BASE_NONE, NULL, 0x0,
8134 NULL, HFILL }
8137 { &hf_r3_nvramdumprle_record,
8138 { "Record Number", "r3.nvramdumprle.record",
8139 FT_UINT24, BASE_DEC_HEX, NULL, 0x0,
8140 NULL, HFILL }
8142 { &hf_r3_nvramdumprle_length,
8143 { "Record Length", "r3.nvramdumprle.length",
8144 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8145 NULL, HFILL }
8147 { &hf_r3_nvramdumprle_data,
8148 { "Record Data", "r3.nvramdumprle.data",
8149 FT_NONE, BASE_NONE, NULL, 0x0,
8150 NULL, HFILL }
8153 { &hf_r3_iopins_lat,
8154 { "LAT", "r3.iopins.lat",
8155 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8156 NULL, HFILL }
8158 { &hf_r3_iopins_port,
8159 { "PORT", "r3.iopins.port",
8160 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8161 NULL, HFILL }
8163 { &hf_r3_iopins_tris,
8164 { "TRIS", "r3.iopins.tris",
8165 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8166 NULL, HFILL }
8169 { &hf_r3_mortisepins_s1,
8170 { "Mortise Pin S1", "r3.mortisepins.s1",
8171 FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x01,
8172 NULL, HFILL }
8174 { &hf_r3_mortisepins_s2,
8175 { "Mortise Pin S2", "r3.mortisepins.s2",
8176 FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x02,
8177 NULL, HFILL }
8179 { &hf_r3_mortisepins_s3,
8180 { "Mortise Pin S3", "r3.mortisepins.s3",
8181 FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x04,
8182 NULL, HFILL }
8184 { &hf_r3_mortisepins_s4,
8185 { "Mortise Pin S4", "r3.mortisepins.s4",
8186 FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x08,
8187 NULL, HFILL }
8190 { &hf_r3_checksumresults ,
8191 { "Checksum Results", "r3.checksumresults",
8192 FT_NONE, BASE_NONE, NULL, 0x0,
8193 NULL, HFILL }
8195 { &hf_r3_checksumresults_field,
8196 { "Field", "r3.checksumresults.field",
8197 FT_UINT8, BASE_HEX|BASE_EXT_STRING, & r3_checksumresultnames_ext, 0x0,
8198 NULL, HFILL }
8200 { &hf_r3_checksumresults_length,
8201 { "Length", "r3.checksumresults.length",
8202 FT_UINT8, BASE_HEX, NULL, 0x0,
8203 NULL, HFILL }
8205 { &hf_r3_checksumresults_state,
8206 { "State", "r3.checksumresults.state",
8207 FT_BOOLEAN, BASE_NONE, TFS (&tfs_errornoerror_flags), 0x0,
8208 NULL, HFILL }
8211 { &hf_r3_forceoptions_item,
8212 { "Item", "r3.forceoptions.item",
8213 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_forceitemnames_ext, 0x0,
8214 NULL, HFILL }
8216 { &hf_r3_forceoptions_length,
8217 { "Length", "r3.forceoptions.length",
8218 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8219 NULL, HFILL }
8221 { &hf_r3_forceoptions_state_8,
8222 { "State", "r3.forceoptions.state",
8223 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8224 NULL, HFILL }
8226 { &hf_r3_forceoptions_state_16,
8227 { "State", "r3.forceoptions.state",
8228 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8229 NULL, HFILL }
8231 { &hf_r3_forceoptions_state_24,
8232 { "State", "r3.forceoptions.state",
8233 FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8234 NULL, HFILL }
8236 { &hf_r3_forceoptions_state_32,
8237 { "State", "r3.forceoptions.state",
8238 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8239 NULL, HFILL }
8242 { &hf_r3_peekpoke_operation,
8243 { "Operation", "r3.peekpoke.operation",
8244 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_peekpokenames_ext, 0x0,
8245 NULL, HFILL }
8247 { &hf_r3_peekpoke_address,
8248 { "Address", "r3.peekpoke.address",
8249 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8250 NULL, HFILL }
8252 { &hf_r3_peekpoke_length,
8253 { "Length", "r3.peekpoke.length",
8254 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8255 NULL, HFILL }
8257 { &hf_r3_peekpoke_poke8,
8258 { "8 Bit Value", "r3.peekpoke.poke8",
8259 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8260 NULL, HFILL }
8262 { &hf_r3_peekpoke_poke16,
8263 { "16 Bit Value", "r3.peekpoke.poke16",
8264 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8265 NULL, HFILL }
8267 { &hf_r3_peekpoke_poke24,
8268 { "24 Bit Value", "r3.peekpoke.poke24",
8269 FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8270 NULL, HFILL }
8272 { &hf_r3_peekpoke_poke32,
8273 { "32 Bit Value", "r3.peekpoke.poke32",
8274 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8275 NULL, HFILL }
8277 { &hf_r3_peekpoke_pokestring,
8278 { "String Value", "r3.peekpoke.pokestring",
8279 FT_BYTES, BASE_NONE, NULL, 0x0,
8280 NULL, HFILL }
8283 { &hf_r3_firmwaredownload_length,
8284 { "Length", "r3.firmwaredownload.length",
8285 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8286 NULL, HFILL }
8288 { &hf_r3_firmwaredownload_record,
8289 { "Record Number", "r3.firmwaredownload.record",
8290 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8291 NULL, HFILL }
8293 { &hf_r3_firmwaredownload_action,
8294 { "Action", "r3.firmwaredownload.action",
8295 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_downloadfirmwarenames_ext, 0x0,
8296 NULL, HFILL }
8298 { &hf_r3_firmwaredownload_timeout,
8299 { "Timeout", "r3.firmwaredownload.timeout",
8300 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8301 NULL, HFILL }
8303 { &hf_r3_firmwaredownload_nvram,
8304 { "NVRAM", "r3.firmwaredownload.nvram",
8305 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8306 NULL, HFILL }
8308 { &hf_r3_firmwaredownload_address,
8309 { "Address", "r3.firmwaredownload.address",
8310 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8311 NULL, HFILL }
8313 { &hf_r3_firmwaredownload_bytes,
8314 { "Bytes", "r3.firmwaredownload.bytes",
8315 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8316 NULL, HFILL }
8318 { &hf_r3_firmwaredownload_data,
8319 { "Data", "r3.firmwaredownload.data",
8320 FT_NONE, BASE_NONE, NULL, 0x0,
8321 NULL, HFILL }
8323 { &hf_r3_firmwaredownload_crc,
8324 { "CRC", "r3.firmwaredownload.crc",
8325 FT_UINT16, BASE_HEX, NULL, 0x0,
8326 NULL, HFILL }
8328 { &hf_r3_firmwaredownload_crc_bad,
8329 { "Bad CRC", "r3.firmwaredownload.crc_bad",
8330 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8331 NULL, HFILL }
8334 { &hf_r3_nvramchecksumvalue,
8335 { "Value", "r3.nvramchecksum.value",
8336 FT_UINT32, BASE_HEX, NULL, 0x0,
8337 NULL, HFILL }
8339 { &hf_r3_nvramchecksumvalue_fixup,
8340 { "Fixup", "r3.nvramchecksum.fixup",
8341 FT_UINT32, BASE_HEX, NULL, 0x0,
8342 NULL, HFILL }
8345 { &hf_r3_capabilities,
8346 { "Capability", "r3.capabilities",
8347 FT_NONE, BASE_NONE, NULL, 0x0,
8348 NULL, HFILL }
8350 { &hf_r3_capabilities_length,
8351 { "Length", "r3.capabilities.length",
8352 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8353 NULL, HFILL }
8355 { &hf_r3_capabilities_type,
8356 { "Type", "r3.capabilities.type",
8357 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_capabilitiesnames_ext, 0x0,
8358 NULL, HFILL }
8360 { &hf_r3_capabilities_value,
8361 { "Value", "r3.capabilities.value",
8362 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8363 NULL, HFILL }
8366 { &hf_r3_lockstate,
8367 { "Lock State", "r3.lockstate",
8368 FT_UINT24, BASE_HEX, NULL, 0x0,
8369 NULL, HFILL }
8372 { &hf_r3_lockstate_passage,
8373 { "Passage", "r3.lockstate.passage",
8374 FT_BOOLEAN, 24, NULL, 0x000001,
8375 NULL, HFILL }
8377 { &hf_r3_lockstate_panic,
8378 { "Panic", "r3.lockstate.panic",
8379 FT_BOOLEAN, 24, NULL, 0x000002,
8380 NULL, HFILL }
8382 { &hf_r3_lockstate_lockout,
8383 { "Lockout", "r3.lockstate.lockout",
8384 FT_BOOLEAN, 24, NULL, 0x000004,
8385 NULL, HFILL }
8387 { &hf_r3_lockstate_relock,
8388 { "Relock", "r3.lockstate.relock",
8389 FT_BOOLEAN, 24, NULL, 0x000008,
8390 NULL, HFILL }
8392 { &hf_r3_lockstate_autoopen,
8393 { "Auto Open", "r3.lockstate.autoopen",
8394 FT_BOOLEAN, 24, NULL, 0x000010,
8395 NULL, HFILL }
8397 { &hf_r3_lockstate_nextauto,
8398 { "Next Auto", "r3.lockstate.nextauto",
8399 FT_BOOLEAN, 24, NULL, 0x000020,
8400 NULL, HFILL }
8402 { &hf_r3_lockstate_lockstate,
8403 { "Lock State", "r3.lockstate.lockstate",
8404 FT_BOOLEAN, 24, NULL, 0x000040,
8405 NULL, HFILL }
8407 { &hf_r3_lockstate_wantstate,
8408 { "Want State", "r3.lockstate.wantstate",
8409 FT_BOOLEAN, 24, NULL, 0x000080,
8410 NULL, HFILL }
8412 { &hf_r3_lockstate_remote,
8413 { "Remote", "r3.lockstate.remote",
8414 FT_BOOLEAN, 24, NULL, 0x000100,
8415 NULL, HFILL }
8417 { &hf_r3_lockstate_update,
8418 { "Update", "r3.lockstate.update",
8419 FT_BOOLEAN, 24, NULL, 0x000200,
8420 NULL, HFILL }
8422 { &hf_r3_lockstate_exceptionspresent,
8423 { "Exceptions Present", "r3.lockstate.exceptionspresent",
8424 FT_BOOLEAN, 24, NULL, 0x000400,
8425 NULL, HFILL }
8427 { &hf_r3_lockstate_exceptionsactive,
8428 { "Exceptions Active", "r3.lockstate.exceptionsactive",
8429 FT_BOOLEAN, 24, NULL, 0x000800,
8430 NULL, HFILL }
8432 { &hf_r3_lockstate_timezonespresent,
8433 { "Timezones Presents", "r3.lockstate.timezonespresent",
8434 FT_BOOLEAN, 24, NULL, 0x001000,
8435 NULL, HFILL }
8437 { &hf_r3_lockstate_timezonesactive,
8438 { "Timezones Active", "r3.lockstate.timezonesactive",
8439 FT_BOOLEAN, 24, NULL, 0x002000,
8440 NULL, HFILL }
8442 { &hf_r3_lockstate_autounlockspresent,
8443 { "Auto Unlocks Present", "r3.lockstate.autounlockspresent",
8444 FT_BOOLEAN, 24, NULL, 0x004000,
8445 NULL, HFILL }
8447 { &hf_r3_lockstate_autounlocksactive,
8448 { "Auto Unlocks Active", "r3.lockstate.autounlocksactive",
8449 FT_BOOLEAN, 24, NULL, 0x008000,
8450 NULL, HFILL }
8452 { &hf_r3_lockstate_uapmspresent,
8453 { "UAPMs Present", "r3.lockstate.uapmspresent",
8454 FT_BOOLEAN, 24, NULL, 0x010000,
8455 NULL, HFILL }
8457 { &hf_r3_lockstate_uapmsactive,
8458 { "UAPMs Active", "r3.lockstate.uapmsactive",
8459 FT_BOOLEAN, 24, NULL, 0x020000,
8460 NULL, HFILL }
8462 { &hf_r3_lockstate_uapmrelockspresent,
8463 { "UAPM Relocks Present", "r3.lockstate.uapmrelockspresent",
8464 FT_BOOLEAN, 24, NULL, 0x040000,
8465 NULL, HFILL }
8467 { &hf_r3_lockstate_uapmreslocksactive,
8468 { "UAPM Relocks Active", "r3.lockstate.uapmreslocksactive",
8469 FT_BOOLEAN, 24, NULL, 0x080000,
8470 NULL, HFILL }
8472 { &hf_r3_lockstate_nvramprotect,
8473 { "NVRAM Protect", "r3.lockstate.nvramprotect",
8474 FT_BOOLEAN, 24, NULL, 0x100000,
8475 NULL, HFILL }
8477 { &hf_r3_lockstate_nvramchecksum,
8478 { "MVRAM Checksum", "r3.lockstate.nvramchecksum",
8479 FT_BOOLEAN, 24, NULL, 0x200000,
8480 NULL, HFILL }
8483 #if 0
8484 { &hf_r3_mortisestatelog,
8485 { "Mortise State Log", "r3.mortisestatelog",
8486 FT_NONE, BASE_NONE, NULL, 0x0,
8487 NULL, HFILL }
8489 #endif
8490 { &hf_r3_mortisestatelog_pointer,
8491 { "Event Pointer", "r3.mortisestatelog.pointer",
8492 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8493 NULL, HFILL }
8495 { &hf_r3_mortisestatelog_mortisetype,
8496 { "Mortise Type", "r3.mortisestatelog.mortisetype",
8497 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortisetypenames_ext, 0x0,
8498 NULL, HFILL }
8500 { &hf_r3_mortisestatelog_waiting,
8501 { "Waiting For Door Closed", "r3.mortisestatelog.waiting",
8502 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8503 NULL, HFILL }
8505 { &hf_r3_mortisestatelog_state,
8506 { "State", "r3.mortisestatelog.state",
8507 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8508 NULL, HFILL }
8510 { &hf_r3_mortisestatelog_last,
8511 { "Last State", "r3.mortisestatelog.laststate",
8512 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8513 NULL, HFILL }
8515 { &hf_r3_mortisestatelog_event,
8516 { "Event", "r3.mortisestatelog.event",
8517 FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortiseeventnames_ext, 0x0,
8518 NULL, HFILL }
8521 { &hf_r3_timerchain_newtick,
8522 { "New Tick", "r3.timerchain.newtick",
8523 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8524 NULL, HFILL }
8526 { &hf_r3_timerchain_currentboundary,
8527 { "Current Boundary", "r3.timerchain.currentboundary",
8528 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8529 NULL, HFILL }
8531 { &hf_r3_timerchain_tasktag,
8532 { "Task Tag", "r3.timerchain.tasktag",
8533 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8534 NULL, HFILL }
8536 { &hf_r3_timerchain_address,
8537 { "Address", "r3.timerchain.address",
8538 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8539 NULL, HFILL }
8541 { &hf_r3_timerchain_reload,
8542 { "Reload", "r3.timerchain.reload",
8543 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8544 NULL, HFILL }
8546 { &hf_r3_timerchain_boundary,
8547 { "Boundary", "r3.timerchain.boundary",
8548 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8549 NULL, HFILL }
8551 { &hf_r3_timerchain_count,
8552 { "Count", "r3.timerchain.count",
8553 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8554 NULL, HFILL }
8556 { &hf_r3_timerchain_flags,
8557 { "Flags", "r3.timerchain.flags",
8558 FT_UINT32, BASE_HEX, NULL, 0x0,
8559 NULL, HFILL }
8562 { &hf_r3_taskflags_taskid,
8563 { "Task ID", "r3.taskflags.taskid",
8564 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8565 NULL, HFILL }
8567 { &hf_r3_taskflags_flags,
8568 { "Flags", "r3.taskflags.flags",
8569 FT_UINT32, BASE_HEX, NULL, 0x0,
8570 NULL, HFILL }
8573 { &hf_r3_checkpointlog_entryptr,
8574 { "Entry Pointer", "r3.checkpointlog.entrypointer",
8575 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8576 NULL, HFILL }
8578 { &hf_r3_checkpointlog_rcon,
8579 { "RCON", "r3.checkpointlog.rcon",
8580 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8581 NULL, HFILL }
8583 { &hf_r3_checkpointlog_checkpoint,
8584 { "Checkpoint", "r3.checkpointlog.checkpoint",
8585 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8586 NULL, HFILL }
8589 { &hf_r3_cpuregisters_intcon,
8590 { "INTCON", "r3.cpuregisters.intcon",
8591 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8592 NULL, HFILL }
8594 { &hf_r3_cpuregisters_intcon2,
8595 { "INTCON2", "r3.cpuregisters.intcon2",
8596 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8597 NULL, HFILL }
8599 { &hf_r3_cpuregisters_intcon3,
8600 { "INTCON3", "r3.cpuregisters.intcon3",
8601 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8602 NULL, HFILL }
8604 { &hf_r3_cpuregisters_pir1,
8605 { "PIR1", "r3.cpuregisters.pir1",
8606 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8607 NULL, HFILL }
8609 { &hf_r3_cpuregisters_pir2,
8610 { "PIR2", "r3.cpuregisters.pir2",
8611 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8612 NULL, HFILL }
8614 { &hf_r3_cpuregisters_pir3,
8615 { "PIR3", "r3.cpuregisters.pir3",
8616 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8617 NULL, HFILL }
8619 { &hf_r3_cpuregisters_pie1,
8620 { "PIE1", "r3.cpuregisters.pie1",
8621 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8622 NULL, HFILL }
8624 { &hf_r3_cpuregisters_pie2,
8625 { "PIE2", "r3.cpuregisters.pie2",
8626 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8627 NULL, HFILL }
8629 { &hf_r3_cpuregisters_pie3,
8630 { "PIE3", "r3.cpuregisters.pie3",
8631 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8632 NULL, HFILL }
8634 { &hf_r3_cpuregisters_ipr1,
8635 { "IPR1", "r3.cpuregisters.ipr1",
8636 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8637 NULL, HFILL }
8639 { &hf_r3_cpuregisters_ipr2,
8640 { "IPR2", "r3.cpuregisters.ipr2",
8641 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8642 NULL, HFILL }
8644 { &hf_r3_cpuregisters_ipr3,
8645 { "IPR3", "r3.cpuregisters.ipr3",
8646 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8647 NULL, HFILL }
8649 { &hf_r3_cpuregisters_rcon,
8650 { "RCON", "r3.cpuregisters.rcon",
8651 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8652 NULL, HFILL }
8654 { &hf_r3_cpuregisters_osccon,
8655 { "OSCCON", "r3.cpuregisters.osccon",
8656 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8657 NULL, HFILL }
8659 { &hf_r3_cpuregisters_rcsta,
8660 { "RCSTA", "r3.cpuregisters.rcsta",
8661 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8662 NULL, HFILL }
8664 { &hf_r3_cpuregisters_txsta,
8665 { "TXSTA", "r3.cpuregisters.txsta",
8666 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8667 NULL, HFILL }
8669 { &hf_r3_cpuregisters_rcsta2,
8670 { "RCSTA2", "r3.cpuregisters.rcsta2",
8671 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8672 NULL, HFILL }
8674 { &hf_r3_cpuregisters_txsta2,
8675 { "TXSTA2", "r3.cpuregisters.txsta2",
8676 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8677 NULL, HFILL }
8679 { &hf_r3_cpuregisters_wdtcon,
8680 { "WDTCON", "r3.cpuregisters.wdtcon",
8681 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8682 NULL, HFILL }
8685 { &hf_r3_cpuregisters_intcon_rbif,
8686 { "INTCON.RBIF", "r3.cpuregisters.intcon.rbif",
8687 FT_BOOLEAN, 8, NULL, 0x01,
8688 NULL, HFILL }
8690 { &hf_r3_cpuregisters_intcon_int0if,
8691 { "INTCON.INT0IF", "r3.cpuregisters.intcon.int0if",
8692 FT_BOOLEAN, 8, NULL, 0x02,
8693 NULL, HFILL }
8695 { &hf_r3_cpuregisters_intcon_tmr0if,
8696 { "INTCON.TMR0IF", "r3.cpuregisters.intcon.tmr0if",
8697 FT_BOOLEAN, 8, NULL, 0x04,
8698 NULL, HFILL }
8700 { &hf_r3_cpuregisters_intcon_rbie,
8701 { "INTCON.RBIE", "r3.cpuregisters.intcon.rbie",
8702 FT_BOOLEAN, 8, NULL, 0x08,
8703 NULL, HFILL }
8705 { &hf_r3_cpuregisters_intcon_int0ie,
8706 { "INTCON.INT0IE", "r3.cpuregisters.intcon.int0ie",
8707 FT_BOOLEAN, 8, NULL, 0x10,
8708 NULL, HFILL }
8710 { &hf_r3_cpuregisters_intcon_tmr0ie,
8711 { "INTCON.TMR0IE", "r3.cpuregisters.intcon.tmr0ie",
8712 FT_BOOLEAN, 8, NULL, 0x20,
8713 NULL, HFILL }
8715 { &hf_r3_cpuregisters_intcon_giel,
8716 { "INTCON.GIEL", "r3.cpuregisters.intcon.giel",
8717 FT_BOOLEAN, 8, NULL, 0x40,
8718 NULL, HFILL }
8720 { &hf_r3_cpuregisters_intcon_gieh,
8721 { "INTCON.GIEH", "r3.cpuregisters.intcon.gieh",
8722 FT_BOOLEAN, 8, NULL, 0x80,
8723 NULL, HFILL }
8725 { &hf_r3_cpuregisters_intcon2_rbip,
8726 { "INTCON2.RBIP", "r3_cpuregisters_intcon2_rbip",
8727 FT_BOOLEAN, 8, NULL, 0x01,
8728 NULL, HFILL }
8730 { &hf_r3_cpuregisters_intcon2_int3ip,
8731 { "INTCON2.INT3IP", "r3_cpuregisters_intcon2_int3ip",
8732 FT_BOOLEAN, 8, NULL, 0x02,
8733 NULL, HFILL }
8735 { &hf_r3_cpuregisters_intcon2_tmr0ip,
8736 { "INTCON2.TMR0IP", "r3_cpuregisters_intcon2_tmr0ip",
8737 FT_BOOLEAN, 8, NULL, 0x04,
8738 NULL, HFILL }
8740 { &hf_r3_cpuregisters_intcon2_intedg3,
8741 { "INTCON2.INTEDG3", "r3_cpuregisters_intcon2_intedg3",
8742 FT_BOOLEAN, 8, NULL, 0x08,
8743 NULL, HFILL }
8745 { &hf_r3_cpuregisters_intcon2_intedg2,
8746 { "INTCON2.INTEDG2", "r3_cpuregisters_intcon2_intedg2",
8747 FT_BOOLEAN, 8, NULL, 0x10,
8748 NULL, HFILL }
8750 { &hf_r3_cpuregisters_intcon2_intedg1,
8751 { "INTCON2.INTEDG1", "r3_cpuregisters_intcon2_intedg1",
8752 FT_BOOLEAN, 8, NULL, 0x20,
8753 NULL, HFILL }
8755 { &hf_r3_cpuregisters_intcon2_intedg0,
8756 { "INTCON2.INTEDG0", "r3_cpuregisters_intcon2_intedg0",
8757 FT_BOOLEAN, 8, NULL, 0x40,
8758 NULL, HFILL }
8760 { &hf_r3_cpuregisters_intcon2_rbpu,
8761 { "INTCON2.RBPU", "r3_cpuregisters_intcon2_rbpu",
8762 FT_BOOLEAN, 8, NULL, 0x80,
8763 NULL, HFILL }
8765 { &hf_r3_cpuregisters_intcon3_int1if,
8766 { "INTCON3.INT1IF", "r3.cpuregisters.intcon3.int1if",
8767 FT_BOOLEAN, 8, NULL, 0x01,
8768 NULL, HFILL }
8770 { &hf_r3_cpuregisters_intcon3_int2if,
8771 { "INTCON3.INT2IF", "r3.cpuregisters.intcon3.int2if",
8772 FT_BOOLEAN, 8, NULL, 0x02,
8773 NULL, HFILL }
8775 { &hf_r3_cpuregisters_intcon3_int3if,
8776 { "INTCON3.INT3IF", "r3.cpuregisters.intcon3.int3if",
8777 FT_BOOLEAN, 8, NULL, 0x04,
8778 NULL, HFILL }
8780 { &hf_r3_cpuregisters_intcon3_int1ie,
8781 { "INTCON3.INT1IE", "r3.cpuregisters.intcon3.int1ie",
8782 FT_BOOLEAN, 8, NULL, 0x08,
8783 NULL, HFILL }
8785 { &hf_r3_cpuregisters_intcon3_int2ie,
8786 { "INTCON3.INT2IE", "r3.cpuregisters.intcon3.int2ie",
8787 FT_BOOLEAN, 8, NULL, 0x10,
8788 NULL, HFILL }
8790 { &hf_r3_cpuregisters_intcon3_int3ie,
8791 { "INTCON3.INT3IE", "r3.cpuregisters.intcon3.int3ie",
8792 FT_BOOLEAN, 8, NULL, 0x20,
8793 NULL, HFILL }
8795 { &hf_r3_cpuregisters_intcon3_int1ip,
8796 { "INTCON3.INT1IP", "r3.cpuregisters.intcon3.int1ip",
8797 FT_BOOLEAN, 8, NULL, 0x40,
8798 NULL, HFILL }
8800 { &hf_r3_cpuregisters_intcon3_int2ip,
8801 { "INTCON3.INT2IP", "r3.cpuregisters.intcon3.int2ip",
8802 FT_BOOLEAN, 8, NULL, 0x80,
8803 NULL, HFILL }
8805 { &hf_r3_cpuregisters_pir1_tmr1if,
8806 { "PIR1.TMR1IF", "r3.cpuregisters.pir1.tmr1if",
8807 FT_BOOLEAN, 8, NULL, 0x01,
8808 NULL, HFILL }
8810 { &hf_r3_cpuregisters_pir1_tmr2if,
8811 { "PIR1.TMR2IF", "r3.cpuregisters.pir1.tmr2if",
8812 FT_BOOLEAN, 8, NULL, 0x02,
8813 NULL, HFILL }
8815 { &hf_r3_cpuregisters_pir1_ccp1if,
8816 { "PIR1.CCP1IF", "r3.cpuregisters.pir1.ccp1if",
8817 FT_BOOLEAN, 8, NULL, 0x04,
8818 NULL, HFILL }
8820 { &hf_r3_cpuregisters_pir1_ssp1if,
8821 { "PIR1.SSP1IF", "r3.cpuregisters.pir1.ssp1if",
8822 FT_BOOLEAN, 8, NULL, 0x08,
8823 NULL, HFILL }
8825 { &hf_r3_cpuregisters_pir1_tx1if,
8826 { "PIR1.TX1IF", "r3.cpuregisters.pir1.tx1if",
8827 FT_BOOLEAN, 8, NULL, 0x10,
8828 NULL, HFILL }
8830 { &hf_r3_cpuregisters_pir1_rc1if,
8831 { "PIR1.RC1IF", "r3.cpuregisters.pir1.rc1if",
8832 FT_BOOLEAN, 8, NULL, 0x20,
8833 NULL, HFILL }
8835 { &hf_r3_cpuregisters_pir1_adif,
8836 { "PIR1.ADIF", "r3.cpuregisters.pir1.adif",
8837 FT_BOOLEAN, 8, NULL, 0x40,
8838 NULL, HFILL }
8840 { &hf_r3_cpuregisters_pir1_pspif,
8841 { "PIR1.PSPIF", "r3.cpuregisters.pir1.pspif",
8842 FT_BOOLEAN, 8, NULL, 0x80,
8843 NULL, HFILL }
8845 { &hf_r3_cpuregisters_pir2_ccp2if,
8846 { "PIR2.CCP2IF", "r3.cpuregisters.pir2.ccp2if",
8847 FT_BOOLEAN, 8, NULL, 0x01,
8848 NULL, HFILL }
8850 { &hf_r3_cpuregisters_pir2_tmr3if,
8851 { "PIR2.TMR3IF", "r3.cpuregisters.pir2.tmr3if",
8852 FT_BOOLEAN, 8, NULL, 0x02,
8853 NULL, HFILL }
8855 { &hf_r3_cpuregisters_pir2_hlvdif,
8856 { "PIR2.HLVDIF", "r3.cpuregisters.pir2.hlvdif",
8857 FT_BOOLEAN, 8, NULL, 0x04,
8858 NULL, HFILL }
8860 { &hf_r3_cpuregisters_pir2_bcl1if,
8861 { "PIR2.BCL1IF", "r3.cpuregisters.pir2.bcl1if",
8862 FT_BOOLEAN, 8, NULL, 0x08,
8863 NULL, HFILL }
8865 { &hf_r3_cpuregisters_pir2_eeif,
8866 { "PIR2.EEIF", "r3.cpuregisters.pir2.eeif",
8867 FT_BOOLEAN, 8, NULL, 0x10,
8868 NULL, HFILL }
8870 { &hf_r3_cpuregisters_pir2_unused5,
8871 { "PIR2.UNUSED5", "r3.cpuregisters.pir2.unused5",
8872 FT_BOOLEAN, 8, NULL, 0x20,
8873 NULL, HFILL }
8875 { &hf_r3_cpuregisters_pir2_cmif,
8876 { "PIR2.CMIF", "r3.cpuregisters.pir2.cmif",
8877 FT_BOOLEAN, 8, NULL, 0x40,
8878 NULL, HFILL }
8880 { &hf_r3_cpuregisters_pir2_oscfif,
8881 { "PIR2.OSCFIF", "r3.cpuregisters.pir2.oscfif",
8882 FT_BOOLEAN, 8, NULL, 0x80,
8883 NULL, HFILL }
8885 { &hf_r3_cpuregisters_pir3_ccp3if,
8886 { "PIR3.CCP3IF", "r3.cpuregisters.pir3.ccp3if",
8887 FT_BOOLEAN, 8, NULL, 0x01,
8888 NULL, HFILL }
8890 { &hf_r3_cpuregisters_pir3_ccp4if,
8891 { "PIR3.CCP4IF", "r3.cpuregisters.pir3.ccp4if",
8892 FT_BOOLEAN, 8, NULL, 0x02,
8893 NULL, HFILL }
8895 { &hf_r3_cpuregisters_pir3_ccp5if,
8896 { "PIR3.CCP5IF", "r3.cpuregisters.pir3.ccp5if",
8897 FT_BOOLEAN, 8, NULL, 0x04,
8898 NULL, HFILL }
8900 { &hf_r3_cpuregisters_pir3_tmr4if,
8901 { "PIR3.TMR4IF", "r3.cpuregisters.pir3.tmr4if",
8902 FT_BOOLEAN, 8, NULL, 0x08,
8903 NULL, HFILL }
8905 { &hf_r3_cpuregisters_pir3_tx2if,
8906 { "PIR3.TX2IF", "r3.cpuregisters.pir3.tx2if",
8907 FT_BOOLEAN, 8, NULL, 0x10,
8908 NULL, HFILL }
8910 { &hf_r3_cpuregisters_pir3_rc2if,
8911 { "PIR3.RC2IF", "r3.cpuregisters.pir3.rc2if",
8912 FT_BOOLEAN, 8, NULL, 0x20,
8913 NULL, HFILL }
8915 { &hf_r3_cpuregisters_pir3_bcl2if,
8916 { "PIR3.BCL2IF", "r3.cpuregisters.pir3.bcl2if",
8917 FT_BOOLEAN, 8, NULL, 0x40,
8918 NULL, HFILL }
8920 { &hf_r3_cpuregisters_pir3_ssp2if,
8921 { "PIR3.SSP2IF", "r3.cpuregisters.pir3.ssp2if",
8922 FT_BOOLEAN, 8, NULL, 0x80,
8923 NULL, HFILL }
8925 { &hf_r3_cpuregisters_pie1_tmr1ie,
8926 { "PIE1.TMR1IE", "r3.cpuregisters.pie1.tmr1ie",
8927 FT_BOOLEAN, 8, NULL, 0x01,
8928 NULL, HFILL }
8930 { &hf_r3_cpuregisters_pie1_tmr2ie,
8931 { "PIE1.TMR2IE", "r3.cpuregisters.pie1.tmr2ie",
8932 FT_BOOLEAN, 8, NULL, 0x02,
8933 NULL, HFILL }
8935 { &hf_r3_cpuregisters_pie1_ccp1ie,
8936 { "PIE1.CCP1IE", "r3.cpuregisters.pie1.ccp1ie",
8937 FT_BOOLEAN, 8, NULL, 0x04,
8938 NULL, HFILL }
8940 { &hf_r3_cpuregisters_pie1_ssp1ie,
8941 { "PIE1.SSP1IE", "r3.cpuregisters.pie1.ssp1ie",
8942 FT_BOOLEAN, 8, NULL, 0x08,
8943 NULL, HFILL }
8945 { &hf_r3_cpuregisters_pie1_tx1ie,
8946 { "PIE1.TX1IE", "r3.cpuregisters.pie1.tx1ie",
8947 FT_BOOLEAN, 8, NULL, 0x10,
8948 NULL, HFILL }
8950 { &hf_r3_cpuregisters_pie1_rc1ie,
8951 { "PIE1.RC1IE", "r3.cpuregisters.pie1.rc1ie",
8952 FT_BOOLEAN, 8, NULL, 0x20,
8953 NULL, HFILL }
8955 { &hf_r3_cpuregisters_pie1_adie,
8956 { "PIE1.ADIE", "r3.cpuregisters.pie1.adie",
8957 FT_BOOLEAN, 8, NULL, 0x40,
8958 NULL, HFILL }
8960 { &hf_r3_cpuregisters_pie1_pspie,
8961 { "PIE1.PSPIE", "r3.cpuregisters.pie1.pspie",
8962 FT_BOOLEAN, 8, NULL, 0x80,
8963 NULL, HFILL }
8965 { &hf_r3_cpuregisters_pie2_oscfie,
8966 { "PIE2.OSCFIE", "r3.cpuregisters.pie2.oscfie",
8967 FT_BOOLEAN, 8, NULL, 0x01,
8968 NULL, HFILL }
8970 { &hf_r3_cpuregisters_pie2_cmie,
8971 { "PIE2.CMIE", "r3.cpuregisters.pie2.cmie",
8972 FT_BOOLEAN, 8, NULL, 0x02,
8973 NULL, HFILL }
8975 { &hf_r3_cpuregisters_pie2_unused2,
8976 { "PIE2.UNUSED2", "r3.cpuregisters.pie2.unused2",
8977 FT_BOOLEAN, 8, NULL, 0x04,
8978 NULL, HFILL }
8980 { &hf_r3_cpuregisters_pie2_eeie,
8981 { "PIE2.EEIE", "r3.cpuregisters.pie2.eeie",
8982 FT_BOOLEAN, 8, NULL, 0x08,
8983 NULL, HFILL }
8985 { &hf_r3_cpuregisters_pie2_bcl1ie,
8986 { "PIE2.BCL1IE", "r3.cpuregisters.pie2.bcl1ie",
8987 FT_BOOLEAN, 8, NULL, 0x10,
8988 NULL, HFILL }
8990 { &hf_r3_cpuregisters_pie2_hlvdie,
8991 { "PIE2.HLVDIE", "r3.cpuregisters.pie2.hlvdie",
8992 FT_BOOLEAN, 8, NULL, 0x20,
8993 NULL, HFILL }
8995 { &hf_r3_cpuregisters_pie2_tmr3ie,
8996 { "PIE2.TMR3IE", "r3.cpuregisters.pie2.tmr3ie",
8997 FT_BOOLEAN, 8, NULL, 0x40,
8998 NULL, HFILL }
9000 { &hf_r3_cpuregisters_pie2_ccp2ie,
9001 { "PIE2.CCP2IE", "r3.cpuregisters.pie2.ccp2ie",
9002 FT_BOOLEAN, 8, NULL, 0x80,
9003 NULL, HFILL }
9005 { &hf_r3_cpuregisters_pie3_ccp3ie,
9006 { "PIE3.CCP3IE", "r3.cpuregisters.pie3.ccp3ie",
9007 FT_BOOLEAN, 8, NULL, 0x01,
9008 NULL, HFILL }
9010 { &hf_r3_cpuregisters_pie3_ccp4ie,
9011 { "PIE3.CCP4IE", "r3.cpuregisters.pie3.ccp4ie",
9012 FT_BOOLEAN, 8, NULL, 0x02,
9013 NULL, HFILL }
9015 { &hf_r3_cpuregisters_pie3_ccp5ie,
9016 { "PIE3.CCP5IE", "r3.cpuregisters.pie3.ccp5ie",
9017 FT_BOOLEAN, 8, NULL, 0x04,
9018 NULL, HFILL }
9020 { &hf_r3_cpuregisters_pie3_tmr4ie,
9021 { "PIE3.TMR4IE", "r3.cpuregisters.pie3.tmr4ie",
9022 FT_BOOLEAN, 8, NULL, 0x08,
9023 NULL, HFILL }
9025 { &hf_r3_cpuregisters_pie3_tx2ie,
9026 { "PIE3.TX2IE", "r3.cpuregisters.pie3.tx2ie",
9027 FT_BOOLEAN, 8, NULL, 0x10,
9028 NULL, HFILL }
9030 { &hf_r3_cpuregisters_pie3_rc2ie,
9031 { "PIE3.RC2IE", "r3.cpuregisters.pie3.rc2ie",
9032 FT_BOOLEAN, 8, NULL, 0x20,
9033 NULL, HFILL }
9035 { &hf_r3_cpuregisters_pie3_bcl2ie,
9036 { "PIE3.BCL2IE", "r3.cpuregisters.pie3.bcl2ie",
9037 FT_BOOLEAN, 8, NULL, 0x40,
9038 NULL, HFILL }
9040 { &hf_r3_cpuregisters_pie3_ssp2ie,
9041 { "PIE3.SSP2IE", "r3.cpuregisters.pie3.ssp2ie",
9042 FT_BOOLEAN, 8, NULL, 0x80,
9043 NULL, HFILL }
9045 { &hf_r3_cpuregisters_ipr1_tmr1ip,
9046 { "IPR1.TMR1IP", "r3.cpuregisters.ipr1.tmr1ip",
9047 FT_BOOLEAN, 8, NULL, 0x01,
9048 NULL, HFILL }
9050 { &hf_r3_cpuregisters_ipr1_tmr2ip,
9051 { "IPR1.TMR2IP", "r3.cpuregisters.ipr1.tmr2ip",
9052 FT_BOOLEAN, 8, NULL, 0x02,
9053 NULL, HFILL }
9055 { &hf_r3_cpuregisters_ipr1_ccp1ip,
9056 { "IPR1.CCP1IP", "r3.cpuregisters.ipr1.ccp1ip",
9057 FT_BOOLEAN, 8, NULL, 0x04,
9058 NULL, HFILL }
9060 { &hf_r3_cpuregisters_ipr1_ssp1ip,
9061 { "IPR1.SSP1IP", "r3.cpuregisters.ipr1.ssp1ip",
9062 FT_BOOLEAN, 8, NULL, 0x08,
9063 NULL, HFILL }
9065 { &hf_r3_cpuregisters_ipr1_tx1ip,
9066 { "IPR1.TX1IP", "r3.cpuregisters.ipr1.tx1ip",
9067 FT_BOOLEAN, 8, NULL, 0x10,
9068 NULL, HFILL }
9070 { &hf_r3_cpuregisters_ipr1_rc1ip,
9071 { "IPR1.RC1IP", "r3.cpuregisters.ipr1.rc1ip",
9072 FT_BOOLEAN, 8, NULL, 0x20,
9073 NULL, HFILL }
9075 { &hf_r3_cpuregisters_ipr1_adip,
9076 { "IPR1.ADIP", "r3.cpuregisters.ipr1.adip",
9077 FT_BOOLEAN, 8, NULL, 0x40,
9078 NULL, HFILL }
9080 { &hf_r3_cpuregisters_ipr1_pspip,
9081 { "IPR1.PSPIP", "r3.cpuregisters.ipr1.pspip",
9082 FT_BOOLEAN, 8, NULL, 0x80,
9083 NULL, HFILL }
9085 { &hf_r3_cpuregisters_ipr2_ccp2ip,
9086 { "IPR2.CCP2IP", "r3.cpuregisters.ipr2.ccp2ip",
9087 FT_BOOLEAN, 8, NULL, 0x01,
9088 NULL, HFILL }
9090 { &hf_r3_cpuregisters_ipr2_tmr3ip,
9091 { "IPR2.TMR3IP", "r3.cpuregisters.ipr2.tmr3ip",
9092 FT_BOOLEAN, 8, NULL, 0x02,
9093 NULL, HFILL }
9095 { &hf_r3_cpuregisters_ipr2_hlvdip,
9096 { "IPR2.HLVDIP", "r3.cpuregisters.ipr2.hlvdip",
9097 FT_BOOLEAN, 8, NULL, 0x04,
9098 NULL, HFILL }
9100 { &hf_r3_cpuregisters_ipr2_bcl1ip,
9101 { "IPR2.BCL1IP", "r3.cpuregisters.ipr2.bcl1ip",
9102 FT_BOOLEAN, 8, NULL, 0x08,
9103 NULL, HFILL }
9105 { &hf_r3_cpuregisters_ipr2_eeip,
9106 { "IPR2.EEIP", "r3.cpuregisters.ipr2.eeip",
9107 FT_BOOLEAN, 8, NULL, 0x10,
9108 NULL, HFILL }
9110 { &hf_r3_cpuregisters_ipr2_unused5,
9111 { "IPR2.UNUSED5", "r3.cpuregisters.ipr2.unused5",
9112 FT_BOOLEAN, 8, NULL, 0x20,
9113 NULL, HFILL }
9115 { &hf_r3_cpuregisters_ipr2_cmip,
9116 { "IPR2.CMIP", "r3.cpuregisters.ipr2.cmip",
9117 FT_BOOLEAN, 8, NULL, 0x40,
9118 NULL, HFILL }
9120 { &hf_r3_cpuregisters_ipr2_oscfip,
9121 { "IPR2.OSCFIP", "r3.cpuregisters.ipr2.oscfip",
9122 FT_BOOLEAN, 8, NULL, 0x80,
9123 NULL, HFILL }
9125 { &hf_r3_cpuregisters_ipr3_ccp2ip,
9126 { "IPR3.CCP2IP", "r3.cpuregisters.ipr3.ccp2ip",
9127 FT_BOOLEAN, 8, NULL, 0x01,
9128 NULL, HFILL }
9130 { &hf_r3_cpuregisters_ipr3_ccp4ip,
9131 { "IPR3.CCP4IP", "r3.cpuregisters.ipr3.ccp4ip",
9132 FT_BOOLEAN, 8, NULL, 0x02,
9133 NULL, HFILL }
9135 { &hf_r3_cpuregisters_ipr3_ccp5ip,
9136 { "IPR3.CCP5IP", "r3.cpuregisters.ipr3.ccp5ip",
9137 FT_BOOLEAN, 8, NULL, 0x04,
9138 NULL, HFILL }
9140 { &hf_r3_cpuregisters_ipr3_tmr4ip,
9141 { "IPR3.TMR4IP", "r3.cpuregisters.ipr3.tmr4ip",
9142 FT_BOOLEAN, 8, NULL, 0x08,
9143 NULL, HFILL }
9145 { &hf_r3_cpuregisters_ipr3_tx2ip,
9146 { "IPR3.TX2IP", "r3.cpuregisters.ipr3.tx2ip",
9147 FT_BOOLEAN, 8, NULL, 0x10,
9148 NULL, HFILL }
9150 { &hf_r3_cpuregisters_ipr3_rc2ip,
9151 { "IPR3.RC2IP", "r3.cpuregisters.ipr3.rc2ip",
9152 FT_BOOLEAN, 8, NULL, 0x20,
9153 NULL, HFILL }
9155 { &hf_r3_cpuregisters_ipr3_bcl2ip,
9156 { "IPR3.BCL2IP", "r3.cpuregisters.ipr3.bcl2ip",
9157 FT_BOOLEAN, 8, NULL, 0x40,
9158 NULL, HFILL }
9160 { &hf_r3_cpuregisters_ipr3_ssp2ip,
9161 { "IPR3.SSP2IP", "r3.cpuregisters.ipr3.ssp2ip",
9162 FT_BOOLEAN, 8, NULL, 0x80,
9163 NULL, HFILL }
9165 { &hf_r3_cpuregisters_rcon_bor,
9166 { "RCON./BOR", "r3.cpuregisters.rcon.bor",
9167 FT_BOOLEAN, 8, NULL, 0x01,
9168 NULL, HFILL }
9170 { &hf_r3_cpuregisters_rcon_por,
9171 { "RCON./POR", "r3.cpuregisters.rcon.por",
9172 FT_BOOLEAN, 8, NULL, 0x02,
9173 NULL, HFILL }
9175 { &hf_r3_cpuregisters_rcon_pd,
9176 { "RCON./PD", "r3.cpuregisters.rcon.pd",
9177 FT_BOOLEAN, 8, NULL, 0x04,
9178 NULL, HFILL }
9180 { &hf_r3_cpuregisters_rcon_to,
9181 { "RCON./TO", "r3.cpuregisters.rcon.to",
9182 FT_BOOLEAN, 8, NULL, 0x08,
9183 NULL, HFILL }
9185 { &hf_r3_cpuregisters_rcon_unused4,
9186 { "RCON.UNUSED4", "r3.cpuregisters.rcon.unused4",
9187 FT_BOOLEAN, 8, NULL, 0x10,
9188 NULL, HFILL }
9190 { &hf_r3_cpuregisters_rcon_ri,
9191 { "RCON./RI", "r3.cpuregisters.rcon.ri",
9192 FT_BOOLEAN, 8, NULL, 0x20,
9193 NULL, HFILL }
9195 { &hf_r3_cpuregisters_rcon_sboren,
9196 { "RCON.SBOREN", "r3.cpuregisters.rcon.sboren",
9197 FT_BOOLEAN, 8, NULL, 0x40,
9198 NULL, HFILL }
9200 { &hf_r3_cpuregisters_rcon_ipen,
9201 { "RCON.IPEN", "r3.cpuregisters.rcon.ipen",
9202 FT_BOOLEAN, 8, NULL, 0x80,
9203 NULL, HFILL }
9205 { &hf_r3_cpuregisters_osccon_scs0,
9206 { "OSCCON.SCS0", "r3.cpuregisters.osccon.scs0",
9207 FT_BOOLEAN, 8, NULL, 0x01,
9208 NULL, HFILL }
9210 { &hf_r3_cpuregisters_osccon_scs1,
9211 { "OSCCON.SCS1", "r3.cpuregisters.osccon.scs1",
9212 FT_BOOLEAN, 8, NULL, 0x02,
9213 NULL, HFILL }
9215 { &hf_r3_cpuregisters_osccon_iofs,
9216 { "OSCCON.IOFS", "r3.cpuregisters.osccon.iofs",
9217 FT_BOOLEAN, 8, NULL, 0x04,
9218 NULL, HFILL }
9220 { &hf_r3_cpuregisters_osccon_osts,
9221 { "OSCCON.OSTS", "r3.cpuregisters.osccon.osts",
9222 FT_BOOLEAN, 8, NULL, 0x08,
9223 NULL, HFILL }
9225 { &hf_r3_cpuregisters_osccon_ircf0,
9226 { "OSCCON.IRCF0", "r3.cpuregisters.osccon.ircf0",
9227 FT_BOOLEAN, 8, NULL, 0x10,
9228 NULL, HFILL }
9230 { &hf_r3_cpuregisters_osccon_ircf1,
9231 { "OSCCON.IRCF1", "r3.cpuregisters.osccon.ircf1",
9232 FT_BOOLEAN, 8, NULL, 0x20,
9233 NULL, HFILL }
9235 { &hf_r3_cpuregisters_osccon_ircf2,
9236 { "OSCCON.IRCF2", "r3.cpuregisters.osccon.ircf2",
9237 FT_BOOLEAN, 8, NULL, 0x40,
9238 NULL, HFILL }
9240 { &hf_r3_cpuregisters_osccon_idlen,
9241 { "OSCCON.IDLEN", "r3.cpuregisters.osccon.idlen",
9242 FT_BOOLEAN, 8, NULL, 0x80,
9243 NULL, HFILL }
9245 { &hf_r3_cpuregisters_rcsta_rx9d,
9246 { "RCSTA.RX9D", "r3.cpuregisters.rcsta.rx9d",
9247 FT_BOOLEAN, 8, NULL, 0x01,
9248 NULL, HFILL }
9250 { &hf_r3_cpuregisters_rcsta_oerr,
9251 { "RCSTA.OERR", "r3.cpuregisters.rcsta.oerr",
9252 FT_BOOLEAN, 8, NULL, 0x02,
9253 NULL, HFILL }
9255 { &hf_r3_cpuregisters_rcsta_ferr,
9256 { "RCSTA.FERR", "r3.cpuregisters.rcsta.ferr",
9257 FT_BOOLEAN, 8, NULL, 0x04,
9258 NULL, HFILL }
9260 { &hf_r3_cpuregisters_rcsta_adden,
9261 { "RCSTA.ADDEN", "r3.cpuregisters.rcsta.adden",
9262 FT_BOOLEAN, 8, NULL, 0x08,
9263 NULL, HFILL }
9265 { &hf_r3_cpuregisters_rcsta_cren,
9266 { "RCSTA.CREN", "r3.cpuregisters.rcsta.cren",
9267 FT_BOOLEAN, 8, NULL, 0x10,
9268 NULL, HFILL }
9270 { &hf_r3_cpuregisters_rcsta_sren,
9271 { "RCSTA.SREN", "r3.cpuregisters.rcsta.sren",
9272 FT_BOOLEAN, 8, NULL, 0x20,
9273 NULL, HFILL }
9275 { &hf_r3_cpuregisters_rcsta_rx9,
9276 { "RCSTA.RX9", "r3.cpuregisters.rcsta.rx9",
9277 FT_BOOLEAN, 8, NULL, 0x40,
9278 NULL, HFILL }
9280 { &hf_r3_cpuregisters_rcsta_spen,
9281 { "RCSTA.SPEN", "r3.cpuregisters.rcsta.spen",
9282 FT_BOOLEAN, 8, NULL, 0x80,
9283 NULL, HFILL }
9285 { &hf_r3_cpuregisters_txsta_tx9d,
9286 { "TXSTA.TX9D", "r3.cpuregisters.txsta.tx9d",
9287 FT_BOOLEAN, 8, NULL, 0x01,
9288 NULL, HFILL }
9290 { &hf_r3_cpuregisters_txsta_trmt,
9291 { "TXSTA.TRMT", "r3.cpuregisters.txsta.trmt",
9292 FT_BOOLEAN, 8, NULL, 0x02,
9293 NULL, HFILL }
9295 { &hf_r3_cpuregisters_txsta_brgh,
9296 { "TXSTA.BRGH", "r3.cpuregisters.txsta.brgh",
9297 FT_BOOLEAN, 8, NULL, 0x04,
9298 NULL, HFILL }
9300 { &hf_r3_cpuregisters_txsta_sendb,
9301 { "TXSTA.SENDB", "r3.cpuregisters.txsta.sendb",
9302 FT_BOOLEAN, 8, NULL, 0x08,
9303 NULL, HFILL }
9305 { &hf_r3_cpuregisters_txsta_sync,
9306 { "TXSTA.SYNC", "r3.cpuregisters.txsta.sync",
9307 FT_BOOLEAN, 8, NULL, 0x10,
9308 NULL, HFILL }
9310 { &hf_r3_cpuregisters_txsta_txen,
9311 { "TXSTA.TXEN", "r3.cpuregisters.txsta.txen",
9312 FT_BOOLEAN, 8, NULL, 0x20,
9313 NULL, HFILL }
9315 { &hf_r3_cpuregisters_txsta_tx9,
9316 { "TXSTA.TX9", "r3.cpuregisters.txsta.tx9",
9317 FT_BOOLEAN, 8, NULL, 0x40,
9318 NULL, HFILL }
9320 { &hf_r3_cpuregisters_txsta_csrc,
9321 { "TXSTA.CSRC", "r3.cpuregisters.txsta.csrc",
9322 FT_BOOLEAN, 8, NULL, 0x80,
9323 NULL, HFILL }
9325 { &hf_r3_cpuregisters_rcsta2_rx9d,
9326 { "RCSTA2.RX9D", "r3.cpuregisters.rcsta2.rx9d",
9327 FT_BOOLEAN, 8, NULL, 0x01,
9328 NULL, HFILL }
9330 { &hf_r3_cpuregisters_rcsta2_oerr,
9331 { "RCSTA2.OERR", "r3.cpuregisters.rcsta2.oerr",
9332 FT_BOOLEAN, 8, NULL, 0x02,
9333 NULL, HFILL }
9335 { &hf_r3_cpuregisters_rcsta2_ferr,
9336 { "RCSTA2.FERR", "r3.cpuregisters.rcsta2.ferr",
9337 FT_BOOLEAN, 8, NULL, 0x04,
9338 NULL, HFILL }
9340 { &hf_r3_cpuregisters_rcsta2_adden,
9341 { "RCSTA2.ADDEN", "r3.cpuregisters.rcsta2.adden",
9342 FT_BOOLEAN, 8, NULL, 0x08,
9343 NULL, HFILL }
9345 { &hf_r3_cpuregisters_rcsta2_cren,
9346 { "RCSTA2.CREN", "r3.cpuregisters.rcsta2.cren",
9347 FT_BOOLEAN, 8, NULL, 0x10,
9348 NULL, HFILL }
9350 { &hf_r3_cpuregisters_rcsta2_sren,
9351 { "RCSTA2.SREN", "r3.cpuregisters.rcsta2.sren",
9352 FT_BOOLEAN, 8, NULL, 0x20,
9353 NULL, HFILL }
9355 { &hf_r3_cpuregisters_rcsta2_rx9,
9356 { "RCSTA2.RX9", "r3.cpuregisters.rcsta2.rx9",
9357 FT_BOOLEAN, 8, NULL, 0x40,
9358 NULL, HFILL }
9360 { &hf_r3_cpuregisters_rcsta2_spen,
9361 { "RCSTA2.SPEN", "r3.cpuregisters.rcsta2.spen",
9362 FT_BOOLEAN, 8, NULL, 0x80,
9363 NULL, HFILL }
9365 { &hf_r3_cpuregisters_txsta2_tx9d,
9366 { "TXSTA2.TX9D", "r3.cpuregisters.txsta2.tx9d",
9367 FT_BOOLEAN, 8, NULL, 0x01,
9368 NULL, HFILL }
9370 { &hf_r3_cpuregisters_txsta2_trmt,
9371 { "TXSTA2.TRMT", "r3.cpuregisters.txsta2.trmt",
9372 FT_BOOLEAN, 8, NULL, 0x02,
9373 NULL, HFILL }
9375 { &hf_r3_cpuregisters_txsta2_brgh,
9376 { "TXSTA2.BRGH", "r3.cpuregisters.txsta2.brgh",
9377 FT_BOOLEAN, 8, NULL, 0x04,
9378 NULL, HFILL }
9380 { &hf_r3_cpuregisters_txsta2_sendb,
9381 { "TXSTA2.SENDB", "r3.cpuregisters.txsta2.sendb",
9382 FT_BOOLEAN, 8, NULL, 0x08,
9383 NULL, HFILL }
9385 { &hf_r3_cpuregisters_txsta2_sync,
9386 { "TXSTA2.SYNC", "r3.cpuregisters.txsta2.sync",
9387 FT_BOOLEAN, 8, NULL, 0x10,
9388 NULL, HFILL }
9390 { &hf_r3_cpuregisters_txsta2_txen,
9391 { "TXSTA2.TXEN", "r3.cpuregisters.txsta2.txen",
9392 FT_BOOLEAN, 8, NULL, 0x20,
9393 NULL, HFILL }
9395 { &hf_r3_cpuregisters_txsta2_tx9,
9396 { "TXSTA2.TX9", "r3.cpuregisters.txsta2.tx9",
9397 FT_BOOLEAN, 8, NULL, 0x40,
9398 NULL, HFILL }
9400 { &hf_r3_cpuregisters_txsta2_csrc,
9401 { "TXSTA2.CSRC", "r3.cpuregisters.txsta2.csrc",
9402 FT_BOOLEAN, 8, NULL, 0x80,
9403 NULL, HFILL }
9405 { &hf_r3_cpuregisters_wdtcon_swdten,
9406 { "WDTCON.SWDTEN", "r3.cpuregisters.wdtcon.swdten",
9407 FT_BOOLEAN, 8, NULL, 0x01,
9408 NULL, HFILL }
9410 { &hf_r3_cpuregisters_wdtcon_unused1,
9411 { "WDTCON.UNUSED1", "r3.cpuregisters.wdtcon.unused1",
9412 FT_BOOLEAN, 8, NULL, 0x02,
9413 NULL, HFILL }
9415 { &hf_r3_cpuregisters_wdtcon_unused2,
9416 { "WDTCON.UNUSED2", "r3.cpuregisters.wdtcon.unused2",
9417 FT_BOOLEAN, 8, NULL, 0x04,
9418 NULL, HFILL }
9420 { &hf_r3_cpuregisters_wdtcon_unused3,
9421 { "WDTCON.UNUSED3", "r3.cpuregisters.wdtcon.unused3",
9422 FT_BOOLEAN, 8, NULL, 0x08,
9423 NULL, HFILL }
9425 { &hf_r3_cpuregisters_wdtcon_unused4,
9426 { "WDTCON.UNUSED4", "r3.cpuregisters.wdtcon.unused4",
9427 FT_BOOLEAN, 8, NULL, 0x10,
9428 NULL, HFILL }
9430 { &hf_r3_cpuregisters_wdtcon_unused5,
9431 { "WDTCON.UNUSED5", "r3.cpuregisters.wdtcon.unused5",
9432 FT_BOOLEAN, 8, NULL, 0x20,
9433 NULL, HFILL }
9435 { &hf_r3_cpuregisters_wdtcon_unused6,
9436 { "WDTCON.UNUSED6", "r3.cpuregisters.wdtcon.unused6",
9437 FT_BOOLEAN, 8, NULL, 0x40,
9438 NULL, HFILL }
9440 { &hf_r3_cpuregisters_wdtcon_unused7,
9441 { "WDTCON.UNUSED7", "r3.cpuregisters.wdtcon.unused7",
9442 FT_BOOLEAN, 8, NULL, 0x80,
9443 NULL, HFILL }
9446 { &hf_r3_dumpm41t81_reg00,
9447 { "REG 0x00", "r3.m41t81.reg00",
9448 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9449 NULL, HFILL }
9451 { &hf_r3_dumpm41t81_reg01,
9452 { "REG 0x01", "r3.m41t81.reg01",
9453 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9454 NULL, HFILL }
9456 { &hf_r3_dumpm41t81_reg02,
9457 { "REG 0x02", "r3.m41t81.reg02",
9458 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9459 NULL, HFILL }
9461 { &hf_r3_dumpm41t81_reg03,
9462 { "REG 0x03", "r3.m41t81.reg03",
9463 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9464 NULL, HFILL }
9466 { &hf_r3_dumpm41t81_reg04,
9467 { "REG 0x04", "r3.m41t81.reg04",
9468 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9469 NULL, HFILL }
9471 { &hf_r3_dumpm41t81_reg05,
9472 { "REG 0x05", "r3.m41t81.reg05",
9473 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9474 NULL, HFILL }
9476 { &hf_r3_dumpm41t81_reg06,
9477 { "REG 0x06", "r3.m41t81.reg06",
9478 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9479 NULL, HFILL }
9481 { &hf_r3_dumpm41t81_reg07,
9482 { "REG 0x07", "r3.m41t81.reg07",
9483 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9484 NULL, HFILL }
9486 { &hf_r3_dumpm41t81_reg08,
9487 { "REG 0x08", "r3.m41t81.reg08",
9488 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9489 NULL, HFILL }
9491 { &hf_r3_dumpm41t81_reg09,
9492 { "REG 0x09", "r3.m41t81.reg09",
9493 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9494 NULL, HFILL }
9496 { &hf_r3_dumpm41t81_reg0a,
9497 { "REG 0x0a", "r3.m41t81.reg0a",
9498 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9499 NULL, HFILL }
9501 { &hf_r3_dumpm41t81_reg0b,
9502 { "REG 0x0b", "r3.m41t81.reg0b",
9503 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9504 NULL, HFILL }
9506 { &hf_r3_dumpm41t81_reg0c,
9507 { "REG 0x0c", "r3.m41t81.reg0c",
9508 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9509 NULL, HFILL }
9511 { &hf_r3_dumpm41t81_reg0d,
9512 { "REG 0x0d", "r3.m41t81.reg0d",
9513 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9514 NULL, HFILL }
9516 { &hf_r3_dumpm41t81_reg0e,
9517 { "REG 0x0e", "r3.m41t81.reg0e",
9518 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9519 NULL, HFILL }
9521 { &hf_r3_dumpm41t81_reg0f,
9522 { "REG 0x0f", "r3.m41t81.reg0f",
9523 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9524 NULL, HFILL }
9526 { &hf_r3_dumpm41t81_reg10,
9527 { "REG 0x10", "r3.m41t81.reg10",
9528 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9529 NULL, HFILL }
9531 { &hf_r3_dumpm41t81_reg11,
9532 { "REG 0x11", "r3.m41t81.reg11",
9533 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9534 NULL, HFILL }
9536 { &hf_r3_dumpm41t81_reg12,
9537 { "REG 0x12", "r3.m41t81.reg12",
9538 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9539 NULL, HFILL }
9541 { &hf_r3_dumpm41t81_reg13,
9542 { "REG 0x13", "r3.m41t81.reg13",
9543 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9544 NULL, HFILL }
9547 { &hf_r3_dumpm41t81_reg00_sec1,
9548 { ".1 Seconds", "r3.m41t81.reg00.sec1",
9549 FT_UINT8, BASE_DEC, NULL, 0x0,
9550 NULL, HFILL }
9552 { &hf_r3_dumpm41t81_reg00_sec01,
9553 { ".01 Seconds", "r3.m41t81.reg00.sec01",
9554 FT_UINT8, BASE_DEC, NULL, 0x0,
9555 NULL, HFILL }
9557 { &hf_r3_dumpm41t81_reg01_st,
9558 { "ST", "r3.m41t81.reg01.st",
9559 FT_UINT8, BASE_DEC, NULL, 0x0,
9560 NULL, HFILL }
9562 { &hf_r3_dumpm41t81_reg01_10sec,
9563 { "10 Seconds", "r3.m41t81.reg01.10sec",
9564 FT_UINT8, BASE_DEC, NULL, 0x0,
9565 NULL, HFILL }
9567 { &hf_r3_dumpm41t81_reg01_1sec,
9568 { "1 Seconds", "r3.m41t81.reg01.1sec",
9569 FT_UINT8, BASE_DEC, NULL, 0x0,
9570 NULL, HFILL }
9572 { &hf_r3_dumpm41t81_reg02_notused,
9573 { "(not used)", "r3.m41t81.reg02.notused",
9574 FT_UINT8, BASE_DEC, NULL, 0x0,
9575 NULL, HFILL }
9577 { &hf_r3_dumpm41t81_reg02_10min,
9578 { "10 Minutes", "r3.m41t81.reg02.10min",
9579 FT_UINT8, BASE_DEC, NULL, 0x0,
9580 NULL, HFILL }
9582 { &hf_r3_dumpm41t81_reg02_1min,
9583 { "1 Minutes", "r3.m41t81.reg02.1min",
9584 FT_UINT8, BASE_DEC, NULL, 0x0,
9585 NULL, HFILL }
9587 { &hf_r3_dumpm41t81_reg03_cbe,
9588 { "CBE", "r3.m41t81.reg03.cbe",
9589 FT_UINT8, BASE_DEC, NULL, 0x0,
9590 NULL, HFILL }
9592 { &hf_r3_dumpm41t81_reg03_cb,
9593 { "CB", "r3.m41t81.reg03.cb",
9594 FT_UINT8, BASE_DEC, NULL, 0x0,
9595 NULL, HFILL }
9597 { &hf_r3_dumpm41t81_reg03_10hour,
9598 { "10 Hours", "r3.m41t81.reg03.10hour",
9599 FT_UINT8, BASE_DEC, NULL, 0x0,
9600 NULL, HFILL }
9602 { &hf_r3_dumpm41t81_reg03_1hour,
9603 { "1 Hours", "r3.m41t81.reg03.1hour",
9604 FT_UINT8, BASE_DEC, NULL, 0x0,
9605 NULL, HFILL }
9607 { &hf_r3_dumpm41t81_reg04_notused,
9608 { "(not used)", "r3.m41t81.reg04.notused",
9609 FT_UINT8, BASE_DEC, NULL, 0x0,
9610 NULL, HFILL }
9612 { &hf_r3_dumpm41t81_reg04_dow,
9613 { "DOW", "r3.m41t81.reg04.dow",
9614 FT_UINT8, BASE_DEC, NULL, 0x0,
9615 NULL, HFILL }
9617 { &hf_r3_dumpm41t81_reg05_notused,
9618 { "(not used)", "r3.m41t81.reg05.notused",
9619 FT_UINT8, BASE_DEC, NULL, 0x0,
9620 NULL, HFILL }
9622 { &hf_r3_dumpm41t81_reg05_10day,
9623 { "10 Day", "r3.m41t81.reg05.10day",
9624 FT_UINT8, BASE_DEC, NULL, 0x0,
9625 NULL, HFILL }
9627 { &hf_r3_dumpm41t81_reg05_1day,
9628 { "1 Day", "r3.m41t81.reg05.1day",
9629 FT_UINT8, BASE_DEC, NULL, 0x0,
9630 NULL, HFILL }
9632 { &hf_r3_dumpm41t81_reg06_notused,
9633 { "(not used)", "r3.m41t81.reg06.notused",
9634 FT_UINT8, BASE_DEC, NULL, 0x0,
9635 NULL, HFILL }
9637 { &hf_r3_dumpm41t81_reg06_10month,
9638 { "10 Month", "r3.m41t81.reg06.10month",
9639 FT_UINT8, BASE_DEC, NULL, 0x0,
9640 NULL, HFILL }
9642 { &hf_r3_dumpm41t81_reg06_1month,
9643 { "1 Month", "r3.m41t81.reg06.1month",
9644 FT_UINT8, BASE_DEC, NULL, 0x0,
9645 NULL, HFILL }
9647 { &hf_r3_dumpm41t81_reg07_10year,
9648 { "10 Year", "r3.m41t81.reg07.10year",
9649 FT_UINT8, BASE_DEC, NULL, 0x0,
9650 NULL, HFILL }
9652 { &hf_r3_dumpm41t81_reg07_1year,
9653 { "1 Year", "r3.m41t81.reg07.1year",
9654 FT_UINT8, BASE_DEC, NULL, 0x0,
9655 NULL, HFILL }
9657 { &hf_r3_dumpm41t81_reg08_out,
9658 { "OUT", "r3.m41t81.reg08.out",
9659 FT_UINT8, BASE_DEC, NULL, 0x0,
9660 NULL, HFILL }
9662 { &hf_r3_dumpm41t81_reg08_ft,
9663 { "FT", "r3.m41t81.reg08.ft",
9664 FT_UINT8, BASE_DEC, NULL, 0x0,
9665 NULL, HFILL }
9667 { &hf_r3_dumpm41t81_reg08_s,
9668 { "S", "r3.m41t81.reg08.s",
9669 FT_UINT8, BASE_DEC, NULL, 0x0,
9670 NULL, HFILL }
9672 { &hf_r3_dumpm41t81_reg08_cal,
9673 { "CAL", "r3.m41t81.reg08.cal",
9674 FT_UINT8, BASE_DEC, NULL, 0x0,
9675 NULL, HFILL }
9677 { &hf_r3_dumpm41t81_reg09_notused,
9678 { "(not used)", "r3.m41t81.reg09.notused",
9679 FT_UINT8, BASE_DEC, NULL, 0x0,
9680 NULL, HFILL }
9682 { &hf_r3_dumpm41t81_reg09_bmb,
9683 { "BMB", "r3.m41t81.reg09.bmb",
9684 FT_UINT8, BASE_DEC, NULL, 0x0,
9685 NULL, HFILL }
9687 { &hf_r3_dumpm41t81_reg09_rb,
9688 { "RB", "r3.m41t81.reg09.rb",
9689 FT_UINT8, BASE_DEC, NULL, 0x0,
9690 NULL, HFILL }
9692 { &hf_r3_dumpm41t81_reg0a_afe,
9693 { "AFE", "r3.m41t81.reg0a.afe",
9694 FT_UINT8, BASE_DEC, NULL, 0x0,
9695 NULL, HFILL }
9697 { &hf_r3_dumpm41t81_reg0a_sqwe,
9698 { "SQWE", "r3.m41t81.reg0a.sqwe",
9699 FT_UINT8, BASE_DEC, NULL, 0x0,
9700 NULL, HFILL }
9702 { &hf_r3_dumpm41t81_reg0a_abe,
9703 { "ABE", "r3.m41t81.reg0a.abe",
9704 FT_UINT8, BASE_DEC, NULL, 0x0,
9705 NULL, HFILL }
9707 { &hf_r3_dumpm41t81_reg0a_10monthalm,
9708 { "10 Month Alarm", "r3.m41t81.reg0a.10monthalm",
9709 FT_UINT8, BASE_DEC, NULL, 0x0,
9710 NULL, HFILL }
9712 { &hf_r3_dumpm41t81_reg0a_1monthalm,
9713 { "1 Month Alarm", "r3.m41t81.reg0a.1monthalm",
9714 FT_UINT8, BASE_DEC, NULL, 0x0,
9715 NULL, HFILL }
9717 { &hf_r3_dumpm41t81_reg0b_rpt5,
9718 { "RPT5", "r3.m41t81.reg0b.rpt5",
9719 FT_UINT8, BASE_DEC, NULL, 0x0,
9720 NULL, HFILL }
9722 { &hf_r3_dumpm41t81_reg0b_rpt4,
9723 { "RPT4", "r3.m41t81.reg0b.rpt4",
9724 FT_UINT8, BASE_DEC, NULL, 0x0,
9725 NULL, HFILL }
9727 { &hf_r3_dumpm41t81_reg0b_10dayalm,
9728 { "10 Day Alarm", "r3.m41t81.reg0b.10dayalm",
9729 FT_UINT8, BASE_DEC, NULL, 0x0,
9730 NULL, HFILL }
9732 { &hf_r3_dumpm41t81_reg0b_1dayalm,
9733 { "1 Day Alarm", "r3.m41t81.reg0b.1dayalm",
9734 FT_UINT8, BASE_DEC, NULL, 0x0,
9735 NULL, HFILL }
9737 { &hf_r3_dumpm41t81_reg0c_rpt3,
9738 { "RPT3", "r3.m41t81.reg0c.rpt3",
9739 FT_UINT8, BASE_DEC, NULL, 0x0,
9740 NULL, HFILL }
9742 { &hf_r3_dumpm41t81_reg0c_ht,
9743 { "HT", "r3.m41t81.reg0c.ht",
9744 FT_UINT8, BASE_DEC, NULL, 0x0,
9745 NULL, HFILL }
9747 { &hf_r3_dumpm41t81_reg0c_10houralm,
9748 { "10 Hour Alarm", "r3.m41t81.reg0c.10houralm",
9749 FT_UINT8, BASE_DEC, NULL, 0x0,
9750 NULL, HFILL }
9752 { &hf_r3_dumpm41t81_reg0c_1houralm,
9753 { "1 Hour Alarm", "r3.m41t81.reg0c.1houralm",
9754 FT_UINT8, BASE_DEC, NULL, 0x0,
9755 NULL, HFILL }
9757 { &hf_r3_dumpm41t81_reg0d_rpt2,
9758 { "RPT2", "r3.m41t81.reg0d.rpt2",
9759 FT_UINT8, BASE_DEC, NULL, 0x0,
9760 NULL, HFILL }
9762 { &hf_r3_dumpm41t81_reg0d_10minalm,
9763 { "10 Min Alarm", "r3.m41t81.reg0d.10minalm",
9764 FT_UINT8, BASE_DEC, NULL, 0x0,
9765 NULL, HFILL }
9767 { &hf_r3_dumpm41t81_reg0d_1minalm,
9768 { "1 Min Alarm", "r3.m41t81.reg0d.1minalm",
9769 FT_UINT8, BASE_DEC, NULL, 0x0,
9770 NULL, HFILL }
9772 { &hf_r3_dumpm41t81_reg0e_rpt1,
9773 { "RPT1", "r3.m41t81.reg0e.rpt1",
9774 FT_UINT8, BASE_DEC, NULL, 0x0,
9775 NULL, HFILL }
9777 { &hf_r3_dumpm41t81_reg0e_10secalm,
9778 { "10 Sec Alarm", "r3.m41t81.reg0e.10secalm",
9779 FT_UINT8, BASE_DEC, NULL, 0x0,
9780 NULL, HFILL }
9782 { &hf_r3_dumpm41t81_reg0e_1secalm,
9783 { "1 Sec Alarm", "r3.m41t81.reg0e.1secalm",
9784 FT_UINT8, BASE_DEC, NULL, 0x0,
9785 NULL, HFILL }
9787 { &hf_r3_dumpm41t81_reg0f_wdf,
9788 { "WDF", "r3.m41t81.reg0f.wdf",
9789 FT_UINT8, BASE_DEC, NULL, 0x0,
9790 NULL, HFILL }
9792 { &hf_r3_dumpm41t81_reg0f_af,
9793 { "AF", "r3.m41t81.reg0f.af",
9794 FT_UINT8, BASE_DEC, NULL, 0x0,
9795 NULL, HFILL }
9797 { &hf_r3_dumpm41t81_reg0f_notused,
9798 { "(not used)", "r3.m41t81.reg0f.notused",
9799 FT_UINT8, BASE_DEC, NULL, 0x0,
9800 NULL, HFILL }
9802 { &hf_r3_dumpm41t81_reg10_notused,
9803 { "(not used)", "r3.m41t81.reg10.notused",
9804 FT_UINT8, BASE_DEC, NULL, 0x0,
9805 NULL, HFILL }
9807 { &hf_r3_dumpm41t81_reg11_notused,
9808 { "(not used)", "r3.m41t81.reg11.notused",
9809 FT_UINT8, BASE_DEC, NULL, 0x0,
9810 NULL, HFILL }
9812 { &hf_r3_dumpm41t81_reg12_notused,
9813 { "(not used)", "r3.m41t81.reg12.notused",
9814 FT_UINT8, BASE_DEC, NULL, 0x0,
9815 NULL, HFILL }
9817 { &hf_r3_dumpm41t81_reg13_rs,
9818 { "RS", "r3.m41t81.reg13.rs",
9819 FT_UINT8, BASE_DEC, NULL, 0x0,
9820 NULL, HFILL }
9822 { &hf_r3_dumpm41t81_reg13_notused,
9823 { "(not used)", "r3.m41t81.reg13.notused",
9824 FT_UINT8, BASE_DEC, NULL, 0x0,
9825 NULL, HFILL }
9827 { &hf_r3_sn_manufacturer,
9828 { "Manufacturer", "r3.sn.manufacturer",
9829 FT_STRING, BASE_NONE, NULL, 0x0,
9830 NULL, HFILL }
9832 { &hf_r3_sn_year,
9833 { "Year", "r3.sn.year",
9834 FT_STRING, BASE_NONE, NULL, 0x0,
9835 NULL, HFILL }
9837 { &hf_r3_sn_week,
9838 { "Week", "r3.sn.week",
9839 FT_STRING, BASE_NONE, NULL, 0x0,
9840 NULL, HFILL }
9842 { &hf_r3_sn_model,
9843 { "Model", "r3.sn.model",
9844 FT_STRING, BASE_NONE, NULL, 0x0,
9845 NULL, HFILL }
9847 { &hf_r3_sn_sequence,
9848 { "Sequence", "r3.sn.sequence",
9849 FT_STRING, BASE_NONE, NULL, 0x0,
9850 NULL, HFILL }
9852 { &hf_r3_sn_group,
9853 { "Group", "r3.sn.group",
9854 FT_STRING, BASE_NONE, NULL, 0x0,
9855 NULL, HFILL }
9857 { &hf_r3_sn_nid,
9858 { "NID", "r3.sn.nid",
9859 FT_STRING, BASE_NONE, NULL, 0x0,
9860 NULL, HFILL }
9862 { &hf_r3_sn_hid,
9863 { "HID", "r3.sn.hid",
9864 FT_STRING, BASE_NONE, NULL, 0x0,
9865 NULL, HFILL }
9867 { &hf_r3_sn_power_supply,
9868 { "Power Supply", "r3.sn.power_supply",
9869 FT_STRING, BASE_NONE, NULL, 0x0,
9870 NULL, HFILL }
9872 { &hf_r3_sn_mortise,
9873 { "Mortise", "r3.sn.mortise",
9874 FT_STRING, BASE_NONE, NULL, 0x0,
9875 NULL, HFILL }
9877 { &hf_r3_debuglog_recordnumber,
9878 { "Record Number", "r3.debuglog.recordnumber",
9879 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9880 NULL, HFILL }
9882 { &hf_r3_debuglog_flags,
9883 { "Flags", "r3.debuglog.flags",
9884 FT_UINT32, BASE_HEX, NULL, 0x0,
9885 NULL, HFILL }
9887 { &hf_r3_debuglog_tick,
9888 { "Tick", "r3.debuglog.tick",
9889 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9890 NULL, HFILL }
9893 { &hf_r3_adduserparamtype,
9894 { "Upstream Field", "r3.manageuser",
9895 FT_NONE, BASE_NONE, NULL, 0x0,
9896 NULL, HFILL }
9898 { &hf_r3_adduserparamtypelength,
9899 { "Field Length", "r3.manageuser.length",
9900 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9901 NULL, HFILL }
9903 { &hf_r3_adduserparamtypetype,
9904 { "Field Type", "r3.manageuser.type",
9905 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_adduserparamtypenames_ext, 0x0,
9906 NULL, HFILL }
9908 #if 0
9909 { &hf_r3_adduserparamtypedatalen,
9910 { "Data Length", "r3.manageuser.datalen",
9911 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9912 NULL, HFILL }
9914 { &hf_r3_adduserparamtypeerror,
9915 { "Error", "r3.manageuser.error",
9916 FT_STRING, BASE_NONE, NULL, 0x0,
9917 NULL, HFILL }
9919 #endif
9920 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_DISPOSITION],
9921 { "Disposition", "r3.manageuser.disposition",
9922 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_dispositionnames_ext, 0x0,
9923 NULL, HFILL }
9925 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERNO],
9926 { "User Number", "r3.manageuser.usernumber",
9927 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9928 NULL, HFILL }
9930 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSALWAYS],
9931 { "Access Always", "r3.manageuser.accessalways",
9932 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9933 NULL, HFILL }
9935 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSMODE],
9936 { "Access Mode", "r3.manageuser.accessmode",
9937 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
9938 NULL, HFILL }
9940 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_CACHED],
9941 { "Cached", "r3.manageuser.cached",
9942 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9943 NULL, HFILL }
9945 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERTYPE],
9946 { "User Type", "r3.manageuser.usertype",
9947 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
9948 NULL, HFILL }
9950 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELD],
9951 { "Primary Field", "r3.manageuser.primaryfield",
9952 FT_BYTES, BASE_NONE, NULL, 0x0,
9953 NULL, HFILL }
9955 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELDTYPE],
9956 { "Primary Field Type", "r3.manageuser.primaryfieldtype",
9957 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9958 NULL, HFILL }
9960 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELD],
9961 { "Aux Field", "r3.manageuser.auxfield",
9962 FT_BYTES, BASE_NONE, NULL, 0x0,
9963 NULL, HFILL }
9965 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELDTYPE],
9966 { "Aux Field Type", "r3.manageuser.auxfieldtype",
9967 FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9968 NULL, HFILL }
9970 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USECOUNT],
9971 { "Use Count", "r3.manageuser.usecount",
9972 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9973 NULL, HFILL }
9975 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXCEPTIONGROUP],
9976 { "Exception Group", "r3.manageuser.exceptiongroup",
9977 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9978 NULL, HFILL }
9980 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXPIREON],
9981 { "Expire On", "r3.manageuser.expireon",
9982 FT_UINT24, BASE_HEX, NULL, 0x0,
9983 NULL, HFILL }
9985 { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_TIMEZONE],
9986 { "Timezone", "r3.manageuser.timezone",
9987 FT_UINT32, BASE_HEX, NULL, 0x0,
9988 NULL, HFILL }
9992 /* Setup protocol subtree array */
9993 static int *ett [] =
9995 &ett_r3,
9996 &ett_r3header,
9997 &ett_r3tail,
9998 &ett_r3payload,
9999 &ett_r3cmd,
10000 &ett_r3configitem,
10001 &ett_r3upstreamcommand,
10002 &ett_r3upstreamfield,
10003 &ett_r3timezone,
10004 &ett_r3expireon,
10005 &ett_r3datetime,
10006 &ett_r3eventlogrecord,
10007 &ett_r3declinedlogrecord,
10008 &ett_r3alarmlogrecord,
10009 &ett_r3debugmsg,
10010 &ett_r3defineexceptionstartdate,
10011 &ett_r3defineexceptionenddate,
10012 &ett_r3defineexceptiongroupbits,
10013 &ett_r3definecalendarmonth [1],
10014 &ett_r3definecalendarmonth [2],
10015 &ett_r3definecalendarmonth [3],
10016 &ett_r3definecalendarmonth [4],
10017 &ett_r3definecalendarmonth [5],
10018 &ett_r3definecalendarmonth [6],
10019 &ett_r3definecalendarmonth [7],
10020 &ett_r3definecalendarmonth [8],
10021 &ett_r3definecalendarmonth [9],
10022 &ett_r3definecalendarmonth [10],
10023 &ett_r3definecalendarmonth [11],
10024 &ett_r3definecalendarmonth [12],
10025 &ett_r3definetimezonestarttime,
10026 &ett_r3definetimezoneendtime,
10027 &ett_r3definetimezonedaymap,
10028 &ett_r3eventlogdumpstarttime,
10029 &ett_r3eventlogdumpendtime,
10030 &ett_r3declinedlogdumpstarttime,
10031 &ett_r3declinedlogdumpendtime,
10032 &ett_r3alarmlogdumpstarttime,
10033 &ett_r3alarmlogdumpendtime,
10034 &ett_r3clearnvram,
10035 &ett_r3filters,
10036 &ett_r3alarmlist,
10037 &ett_r3alarmcfg,
10038 &ett_r3commandmfg,
10039 &ett_r3serialnumber,
10040 &ett_r3iopins,
10041 &ett_r3checksumresults,
10042 &ett_r3checksumresultsfield,
10043 &ett_r3forceoptions,
10044 &ett_r3peekpoke,
10045 &ett_r3downloadfirmware,
10046 &ett_r3capabilities,
10047 &ett_r3lockstate,
10048 &ett_r3mortisestatelog,
10049 &ett_r3timerchain,
10050 &ett_r3taskflags,
10051 &ett_r3taskflagsentry,
10052 &ett_r3checkpointlog,
10053 &ett_r3checkpointlogentry,
10054 &ett_r3cpuregisters,
10055 &ett_r3cpuregister,
10056 &ett_r3m41t81registers,
10057 &ett_r3m41t81register,
10058 &ett_r3debuglogrecord,
10059 &ett_r3setdatetime,
10060 &ett_r3manageuser
10063 static ei_register_info ei[] = {
10064 { &ei_r3_malformed_length, { "r3.malformed_length", PI_MALFORMED, PI_ERROR, "Malformed length", EXPFILL }},
10065 { &ei_r3_reserved_upstream_command_value, { "r3.reserved_upstream_command_value", PI_UNDECODED, PI_WARN, "\"Reserved\" Upstream Command value", EXPFILL }},
10066 { &ei_r3_mfgfield, { "r3.mfgfield.field.unknown", PI_UNDECODED, PI_WARN, "Unknown manufacturing command value", EXPFILL }},
10067 { &ei_r3_mfgfield_too_many_adc_values, { "r3.mfgfield.too_many_adc_values", PI_PROTOCOL, PI_WARN, "MFG Field: too many adc values", EXPFILL }},
10068 { &ei_r3_peekpoke_operation, { "r3.peekpoke.operation.unknown", PI_UNDECODED, PI_WARN, "Unknown peekpoke operation value", EXPFILL }},
10069 { &ei_r3_response_hasdata_octet_1, { "r3.response_hasdata.octet_1_not_cmd_response", PI_PROTOCOL, PI_WARN, "Octet 1 not CMD_RESPONSE", EXPFILL }},
10070 { &ei_r3_response_hasdata_octet_2, { "r3.response_hasdata.octet_2_not_response_hasdata", PI_PROTOCOL, PI_WARN, "Octet 2 not RESPONSE_HASDATA", EXPFILL }},
10071 { &ei_r3_response_hasdata_octet_3, { "r3.response_hasdata.octet_3_ge_upstreamcommand_last", PI_PROTOCOL, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST", EXPFILL }},
10072 { &ei_r3_firmwaredownload_action, { "r3.firmwaredownload.action.unknown", PI_PROTOCOL, PI_WARN, "Unknown Firmware download action", EXPFILL }},
10073 { &ei_r3_cmd_downloadfirmwaretimeout, { "r3.command.downloadfirmwaretimeout", PI_UNDECODED, PI_WARN, "Download Firmware Timeout", EXPFILL }},
10074 { &ei_r3_unknown_command_value, { "r3.command.unknown", PI_UNDECODED, PI_WARN, "Unknown command value", EXPFILL }},
10077 expert_module_t* expert_r3;
10079 proto_r3 = proto_register_protocol ("Assa Abloy R3", "R3", "r3");
10080 r3_handle = register_dissector ("r3", dissect_r3, proto_r3);
10081 proto_register_field_array (proto_r3, hf, array_length (hf));
10082 proto_register_subtree_array (ett, array_length (ett));
10083 expert_r3 = expert_register_protocol(proto_r3);
10084 expert_register_field_array(expert_r3, ei, array_length(ei));
10087 void proto_reg_handoff_r3 (void)
10089 dissector_add_uint_range_with_preference("tcp.port", ASSA_R3_PORT_RANGE, r3_handle);
10093 * Editor modelines - https://www.wireshark.org/tools/modelines.html
10095 * Local Variables:
10096 * c-basic-offset: 2
10097 * tab-width: 8
10098 * indent-tabs-mode: nil
10099 * End:
10101 * vi: set shiftwidth=2 tabstop=8 expandtab:
10102 * :indentSize=2:tabSize=8:noTabs=true: