Coverage Report

Created: 2026-07-12 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-assa_r3.c
Line
Count
Source
1
/* packet-assa_r3.c
2
 * Routines for R3 packet dissection
3
 * Copyright (c) 2009 Assa Abloy USA <jcwren[AT]assaabloyusa.com>
4
 *
5
 * R3 is an electronic lock management protocol for configuring operational
6
 *  parameters, adding/removing/altering users, dumping log files, etc.
7
 *
8
 * Wireshark - Network traffic analyzer
9
 * By Gerald Combs <gerald@wireshark.org>
10
 * Copyright 1998 Gerald Combs
11
 *
12
 * SPDX-License-Identifier: GPL-2.0-or-later
13
 */
14
15
#include "config.h"
16
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"
22
23
void proto_register_r3(void);
24
void proto_reg_handoff_r3(void);
25
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
38
39
/*
40
 *  Enumerations
41
 */
42
typedef enum
43
{
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 */
50
}
51
accessMode_e;
52
53
typedef enum
54
{
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
70
}
71
addUserParamType_e;
72
73
typedef enum
74
{
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
86
}
87
alarmID_e;
88
89
typedef enum
90
{
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
100
}
101
capabilities_e;
102
103
typedef enum
104
{
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
113
}
114
checksumResult_e;
115
116
typedef enum
117
{
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
151
}
152
cmdCommand_e;
153
154
typedef enum
155
{
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 LRU 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
192
}
193
cmdMfgCommand_e;
194
195
typedef enum
196
{
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) */
202
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) */
218
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 */
224
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 */
235
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 */
252
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) */
260
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) */
268
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) */
276
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 */
288
289
  CONFIGITEM_PANIC_MODE,                  /*   83 - Enable/disable panic mode */
290
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 */
294
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 */
313
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) */
316
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 */
324
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 */
335
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 */
343
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 */
354
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 */
359
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) */
364
365
  CONFIGITEM_DPACDEBUG,                   /*  149 - Enable DPAC debug events to event log */
366
  CONFIGITEM_FAILOPENSECURE,              /*  150 - Fail open (false) or secure (true) on battery dead */
367
368
  CONFIGITEM_REPLACED_VOLTAGE,            /*  151 - If battery above this voltage, it's been replaced */
369
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 */
372
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) */
375
376
  CONFIGITEM_PFMRETURNTIME,               /*  156 - Number of seconds power must be present to exit power fail death loop */
377
378
  CONFIGITEM_LAST                          /*  Must be last item defined (All non-virtual items added above) */
379
380
#if 0 /* XXX: unused ? */
381
  ,
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
391
}
392
configItem_e;
393
394
typedef enum
395
{
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
399
}
400
deleteUsers_e;
401
402
typedef enum
403
{
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
410
}
411
disposition_e;
412
413
#if 0
414
typedef enum
415
{
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
422
}
423
doorState_e;
424
#endif
425
426
#if 0
427
typedef enum
428
{
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
435
}
436
dstMode_e;
437
#endif
438
439
typedef enum
440
{
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
447
}
448
encryptionScheme_e;
449
450
typedef enum
451
{
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 */
526
  /*
527
   * These are all internal debugging events.  Real events should go before these.
528
   */
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 */
533
}
534
event_e;
535
536
typedef enum
537
{
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
543
}
544
fieldType_e;
545
546
#if 0
547
typedef enum
548
{
549
  FILTERMODE_NORMAL = 0,  /* 0 - Filters events specified */
550
  FILTERMODE_INVERT,      /* 1 - Filters events not specified */
551
  FILTERMODE_LAST
552
}
553
filterMode_e;
554
#endif
555
556
typedef enum
557
{
558
  FILTERSELECT_RECORDING = 0,   /* 0 - Recording filters */
559
  FILTERSELECT_REPORTING,       /* 1 - Reporting filters */
560
  FILTERSELECT_LAST
561
}
562
filterSelect_e;
563
564
565
/* XXX: enum vals don't all match vals in comments ??? */
566
typedef enum
567
{
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
592
}
593
forceItem_e;
594
595
typedef enum
596
{
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
603
}
604
fromDevice_e;
605
606
#if 0
607
typedef enum
608
{
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 */
626
627
  HARDWAREOPTIONS_RADIO        = (HARDWAREOPTIONS_WIFI),
628
629
  HARDWAREOPTIONS_LAST         = 0xffff    /* Place holder, don't use */
630
}
631
hardwareOptions_e;
632
#endif
633
634
#if 0
635
typedef enum
636
{
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
653
}
654
localLED_e;
655
#endif
656
657
#if 0
658
typedef enum
659
{
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
664
}
665
lockPriority_e;
666
#endif
667
668
#if 0
669
typedef enum
670
{
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
677
}
678
lockType_e;
679
#endif
680
681
typedef enum
682
{
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
702
}
703
mfgField_e;
704
705
typedef enum
706
{
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
727
}
728
mortiseType_e;
729
730
#if 0
731
typedef enum
732
{
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) */
751
}
752
nvramClearOptions_e;
753
#endif
754
755
#if 0
756
typedef enum
757
{
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
762
}
763
nvramCommand_e;
764
#endif
765
766
#if 0
767
typedef enum
768
{
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
774
}
775
nvramDumpSelect_e;
776
#endif
777
778
typedef enum
779
{
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
791
}
792
peekPoke_e;
793
794
typedef enum
795
{
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
801
}
802
ppmiSource_e;
803
804
#if 0
805
typedef enum
806
{
807
  RADIOMODE_HOSTINITIATED = 0,  /* 0 - DPAC in listen mode (default) */
808
  RADIOMODE_LOCKINITIATED,      /* 1 - DPAC in pass-through mode */
809
  RADIOMODE_LAST
810
}
811
radioMode_e;
812
#endif
813
814
#if 0
815
typedef enum
816
{
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
822
}
823
radioType_e;
824
#endif
825
826
typedef enum
827
{
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
881
  ,
882
  /*
883
   *  These should not be exposed to the user
884
   */
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
891
}
892
responseType_e;
893
894
#if 0
895
typedef enum
896
{
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
905
}
906
schedulerType_e;
907
#endif
908
909
typedef enum
910
{
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
917
}
918
timeZoneMode_e;
919
920
#if 0
921
typedef enum
922
{
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
927
}
928
unlockMode_e;
929
#endif
930
931
/* XXX: enum vals don't all match vals in comments ??? */
932
typedef enum
933
{
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
961
}
962
upstreamCommand_e;
963
964
/* XXX: enum vals don't all match vals in comments ??? */
965
typedef enum
966
{
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
998
}
999
upstreamField_e;
1000
1001
typedef enum
1002
{
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
1018
}
1019
userType_e;
1020
1021
1022
15
#define ASSA_R3_PORT_RANGE "2571,8023" /* Neither are IANA registered */
1023
1024
/*
1025
 *  Wireshark ID of the R3 protocol
1026
 */
1027
static int proto_r3;
1028
1029
/*
1030
 *  Packet variables
1031
 */
1032
static int hf_r3_tildex3ds;           /* Got ~~~ds */
1033
1034
static int hf_r3_header;              /* Packet header */
1035
static int hf_r3_payload;             /* Packet payload */
1036
static int hf_r3_tail;                /* Packet tail */
1037
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) */
1047
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) */
1051
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) */
1055
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) */
1061
1062
static int hf_r3_upstreamcommand;
1063
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];
1070
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;
1082
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;
1115
1116
static int hf_r3_expireon_year;
1117
static int hf_r3_expireon_month;
1118
static int hf_r3_expireon_day;
1119
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;
1128
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;
1138
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;
1151
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;
1161
1162
static int hf_r3_debugmsg;
1163
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;
1171
1172
static int hf_r3_deleteusers;
1173
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;
1183
1184
static int hf_r3_defineexceptiongroup_number;
1185
static int hf_r3_defineexceptiongroup_bits;
1186
1187
static int hf_r3_definecalendar_number;
1188
static int hf_r3_definecalendar_bits;
1189
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;
1206
1207
static int hf_r3_rmtauthretry_sequence;
1208
static int hf_r3_rmtauthretry_retry;
1209
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;
1221
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;
1232
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;
1243
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;
1261
1262
static int hf_r3_writeeventlog_user;
1263
static int hf_r3_writeeventlog_event;
1264
1265
static int hf_r3_powertableselection;
1266
1267
static int hf_r3_filter_type;
1268
static int hf_r3_filter_list;
1269
1270
static int hf_r3_alarm_length;
1271
static int hf_r3_alarm_id;
1272
static int hf_r3_alarm_state;
1273
1274
static int hf_r3_dpac_action;
1275
static int hf_r3_dpac_waittime;
1276
static int hf_r3_dpac_command;
1277
1278
static int hf_r3_dpacreply_stuff;
1279
static int hf_r3_dpacreply_length;
1280
static int hf_r3_dpacreply_reply;
1281
1282
static int hf_r3_mfgfield_length;
1283
static int hf_r3_mfgfield;
1284
/*static int hf_r3_mfgfield_data;*/
1285
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;
1291
1292
static int hf_r3_adc [8];
1293
1294
static int hf_r3_hardwareid_board;
1295
static int hf_r3_hardwareid_cpuid;
1296
static int hf_r3_hardwareid_cpurev;
1297
1298
static int hf_r3_testkeypad;
1299
static int hf_r3_testmagcard;
1300
static int hf_r3_testproxcard;
1301
1302
static int hf_r3_nvramdump_record;
1303
static int hf_r3_nvramdump_length;
1304
static int hf_r3_nvramdump_data;
1305
1306
static int hf_r3_nvramdumprle_record;
1307
static int hf_r3_nvramdumprle_length;
1308
static int hf_r3_nvramdumprle_data;
1309
1310
static int hf_r3_iopins_lat;
1311
static int hf_r3_iopins_port;
1312
static int hf_r3_iopins_tris;
1313
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;
1318
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;
1323
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;
1330
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;
1339
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;
1350
1351
static int hf_r3_nvramchecksumvalue;
1352
static int hf_r3_nvramchecksumvalue_fixup;
1353
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;
1358
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;
1382
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;
1390
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;
1399
1400
static int hf_r3_taskflags_taskid;
1401
static int hf_r3_taskflags_flags;
1402
1403
static int hf_r3_checkpointlog_entryptr;
1404
static int hf_r3_checkpointlog_rcon;
1405
static int hf_r3_checkpointlog_checkpoint;
1406
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;
1426
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;
1579
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;
1600
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;
1657
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;
1668
1669
static int hf_r3_debuglog_recordnumber;
1670
static int hf_r3_debuglog_flags;
1671
static int hf_r3_debuglog_tick;
1672
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];
1679
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;
1735
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;
1747
1748
static dissector_handle_t r3_handle;
1749
1750
/*
1751
 *  Indicates next command to be processed as a manufacturing command
1752
 */
1753
static int mfgCommandFlag;
1754
1755
/*
1756
 *  Some enums that don't exist in public.h and should
1757
 */
1758
typedef enum
1759
{
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
1819
}
1820
checkPoint_e;
1821
1822
typedef enum
1823
{
1824
  CONFIGTYPE_NONE = 0,
1825
  CONFIGTYPE_BOOL,
1826
  CONFIGTYPE_8,
1827
  CONFIGTYPE_16,
1828
  CONFIGTYPE_32,
1829
  CONFIGTYPE_STRING,
1830
  CONFIGTYPE_LAST
1831
}
1832
configType_e;
1833
1834
typedef enum
1835
{
1836
  DOWNLOADFIRMWARE_START = 0,
1837
  DOWNLOADFIRMWARE_DATA,
1838
  DOWNLOADFIRMWARE_COMPLETE,
1839
  DOWNLOADFIRMWARE_ABORT,
1840
  DOWNLOADFIRMWARE_RESET,
1841
  DOWNLOADFIRMWARE_LAST
1842
}
1843
downloadFirmware_e;
1844
1845
typedef enum
1846
{
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
1861
}
1862
mortiseEvent_e;
1863
1864
/*
1865
 *  Print things with nice textual names
1866
 */
1867
static const value_string r3_accessmodenames [] =
1868
{
1869
  { ACCESSMODE_NONE,            "ACCESSMODE_NONE" },
1870
  { ACCESSMODE_PRIMARYONLY,     "ACCESSMODE_PRIMARYONLY" },
1871
  { ACCESSMODE_PRIMARYORAUX,    "ACCESSMODE_PRIMARYORAUX" },
1872
  { ACCESSMODE_PRIMARYANDAUX,   "ACCESSMODE_PRIMARYANDAUX" },
1873
  { ACCESSMODE_PRIMARYTHENAUX,  "ACCESSMODE_PRIMARYTHENAUX" },
1874
  { 0,                          NULL }
1875
};
1876
static value_string_ext r3_accessmodenames_ext = VALUE_STRING_EXT_INIT(r3_accessmodenames);
1877
1878
static const value_string r3_adduserparamtypenames [] =
1879
{
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 }
1895
};
1896
static value_string_ext r3_adduserparamtypenames_ext = VALUE_STRING_EXT_INIT(r3_adduserparamtypenames);
1897
1898
static const value_string r3_alarmidnames [] =
1899
{
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 }
1911
};
1912
static value_string_ext r3_alarmidnames_ext = VALUE_STRING_EXT_INIT(r3_alarmidnames);
1913
1914
static const value_string r3_capabilitiesnames [] =
1915
{
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 }
1925
};
1926
static value_string_ext r3_capabilitiesnames_ext = VALUE_STRING_EXT_INIT(r3_capabilitiesnames);
1927
1928
static const value_string r3_checkpointnames [] =
1929
{
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 }
1989
};
1990
static value_string_ext r3_checkpointnames_ext = VALUE_STRING_EXT_INIT(r3_checkpointnames);
1991
1992
static const value_string r3_checksumresultnames [] =
1993
{
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 }
2002
};
2003
static value_string_ext r3_checksumresultnames_ext = VALUE_STRING_EXT_INIT(r3_checksumresultnames);
2004
2005
static const value_string r3_cmdnames [] =
2006
{
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 }
2040
};
2041
static value_string_ext r3_cmdnames_ext = VALUE_STRING_EXT_INIT(r3_cmdnames);
2042
2043
static const value_string r3_cmdmfgnames [] =
2044
{
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 }
2081
};
2082
static value_string_ext r3_cmdmfgnames_ext = VALUE_STRING_EXT_INIT(r3_cmdmfgnames);
2083
2084
static const value_string r3_configitemnames [] =
2085
{
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 }
2244
};
2245
static value_string_ext r3_configitemnames_ext = VALUE_STRING_EXT_INIT(r3_configitemnames);
2246
2247
static const value_string r3_configtypenames [] =
2248
{
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 }
2256
};
2257
static value_string_ext r3_configtypenames_ext = VALUE_STRING_EXT_INIT(r3_configtypenames);
2258
2259
static const value_string r3_dispositionnames [] =
2260
{
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 }
2267
};
2268
static value_string_ext r3_dispositionnames_ext = VALUE_STRING_EXT_INIT(r3_dispositionnames);
2269
2270
static const value_string r3_deleteusersnames [] =
2271
{
2272
  { DELETEUSERS_ALL,    "DELETEUSERS_ALL" },
2273
  { DELETEUSERS_CACHED, "DELETEUSERS_CACHED" },
2274
  { 0,                  NULL }
2275
};
2276
static value_string_ext r3_deleteusersnames_ext = VALUE_STRING_EXT_INIT(r3_deleteusersnames);
2277
2278
static const value_string r3_downloadfirmwarenames [] =
2279
{
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 }
2286
};
2287
static value_string_ext r3_downloadfirmwarenames_ext = VALUE_STRING_EXT_INIT(r3_downloadfirmwarenames);
2288
2289
static const value_string r3_encryptionschemenames [] =
2290
{
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 }
2297
};
2298
static value_string_ext r3_encryptionschemenames_ext = VALUE_STRING_EXT_INIT(r3_encryptionschemenames);
2299
2300
static const value_string r3_eventnames [] =
2301
{
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 }
2380
};
2381
static value_string_ext r3_eventnames_ext = VALUE_STRING_EXT_INIT(r3_eventnames);
2382
2383
static const value_string r3_fieldtypenames [] =
2384
{
2385
  { FIELDTYPE_NONE,     "FIELDTYPE_NONE" },
2386
  { FIELDTYPE_PIN,      "FIELDTYPE_PIN" },
2387
  { FIELDTYPE_PROX,     "FIELDTYPE_PROX" },
2388
  { FIELDTYPE_MAGCARD,  "FIELDTYPE_MAGCARD" },
2389
  { 0,                  NULL }
2390
};
2391
static value_string_ext r3_fieldtypenames_ext = VALUE_STRING_EXT_INIT(r3_fieldtypenames);
2392
2393
static const value_string r3_filtereventnames [] =
2394
{
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 }
2475
};
2476
static value_string_ext r3_filtereventnames_ext = VALUE_STRING_EXT_INIT(r3_filtereventnames);
2477
2478
static const value_string r3_filtertypenames [] =
2479
{
2480
  { FILTERSELECT_RECORDING, "FILTERSELECT_RECORDING" },
2481
  { FILTERSELECT_REPORTING, "FILTERSELECT_REPORTING" },
2482
  { 0,                      NULL }
2483
};
2484
static value_string_ext r3_filtertypenames_ext = VALUE_STRING_EXT_INIT(r3_filtertypenames);
2485
2486
static const value_string r3_forceitemnames [] =
2487
{
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 }
2510
};
2511
static value_string_ext r3_forceitemnames_ext = VALUE_STRING_EXT_INIT(r3_forceitemnames);
2512
2513
static const value_string r3_mfgfieldnames [] =
2514
{
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 }
2534
};
2535
static value_string_ext r3_mfgfieldnames_ext = VALUE_STRING_EXT_INIT(r3_mfgfieldnames);
2536
2537
static const value_string r3_mortiseeventnames [] =
2538
{
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 }
2554
};
2555
static value_string_ext r3_mortiseeventnames_ext = VALUE_STRING_EXT_INIT(r3_mortiseeventnames);
2556
2557
static const value_string r3_mortisetypenames [] =
2558
{
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 }
2579
};
2580
static value_string_ext r3_mortisetypenames_ext = VALUE_STRING_EXT_INIT(r3_mortisetypenames);
2581
2582
static const value_string r3_peekpokenames [] =
2583
{
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 }
2595
};
2596
static value_string_ext r3_peekpokenames_ext = VALUE_STRING_EXT_INIT(r3_peekpokenames);
2597
2598
static const value_string r3_ppmisourcenames [] =
2599
{
2600
  { PPMISOURCE_NONE,    "PPMISOURCE_NONE" },
2601
  { PPMISOURCE_PIN,     "PPMISOURCE_PIN" },
2602
  { PPMISOURCE_PROX,    "PPMISOURCE_PROX" },
2603
  { PPMISOURCE_MAGCARD, "PPMISOURCE_MAGCARD" },
2604
  { 0,                  NULL }
2605
};
2606
static value_string_ext r3_ppmisourcenames_ext = VALUE_STRING_EXT_INIT(r3_ppmisourcenames);
2607
2608
static const value_string r3_responsetypenames [] =
2609
{
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 }
2662
};
2663
static value_string_ext r3_responsetypenames_ext = VALUE_STRING_EXT_INIT(r3_responsetypenames);
2664
2665
static const value_string r3_timezonemodenames [] =
2666
{
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 }
2673
};
2674
static value_string_ext r3_timezonemodenames_ext = VALUE_STRING_EXT_INIT(r3_timezonemodenames);
2675
2676
static const value_string r3_upstreamcommandnames [] =
2677
{
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 }
2705
};
2706
static value_string_ext r3_upstreamcommandnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamcommandnames);
2707
2708
static const value_string r3_upstreamfieldnames [] =
2709
{
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 }
2741
};
2742
static value_string_ext r3_upstreamfieldnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamfieldnames);
2743
2744
static const value_string r3_usertypenames [] =
2745
{
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 }
2761
};
2762
static value_string_ext r3_usertypenames_ext = VALUE_STRING_EXT_INIT(r3_usertypenames);
2763
2764
static const value_string r3_mfgnvramdumpnames [] =
2765
{
2766
  {  0, "All" },
2767
  {  1, "PIC" },
2768
  {  2, "User" },
2769
  {  3, "Event" },
2770
  {  0, NULL }
2771
};
2772
static value_string_ext r3_mfgnvramdumpnames_ext = VALUE_STRING_EXT_INIT(r3_mfgnvramdumpnames);
2773
2774
static const value_string r3_mfgremoteunlocknames [] =
2775
{
2776
  {  0, "Normal" },
2777
  {  1, "Unlock" },
2778
  {  2, "Lock" },
2779
  {  0, NULL }
2780
};
2781
static value_string_ext r3_mfgremoteunlocknames_ext = VALUE_STRING_EXT_INIT(r3_mfgremoteunlocknames);
2782
2783
static const value_string r3_mfgtestpreservenames [] =
2784
{
2785
  {  0, "Save" },
2786
  {  1, "Restore" },
2787
  {  0, NULL }
2788
};
2789
static value_string_ext r3_mfgtestpreservenames_ext = VALUE_STRING_EXT_INIT(r3_mfgtestpreservenames);
2790
2791
static const value_string r3_daynames [] =
2792
{
2793
  { 0,  "Sunday" },
2794
  { 1,  "Monday" },
2795
  { 2,  "Tuesday" },
2796
  { 3,  "Wednesday" },
2797
  { 4,  "Thursday" },
2798
  { 5,  "Friday" },
2799
  { 6,  "Saturday" },
2800
  { 0,  NULL }
2801
};
2802
static value_string_ext r3_daynames_ext = VALUE_STRING_EXT_INIT(r3_daynames);
2803
2804
static const value_string r3_monthnames [] =
2805
{
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 }
2820
};
2821
static value_string_ext r3_monthnames_ext = VALUE_STRING_EXT_INIT(r3_monthnames);
2822
2823
static const value_string r3_monthdaynames [] =
2824
{
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   }
2858
};
2859
static value_string_ext r3_monthdaynames_ext = VALUE_STRING_EXT_INIT(r3_monthdaynames);
2860
2861
static const value_string r3_powertablenames [] =
2862
{
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 }
2872
};
2873
static value_string_ext r3_powertablenames_ext = VALUE_STRING_EXT_INIT(r3_powertablenames);
2874
2875
static const true_false_string tfs_rmtauthretry_flags =
2876
{
2877
  "Retry",
2878
  "Deny"
2879
};
2880
2881
static const true_false_string tfs_errornoerror_flags =
2882
{
2883
  "Error",
2884
  "No Error"
2885
};
2886
2887
static const string_string r3_snmanufacturernames [] =
2888
{
2889
  { "IT", "ITS" },
2890
  { "KC", "Kimchuk" },
2891
  { NULL, NULL }
2892
};
2893
2894
static const string_string r3_snyearnames [] =
2895
{
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 }
2907
};
2908
2909
static const string_string r3_snmodelnames [] =
2910
{
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 }
2918
};
2919
2920
static const string_string r3_sngroupnames [] =
2921
{
2922
  { "S",  "Sargent" },
2923
  { "P",  "Persona" },
2924
  { "C",  "Corbin-Russwin" },
2925
  { NULL, NULL }
2926
};
2927
2928
static const string_string r3_snnidnames [] =
2929
{
2930
  { "A",  "Ethernet" },
2931
  { "B",  "DPAC 802.11b" },
2932
  { "C",  "DPAC 802.11bg" },
2933
  { "D",  "Zigbee" },
2934
  { "E",  "GPRS" },
2935
  { NULL, NULL }
2936
};
2937
2938
static const string_string r3_snhidnames [] =
2939
{
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 }
2973
};
2974
2975
static const string_string r3_snpowersupplynames [] =
2976
{
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 }
2983
};
2984
2985
static const string_string r3_snmortisenames [] =
2986
{
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 }
3006
};
3007
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
3042
};
3043
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
3053
};
3054
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
3073
};
3074
3075
/*
3076
 *  Mapping table so dissect_r3_cmd_setconfig() knows what the configuration item type is
3077
 */
3078
static const configType_e configMap [] =
3079
{
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
3237
};
3238
3239
3240
/*
3241
 *  Dissectors for each command
3242
 */
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);
3275
3276
static void (* const r3command_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3277
{
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
3310
};
3311
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);
3347
3348
static void (* const r3commandmfg_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3349
{
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
3385
};
3386
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);
3389
3390
static void (* const r3response_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3391
{
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
3443
};
3444
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);
3471
3472
static void (* const r3upstreamcommand_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3473
{
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
3500
};
3501
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);
3520
3521
static void (* const r3upstreammfgfield_dissect []) (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree) =
3522
{
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
3541
};
3542
3543
/*
3544
 * ***************************************************************************
3545
 */
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)
3548
11
{
3549
11
  proto_item  *sn_item;
3550
11
  proto_tree  *sn_tree;
3551
11
  const char *s;
3552
3553
11
  tvb_ensure_bytes_exist (tvb, start_offset, 16);
3554
3555
11
  if (!tree)
3556
0
    return;
3557
3558
11
  sn_item = proto_tree_add_item (tree, hf_index, tvb, start_offset, 16, ENC_ASCII|ENC_NA);
3559
11
  sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
3560
3561
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset +  0, 2, ENC_ASCII|ENC_NA);
3562
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_manufacturer, tvb, start_offset +  0, 2, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snmanufacturernames, "[Unknown]"));
3563
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset +  2, 1, ENC_ASCII|ENC_NA);
3564
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_year, tvb, start_offset +  2, 1, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snyearnames, "[Unknown]"));
3565
11
  proto_tree_add_item(sn_tree, hf_r3_sn_week, tvb, start_offset +  3, 2, ENC_ASCII);
3566
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset +  5, 1, ENC_ASCII|ENC_NA);
3567
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_model, tvb, start_offset +  5, 1, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snmodelnames, "[Unknown]"));
3568
11
  proto_tree_add_item(sn_tree, hf_r3_sn_sequence, tvb, start_offset +  6, 4, ENC_ASCII);
3569
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset + 10, 1, ENC_ASCII|ENC_NA);
3570
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_group, tvb, start_offset + 10, 1, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_sngroupnames, "[Unknown]"));
3571
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset + 11, 1, ENC_ASCII|ENC_NA);
3572
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_nid, tvb, start_offset + 11, 1, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snnidnames, "[Unknown]"));
3573
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset + 12, 2, ENC_ASCII|ENC_NA);
3574
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_hid, tvb, start_offset + 12, 2, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snhidnames, "[Unknown]"));
3575
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset + 14, 1, ENC_ASCII|ENC_NA);
3576
11
  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_wmem(pinfo->pool, s, r3_snpowersupplynames, "[Unknown]"));
3577
11
  s = (char *)tvb_get_string_enc (pinfo->pool, tvb, start_offset + 15, 1, ENC_ASCII|ENC_NA);
3578
11
  proto_tree_add_string_format_value(sn_tree, hf_r3_sn_mortise, tvb, start_offset + 15, 1, s, "%s (%s)", s, str_to_str_wmem(pinfo->pool, s, r3_snmortisenames, "[Unknown]"));
3579
11
}
3580
3581
/*
3582
 * ***************************************************************************
3583
 *
3584
 * We've already ensured we have enough bytes in the table via tvb_ensure_bytes_exist()
3585
 *
3586
 */
3587
static void
3588
dissect_r3_upstreamfields (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3589
24
{
3590
24
  uint32_t offset = 0;
3591
3592
24
  DISSECTOR_ASSERT(start_offset == 0);
3593
3594
86
  while (offset < tvb_reported_length (tvb))
3595
77
  {
3596
77
    uint32_t     fieldLength = tvb_get_uint8 (tvb, offset + 0);
3597
77
    uint32_t     fieldType   = tvb_get_uint8 (tvb, offset + 1);
3598
77
    uint32_t     dataLength  = fieldLength - 2;
3599
77
    proto_item  *upstreamfield_item;
3600
77
    proto_item  *upstreamfield_length;
3601
77
    proto_tree  *upstreamfield_tree;
3602
77
    const char *usfn;
3603
3604
77
    usfn = val_to_str_ext_const (fieldType, &r3_upstreamfieldnames_ext, "[Unknown Field]");
3605
3606
77
    upstreamfield_item = proto_tree_add_none_format (tree, hf_r3_upstreamfield, tvb, offset + 0, fieldLength, "Upstream Field: %s (%u)", usfn, fieldType);
3607
77
    upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
3608
3609
77
    upstreamfield_length = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3610
77
    proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldtype, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3611
3612
77
    if (fieldLength < 2)
3613
28
    {
3614
28
      dataLength = 0;
3615
28
      expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
3616
28
    }
3617
3618
77
    offset += 2;
3619
3620
77
    switch (fieldType)
3621
77
    {
3622
      /*
3623
       *  Booleans, 8 & 16 bit values
3624
       */
3625
0
      case UPSTREAMFIELD_PRIMARYPIN :
3626
0
      case UPSTREAMFIELD_AUXPIN :
3627
1
      case UPSTREAMFIELD_ACCESSALWAYS :
3628
2
      case UPSTREAMFIELD_CACHED :
3629
6
      case UPSTREAMFIELD_ENTRYDEVICE :
3630
7
      case UPSTREAMFIELD_PPMIFIELDTYPE :
3631
14
      case UPSTREAMFIELD_RESPONSEWINDOW :
3632
14
      case UPSTREAMFIELD_USERTYPE :
3633
15
      case UPSTREAMFIELD_PRIMARYFIELDTYPE :
3634
15
      case UPSTREAMFIELD_AUXFIELDTYPE :
3635
15
      case UPSTREAMFIELD_ACCESSMODE :
3636
15
      case UPSTREAMFIELD_USECOUNT :
3637
15
      case UPSTREAMFIELD_EXCEPTIONGROUP :
3638
19
      case UPSTREAMFIELD_NAR :
3639
20
      case UPSTREAMFIELD_SEQUENCENUMBER :
3640
20
      case UPSTREAMFIELD_USERNUMBER :
3641
21
      case UPSTREAMFIELD_EVENTLOGRECORDCOUNT :
3642
22
      case UPSTREAMFIELD_DECLINEDRECORDCOUNT :
3643
22
      case UPSTREAMFIELD_ALARMRECORDCOUNT :
3644
22
        proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
3645
22
        break;
3646
3647
      /*
3648
       *  Strings
3649
       */
3650
1
      case UPSTREAMFIELD_PIN :
3651
1
      case UPSTREAMFIELD_VERSION :
3652
4
      case UPSTREAMFIELD_AUXCTLRVERSION :
3653
4
        proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_ASCII|ENC_NA);
3654
4
        break;
3655
3656
      /*
3657
       *  Special types
3658
       */
3659
1
      case UPSTREAMFIELD_SERIALNUMBER :
3660
1
        {
3661
1
          tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, offset, dataLength);
3662
3663
1
          dissect_serialnumber (sn_tvb, 0, length, pinfo, upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType]);
3664
1
        }
3665
1
        break;
3666
3667
1
      case UPSTREAMFIELD_EVENTLOGRECORD :
3668
1
        {
3669
1
          if (dataLength != 9)
3670
1
          {
3671
1
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed event log field -- expected 9 octets");
3672
1
          }
3673
0
          else
3674
0
          {
3675
0
            proto_tree *eventlog_tree;
3676
3677
0
            if (!upstreamfield_tree)
3678
0
              break;
3679
3680
0
            eventlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3eventlogrecord, NULL, "Event Log Record");
3681
3682
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year,       tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3683
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month,      tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3684
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day,        tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3685
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour,       tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3686
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute,     tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3687
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second,     tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3688
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3689
0
            proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event,      tvb, offset + 8, 1, ENC_LITTLE_ENDIAN);
3690
0
          }
3691
1
        }
3692
1
        break;
3693
3694
1
      case UPSTREAMFIELD_DATETIME :
3695
0
        {
3696
0
          if (dataLength != 8)
3697
0
          {
3698
0
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed date/time field -- expected 8 octets");
3699
0
          }
3700
0
          else
3701
0
          {
3702
0
            proto_tree *datetime_tree;
3703
3704
0
            if (!upstreamfield_tree)
3705
0
              break;
3706
3707
0
            datetime_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 8, ett_r3datetime, NULL,
3708
0
                "Date/Time: %02u/%02u/%02u-%u %02u:%02u:%02u %u",
3709
0
                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
0
                tvb_get_uint8 (tvb, offset + 4), tvb_get_uint8 (tvb, offset + 5), tvb_get_uint8 (tvb, offset + 6), tvb_get_uint8 (tvb, offset + 7));
3711
3712
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_year,    tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3713
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_month,   tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3714
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_day,     tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3715
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_dow,     tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3716
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_hours,   tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3717
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_minutes, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3718
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_seconds, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3719
0
            proto_tree_add_item (datetime_tree, hf_r3_datetime_dst,     tvb, offset + 7, 1, ENC_LITTLE_ENDIAN);
3720
0
          }
3721
0
        }
3722
0
        break;
3723
3724
0
      case UPSTREAMFIELD_DECLINEDRECORD :
3725
0
        {
3726
3727
0
          if (dataLength != 49)
3728
0
          {
3729
0
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed declined log field -- expected 49 octets");
3730
0
          }
3731
0
          else
3732
0
          {
3733
0
            proto_tree *declinedlog_tree;
3734
0
            uint8_t cred1type;
3735
0
            uint8_t cred2type;
3736
3737
0
            if (!upstreamfield_tree)
3738
0
              break;
3739
3740
0
            declinedlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 49, ett_r3declinedlogrecord, NULL, "Declined Log Record");
3741
3742
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year,       tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3743
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month,      tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3744
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day,        tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3745
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour,       tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3746
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute,     tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3747
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second,     tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3748
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
3749
3750
0
            cred1type = tvb_get_uint8 (tvb, offset + 8) & 0x07;
3751
0
            cred2type = (tvb_get_uint8 (tvb, offset + 8) & 0x38) >> 3;
3752
3753
0
            proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type,  tvb, offset, 1, cred1type);
3754
0
            proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type,  tvb, offset, 1, cred2type);
3755
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1,      tvb, offset +  9, 19, ENC_NA);
3756
0
            proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2,      tvb, offset + 28, 19, ENC_NA);
3757
0
          }
3758
0
        }
3759
0
        break;
3760
3761
0
      case UPSTREAMFIELD_EXPIREON :
3762
0
        {
3763
0
          if (dataLength != 3)
3764
0
          {
3765
0
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
3766
0
          }
3767
0
          else
3768
0
          {
3769
0
            proto_tree *expireon_tree;
3770
3771
0
            if (!upstreamfield_tree)
3772
0
              break;
3773
3774
0
            expireon_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 3, ett_r3expireon, NULL,
3775
0
                "Expire YY/MM/DD: %02u/%02u/%02u",
3776
0
                tvb_get_uint8 (tvb, offset + 2), tvb_get_uint8 (tvb, offset + 0), tvb_get_uint8 (tvb, offset + 1));
3777
3778
0
            proto_tree_add_item (expireon_tree, hf_r3_expireon_month, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3779
0
            proto_tree_add_item (expireon_tree, hf_r3_expireon_day,   tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3780
0
            proto_tree_add_item (expireon_tree, hf_r3_expireon_year,  tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3781
0
          }
3782
0
        }
3783
0
        break;
3784
3785
0
      case UPSTREAMFIELD_TIMEZONE :
3786
0
        {
3787
0
          if (dataLength != 4)
3788
0
          {
3789
0
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
3790
0
          }
3791
0
          else
3792
0
          {
3793
0
            proto_tree_add_bitmask(upstreamfield_tree, tvb, offset, hf_r3_upstreamfieldarray[fieldType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
3794
0
          }
3795
0
        }
3796
0
        break;
3797
3798
0
      case UPSTREAMFIELD_ALARMRECORD :
3799
0
        {
3800
0
          if (dataLength != 9)
3801
0
          {
3802
0
            expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed alarm log field -- expected 9 octets");
3803
0
          }
3804
0
          else
3805
0
          {
3806
0
            proto_tree *alarmlog_tree;
3807
3808
0
            if (!upstreamfield_tree)
3809
0
              break;
3810
3811
0
            alarmlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3alarmlogrecord, NULL, "Alarm Record");
3812
3813
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year,       tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3814
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month,      tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3815
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day,        tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3816
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour,       tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3817
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute,     tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
3818
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second,     tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
3819
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id,         tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
3820
0
            proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, offset + 7, 2, ENC_LITTLE_ENDIAN);
3821
0
          }
3822
0
        }
3823
0
        break;
3824
3825
22
      case UPSTREAMFIELD_NOTUSED :
3826
49
      default :
3827
49
        proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset, dataLength, "Unknown Field Type");
3828
49
        break;
3829
77
    }
3830
3831
62
    offset += dataLength;
3832
62
  }
3833
24
}
3834
3835
/*
3836
 * ***************************************************************************
3837
 *
3838
 *  These are passed a tvb that contains whatever occurs after the [UPSTREAMCOMMAND_*] byte
3839
 */
3840
static void
3841
dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3842
1
{
3843
1
  proto_tree_add_expert(tree, pinfo, &ei_r3_reserved_upstream_command_value, tvb, start_offset, length);
3844
1
}
3845
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)
3848
2
{
3849
2
  proto_tree *debugmsg_tree;
3850
3851
2
  if (!tree)
3852
0
    return;
3853
3854
2
  DISSECTOR_ASSERT(start_offset == 0);
3855
3856
2
  debugmsg_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3debugmsg, NULL, "Debug message");
3857
3858
2
  proto_tree_add_item (debugmsg_tree, hf_r3_debugmsg, tvb, 1, -1, ENC_ASCII);
3859
2
}
3860
3861
static void
3862
dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3863
6
{
3864
6
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3865
6
}
3866
3867
static void
3868
dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3869
1
{
3870
1
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3871
1
}
3872
3873
static void
3874
dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3875
0
{
3876
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3877
0
}
3878
3879
static void
3880
dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3881
0
{
3882
0
  DISSECTOR_ASSERT(start_offset == 0);
3883
3884
0
  tvb_ensure_bytes_exist (tvb, 0, 11);
3885
3886
0
  if (length != 11)
3887
0
  {
3888
0
    expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Malformed event log record -- expected 10 octets");
3889
0
  }
3890
0
  else
3891
0
  {
3892
0
    proto_tree  *eventlog_tree;
3893
0
    const char *en;
3894
3895
0
    if (!tree)
3896
0
      return;
3897
3898
0
    en = val_to_str_ext_const (tvb_get_uint8 (tvb, 10), &r3_eventnames_ext, "[Unknown Event]");
3899
3900
0
    eventlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 10, ett_r3eventlogrecord, NULL,
3901
0
        "Event Log Record %u (%s)", tvb_get_letohs (tvb, 0), en);
3902
3903
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_recordnumber, tvb,  0, 2, ENC_LITTLE_ENDIAN);
3904
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year,         tvb,  2, 1, ENC_LITTLE_ENDIAN);
3905
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month,        tvb,  3, 1, ENC_LITTLE_ENDIAN);
3906
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day,          tvb,  4, 1, ENC_LITTLE_ENDIAN);
3907
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour,         tvb,  5, 1, ENC_LITTLE_ENDIAN);
3908
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute,       tvb,  6, 1, ENC_LITTLE_ENDIAN);
3909
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second,       tvb,  7, 1, ENC_LITTLE_ENDIAN);
3910
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber,   tvb,  8, 2, ENC_LITTLE_ENDIAN);
3911
0
    proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event,        tvb, 10, 1, ENC_LITTLE_ENDIAN);
3912
0
  }
3913
0
}
3914
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)
3917
2
{
3918
2
  DISSECTOR_ASSERT(start_offset == 0);
3919
3920
2
  tvb_ensure_bytes_exist (tvb, 0, 3);
3921
3922
2
  if (!tree)
3923
0
    return;
3924
3925
2
  proto_tree_add_item (tree, hf_r3_nvramdump_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
3926
2
  proto_tree_add_item (tree, hf_r3_nvramdump_length, tvb, 2, 1, ENC_LITTLE_ENDIAN);
3927
2
  proto_tree_add_item (tree, hf_r3_nvramdump_data,   tvb, 3, tvb_get_uint8 (tvb, 2), ENC_NA);
3928
2
}
3929
3930
static void
3931
dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3932
16
{
3933
16
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3934
16
}
3935
3936
static void
3937
dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
3938
0
{
3939
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
3940
0
}
3941
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)
3944
0
{
3945
0
  uint32_t offset = 0;
3946
3947
0
  DISSECTOR_ASSERT(start_offset == 0);
3948
3949
0
  if (!tree)
3950
0
    return;
3951
3952
0
  while (offset < tvb_reported_length (tvb))
3953
0
  {
3954
0
    proto_item  *pi;
3955
0
    proto_tree  *upstreamfield_tree;
3956
0
    const char *ci;
3957
0
    uint8_t item_length;
3958
3959
0
    ci = val_to_str_ext_const (tvb_get_uint8 (tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
3960
3961
0
    item_length = tvb_get_uint8 (tvb, offset + 0);
3962
0
    upstreamfield_tree = proto_tree_add_subtree_format(tree, tvb, offset + 0, item_length, ett_r3upstreamfield, NULL,
3963
0
                        "Config Field: %s (%u)", ci, tvb_get_uint8 (tvb, offset + 1));
3964
3965
0
    pi = proto_tree_add_item (upstreamfield_tree, hf_r3_configitemlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
3966
0
    if (item_length == 0) {
3967
0
      expert_add_info_format(pinfo, pi, &ei_r3_malformed_length, "Invalid item length");
3968
0
      return;
3969
0
    }
3970
3971
0
    proto_tree_add_item (upstreamfield_tree, hf_r3_configitem,       tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
3972
0
    proto_tree_add_item (upstreamfield_tree, hf_r3_configitemtype,   tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
3973
3974
0
    switch (tvb_get_uint8 (tvb, offset + 2))
3975
0
    {
3976
0
      case CONFIGTYPE_NONE :
3977
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata, tvb, offset + 3, item_length - 3, ENC_NA);
3978
0
        break;
3979
3980
0
      case CONFIGTYPE_BOOL :
3981
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_bool, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3982
0
        break;
3983
3984
0
      case CONFIGTYPE_8 :
3985
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_8, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
3986
0
        break;
3987
3988
0
      case CONFIGTYPE_16 :
3989
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_16, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN);
3990
0
        break;
3991
3992
0
      case CONFIGTYPE_32 :
3993
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_32, tvb, offset + 3, 4, ENC_LITTLE_ENDIAN);
3994
0
        break;
3995
3996
0
      case CONFIGTYPE_STRING :
3997
0
        proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_string, tvb, offset + 3, item_length - 3, ENC_ASCII);
3998
0
        break;
3999
4000
0
      default :
4001
0
        proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset + 3, item_length - 3, "Unknown Field Type");
4002
0
        break;
4003
0
    }
4004
4005
0
    offset += item_length;
4006
0
  }
4007
0
}
4008
4009
static void
4010
dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4011
0
{
4012
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4013
0
}
4014
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)
4017
0
{
4018
0
  if (tree)
4019
0
  {
4020
0
    DISSECTOR_ASSERT(start_offset == 0);
4021
    /* XXX: hf[] entries for the following hf indexes originally missing */
4022
0
    proto_tree_add_item (tree, hf_r3_dpacreply_stuff,  tvb, 2,  1, ENC_LITTLE_ENDIAN);
4023
0
    proto_tree_add_item (tree, hf_r3_dpacreply_length, tvb, 3,  1, ENC_LITTLE_ENDIAN);
4024
0
    proto_tree_add_item (tree, hf_r3_dpacreply_reply,  tvb, 4, -1, ENC_NA);
4025
0
  }
4026
0
}
4027
4028
static void
4029
dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4030
1
{
4031
1
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4032
1
}
4033
4034
static void
4035
dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4036
5
{
4037
5
  proto_tree *mfg_tree = NULL;
4038
5
  uint8_t     mfg_fld;
4039
5
  tvbuff_t   *mfg_tvb;
4040
5
  proto_item  *mfg_item;
4041
5
  const char *cn;
4042
4043
5
  DISSECTOR_ASSERT(start_offset == 0);
4044
4045
5
  mfg_tvb = tvb_new_subset_remaining (tvb, 2);
4046
5
  mfg_fld = tvb_get_uint8 (tvb, 1);
4047
4048
5
  cn = val_to_str_ext_const (mfg_fld, &r3_mfgfieldnames_ext, "[Unknown Mfg Field]");
4049
4050
5
  proto_tree_add_item (tree, hf_r3_mfgfield_length, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4051
4052
5
  mfg_tree = proto_tree_add_subtree_format(tree, tvb, 1, -1, ett_r3commandmfg, &mfg_item,
4053
5
                    "Upstream Manufacturing Field: %s (%u)", cn, mfg_fld);
4054
4055
5
  proto_tree_add_item (mfg_tree, hf_r3_mfgfield, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4056
4057
5
  if (mfg_fld >= MFGFIELD_LAST)
4058
1
  {
4059
1
    expert_add_info(pinfo, mfg_item, &ei_r3_mfgfield);
4060
1
  }
4061
4
  else if (r3upstreammfgfield_dissect [mfg_fld])
4062
4
    (*r3upstreammfgfield_dissect [mfg_fld]) (mfg_tvb, 0, length, pinfo, mfg_tree);
4063
5
}
4064
4065
static void
4066
dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4067
0
{
4068
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4069
0
}
4070
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)
4073
0
{
4074
0
  if (!tree)
4075
0
    return;
4076
4077
0
  DISSECTOR_ASSERT(start_offset == 0);
4078
4079
0
  proto_tree_add_item (tree, hf_r3_nvramdumprle_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4080
0
  proto_tree_add_item (tree, hf_r3_nvramdumprle_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4081
0
  proto_tree_add_item (tree, hf_r3_nvramdumprle_data,   tvb, 4, tvb_get_uint8 (tvb, 3), ENC_NA);
4082
0
}
4083
4084
static void
4085
dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4086
0
{
4087
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4088
0
}
4089
4090
static void
4091
dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4092
0
{
4093
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4094
0
}
4095
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)
4098
0
{
4099
0
  proto_tree *declinedlog_tree;
4100
0
  uint8_t     cred1type;
4101
0
  uint8_t     cred2type;
4102
4103
0
  if (!tree)
4104
0
    return;
4105
4106
0
  DISSECTOR_ASSERT(start_offset == 0);
4107
4108
0
  declinedlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 49,
4109
0
      ett_r3declinedlogrecord, NULL, "Declined Log Record %u", tvb_get_letohs (tvb, 0));
4110
4111
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4112
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year,         tvb, 2, 1, ENC_LITTLE_ENDIAN);
4113
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month,        tvb, 3, 1, ENC_LITTLE_ENDIAN);
4114
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day,          tvb, 4, 1, ENC_LITTLE_ENDIAN);
4115
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour,         tvb, 5, 1, ENC_LITTLE_ENDIAN);
4116
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute,       tvb, 6, 1, ENC_LITTLE_ENDIAN);
4117
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second,       tvb, 7, 1, ENC_LITTLE_ENDIAN);
4118
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber,   tvb, 8, 2, ENC_LITTLE_ENDIAN);
4119
4120
0
  cred1type = tvb_get_uint8 (tvb, 10) & 0x07;
4121
0
  cred2type = (tvb_get_uint8 (tvb, 10) & 0x38) >> 3;
4122
4123
0
  proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, 10, 1, cred1type);
4124
0
  proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, 10, 1, cred2type);
4125
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, 11, 19, ENC_NA);
4126
0
  proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, 30, 19, ENC_NA);
4127
0
}
4128
4129
static void
4130
dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4131
0
{
4132
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4133
0
}
4134
4135
static void
4136
dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4137
0
{
4138
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4139
0
}
4140
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)
4143
0
{
4144
0
  proto_tree *alarmlog_tree;
4145
4146
0
  if (!tree)
4147
0
    return;
4148
4149
0
  DISSECTOR_ASSERT(start_offset == 0);
4150
4151
0
  alarmlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 9,
4152
0
        ett_r3alarmlogrecord, NULL, "Alarm Log Record %u", tvb_get_letohs (tvb, 0));
4153
4154
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4155
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year,         tvb, 2, 1, ENC_LITTLE_ENDIAN);
4156
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month,        tvb, 3, 1, ENC_LITTLE_ENDIAN);
4157
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day,          tvb, 4, 1, ENC_LITTLE_ENDIAN);
4158
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour,         tvb, 5, 1, ENC_LITTLE_ENDIAN);
4159
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute,       tvb, 6, 1, ENC_LITTLE_ENDIAN);
4160
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second,       tvb, 7, 1, ENC_LITTLE_ENDIAN);
4161
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id,           tvb, 8, 1, ENC_LITTLE_ENDIAN);
4162
0
  proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber,   tvb, 9, 2, ENC_LITTLE_ENDIAN);
4163
0
}
4164
4165
static void
4166
dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4167
0
{
4168
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4169
0
}
4170
4171
static void
4172
dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4173
0
{
4174
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4175
0
}
4176
4177
static void
4178
dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
4179
0
{
4180
0
  dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
4181
0
}
4182
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)
4185
0
{
4186
0
  proto_tree *debuglog_tree;
4187
4188
0
  if (!tree)
4189
0
    return;
4190
4191
0
  DISSECTOR_ASSERT(start_offset == 0);
4192
4193
0
  debuglog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 8,
4194
0
            ett_r3debuglogrecord, NULL, "Debug Log Record %u", tvb_get_letohs (tvb, 0));
4195
4196
0
  proto_tree_add_item (debuglog_tree, hf_r3_debuglog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
4197
0
  proto_tree_add_item (debuglog_tree, hf_r3_debuglog_flags,        tvb, 2, 4, ENC_LITTLE_ENDIAN);
4198
0
  proto_tree_add_item (debuglog_tree, hf_r3_debuglog_tick,         tvb, 6, 2, ENC_LITTLE_ENDIAN);
4199
0
}
4200
4201
/*
4202
 * ***************************************************************************
4203
 */
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)
4206
0
{
4207
0
  unsigned len;
4208
4209
0
  DISSECTOR_ASSERT(start_offset == 0);
4210
4211
0
  len = tvb_reported_length_remaining(tvb, start_offset);
4212
0
  if (len % 3 != 0)
4213
0
  {
4214
0
    expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "IOPINS data length not modulo 3 == 0");
4215
0
  }
4216
0
  else
4217
0
  {
4218
0
    char portname = 'A';
4219
4220
0
    if (!tree)
4221
0
      return;
4222
4223
0
    for (unsigned i = 0; i < len; i += 3, portname++)
4224
0
    {
4225
0
      proto_tree *port_tree = proto_tree_add_subtree_format(tree, tvb, i, 3, ett_r3iopins, NULL,
4226
0
                                                   "Port %c Configuration", (portname == 'I') ? ++portname : portname);
4227
4228
0
      proto_tree_add_item (port_tree, hf_r3_iopins_lat,  tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4229
0
      proto_tree_add_item (port_tree, hf_r3_iopins_port, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4230
0
      proto_tree_add_item (port_tree, hf_r3_iopins_tris, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4231
0
    }
4232
0
  }
4233
0
}
4234
4235
static void
4236
dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4237
1
{
4238
1
  unsigned   len;
4239
1
  uint32_t i;
4240
4241
1
  if (!tree)
4242
0
    return;
4243
4244
1
  DISSECTOR_ASSERT(start_offset == 0);
4245
4246
1
  len = tvb_reported_length(tvb);
4247
4248
9
  for (i = 0; i < MIN(len,8); i++)
4249
8
  {
4250
8
    proto_item *item = proto_tree_add_item (tree, hf_r3_adc [i], tvb, i, 1, ENC_LITTLE_ENDIAN);
4251
8
    proto_item_append_text (item, " (%.2f Volts)", (float) tvb_get_uint8 (tvb, i) * 0.04154);
4252
8
  }
4253
4254
1
  if (len > 8)
4255
1
  {
4256
1
    expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_mfgfield_too_many_adc_values);
4257
1
  }
4258
4259
1
}
4260
4261
static void
4262
dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4263
0
{
4264
0
  if (!tree)
4265
0
    return;
4266
4267
0
  DISSECTOR_ASSERT(start_offset == 0);
4268
4269
0
  proto_tree_add_item (tree, hf_r3_hardwareid_board,  tvb, 0, 1, ENC_LITTLE_ENDIAN);
4270
0
  proto_tree_add_item (tree, hf_r3_hardwareid_cpuid,  tvb, 1, 2, ENC_LITTLE_ENDIAN);
4271
0
  proto_tree_add_item (tree, hf_r3_hardwareid_cpurev, tvb, 3, 1, ENC_LITTLE_ENDIAN);
4272
0
}
4273
4274
static void
4275
dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4276
2
{
4277
2
  proto_tree *cpl_tree;
4278
2
  unsigned    counter;
4279
2
  int         len;
4280
2
  int         i;
4281
4282
2
  if (!tree)
4283
0
    return;
4284
4285
2
  DISSECTOR_ASSERT(start_offset == 0);
4286
4287
2
  len = tvb_reported_length_remaining (tvb, 1);
4288
4289
2
  proto_tree_add_item (tree, hf_r3_checkpointlog_entryptr, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4290
2
  cpl_tree = proto_tree_add_subtree(tree, tvb, 1, -1, ett_r3checkpointlog, NULL, "Checkpoint Log");
4291
4292
2
  counter = 0;
4293
22
  for (i = 0; i < len; i += 2, counter++)
4294
20
  {
4295
20
    unsigned     rcon      = tvb_get_uint8 (tvb, i + 0);
4296
20
    unsigned     cp        = tvb_get_uint8 (tvb, i + 1);
4297
20
    proto_item  *cpe_item;
4298
20
    proto_tree  *cpe_tree;
4299
20
    unsigned     resettype;
4300
20
    const char *desc;
4301
20
    static const char * const resets [] = { "Stack underflow", "Stack overflow", "Power-On",
4302
20
                                           "Software", "Brown-out", "MCLR in sleep", "WDT",
4303
20
                                           "Normal", "[Unknown Reset Type]" };
4304
4305
20
    cpe_tree = proto_tree_add_subtree_format(cpl_tree, tvb, i + 0, 2, ett_r3checkpointlogentry, &cpe_item,
4306
20
                            "Checkpoint Log Entry %u", counter);
4307
20
    desc = val_to_str_ext_const (cp, &r3_checkpointnames_ext, "[Unknown Checkpoint]");
4308
4309
20
    if (rcon == 0xff)
4310
1
      resettype = 8;
4311
19
    else
4312
19
    {
4313
19
      rcon &= 0x1f;
4314
4315
19
      if (rcon == 0x1c)
4316
0
        resettype = 2;
4317
19
      else if ((rcon & 0x10) == 0x00)
4318
6
        resettype = 3;
4319
13
      else if ((rcon & 0x1d) == 0x1c)
4320
0
        resettype = 4;
4321
13
      else if ((rcon & 0x0c) == 0x08)
4322
0
        resettype = 5;
4323
13
      else if ((rcon & 0x0c) == 0x04)
4324
12
        resettype = 6;
4325
1
      else
4326
1
        resettype = 7;
4327
19
    }
4328
4329
20
    proto_item_append_text (cpe_item, " (%s, %s)", resets [resettype], desc);
4330
20
    proto_item_append_text (
4331
20
      proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_rcon,       tvb, i + 0, 1, ENC_LITTLE_ENDIAN),
4332
20
      " (%s)", resets [resettype]);
4333
20
    proto_item_append_text (
4334
20
      proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_checkpoint, tvb, i + 1, 1, ENC_LITTLE_ENDIAN),
4335
20
      " (%s)", desc);
4336
20
  }
4337
2
}
4338
4339
static void
4340
dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4341
0
{
4342
0
  proto_tree *tmp_tree [19];
4343
0
  proto_tree *cr_tree;
4344
4345
0
  if (!tree)
4346
0
    return;
4347
4348
0
  DISSECTOR_ASSERT(start_offset == 0);
4349
4350
0
  cr_tree = proto_tree_add_subtree(tree, tvb, start_offset, -1, ett_r3cpuregisters, NULL, "CPU Registers");
4351
4352
0
  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);
4353
0
  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);
4354
0
  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);
4355
0
  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);
4356
0
  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);
4357
0
  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);
4358
0
  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);
4359
0
  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);
4360
0
  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);
4361
0
  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);
4362
0
  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);
4363
0
  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);
4364
0
  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);
4365
0
  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);
4366
0
  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);
4367
0
  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);
4368
0
  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);
4369
0
  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);
4370
0
  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);
4371
4372
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbif,     tvb,  0, 1, ENC_LITTLE_ENDIAN);
4373
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0if,   tvb,  0, 1, ENC_LITTLE_ENDIAN);
4374
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0if,   tvb,  0, 1, ENC_LITTLE_ENDIAN);
4375
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbie,     tvb,  0, 1, ENC_LITTLE_ENDIAN);
4376
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0ie,   tvb,  0, 1, ENC_LITTLE_ENDIAN);
4377
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0ie,   tvb,  0, 1, ENC_LITTLE_ENDIAN);
4378
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_giel,     tvb,  0, 1, ENC_LITTLE_ENDIAN);
4379
0
  proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_gieh,     tvb,  0, 1, ENC_LITTLE_ENDIAN);
4380
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbip,    tvb,  1, 1, ENC_LITTLE_ENDIAN);
4381
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_int3ip,  tvb,  1, 1, ENC_LITTLE_ENDIAN);
4382
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_tmr0ip,  tvb,  1, 1, ENC_LITTLE_ENDIAN);
4383
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg3, tvb,  1, 1, ENC_LITTLE_ENDIAN);
4384
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg2, tvb,  1, 1, ENC_LITTLE_ENDIAN);
4385
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg1, tvb,  1, 1, ENC_LITTLE_ENDIAN);
4386
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg0, tvb,  1, 1, ENC_LITTLE_ENDIAN);
4387
0
  proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbpu,    tvb,  1, 1, ENC_LITTLE_ENDIAN);
4388
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1if,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4389
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2if,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4390
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3if,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4391
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ie,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4392
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ie,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4393
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3ie,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4394
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ip,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4395
0
  proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ip,  tvb,  2, 1, ENC_LITTLE_ENDIAN);
4396
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr1if,     tvb,  3, 1, ENC_LITTLE_ENDIAN);
4397
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr2if,     tvb,  3, 1, ENC_LITTLE_ENDIAN);
4398
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ccp1if,     tvb,  3, 1, ENC_LITTLE_ENDIAN);
4399
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ssp1if,     tvb,  3, 1, ENC_LITTLE_ENDIAN);
4400
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tx1if,      tvb,  3, 1, ENC_LITTLE_ENDIAN);
4401
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_rc1if,      tvb,  3, 1, ENC_LITTLE_ENDIAN);
4402
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_adif,       tvb,  3, 1, ENC_LITTLE_ENDIAN);
4403
0
  proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_pspif,      tvb,  3, 1, ENC_LITTLE_ENDIAN);
4404
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_ccp2if,     tvb,  4, 1, ENC_LITTLE_ENDIAN);
4405
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_tmr3if,     tvb,  4, 1, ENC_LITTLE_ENDIAN);
4406
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_hlvdif,     tvb,  4, 1, ENC_LITTLE_ENDIAN);
4407
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_bcl1if,     tvb,  4, 1, ENC_LITTLE_ENDIAN);
4408
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_eeif,       tvb,  4, 1, ENC_LITTLE_ENDIAN);
4409
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_unused5,    tvb,  4, 1, ENC_LITTLE_ENDIAN);
4410
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_cmif,       tvb,  4, 1, ENC_LITTLE_ENDIAN);
4411
0
  proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_oscfif,     tvb,  4, 1, ENC_LITTLE_ENDIAN);
4412
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp3if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4413
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp4if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4414
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp5if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4415
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tmr4if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4416
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tx2if,      tvb,  5, 1, ENC_LITTLE_ENDIAN);
4417
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_rc2if,      tvb,  5, 1, ENC_LITTLE_ENDIAN);
4418
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_bcl2if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4419
0
  proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ssp2if,     tvb,  5, 1, ENC_LITTLE_ENDIAN);
4420
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr1ie,     tvb,  6, 1, ENC_LITTLE_ENDIAN);
4421
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr2ie,     tvb,  6, 1, ENC_LITTLE_ENDIAN);
4422
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ccp1ie,     tvb,  6, 1, ENC_LITTLE_ENDIAN);
4423
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ssp1ie,     tvb,  6, 1, ENC_LITTLE_ENDIAN);
4424
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tx1ie,      tvb,  6, 1, ENC_LITTLE_ENDIAN);
4425
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_rc1ie,      tvb,  6, 1, ENC_LITTLE_ENDIAN);
4426
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_adie,       tvb,  6, 1, ENC_LITTLE_ENDIAN);
4427
0
  proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_pspie,      tvb,  6, 1, ENC_LITTLE_ENDIAN);
4428
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_oscfie,     tvb,  7, 1, ENC_LITTLE_ENDIAN);
4429
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_cmie,       tvb,  7, 1, ENC_LITTLE_ENDIAN);
4430
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_unused2,    tvb,  7, 1, ENC_LITTLE_ENDIAN);
4431
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_eeie,       tvb,  7, 1, ENC_LITTLE_ENDIAN);
4432
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_bcl1ie,     tvb,  7, 1, ENC_LITTLE_ENDIAN);
4433
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_hlvdie,     tvb,  7, 1, ENC_LITTLE_ENDIAN);
4434
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_tmr3ie,     tvb,  7, 1, ENC_LITTLE_ENDIAN);
4435
0
  proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_ccp2ie,     tvb,  7, 1, ENC_LITTLE_ENDIAN);
4436
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp3ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4437
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp4ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4438
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp5ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4439
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tmr4ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4440
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tx2ie,      tvb,  8, 1, ENC_LITTLE_ENDIAN);
4441
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_rc2ie,      tvb,  8, 1, ENC_LITTLE_ENDIAN);
4442
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_bcl2ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4443
0
  proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ssp2ie,     tvb,  8, 1, ENC_LITTLE_ENDIAN);
4444
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr1ip,     tvb,  9, 1, ENC_LITTLE_ENDIAN);
4445
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr2ip,     tvb,  9, 1, ENC_LITTLE_ENDIAN);
4446
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ccp1ip,     tvb,  9, 1, ENC_LITTLE_ENDIAN);
4447
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ssp1ip,     tvb,  9, 1, ENC_LITTLE_ENDIAN);
4448
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tx1ip,      tvb,  9, 1, ENC_LITTLE_ENDIAN);
4449
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_rc1ip,      tvb,  9, 1, ENC_LITTLE_ENDIAN);
4450
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_adip,       tvb,  9, 1, ENC_LITTLE_ENDIAN);
4451
0
  proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_pspip,      tvb,  9, 1, ENC_LITTLE_ENDIAN);
4452
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_ccp2ip,     tvb, 10, 1, ENC_LITTLE_ENDIAN);
4453
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_tmr3ip,     tvb, 10, 1, ENC_LITTLE_ENDIAN);
4454
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_hlvdip,     tvb, 10, 1, ENC_LITTLE_ENDIAN);
4455
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_bcl1ip,     tvb, 10, 1, ENC_LITTLE_ENDIAN);
4456
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_eeip,       tvb, 10, 1, ENC_LITTLE_ENDIAN);
4457
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_unused5,    tvb, 10, 1, ENC_LITTLE_ENDIAN);
4458
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_cmip,       tvb, 10, 1, ENC_LITTLE_ENDIAN);
4459
0
  proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_oscfip,     tvb, 10, 1, ENC_LITTLE_ENDIAN);
4460
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp2ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4461
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp4ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4462
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp5ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4463
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tmr4ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4464
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tx2ip,      tvb, 11, 1, ENC_LITTLE_ENDIAN);
4465
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_rc2ip,      tvb, 11, 1, ENC_LITTLE_ENDIAN);
4466
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_bcl2ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4467
0
  proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ssp2ip,     tvb, 11, 1, ENC_LITTLE_ENDIAN);
4468
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_bor,        tvb, 12, 1, ENC_LITTLE_ENDIAN);
4469
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_por,        tvb, 12, 1, ENC_LITTLE_ENDIAN);
4470
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_pd,         tvb, 12, 1, ENC_LITTLE_ENDIAN);
4471
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_to,         tvb, 12, 1, ENC_LITTLE_ENDIAN);
4472
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_unused4,    tvb, 12, 1, ENC_LITTLE_ENDIAN);
4473
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ri,         tvb, 12, 1, ENC_LITTLE_ENDIAN);
4474
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_sboren,     tvb, 12, 1, ENC_LITTLE_ENDIAN);
4475
0
  proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ipen,       tvb, 12, 1, ENC_LITTLE_ENDIAN);
4476
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs0,     tvb, 13, 1, ENC_LITTLE_ENDIAN);
4477
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs1,     tvb, 13, 1, ENC_LITTLE_ENDIAN);
4478
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_iofs,     tvb, 13, 1, ENC_LITTLE_ENDIAN);
4479
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_osts,     tvb, 13, 1, ENC_LITTLE_ENDIAN);
4480
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf0,    tvb, 13, 1, ENC_LITTLE_ENDIAN);
4481
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf1,    tvb, 13, 1, ENC_LITTLE_ENDIAN);
4482
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf2,    tvb, 13, 1, ENC_LITTLE_ENDIAN);
4483
0
  proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_idlen,    tvb, 13, 1, ENC_LITTLE_ENDIAN);
4484
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9d,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4485
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_oerr,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4486
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_ferr,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4487
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_adden,     tvb, 14, 1, ENC_LITTLE_ENDIAN);
4488
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_cren,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4489
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_sren,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4490
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9,       tvb, 14, 1, ENC_LITTLE_ENDIAN);
4491
0
  proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_spen,      tvb, 14, 1, ENC_LITTLE_ENDIAN);
4492
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9d,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4493
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_trmt,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4494
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_brgh,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4495
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sendb,     tvb, 15, 1, ENC_LITTLE_ENDIAN);
4496
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sync,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4497
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_txen,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4498
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9,       tvb, 15, 1, ENC_LITTLE_ENDIAN);
4499
0
  proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_csrc,      tvb, 15, 1, ENC_LITTLE_ENDIAN);
4500
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9d,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4501
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_oerr,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4502
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_ferr,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4503
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_adden,    tvb, 16, 1, ENC_LITTLE_ENDIAN);
4504
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_cren,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4505
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_sren,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4506
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9,      tvb, 16, 1, ENC_LITTLE_ENDIAN);
4507
0
  proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_spen,     tvb, 16, 1, ENC_LITTLE_ENDIAN);
4508
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9d,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4509
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_trmt,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4510
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_brgh,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4511
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sendb,    tvb, 17, 1, ENC_LITTLE_ENDIAN);
4512
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sync,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4513
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_txen,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4514
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9,      tvb, 17, 1, ENC_LITTLE_ENDIAN);
4515
0
  proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_csrc,     tvb, 17, 1, ENC_LITTLE_ENDIAN);
4516
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_swdten,   tvb, 18, 1, ENC_LITTLE_ENDIAN);
4517
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused1,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4518
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused2,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4519
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused3,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4520
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused4,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4521
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused5,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4522
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused6,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4523
0
  proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused7,  tvb, 18, 1, ENC_LITTLE_ENDIAN);
4524
0
}
4525
4526
static void
4527
dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4528
0
{
4529
0
  unsigned len;
4530
0
  unsigned i;
4531
0
  proto_tree *tfg_tree;
4532
4533
0
  DISSECTOR_ASSERT(start_offset == 0);
4534
4535
0
  len      = tvb_reported_length(tvb);
4536
0
  tfg_tree = proto_tree_add_subtree_format(tree, tvb, 0, -1, ett_r3taskflags, NULL,
4537
0
      "Task Flags (%u tasks)", len / 5);
4538
4539
0
  for (i = 0; i < len; i += 5)
4540
0
  {
4541
0
    proto_tree *tf_tree = proto_tree_add_subtree_format(tfg_tree, tvb, i, 5,
4542
0
                                               ett_r3taskflagsentry, NULL,
4543
0
                                               "Task Flags (%2d: 0x%06x)",
4544
0
                                               tvb_get_uint8 (tvb, i + 0),
4545
0
                                               tvb_get_letohl (tvb, i + 1));
4546
4547
0
    proto_tree_add_item (tf_tree, hf_r3_taskflags_taskid, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4548
0
    proto_tree_add_item (tf_tree, hf_r3_taskflags_flags,  tvb, i + 1, 4, ENC_LITTLE_ENDIAN);
4549
0
  }
4550
0
}
4551
4552
static void
4553
dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4554
1
{
4555
1
  int len;
4556
1
  int i;
4557
4558
1
  if (!tree)
4559
0
    return;
4560
4561
1
  DISSECTOR_ASSERT(start_offset == 0);
4562
4563
1
  len = tvb_reported_length_remaining (tvb, 3);
4564
4565
1
  proto_tree_add_item (tree, hf_r3_timerchain_newtick,         tvb, 0, 2, ENC_LITTLE_ENDIAN);
4566
1
  proto_tree_add_item (tree, hf_r3_timerchain_currentboundary, tvb, 2, 1, ENC_LITTLE_ENDIAN);
4567
4568
3
  for (i = 0; i < len; i += 12)
4569
2
  {
4570
2
    proto_tree *tc_tree = proto_tree_add_subtree(tree, tvb, 3 + i, 12, ett_r3timerchain, NULL, "Timer Chain Entry");
4571
4572
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_tasktag,  tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4573
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_address,  tvb, 3 + i + 1, 2, ENC_LITTLE_ENDIAN);
4574
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_reload,   tvb, 3 + i + 3, 2, ENC_LITTLE_ENDIAN);
4575
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_boundary, tvb, 3 + i + 5, 1, ENC_LITTLE_ENDIAN);
4576
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_count,    tvb, 3 + i + 6, 2, ENC_LITTLE_ENDIAN);
4577
2
    proto_tree_add_item (tc_tree, hf_r3_timerchain_flags,    tvb, 3 + i + 8, 4, ENC_LITTLE_ENDIAN);
4578
2
  }
4579
1
}
4580
4581
static void
4582
dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4583
0
{
4584
0
  int i;
4585
0
  int len;
4586
4587
0
  DISSECTOR_ASSERT(start_offset == 0);
4588
4589
0
  len = tvb_reported_length_remaining (tvb, 0);
4590
4591
0
  for (i = 0; i < len; i += 3)
4592
0
  {
4593
0
    proto_item *peekpoke_item;
4594
0
    proto_item *peekpoke_op_item;
4595
0
    proto_tree *peekpoke_tree;
4596
4597
0
    peekpoke_tree = proto_tree_add_subtree(tree, tvb, i, 3, ett_r3peekpoke, &peekpoke_item, "");
4598
4599
0
    peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4600
0
    proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address,   tvb, i + 1, 2, ENC_LITTLE_ENDIAN);
4601
4602
0
    switch (tvb_get_uint8 (tvb, i + 0))
4603
0
    {
4604
0
      case PEEKPOKE_READU8 :
4605
0
        if (peekpoke_tree)
4606
0
        {
4607
0
          proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x = 0x%02x)",
4608
0
                                  tvb_get_letohs (tvb, i + 1),
4609
0
                                  tvb_get_uint8 (tvb, i + 3));
4610
0
          proto_item_set_len (peekpoke_item, 4);
4611
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4612
0
        }
4613
0
        i += 1;
4614
0
        break;
4615
4616
0
      case PEEKPOKE_READU16 :
4617
0
        if (peekpoke_tree)
4618
0
        {
4619
0
          proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x = 0x%04x)",
4620
0
                                  tvb_get_letohs (tvb, i + 1),
4621
0
                                  tvb_get_letohs (tvb, i + 3));
4622
0
          proto_item_set_len (peekpoke_item, 5);
4623
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, i + 3, 2, ENC_LITTLE_ENDIAN);
4624
0
        }
4625
0
        i += 2;
4626
0
        break;
4627
4628
0
      case PEEKPOKE_READU24 :
4629
0
        if (peekpoke_tree)
4630
0
        {
4631
0
          proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x = 0x%06x)",
4632
0
                                  tvb_get_letohs (tvb, i + 1),
4633
0
                                  tvb_get_letoh24 (tvb, i + 3));
4634
0
          proto_item_set_len (peekpoke_item, 6);
4635
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, i + 3, 3, ENC_LITTLE_ENDIAN);
4636
0
        }
4637
0
        i += 3;
4638
0
        break;
4639
4640
0
      case PEEKPOKE_READU32 :
4641
0
        if (peekpoke_tree)
4642
0
        {
4643
0
          proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x = 0x%08x)",
4644
0
                                  tvb_get_letohs (tvb, i + 1),
4645
0
                                  tvb_get_letohl (tvb, i + 3));
4646
0
          proto_item_set_len (peekpoke_item, 7);
4647
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, i + 3, 4, ENC_LITTLE_ENDIAN);
4648
0
        }
4649
0
        i += 4;
4650
0
        break;
4651
4652
0
      case PEEKPOKE_READSTRING :
4653
0
        if (peekpoke_tree)
4654
0
        {
4655
0
          proto_item_append_text (peekpoke_item, "Read (%u Bytes @ 0x%04x)",
4656
0
                                  tvb_get_uint8 (tvb, i + 3),
4657
0
                                  tvb_get_letohs (tvb, i + 1));
4658
0
          proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_uint8 (tvb, i + 3));
4659
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length,     tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
4660
0
          proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, i + 4, tvb_get_uint8 (tvb, i + 3), ENC_NA);
4661
0
        }
4662
0
        i += tvb_get_uint8 (tvb, i + 3) + 1;
4663
0
        break;
4664
4665
0
      default :
4666
0
        expert_add_info(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation);
4667
0
        return;  /* quit */
4668
0
    }
4669
0
  }
4670
0
}
4671
4672
static void
4673
dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4674
0
{
4675
0
static int * const r3_lockstate_flags[] = {
4676
0
  &hf_r3_lockstate_passage,
4677
0
  &hf_r3_lockstate_panic,
4678
0
  &hf_r3_lockstate_lockout,
4679
0
  &hf_r3_lockstate_relock,
4680
0
  &hf_r3_lockstate_autoopen,
4681
0
  &hf_r3_lockstate_nextauto,
4682
0
  &hf_r3_lockstate_lockstate,
4683
0
  &hf_r3_lockstate_wantstate,
4684
0
  &hf_r3_lockstate_remote,
4685
0
  &hf_r3_lockstate_update,
4686
0
  &hf_r3_lockstate_exceptionspresent,
4687
0
  &hf_r3_lockstate_exceptionsactive,
4688
0
  &hf_r3_lockstate_timezonespresent,
4689
0
  &hf_r3_lockstate_timezonesactive,
4690
0
  &hf_r3_lockstate_autounlockspresent,
4691
0
  &hf_r3_lockstate_autounlocksactive,
4692
0
  &hf_r3_lockstate_uapmspresent,
4693
0
  &hf_r3_lockstate_uapmsactive,
4694
0
  &hf_r3_lockstate_uapmrelockspresent,
4695
0
  &hf_r3_lockstate_uapmreslocksactive,
4696
0
  &hf_r3_lockstate_nvramprotect,
4697
0
  &hf_r3_lockstate_nvramchecksum,
4698
0
  NULL
4699
0
};
4700
4701
0
 DISSECTOR_ASSERT(start_offset == 0);
4702
4703
0
 proto_tree_add_bitmask(tree, tvb, start_offset, hf_r3_lockstate, ett_r3lockstate, r3_lockstate_flags, ENC_LITTLE_ENDIAN);
4704
0
}
4705
4706
static void
4707
dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4708
0
{
4709
0
  proto_tree *cf_tree;
4710
0
  unsigned    len;
4711
0
  unsigned    items;
4712
0
  unsigned    octets;
4713
0
  unsigned    i;
4714
0
  uint8_t     step;
4715
4716
0
  DISSECTOR_ASSERT(start_offset == 0);
4717
4718
0
  len = tvb_reported_length(tvb);
4719
4720
0
  items = 0;
4721
0
  i     = 0;
4722
4723
0
  while (i < len)
4724
0
  {
4725
0
    items++;
4726
0
    octets = tvb_get_uint8 (tvb, i);
4727
0
    if (!octets)
4728
0
    {
4729
0
      proto_tree_add_expert_format(tree, pinfo, &ei_r3_malformed_length, tvb, 0, len, "Capabilities could not be decoded because length of 0 encountered");
4730
0
      return;
4731
0
    }
4732
0
    i += octets;
4733
0
  }
4734
4735
0
  if (!tree)
4736
0
    return;
4737
4738
0
  cf_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3capabilities, NULL, "Capabilities (%u items)", items);
4739
4740
0
  i = 0;
4741
0
  while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4742
0
  {
4743
0
    proto_item  *tmp_item = proto_tree_add_item (cf_tree, hf_r3_capabilities, tvb, i, tvb_get_uint8 (tvb, i), ENC_NA);
4744
0
    proto_tree  *tmp_tree = proto_item_add_subtree (tmp_item, ett_r3capabilities);
4745
0
    const char *fn;
4746
4747
0
    fn = val_to_str_ext_const (tvb_get_uint8 (tvb, i + 1), &r3_capabilitiesnames_ext, "[Unknown Field Name]");
4748
4749
0
    proto_item_append_text (tmp_item, " (%s, %u)", fn, tvb_get_letohs (tvb, i + 2));
4750
0
    proto_tree_add_item (tmp_tree, hf_r3_capabilities_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4751
0
    proto_tree_add_item (tmp_tree, hf_r3_capabilities_type,   tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4752
0
    proto_tree_add_item (tmp_tree, hf_r3_capabilities_value,  tvb, i + 2, 2, ENC_LITTLE_ENDIAN);
4753
4754
0
    i += step;
4755
0
  }
4756
0
}
4757
4758
static void
4759
dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4760
0
{
4761
0
  DISSECTOR_ASSERT(start_offset == 0);
4762
4763
0
  if (tvb_reported_length_remaining (tvb, 0) != 20)
4764
0
  {
4765
0
    expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Length of M41T81 RTC register dump not 20 octets");
4766
0
  }
4767
0
  else
4768
0
  {
4769
0
    proto_tree *rtc_tree;
4770
0
    proto_tree *tmp_tree [20];
4771
0
    unsigned    offset_in_bits;
4772
4773
0
    if (!tree)
4774
0
      return;
4775
4776
0
    rtc_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3m41t81registers, NULL, "M41T81 RTC Registers");
4777
4778
0
    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);
4779
0
    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);
4780
0
    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);
4781
0
    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);
4782
0
    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);
4783
0
    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);
4784
0
    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);
4785
0
    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);
4786
0
    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);
4787
0
    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);
4788
0
    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);
4789
0
    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);
4790
0
    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);
4791
0
    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);
4792
0
    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);
4793
0
    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);
4794
0
    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);
4795
0
    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);
4796
0
    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);
4797
0
    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);
4798
4799
0
    offset_in_bits = 0 * 8;
4800
4801
0
    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;
4802
0
    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;
4803
0
    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;
4804
0
    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;
4805
0
    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;
4806
0
    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;
4807
0
    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;
4808
0
    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;
4809
0
    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;
4810
0
    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;
4811
0
    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;
4812
0
    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;
4813
0
    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;
4814
0
    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;
4815
0
    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;
4816
0
    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;
4817
0
    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;
4818
0
    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;
4819
0
    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;
4820
0
    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;
4821
0
    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;
4822
0
    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;
4823
0
    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;
4824
0
    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;
4825
0
    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;
4826
0
    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;
4827
0
    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;
4828
0
    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;
4829
0
    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;
4830
0
    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;
4831
0
    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;
4832
0
    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;
4833
0
    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;
4834
0
    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;
4835
0
    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;
4836
0
    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;
4837
0
    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;
4838
0
    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;
4839
0
    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;
4840
0
    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;
4841
0
    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;
4842
0
    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;
4843
0
    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;
4844
0
    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;
4845
0
    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;
4846
0
    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;
4847
0
    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;
4848
0
    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;
4849
0
    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;
4850
0
    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;
4851
0
    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;
4852
0
    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;
4853
0
    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;
4854
0
    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;
4855
0
    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;
4856
0
    proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_notused,    tvb, offset_in_bits - 8, 4, ENC_LITTLE_ENDIAN);
4857
0
  }
4858
0
}
4859
4860
static void
4861
dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4862
0
{
4863
0
  if (tree)
4864
0
  {
4865
0
    DISSECTOR_ASSERT(start_offset == 0);
4866
4867
0
    proto_tree_add_item (tree, hf_r3_nvramchecksumvalue,       tvb, 0, 4, ENC_LITTLE_ENDIAN);
4868
0
    proto_tree_add_item (tree, hf_r3_nvramchecksumvalue_fixup, tvb, 4, 4, ENC_LITTLE_ENDIAN);
4869
0
  }
4870
0
}
4871
4872
static void
4873
dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
4874
0
{
4875
0
  unsigned len;
4876
4877
0
  DISSECTOR_ASSERT(start_offset == 0);
4878
4879
0
  len = tvb_reported_length(tvb);
4880
0
  if (len % 3 != 0)
4881
0
  {
4882
0
    expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Checksum results data length not modulo 3 == 0");
4883
0
  }
4884
0
  else
4885
0
  {
4886
0
    proto_tree *cksum_tree;
4887
0
    uint32_t    error = false;
4888
0
    unsigned    i;
4889
0
    uint8_t     step;
4890
4891
0
    if (!tree)
4892
0
      return;
4893
4894
0
    i = 0;
4895
0
    while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4896
0
    {
4897
0
      error |= tvb_get_uint8 (tvb, i + 2);
4898
0
      i += step;
4899
0
    }
4900
4901
0
    cksum_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3checksumresults, NULL,
4902
0
                                   "Checksum Results (%s)", error ? "Error" : "No Errors");
4903
4904
0
    i = 0;
4905
0
    while (i<len && (step=tvb_get_uint8(tvb, i))>0)
4906
0
    {
4907
0
      proto_item  *res_item = proto_tree_add_item (cksum_tree, hf_r3_checksumresults,
4908
0
                                                  tvb,
4909
0
                                                  i,
4910
0
                                                  tvb_get_uint8 (tvb, i),
4911
0
                                                  ENC_NA);
4912
0
      proto_tree  *res_tree = proto_item_add_subtree (res_item, ett_r3checksumresultsfield);
4913
0
      const char *fn;
4914
4915
0
      fn = val_to_str_ext_const (tvb_get_uint8 (tvb, i + 1), &r3_checksumresultnames_ext, "[Unknown Field Name]");
4916
4917
0
      proto_item_append_text (res_item, " %s (%s)", fn, tvb_get_uint8 (tvb, i + 2) ? "Error" : "No Error");
4918
4919
0
      proto_tree_add_item (res_tree, hf_r3_checksumresults_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
4920
0
      proto_tree_add_item (res_tree, hf_r3_checksumresults_field,  tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
4921
0
      proto_tree_add_item (res_tree, hf_r3_checksumresults_state,  tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
4922
4923
0
      i += step;
4924
0
    }
4925
0
  }
4926
0
}
4927
4928
static void
4929
dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4930
0
{
4931
0
  int len;
4932
0
  int i;
4933
4934
0
  if (!tree)
4935
0
    return;
4936
4937
0
  DISSECTOR_ASSERT(start_offset == 0);
4938
4939
0
  len = tvb_reported_length_remaining (tvb, 3);
4940
4941
0
  proto_tree_add_item (tree, hf_r3_mortisestatelog_pointer,     tvb, 0, 1, ENC_LITTLE_ENDIAN);
4942
0
  proto_tree_add_item (tree, hf_r3_mortisestatelog_mortisetype, tvb, 1, 1, ENC_LITTLE_ENDIAN);
4943
0
  proto_tree_add_item (tree, hf_r3_mortisestatelog_waiting,     tvb, 2, 1, ENC_LITTLE_ENDIAN);
4944
4945
0
  for (i = 0; i < len; i += 3)
4946
0
  {
4947
0
    unsigned    state   = tvb_get_uint8 (tvb, 3 + i + 0);
4948
0
    unsigned    last    = tvb_get_uint8 (tvb, 3 + i + 1);
4949
0
    unsigned    event   = tvb_get_uint8 (tvb, 3 + i + 2);
4950
0
    proto_tree  *ms_tree = proto_tree_add_subtree_format(tree, tvb, 3 + i, 3, ett_r3mortisestatelog, NULL,
4951
0
                                               "State Log Entry %2d (State=0x%02x, Last=0x%02x, Event=%s (0x%02x))",
4952
0
                                               i / 3,
4953
0
                                               state,
4954
0
                                               last,
4955
0
                                               val_to_str_ext_const (event, &r3_mortiseeventnames_ext, "[Unknown]"),
4956
0
                                               event);
4957
4958
0
    proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_state, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
4959
0
    proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_last,  tvb, 3 + i + 1, 1, ENC_LITTLE_ENDIAN);
4960
0
    proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_event, tvb, 3 + i + 2, 1, ENC_LITTLE_ENDIAN);
4961
0
  }
4962
0
}
4963
4964
static void
4965
dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4966
0
{
4967
0
  proto_tree *iopins_tree;
4968
4969
0
  if (!tree)
4970
0
    return;
4971
4972
0
  DISSECTOR_ASSERT(start_offset == 0);
4973
4974
0
  iopins_tree = proto_tree_add_subtree_format(tree, tvb, 0, 1, ett_r3iopins, NULL,
4975
0
                                     "Mortise Pin States (0x%02x)", tvb_get_uint8 (tvb, 0));
4976
4977
0
  proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s1, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4978
0
  proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s2, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4979
0
  proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s3, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4980
0
  proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s4, tvb, 0, 1, ENC_LITTLE_ENDIAN);
4981
0
}
4982
4983
static void
4984
dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4985
0
{
4986
0
  if (!tree)
4987
0
    return;
4988
4989
0
  DISSECTOR_ASSERT(start_offset == 0);
4990
4991
0
  proto_tree_add_item (tree, hf_r3_testkeypad, tvb, 0, 1, ENC_ASCII);
4992
0
}
4993
4994
static void
4995
dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
4996
0
{
4997
0
  DISSECTOR_ASSERT(start_offset == 0);
4998
4999
0
  proto_tree_add_item (tree, hf_r3_testmagcard, tvb, 0, -1, ENC_ASCII);
5000
0
}
5001
5002
static void
5003
dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5004
0
{
5005
0
  DISSECTOR_ASSERT(start_offset == 0);
5006
5007
0
  proto_tree_add_item (tree, hf_r3_testproxcard, tvb, 0, -1, ENC_ASCII);
5008
0
}
5009
5010
/*
5011
 * ***************************************************************************
5012
 *
5013
 *  This is passed a tvb that contains [length] [CMD_RESPONSE] [responseType_e] [cmdCommand_e]
5014
 */
5015
static void
5016
dissect_r3_response_singlebyte (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5017
188
{
5018
188
  if (tree)
5019
188
  {
5020
188
    proto_tree_add_item (tree, hf_r3_responsetype,      tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
5021
188
    proto_tree_add_item (tree, hf_r3_responsetocommand, tvb, start_offset + 3, 1, ENC_LITTLE_ENDIAN);
5022
188
  }
5023
188
}
5024
5025
/*
5026
 *  This is passed a tvb that contains [length] [CMD_RESPONSE] [RESPONSETYPE_HASDATA] [UPSTREAMCOMMAND_*]
5027
 */
5028
static void
5029
dissect_r3_response_hasdata (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5030
44
{
5031
44
  uint32_t     commandPacketLen;
5032
44
  uint8_t      upstreamCmd;
5033
5034
44
  DISSECTOR_ASSERT(start_offset == 0);
5035
5036
44
  tvb_ensure_bytes_exist (tvb, 0, 4);
5037
5038
44
  commandPacketLen    = tvb_get_uint8 (tvb, 0);
5039
44
  upstreamCmd         = tvb_get_uint8 (tvb, 3);
5040
5041
44
  if (tvb_get_uint8 (tvb, 1) != CMD_RESPONSE)
5042
0
    expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_1);
5043
44
  else if (tvb_get_uint8 (tvb, 2) != RESPONSETYPE_HASDATA)
5044
0
    expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_2);
5045
44
  else if (upstreamCmd >= UPSTREAMCOMMAND_LAST)
5046
5
    expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5047
39
  else
5048
39
  {
5049
39
    proto_tree *upstreamcommand_tree = NULL;
5050
39
    tvbuff_t   *upstreamcommand_tvb;
5051
5052
39
    if (tree)
5053
37
    {
5054
37
      const char *ct;
5055
37
      ct = val_to_str_ext_const (upstreamCmd, &r3_upstreamcommandnames_ext, "[Unknown Command Type]");
5056
5057
37
      proto_tree_add_item (tree, hf_r3_responsetype, tvb, 2, 1, ENC_LITTLE_ENDIAN);
5058
5059
37
      upstreamcommand_tree = proto_tree_add_subtree_format(tree, tvb, 3, -1, ett_r3upstreamcommand, NULL,
5060
37
                                                  "Upstream Command: %s (%u)", ct, upstreamCmd);
5061
5062
37
      proto_tree_add_item (upstreamcommand_tree, hf_r3_upstreamcommand, tvb, 3, 1, ENC_LITTLE_ENDIAN);
5063
37
    }
5064
39
    tvb_ensure_bytes_exist (tvb, 0, commandPacketLen - 4);
5065
5066
39
    upstreamcommand_tvb = tvb_new_subset_length (tvb, 4, commandPacketLen - 4);
5067
39
    if (r3upstreamcommand_dissect [upstreamCmd])
5068
34
      (*r3upstreamcommand_dissect [upstreamCmd]) (upstreamcommand_tvb, 0, commandPacketLen - 4, pinfo, upstreamcommand_tree);
5069
39
  }
5070
44
}
5071
5072
/*
5073
 * ***************************************************************************
5074
 *
5075
 *  These are passed a tvb that starts with [length] [CMD_RESPONSE] ...
5076
 */
5077
static void
5078
dissect_r3_cmd_response (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
5079
307
{
5080
307
  uint8_t         responseLen  = tvb_get_uint8 (tvb, start_offset + 0);
5081
307
  responseType_e  responseType = (responseType_e)tvb_get_uint8 (tvb, start_offset + 2);
5082
307
  tvbuff_t       *payload_tvb  = tvb_new_subset_length (tvb, start_offset, responseLen);
5083
5084
307
  if (tree)
5085
307
  {
5086
307
    const char *rt;
5087
5088
307
    rt = val_to_str_ext_const (responseType, &r3_responsetypenames_ext, "[Unknown Response Type]");
5089
5090
307
    proto_item_set_text (proto_tree_get_parent (tree), "Response Packet: %s (%u)", rt, responseType);
5091
307
    proto_tree_add_item (tree, hf_r3_responselength,  tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5092
307
    proto_tree_add_item (tree, hf_r3_responsecommand, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5093
307
  }
5094
5095
307
  if (responseType >= RESPONSETYPE_LAST)
5096
75
  {
5097
75
    expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
5098
75
  }
5099
232
  else if (r3response_dissect [responseType])
5100
232
    (*r3response_dissect [responseType]) (payload_tvb, 0, length, pinfo, tree);
5101
307
}
5102
5103
/*
5104
 *  These are passed a tvb that contains [length] [cmdCommand_e] [[data]]
5105
 */
5106
static void
5107
dissect_r3_cmd_handshake (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5108
426
{
5109
426
  if (tree)
5110
426
  {
5111
426
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5112
426
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5113
426
  }
5114
426
}
5115
5116
static void
5117
dissect_r3_cmd_killsession (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5118
188
{
5119
188
  if (tree)
5120
188
  {
5121
188
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5122
188
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5123
188
  }
5124
188
}
5125
5126
static void
5127
dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5128
164
{
5129
164
  if (tree)
5130
164
  {
5131
164
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5132
164
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5133
164
  }
5134
164
}
5135
5136
static void
5137
dissect_r3_cmd_queryversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5138
95
{
5139
95
  if (tree)
5140
95
  {
5141
95
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5142
95
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5143
95
  }
5144
95
}
5145
5146
static void
5147
dissect_r3_cmd_setdatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5148
15
{
5149
15
  proto_tree *dt_tree;
5150
15
  uint8_t     cmdLen;
5151
15
  tvbuff_t   *payload_tvb;
5152
5153
15
  if (!tree)
5154
0
    return;
5155
5156
15
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5157
15
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5158
5159
15
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5160
15
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5161
5162
15
  dt_tree = proto_tree_add_subtree_format (tree, payload_tvb, 0, -1, ett_r3setdatetime, NULL,
5163
15
                                 "Set Date/Time (%02u/%02u/%02u-%u %02u:%02u:%02u)",
5164
15
                                 tvb_get_uint8 (payload_tvb, 0),
5165
15
                                 tvb_get_uint8 (payload_tvb, 1),
5166
15
                                 tvb_get_uint8 (payload_tvb, 2),
5167
15
                                 tvb_get_uint8 (payload_tvb, 3),
5168
15
                                 tvb_get_uint8 (payload_tvb, 4),
5169
15
                                 tvb_get_uint8 (payload_tvb, 5),
5170
15
                                 tvb_get_uint8 (payload_tvb, 6));
5171
5172
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_year,    payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5173
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_month,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5174
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_day,     payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5175
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_dow,     payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5176
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_hours,   payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5177
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_minutes, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5178
15
  proto_tree_add_item (dt_tree, hf_r3_setdate_seconds, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5179
15
}
5180
5181
static void
5182
dissect_r3_cmd_querydatetime (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5183
72
{
5184
72
  if (tree)
5185
72
  {
5186
72
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5187
72
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5188
72
  }
5189
72
}
5190
5191
static void
5192
dissect_r3_cmd_setconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5193
158
{
5194
158
  unsigned  cmdLen;
5195
158
  tvbuff_t *payload_tvb;
5196
158
  uint32_t  offset = 0;
5197
5198
158
  if (!tree)
5199
0
    return;
5200
5201
158
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5202
158
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5203
5204
158
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5205
158
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5206
5207
546
  while (offset < (cmdLen - 2))
5208
411
  {
5209
411
    proto_item  *sc_item;
5210
411
    proto_tree  *sc_tree;
5211
411
    const char *ci;
5212
411
    uint8_t      configItem;
5213
411
    uint8_t      item_length;
5214
5215
411
    configItem = tvb_get_uint8 (payload_tvb, offset + 1);
5216
5217
411
    ci = val_to_str_ext_const (
5218
411
      configItem,
5219
411
      &r3_configitemnames_ext,
5220
411
      "[Unknown Configuration Item]");
5221
5222
411
    item_length = tvb_get_uint8 (payload_tvb, offset + 0);
5223
411
    sc_tree = proto_tree_add_subtree_format(tree, payload_tvb, offset + 0, item_length,
5224
411
                                   ett_r3upstreamfield, NULL, "Config Field: %s (%u)", ci, configItem);
5225
5226
411
    sc_item = proto_tree_add_item (sc_tree, hf_r3_configitemlength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5227
411
    proto_tree_add_item (sc_tree, hf_r3_configitem,       payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5228
411
    if (item_length == 0) {
5229
20
      expert_add_info_format(pinfo, sc_item, &ei_r3_malformed_length, "Invalid item length");
5230
20
      return;
5231
20
    }
5232
5233
391
    if (configItem < array_length (configMap))
5234
345
    {
5235
345
      switch (configMap [configItem])
5236
345
      {
5237
0
        case CONFIGTYPE_NONE :
5238
0
          proto_tree_add_item (sc_tree, hf_r3_configitemdata, payload_tvb, offset + 2, item_length - 3, ENC_NA);
5239
0
          break;
5240
5241
133
        case CONFIGTYPE_BOOL :
5242
133
          proto_tree_add_item (sc_tree, hf_r3_configitemdata_bool,   payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5243
133
          break;
5244
5245
30
        case CONFIGTYPE_8 :
5246
30
          proto_tree_add_item (sc_tree, hf_r3_configitemdata_8,      payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5247
30
          break;
5248
5249
97
        case CONFIGTYPE_16 :
5250
97
          proto_tree_add_item (sc_tree, hf_r3_configitemdata_16,     payload_tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
5251
97
          break;
5252
5253
0
        case CONFIGTYPE_32 :
5254
0
          proto_tree_add_item (sc_tree, hf_r3_configitemdata_32,     payload_tvb, offset + 2, 4, ENC_LITTLE_ENDIAN);
5255
0
          break;
5256
5257
85
        case CONFIGTYPE_STRING :
5258
85
          proto_tree_add_item (sc_tree, hf_r3_configitemdata_string, payload_tvb, offset + 2,
5259
85
                               item_length - 2, ENC_ASCII);
5260
85
          break;
5261
5262
0
        default :
5263
0
          proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
5264
0
                                      item_length - 2, "Unknown Field Type");
5265
0
          break;
5266
345
      }
5267
345
    }
5268
46
    else {
5269
46
      proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
5270
46
                                      item_length - 2, "Unknown Field Type");
5271
46
    }
5272
5273
388
    offset += item_length;
5274
388
  }
5275
158
}
5276
5277
static void
5278
dissect_r3_cmd_getconfig (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5279
102
{
5280
102
  proto_item *config_item;
5281
102
  proto_tree *config_tree;
5282
102
  uint32_t    cmdLen;
5283
102
  uint32_t    i;
5284
5285
102
  if (!tree)
5286
0
    return;
5287
5288
102
  cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
5289
5290
102
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5291
102
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5292
5293
102
  config_item = proto_tree_add_item (tree, hf_r3_configitems, tvb, start_offset + 2, cmdLen - 2, ENC_NA);
5294
102
  config_tree = proto_item_add_subtree (config_item, ett_r3configitem);
5295
5296
1.01k
  for (i = 2; i < cmdLen; i++)
5297
917
    proto_tree_add_item (config_tree, hf_r3_configitem, tvb, start_offset + i, 1, ENC_LITTLE_ENDIAN);
5298
102
}
5299
5300
static void
5301
dissect_r3_cmd_manageuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5302
313
{
5303
313
  uint8_t   cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5304
313
  tvbuff_t *payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5305
313
  uint32_t  offset      = 0;
5306
5307
313
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5308
313
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5309
5310
1.85k
  while (offset < tvb_reported_length (payload_tvb))
5311
1.63k
  {
5312
1.63k
    uint32_t     paramLength = tvb_get_uint8 (payload_tvb, offset + 0);
5313
1.63k
    uint32_t     paramType   = tvb_get_uint8 (payload_tvb, offset + 1);
5314
1.63k
    uint32_t     dataLength  = paramLength - 2;
5315
1.63k
    proto_tree  *mu_tree     = NULL;
5316
1.63k
    proto_item  *len_field   = NULL;
5317
5318
1.63k
    if (tree)
5319
1.55k
    {
5320
1.55k
      const char *auptn;
5321
1.55k
      auptn = val_to_str_ext_const (paramType, &r3_adduserparamtypenames_ext, "[Unknown Field]");
5322
5323
1.55k
      mu_tree = proto_item_add_subtree (
5324
1.55k
        proto_tree_add_none_format (tree, hf_r3_adduserparamtype, payload_tvb, offset + 0, paramLength,
5325
1.55k
                                    "Manage User Field: %s (%u)", auptn, paramType), ett_r3manageuser);
5326
5327
1.55k
      len_field = proto_tree_add_item (mu_tree, hf_r3_adduserparamtypelength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5328
1.55k
      proto_tree_add_item (mu_tree, hf_r3_adduserparamtypetype, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5329
1.55k
    }
5330
5331
1.63k
    if (paramLength < 2)
5332
683
    {
5333
683
      dataLength = 0;
5334
683
      expert_add_info_format(pinfo, len_field, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
5335
683
    }
5336
5337
1.63k
    offset += 2;
5338
5339
1.63k
    switch (paramType)
5340
1.63k
    {
5341
431
      case ADDUSERPARAMTYPE_DISPOSITION :
5342
465
      case ADDUSERPARAMTYPE_ACCESSALWAYS :
5343
564
      case ADDUSERPARAMTYPE_ACCESSMODE :
5344
603
      case ADDUSERPARAMTYPE_CACHED :
5345
702
      case ADDUSERPARAMTYPE_USERTYPE :
5346
742
      case ADDUSERPARAMTYPE_PRIMARYFIELDTYPE :
5347
955
      case ADDUSERPARAMTYPE_AUXFIELDTYPE :
5348
993
      case ADDUSERPARAMTYPE_USECOUNT :
5349
1.01k
      case ADDUSERPARAMTYPE_EXCEPTIONGROUP :
5350
1.01k
        if (dataLength != 1)
5351
909
        {
5352
909
          expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 1 octet");
5353
909
        }
5354
102
        else
5355
102
          proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5356
1.01k
        break;
5357
5358
194
      case ADDUSERPARAMTYPE_USERNO :
5359
194
        if (dataLength != 2)
5360
193
        {
5361
193
          expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 2 octets");
5362
193
        }
5363
1
        else
5364
1
          proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
5365
194
        break;
5366
5367
13
      case ADDUSERPARAMTYPE_PRIMARYFIELD :
5368
42
      case ADDUSERPARAMTYPE_AUXFIELD :
5369
42
        proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_NA);
5370
42
        break;
5371
5372
17
      case ADDUSERPARAMTYPE_EXPIREON :
5373
17
        {
5374
17
          if (dataLength != 3)
5375
16
          {
5376
16
            expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
5377
16
          }
5378
1
          else
5379
1
          {
5380
1
            proto_tree *expireon_tree;
5381
5382
1
            if (!tree)
5383
0
              break;
5384
5385
1
            expireon_tree = proto_tree_add_subtree_format(mu_tree, payload_tvb, offset, 3,
5386
1
                                                 ett_r3expireon, NULL,
5387
1
                                                 "Expire YY/MM/DD: %02u/%02u/%02u",
5388
1
                                                 tvb_get_uint8 (payload_tvb, offset + 2),
5389
1
                                                 tvb_get_uint8 (payload_tvb, offset + 0),
5390
1
                                                 tvb_get_uint8 (payload_tvb, offset + 1));
5391
5392
1
            proto_tree_add_item (expireon_tree, hf_r3_expireon_month, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5393
1
            proto_tree_add_item (expireon_tree, hf_r3_expireon_day,   payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5394
1
            proto_tree_add_item (expireon_tree, hf_r3_expireon_year,  payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5395
1
          }
5396
17
        }
5397
17
        break;
5398
5399
21
      case ADDUSERPARAMTYPE_TIMEZONE :
5400
21
        {
5401
21
          if (dataLength != 4)
5402
21
          {
5403
21
            expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
5404
21
          }
5405
0
          else
5406
0
          {
5407
0
            proto_tree_add_bitmask(mu_tree, payload_tvb, offset, hf_r3_adduserparamtypearray[paramType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
5408
0
          }
5409
21
        }
5410
21
        break;
5411
5412
272
      default :
5413
272
        proto_tree_add_none_format (mu_tree, hf_r3_upstreamfielderror, payload_tvb, offset, dataLength, "Unknown Field Type");
5414
272
        break;
5415
1.63k
    }
5416
5417
1.54k
    offset += dataLength;
5418
1.54k
  }
5419
313
}
5420
5421
static void
5422
dissect_r3_cmd_deleteusers (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5423
57
{
5424
57
  uint8_t   cmdLen;
5425
57
  tvbuff_t *payload_tvb;
5426
5427
57
  if (!tree)
5428
0
    return;
5429
5430
57
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5431
57
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5432
5433
57
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5434
57
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5435
5436
57
  proto_tree_add_item (tree, hf_r3_deleteusers, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5437
57
}
5438
5439
static void
5440
dissect_r3_cmd_defineexception (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5441
69
{
5442
69
  proto_tree *startdate_tree;
5443
69
  proto_tree *enddate_tree;
5444
69
  uint8_t     cmdLen;
5445
69
  tvbuff_t   *payload_tvb;
5446
5447
69
  if (!tree)
5448
0
    return;
5449
5450
69
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5451
69
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5452
5453
69
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5454
69
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5455
5456
69
  proto_tree_add_item (tree, hf_r3_defineexception_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5457
5458
69
  startdate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 4,
5459
69
                                        ett_r3defineexceptionstartdate, NULL,
5460
69
                                        "Start MM/DD HH:MM (%02u/%02u %02u:%02u)",
5461
69
                                        tvb_get_uint8 (payload_tvb, 1),
5462
69
                                        tvb_get_uint8 (payload_tvb, 2),
5463
69
                                        tvb_get_uint8 (payload_tvb, 3),
5464
69
                                        tvb_get_uint8 (payload_tvb, 4));
5465
69
  proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_month,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5466
69
  proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_day,     payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5467
69
  proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_hours,   payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5468
69
  proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5469
5470
69
  enddate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 4,
5471
69
                                        ett_r3defineexceptionenddate, NULL,
5472
69
                                      "End MM/DD HH:MM (%02u/%02u %02u:%02u)",
5473
69
                                      tvb_get_uint8 (payload_tvb, 5),
5474
69
                                      tvb_get_uint8 (payload_tvb, 6),
5475
69
                                      tvb_get_uint8 (payload_tvb, 7),
5476
69
                                      tvb_get_uint8 (payload_tvb, 8));
5477
69
  proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_month,   payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5478
69
  proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_day,     payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5479
69
  proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_hours,   payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5480
69
  proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_minutes, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5481
69
}
5482
5483
static void
5484
dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5485
100
{
5486
100
  proto_tree *bits_tree;
5487
100
  unsigned    cmdLen;
5488
100
  tvbuff_t   *payload_tvb;
5489
100
  uint32_t    i;
5490
100
  uint32_t    bit = 0;
5491
5492
100
  if (!tree)
5493
0
    return;
5494
5495
100
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5496
100
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5497
5498
100
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5499
100
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5500
5501
100
  proto_tree_add_item (tree, hf_r3_defineexceptiongroup_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5502
5503
100
  bits_tree = proto_tree_add_subtree(tree, payload_tvb, 1, -1, ett_r3defineexceptiongroupbits, NULL, "Exception Group Bit Field");
5504
5505
1.88k
  for (i = 1; i < (cmdLen - 2); i++)
5506
1.78k
  {
5507
1.78k
    uint32_t j;
5508
1.78k
    uint8_t byte = tvb_get_uint8 (payload_tvb, i);
5509
5510
15.5k
    for (j = 0; j < 8; j++)
5511
13.7k
      proto_tree_add_none_format (bits_tree, hf_r3_defineexceptiongroup_bits, payload_tvb, i, 1,
5512
13.7k
                                  "Exception Group %2d: %s", bit++, (byte & (1 << j)) ? "Enabled" : "Disabled");
5513
1.78k
  }
5514
100
}
5515
5516
static void
5517
dissect_r3_cmd_definecalendar (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5518
172
{
5519
172
  uint8_t      cmdLen;
5520
172
  tvbuff_t    *payload_tvb;
5521
172
  const char *mn;
5522
172
  uint32_t     i;
5523
5524
172
  if (!tree)
5525
0
    return;
5526
5527
172
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5528
172
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5529
5530
172
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5531
172
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5532
5533
172
  proto_tree_add_item (tree, hf_r3_definecalendar_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5534
5535
606
  for (i = 0; i < 12; i++)
5536
434
  {
5537
434
    uint32_t    daymap = tvb_get_letohl (payload_tvb, (i * 4) + 1);
5538
434
    proto_tree *calendar_tree = proto_tree_add_subtree_format(tree, payload_tvb, (i * 4) + 1, 4,
5539
434
                                                     ett_r3definecalendarmonth [i + 1], NULL,
5540
434
                                                     "Calendar Bit Field - %s (0x%08x)",
5541
434
                                                     (mn = val_to_str_ext_const (i + 1, &r3_monthnames_ext, "[Unknown Month]")),
5542
434
                                                     daymap);
5543
434
    uint32_t    j;
5544
5545
8.68k
    for (j = 0; j < 31; j++)
5546
8.24k
      proto_tree_add_none_format (calendar_tree, hf_r3_definecalendar_bits, payload_tvb, (i * 4) + 1, 4,
5547
8.24k
                                  "%s Of %s: %s",
5548
8.24k
                                  val_to_str_ext_const (j + 1, &r3_monthdaynames_ext, "[Unknown Day]"),
5549
8.24k
                                  mn,
5550
8.24k
                                  (daymap & (1 << j)) ? "Enabled" : "Disabled");
5551
434
  }
5552
172
}
5553
5554
static void
5555
dissect_r3_cmd_definetimezone (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5556
69
{
5557
69
  proto_tree *starttime_tree;
5558
69
  proto_tree *endtime_tree;
5559
69
  uint8_t     cmdLen;
5560
69
  tvbuff_t   *payload_tvb;
5561
69
  uint8_t     tzmode;
5562
5563
69
  if (!tree)
5564
0
    return;
5565
5566
69
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5567
69
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5568
5569
69
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5570
69
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5571
5572
69
  proto_tree_add_item (tree, hf_r3_definetimezone_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5573
5574
69
  starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 2,
5575
69
                                        ett_r3definetimezonestarttime, NULL,
5576
69
                                        "Start HH:MM (%02u:%02u)",
5577
69
                                        tvb_get_uint8 (payload_tvb, 1),
5578
69
                                        tvb_get_uint8 (payload_tvb, 2));
5579
69
  proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_hours,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5580
69
  proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_minutes, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5581
5582
69
  endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 3, 2,
5583
69
                                      ett_r3definetimezoneendtime, NULL,
5584
69
                                      "End HH:MM (%02u:%02u)",
5585
69
                                      tvb_get_uint8 (payload_tvb, 3),
5586
69
                                      tvb_get_uint8 (payload_tvb, 4));
5587
69
  proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_hours,   payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5588
69
  proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5589
5590
69
  proto_tree_add_bitmask(tree, payload_tvb, 5, hf_r3_definetimezone_daymap, ett_r3definetimezonedaymap, r3_definetimezone_daymap, ENC_NA);
5591
5592
69
  proto_tree_add_item (tree, hf_r3_definetimezone_exceptiongroup, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5593
69
  proto_tree_add_uint (tree, hf_r3_definetimezone_mode, payload_tvb, 7, 1,
5594
69
                       (tzmode = tvb_get_uint8 (payload_tvb, 7)) & 0x0f);
5595
69
  proto_tree_add_none_format (tree, hf_r3_definetimezone_calendar, payload_tvb, 7, 1,
5596
69
                              "Access Always: %s", (tzmode & 0x10) ? "True" : "False");
5597
69
}
5598
5599
static void
5600
dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5601
43
{
5602
43
  uint8_t   cmdLen;
5603
43
  tvbuff_t *payload_tvb;
5604
5605
43
  if (!tree)
5606
0
    return;
5607
5608
43
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5609
43
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5610
5611
43
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5612
43
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5613
5614
43
  proto_tree_add_item (tree, hf_r3_rmtauthretry_sequence, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5615
43
  proto_tree_add_item (tree, hf_r3_rmtauthretry_retry,    payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5616
43
}
5617
5618
static void
5619
dissect_r3_cmd_filters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5620
120
{
5621
120
  proto_tree *filter_tree;
5622
120
  uint8_t     cmdLen;
5623
120
  tvbuff_t   *payload_tvb;
5624
120
  uint32_t    i;
5625
5626
120
  if (!tree)
5627
0
    return;
5628
5629
120
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5630
120
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5631
5632
120
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5633
120
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5634
5635
120
  proto_tree_add_item (tree, hf_r3_filter_type, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5636
5637
120
  filter_tree = proto_tree_add_subtree_format(tree, payload_tvb, 2, -1, ett_r3filters, NULL,
5638
120
                                     "Filters (%u specified)", tvb_get_uint8 (payload_tvb, 0));
5639
5640
1.45k
  for (i = 0; i < tvb_get_uint8 (payload_tvb, 0); i++)
5641
1.33k
    proto_tree_add_item (filter_tree, hf_r3_filter_list, payload_tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
5642
120
}
5643
5644
static void
5645
dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5646
69
{
5647
69
  proto_item *alarm_item;
5648
69
  proto_tree *alarm_tree;
5649
69
  unsigned    cmdLen;
5650
69
  tvbuff_t   *payload_tvb;
5651
69
  uint32_t    offset = 0;
5652
69
  uint32_t    alarms = 0;
5653
5654
69
  if (!tree)
5655
0
    return;
5656
5657
69
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5658
69
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5659
5660
69
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5661
69
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5662
5663
69
  alarm_tree = proto_tree_add_subtree(tree, payload_tvb, 0, -1, ett_r3alarmlist, &alarm_item, "Alarm List (0 items)");
5664
5665
276
  while (offset < (cmdLen - 2))
5666
216
  {
5667
216
    proto_item  *pi;
5668
216
    proto_tree  *alarmcfg_tree;
5669
216
    const char *ai;
5670
216
    const char *as;
5671
216
    uint32_t alarm_len;
5672
5673
216
    if (!(ai = try_val_to_str_ext (tvb_get_uint8 (payload_tvb, offset + 1), &r3_alarmidnames_ext)))
5674
121
    {
5675
121
      ai = "[Unknown Alarm ID]";
5676
121
      as = "N/A";
5677
121
    }
5678
95
    else
5679
95
      as = (tvb_get_uint8 (payload_tvb, offset + 2) & 0xfe) ?
5680
53
        "Error" : (tvb_get_uint8 (payload_tvb, offset + 2) & 0x01) ? "Enabled" : "Disabled";
5681
5682
216
    alarmcfg_tree = proto_tree_add_subtree_format(alarm_tree, payload_tvb, offset, tvb_get_uint8 (payload_tvb, offset),
5683
216
                                         ett_r3alarmcfg, NULL, "Alarm Item (%s, %s)", ai, as);
5684
5685
216
    alarm_len = tvb_get_uint8 (payload_tvb, offset + 0);
5686
216
    pi = proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_length, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
5687
216
    if (alarm_len == 0) {
5688
9
      expert_add_info_format (pinfo, pi, &ei_r3_malformed_length,
5689
9
                              "Alarm length equal to 0. Payload could be partially decoded");
5690
9
      break;
5691
9
    }
5692
5693
207
    proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_id,     payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
5694
207
    proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_state,  payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
5695
5696
207
    alarms++;
5697
207
    offset += alarm_len;
5698
207
  }
5699
5700
69
  if (alarms)
5701
50
    proto_item_set_text (alarm_item, "Alarm List (%d items)", alarms);
5702
69
}
5703
5704
static void
5705
dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5706
18
{
5707
18
  proto_tree *starttime_tree;
5708
18
  proto_tree *endtime_tree;
5709
18
  uint8_t     cmdLen;
5710
18
  tvbuff_t   *payload_tvb;
5711
5712
18
  if (!tree)
5713
0
    return;
5714
5715
18
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5716
18
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5717
5718
18
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5719
18
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5720
5721
18
  starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5722
18
                                        ett_r3eventlogdumpstarttime, NULL,
5723
18
                                        "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5724
18
                                        tvb_get_uint8 (payload_tvb, 0),
5725
18
                                        tvb_get_uint8 (payload_tvb, 1),
5726
18
                                        tvb_get_uint8 (payload_tvb, 2),
5727
18
                                        tvb_get_uint8 (payload_tvb, 3),
5728
18
                                        tvb_get_uint8 (payload_tvb, 4));
5729
18
  proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_year,    payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5730
18
  proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_month,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5731
18
  proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_day,     payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5732
18
  proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_hours,   payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5733
18
  proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5734
5735
18
  endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5736
18
                                      ett_r3eventlogdumpendtime, NULL,
5737
18
                                      "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5738
18
                                      tvb_get_uint8 (payload_tvb, 5),
5739
18
                                      tvb_get_uint8 (payload_tvb, 6),
5740
18
                                      tvb_get_uint8 (payload_tvb, 7),
5741
18
                                      tvb_get_uint8 (payload_tvb, 8),
5742
18
                                      tvb_get_uint8 (payload_tvb, 9));
5743
18
  proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_year,    payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5744
18
  proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_month,   payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5745
18
  proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_day,     payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5746
18
  proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_hours,   payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5747
18
  proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5748
5749
18
  proto_tree_add_item (tree, hf_r3_eventlogdump_user, payload_tvb, 10, 2, ENC_LITTLE_ENDIAN);
5750
18
}
5751
5752
static void
5753
dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5754
38
{
5755
38
  proto_tree *starttime_tree;
5756
38
  proto_tree *endtime_tree;
5757
38
  uint8_t     cmdLen;
5758
38
  tvbuff_t   *payload_tvb;
5759
5760
38
  if (!tree)
5761
0
    return;
5762
5763
38
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5764
38
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5765
5766
38
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5767
38
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5768
5769
38
  starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5770
38
                                        ett_r3declinedlogdumpstarttime, NULL,
5771
38
                                        "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5772
38
                                        tvb_get_uint8 (payload_tvb, 0),
5773
38
                                        tvb_get_uint8 (payload_tvb, 1),
5774
38
                                        tvb_get_uint8 (payload_tvb, 2),
5775
38
                                        tvb_get_uint8 (payload_tvb, 3),
5776
38
                                        tvb_get_uint8 (payload_tvb, 4));
5777
38
  proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_year,    payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5778
38
  proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_month,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5779
38
  proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_day,     payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5780
38
  proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_hours,   payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5781
38
  proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5782
5783
38
  endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5784
38
                                      ett_r3declinedlogdumpendtime, NULL,
5785
38
                                      "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5786
38
                                      tvb_get_uint8 (payload_tvb, 5),
5787
38
                                      tvb_get_uint8 (payload_tvb, 6),
5788
38
                                      tvb_get_uint8 (payload_tvb, 7),
5789
38
                                      tvb_get_uint8 (payload_tvb, 8),
5790
38
                                      tvb_get_uint8 (payload_tvb, 9));
5791
38
  proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_year,    payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5792
38
  proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_month,   payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5793
38
  proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_day,     payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5794
38
  proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_hours,   payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5795
38
  proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5796
38
}
5797
5798
static void
5799
dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5800
29
{
5801
29
  proto_tree *starttime_tree;
5802
29
  proto_tree *endtime_tree;
5803
29
  uint8_t     cmdLen;
5804
29
  tvbuff_t   *payload_tvb;
5805
5806
29
  if (!tree)
5807
0
    return;
5808
5809
29
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5810
29
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5811
5812
29
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5813
29
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5814
5815
29
  starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
5816
29
                                        ett_r3alarmlogdumpstarttime, NULL,
5817
29
                                        "Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5818
29
                                        tvb_get_uint8 (payload_tvb, 0),
5819
29
                                        tvb_get_uint8 (payload_tvb, 1),
5820
29
                                        tvb_get_uint8 (payload_tvb, 2),
5821
29
                                        tvb_get_uint8 (payload_tvb, 3),
5822
29
                                        tvb_get_uint8 (payload_tvb, 4));
5823
29
  proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_year,    payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5824
29
  proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_month,   payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
5825
29
  proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_day,     payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
5826
29
  proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_hours,   payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
5827
29
  proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5828
5829
29
  endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
5830
29
                                      ett_r3alarmlogdumpendtime, NULL,
5831
29
                                      "End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
5832
29
                                      tvb_get_uint8 (payload_tvb, 5),
5833
29
                                      tvb_get_uint8 (payload_tvb, 6),
5834
29
                                      tvb_get_uint8 (payload_tvb, 7),
5835
29
                                      tvb_get_uint8 (payload_tvb, 8),
5836
29
                                      tvb_get_uint8 (payload_tvb, 9));
5837
29
  proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_year,    payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5838
29
  proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_month,   payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5839
29
  proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_day,     payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
5840
29
  proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_hours,   payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
5841
29
  proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5842
29
}
5843
5844
static void
5845
dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5846
54
{
5847
54
  proto_item *dlfw_item = NULL;
5848
54
  proto_item *dlfw_action_item = NULL;
5849
54
  proto_tree *dlfw_tree = NULL;
5850
54
  uint8_t     cmdLen;
5851
54
  tvbuff_t   *payload_tvb;
5852
54
  uint32_t    packetCRC;
5853
54
  uint32_t    calculatedCRC;
5854
5855
54
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5856
54
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5857
5858
54
  if (tree)
5859
54
  {
5860
54
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5861
54
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5862
5863
54
    dlfw_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, -1, ett_r3downloadfirmware, &dlfw_item,
5864
54
                                     "Download Record (Record #%u, ", tvb_get_letohs (payload_tvb, 2));
5865
5866
54
    proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_length, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
5867
54
    proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_record, payload_tvb, 2, 2, ENC_LITTLE_ENDIAN);
5868
54
    dlfw_action_item = proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_action, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
5869
54
  }
5870
5871
54
  switch (tvb_get_uint8 (payload_tvb, 4))
5872
54
  {
5873
6
    case DOWNLOADFIRMWARE_START :
5874
6
      if (!dlfw_tree)
5875
0
        break;
5876
6
      proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_START)");
5877
6
      proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_timeout, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
5878
6
      proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_nvram,   payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
5879
6
      break;
5880
5881
1
    case DOWNLOADFIRMWARE_DATA :
5882
1
      if (!dlfw_tree)
5883
0
        break;
5884
1
      proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_DATA, Address 0x%08x, %u Bytes)",
5885
1
                              tvb_get_letohl (payload_tvb, 5), tvb_get_uint8 (payload_tvb, 9));
5886
1
      proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_address, payload_tvb, 5, 4, ENC_LITTLE_ENDIAN);
5887
1
      proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_bytes,   payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
5888
1
      proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_data,    payload_tvb, 10,
5889
1
                           tvb_get_uint8 (payload_tvb, 9), ENC_NA);
5890
1
      break;
5891
5892
0
    case DOWNLOADFIRMWARE_COMPLETE :
5893
0
      if (!dlfw_tree)
5894
0
        break;
5895
0
      proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_COMPLETE)");
5896
0
      break;
5897
5898
1
    case DOWNLOADFIRMWARE_ABORT :
5899
1
      if (!dlfw_tree)
5900
0
        break;
5901
1
      proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_ABORT)");
5902
1
      break;
5903
5904
1
    case DOWNLOADFIRMWARE_RESET :
5905
1
      if (!dlfw_tree)
5906
0
        break;
5907
1
      proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_RESET)");
5908
1
      break;
5909
5910
27
    default :
5911
27
      expert_add_info(pinfo, dlfw_action_item, &ei_r3_firmwaredownload_action);
5912
27
      return;  /* quit */
5913
54
  }
5914
5915
8
  if (!dlfw_tree)
5916
0
    return;
5917
5918
8
  packetCRC = tvb_get_letohs (payload_tvb, cmdLen - 2 - 2);
5919
5920
8
  if ((calculatedCRC = crc16_r3_ccitt_tvb(payload_tvb, 0, cmdLen - 2 - 2)) == packetCRC)
5921
0
    proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5922
0
                                cmdLen - 2 - 2, 2,
5923
0
                                packetCRC, "0x%04x (correct)", packetCRC);
5924
8
  else
5925
8
  {
5926
8
    proto_item *tmp_item;
5927
5928
8
    proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
5929
8
                                cmdLen - 2 - 2, 2,
5930
8
                                packetCRC, "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
5931
8
    tmp_item = proto_tree_add_boolean (dlfw_tree, hf_r3_firmwaredownload_crc_bad, payload_tvb,
5932
8
                                       cmdLen - 2 - 2, 2, true);
5933
8
    proto_item_set_generated (tmp_item);
5934
8
  }
5935
8
}
5936
5937
static void
5938
dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
5939
33
{
5940
33
  uint8_t   cmdLen;
5941
33
  tvbuff_t *payload_tvb;
5942
5943
33
  if (tree)
5944
33
  {
5945
33
    cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5946
33
    payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5947
5948
33
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5949
33
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5950
5951
33
    proto_tree_add_item (tree, hf_r3_commanddata, payload_tvb, 0, -1, ENC_NA);
5952
33
  }
5953
33
  expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_cmd_downloadfirmwaretimeout); /* XXX: ??? */
5954
33
}
5955
5956
static void
5957
dissect_r3_cmd_powertableselection (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5958
43
{
5959
43
  uint8_t   cmdLen;
5960
43
  tvbuff_t *payload_tvb;
5961
5962
43
  if (!tree)
5963
0
    return;
5964
5965
43
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5966
43
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5967
5968
43
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5969
43
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5970
5971
43
  proto_tree_add_item (tree, hf_r3_powertableselection, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
5972
43
}
5973
5974
static void
5975
dissect_r3_cmd_clearnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5976
47
{
5977
47
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5978
47
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5979
47
  proto_tree_add_bitmask(tree, tvb, start_offset + 2, hf_r3_nvramclearoptions,
5980
47
                         ett_r3clearnvram, r3_nvramclearoptions, ENC_LITTLE_ENDIAN);
5981
47
}
5982
5983
static void
5984
dissect_r3_cmd_dpac (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
5985
24
{
5986
24
  uint8_t   cmdLen;
5987
24
  tvbuff_t *payload_tvb;
5988
5989
24
  if (!tree)
5990
0
    return;
5991
5992
24
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
5993
24
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
5994
5995
24
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
5996
24
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
5997
5998
  /* XXX: hf[] entries for the following hf indexes originally missing */
5999
24
  proto_tree_add_item (tree, hf_r3_dpac_action,   payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
6000
24
  proto_tree_add_item (tree, hf_r3_dpac_waittime, payload_tvb, 1, 2, ENC_LITTLE_ENDIAN);
6001
24
  proto_tree_add_item (tree, hf_r3_dpac_command,  payload_tvb, 3, -1, ENC_NA);
6002
24
}
6003
6004
static void
6005
dissect_r3_cmd_selftest (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6006
19
{
6007
19
  if (tree)
6008
19
  {
6009
19
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6010
19
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6011
19
  }
6012
19
}
6013
6014
static void
6015
dissect_r3_cmd_reset (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6016
32
{
6017
32
  if (tree)
6018
32
  {
6019
32
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6020
32
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6021
32
  }
6022
32
}
6023
6024
static void
6025
dissect_r3_cmd_logwrite (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6026
34
{
6027
34
  uint8_t   cmdLen;
6028
34
  tvbuff_t *payload_tvb;
6029
6030
34
  if (!tree)
6031
0
    return;
6032
6033
34
  cmdLen      = tvb_get_uint8 (tvb, start_offset + 0);
6034
34
  payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
6035
6036
34
  proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6037
34
  proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6038
6039
34
  proto_tree_add_item (tree, hf_r3_writeeventlog_user,  payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
6040
34
  proto_tree_add_item (tree, hf_r3_writeeventlog_event, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
6041
34
}
6042
6043
static void
6044
dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6045
141
{
6046
141
  if (tree)
6047
141
  {
6048
141
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6049
141
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6050
141
  }
6051
141
  mfgCommandFlag = true;
6052
141
}
6053
6054
static void
6055
dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6056
29
{
6057
29
  if (tree)
6058
29
  {
6059
29
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6060
29
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6061
29
  }
6062
29
}
6063
6064
static void
6065
dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6066
21
{
6067
21
  if (tree)
6068
21
  {
6069
21
    proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6070
21
    proto_tree_add_item (tree, hf_r3_command,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6071
21
  }
6072
21
}
6073
6074
/*
6075
 * ***************************************************************************
6076
 */
6077
static void
6078
dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *tree)
6079
10
{
6080
10
  tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, start_offset + 2, 16);
6081
6082
10
  if (tree)
6083
10
  {
6084
10
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6085
10
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6086
10
  }
6087
10
  dissect_serialnumber (sn_tvb, 0, length, pinfo, tree, hf_r3_mfgsetserialnumber);
6088
10
}
6089
6090
static void
6091
dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6092
5
{
6093
5
  if (tree)
6094
5
  {
6095
5
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6096
5
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6097
5
    proto_tree_add_item (tree, hf_r3_mfgsetcryptkey,   tvb, start_offset + 2, -1, ENC_NA);
6098
5
  }
6099
5
}
6100
6101
static void
6102
dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6103
4
{
6104
4
  if (tree)
6105
4
  {
6106
4
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6107
4
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6108
4
    proto_tree_add_item (tree, hf_r3_mfgdumpnvram,     tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6109
4
  }
6110
4
}
6111
6112
static void
6113
dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6114
4
{
6115
4
  if (tree)
6116
4
  {
6117
4
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6118
4
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6119
4
  }
6120
4
}
6121
6122
static void
6123
dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6124
1
{
6125
1
  if (tree)
6126
1
  {
6127
1
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6128
1
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6129
1
    proto_tree_add_item (tree, hf_r3_mfgremoteunlock,  tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6130
1
  }
6131
1
}
6132
6133
static void
6134
dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6135
3
{
6136
3
  if (tree)
6137
3
  {
6138
3
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6139
3
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6140
3
  }
6141
3
}
6142
6143
static void
6144
dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6145
4
{
6146
4
  if (tree)
6147
4
  {
6148
4
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6149
4
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6150
4
  }
6151
4
}
6152
6153
static void
6154
dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6155
2
{
6156
2
  if (tree)
6157
2
  {
6158
2
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6159
2
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6160
2
  }
6161
2
}
6162
6163
static void
6164
dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6165
3
{
6166
3
  if (tree)
6167
3
  {
6168
3
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6169
3
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6170
3
  }
6171
3
}
6172
6173
static void
6174
dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6175
1
{
6176
1
  if (tree)
6177
1
  {
6178
1
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6179
1
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6180
1
  }
6181
1
}
6182
6183
static void
6184
dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6185
3
{
6186
3
  if (tree)
6187
3
  {
6188
3
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6189
3
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6190
3
  }
6191
3
}
6192
6193
static void
6194
dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6195
1
{
6196
1
  if (tree)
6197
1
  {
6198
1
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6199
1
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6200
1
  }
6201
1
}
6202
6203
static void
6204
dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
6205
2
{
6206
2
  int     i;
6207
2
  int     len;
6208
2
  uint8_t step;
6209
6210
2
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6211
2
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6212
6213
2
  start_offset += 2;
6214
2
  len = tvb_reported_length_remaining (tvb, start_offset);
6215
6216
2
  i = 0;
6217
2
  while (i<len && (step=tvb_get_uint8(tvb, start_offset + i))>0)
6218
2
  {
6219
2
    proto_tree *force_tree = proto_tree_add_subtree_format(tree, tvb, start_offset + i, tvb_get_uint8 (tvb, start_offset + i),
6220
2
                                                  ett_r3forceoptions, NULL,
6221
2
                                                  "Force Option %s (%u)",
6222
2
                                                  val_to_str_ext_const (
6223
2
                                                    tvb_get_uint8 (tvb, start_offset + i + 1),
6224
2
                                                    &r3_forceitemnames_ext, "[Unknown]"),
6225
2
                                                  tvb_get_uint8 (tvb, start_offset + i + 1));
6226
2
    proto_item *force_item_item;
6227
6228
2
    proto_tree_add_item (force_tree, hf_r3_forceoptions_length, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6229
2
    force_item_item = proto_tree_add_item (force_tree, hf_r3_forceoptions_item,   tvb, start_offset + i + 1, 1, ENC_LITTLE_ENDIAN);
6230
6231
2
    switch (tvb_get_uint8 (tvb, start_offset + i) - 2)
6232
2
    {
6233
0
      case 1  : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_8,  tvb, start_offset + i + 2, 1, ENC_LITTLE_ENDIAN);
6234
0
        break;
6235
0
      case 2  : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_16, tvb, start_offset + i + 2, 2, ENC_LITTLE_ENDIAN);
6236
0
        break;
6237
0
      case 3  : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_24, tvb, start_offset + i + 2, 3, ENC_LITTLE_ENDIAN);
6238
0
        break;
6239
0
      case 4  : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_32, tvb, start_offset + i + 2, 4, ENC_LITTLE_ENDIAN);
6240
0
        break;
6241
1
      default :
6242
1
        expert_add_info_format(pinfo, force_item_item, &ei_r3_malformed_length, "Invalid length for Forceoptions State entry");
6243
1
        return;  /* quit */
6244
2
    }
6245
6246
0
    i += step;
6247
0
  }
6248
2
}
6249
6250
static void
6251
dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6252
1
{
6253
1
  if (tree)
6254
1
  {
6255
1
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6256
1
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6257
1
  }
6258
1
}
6259
6260
static void
6261
dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6262
0
{
6263
0
  if (tree)
6264
0
  {
6265
0
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6266
0
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6267
0
  }
6268
0
}
6269
6270
static void
6271
dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6272
2
{
6273
2
  if (tree)
6274
2
  {
6275
2
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6276
2
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6277
2
  }
6278
2
}
6279
6280
static void
6281
dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6282
3
{
6283
3
  if (tree)
6284
3
  {
6285
3
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6286
3
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6287
3
  }
6288
3
}
6289
6290
static void
6291
dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6292
0
{
6293
0
  if (tree)
6294
0
  {
6295
0
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6296
0
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6297
0
  }
6298
0
}
6299
6300
static void
6301
dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6302
0
{
6303
0
  if (tree)
6304
0
  {
6305
0
    proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6306
0
    proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6307
0
  }
6308
0
}
6309
6310
static void
6311
dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo, proto_tree *tree)
6312
7
{
6313
7
  int i;
6314
7
  int len;
6315
6316
7
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6317
7
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6318
6319
7
  start_offset += 2;
6320
7
  len = tvb_reported_length_remaining (tvb, start_offset);
6321
6322
64
  for (i = 0; i < len; i += 3)
6323
64
  {
6324
64
    proto_item *peekpoke_item;
6325
64
    proto_item *peekpoke_op_item;
6326
64
    proto_tree *peekpoke_tree;
6327
6328
64
    peekpoke_tree = proto_tree_add_subtree(tree, tvb, start_offset + i, 3, ett_r3peekpoke, &peekpoke_item, "");
6329
6330
64
    peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
6331
64
    proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address,   tvb, start_offset + i + 1, 2, ENC_LITTLE_ENDIAN);
6332
6333
64
    switch (tvb_get_uint8 (tvb, start_offset + i + 0))
6334
64
    {
6335
48
      case PEEKPOKE_READU8 :
6336
48
        proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6337
48
        break;
6338
6339
0
      case PEEKPOKE_READU16 :
6340
0
        proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6341
0
        break;
6342
6343
2
      case PEEKPOKE_READU24 :
6344
2
        proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6345
2
        break;
6346
6347
0
      case PEEKPOKE_READU32 :
6348
0
        proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
6349
0
        break;
6350
6351
0
      case PEEKPOKE_READSTRING :
6352
0
        proto_item_append_text (peekpoke_item,
6353
0
                                "Read (%d Bytes @ 0x%04x)",
6354
0
                                tvb_get_uint8 (tvb, start_offset + i + 3),
6355
0
                                tvb_get_letohs (tvb, start_offset + i + 1));
6356
0
        proto_item_set_len (peekpoke_item, 4);
6357
0
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6358
0
        i += 1;
6359
0
        break;
6360
6361
1
      case PEEKPOKE_WRITEU8 :
6362
1
        proto_item_append_text (peekpoke_item,
6363
1
                                "Write (8 Bits: 0x%02x @ 0x%04x)",
6364
1
                                tvb_get_uint8 (tvb, start_offset + i + 3),
6365
1
                                tvb_get_letohs (tvb, start_offset + i + 1));
6366
1
        proto_item_set_len (peekpoke_item, 4);
6367
1
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6368
1
        i += 1;
6369
1
        break;
6370
6371
1
      case PEEKPOKE_WRITEU16 :
6372
1
        proto_item_append_text (peekpoke_item,
6373
1
                                "Write (16 Bits: 0x%04x @ 0x%04x)",
6374
1
                                tvb_get_letohs (tvb, start_offset + i + 3),
6375
1
                                tvb_get_letohs (tvb, start_offset + i + 1));
6376
1
        proto_item_set_len (peekpoke_item, 5);
6377
1
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, ENC_LITTLE_ENDIAN);
6378
1
        i += 2;
6379
1
        break;
6380
6381
0
      case PEEKPOKE_WRITEU24 :
6382
0
        proto_item_append_text (peekpoke_item,
6383
0
                                "Write (24 Bits: 0x%06x @ 0x%04x)",
6384
0
                                tvb_get_letoh24 (tvb, start_offset + i + 3),
6385
0
                                tvb_get_letohs (tvb, start_offset + i + 1));
6386
0
        proto_item_set_len (peekpoke_item, 6);
6387
0
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, ENC_LITTLE_ENDIAN);
6388
0
        i += 3;
6389
0
        break;
6390
6391
0
      case PEEKPOKE_WRITEU32 :
6392
0
        proto_item_append_text (peekpoke_item,
6393
0
                                "Write (32 Bits: 0x%08x @ 0x%04x)",
6394
0
                                tvb_get_letohl (tvb, start_offset + i + 3),
6395
0
                                tvb_get_letohs (tvb, start_offset + i + 1));
6396
0
        proto_item_set_len (peekpoke_item, 7);
6397
0
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, ENC_LITTLE_ENDIAN);
6398
0
        i += 4;
6399
0
        break;
6400
6401
5
      case PEEKPOKE_WRITESTRING :
6402
5
        proto_item_append_text (peekpoke_item,
6403
5
                                "Write (%d Bytes @ 0x%04x)",
6404
5
                                tvb_get_uint8 (tvb, start_offset + i + 3),
6405
5
                                tvb_get_letohs (tvb, start_offset + i + 1));
6406
5
        proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_uint8 (tvb, start_offset + i + 3));
6407
5
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length,     tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
6408
5
        proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4,
6409
5
                             tvb_get_uint8 (tvb, start_offset + i + 3), ENC_NA);
6410
5
        i += tvb_get_uint8 (tvb, start_offset + i + 3) + 1;
6411
5
        break;
6412
6413
7
      default :
6414
7
        expert_add_info_format(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation, "Unknown Mfg peekpoke operation value");
6415
7
        return;  /* quit */
6416
64
    }
6417
64
  }
6418
7
}
6419
6420
static void
6421
dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6422
0
{
6423
0
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6424
0
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6425
0
}
6426
6427
static void
6428
dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6429
2
{
6430
2
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6431
2
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6432
2
}
6433
6434
static void
6435
dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6436
1
{
6437
1
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6438
1
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6439
1
}
6440
6441
static void
6442
dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6443
4
{
6444
4
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6445
4
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6446
4
}
6447
6448
static void
6449
dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6450
7
{
6451
7
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6452
7
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6453
7
}
6454
6455
static void
6456
dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6457
1
{
6458
1
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6459
1
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6460
1
}
6461
6462
static void
6463
dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6464
2
{
6465
2
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6466
2
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6467
2
}
6468
6469
static void
6470
dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6471
0
{
6472
0
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6473
0
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6474
0
}
6475
6476
static void
6477
dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6478
1
{
6479
1
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6480
1
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6481
1
}
6482
6483
static void
6484
dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6485
19
{
6486
19
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6487
19
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6488
19
}
6489
6490
static void
6491
dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6492
4
{
6493
4
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6494
4
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6495
4
  proto_tree_add_item (tree, hf_r3_mfgtestpreserve,  tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
6496
4
}
6497
6498
static void
6499
dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6500
1
{
6501
1
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6502
1
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6503
1
}
6504
6505
static void
6506
dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6507
3
{
6508
3
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6509
3
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6510
3
}
6511
6512
static void
6513
dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6514
0
{
6515
0
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6516
0
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6517
0
}
6518
6519
static void
6520
dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, uint32_t start_offset, uint32_t length _U_, packet_info *pinfo _U_, proto_tree *tree)
6521
1
{
6522
1
  proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
6523
1
  proto_tree_add_item (tree, hf_r3_commandmfg,       tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
6524
1
}
6525
6526
/*
6527
 */
6528
static int
6529
dissect_r3_command (tvbuff_t *tvb, uint32_t start_offset, uint32_t length, packet_info *pinfo, proto_tree *r3_tree)
6530
4.24k
{
6531
4.24k
  proto_item  *cmd_item;
6532
4.24k
  proto_tree  *cmd_tree;
6533
4.24k
  const char *cn;
6534
4.24k
  uint8_t      cmdLen;
6535
4.24k
  uint8_t      cmd;
6536
6537
4.24k
  tvb_ensure_bytes_exist (tvb, start_offset, 2);
6538
6539
4.24k
  cmdLen = tvb_get_uint8 (tvb, start_offset + 0);
6540
4.24k
  cmd    = tvb_get_uint8 (tvb, start_offset + 1);
6541
6542
4.24k
  if (!mfgCommandFlag)
6543
4.06k
    cn = val_to_str_ext_const (cmd, &r3_cmdnames_ext, "[Unknown Command]");
6544
182
  else
6545
182
    cn = val_to_str_ext_const (cmd, &r3_cmdmfgnames_ext, "[Unknown Mfg Command]");
6546
6547
4.24k
  cmd_tree = proto_tree_add_subtree_format(r3_tree, tvb, start_offset, cmdLen,
6548
4.24k
                            ett_r3cmd, &cmd_item, "Command Packet: %s (%d)", cn, cmd);
6549
6550
4.24k
  if (!mfgCommandFlag)
6551
4.06k
  {
6552
4.06k
    if (cmd >= CMD_LAST)
6553
960
      expert_add_info(pinfo, cmd_item, &ei_r3_unknown_command_value);
6554
3.10k
    else if (r3command_dissect [cmd])
6555
3.10k
      (*r3command_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6556
4.06k
  }
6557
182
  else
6558
182
  {
6559
182
    mfgCommandFlag = false;
6560
6561
182
    if (cmd >= CMDMFG_LAST)
6562
14
    {
6563
14
      expert_add_info_format(pinfo, proto_tree_get_parent (cmd_tree), &ei_r3_unknown_command_value, "Unknown manufacturing command value");
6564
14
    }
6565
168
    else if (r3commandmfg_dissect [cmd])
6566
102
      (*r3commandmfg_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
6567
182
  }
6568
6569
4.24k
  return tvb_get_uint8 (tvb, start_offset + 0);
6570
4.24k
}
6571
6572
/*
6573
 * ***************************************************************************
6574
 *
6575
 *  Dissect a single r3 PDU
6576
 *
6577
 *  return: amount consumed
6578
 */
6579
static int
6580
dissect_r3_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tree *r3_tree)
6581
2.68k
{
6582
2.68k
  proto_item *payload_item = NULL;
6583
2.68k
  proto_tree *payload_tree = NULL;
6584
2.68k
  unsigned    offset       = 0;
6585
2.68k
  uint32_t    packetLen;
6586
2.68k
  unsigned    octConsumed;
6587
6588
2.68k
  if (tvb_strneql (tvb, 0, "~~~ds", 5) == 0)
6589
2
  {
6590
2
    if (r3_tree)
6591
2
      proto_tree_add_item (r3_tree, hf_r3_tildex3ds, tvb, 0, -1, ENC_ASCII);
6592
6593
2
    return 5;
6594
2
  }
6595
6596
  /*
6597
   *  Show basic header stuff
6598
   */
6599
2.67k
  if (r3_tree)
6600
2.67k
  {
6601
2.67k
    proto_item *header_item = proto_tree_add_item (r3_tree, hf_r3_header, tvb, 0, 5, ENC_NA);
6602
2.67k
    proto_tree *header_tree = proto_item_add_subtree (header_item, ett_r3header);
6603
6604
2.67k
    proto_tree_add_item (header_tree, hf_r3_sigil,        tvb, 0, 1, ENC_LITTLE_ENDIAN);
6605
2.67k
    proto_tree_add_item (header_tree, hf_r3_address,      tvb, 1, 1, ENC_LITTLE_ENDIAN);
6606
2.67k
    proto_tree_add_item (header_tree, hf_r3_packetnumber, tvb, 2, 1, ENC_LITTLE_ENDIAN);
6607
2.67k
    proto_tree_add_item (header_tree, hf_r3_packetlength, tvb, 3, 1, ENC_LITTLE_ENDIAN);
6608
2.67k
    proto_tree_add_item (header_tree, hf_r3_encryption,   tvb, 4, 1, ENC_LITTLE_ENDIAN);
6609
2.67k
  }
6610
6611
  /* Note: packetLen == tvb_reported_length() */
6612
6613
2.67k
  packetLen = tvb_get_uint8 (tvb, 3);
6614
6615
2.67k
  if (r3_tree)
6616
2.48k
  {
6617
2.48k
    payload_item = proto_tree_add_item (r3_tree, hf_r3_payload, tvb, 5, -1, ENC_NA);
6618
2.48k
    payload_tree = proto_item_add_subtree (payload_item, ett_r3payload);
6619
2.48k
  }
6620
6621
2.67k
  offset = 5;
6622
6623
2.67k
  mfgCommandFlag = false;   /* XXX: Assumption: mfgCmd always follows Cmd in same r3 "packet" */
6624
6.77k
  while (offset < (packetLen - 3))
6625
4.24k
  {
6626
4.24k
    octConsumed = dissect_r3_command (tvb, offset, 0, pinfo, payload_tree);
6627
4.24k
    if(octConsumed == 0)
6628
148
    {
6629
148
      expert_add_info_format(pinfo, proto_tree_get_parent (payload_tree), &ei_r3_malformed_length,
6630
148
                              "Command length equal to 0. Payload could be partially decoded");
6631
148
      offset = tvb_reported_length (tvb) - 3; /* just do CRC stuff ?? */
6632
148
      break;
6633
148
    }
6634
4.09k
    offset += octConsumed;
6635
4.09k
  }
6636
6637
  /*
6638
   *  Show the CRC and XOR status
6639
   */
6640
2.67k
  if (r3_tree)
6641
1.68k
  {
6642
1.68k
    proto_item *tail_item     = proto_tree_add_item (r3_tree, hf_r3_tail, tvb, offset, 3, ENC_NA);
6643
1.68k
    proto_tree *tail_tree     = proto_item_add_subtree (tail_item, ett_r3tail);
6644
1.68k
    uint32_t    packetCRC     = tvb_get_letohs (tvb, offset);
6645
1.68k
    uint32_t    packetXor     = tvb_get_uint8 (tvb, offset + 2);
6646
1.68k
    uint32_t    calculatedCRC;
6647
6648
1.68k
    if ((calculatedCRC = crc16_r3_ccitt_tvb(tvb, 1, packetLen - 3)) == packetCRC)
6649
0
      proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC, "0x%04x (correct)", packetCRC);
6650
1.68k
    else
6651
1.68k
    {
6652
1.68k
      proto_item *tmp_item;
6653
6654
1.68k
      proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC,
6655
1.68k
                                  "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
6656
1.68k
      tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_crc_bad, tvb, offset, 2, true);
6657
1.68k
      proto_item_set_generated (tmp_item);
6658
1.68k
    }
6659
6660
1.68k
    if ((packetLen ^ 0xff) == packetXor)
6661
3
      proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 2, 1, packetXor,
6662
3
                                  "0x%02x (correct)", packetXor);
6663
1.68k
    else
6664
1.68k
    {
6665
1.68k
      proto_item *tmp_item;
6666
6667
1.68k
      proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor,
6668
1.68k
                                  "0x%02x (incorrect, should be 0x%02x)", packetXor, packetLen ^ 0xff);
6669
1.68k
      tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_xor_bad, tvb, offset + 7, 1, true);
6670
1.68k
      proto_item_set_generated (tmp_item);
6671
1.68k
    }
6672
1.68k
  }
6673
6674
2.67k
  offset += 3;
6675
6676
2.67k
  return offset;
6677
2.68k
}
6678
6679
/*
6680
 * ***************************************************************************
6681
 *
6682
 *  Main dissector entry points
6683
 */
6684
static int
6685
dissect_r3_message (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
6686
2.68k
{
6687
2.68k
  proto_tree *r3_tree = NULL;
6688
6689
2.68k
  col_set_str (pinfo->cinfo, COL_PROTOCOL, "R3");
6690
2.68k
  col_clear (pinfo->cinfo, COL_INFO);
6691
6692
  /* Note: The tvb (provided via tcp_dissect_pdus()) will contain (at most) one PDU of the length
6693
   *       specified via get_r3_message_len()
6694
   */
6695
6696
2.68k
  if (tree)
6697
2.68k
  {
6698
2.68k
    proto_item *r3_item;
6699
2.68k
    r3_item = proto_tree_add_item (tree, proto_r3, tvb, 0, -1, ENC_NA);
6700
2.68k
    r3_tree = proto_item_add_subtree (r3_item, ett_r3);
6701
2.68k
  }
6702
6703
2.68k
  dissect_r3_packet (tvb, pinfo, r3_tree);
6704
6705
2.68k
  return tvb_reported_length(tvb);
6706
2.68k
}
6707
6708
static unsigned
6709
get_r3_message_len (packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
6710
2.83k
{
6711
2.83k
  return (unsigned) tvb_get_uint8 (tvb, offset + 3) + 1;
6712
2.83k
}
6713
6714
static int
6715
dissect_r3 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
6716
504
{
6717
504
  tcp_dissect_pdus (tvb, pinfo, tree, true, 4, get_r3_message_len, dissect_r3_message, data);
6718
504
  return tvb_reported_length(tvb);
6719
504
}
6720
6721
/*
6722
 * ***************************************************************************
6723
 */
6724
void proto_register_r3 (void)
6725
15
{
6726
6727
  /* Setup list of header fields */
6728
15
  static hf_register_info hf [] =
6729
15
    {
6730
15
      { &hf_r3_tildex3ds,
6731
15
        { "DPAC Attention", "r3.dpac_attention",
6732
15
          FT_STRING, BASE_NONE, NULL, 0x0,
6733
15
          NULL, HFILL }
6734
15
      },
6735
6736
15
      { &hf_r3_header,
6737
15
        { "Header", "r3.header",
6738
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6739
15
          NULL, HFILL }
6740
15
      },
6741
15
      { &hf_r3_payload,
6742
15
        { "Payload", "r3.payload",
6743
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6744
15
          NULL, HFILL }
6745
15
      },
6746
15
      { &hf_r3_tail,
6747
15
        { "Tail", "r3.tail",
6748
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6749
15
          NULL, HFILL }
6750
15
      },
6751
6752
15
      { &hf_r3_sigil,
6753
15
        { "Sigil", "r3.sigil",
6754
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
6755
15
          NULL, HFILL }
6756
15
      },
6757
15
      { &hf_r3_address,
6758
15
        { "Address", "r3.address",
6759
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6760
15
          NULL, HFILL }
6761
15
      },
6762
15
      { &hf_r3_packetnumber,
6763
15
        { "Packet Number", "r3.packetnumber",
6764
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6765
15
          NULL, HFILL }
6766
15
      },
6767
15
      { &hf_r3_packetlength,
6768
15
        { "Packet Length", "r3.packetlength",
6769
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6770
15
          NULL, HFILL }
6771
15
      },
6772
15
      { &hf_r3_encryption,
6773
15
        { "Crypt Type", "r3.encryption",
6774
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_encryptionschemenames_ext, 0x0,
6775
15
          NULL, HFILL }
6776
15
      },
6777
15
      { &hf_r3_crc,
6778
15
        { "CRC", "r3.crc",
6779
15
          FT_UINT16, BASE_HEX, NULL, 0x0,
6780
15
          NULL, HFILL }
6781
15
      },
6782
15
      { &hf_r3_crc_bad,
6783
15
        { "Bad CRC", "r3.crc_bad",
6784
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6785
15
          NULL, HFILL }
6786
15
      },
6787
15
      { &hf_r3_xor,
6788
15
        { "XOR", "r3.xor",
6789
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
6790
15
          NULL, HFILL }
6791
15
      },
6792
15
      { &hf_r3_xor_bad,
6793
15
        { "Bad XOR", "r3.xor_bad",
6794
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6795
15
          NULL, HFILL }
6796
15
      },
6797
6798
15
      { &hf_r3_commandlength,
6799
15
        { "Command Length", "r3.command.length",
6800
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6801
15
          NULL, HFILL }
6802
15
      },
6803
15
      { &hf_r3_command,
6804
15
        { "Command", "r3.command.command",
6805
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6806
15
          NULL, HFILL }
6807
15
      },
6808
15
      { &hf_r3_commanddata,
6809
15
        { "Command Data", "r3.command.data",
6810
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6811
15
          NULL, HFILL }
6812
15
      },
6813
6814
15
      { &hf_r3_commandmfglength,
6815
15
        { "Mfg Command Length", "r3.commandmfg.length",
6816
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6817
15
          NULL, HFILL }
6818
15
      },
6819
15
      { &hf_r3_commandmfg,
6820
15
        { "Mfg Command", "r3.commandmfg.command",
6821
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdmfgnames_ext, 0x0,
6822
15
          NULL, HFILL }
6823
15
      },
6824
#if 0
6825
      { &hf_r3_commandmfgdata,
6826
        { "Mfg Command Data", "r3.commandmfg.data",
6827
          FT_NONE, BASE_NONE, NULL, 0x0,
6828
          NULL, HFILL }
6829
      },
6830
#endif
6831
6832
15
      { &hf_r3_responselength,
6833
15
        { "Response Length", "r3.response.length",
6834
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6835
15
          NULL, HFILL }
6836
15
      },
6837
15
      { &hf_r3_responsecommand,
6838
15
        { "Response Command", "r3.response.command",
6839
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6840
15
          NULL, HFILL }
6841
15
      },
6842
15
      { &hf_r3_responsetype,
6843
15
        { "Response Type", "r3.response.responsetype",
6844
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_responsetypenames_ext, 0x0,
6845
15
          NULL, HFILL }
6846
15
      },
6847
15
      { &hf_r3_responsetocommand,
6848
15
        { "Response To Command", "r3.response.to_command",
6849
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
6850
15
          NULL, HFILL }
6851
15
      },
6852
#if 0
6853
      { &hf_r3_responsedata,
6854
        { "Response Data", "r3.response.data",
6855
          FT_NONE, BASE_NONE, NULL, 0x0,
6856
          NULL, HFILL }
6857
      },
6858
#endif
6859
6860
15
      { &hf_r3_upstreamcommand,
6861
15
        { "Upstream Command", "r3.upstreamcommand.command",
6862
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamcommandnames_ext, 0x0,
6863
15
          NULL, HFILL }
6864
15
      },
6865
6866
15
      { &hf_r3_upstreamfield,
6867
15
        { "Upstream Field", "r3.upstreamfield",
6868
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6869
15
          NULL, HFILL }
6870
15
      },
6871
15
      { &hf_r3_upstreamfieldlength,
6872
15
        { "Field Length", "r3.upstreamfield.length",
6873
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6874
15
          NULL, HFILL }
6875
15
      },
6876
15
      { &hf_r3_upstreamfieldtype,
6877
15
        { "Field Type", "r3.upstreamfield.type",
6878
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamfieldnames_ext, 0x0,
6879
15
          NULL, HFILL }
6880
15
      },
6881
#if 0
6882
      { &hf_r3_upstreamfielddatalen,
6883
        { "Data Length", "r3.upstreamfield.datalen",
6884
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6885
          NULL, HFILL }
6886
      },
6887
#endif
6888
15
      { &hf_r3_upstreamfielderror,
6889
15
        { "Error", "r3.upstreamfield.error",
6890
15
          FT_NONE, BASE_NONE, NULL, 0x0,
6891
15
          NULL, HFILL }
6892
15
      },
6893
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SERIALNUMBER],
6894
15
        { "Serial Number", "r3.upstreamfield.serialnumber",
6895
15
          FT_STRING, BASE_NONE, NULL, 0x0,
6896
15
          NULL, HFILL }
6897
15
      },
6898
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_NAR],
6899
15
        { "Next Available Record", "r3.upstreamfield.nar",
6900
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6901
15
          NULL, HFILL }
6902
15
      },
6903
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ENTRYDEVICE],
6904
15
        { "Entry Device", "r3.upstreamfield.entrydevice",
6905
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6906
15
          NULL, HFILL }
6907
15
      },
6908
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PPMIFIELDTYPE],
6909
15
        { "PPMI Field Type", "r3.upstreamfield.ppmifieldtype",
6910
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6911
15
          NULL, HFILL }
6912
15
      },
6913
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PIN],
6914
15
        { "PIN", "r3.upstreamfield.pin",
6915
15
          FT_STRING, BASE_NONE, NULL, 0x0,
6916
15
          NULL, HFILL }
6917
15
      },
6918
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SEQUENCENUMBER],
6919
15
        { "Sequence Number", "r3.upstreamfield.sequencenumber",
6920
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6921
15
          NULL, HFILL }
6922
15
      },
6923
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_RESPONSEWINDOW],
6924
15
        { "Response Window", "r3.upstreamfield.responsewindow",
6925
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6926
15
          NULL, HFILL }
6927
15
      },
6928
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERNUMBER],
6929
15
        { "User Number", "r3.upstreamfield.usernumber",
6930
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6931
15
          NULL, HFILL }
6932
15
      },
6933
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_VERSION],
6934
15
        { "Version", "r3.upstreamfield.version",
6935
15
          FT_STRING, BASE_NONE, NULL, 0x0,
6936
15
          NULL, HFILL }
6937
15
      },
6938
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORD],
6939
15
        { "Event Log Record", "r3.upstreamfield.eventlogrecord",
6940
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
6941
15
          NULL, HFILL }
6942
15
      },
6943
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DATETIME],
6944
15
        { "Date/Time", "r3.upstreamfield.datetime",
6945
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
6946
15
          NULL, HFILL }
6947
15
      },
6948
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORDCOUNT],
6949
15
        { "Event Log Record Count", "r3.upstreamfield.eventlogrecordcount",
6950
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6951
15
          NULL, HFILL }
6952
15
      },
6953
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORDCOUNT],
6954
15
        { "Declined Log Record", "r3.upstreamfield.declinedlogrecord",
6955
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
6956
15
          NULL, HFILL }
6957
15
      },
6958
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORD],
6959
15
        { "Declined Log", "r3.upstreamfield.declinedlog",
6960
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
6961
15
          NULL, HFILL }
6962
15
      },
6963
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERTYPE],
6964
15
        { "User Type", "r3.upstreamfield.usertype",
6965
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
6966
15
          NULL, HFILL }
6967
15
      },
6968
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSALWAYS],
6969
15
        { "Access Always", "r3.upstreamfield.accessalways",
6970
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6971
15
          NULL, HFILL }
6972
15
      },
6973
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_CACHED],
6974
15
        { "Cached", "r3.upstreamfield.cached",
6975
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
6976
15
          NULL, HFILL }
6977
15
      },
6978
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYFIELDTYPE],
6979
15
        { "Primary Field Type", "r3.upstreamfield.primaryfieldtype",
6980
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6981
15
          NULL, HFILL }
6982
15
      },
6983
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXFIELDTYPE],
6984
15
        { "Aux Field Type", "r3.upstreamfield.auxfieldtype",
6985
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
6986
15
          NULL, HFILL }
6987
15
      },
6988
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSMODE],
6989
15
        { "Access Mode", "r3.upstreamfield.accessmode",
6990
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
6991
15
          NULL, HFILL }
6992
15
      },
6993
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXPIREON],
6994
15
        { "Expire On", "r3.upstreamfield.expireon",
6995
15
          FT_UINT24, BASE_HEX, NULL, 0x0,
6996
15
          NULL, HFILL }
6997
15
      },
6998
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USECOUNT],
6999
15
        { "Use Count", "r3.upstreamfield.usecount",
7000
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7001
15
          NULL, HFILL }
7002
15
      },
7003
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_TIMEZONE],
7004
15
        { "Timezone", "r3.upstreamfield.timezone",
7005
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
7006
15
          NULL, HFILL }
7007
15
      },
7008
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXCEPTIONGROUP],
7009
15
        { "Exception Group", "r3.upstreamfield.exceptiongroup",
7010
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7011
15
          NULL, HFILL }
7012
15
      },
7013
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYPIN],
7014
15
        { "Primary PIN", "r3.upstreamfield.primarypin",
7015
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7016
15
          NULL, HFILL }
7017
15
      },
7018
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXPIN],
7019
15
        { "Aux PIN", "r3.upstreamfield.auxpin",
7020
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7021
15
          NULL, HFILL }
7022
15
      },
7023
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORDCOUNT],
7024
15
        { "Alarm Record Count", "r3.upstreamfield.alarmrecordcount",
7025
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7026
15
          NULL, HFILL }
7027
15
      },
7028
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORD],
7029
15
        { "Alarm Record", "r3.upstreamfield.alarmrecord",
7030
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7031
15
          NULL, HFILL }
7032
15
      },
7033
15
      { &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXCTLRVERSION],
7034
15
        { "Aux Controller Version", "r3.upstreamfield.auxctlrversion",
7035
15
          FT_STRING, BASE_NONE, NULL, 0x0,
7036
15
          NULL, HFILL }
7037
15
      },
7038
7039
15
      { &hf_r3_configitems,
7040
15
        { "Configuration Item List", "r3.configitems",
7041
15
          FT_NONE, BASE_NONE, NULL, 0x0,
7042
15
          NULL, HFILL }
7043
15
      },
7044
15
      { &hf_r3_configitem,
7045
15
        { "Configuration Item", "r3.configitem",
7046
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configitemnames_ext, 0x0,
7047
15
          NULL, HFILL }
7048
15
      },
7049
#if 0
7050
      { &hf_r3_configfield,
7051
        { "Config Field", "r3.configfield",
7052
          FT_NONE, BASE_NONE, NULL, 0x0,
7053
          NULL, HFILL }
7054
      },
7055
#endif
7056
15
      { &hf_r3_configitemlength,
7057
15
        { "Configuration Item Length", "r3.configitem.length",
7058
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7059
15
          NULL, HFILL }
7060
15
      },
7061
15
      { &hf_r3_configitemtype,
7062
15
        { "Configuration Item Type", "r3.configitem.type",
7063
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configtypenames_ext, 0x0,
7064
15
          NULL, HFILL }
7065
15
      },
7066
15
      { &hf_r3_configitemdata,
7067
15
        { "Configuration Item Data", "r3.configitem.data",
7068
15
          FT_NONE, BASE_NONE, NULL, 0x0,
7069
15
          NULL, HFILL }
7070
15
      },
7071
15
      { &hf_r3_configitemdata_bool,
7072
15
        { "Configuration Item Boolean", "r3.configitem.data_boolean",
7073
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7074
15
          NULL, HFILL }
7075
15
      },
7076
15
      { &hf_r3_configitemdata_8,
7077
15
        { "Configuration Item 8-bit", "r3.configitem.data_8",
7078
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7079
15
          NULL, HFILL }
7080
15
      },
7081
15
      { &hf_r3_configitemdata_16,
7082
15
        { "Configuration Item 16-bit", "r3.configitem.data_16",
7083
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7084
15
          NULL, HFILL }
7085
15
      },
7086
15
      { &hf_r3_configitemdata_32,
7087
15
        { "Configuration Item 32-bit", "r3.configitem.data_32",
7088
15
          FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
7089
15
          NULL, HFILL }
7090
15
      },
7091
15
      { &hf_r3_configitemdata_string,
7092
15
        { "Configuration Item String", "r3.configitem.data_string",
7093
15
          FT_STRING, BASE_NONE, NULL, 0x0,
7094
15
          NULL, HFILL }
7095
15
      },
7096
7097
15
      { &hf_r3_timezonearray0,
7098
15
        { "Timezone  0", "r3.timezone.0",
7099
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000001,
7100
15
          NULL, HFILL }
7101
15
      },
7102
15
      { &hf_r3_timezonearray1,
7103
15
        { "Timezone  1", "r3.timezone.1",
7104
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000002,
7105
15
          NULL, HFILL }
7106
15
      },
7107
15
      { &hf_r3_timezonearray2,
7108
15
        { "Timezone  2", "r3.timezone.2",
7109
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000004,
7110
15
          NULL, HFILL }
7111
15
      },
7112
15
      { &hf_r3_timezonearray3,
7113
15
        { "Timezone  3", "r3.timezone.3",
7114
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000008,
7115
15
          NULL, HFILL }
7116
15
      },
7117
15
      { &hf_r3_timezonearray4,
7118
15
        { "Timezone  4", "r3.timezone.4",
7119
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000010,
7120
15
          NULL, HFILL }
7121
15
      },
7122
15
      { &hf_r3_timezonearray5,
7123
15
        { "Timezone  5", "r3.timezone.5",
7124
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000020,
7125
15
          NULL, HFILL }
7126
15
      },
7127
15
      { &hf_r3_timezonearray6,
7128
15
        { "Timezone  6", "r3.timezone.6",
7129
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000040,
7130
15
          NULL, HFILL }
7131
15
      },
7132
15
      { &hf_r3_timezonearray7,
7133
15
        { "Timezone  7", "r3.timezone.7",
7134
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000080,
7135
15
          NULL, HFILL }
7136
15
      },
7137
15
      { &hf_r3_timezonearray8,
7138
15
        { "Timezone  8", "r3.timezone.8",
7139
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000100,
7140
15
          NULL, HFILL }
7141
15
      },
7142
15
      { &hf_r3_timezonearray9,
7143
15
        { "Timezone  9", "r3.timezone.9",
7144
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000200,
7145
15
          NULL, HFILL }
7146
15
      },
7147
15
      { &hf_r3_timezonearray10,
7148
15
        { "Timezone 10", "r3.timezone.10",
7149
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000400,
7150
15
          NULL, HFILL }
7151
15
      },
7152
15
      { &hf_r3_timezonearray11,
7153
15
        { "Timezone 11", "r3.timezone.11",
7154
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000800,
7155
15
          NULL, HFILL }
7156
15
      },
7157
15
      { &hf_r3_timezonearray12,
7158
15
        { "Timezone 12", "r3.timezone.12",
7159
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00001000,
7160
15
          NULL, HFILL }
7161
15
      },
7162
15
      { &hf_r3_timezonearray13,
7163
15
        { "Timezone 13", "r3.timezone.13",
7164
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00002000,
7165
15
          NULL, HFILL }
7166
15
      },
7167
15
      { &hf_r3_timezonearray14,
7168
15
        { "Timezone 14", "r3.timezone.14",
7169
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00004000,
7170
15
          NULL, HFILL }
7171
15
      },
7172
15
      { &hf_r3_timezonearray15,
7173
15
        { "Timezone 15", "r3.timezone.15",
7174
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00008000,
7175
15
          NULL, HFILL }
7176
15
      },
7177
15
      { &hf_r3_timezonearray16,
7178
15
        { "Timezone 16", "r3.timezone.16",
7179
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00010000,
7180
15
          NULL, HFILL }
7181
15
      },
7182
15
      { &hf_r3_timezonearray17,
7183
15
        { "Timezone 17", "r3.timezone.17",
7184
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00020000,
7185
15
          NULL, HFILL }
7186
15
      },
7187
15
      { &hf_r3_timezonearray18,
7188
15
        { "Timezone 18", "r3.timezone.18",
7189
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00040000,
7190
15
          NULL, HFILL }
7191
15
      },
7192
15
      { &hf_r3_timezonearray19,
7193
15
        { "Timezone 19", "r3.timezone.19",
7194
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00080000,
7195
15
          NULL, HFILL }
7196
15
      },
7197
15
      { &hf_r3_timezonearray20,
7198
15
        { "Timezone 20", "r3.timezone.20",
7199
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00100000,
7200
15
          NULL, HFILL }
7201
15
      },
7202
15
      { &hf_r3_timezonearray21,
7203
15
        { "Timezone 21", "r3.timezone.21",
7204
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00200000,
7205
15
          NULL, HFILL }
7206
15
      },
7207
15
      { &hf_r3_timezonearray22,
7208
15
        { "Timezone 22", "r3.timezone.22",
7209
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00400000,
7210
15
          NULL, HFILL }
7211
15
      },
7212
15
      { &hf_r3_timezonearray23,
7213
15
        { "Timezone 23", "r3.timezone.23",
7214
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00800000,
7215
15
          NULL, HFILL }
7216
15
      },
7217
15
      { &hf_r3_timezonearray24,
7218
15
        { "Timezone 24", "r3.timezone.24",
7219
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x01000000,
7220
15
          NULL, HFILL }
7221
15
      },
7222
15
      { &hf_r3_timezonearray25,
7223
15
        { "Timezone 25", "r3.timezone.25",
7224
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x02000000,
7225
15
          NULL, HFILL }
7226
15
      },
7227
15
      { &hf_r3_timezonearray26,
7228
15
        { "Timezone 26", "r3.timezone.26",
7229
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x04000000,
7230
15
          NULL, HFILL }
7231
15
      },
7232
15
      { &hf_r3_timezonearray27,
7233
15
        { "Timezone 27", "r3.timezone.27",
7234
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x08000000,
7235
15
          NULL, HFILL }
7236
15
      },
7237
15
      { &hf_r3_timezonearray28,
7238
15
        { "Timezone 28", "r3.timezone.28",
7239
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x10000000,
7240
15
          NULL, HFILL }
7241
15
      },
7242
15
      { &hf_r3_timezonearray29,
7243
15
        { "Timezone 29", "r3.timezone.29",
7244
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x20000000,
7245
15
          NULL, HFILL }
7246
15
      },
7247
15
      { &hf_r3_timezonearray30,
7248
15
        { "Timezone 30", "r3.timezone.30",
7249
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x40000000,
7250
15
          NULL, HFILL }
7251
15
      },
7252
15
      { &hf_r3_timezonearray31,
7253
15
        { "Timezone 31", "r3.timezone.31",
7254
15
          FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x80000000,
7255
15
          NULL, HFILL }
7256
15
      },
7257
7258
15
      { &hf_r3_expireon_year,
7259
15
        { "Expiration Year", "r3.expireon.year",
7260
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7261
15
          NULL, HFILL }
7262
15
      },
7263
15
      { &hf_r3_expireon_month,
7264
15
        { "Expiration Month", "r3.expireon.month",
7265
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7266
15
          NULL, HFILL }
7267
15
      },
7268
15
      { &hf_r3_expireon_day,
7269
15
        { "Expiration Day", "r3.expireon.day",
7270
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7271
15
          NULL, HFILL }
7272
15
      },
7273
7274
15
      { &hf_r3_datetime_year,
7275
15
        { "Date/Time Year", "r3.datetime.year",
7276
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7277
15
          NULL, HFILL }
7278
15
      },
7279
15
      { &hf_r3_datetime_month,
7280
15
        { "Date/Time Month", "r3.datetime.month",
7281
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7282
15
          NULL, HFILL }
7283
15
      },
7284
15
      { &hf_r3_datetime_day,
7285
15
        { "Date/Time Day", "r3.datetime.day",
7286
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7287
15
          NULL, HFILL }
7288
15
      },
7289
15
      { &hf_r3_datetime_dow,
7290
15
        { "Date/Time DOW", "r3.datetime.dow",
7291
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7292
15
          NULL, HFILL }
7293
15
      },
7294
15
      { &hf_r3_datetime_hours,
7295
15
        { "Date/Time Hours", "r3.datetime.hours",
7296
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7297
15
          NULL, HFILL }
7298
15
      },
7299
15
      { &hf_r3_datetime_minutes,
7300
15
        { "Date/Time Minutes", "r3.datetime.minutes",
7301
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7302
15
          NULL, HFILL }
7303
15
      },
7304
15
      { &hf_r3_datetime_seconds,
7305
15
        { "Date/Time Seconds", "r3.datetime.seconds",
7306
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7307
15
          NULL, HFILL }
7308
15
      },
7309
15
      { &hf_r3_datetime_dst,
7310
15
        { "Date/Time DST", "r3.datetime.dst",
7311
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
7312
15
          NULL, HFILL }
7313
15
      },
7314
7315
15
      { &hf_r3_eventlog_recordnumber,
7316
15
        { "Record Number", "r3.eventlog.recordnumber",
7317
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7318
15
          NULL, HFILL }
7319
15
      },
7320
15
      { &hf_r3_eventlog_year,
7321
15
        { "Year", "r3.eventlog.year",
7322
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7323
15
          NULL, HFILL }
7324
15
      },
7325
15
      { &hf_r3_eventlog_month,
7326
15
        { "Month", "r3.eventlog.month",
7327
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7328
15
          NULL, HFILL }
7329
15
      },
7330
15
      { &hf_r3_eventlog_day,
7331
15
        { "Day", "r3.eventlog.day",
7332
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7333
15
          NULL, HFILL }
7334
15
      },
7335
15
      { &hf_r3_eventlog_hour,
7336
15
        { "Hours", "r3.eventlog.hours",
7337
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7338
15
          NULL, HFILL }
7339
15
      },
7340
15
      { &hf_r3_eventlog_minute,
7341
15
        { "Minutes", "r3.eventlog.minutes",
7342
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7343
15
          NULL, HFILL }
7344
15
      },
7345
15
      { &hf_r3_eventlog_second,
7346
15
        { "Seconds", "r3.eventlog.seconds",
7347
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7348
15
          NULL, HFILL }
7349
15
      },
7350
15
      { &hf_r3_eventlog_usernumber,
7351
15
        { "User Number", "r3.eventlog.usernumber",
7352
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7353
15
          NULL, HFILL }
7354
15
      },
7355
15
      { &hf_r3_eventlog_event,
7356
15
        { "ID", "r3.eventlog.id",
7357
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7358
15
          NULL, HFILL }
7359
15
      },
7360
7361
15
      { &hf_r3_declinedlog_recordnumber,
7362
15
        { "Record Number", "r3.declinedlog.recordnumber",
7363
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7364
15
          NULL, HFILL }
7365
15
      },
7366
15
      { &hf_r3_declinedlog_year,
7367
15
        { "Year", "r3.declinedlog.year",
7368
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7369
15
          NULL, HFILL }
7370
15
      },
7371
15
      { &hf_r3_declinedlog_month,
7372
15
        { "Month", "r3.declinedlog.month",
7373
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7374
15
          NULL, HFILL }
7375
15
      },
7376
15
      { &hf_r3_declinedlog_day,
7377
15
        { "Day", "r3.declinedlog.day",
7378
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7379
15
          NULL, HFILL }
7380
15
      },
7381
15
      { &hf_r3_declinedlog_hour,
7382
15
        { "Hours", "r3.declinedlog.hours",
7383
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7384
15
          NULL, HFILL }
7385
15
      },
7386
15
      { &hf_r3_declinedlog_minute,
7387
15
        { "Minutes", "r3.declinedlog.minutes",
7388
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7389
15
          NULL, HFILL }
7390
15
      },
7391
15
      { &hf_r3_declinedlog_second,
7392
15
        { "Seconds", "r3.declinedlog.seconds",
7393
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7394
15
          NULL, HFILL }
7395
15
      },
7396
15
      { &hf_r3_declinedlog_usernumber,
7397
15
        { "User Number", "r3.declinedlog.usernumber",
7398
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7399
15
          NULL, HFILL }
7400
15
      },
7401
15
      { &hf_r3_declinedlog_cred1type,
7402
15
        { "Credential 1 Type", "r3.declinedlog.cred1type",
7403
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7404
15
          NULL, HFILL }
7405
15
      },
7406
15
      { &hf_r3_declinedlog_cred2type,
7407
15
        { "Credential 2 Type", "r3.declinedlog.cred2type",
7408
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
7409
15
          NULL, HFILL }
7410
15
      },
7411
15
      { &hf_r3_declinedlog_cred1,
7412
15
        { "Credential 1", "r3.declinedlog.cred1",
7413
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7414
15
          NULL, HFILL }
7415
15
      },
7416
15
      { &hf_r3_declinedlog_cred2,
7417
15
        { "Credential 2", "r3.declinedlog.cred2",
7418
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7419
15
          NULL, HFILL }
7420
15
      },
7421
7422
15
      { &hf_r3_alarmlog_recordnumber,
7423
15
        { "Record Number", "r3.alarmlog.recordnumber",
7424
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7425
15
          NULL, HFILL }
7426
15
      },
7427
15
      { &hf_r3_alarmlog_year,
7428
15
        { "Year", "r3.alarmlog.year",
7429
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7430
15
          NULL, HFILL }
7431
15
      },
7432
15
      { &hf_r3_alarmlog_month,
7433
15
        { "Month", "r3.alarmlog.month",
7434
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7435
15
          NULL, HFILL }
7436
15
      },
7437
15
      { &hf_r3_alarmlog_day,
7438
15
        { "Day", "r3.alarmlog.day",
7439
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7440
15
          NULL, HFILL }
7441
15
      },
7442
15
      { &hf_r3_alarmlog_hour,
7443
15
        { "Hours", "r3.alarmlog.hours",
7444
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7445
15
          NULL, HFILL }
7446
15
      },
7447
15
      { &hf_r3_alarmlog_minute,
7448
15
        { "Minutes", "r3.alarmlog.minutes",
7449
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7450
15
          NULL, HFILL }
7451
15
      },
7452
15
      { &hf_r3_alarmlog_second,
7453
15
        { "Seconds", "r3.alarmlog.seconds",
7454
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7455
15
          NULL, HFILL }
7456
15
      },
7457
15
      { &hf_r3_alarmlog_id,
7458
15
        { "ID", "r3.alarmlog.id",
7459
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
7460
15
          NULL, HFILL }
7461
15
      },
7462
15
      { &hf_r3_alarmlog_usernumber,
7463
15
        { "User Number", "r3.alarmlog.usernumber",
7464
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7465
15
          NULL, HFILL }
7466
15
      },
7467
7468
15
      { &hf_r3_debugmsg,
7469
15
        { "Debug Message", "r3.debug",
7470
15
          FT_STRING, BASE_NONE, NULL, 0x0,
7471
15
          NULL, HFILL }
7472
15
      },
7473
7474
15
      { &hf_r3_setdate_year,
7475
15
        { "Year", "r3.setdate.year",
7476
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7477
15
          NULL, HFILL }
7478
15
      },
7479
15
      { &hf_r3_setdate_month,
7480
15
        { "Month", "r3.setdate.month",
7481
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7482
15
          NULL, HFILL }
7483
15
      },
7484
15
      { &hf_r3_setdate_day,
7485
15
        { "Day", "r3.setdate.day",
7486
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7487
15
          NULL, HFILL }
7488
15
      },
7489
15
      { &hf_r3_setdate_dow,
7490
15
        { "Day-Of-Week", "r3.setdate.dow",
7491
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
7492
15
          NULL, HFILL }
7493
15
      },
7494
15
      { &hf_r3_setdate_hours,
7495
15
        { "Hours", "r3.setdate.hours",
7496
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7497
15
          NULL, HFILL }
7498
15
      },
7499
15
      { &hf_r3_setdate_minutes,
7500
15
        { "Minutes", "r3.setdate.minutes",
7501
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7502
15
          NULL, HFILL }
7503
15
      },
7504
15
      { &hf_r3_setdate_seconds,
7505
15
        { "Seconds", "r3.setdate.seconds",
7506
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7507
15
          NULL, HFILL }
7508
15
      },
7509
7510
15
      { &hf_r3_deleteusers,
7511
15
        { "Delete Users", "r3.deleteusers",
7512
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_deleteusersnames_ext, 0x0,
7513
15
          NULL, HFILL }
7514
15
      },
7515
7516
15
      { &hf_r3_defineexception_number,
7517
15
        { "Exception Number", "r3.defineexception.number",
7518
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7519
15
          NULL, HFILL }
7520
15
      },
7521
15
      { &hf_r3_defineexception_startdate_month,
7522
15
        { "Start Month", "r3.defineexception.start.month",
7523
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7524
15
          NULL, HFILL }
7525
15
      },
7526
15
      { &hf_r3_defineexception_startdate_day,
7527
15
        { "Start Day", "r3.defineexception.start.day",
7528
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7529
15
          NULL, HFILL }
7530
15
      },
7531
15
      { &hf_r3_defineexception_startdate_hours,
7532
15
        { "Start Hours", "r3.defineexception.start.hours",
7533
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7534
15
          NULL, HFILL }
7535
15
      },
7536
15
      { &hf_r3_defineexception_startdate_minutes,
7537
15
        { "Start Minutes", "r3.defineexception.start.minutes",
7538
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7539
15
          NULL, HFILL }
7540
15
      },
7541
15
      { &hf_r3_defineexception_enddate_month,
7542
15
        { "End Month", "r3.defineexception.end.month",
7543
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7544
15
          NULL, HFILL }
7545
15
      },
7546
15
      { &hf_r3_defineexception_enddate_day,
7547
15
        { "End Day", "r3.defineexception.end.day",
7548
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7549
15
          NULL, HFILL }
7550
15
      },
7551
15
      { &hf_r3_defineexception_enddate_hours,
7552
15
        { "End Hours", "r3.defineexception.end.hours",
7553
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7554
15
          NULL, HFILL }
7555
15
      },
7556
15
      { &hf_r3_defineexception_enddate_minutes,
7557
15
        { "End Minutes", "r3.defineexception.end.minutes",
7558
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7559
15
          NULL, HFILL }
7560
15
      },
7561
7562
15
      { &hf_r3_defineexceptiongroup_number,
7563
15
        { "Define Exception Group Number", "r3.defineexceptiongroup.number",
7564
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7565
15
          NULL, HFILL }
7566
15
      },
7567
15
      { &hf_r3_defineexceptiongroup_bits,
7568
15
        { "Define Exception Group Bit Field", "r3.defineexceptiongroup.field",
7569
15
          FT_NONE, BASE_NONE, NULL, 0x0,
7570
15
          NULL, HFILL }
7571
15
      },
7572
7573
15
      { &hf_r3_definecalendar_number,
7574
15
        { "Define Calendar Number", "r3.definecalendar.number",
7575
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7576
15
          NULL, HFILL }
7577
15
      },
7578
15
      { &hf_r3_definecalendar_bits,
7579
15
        { "Define Calendar Bit Field", "r3.definecalendar.field",
7580
15
          FT_NONE, BASE_NONE, NULL, 0x0,
7581
15
          NULL, HFILL }
7582
15
      },
7583
7584
15
      { &hf_r3_definetimezone_number,
7585
15
        { "Timezone Number", "r3.definetimezone.number",
7586
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7587
15
          NULL, HFILL }
7588
15
      },
7589
15
      { &hf_r3_definetimezone_starttime_hours,
7590
15
        { "Start Hours", "r3.definetimezone.start.hours",
7591
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7592
15
          NULL, HFILL }
7593
15
      },
7594
15
      { &hf_r3_definetimezone_starttime_minutes,
7595
15
        { "Start Minutes", "r3.definetimezone.start.minutes",
7596
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7597
15
          NULL, HFILL }
7598
15
      },
7599
15
      { &hf_r3_definetimezone_endtime_hours,
7600
15
        { "End Hours", "r3.definetimezone.end.hours",
7601
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7602
15
          NULL, HFILL }
7603
15
      },
7604
15
      { &hf_r3_definetimezone_endtime_minutes,
7605
15
        { "End Minutes", "r3.definetimezone.end.minutes",
7606
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7607
15
          NULL, HFILL }
7608
15
      },
7609
15
      { &hf_r3_definetimezone_daymap,
7610
15
        { "Day Map", "r3.definetimezone.daymap",
7611
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
7612
15
          NULL, HFILL }
7613
15
      },
7614
15
      { &hf_r3_definetimezone_daymap0,
7615
15
        { "Sunday", "r3.definetimezone.daymap.sunday",
7616
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
7617
15
          NULL, HFILL }
7618
15
      },
7619
15
      { &hf_r3_definetimezone_daymap1,
7620
15
        { "Monday", "r3.definetimezone.daymap.monday",
7621
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02,
7622
15
          NULL, HFILL }
7623
15
      },
7624
15
      { &hf_r3_definetimezone_daymap2,
7625
15
        { "Tuesday", "r3.definetimezone.daymap.tuesday",
7626
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x04,
7627
15
          NULL, HFILL }
7628
15
      },
7629
15
      { &hf_r3_definetimezone_daymap3,
7630
15
        { "Wednesday", "r3.definetimezone.daymap.wednesday",
7631
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x08,
7632
15
          NULL, HFILL }
7633
15
      },
7634
15
      { &hf_r3_definetimezone_daymap4,
7635
15
        { "Thursday", "r3.definetimezone.daymap.thursday",
7636
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x10,
7637
15
          NULL, HFILL }
7638
15
      },
7639
15
      { &hf_r3_definetimezone_daymap5,
7640
15
        { "Friday", "r3.definetimezone.daymap.friday",
7641
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x20,
7642
15
          NULL, HFILL }
7643
15
      },
7644
15
      { &hf_r3_definetimezone_daymap6,
7645
15
        { "Saturday", "r3.definetimezone.daymap.saturday",
7646
15
          FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x40,
7647
15
          NULL, HFILL }
7648
15
      },
7649
15
      { &hf_r3_definetimezone_exceptiongroup,
7650
15
        { "Exception Group", "r3.definetimezone.exceptiongroup",
7651
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7652
15
          NULL, HFILL }
7653
15
      },
7654
15
      { &hf_r3_definetimezone_mode,
7655
15
        { "Mode", "r3.definetimezone.mode",
7656
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_timezonemodenames_ext, 0x0,
7657
15
          NULL, HFILL }
7658
15
      },
7659
15
      { &hf_r3_definetimezone_calendar,
7660
15
        { "Calendar", "r3.definetimezone.calendar",
7661
15
          FT_NONE, BASE_NONE, NULL, 0x0,
7662
15
          NULL, HFILL }
7663
15
      },
7664
7665
15
      { &hf_r3_rmtauthretry_sequence,
7666
15
        { "Remote Auth Retry Sequence", "r3.rmtauthretry.sequence",
7667
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7668
15
          NULL, HFILL }
7669
15
      },
7670
15
      { &hf_r3_rmtauthretry_retry,
7671
15
        { "Remote Auth Retry Mode", "r3.rmtauthretry.mode",
7672
15
          FT_BOOLEAN, BASE_NONE, TFS (&tfs_rmtauthretry_flags), 0x0,
7673
15
          NULL, HFILL }
7674
15
      },
7675
7676
15
      { &hf_r3_eventlogdump_starttime_year,
7677
15
        { "Start Year", "r3.eventlogdump.start.year",
7678
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7679
15
          NULL, HFILL }
7680
15
      },
7681
15
      { &hf_r3_eventlogdump_starttime_month,
7682
15
        { "Start Month", "r3.eventlogdump.start.month",
7683
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7684
15
          NULL, HFILL }
7685
15
      },
7686
15
      { &hf_r3_eventlogdump_starttime_day,
7687
15
        { "Start Day", "r3.eventlogdump.start.day",
7688
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7689
15
          NULL, HFILL }
7690
15
      },
7691
15
      { &hf_r3_eventlogdump_starttime_hours,
7692
15
        { "Start Hours", "r3.eventlogdump.start.hours",
7693
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7694
15
          NULL, HFILL }
7695
15
      },
7696
15
      { &hf_r3_eventlogdump_starttime_minutes,
7697
15
        { "Start Minutes", "r3.eventlogdump.start.minutes",
7698
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7699
15
          NULL, HFILL }
7700
15
      },
7701
15
      { &hf_r3_eventlogdump_endtime_year,
7702
15
        { "End Year", "r3.eventlogdump.end.year",
7703
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7704
15
          NULL, HFILL }
7705
15
      },
7706
15
      { &hf_r3_eventlogdump_endtime_month,
7707
15
        { "End Month", "r3.eventlogdump.end.month",
7708
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7709
15
          NULL, HFILL }
7710
15
      },
7711
15
      { &hf_r3_eventlogdump_endtime_day,
7712
15
        { "End Day", "r3.eventlogdump.end.day",
7713
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7714
15
          NULL, HFILL }
7715
15
      },
7716
15
      { &hf_r3_eventlogdump_endtime_hours,
7717
15
        { "End Hours", "r3.eventlogdump.end.hours",
7718
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7719
15
          NULL, HFILL }
7720
15
      },
7721
15
      { &hf_r3_eventlogdump_endtime_minutes,
7722
15
        { "End Minutes", "r3.eventlogdump.end.minutes",
7723
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7724
15
          NULL, HFILL }
7725
15
      },
7726
15
      { &hf_r3_eventlogdump_user,
7727
15
        { "Filter User", "r3.eventlogdump.user",
7728
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7729
15
          NULL, HFILL }
7730
15
      },
7731
7732
15
      { &hf_r3_declinedlogdump_starttime_year,
7733
15
        { "Start Year", "r3.declinedlogdump.start.year",
7734
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7735
15
          NULL, HFILL }
7736
15
      },
7737
15
      { &hf_r3_declinedlogdump_starttime_month,
7738
15
        { "Start Month", "r3.declinedlogdump.start.month",
7739
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7740
15
          NULL, HFILL }
7741
15
      },
7742
15
      { &hf_r3_declinedlogdump_starttime_day,
7743
15
        { "Start Day", "r3.declinedlogdump.start.day",
7744
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7745
15
          NULL, HFILL }
7746
15
      },
7747
15
      { &hf_r3_declinedlogdump_starttime_hours,
7748
15
        { "Start Hours", "r3.declinedlogdump.start.hours",
7749
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7750
15
          NULL, HFILL }
7751
15
      },
7752
15
      { &hf_r3_declinedlogdump_starttime_minutes,
7753
15
        { "Start Minutes", "r3.declinedlogdump.start.minutes",
7754
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7755
15
          NULL, HFILL }
7756
15
      },
7757
15
      { &hf_r3_declinedlogdump_endtime_year,
7758
15
        { "End Year", "r3.declinedlogdump.end.year",
7759
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7760
15
          NULL, HFILL }
7761
15
      },
7762
15
      { &hf_r3_declinedlogdump_endtime_month,
7763
15
        { "End Month", "r3.declinedlogdump.end.month",
7764
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7765
15
          NULL, HFILL }
7766
15
      },
7767
15
      { &hf_r3_declinedlogdump_endtime_day,
7768
15
        { "End Day", "r3.declinedlogdump.end.day",
7769
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7770
15
          NULL, HFILL }
7771
15
      },
7772
15
      { &hf_r3_declinedlogdump_endtime_hours,
7773
15
        { "End Hours", "r3.declinedlogdump.end.hours",
7774
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7775
15
          NULL, HFILL }
7776
15
      },
7777
15
      { &hf_r3_declinedlogdump_endtime_minutes,
7778
15
        { "End Minutes", "r3.declinedlogdump.end.minutes",
7779
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7780
15
          NULL, HFILL }
7781
15
      },
7782
7783
15
      { &hf_r3_alarmlogdump_starttime_year,
7784
15
        { "Start Year", "r3.alarmlogdump.start.year",
7785
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7786
15
          NULL, HFILL }
7787
15
      },
7788
15
      { &hf_r3_alarmlogdump_starttime_month,
7789
15
        { "Start Month", "r3.alarmlogdump.start.month",
7790
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7791
15
          NULL, HFILL }
7792
15
      },
7793
15
      { &hf_r3_alarmlogdump_starttime_day,
7794
15
        { "Start Day", "r3.alarmlogdump.start.day",
7795
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7796
15
          NULL, HFILL }
7797
15
      },
7798
15
      { &hf_r3_alarmlogdump_starttime_hours,
7799
15
        { "Start Hours", "r3.alarmlogdump.start.hours",
7800
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7801
15
          NULL, HFILL }
7802
15
      },
7803
15
      { &hf_r3_alarmlogdump_starttime_minutes,
7804
15
        { "Start Minutes", "r3.alarmlogdump.start.minutes",
7805
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7806
15
          NULL, HFILL }
7807
15
      },
7808
15
      { &hf_r3_alarmlogdump_endtime_year,
7809
15
        { "End Year", "r3.alarmlogdump.end.year",
7810
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7811
15
          NULL, HFILL }
7812
15
      },
7813
15
      { &hf_r3_alarmlogdump_endtime_month,
7814
15
        { "End Month", "r3.alarmlogdump.end.month",
7815
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
7816
15
          NULL, HFILL }
7817
15
      },
7818
15
      { &hf_r3_alarmlogdump_endtime_day,
7819
15
        { "End Day", "r3.alarmlogdump.end.day",
7820
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7821
15
          NULL, HFILL }
7822
15
      },
7823
15
      { &hf_r3_alarmlogdump_endtime_hours,
7824
15
        { "End Hours", "r3.alarmlogdump.end.hours",
7825
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7826
15
          NULL, HFILL }
7827
15
      },
7828
15
      { &hf_r3_alarmlogdump_endtime_minutes,
7829
15
        { "End Minutes", "r3.alarmlogdump.end.minutes",
7830
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7831
15
          NULL, HFILL }
7832
15
      },
7833
7834
15
      { &hf_r3_nvramclearoptions,
7835
15
        { "NVRAM Clean Options", "r3.nvramclear",
7836
15
          FT_UINT16, BASE_HEX, NULL, 0x0,
7837
15
          NULL, HFILL }
7838
15
      },
7839
15
      { &hf_r3_nvramclearoptions0,
7840
15
        { "NVRAMCLEAROPTIONS_CFGINSTALLER", "r3.nvramclear.cfginstaller",
7841
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0001,
7842
15
          NULL, HFILL }
7843
15
      },
7844
15
      { &hf_r3_nvramclearoptions1,
7845
15
        { "NVRAMCLEAROPTIONS_CFGADMIN", "r3.nvramclear.cfgadmin",
7846
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0002,
7847
15
          NULL, HFILL }
7848
15
      },
7849
15
      { &hf_r3_nvramclearoptions2,
7850
15
        { "NVRAMCLEAROPTIONS_EXCEPTIONS", "r3.nvramclear.exceptions",
7851
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0004,
7852
15
          NULL, HFILL }
7853
15
      },
7854
15
      { &hf_r3_nvramclearoptions3,
7855
15
        { "NVRAMCLEAROPTIONS_EXCEPTIONGROUPS", "r3.nvramclear.exceptiongroups",
7856
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0008,
7857
15
          NULL, HFILL }
7858
15
      },
7859
15
      { &hf_r3_nvramclearoptions4,
7860
15
        { "NVRAMCLEAROPTIONS_CALENDARS", "r3.nvramclear.calendars",
7861
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0010,
7862
15
          NULL, HFILL }
7863
15
      },
7864
15
      { &hf_r3_nvramclearoptions5,
7865
15
        { "NVRAMCLEAROPTIONS_TIMEZONES", "r3.nvramclear.timezones",
7866
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0020,
7867
15
          NULL, HFILL }
7868
15
      },
7869
15
      { &hf_r3_nvramclearoptions6,
7870
15
        { "NVRAMCLEAROPTIONS_FILTERS", "r3.nvramclear.filters",
7871
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0040,
7872
15
          NULL, HFILL }
7873
15
      },
7874
15
      { &hf_r3_nvramclearoptions7,
7875
15
        { "NVRAMCLEAROPTIONS_EVENTLOG", "r3.nvramclear.eventlog",
7876
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0080,
7877
15
          NULL, HFILL }
7878
15
      },
7879
15
      { &hf_r3_nvramclearoptions8,
7880
15
        { "NVRAMCLEAROPTIONS_USERDATA", "r3.nvramclear.userdata",
7881
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0100,
7882
15
          NULL, HFILL }
7883
15
      },
7884
15
      { &hf_r3_nvramclearoptions9,
7885
15
        { "NVRAMCLEAROPTIONS_DECLINEDLOG", "r3.nvramclear.declinedlog",
7886
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0200,
7887
15
          NULL, HFILL }
7888
15
      },
7889
15
      { &hf_r3_nvramclearoptions10,
7890
15
        { "NVRAMCLEAROPTIONS_ALARMLOG", "r3.nvramclear.alarmlog",
7891
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0400,
7892
15
          NULL, HFILL }
7893
15
      },
7894
15
      { &hf_r3_nvramclearoptions11,
7895
15
        { "NVRAMCLEAROPTIONS_LRUCACHE", "r3.nvramclear.lrucache",
7896
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x0800,
7897
15
          NULL, HFILL }
7898
15
      },
7899
15
      { &hf_r3_nvramclearoptions12,
7900
15
        { "NVRAMCLEAROPTIONS_DBHASH", "r3.nvramclear.dbhash",
7901
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x1000,
7902
15
          NULL, HFILL }
7903
15
      },
7904
15
      { &hf_r3_nvramclearoptions13,
7905
15
        { "NVRAMCLEAROPTIONS_CFGSYSTEM", "r3.nvramclear.cfgsystem",
7906
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x2000,
7907
15
          NULL, HFILL }
7908
15
      },
7909
15
      { &hf_r3_nvramclearoptions14,
7910
15
        { "NVRAMCLEAROPTIONS_UNUSED", "r3.nvramclear.unused",
7911
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x4000,
7912
15
          NULL, HFILL }
7913
15
      },
7914
15
      { &hf_r3_nvramclearoptions15,
7915
15
        { "NVRAMCLEAROPTIONS_USEBACKUP", "r3.nvramclear.usebackup",
7916
15
          FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x8000,
7917
15
          NULL, HFILL }
7918
15
      },
7919
7920
15
      { &hf_r3_writeeventlog_user,
7921
15
        { "User", "r3.writeeventlog.user",
7922
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7923
15
          NULL, HFILL }
7924
15
      },
7925
15
      { &hf_r3_writeeventlog_event,
7926
15
        { "Event", "r3.writeeventlog.event",
7927
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
7928
15
          NULL, HFILL }
7929
15
      },
7930
7931
15
      { &hf_r3_powertableselection,
7932
15
        { "Table", "r3.powertableselection",
7933
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_powertablenames_ext, 0x0,
7934
15
          NULL, HFILL }
7935
15
      },
7936
7937
15
      { &hf_r3_filter_type,
7938
15
        { "Type", "r3.filter.type",
7939
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtertypenames_ext, 0x0,
7940
15
          NULL, HFILL }
7941
15
      },
7942
15
      { &hf_r3_filter_list,
7943
15
        { "Event", "r3.filter.event",
7944
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtereventnames_ext, 0x0,
7945
15
          NULL, HFILL }
7946
15
      },
7947
7948
15
      { &hf_r3_alarm_length,
7949
15
        { "Length", "r3.alarm.length",
7950
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7951
15
          NULL, HFILL }
7952
15
      },
7953
15
      { &hf_r3_alarm_id,
7954
15
        { "ID", "r3.alarm.id",
7955
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
7956
15
          NULL, HFILL }
7957
15
      },
7958
15
      { &hf_r3_alarm_state,
7959
15
        { "State", "r3.alarm.state",
7960
15
          FT_BOOLEAN, BASE_NONE, TFS (&tfs_enabled_disabled), 0x0,
7961
15
          NULL, HFILL }
7962
15
      },
7963
7964
      /* XXX: start: Originally missing: Best guess */
7965
15
      { &hf_r3_dpac_action,
7966
15
        { "Dpac Action", "r3.dpac.action",
7967
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7968
15
          NULL, HFILL }
7969
15
      },
7970
7971
15
      { &hf_r3_dpac_waittime,
7972
15
        { "Dpac Waittime", "r3.dpac.waittime",
7973
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
7974
15
          NULL, HFILL }
7975
15
      },
7976
7977
15
      { &hf_r3_dpac_command,
7978
15
        { "Dpac Command", "r3.dpac.command",
7979
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7980
15
          NULL, HFILL }
7981
15
      },
7982
7983
15
      { &hf_r3_dpacreply_stuff,
7984
15
        { "Dpac Reply Stuff", "r3.dpacreply.stuff",
7985
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7986
15
          NULL, HFILL }
7987
15
      },
7988
7989
15
      { &hf_r3_dpacreply_length,
7990
15
        { "Dpac Reply Length", "r3.dpacreply.length",
7991
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7992
15
          NULL, HFILL }
7993
15
      },
7994
7995
15
      { &hf_r3_dpacreply_reply,
7996
15
        { "Dpac Reply", "r3.dpacreply.reply",
7997
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
7998
15
          NULL, HFILL }
7999
15
      },
8000
      /* XXX: end: Originally missing --- */
8001
8002
15
      { &hf_r3_mfgfield_length,
8003
15
        { "Field Length", "r3.mfgfield.length",
8004
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8005
15
          NULL, HFILL }
8006
15
      },
8007
15
      { &hf_r3_mfgfield,
8008
15
        { "Field", "r3.mfgfield.field",
8009
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgfieldnames_ext, 0x0,
8010
15
          NULL, HFILL }
8011
15
      },
8012
#if 0
8013
      { &hf_r3_mfgfield_data,
8014
        { "Field Data", "r3.mfgfield.data",
8015
          FT_NONE, BASE_NONE, NULL, 0x0,
8016
          NULL, HFILL }
8017
      },
8018
#endif
8019
8020
15
      { &hf_r3_mfgsetserialnumber,
8021
15
        { "Serial Number", "r3.mfgsetserialnumber",
8022
15
          FT_STRING, BASE_NONE, NULL, 0x0,
8023
15
          NULL, HFILL }
8024
15
      },
8025
15
      { &hf_r3_mfgsetcryptkey,
8026
15
        { "Crypt Key", "r3.mfgsetcryptkey",
8027
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
8028
15
          NULL, HFILL }
8029
15
      },
8030
15
      { &hf_r3_mfgdumpnvram,
8031
15
        { "NVRAM Section", "r3.mfgnvramdump",
8032
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgnvramdumpnames_ext, 0x0,
8033
15
          NULL, HFILL }
8034
15
      },
8035
15
      { &hf_r3_mfgremoteunlock,
8036
15
        { "Remote Unlock", "r3.mfgremoteunlock",
8037
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgremoteunlocknames_ext, 0x0,
8038
15
          NULL, HFILL }
8039
15
      },
8040
15
      { &hf_r3_mfgtestpreserve,
8041
15
        { "Preserve Mode", "r3.mfgtestpreserve",
8042
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgtestpreservenames_ext, 0x0,
8043
15
          NULL, HFILL }
8044
15
      },
8045
8046
15
      { &hf_r3_adc [0],
8047
15
        { "ADC 0", "r3.adc.0",
8048
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8049
15
          NULL, HFILL }
8050
15
      },
8051
15
      { &hf_r3_adc [1],
8052
15
        { "ADC 1", "r3.adc.1",
8053
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8054
15
          NULL, HFILL }
8055
15
      },
8056
15
      { &hf_r3_adc [2],
8057
15
        { "ADC 2", "r3.adc.2",
8058
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8059
15
          NULL, HFILL }
8060
15
      },
8061
15
      { &hf_r3_adc [3],
8062
15
        { "ADC 3", "r3.adc.3",
8063
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8064
15
          NULL, HFILL }
8065
15
      },
8066
15
      { &hf_r3_adc [4],
8067
15
        { "ADC 4", "r3.adc.4",
8068
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8069
15
          NULL, HFILL }
8070
15
      },
8071
15
      { &hf_r3_adc [5],
8072
15
        { "ADC 5", "r3.adc.5",
8073
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8074
15
          NULL, HFILL }
8075
15
      },
8076
15
      { &hf_r3_adc [6],
8077
15
        { "ADC 6", "r3.adc.6",
8078
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8079
15
          NULL, HFILL }
8080
15
      },
8081
15
      { &hf_r3_adc [7],
8082
15
        { "ADC 7", "r3.adc.7",
8083
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8084
15
          NULL, HFILL }
8085
15
      },
8086
8087
15
      { &hf_r3_hardwareid_board,
8088
15
        { "Board ID", "r3.hardwareid.board",
8089
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8090
15
          NULL, HFILL }
8091
15
      },
8092
15
      { &hf_r3_hardwareid_cpuid,
8093
15
        { "CPU ID", "r3.hardwareid.cpuid",
8094
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8095
15
          NULL, HFILL }
8096
15
      },
8097
15
      { &hf_r3_hardwareid_cpurev,
8098
15
        { "CPU Rev", "r3.hardwareid.cpurev",
8099
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8100
15
          NULL, HFILL }
8101
15
      },
8102
8103
15
      { &hf_r3_testkeypad,
8104
15
        { "Keypad Char", "r3.test.keypad",
8105
15
          FT_CHAR, BASE_HEX, NULL, 0x0,
8106
15
          NULL, HFILL }
8107
15
      },
8108
15
      { &hf_r3_testmagcard,
8109
15
        { "Mag Card", "r3.test.magcard",
8110
15
          FT_STRING, BASE_NONE, NULL, 0x0,
8111
15
          NULL, HFILL }
8112
15
      },
8113
15
      { &hf_r3_testproxcard,
8114
15
        { "Prox Card", "r3.test.proxcard",
8115
15
          FT_STRING, BASE_NONE, NULL, 0x0,
8116
15
          NULL, HFILL }
8117
15
      },
8118
8119
15
      { &hf_r3_nvramdump_record,
8120
15
        { "Record Number", "r3.nvramdump.record",
8121
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8122
15
          NULL, HFILL }
8123
15
      },
8124
15
      { &hf_r3_nvramdump_length,
8125
15
        { "Record Length", "r3.nvramdump.length",
8126
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8127
15
          NULL, HFILL }
8128
15
      },
8129
15
      { &hf_r3_nvramdump_data,
8130
15
        { "Record Data", "r3.nvramdump.data",
8131
15
          FT_NONE, BASE_NONE, NULL, 0x0,
8132
15
          NULL, HFILL }
8133
15
      },
8134
8135
15
      { &hf_r3_nvramdumprle_record,
8136
15
        { "Record Number", "r3.nvramdumprle.record",
8137
15
          FT_UINT24, BASE_DEC_HEX, NULL, 0x0,
8138
15
          NULL, HFILL }
8139
15
      },
8140
15
      { &hf_r3_nvramdumprle_length,
8141
15
        { "Record Length", "r3.nvramdumprle.length",
8142
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
8143
15
          NULL, HFILL }
8144
15
      },
8145
15
      { &hf_r3_nvramdumprle_data,
8146
15
        { "Record Data", "r3.nvramdumprle.data",
8147
15
          FT_NONE, BASE_NONE, NULL, 0x0,
8148
15
          NULL, HFILL }
8149
15
      },
8150
8151
15
      { &hf_r3_iopins_lat,
8152
15
        { "LAT", "r3.iopins.lat",
8153
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8154
15
          NULL, HFILL }
8155
15
      },
8156
15
      { &hf_r3_iopins_port,
8157
15
        { "PORT", "r3.iopins.port",
8158
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8159
15
          NULL, HFILL }
8160
15
      },
8161
15
      { &hf_r3_iopins_tris,
8162
15
        { "TRIS", "r3.iopins.tris",
8163
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8164
15
          NULL, HFILL }
8165
15
      },
8166
8167
15
      { &hf_r3_mortisepins_s1,
8168
15
        { "Mortise Pin S1", "r3.mortisepins.s1",
8169
15
          FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x01,
8170
15
          NULL, HFILL }
8171
15
      },
8172
15
      { &hf_r3_mortisepins_s2,
8173
15
        { "Mortise Pin S2", "r3.mortisepins.s2",
8174
15
          FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x02,
8175
15
          NULL, HFILL }
8176
15
      },
8177
15
      { &hf_r3_mortisepins_s3,
8178
15
        { "Mortise Pin S3", "r3.mortisepins.s3",
8179
15
          FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x04,
8180
15
          NULL, HFILL }
8181
15
      },
8182
15
      { &hf_r3_mortisepins_s4,
8183
15
        { "Mortise Pin S4", "r3.mortisepins.s4",
8184
15
          FT_BOOLEAN, 8, TFS (&tfs_high_low), 0x08,
8185
15
          NULL, HFILL }
8186
15
      },
8187
8188
15
      { &hf_r3_checksumresults ,
8189
15
        { "Checksum Results", "r3.checksumresults",
8190
15
          FT_NONE, BASE_NONE, NULL, 0x0,
8191
15
          NULL, HFILL }
8192
15
      },
8193
15
      { &hf_r3_checksumresults_field,
8194
15
        { "Field", "r3.checksumresults.field",
8195
15
          FT_UINT8, BASE_HEX|BASE_EXT_STRING, & r3_checksumresultnames_ext, 0x0,
8196
15
          NULL, HFILL }
8197
15
      },
8198
15
      { &hf_r3_checksumresults_length,
8199
15
        { "Length", "r3.checksumresults.length",
8200
15
          FT_UINT8, BASE_HEX, NULL, 0x0,
8201
15
          NULL, HFILL }
8202
15
      },
8203
15
      { &hf_r3_checksumresults_state,
8204
15
        { "State", "r3.checksumresults.state",
8205
15
          FT_BOOLEAN, BASE_NONE, TFS (&tfs_errornoerror_flags), 0x0,
8206
15
          NULL, HFILL }
8207
15
      },
8208
8209
15
      { &hf_r3_forceoptions_item,
8210
15
        { "Item", "r3.forceoptions.item",
8211
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_forceitemnames_ext, 0x0,
8212
15
          NULL, HFILL }
8213
15
      },
8214
15
      { &hf_r3_forceoptions_length,
8215
15
        { "Length", "r3.forceoptions.length",
8216
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8217
15
          NULL, HFILL }
8218
15
      },
8219
15
      { &hf_r3_forceoptions_state_8,
8220
15
        { "State", "r3.forceoptions.state",
8221
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8222
15
          NULL, HFILL }
8223
15
      },
8224
15
      { &hf_r3_forceoptions_state_16,
8225
15
        { "State", "r3.forceoptions.state",
8226
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8227
15
          NULL, HFILL }
8228
15
      },
8229
15
      { &hf_r3_forceoptions_state_24,
8230
15
        { "State", "r3.forceoptions.state",
8231
15
          FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8232
15
          NULL, HFILL }
8233
15
      },
8234
15
      { &hf_r3_forceoptions_state_32,
8235
15
        { "State", "r3.forceoptions.state",
8236
15
          FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8237
15
          NULL, HFILL }
8238
15
      },
8239
8240
15
      { &hf_r3_peekpoke_operation,
8241
15
        { "Operation", "r3.peekpoke.operation",
8242
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_peekpokenames_ext, 0x0,
8243
15
          NULL, HFILL }
8244
15
      },
8245
15
      { &hf_r3_peekpoke_address,
8246
15
        { "Address", "r3.peekpoke.address",
8247
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8248
15
          NULL, HFILL }
8249
15
      },
8250
15
      { &hf_r3_peekpoke_length,
8251
15
        { "Length", "r3.peekpoke.length",
8252
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8253
15
          NULL, HFILL }
8254
15
      },
8255
15
      { &hf_r3_peekpoke_poke8,
8256
15
        { "8 Bit Value", "r3.peekpoke.poke8",
8257
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8258
15
          NULL, HFILL }
8259
15
      },
8260
15
      { &hf_r3_peekpoke_poke16,
8261
15
        { "16 Bit Value", "r3.peekpoke.poke16",
8262
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8263
15
          NULL, HFILL }
8264
15
      },
8265
15
      { &hf_r3_peekpoke_poke24,
8266
15
        { "24 Bit Value", "r3.peekpoke.poke24",
8267
15
          FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
8268
15
          NULL, HFILL }
8269
15
      },
8270
15
      { &hf_r3_peekpoke_poke32,
8271
15
        { "32 Bit Value", "r3.peekpoke.poke32",
8272
15
          FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8273
15
          NULL, HFILL }
8274
15
      },
8275
15
      { &hf_r3_peekpoke_pokestring,
8276
15
        { "String Value", "r3.peekpoke.pokestring",
8277
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
8278
15
          NULL, HFILL }
8279
15
      },
8280
8281
15
      { &hf_r3_firmwaredownload_length,
8282
15
        { "Length", "r3.firmwaredownload.length",
8283
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8284
15
          NULL, HFILL }
8285
15
      },
8286
15
      { &hf_r3_firmwaredownload_record,
8287
15
        { "Record Number", "r3.firmwaredownload.record",
8288
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8289
15
          NULL, HFILL }
8290
15
      },
8291
15
      { &hf_r3_firmwaredownload_action,
8292
15
        { "Action", "r3.firmwaredownload.action",
8293
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_downloadfirmwarenames_ext, 0x0,
8294
15
          NULL, HFILL }
8295
15
      },
8296
15
      { &hf_r3_firmwaredownload_timeout,
8297
15
        { "Timeout", "r3.firmwaredownload.timeout",
8298
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8299
15
          NULL, HFILL }
8300
15
      },
8301
15
      { &hf_r3_firmwaredownload_nvram,
8302
15
        { "NVRAM", "r3.firmwaredownload.nvram",
8303
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8304
15
          NULL, HFILL }
8305
15
      },
8306
15
      { &hf_r3_firmwaredownload_address,
8307
15
        { "Address", "r3.firmwaredownload.address",
8308
15
          FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
8309
15
          NULL, HFILL }
8310
15
      },
8311
15
      { &hf_r3_firmwaredownload_bytes,
8312
15
        { "Bytes", "r3.firmwaredownload.bytes",
8313
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8314
15
          NULL, HFILL }
8315
15
      },
8316
15
      { &hf_r3_firmwaredownload_data,
8317
15
        { "Data", "r3.firmwaredownload.data",
8318
15
          FT_NONE, BASE_NONE, NULL, 0x0,
8319
15
          NULL, HFILL }
8320
15
      },
8321
15
      { &hf_r3_firmwaredownload_crc,
8322
15
        { "CRC", "r3.firmwaredownload.crc",
8323
15
          FT_UINT16, BASE_HEX, NULL, 0x0,
8324
15
          NULL, HFILL }
8325
15
      },
8326
15
      { &hf_r3_firmwaredownload_crc_bad,
8327
15
        { "Bad CRC", "r3.firmwaredownload.crc_bad",
8328
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8329
15
          NULL, HFILL }
8330
15
      },
8331
8332
15
      { &hf_r3_nvramchecksumvalue,
8333
15
        { "Value", "r3.nvramchecksum.value",
8334
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
8335
15
          NULL, HFILL }
8336
15
      },
8337
15
      { &hf_r3_nvramchecksumvalue_fixup,
8338
15
        { "Fixup", "r3.nvramchecksum.fixup",
8339
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
8340
15
          NULL, HFILL }
8341
15
      },
8342
8343
15
      { &hf_r3_capabilities,
8344
15
        { "Capability", "r3.capabilities",
8345
15
          FT_NONE, BASE_NONE, NULL, 0x0,
8346
15
          NULL, HFILL }
8347
15
      },
8348
15
      { &hf_r3_capabilities_length,
8349
15
        { "Length", "r3.capabilities.length",
8350
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8351
15
          NULL, HFILL }
8352
15
      },
8353
15
      { &hf_r3_capabilities_type,
8354
15
        { "Type", "r3.capabilities.type",
8355
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_capabilitiesnames_ext, 0x0,
8356
15
          NULL, HFILL }
8357
15
      },
8358
15
      { &hf_r3_capabilities_value,
8359
15
        { "Value", "r3.capabilities.value",
8360
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8361
15
          NULL, HFILL }
8362
15
      },
8363
8364
15
      { &hf_r3_lockstate,
8365
15
        { "Lock State", "r3.lockstate",
8366
15
          FT_UINT24, BASE_HEX, NULL, 0x0,
8367
15
          NULL, HFILL }
8368
15
      },
8369
8370
15
      { &hf_r3_lockstate_passage,
8371
15
        { "Passage", "r3.lockstate.passage",
8372
15
          FT_BOOLEAN, 24, NULL, 0x000001,
8373
15
          NULL, HFILL }
8374
15
      },
8375
15
      { &hf_r3_lockstate_panic,
8376
15
        { "Panic", "r3.lockstate.panic",
8377
15
          FT_BOOLEAN, 24, NULL, 0x000002,
8378
15
          NULL, HFILL }
8379
15
      },
8380
15
      { &hf_r3_lockstate_lockout,
8381
15
        { "Lockout", "r3.lockstate.lockout",
8382
15
          FT_BOOLEAN, 24, NULL, 0x000004,
8383
15
          NULL, HFILL }
8384
15
      },
8385
15
      { &hf_r3_lockstate_relock,
8386
15
        { "Relock", "r3.lockstate.relock",
8387
15
          FT_BOOLEAN, 24, NULL, 0x000008,
8388
15
          NULL, HFILL }
8389
15
      },
8390
15
      { &hf_r3_lockstate_autoopen,
8391
15
        { "Auto Open", "r3.lockstate.autoopen",
8392
15
          FT_BOOLEAN, 24, NULL, 0x000010,
8393
15
          NULL, HFILL }
8394
15
      },
8395
15
      { &hf_r3_lockstate_nextauto,
8396
15
        { "Next Auto", "r3.lockstate.nextauto",
8397
15
          FT_BOOLEAN, 24, NULL, 0x000020,
8398
15
          NULL, HFILL }
8399
15
      },
8400
15
      { &hf_r3_lockstate_lockstate,
8401
15
        { "Lock State", "r3.lockstate.lockstate",
8402
15
          FT_BOOLEAN, 24, NULL, 0x000040,
8403
15
          NULL, HFILL }
8404
15
      },
8405
15
      { &hf_r3_lockstate_wantstate,
8406
15
        { "Want State", "r3.lockstate.wantstate",
8407
15
          FT_BOOLEAN, 24, NULL, 0x000080,
8408
15
          NULL, HFILL }
8409
15
      },
8410
15
      { &hf_r3_lockstate_remote,
8411
15
        { "Remote", "r3.lockstate.remote",
8412
15
          FT_BOOLEAN, 24, NULL, 0x000100,
8413
15
          NULL, HFILL }
8414
15
      },
8415
15
      { &hf_r3_lockstate_update,
8416
15
        { "Update", "r3.lockstate.update",
8417
15
          FT_BOOLEAN, 24, NULL, 0x000200,
8418
15
          NULL, HFILL }
8419
15
      },
8420
15
      { &hf_r3_lockstate_exceptionspresent,
8421
15
        { "Exceptions Present", "r3.lockstate.exceptionspresent",
8422
15
          FT_BOOLEAN, 24, NULL, 0x000400,
8423
15
          NULL, HFILL }
8424
15
      },
8425
15
      { &hf_r3_lockstate_exceptionsactive,
8426
15
        { "Exceptions Active", "r3.lockstate.exceptionsactive",
8427
15
          FT_BOOLEAN, 24, NULL, 0x000800,
8428
15
          NULL, HFILL }
8429
15
      },
8430
15
      { &hf_r3_lockstate_timezonespresent,
8431
15
        { "Timezones Presents", "r3.lockstate.timezonespresent",
8432
15
          FT_BOOLEAN, 24, NULL, 0x001000,
8433
15
          NULL, HFILL }
8434
15
      },
8435
15
      { &hf_r3_lockstate_timezonesactive,
8436
15
        { "Timezones Active", "r3.lockstate.timezonesactive",
8437
15
          FT_BOOLEAN, 24, NULL, 0x002000,
8438
15
          NULL, HFILL }
8439
15
      },
8440
15
      { &hf_r3_lockstate_autounlockspresent,
8441
15
        { "Auto Unlocks Present", "r3.lockstate.autounlockspresent",
8442
15
          FT_BOOLEAN, 24, NULL, 0x004000,
8443
15
          NULL, HFILL }
8444
15
      },
8445
15
      { &hf_r3_lockstate_autounlocksactive,
8446
15
        { "Auto Unlocks Active", "r3.lockstate.autounlocksactive",
8447
15
          FT_BOOLEAN, 24, NULL, 0x008000,
8448
15
          NULL, HFILL }
8449
15
      },
8450
15
      { &hf_r3_lockstate_uapmspresent,
8451
15
        { "UAPMs Present", "r3.lockstate.uapmspresent",
8452
15
          FT_BOOLEAN, 24, NULL, 0x010000,
8453
15
          NULL, HFILL }
8454
15
      },
8455
15
      { &hf_r3_lockstate_uapmsactive,
8456
15
        { "UAPMs Active", "r3.lockstate.uapmsactive",
8457
15
          FT_BOOLEAN, 24, NULL, 0x020000,
8458
15
          NULL, HFILL }
8459
15
      },
8460
15
      { &hf_r3_lockstate_uapmrelockspresent,
8461
15
        { "UAPM Relocks Present", "r3.lockstate.uapmrelockspresent",
8462
15
          FT_BOOLEAN, 24, NULL, 0x040000,
8463
15
          NULL, HFILL }
8464
15
      },
8465
15
      { &hf_r3_lockstate_uapmreslocksactive,
8466
15
        { "UAPM Relocks Active", "r3.lockstate.uapmreslocksactive",
8467
15
          FT_BOOLEAN, 24, NULL, 0x080000,
8468
15
          NULL, HFILL }
8469
15
      },
8470
15
      { &hf_r3_lockstate_nvramprotect,
8471
15
        { "NVRAM Protect", "r3.lockstate.nvramprotect",
8472
15
          FT_BOOLEAN, 24, NULL, 0x100000,
8473
15
          NULL, HFILL }
8474
15
      },
8475
15
      { &hf_r3_lockstate_nvramchecksum,
8476
15
        { "MVRAM Checksum", "r3.lockstate.nvramchecksum",
8477
15
          FT_BOOLEAN, 24, NULL, 0x200000,
8478
15
          NULL, HFILL }
8479
15
      },
8480
8481
#if 0
8482
      { &hf_r3_mortisestatelog,
8483
        { "Mortise State Log", "r3.mortisestatelog",
8484
          FT_NONE, BASE_NONE, NULL, 0x0,
8485
          NULL, HFILL }
8486
      },
8487
#endif
8488
15
      { &hf_r3_mortisestatelog_pointer,
8489
15
        { "Event Pointer", "r3.mortisestatelog.pointer",
8490
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8491
15
          NULL, HFILL }
8492
15
      },
8493
15
      { &hf_r3_mortisestatelog_mortisetype,
8494
15
        { "Mortise Type", "r3.mortisestatelog.mortisetype",
8495
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortisetypenames_ext, 0x0,
8496
15
          NULL, HFILL }
8497
15
      },
8498
15
      { &hf_r3_mortisestatelog_waiting,
8499
15
        { "Waiting For Door Closed", "r3.mortisestatelog.waiting",
8500
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x00,
8501
15
          NULL, HFILL }
8502
15
      },
8503
15
      { &hf_r3_mortisestatelog_state,
8504
15
        { "State", "r3.mortisestatelog.state",
8505
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8506
15
          NULL, HFILL }
8507
15
      },
8508
15
      { &hf_r3_mortisestatelog_last,
8509
15
        { "Last State", "r3.mortisestatelog.laststate",
8510
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8511
15
          NULL, HFILL }
8512
15
      },
8513
15
      { &hf_r3_mortisestatelog_event,
8514
15
        { "Event", "r3.mortisestatelog.event",
8515
15
          FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortiseeventnames_ext, 0x0,
8516
15
          NULL, HFILL }
8517
15
      },
8518
8519
15
      { &hf_r3_timerchain_newtick,
8520
15
        { "New Tick", "r3.timerchain.newtick",
8521
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8522
15
          NULL, HFILL }
8523
15
      },
8524
15
      { &hf_r3_timerchain_currentboundary,
8525
15
        { "Current Boundary", "r3.timerchain.currentboundary",
8526
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8527
15
          NULL, HFILL }
8528
15
      },
8529
15
      { &hf_r3_timerchain_tasktag,
8530
15
        { "Task Tag", "r3.timerchain.tasktag",
8531
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8532
15
          NULL, HFILL }
8533
15
      },
8534
15
      { &hf_r3_timerchain_address,
8535
15
        { "Address", "r3.timerchain.address",
8536
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8537
15
          NULL, HFILL }
8538
15
      },
8539
15
      { &hf_r3_timerchain_reload,
8540
15
        { "Reload", "r3.timerchain.reload",
8541
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8542
15
          NULL, HFILL }
8543
15
      },
8544
15
      { &hf_r3_timerchain_boundary,
8545
15
        { "Boundary", "r3.timerchain.boundary",
8546
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8547
15
          NULL, HFILL }
8548
15
      },
8549
15
      { &hf_r3_timerchain_count,
8550
15
        { "Count", "r3.timerchain.count",
8551
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8552
15
          NULL, HFILL }
8553
15
      },
8554
15
      { &hf_r3_timerchain_flags,
8555
15
        { "Flags", "r3.timerchain.flags",
8556
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
8557
15
          NULL, HFILL }
8558
15
      },
8559
8560
15
      { &hf_r3_taskflags_taskid,
8561
15
        { "Task ID", "r3.taskflags.taskid",
8562
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8563
15
          NULL, HFILL }
8564
15
      },
8565
15
      { &hf_r3_taskflags_flags,
8566
15
        { "Flags", "r3.taskflags.flags",
8567
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
8568
15
          NULL, HFILL }
8569
15
      },
8570
8571
15
      { &hf_r3_checkpointlog_entryptr,
8572
15
        { "Entry Pointer", "r3.checkpointlog.entrypointer",
8573
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8574
15
          NULL, HFILL }
8575
15
      },
8576
15
      { &hf_r3_checkpointlog_rcon,
8577
15
        { "RCON", "r3.checkpointlog.rcon",
8578
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8579
15
          NULL, HFILL }
8580
15
      },
8581
15
      { &hf_r3_checkpointlog_checkpoint,
8582
15
        { "Checkpoint", "r3.checkpointlog.checkpoint",
8583
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8584
15
          NULL, HFILL }
8585
15
      },
8586
8587
15
      { &hf_r3_cpuregisters_intcon,
8588
15
        { "INTCON", "r3.cpuregisters.intcon",
8589
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8590
15
          NULL, HFILL }
8591
15
      },
8592
15
      { &hf_r3_cpuregisters_intcon2,
8593
15
        { "INTCON2", "r3.cpuregisters.intcon2",
8594
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8595
15
          NULL, HFILL }
8596
15
      },
8597
15
      { &hf_r3_cpuregisters_intcon3,
8598
15
        { "INTCON3", "r3.cpuregisters.intcon3",
8599
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8600
15
          NULL, HFILL }
8601
15
      },
8602
15
      { &hf_r3_cpuregisters_pir1,
8603
15
        { "PIR1", "r3.cpuregisters.pir1",
8604
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8605
15
          NULL, HFILL }
8606
15
      },
8607
15
      { &hf_r3_cpuregisters_pir2,
8608
15
        { "PIR2", "r3.cpuregisters.pir2",
8609
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8610
15
          NULL, HFILL }
8611
15
      },
8612
15
      { &hf_r3_cpuregisters_pir3,
8613
15
        { "PIR3", "r3.cpuregisters.pir3",
8614
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8615
15
          NULL, HFILL }
8616
15
      },
8617
15
      { &hf_r3_cpuregisters_pie1,
8618
15
        { "PIE1", "r3.cpuregisters.pie1",
8619
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8620
15
          NULL, HFILL }
8621
15
      },
8622
15
      { &hf_r3_cpuregisters_pie2,
8623
15
        { "PIE2", "r3.cpuregisters.pie2",
8624
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8625
15
          NULL, HFILL }
8626
15
      },
8627
15
      { &hf_r3_cpuregisters_pie3,
8628
15
        { "PIE3", "r3.cpuregisters.pie3",
8629
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8630
15
          NULL, HFILL }
8631
15
      },
8632
15
      { &hf_r3_cpuregisters_ipr1,
8633
15
        { "IPR1", "r3.cpuregisters.ipr1",
8634
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8635
15
          NULL, HFILL }
8636
15
      },
8637
15
      { &hf_r3_cpuregisters_ipr2,
8638
15
        { "IPR2", "r3.cpuregisters.ipr2",
8639
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8640
15
          NULL, HFILL }
8641
15
      },
8642
15
      { &hf_r3_cpuregisters_ipr3,
8643
15
        { "IPR3", "r3.cpuregisters.ipr3",
8644
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8645
15
          NULL, HFILL }
8646
15
      },
8647
15
      { &hf_r3_cpuregisters_rcon,
8648
15
        { "RCON", "r3.cpuregisters.rcon",
8649
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8650
15
          NULL, HFILL }
8651
15
      },
8652
15
      { &hf_r3_cpuregisters_osccon,
8653
15
        { "OSCCON", "r3.cpuregisters.osccon",
8654
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8655
15
          NULL, HFILL }
8656
15
      },
8657
15
      { &hf_r3_cpuregisters_rcsta,
8658
15
        { "RCSTA", "r3.cpuregisters.rcsta",
8659
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8660
15
          NULL, HFILL }
8661
15
      },
8662
15
      { &hf_r3_cpuregisters_txsta,
8663
15
        { "TXSTA", "r3.cpuregisters.txsta",
8664
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8665
15
          NULL, HFILL }
8666
15
      },
8667
15
      { &hf_r3_cpuregisters_rcsta2,
8668
15
        { "RCSTA2", "r3.cpuregisters.rcsta2",
8669
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8670
15
          NULL, HFILL }
8671
15
      },
8672
15
      { &hf_r3_cpuregisters_txsta2,
8673
15
        { "TXSTA2", "r3.cpuregisters.txsta2",
8674
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8675
15
          NULL, HFILL }
8676
15
      },
8677
15
      { &hf_r3_cpuregisters_wdtcon,
8678
15
        { "WDTCON", "r3.cpuregisters.wdtcon",
8679
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8680
15
          NULL, HFILL }
8681
15
      },
8682
8683
15
      { &hf_r3_cpuregisters_intcon_rbif,
8684
15
        { "INTCON.RBIF", "r3.cpuregisters.intcon.rbif",
8685
15
          FT_BOOLEAN, 8, NULL, 0x01,
8686
15
          NULL, HFILL }
8687
15
      },
8688
15
      { &hf_r3_cpuregisters_intcon_int0if,
8689
15
        { "INTCON.INT0IF", "r3.cpuregisters.intcon.int0if",
8690
15
          FT_BOOLEAN, 8, NULL, 0x02,
8691
15
          NULL, HFILL }
8692
15
      },
8693
15
      { &hf_r3_cpuregisters_intcon_tmr0if,
8694
15
        { "INTCON.TMR0IF", "r3.cpuregisters.intcon.tmr0if",
8695
15
          FT_BOOLEAN, 8, NULL, 0x04,
8696
15
          NULL, HFILL }
8697
15
      },
8698
15
      { &hf_r3_cpuregisters_intcon_rbie,
8699
15
        { "INTCON.RBIE", "r3.cpuregisters.intcon.rbie",
8700
15
          FT_BOOLEAN, 8, NULL, 0x08,
8701
15
          NULL, HFILL }
8702
15
      },
8703
15
      { &hf_r3_cpuregisters_intcon_int0ie,
8704
15
        { "INTCON.INT0IE", "r3.cpuregisters.intcon.int0ie",
8705
15
          FT_BOOLEAN, 8, NULL, 0x10,
8706
15
          NULL, HFILL }
8707
15
      },
8708
15
      { &hf_r3_cpuregisters_intcon_tmr0ie,
8709
15
        { "INTCON.TMR0IE", "r3.cpuregisters.intcon.tmr0ie",
8710
15
          FT_BOOLEAN, 8, NULL, 0x20,
8711
15
          NULL, HFILL }
8712
15
      },
8713
15
      { &hf_r3_cpuregisters_intcon_giel,
8714
15
        { "INTCON.GIEL", "r3.cpuregisters.intcon.giel",
8715
15
          FT_BOOLEAN, 8, NULL, 0x40,
8716
15
          NULL, HFILL }
8717
15
      },
8718
15
      { &hf_r3_cpuregisters_intcon_gieh,
8719
15
        { "INTCON.GIEH", "r3.cpuregisters.intcon.gieh",
8720
15
          FT_BOOLEAN, 8, NULL, 0x80,
8721
15
          NULL, HFILL }
8722
15
      },
8723
15
      { &hf_r3_cpuregisters_intcon2_rbip,
8724
15
        { "INTCON2.RBIP", "r3_cpuregisters_intcon2_rbip",
8725
15
          FT_BOOLEAN, 8, NULL, 0x01,
8726
15
          NULL, HFILL }
8727
15
      },
8728
15
      { &hf_r3_cpuregisters_intcon2_int3ip,
8729
15
        { "INTCON2.INT3IP", "r3_cpuregisters_intcon2_int3ip",
8730
15
          FT_BOOLEAN, 8, NULL, 0x02,
8731
15
          NULL, HFILL }
8732
15
      },
8733
15
      { &hf_r3_cpuregisters_intcon2_tmr0ip,
8734
15
        { "INTCON2.TMR0IP", "r3_cpuregisters_intcon2_tmr0ip",
8735
15
          FT_BOOLEAN, 8, NULL, 0x04,
8736
15
          NULL, HFILL }
8737
15
      },
8738
15
      { &hf_r3_cpuregisters_intcon2_intedg3,
8739
15
        { "INTCON2.INTEDG3", "r3_cpuregisters_intcon2_intedg3",
8740
15
          FT_BOOLEAN, 8, NULL, 0x08,
8741
15
          NULL, HFILL }
8742
15
      },
8743
15
      { &hf_r3_cpuregisters_intcon2_intedg2,
8744
15
        { "INTCON2.INTEDG2", "r3_cpuregisters_intcon2_intedg2",
8745
15
          FT_BOOLEAN, 8, NULL, 0x10,
8746
15
          NULL, HFILL }
8747
15
      },
8748
15
      { &hf_r3_cpuregisters_intcon2_intedg1,
8749
15
        { "INTCON2.INTEDG1", "r3_cpuregisters_intcon2_intedg1",
8750
15
          FT_BOOLEAN, 8, NULL, 0x20,
8751
15
          NULL, HFILL }
8752
15
      },
8753
15
      { &hf_r3_cpuregisters_intcon2_intedg0,
8754
15
        { "INTCON2.INTEDG0", "r3_cpuregisters_intcon2_intedg0",
8755
15
          FT_BOOLEAN, 8, NULL, 0x40,
8756
15
          NULL, HFILL }
8757
15
      },
8758
15
      { &hf_r3_cpuregisters_intcon2_rbpu,
8759
15
        { "INTCON2.RBPU", "r3_cpuregisters_intcon2_rbpu",
8760
15
          FT_BOOLEAN, 8, NULL, 0x80,
8761
15
          NULL, HFILL }
8762
15
      },
8763
15
      { &hf_r3_cpuregisters_intcon3_int1if,
8764
15
        { "INTCON3.INT1IF", "r3.cpuregisters.intcon3.int1if",
8765
15
          FT_BOOLEAN, 8, NULL, 0x01,
8766
15
          NULL, HFILL }
8767
15
      },
8768
15
      { &hf_r3_cpuregisters_intcon3_int2if,
8769
15
        { "INTCON3.INT2IF", "r3.cpuregisters.intcon3.int2if",
8770
15
          FT_BOOLEAN, 8, NULL, 0x02,
8771
15
          NULL, HFILL }
8772
15
      },
8773
15
      { &hf_r3_cpuregisters_intcon3_int3if,
8774
15
        { "INTCON3.INT3IF", "r3.cpuregisters.intcon3.int3if",
8775
15
          FT_BOOLEAN, 8, NULL, 0x04,
8776
15
          NULL, HFILL }
8777
15
      },
8778
15
      { &hf_r3_cpuregisters_intcon3_int1ie,
8779
15
        { "INTCON3.INT1IE", "r3.cpuregisters.intcon3.int1ie",
8780
15
          FT_BOOLEAN, 8, NULL, 0x08,
8781
15
          NULL, HFILL }
8782
15
      },
8783
15
      { &hf_r3_cpuregisters_intcon3_int2ie,
8784
15
        { "INTCON3.INT2IE", "r3.cpuregisters.intcon3.int2ie",
8785
15
          FT_BOOLEAN, 8, NULL, 0x10,
8786
15
          NULL, HFILL }
8787
15
      },
8788
15
      { &hf_r3_cpuregisters_intcon3_int3ie,
8789
15
        { "INTCON3.INT3IE", "r3.cpuregisters.intcon3.int3ie",
8790
15
          FT_BOOLEAN, 8, NULL, 0x20,
8791
15
          NULL, HFILL }
8792
15
      },
8793
15
      { &hf_r3_cpuregisters_intcon3_int1ip,
8794
15
        { "INTCON3.INT1IP", "r3.cpuregisters.intcon3.int1ip",
8795
15
          FT_BOOLEAN, 8, NULL, 0x40,
8796
15
          NULL, HFILL }
8797
15
      },
8798
15
      { &hf_r3_cpuregisters_intcon3_int2ip,
8799
15
        { "INTCON3.INT2IP", "r3.cpuregisters.intcon3.int2ip",
8800
15
          FT_BOOLEAN, 8, NULL, 0x80,
8801
15
          NULL, HFILL }
8802
15
      },
8803
15
      { &hf_r3_cpuregisters_pir1_tmr1if,
8804
15
        { "PIR1.TMR1IF", "r3.cpuregisters.pir1.tmr1if",
8805
15
          FT_BOOLEAN, 8, NULL, 0x01,
8806
15
          NULL, HFILL }
8807
15
      },
8808
15
      { &hf_r3_cpuregisters_pir1_tmr2if,
8809
15
        { "PIR1.TMR2IF", "r3.cpuregisters.pir1.tmr2if",
8810
15
          FT_BOOLEAN, 8, NULL, 0x02,
8811
15
          NULL, HFILL }
8812
15
      },
8813
15
      { &hf_r3_cpuregisters_pir1_ccp1if,
8814
15
        { "PIR1.CCP1IF", "r3.cpuregisters.pir1.ccp1if",
8815
15
          FT_BOOLEAN, 8, NULL, 0x04,
8816
15
          NULL, HFILL }
8817
15
      },
8818
15
      { &hf_r3_cpuregisters_pir1_ssp1if,
8819
15
        { "PIR1.SSP1IF", "r3.cpuregisters.pir1.ssp1if",
8820
15
          FT_BOOLEAN, 8, NULL, 0x08,
8821
15
          NULL, HFILL }
8822
15
      },
8823
15
      { &hf_r3_cpuregisters_pir1_tx1if,
8824
15
        { "PIR1.TX1IF", "r3.cpuregisters.pir1.tx1if",
8825
15
          FT_BOOLEAN, 8, NULL, 0x10,
8826
15
          NULL, HFILL }
8827
15
      },
8828
15
      { &hf_r3_cpuregisters_pir1_rc1if,
8829
15
        { "PIR1.RC1IF", "r3.cpuregisters.pir1.rc1if",
8830
15
          FT_BOOLEAN, 8, NULL, 0x20,
8831
15
          NULL, HFILL }
8832
15
      },
8833
15
      { &hf_r3_cpuregisters_pir1_adif,
8834
15
        { "PIR1.ADIF", "r3.cpuregisters.pir1.adif",
8835
15
          FT_BOOLEAN, 8, NULL, 0x40,
8836
15
          NULL, HFILL }
8837
15
      },
8838
15
      { &hf_r3_cpuregisters_pir1_pspif,
8839
15
        { "PIR1.PSPIF", "r3.cpuregisters.pir1.pspif",
8840
15
          FT_BOOLEAN, 8, NULL, 0x80,
8841
15
          NULL, HFILL }
8842
15
      },
8843
15
      { &hf_r3_cpuregisters_pir2_ccp2if,
8844
15
        { "PIR2.CCP2IF", "r3.cpuregisters.pir2.ccp2if",
8845
15
          FT_BOOLEAN, 8, NULL, 0x01,
8846
15
          NULL, HFILL }
8847
15
      },
8848
15
      { &hf_r3_cpuregisters_pir2_tmr3if,
8849
15
        { "PIR2.TMR3IF", "r3.cpuregisters.pir2.tmr3if",
8850
15
          FT_BOOLEAN, 8, NULL, 0x02,
8851
15
          NULL, HFILL }
8852
15
      },
8853
15
      { &hf_r3_cpuregisters_pir2_hlvdif,
8854
15
        { "PIR2.HLVDIF", "r3.cpuregisters.pir2.hlvdif",
8855
15
          FT_BOOLEAN, 8, NULL, 0x04,
8856
15
          NULL, HFILL }
8857
15
      },
8858
15
      { &hf_r3_cpuregisters_pir2_bcl1if,
8859
15
        { "PIR2.BCL1IF", "r3.cpuregisters.pir2.bcl1if",
8860
15
          FT_BOOLEAN, 8, NULL, 0x08,
8861
15
          NULL, HFILL }
8862
15
      },
8863
15
      { &hf_r3_cpuregisters_pir2_eeif,
8864
15
        { "PIR2.EEIF", "r3.cpuregisters.pir2.eeif",
8865
15
          FT_BOOLEAN, 8, NULL, 0x10,
8866
15
          NULL, HFILL }
8867
15
      },
8868
15
      { &hf_r3_cpuregisters_pir2_unused5,
8869
15
        { "PIR2.UNUSED5", "r3.cpuregisters.pir2.unused5",
8870
15
          FT_BOOLEAN, 8, NULL, 0x20,
8871
15
          NULL, HFILL }
8872
15
      },
8873
15
      { &hf_r3_cpuregisters_pir2_cmif,
8874
15
        { "PIR2.CMIF", "r3.cpuregisters.pir2.cmif",
8875
15
          FT_BOOLEAN, 8, NULL, 0x40,
8876
15
          NULL, HFILL }
8877
15
      },
8878
15
      { &hf_r3_cpuregisters_pir2_oscfif,
8879
15
        { "PIR2.OSCFIF", "r3.cpuregisters.pir2.oscfif",
8880
15
          FT_BOOLEAN, 8, NULL, 0x80,
8881
15
          NULL, HFILL }
8882
15
      },
8883
15
      { &hf_r3_cpuregisters_pir3_ccp3if,
8884
15
        { "PIR3.CCP3IF", "r3.cpuregisters.pir3.ccp3if",
8885
15
          FT_BOOLEAN, 8, NULL, 0x01,
8886
15
          NULL, HFILL }
8887
15
      },
8888
15
      { &hf_r3_cpuregisters_pir3_ccp4if,
8889
15
        { "PIR3.CCP4IF", "r3.cpuregisters.pir3.ccp4if",
8890
15
          FT_BOOLEAN, 8, NULL, 0x02,
8891
15
          NULL, HFILL }
8892
15
      },
8893
15
      { &hf_r3_cpuregisters_pir3_ccp5if,
8894
15
        { "PIR3.CCP5IF", "r3.cpuregisters.pir3.ccp5if",
8895
15
          FT_BOOLEAN, 8, NULL, 0x04,
8896
15
          NULL, HFILL }
8897
15
      },
8898
15
      { &hf_r3_cpuregisters_pir3_tmr4if,
8899
15
        { "PIR3.TMR4IF", "r3.cpuregisters.pir3.tmr4if",
8900
15
          FT_BOOLEAN, 8, NULL, 0x08,
8901
15
          NULL, HFILL }
8902
15
      },
8903
15
      { &hf_r3_cpuregisters_pir3_tx2if,
8904
15
        { "PIR3.TX2IF", "r3.cpuregisters.pir3.tx2if",
8905
15
          FT_BOOLEAN, 8, NULL, 0x10,
8906
15
          NULL, HFILL }
8907
15
      },
8908
15
      { &hf_r3_cpuregisters_pir3_rc2if,
8909
15
        { "PIR3.RC2IF", "r3.cpuregisters.pir3.rc2if",
8910
15
          FT_BOOLEAN, 8, NULL, 0x20,
8911
15
          NULL, HFILL }
8912
15
      },
8913
15
      { &hf_r3_cpuregisters_pir3_bcl2if,
8914
15
        { "PIR3.BCL2IF", "r3.cpuregisters.pir3.bcl2if",
8915
15
          FT_BOOLEAN, 8, NULL, 0x40,
8916
15
          NULL, HFILL }
8917
15
      },
8918
15
      { &hf_r3_cpuregisters_pir3_ssp2if,
8919
15
        { "PIR3.SSP2IF", "r3.cpuregisters.pir3.ssp2if",
8920
15
          FT_BOOLEAN, 8, NULL, 0x80,
8921
15
          NULL, HFILL }
8922
15
      },
8923
15
      { &hf_r3_cpuregisters_pie1_tmr1ie,
8924
15
        { "PIE1.TMR1IE", "r3.cpuregisters.pie1.tmr1ie",
8925
15
          FT_BOOLEAN, 8, NULL, 0x01,
8926
15
          NULL, HFILL }
8927
15
      },
8928
15
      { &hf_r3_cpuregisters_pie1_tmr2ie,
8929
15
        { "PIE1.TMR2IE", "r3.cpuregisters.pie1.tmr2ie",
8930
15
          FT_BOOLEAN, 8, NULL, 0x02,
8931
15
          NULL, HFILL }
8932
15
      },
8933
15
      { &hf_r3_cpuregisters_pie1_ccp1ie,
8934
15
        { "PIE1.CCP1IE", "r3.cpuregisters.pie1.ccp1ie",
8935
15
          FT_BOOLEAN, 8, NULL, 0x04,
8936
15
          NULL, HFILL }
8937
15
      },
8938
15
      { &hf_r3_cpuregisters_pie1_ssp1ie,
8939
15
        { "PIE1.SSP1IE", "r3.cpuregisters.pie1.ssp1ie",
8940
15
          FT_BOOLEAN, 8, NULL, 0x08,
8941
15
          NULL, HFILL }
8942
15
      },
8943
15
      { &hf_r3_cpuregisters_pie1_tx1ie,
8944
15
        { "PIE1.TX1IE", "r3.cpuregisters.pie1.tx1ie",
8945
15
          FT_BOOLEAN, 8, NULL, 0x10,
8946
15
          NULL, HFILL }
8947
15
      },
8948
15
      { &hf_r3_cpuregisters_pie1_rc1ie,
8949
15
        { "PIE1.RC1IE", "r3.cpuregisters.pie1.rc1ie",
8950
15
          FT_BOOLEAN, 8, NULL, 0x20,
8951
15
          NULL, HFILL }
8952
15
      },
8953
15
      { &hf_r3_cpuregisters_pie1_adie,
8954
15
        { "PIE1.ADIE", "r3.cpuregisters.pie1.adie",
8955
15
          FT_BOOLEAN, 8, NULL, 0x40,
8956
15
          NULL, HFILL }
8957
15
      },
8958
15
      { &hf_r3_cpuregisters_pie1_pspie,
8959
15
        { "PIE1.PSPIE", "r3.cpuregisters.pie1.pspie",
8960
15
          FT_BOOLEAN, 8, NULL, 0x80,
8961
15
          NULL, HFILL }
8962
15
      },
8963
15
      { &hf_r3_cpuregisters_pie2_oscfie,
8964
15
        { "PIE2.OSCFIE", "r3.cpuregisters.pie2.oscfie",
8965
15
          FT_BOOLEAN, 8, NULL, 0x01,
8966
15
          NULL, HFILL }
8967
15
      },
8968
15
      { &hf_r3_cpuregisters_pie2_cmie,
8969
15
        { "PIE2.CMIE", "r3.cpuregisters.pie2.cmie",
8970
15
          FT_BOOLEAN, 8, NULL, 0x02,
8971
15
          NULL, HFILL }
8972
15
      },
8973
15
      { &hf_r3_cpuregisters_pie2_unused2,
8974
15
        { "PIE2.UNUSED2", "r3.cpuregisters.pie2.unused2",
8975
15
          FT_BOOLEAN, 8, NULL, 0x04,
8976
15
          NULL, HFILL }
8977
15
      },
8978
15
      { &hf_r3_cpuregisters_pie2_eeie,
8979
15
        { "PIE2.EEIE", "r3.cpuregisters.pie2.eeie",
8980
15
          FT_BOOLEAN, 8, NULL, 0x08,
8981
15
          NULL, HFILL }
8982
15
      },
8983
15
      { &hf_r3_cpuregisters_pie2_bcl1ie,
8984
15
        { "PIE2.BCL1IE", "r3.cpuregisters.pie2.bcl1ie",
8985
15
          FT_BOOLEAN, 8, NULL, 0x10,
8986
15
          NULL, HFILL }
8987
15
      },
8988
15
      { &hf_r3_cpuregisters_pie2_hlvdie,
8989
15
        { "PIE2.HLVDIE", "r3.cpuregisters.pie2.hlvdie",
8990
15
          FT_BOOLEAN, 8, NULL, 0x20,
8991
15
          NULL, HFILL }
8992
15
      },
8993
15
      { &hf_r3_cpuregisters_pie2_tmr3ie,
8994
15
        { "PIE2.TMR3IE", "r3.cpuregisters.pie2.tmr3ie",
8995
15
          FT_BOOLEAN, 8, NULL, 0x40,
8996
15
          NULL, HFILL }
8997
15
      },
8998
15
      { &hf_r3_cpuregisters_pie2_ccp2ie,
8999
15
        { "PIE2.CCP2IE", "r3.cpuregisters.pie2.ccp2ie",
9000
15
          FT_BOOLEAN, 8, NULL, 0x80,
9001
15
          NULL, HFILL }
9002
15
      },
9003
15
      { &hf_r3_cpuregisters_pie3_ccp3ie,
9004
15
        { "PIE3.CCP3IE", "r3.cpuregisters.pie3.ccp3ie",
9005
15
          FT_BOOLEAN, 8, NULL, 0x01,
9006
15
          NULL, HFILL }
9007
15
      },
9008
15
      { &hf_r3_cpuregisters_pie3_ccp4ie,
9009
15
        { "PIE3.CCP4IE", "r3.cpuregisters.pie3.ccp4ie",
9010
15
          FT_BOOLEAN, 8, NULL, 0x02,
9011
15
          NULL, HFILL }
9012
15
      },
9013
15
      { &hf_r3_cpuregisters_pie3_ccp5ie,
9014
15
        { "PIE3.CCP5IE", "r3.cpuregisters.pie3.ccp5ie",
9015
15
          FT_BOOLEAN, 8, NULL, 0x04,
9016
15
          NULL, HFILL }
9017
15
      },
9018
15
      { &hf_r3_cpuregisters_pie3_tmr4ie,
9019
15
        { "PIE3.TMR4IE", "r3.cpuregisters.pie3.tmr4ie",
9020
15
          FT_BOOLEAN, 8, NULL, 0x08,
9021
15
          NULL, HFILL }
9022
15
      },
9023
15
      { &hf_r3_cpuregisters_pie3_tx2ie,
9024
15
        { "PIE3.TX2IE", "r3.cpuregisters.pie3.tx2ie",
9025
15
          FT_BOOLEAN, 8, NULL, 0x10,
9026
15
          NULL, HFILL }
9027
15
      },
9028
15
      { &hf_r3_cpuregisters_pie3_rc2ie,
9029
15
        { "PIE3.RC2IE", "r3.cpuregisters.pie3.rc2ie",
9030
15
          FT_BOOLEAN, 8, NULL, 0x20,
9031
15
          NULL, HFILL }
9032
15
      },
9033
15
      { &hf_r3_cpuregisters_pie3_bcl2ie,
9034
15
        { "PIE3.BCL2IE", "r3.cpuregisters.pie3.bcl2ie",
9035
15
          FT_BOOLEAN, 8, NULL, 0x40,
9036
15
          NULL, HFILL }
9037
15
      },
9038
15
      { &hf_r3_cpuregisters_pie3_ssp2ie,
9039
15
        { "PIE3.SSP2IE", "r3.cpuregisters.pie3.ssp2ie",
9040
15
          FT_BOOLEAN, 8, NULL, 0x80,
9041
15
          NULL, HFILL }
9042
15
      },
9043
15
      { &hf_r3_cpuregisters_ipr1_tmr1ip,
9044
15
        { "IPR1.TMR1IP", "r3.cpuregisters.ipr1.tmr1ip",
9045
15
          FT_BOOLEAN, 8, NULL, 0x01,
9046
15
          NULL, HFILL }
9047
15
      },
9048
15
      { &hf_r3_cpuregisters_ipr1_tmr2ip,
9049
15
        { "IPR1.TMR2IP", "r3.cpuregisters.ipr1.tmr2ip",
9050
15
          FT_BOOLEAN, 8, NULL, 0x02,
9051
15
          NULL, HFILL }
9052
15
      },
9053
15
      { &hf_r3_cpuregisters_ipr1_ccp1ip,
9054
15
        { "IPR1.CCP1IP", "r3.cpuregisters.ipr1.ccp1ip",
9055
15
          FT_BOOLEAN, 8, NULL, 0x04,
9056
15
          NULL, HFILL }
9057
15
      },
9058
15
      { &hf_r3_cpuregisters_ipr1_ssp1ip,
9059
15
        { "IPR1.SSP1IP", "r3.cpuregisters.ipr1.ssp1ip",
9060
15
          FT_BOOLEAN, 8, NULL, 0x08,
9061
15
          NULL, HFILL }
9062
15
      },
9063
15
      { &hf_r3_cpuregisters_ipr1_tx1ip,
9064
15
        { "IPR1.TX1IP", "r3.cpuregisters.ipr1.tx1ip",
9065
15
          FT_BOOLEAN, 8, NULL, 0x10,
9066
15
          NULL, HFILL }
9067
15
      },
9068
15
      { &hf_r3_cpuregisters_ipr1_rc1ip,
9069
15
        { "IPR1.RC1IP", "r3.cpuregisters.ipr1.rc1ip",
9070
15
          FT_BOOLEAN, 8, NULL, 0x20,
9071
15
          NULL, HFILL }
9072
15
      },
9073
15
      { &hf_r3_cpuregisters_ipr1_adip,
9074
15
        { "IPR1.ADIP", "r3.cpuregisters.ipr1.adip",
9075
15
          FT_BOOLEAN, 8, NULL, 0x40,
9076
15
          NULL, HFILL }
9077
15
      },
9078
15
      { &hf_r3_cpuregisters_ipr1_pspip,
9079
15
        { "IPR1.PSPIP", "r3.cpuregisters.ipr1.pspip",
9080
15
          FT_BOOLEAN, 8, NULL, 0x80,
9081
15
          NULL, HFILL }
9082
15
      },
9083
15
      { &hf_r3_cpuregisters_ipr2_ccp2ip,
9084
15
        { "IPR2.CCP2IP", "r3.cpuregisters.ipr2.ccp2ip",
9085
15
          FT_BOOLEAN, 8, NULL, 0x01,
9086
15
          NULL, HFILL }
9087
15
      },
9088
15
      { &hf_r3_cpuregisters_ipr2_tmr3ip,
9089
15
        { "IPR2.TMR3IP", "r3.cpuregisters.ipr2.tmr3ip",
9090
15
          FT_BOOLEAN, 8, NULL, 0x02,
9091
15
          NULL, HFILL }
9092
15
      },
9093
15
      { &hf_r3_cpuregisters_ipr2_hlvdip,
9094
15
        { "IPR2.HLVDIP", "r3.cpuregisters.ipr2.hlvdip",
9095
15
          FT_BOOLEAN, 8, NULL, 0x04,
9096
15
          NULL, HFILL }
9097
15
      },
9098
15
      { &hf_r3_cpuregisters_ipr2_bcl1ip,
9099
15
        { "IPR2.BCL1IP", "r3.cpuregisters.ipr2.bcl1ip",
9100
15
          FT_BOOLEAN, 8, NULL, 0x08,
9101
15
          NULL, HFILL }
9102
15
      },
9103
15
      { &hf_r3_cpuregisters_ipr2_eeip,
9104
15
        { "IPR2.EEIP", "r3.cpuregisters.ipr2.eeip",
9105
15
          FT_BOOLEAN, 8, NULL, 0x10,
9106
15
          NULL, HFILL }
9107
15
      },
9108
15
      { &hf_r3_cpuregisters_ipr2_unused5,
9109
15
        { "IPR2.UNUSED5", "r3.cpuregisters.ipr2.unused5",
9110
15
          FT_BOOLEAN, 8, NULL, 0x20,
9111
15
          NULL, HFILL }
9112
15
      },
9113
15
      { &hf_r3_cpuregisters_ipr2_cmip,
9114
15
        { "IPR2.CMIP", "r3.cpuregisters.ipr2.cmip",
9115
15
          FT_BOOLEAN, 8, NULL, 0x40,
9116
15
          NULL, HFILL }
9117
15
      },
9118
15
      { &hf_r3_cpuregisters_ipr2_oscfip,
9119
15
        { "IPR2.OSCFIP", "r3.cpuregisters.ipr2.oscfip",
9120
15
          FT_BOOLEAN, 8, NULL, 0x80,
9121
15
          NULL, HFILL }
9122
15
      },
9123
15
      { &hf_r3_cpuregisters_ipr3_ccp2ip,
9124
15
        { "IPR3.CCP2IP", "r3.cpuregisters.ipr3.ccp2ip",
9125
15
          FT_BOOLEAN, 8, NULL, 0x01,
9126
15
          NULL, HFILL }
9127
15
      },
9128
15
      { &hf_r3_cpuregisters_ipr3_ccp4ip,
9129
15
        { "IPR3.CCP4IP", "r3.cpuregisters.ipr3.ccp4ip",
9130
15
          FT_BOOLEAN, 8, NULL, 0x02,
9131
15
          NULL, HFILL }
9132
15
      },
9133
15
      { &hf_r3_cpuregisters_ipr3_ccp5ip,
9134
15
        { "IPR3.CCP5IP", "r3.cpuregisters.ipr3.ccp5ip",
9135
15
          FT_BOOLEAN, 8, NULL, 0x04,
9136
15
          NULL, HFILL }
9137
15
      },
9138
15
      { &hf_r3_cpuregisters_ipr3_tmr4ip,
9139
15
        { "IPR3.TMR4IP", "r3.cpuregisters.ipr3.tmr4ip",
9140
15
          FT_BOOLEAN, 8, NULL, 0x08,
9141
15
          NULL, HFILL }
9142
15
      },
9143
15
      { &hf_r3_cpuregisters_ipr3_tx2ip,
9144
15
        { "IPR3.TX2IP", "r3.cpuregisters.ipr3.tx2ip",
9145
15
          FT_BOOLEAN, 8, NULL, 0x10,
9146
15
          NULL, HFILL }
9147
15
      },
9148
15
      { &hf_r3_cpuregisters_ipr3_rc2ip,
9149
15
        { "IPR3.RC2IP", "r3.cpuregisters.ipr3.rc2ip",
9150
15
          FT_BOOLEAN, 8, NULL, 0x20,
9151
15
          NULL, HFILL }
9152
15
      },
9153
15
      { &hf_r3_cpuregisters_ipr3_bcl2ip,
9154
15
        { "IPR3.BCL2IP", "r3.cpuregisters.ipr3.bcl2ip",
9155
15
          FT_BOOLEAN, 8, NULL, 0x40,
9156
15
          NULL, HFILL }
9157
15
      },
9158
15
      { &hf_r3_cpuregisters_ipr3_ssp2ip,
9159
15
        { "IPR3.SSP2IP", "r3.cpuregisters.ipr3.ssp2ip",
9160
15
          FT_BOOLEAN, 8, NULL, 0x80,
9161
15
          NULL, HFILL }
9162
15
      },
9163
15
      { &hf_r3_cpuregisters_rcon_bor,
9164
15
        { "RCON./BOR", "r3.cpuregisters.rcon.bor",
9165
15
          FT_BOOLEAN, 8, NULL, 0x01,
9166
15
          NULL, HFILL }
9167
15
      },
9168
15
      { &hf_r3_cpuregisters_rcon_por,
9169
15
        { "RCON./POR", "r3.cpuregisters.rcon.por",
9170
15
          FT_BOOLEAN, 8, NULL, 0x02,
9171
15
          NULL, HFILL }
9172
15
      },
9173
15
      { &hf_r3_cpuregisters_rcon_pd,
9174
15
        { "RCON./PD", "r3.cpuregisters.rcon.pd",
9175
15
          FT_BOOLEAN, 8, NULL, 0x04,
9176
15
          NULL, HFILL }
9177
15
      },
9178
15
      { &hf_r3_cpuregisters_rcon_to,
9179
15
        { "RCON./TO", "r3.cpuregisters.rcon.to",
9180
15
          FT_BOOLEAN, 8, NULL, 0x08,
9181
15
          NULL, HFILL }
9182
15
      },
9183
15
      { &hf_r3_cpuregisters_rcon_unused4,
9184
15
        { "RCON.UNUSED4", "r3.cpuregisters.rcon.unused4",
9185
15
          FT_BOOLEAN, 8, NULL, 0x10,
9186
15
          NULL, HFILL }
9187
15
      },
9188
15
      { &hf_r3_cpuregisters_rcon_ri,
9189
15
        { "RCON./RI", "r3.cpuregisters.rcon.ri",
9190
15
          FT_BOOLEAN, 8, NULL, 0x20,
9191
15
          NULL, HFILL }
9192
15
      },
9193
15
      { &hf_r3_cpuregisters_rcon_sboren,
9194
15
        { "RCON.SBOREN", "r3.cpuregisters.rcon.sboren",
9195
15
          FT_BOOLEAN, 8, NULL, 0x40,
9196
15
          NULL, HFILL }
9197
15
      },
9198
15
      { &hf_r3_cpuregisters_rcon_ipen,
9199
15
        { "RCON.IPEN", "r3.cpuregisters.rcon.ipen",
9200
15
          FT_BOOLEAN, 8, NULL, 0x80,
9201
15
          NULL, HFILL }
9202
15
      },
9203
15
      { &hf_r3_cpuregisters_osccon_scs0,
9204
15
        { "OSCCON.SCS0", "r3.cpuregisters.osccon.scs0",
9205
15
          FT_BOOLEAN, 8, NULL, 0x01,
9206
15
          NULL, HFILL }
9207
15
      },
9208
15
      { &hf_r3_cpuregisters_osccon_scs1,
9209
15
        { "OSCCON.SCS1", "r3.cpuregisters.osccon.scs1",
9210
15
          FT_BOOLEAN, 8, NULL, 0x02,
9211
15
          NULL, HFILL }
9212
15
      },
9213
15
      { &hf_r3_cpuregisters_osccon_iofs,
9214
15
        { "OSCCON.IOFS", "r3.cpuregisters.osccon.iofs",
9215
15
          FT_BOOLEAN, 8, NULL, 0x04,
9216
15
          NULL, HFILL }
9217
15
      },
9218
15
      { &hf_r3_cpuregisters_osccon_osts,
9219
15
        { "OSCCON.OSTS", "r3.cpuregisters.osccon.osts",
9220
15
          FT_BOOLEAN, 8, NULL, 0x08,
9221
15
          NULL, HFILL }
9222
15
      },
9223
15
      { &hf_r3_cpuregisters_osccon_ircf0,
9224
15
        { "OSCCON.IRCF0", "r3.cpuregisters.osccon.ircf0",
9225
15
          FT_BOOLEAN, 8, NULL, 0x10,
9226
15
          NULL, HFILL }
9227
15
      },
9228
15
      { &hf_r3_cpuregisters_osccon_ircf1,
9229
15
        { "OSCCON.IRCF1", "r3.cpuregisters.osccon.ircf1",
9230
15
          FT_BOOLEAN, 8, NULL, 0x20,
9231
15
          NULL, HFILL }
9232
15
      },
9233
15
      { &hf_r3_cpuregisters_osccon_ircf2,
9234
15
        { "OSCCON.IRCF2", "r3.cpuregisters.osccon.ircf2",
9235
15
          FT_BOOLEAN, 8, NULL, 0x40,
9236
15
          NULL, HFILL }
9237
15
      },
9238
15
      { &hf_r3_cpuregisters_osccon_idlen,
9239
15
        { "OSCCON.IDLEN", "r3.cpuregisters.osccon.idlen",
9240
15
          FT_BOOLEAN, 8, NULL, 0x80,
9241
15
          NULL, HFILL }
9242
15
      },
9243
15
      { &hf_r3_cpuregisters_rcsta_rx9d,
9244
15
        { "RCSTA.RX9D", "r3.cpuregisters.rcsta.rx9d",
9245
15
          FT_BOOLEAN, 8, NULL, 0x01,
9246
15
          NULL, HFILL }
9247
15
      },
9248
15
      { &hf_r3_cpuregisters_rcsta_oerr,
9249
15
        { "RCSTA.OERR", "r3.cpuregisters.rcsta.oerr",
9250
15
          FT_BOOLEAN, 8, NULL, 0x02,
9251
15
          NULL, HFILL }
9252
15
      },
9253
15
      { &hf_r3_cpuregisters_rcsta_ferr,
9254
15
        { "RCSTA.FERR", "r3.cpuregisters.rcsta.ferr",
9255
15
          FT_BOOLEAN, 8, NULL, 0x04,
9256
15
          NULL, HFILL }
9257
15
      },
9258
15
      { &hf_r3_cpuregisters_rcsta_adden,
9259
15
        { "RCSTA.ADDEN", "r3.cpuregisters.rcsta.adden",
9260
15
          FT_BOOLEAN, 8, NULL, 0x08,
9261
15
          NULL, HFILL }
9262
15
      },
9263
15
      { &hf_r3_cpuregisters_rcsta_cren,
9264
15
        { "RCSTA.CREN", "r3.cpuregisters.rcsta.cren",
9265
15
          FT_BOOLEAN, 8, NULL, 0x10,
9266
15
          NULL, HFILL }
9267
15
      },
9268
15
      { &hf_r3_cpuregisters_rcsta_sren,
9269
15
        { "RCSTA.SREN", "r3.cpuregisters.rcsta.sren",
9270
15
          FT_BOOLEAN, 8, NULL, 0x20,
9271
15
          NULL, HFILL }
9272
15
      },
9273
15
      { &hf_r3_cpuregisters_rcsta_rx9,
9274
15
        { "RCSTA.RX9", "r3.cpuregisters.rcsta.rx9",
9275
15
          FT_BOOLEAN, 8, NULL, 0x40,
9276
15
          NULL, HFILL }
9277
15
      },
9278
15
      { &hf_r3_cpuregisters_rcsta_spen,
9279
15
        { "RCSTA.SPEN", "r3.cpuregisters.rcsta.spen",
9280
15
          FT_BOOLEAN, 8, NULL, 0x80,
9281
15
          NULL, HFILL }
9282
15
      },
9283
15
      { &hf_r3_cpuregisters_txsta_tx9d,
9284
15
        { "TXSTA.TX9D", "r3.cpuregisters.txsta.tx9d",
9285
15
          FT_BOOLEAN, 8, NULL, 0x01,
9286
15
          NULL, HFILL }
9287
15
      },
9288
15
      { &hf_r3_cpuregisters_txsta_trmt,
9289
15
        { "TXSTA.TRMT", "r3.cpuregisters.txsta.trmt",
9290
15
          FT_BOOLEAN, 8, NULL, 0x02,
9291
15
          NULL, HFILL }
9292
15
      },
9293
15
      { &hf_r3_cpuregisters_txsta_brgh,
9294
15
        { "TXSTA.BRGH", "r3.cpuregisters.txsta.brgh",
9295
15
          FT_BOOLEAN, 8, NULL, 0x04,
9296
15
          NULL, HFILL }
9297
15
      },
9298
15
      { &hf_r3_cpuregisters_txsta_sendb,
9299
15
        { "TXSTA.SENDB", "r3.cpuregisters.txsta.sendb",
9300
15
          FT_BOOLEAN, 8, NULL, 0x08,
9301
15
          NULL, HFILL }
9302
15
      },
9303
15
      { &hf_r3_cpuregisters_txsta_sync,
9304
15
        { "TXSTA.SYNC", "r3.cpuregisters.txsta.sync",
9305
15
          FT_BOOLEAN, 8, NULL, 0x10,
9306
15
          NULL, HFILL }
9307
15
      },
9308
15
      { &hf_r3_cpuregisters_txsta_txen,
9309
15
        { "TXSTA.TXEN", "r3.cpuregisters.txsta.txen",
9310
15
          FT_BOOLEAN, 8, NULL, 0x20,
9311
15
          NULL, HFILL }
9312
15
      },
9313
15
      { &hf_r3_cpuregisters_txsta_tx9,
9314
15
        { "TXSTA.TX9", "r3.cpuregisters.txsta.tx9",
9315
15
          FT_BOOLEAN, 8, NULL, 0x40,
9316
15
          NULL, HFILL }
9317
15
      },
9318
15
      { &hf_r3_cpuregisters_txsta_csrc,
9319
15
        { "TXSTA.CSRC", "r3.cpuregisters.txsta.csrc",
9320
15
          FT_BOOLEAN, 8, NULL, 0x80,
9321
15
          NULL, HFILL }
9322
15
      },
9323
15
      { &hf_r3_cpuregisters_rcsta2_rx9d,
9324
15
        { "RCSTA2.RX9D", "r3.cpuregisters.rcsta2.rx9d",
9325
15
          FT_BOOLEAN, 8, NULL, 0x01,
9326
15
          NULL, HFILL }
9327
15
      },
9328
15
      { &hf_r3_cpuregisters_rcsta2_oerr,
9329
15
        { "RCSTA2.OERR", "r3.cpuregisters.rcsta2.oerr",
9330
15
          FT_BOOLEAN, 8, NULL, 0x02,
9331
15
          NULL, HFILL }
9332
15
      },
9333
15
      { &hf_r3_cpuregisters_rcsta2_ferr,
9334
15
        { "RCSTA2.FERR", "r3.cpuregisters.rcsta2.ferr",
9335
15
          FT_BOOLEAN, 8, NULL, 0x04,
9336
15
          NULL, HFILL }
9337
15
      },
9338
15
      { &hf_r3_cpuregisters_rcsta2_adden,
9339
15
        { "RCSTA2.ADDEN", "r3.cpuregisters.rcsta2.adden",
9340
15
          FT_BOOLEAN, 8, NULL, 0x08,
9341
15
          NULL, HFILL }
9342
15
      },
9343
15
      { &hf_r3_cpuregisters_rcsta2_cren,
9344
15
        { "RCSTA2.CREN", "r3.cpuregisters.rcsta2.cren",
9345
15
          FT_BOOLEAN, 8, NULL, 0x10,
9346
15
          NULL, HFILL }
9347
15
      },
9348
15
      { &hf_r3_cpuregisters_rcsta2_sren,
9349
15
        { "RCSTA2.SREN", "r3.cpuregisters.rcsta2.sren",
9350
15
          FT_BOOLEAN, 8, NULL, 0x20,
9351
15
          NULL, HFILL }
9352
15
      },
9353
15
      { &hf_r3_cpuregisters_rcsta2_rx9,
9354
15
        { "RCSTA2.RX9", "r3.cpuregisters.rcsta2.rx9",
9355
15
          FT_BOOLEAN, 8, NULL, 0x40,
9356
15
          NULL, HFILL }
9357
15
      },
9358
15
      { &hf_r3_cpuregisters_rcsta2_spen,
9359
15
        { "RCSTA2.SPEN", "r3.cpuregisters.rcsta2.spen",
9360
15
          FT_BOOLEAN, 8, NULL, 0x80,
9361
15
          NULL, HFILL }
9362
15
      },
9363
15
      { &hf_r3_cpuregisters_txsta2_tx9d,
9364
15
        { "TXSTA2.TX9D", "r3.cpuregisters.txsta2.tx9d",
9365
15
          FT_BOOLEAN, 8, NULL, 0x01,
9366
15
          NULL, HFILL }
9367
15
      },
9368
15
      { &hf_r3_cpuregisters_txsta2_trmt,
9369
15
        { "TXSTA2.TRMT", "r3.cpuregisters.txsta2.trmt",
9370
15
          FT_BOOLEAN, 8, NULL, 0x02,
9371
15
          NULL, HFILL }
9372
15
      },
9373
15
      { &hf_r3_cpuregisters_txsta2_brgh,
9374
15
        { "TXSTA2.BRGH", "r3.cpuregisters.txsta2.brgh",
9375
15
          FT_BOOLEAN, 8, NULL, 0x04,
9376
15
          NULL, HFILL }
9377
15
      },
9378
15
      { &hf_r3_cpuregisters_txsta2_sendb,
9379
15
        { "TXSTA2.SENDB", "r3.cpuregisters.txsta2.sendb",
9380
15
          FT_BOOLEAN, 8, NULL, 0x08,
9381
15
          NULL, HFILL }
9382
15
      },
9383
15
      { &hf_r3_cpuregisters_txsta2_sync,
9384
15
        { "TXSTA2.SYNC", "r3.cpuregisters.txsta2.sync",
9385
15
          FT_BOOLEAN, 8, NULL, 0x10,
9386
15
          NULL, HFILL }
9387
15
      },
9388
15
      { &hf_r3_cpuregisters_txsta2_txen,
9389
15
        { "TXSTA2.TXEN", "r3.cpuregisters.txsta2.txen",
9390
15
          FT_BOOLEAN, 8, NULL, 0x20,
9391
15
          NULL, HFILL }
9392
15
      },
9393
15
      { &hf_r3_cpuregisters_txsta2_tx9,
9394
15
        { "TXSTA2.TX9", "r3.cpuregisters.txsta2.tx9",
9395
15
          FT_BOOLEAN, 8, NULL, 0x40,
9396
15
          NULL, HFILL }
9397
15
      },
9398
15
      { &hf_r3_cpuregisters_txsta2_csrc,
9399
15
        { "TXSTA2.CSRC", "r3.cpuregisters.txsta2.csrc",
9400
15
          FT_BOOLEAN, 8, NULL, 0x80,
9401
15
          NULL, HFILL }
9402
15
      },
9403
15
      { &hf_r3_cpuregisters_wdtcon_swdten,
9404
15
        { "WDTCON.SWDTEN", "r3.cpuregisters.wdtcon.swdten",
9405
15
          FT_BOOLEAN, 8, NULL, 0x01,
9406
15
          NULL, HFILL }
9407
15
      },
9408
15
      { &hf_r3_cpuregisters_wdtcon_unused1,
9409
15
        { "WDTCON.UNUSED1", "r3.cpuregisters.wdtcon.unused1",
9410
15
          FT_BOOLEAN, 8, NULL, 0x02,
9411
15
          NULL, HFILL }
9412
15
      },
9413
15
      { &hf_r3_cpuregisters_wdtcon_unused2,
9414
15
        { "WDTCON.UNUSED2", "r3.cpuregisters.wdtcon.unused2",
9415
15
          FT_BOOLEAN, 8, NULL, 0x04,
9416
15
          NULL, HFILL }
9417
15
      },
9418
15
      { &hf_r3_cpuregisters_wdtcon_unused3,
9419
15
        { "WDTCON.UNUSED3", "r3.cpuregisters.wdtcon.unused3",
9420
15
          FT_BOOLEAN, 8, NULL, 0x08,
9421
15
          NULL, HFILL }
9422
15
      },
9423
15
      { &hf_r3_cpuregisters_wdtcon_unused4,
9424
15
        { "WDTCON.UNUSED4", "r3.cpuregisters.wdtcon.unused4",
9425
15
          FT_BOOLEAN, 8, NULL, 0x10,
9426
15
          NULL, HFILL }
9427
15
      },
9428
15
      { &hf_r3_cpuregisters_wdtcon_unused5,
9429
15
        { "WDTCON.UNUSED5", "r3.cpuregisters.wdtcon.unused5",
9430
15
          FT_BOOLEAN, 8, NULL, 0x20,
9431
15
          NULL, HFILL }
9432
15
      },
9433
15
      { &hf_r3_cpuregisters_wdtcon_unused6,
9434
15
        { "WDTCON.UNUSED6", "r3.cpuregisters.wdtcon.unused6",
9435
15
          FT_BOOLEAN, 8, NULL, 0x40,
9436
15
          NULL, HFILL }
9437
15
      },
9438
15
      { &hf_r3_cpuregisters_wdtcon_unused7,
9439
15
        { "WDTCON.UNUSED7", "r3.cpuregisters.wdtcon.unused7",
9440
15
          FT_BOOLEAN, 8, NULL, 0x80,
9441
15
          NULL, HFILL }
9442
15
      },
9443
9444
15
      { &hf_r3_dumpm41t81_reg00,
9445
15
        { "REG 0x00", "r3.m41t81.reg00",
9446
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9447
15
          NULL, HFILL }
9448
15
      },
9449
15
      { &hf_r3_dumpm41t81_reg01,
9450
15
        { "REG 0x01", "r3.m41t81.reg01",
9451
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9452
15
          NULL, HFILL }
9453
15
      },
9454
15
      { &hf_r3_dumpm41t81_reg02,
9455
15
        { "REG 0x02", "r3.m41t81.reg02",
9456
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9457
15
          NULL, HFILL }
9458
15
      },
9459
15
      { &hf_r3_dumpm41t81_reg03,
9460
15
        { "REG 0x03", "r3.m41t81.reg03",
9461
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9462
15
          NULL, HFILL }
9463
15
      },
9464
15
      { &hf_r3_dumpm41t81_reg04,
9465
15
        { "REG 0x04", "r3.m41t81.reg04",
9466
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9467
15
          NULL, HFILL }
9468
15
      },
9469
15
      { &hf_r3_dumpm41t81_reg05,
9470
15
        { "REG 0x05", "r3.m41t81.reg05",
9471
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9472
15
          NULL, HFILL }
9473
15
      },
9474
15
      { &hf_r3_dumpm41t81_reg06,
9475
15
        { "REG 0x06", "r3.m41t81.reg06",
9476
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9477
15
          NULL, HFILL }
9478
15
      },
9479
15
      { &hf_r3_dumpm41t81_reg07,
9480
15
        { "REG 0x07", "r3.m41t81.reg07",
9481
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9482
15
          NULL, HFILL }
9483
15
      },
9484
15
      { &hf_r3_dumpm41t81_reg08,
9485
15
        { "REG 0x08", "r3.m41t81.reg08",
9486
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9487
15
          NULL, HFILL }
9488
15
      },
9489
15
      { &hf_r3_dumpm41t81_reg09,
9490
15
        { "REG 0x09", "r3.m41t81.reg09",
9491
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9492
15
          NULL, HFILL }
9493
15
      },
9494
15
      { &hf_r3_dumpm41t81_reg0a,
9495
15
        { "REG 0x0a", "r3.m41t81.reg0a",
9496
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9497
15
          NULL, HFILL }
9498
15
      },
9499
15
      { &hf_r3_dumpm41t81_reg0b,
9500
15
        { "REG 0x0b", "r3.m41t81.reg0b",
9501
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9502
15
          NULL, HFILL }
9503
15
      },
9504
15
      { &hf_r3_dumpm41t81_reg0c,
9505
15
        { "REG 0x0c", "r3.m41t81.reg0c",
9506
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9507
15
          NULL, HFILL }
9508
15
      },
9509
15
      { &hf_r3_dumpm41t81_reg0d,
9510
15
        { "REG 0x0d", "r3.m41t81.reg0d",
9511
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9512
15
          NULL, HFILL }
9513
15
      },
9514
15
      { &hf_r3_dumpm41t81_reg0e,
9515
15
        { "REG 0x0e", "r3.m41t81.reg0e",
9516
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9517
15
          NULL, HFILL }
9518
15
      },
9519
15
      { &hf_r3_dumpm41t81_reg0f,
9520
15
        { "REG 0x0f", "r3.m41t81.reg0f",
9521
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9522
15
          NULL, HFILL }
9523
15
      },
9524
15
      { &hf_r3_dumpm41t81_reg10,
9525
15
        { "REG 0x10", "r3.m41t81.reg10",
9526
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9527
15
          NULL, HFILL }
9528
15
      },
9529
15
      { &hf_r3_dumpm41t81_reg11,
9530
15
        { "REG 0x11", "r3.m41t81.reg11",
9531
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9532
15
          NULL, HFILL }
9533
15
      },
9534
15
      { &hf_r3_dumpm41t81_reg12,
9535
15
        { "REG 0x12", "r3.m41t81.reg12",
9536
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9537
15
          NULL, HFILL }
9538
15
      },
9539
15
      { &hf_r3_dumpm41t81_reg13,
9540
15
        { "REG 0x13", "r3.m41t81.reg13",
9541
15
          FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
9542
15
          NULL, HFILL }
9543
15
      },
9544
9545
15
      { &hf_r3_dumpm41t81_reg00_sec1,
9546
15
        { ".1 Seconds", "r3.m41t81.reg00.sec1",
9547
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9548
15
          NULL, HFILL }
9549
15
      },
9550
15
      { &hf_r3_dumpm41t81_reg00_sec01,
9551
15
        { ".01 Seconds", "r3.m41t81.reg00.sec01",
9552
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9553
15
          NULL, HFILL }
9554
15
      },
9555
15
      { &hf_r3_dumpm41t81_reg01_st,
9556
15
        { "ST", "r3.m41t81.reg01.st",
9557
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9558
15
          NULL, HFILL }
9559
15
      },
9560
15
      { &hf_r3_dumpm41t81_reg01_10sec,
9561
15
        { "10 Seconds", "r3.m41t81.reg01.10sec",
9562
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9563
15
          NULL, HFILL }
9564
15
      },
9565
15
      { &hf_r3_dumpm41t81_reg01_1sec,
9566
15
        { "1 Seconds", "r3.m41t81.reg01.1sec",
9567
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9568
15
          NULL, HFILL }
9569
15
      },
9570
15
      { &hf_r3_dumpm41t81_reg02_notused,
9571
15
        { "(not used)", "r3.m41t81.reg02.notused",
9572
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9573
15
          NULL, HFILL }
9574
15
      },
9575
15
      { &hf_r3_dumpm41t81_reg02_10min,
9576
15
        { "10 Minutes", "r3.m41t81.reg02.10min",
9577
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9578
15
          NULL, HFILL }
9579
15
      },
9580
15
      { &hf_r3_dumpm41t81_reg02_1min,
9581
15
        { "1 Minutes", "r3.m41t81.reg02.1min",
9582
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9583
15
          NULL, HFILL }
9584
15
      },
9585
15
      { &hf_r3_dumpm41t81_reg03_cbe,
9586
15
        { "CBE", "r3.m41t81.reg03.cbe",
9587
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9588
15
          NULL, HFILL }
9589
15
      },
9590
15
      { &hf_r3_dumpm41t81_reg03_cb,
9591
15
        { "CB", "r3.m41t81.reg03.cb",
9592
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9593
15
          NULL, HFILL }
9594
15
      },
9595
15
      { &hf_r3_dumpm41t81_reg03_10hour,
9596
15
        { "10 Hours", "r3.m41t81.reg03.10hour",
9597
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9598
15
          NULL, HFILL }
9599
15
      },
9600
15
      { &hf_r3_dumpm41t81_reg03_1hour,
9601
15
        { "1 Hours", "r3.m41t81.reg03.1hour",
9602
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9603
15
          NULL, HFILL }
9604
15
      },
9605
15
      { &hf_r3_dumpm41t81_reg04_notused,
9606
15
        { "(not used)", "r3.m41t81.reg04.notused",
9607
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9608
15
          NULL, HFILL }
9609
15
      },
9610
15
      { &hf_r3_dumpm41t81_reg04_dow,
9611
15
        { "DOW", "r3.m41t81.reg04.dow",
9612
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9613
15
          NULL, HFILL }
9614
15
      },
9615
15
      { &hf_r3_dumpm41t81_reg05_notused,
9616
15
        { "(not used)", "r3.m41t81.reg05.notused",
9617
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9618
15
          NULL, HFILL }
9619
15
      },
9620
15
      { &hf_r3_dumpm41t81_reg05_10day,
9621
15
        { "10 Day", "r3.m41t81.reg05.10day",
9622
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9623
15
          NULL, HFILL }
9624
15
      },
9625
15
      { &hf_r3_dumpm41t81_reg05_1day,
9626
15
        { "1 Day", "r3.m41t81.reg05.1day",
9627
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9628
15
          NULL, HFILL }
9629
15
      },
9630
15
      { &hf_r3_dumpm41t81_reg06_notused,
9631
15
        { "(not used)", "r3.m41t81.reg06.notused",
9632
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9633
15
          NULL, HFILL }
9634
15
      },
9635
15
      { &hf_r3_dumpm41t81_reg06_10month,
9636
15
        { "10 Month", "r3.m41t81.reg06.10month",
9637
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9638
15
          NULL, HFILL }
9639
15
      },
9640
15
      { &hf_r3_dumpm41t81_reg06_1month,
9641
15
        { "1 Month", "r3.m41t81.reg06.1month",
9642
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9643
15
          NULL, HFILL }
9644
15
      },
9645
15
      { &hf_r3_dumpm41t81_reg07_10year,
9646
15
        { "10 Year", "r3.m41t81.reg07.10year",
9647
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9648
15
          NULL, HFILL }
9649
15
      },
9650
15
      { &hf_r3_dumpm41t81_reg07_1year,
9651
15
        { "1 Year", "r3.m41t81.reg07.1year",
9652
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9653
15
          NULL, HFILL }
9654
15
      },
9655
15
      { &hf_r3_dumpm41t81_reg08_out,
9656
15
        { "OUT", "r3.m41t81.reg08.out",
9657
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9658
15
          NULL, HFILL }
9659
15
      },
9660
15
      { &hf_r3_dumpm41t81_reg08_ft,
9661
15
        { "FT", "r3.m41t81.reg08.ft",
9662
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9663
15
          NULL, HFILL }
9664
15
      },
9665
15
      { &hf_r3_dumpm41t81_reg08_s,
9666
15
        { "S", "r3.m41t81.reg08.s",
9667
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9668
15
          NULL, HFILL }
9669
15
      },
9670
15
      { &hf_r3_dumpm41t81_reg08_cal,
9671
15
        { "CAL", "r3.m41t81.reg08.cal",
9672
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9673
15
          NULL, HFILL }
9674
15
      },
9675
15
      { &hf_r3_dumpm41t81_reg09_notused,
9676
15
        { "(not used)", "r3.m41t81.reg09.notused",
9677
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9678
15
          NULL, HFILL }
9679
15
      },
9680
15
      { &hf_r3_dumpm41t81_reg09_bmb,
9681
15
        { "BMB", "r3.m41t81.reg09.bmb",
9682
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9683
15
          NULL, HFILL }
9684
15
      },
9685
15
      { &hf_r3_dumpm41t81_reg09_rb,
9686
15
        { "RB", "r3.m41t81.reg09.rb",
9687
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9688
15
          NULL, HFILL }
9689
15
      },
9690
15
      { &hf_r3_dumpm41t81_reg0a_afe,
9691
15
        { "AFE", "r3.m41t81.reg0a.afe",
9692
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9693
15
          NULL, HFILL }
9694
15
      },
9695
15
      { &hf_r3_dumpm41t81_reg0a_sqwe,
9696
15
        { "SQWE", "r3.m41t81.reg0a.sqwe",
9697
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9698
15
          NULL, HFILL }
9699
15
      },
9700
15
      { &hf_r3_dumpm41t81_reg0a_abe,
9701
15
        { "ABE", "r3.m41t81.reg0a.abe",
9702
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9703
15
          NULL, HFILL }
9704
15
      },
9705
15
      { &hf_r3_dumpm41t81_reg0a_10monthalm,
9706
15
        { "10 Month Alarm", "r3.m41t81.reg0a.10monthalm",
9707
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9708
15
          NULL, HFILL }
9709
15
      },
9710
15
      { &hf_r3_dumpm41t81_reg0a_1monthalm,
9711
15
        { "1 Month Alarm", "r3.m41t81.reg0a.1monthalm",
9712
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9713
15
          NULL, HFILL }
9714
15
      },
9715
15
      { &hf_r3_dumpm41t81_reg0b_rpt5,
9716
15
        { "RPT5", "r3.m41t81.reg0b.rpt5",
9717
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9718
15
          NULL, HFILL }
9719
15
      },
9720
15
      { &hf_r3_dumpm41t81_reg0b_rpt4,
9721
15
        { "RPT4", "r3.m41t81.reg0b.rpt4",
9722
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9723
15
          NULL, HFILL }
9724
15
      },
9725
15
      { &hf_r3_dumpm41t81_reg0b_10dayalm,
9726
15
        { "10 Day Alarm", "r3.m41t81.reg0b.10dayalm",
9727
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9728
15
          NULL, HFILL }
9729
15
      },
9730
15
      { &hf_r3_dumpm41t81_reg0b_1dayalm,
9731
15
        { "1 Day Alarm", "r3.m41t81.reg0b.1dayalm",
9732
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9733
15
          NULL, HFILL }
9734
15
      },
9735
15
      { &hf_r3_dumpm41t81_reg0c_rpt3,
9736
15
        { "RPT3", "r3.m41t81.reg0c.rpt3",
9737
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9738
15
          NULL, HFILL }
9739
15
      },
9740
15
      { &hf_r3_dumpm41t81_reg0c_ht,
9741
15
        { "HT", "r3.m41t81.reg0c.ht",
9742
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9743
15
          NULL, HFILL }
9744
15
      },
9745
15
      { &hf_r3_dumpm41t81_reg0c_10houralm,
9746
15
        { "10 Hour Alarm", "r3.m41t81.reg0c.10houralm",
9747
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9748
15
          NULL, HFILL }
9749
15
      },
9750
15
      { &hf_r3_dumpm41t81_reg0c_1houralm,
9751
15
        { "1 Hour Alarm", "r3.m41t81.reg0c.1houralm",
9752
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9753
15
          NULL, HFILL }
9754
15
      },
9755
15
      { &hf_r3_dumpm41t81_reg0d_rpt2,
9756
15
        { "RPT2", "r3.m41t81.reg0d.rpt2",
9757
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9758
15
          NULL, HFILL }
9759
15
      },
9760
15
      { &hf_r3_dumpm41t81_reg0d_10minalm,
9761
15
        { "10 Min Alarm", "r3.m41t81.reg0d.10minalm",
9762
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9763
15
          NULL, HFILL }
9764
15
      },
9765
15
      { &hf_r3_dumpm41t81_reg0d_1minalm,
9766
15
        { "1 Min Alarm", "r3.m41t81.reg0d.1minalm",
9767
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9768
15
          NULL, HFILL }
9769
15
      },
9770
15
      { &hf_r3_dumpm41t81_reg0e_rpt1,
9771
15
        { "RPT1", "r3.m41t81.reg0e.rpt1",
9772
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9773
15
          NULL, HFILL }
9774
15
      },
9775
15
      { &hf_r3_dumpm41t81_reg0e_10secalm,
9776
15
        { "10 Sec Alarm", "r3.m41t81.reg0e.10secalm",
9777
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9778
15
          NULL, HFILL }
9779
15
      },
9780
15
      { &hf_r3_dumpm41t81_reg0e_1secalm,
9781
15
        { "1 Sec Alarm", "r3.m41t81.reg0e.1secalm",
9782
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9783
15
          NULL, HFILL }
9784
15
      },
9785
15
      { &hf_r3_dumpm41t81_reg0f_wdf,
9786
15
        { "WDF", "r3.m41t81.reg0f.wdf",
9787
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9788
15
          NULL, HFILL }
9789
15
      },
9790
15
      { &hf_r3_dumpm41t81_reg0f_af,
9791
15
        { "AF", "r3.m41t81.reg0f.af",
9792
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9793
15
          NULL, HFILL }
9794
15
      },
9795
15
      { &hf_r3_dumpm41t81_reg0f_notused,
9796
15
        { "(not used)", "r3.m41t81.reg0f.notused",
9797
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9798
15
          NULL, HFILL }
9799
15
      },
9800
15
      { &hf_r3_dumpm41t81_reg10_notused,
9801
15
        { "(not used)", "r3.m41t81.reg10.notused",
9802
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9803
15
          NULL, HFILL }
9804
15
      },
9805
15
      { &hf_r3_dumpm41t81_reg11_notused,
9806
15
        { "(not used)", "r3.m41t81.reg11.notused",
9807
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9808
15
          NULL, HFILL }
9809
15
      },
9810
15
      { &hf_r3_dumpm41t81_reg12_notused,
9811
15
        { "(not used)", "r3.m41t81.reg12.notused",
9812
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9813
15
          NULL, HFILL }
9814
15
      },
9815
15
      { &hf_r3_dumpm41t81_reg13_rs,
9816
15
        { "RS", "r3.m41t81.reg13.rs",
9817
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9818
15
          NULL, HFILL }
9819
15
      },
9820
15
      { &hf_r3_dumpm41t81_reg13_notused,
9821
15
        { "(not used)", "r3.m41t81.reg13.notused",
9822
15
          FT_UINT8, BASE_DEC, NULL, 0x0,
9823
15
          NULL, HFILL }
9824
15
      },
9825
15
      { &hf_r3_sn_manufacturer,
9826
15
        { "Manufacturer", "r3.sn.manufacturer",
9827
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9828
15
          NULL, HFILL }
9829
15
      },
9830
15
      { &hf_r3_sn_year,
9831
15
        { "Year", "r3.sn.year",
9832
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9833
15
          NULL, HFILL }
9834
15
      },
9835
15
      { &hf_r3_sn_week,
9836
15
        { "Week", "r3.sn.week",
9837
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9838
15
          NULL, HFILL }
9839
15
      },
9840
15
      { &hf_r3_sn_model,
9841
15
        { "Model", "r3.sn.model",
9842
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9843
15
          NULL, HFILL }
9844
15
      },
9845
15
      { &hf_r3_sn_sequence,
9846
15
        { "Sequence", "r3.sn.sequence",
9847
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9848
15
          NULL, HFILL }
9849
15
      },
9850
15
      { &hf_r3_sn_group,
9851
15
        { "Group", "r3.sn.group",
9852
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9853
15
          NULL, HFILL }
9854
15
      },
9855
15
      { &hf_r3_sn_nid,
9856
15
        { "NID", "r3.sn.nid",
9857
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9858
15
          NULL, HFILL }
9859
15
      },
9860
15
      { &hf_r3_sn_hid,
9861
15
        { "HID", "r3.sn.hid",
9862
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9863
15
          NULL, HFILL }
9864
15
      },
9865
15
      { &hf_r3_sn_power_supply,
9866
15
        { "Power Supply", "r3.sn.power_supply",
9867
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9868
15
          NULL, HFILL }
9869
15
      },
9870
15
      { &hf_r3_sn_mortise,
9871
15
        { "Mortise", "r3.sn.mortise",
9872
15
          FT_STRING, BASE_NONE, NULL, 0x0,
9873
15
          NULL, HFILL }
9874
15
      },
9875
15
      { &hf_r3_debuglog_recordnumber,
9876
15
        { "Record Number", "r3.debuglog.recordnumber",
9877
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9878
15
          NULL, HFILL }
9879
15
      },
9880
15
      { &hf_r3_debuglog_flags,
9881
15
        { "Flags", "r3.debuglog.flags",
9882
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
9883
15
          NULL, HFILL }
9884
15
      },
9885
15
      { &hf_r3_debuglog_tick,
9886
15
        { "Tick", "r3.debuglog.tick",
9887
15
          FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
9888
15
          NULL, HFILL }
9889
15
      },
9890
9891
15
      { &hf_r3_adduserparamtype,
9892
15
        { "Upstream Field", "r3.manageuser",
9893
15
          FT_NONE, BASE_NONE, NULL, 0x0,
9894
15
          NULL, HFILL }
9895
15
      },
9896
15
      { &hf_r3_adduserparamtypelength,
9897
15
        { "Field Length", "r3.manageuser.length",
9898
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9899
15
          NULL, HFILL }
9900
15
      },
9901
15
      { &hf_r3_adduserparamtypetype,
9902
15
        { "Field Type", "r3.manageuser.type",
9903
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_adduserparamtypenames_ext, 0x0,
9904
15
          NULL, HFILL }
9905
15
      },
9906
#if 0
9907
      { &hf_r3_adduserparamtypedatalen,
9908
        { "Data Length", "r3.manageuser.datalen",
9909
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9910
          NULL, HFILL }
9911
      },
9912
      { &hf_r3_adduserparamtypeerror,
9913
        { "Error", "r3.manageuser.error",
9914
          FT_STRING, BASE_NONE, NULL, 0x0,
9915
          NULL, HFILL }
9916
      },
9917
#endif
9918
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_DISPOSITION],
9919
15
        { "Disposition", "r3.manageuser.disposition",
9920
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_dispositionnames_ext, 0x0,
9921
15
          NULL, HFILL }
9922
15
      },
9923
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERNO],
9924
15
        { "User Number", "r3.manageuser.usernumber",
9925
15
          FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9926
15
          NULL, HFILL }
9927
15
      },
9928
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSALWAYS],
9929
15
        { "Access Always", "r3.manageuser.accessalways",
9930
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9931
15
          NULL, HFILL }
9932
15
      },
9933
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSMODE],
9934
15
        { "Access Mode", "r3.manageuser.accessmode",
9935
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
9936
15
          NULL, HFILL }
9937
15
      },
9938
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_CACHED],
9939
15
        { "Cached", "r3.manageuser.cached",
9940
15
          FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9941
15
          NULL, HFILL }
9942
15
      },
9943
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERTYPE],
9944
15
        { "User Type", "r3.manageuser.usertype",
9945
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
9946
15
          NULL, HFILL }
9947
15
      },
9948
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELD],
9949
15
        { "Primary Field", "r3.manageuser.primaryfield",
9950
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
9951
15
          NULL, HFILL }
9952
15
      },
9953
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELDTYPE],
9954
15
        { "Primary Field Type", "r3.manageuser.primaryfieldtype",
9955
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9956
15
          NULL, HFILL }
9957
15
      },
9958
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELD],
9959
15
        { "Aux Field", "r3.manageuser.auxfield",
9960
15
          FT_BYTES, BASE_NONE, NULL, 0x0,
9961
15
          NULL, HFILL }
9962
15
      },
9963
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELDTYPE],
9964
15
        { "Aux Field Type", "r3.manageuser.auxfieldtype",
9965
15
          FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
9966
15
          NULL, HFILL }
9967
15
      },
9968
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USECOUNT],
9969
15
        { "Use Count", "r3.manageuser.usecount",
9970
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9971
15
          NULL, HFILL }
9972
15
      },
9973
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXCEPTIONGROUP],
9974
15
        { "Exception Group", "r3.manageuser.exceptiongroup",
9975
15
          FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
9976
15
          NULL, HFILL }
9977
15
      },
9978
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXPIREON],
9979
15
        { "Expire On", "r3.manageuser.expireon",
9980
15
          FT_UINT24, BASE_HEX, NULL, 0x0,
9981
15
          NULL, HFILL }
9982
15
      },
9983
15
      { &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_TIMEZONE],
9984
15
        { "Timezone", "r3.manageuser.timezone",
9985
15
          FT_UINT32, BASE_HEX, NULL, 0x0,
9986
15
          NULL, HFILL }
9987
15
      }
9988
15
    };
9989
9990
  /* Setup protocol subtree array */
9991
15
  static int *ett [] =
9992
15
    {
9993
15
      &ett_r3,
9994
15
      &ett_r3header,
9995
15
      &ett_r3tail,
9996
15
      &ett_r3payload,
9997
15
      &ett_r3cmd,
9998
15
      &ett_r3configitem,
9999
15
      &ett_r3upstreamcommand,
10000
15
      &ett_r3upstreamfield,
10001
15
      &ett_r3timezone,
10002
15
      &ett_r3expireon,
10003
15
      &ett_r3datetime,
10004
15
      &ett_r3eventlogrecord,
10005
15
      &ett_r3declinedlogrecord,
10006
15
      &ett_r3alarmlogrecord,
10007
15
      &ett_r3debugmsg,
10008
15
      &ett_r3defineexceptionstartdate,
10009
15
      &ett_r3defineexceptionenddate,
10010
15
      &ett_r3defineexceptiongroupbits,
10011
15
      &ett_r3definecalendarmonth [1],
10012
15
      &ett_r3definecalendarmonth [2],
10013
15
      &ett_r3definecalendarmonth [3],
10014
15
      &ett_r3definecalendarmonth [4],
10015
15
      &ett_r3definecalendarmonth [5],
10016
15
      &ett_r3definecalendarmonth [6],
10017
15
      &ett_r3definecalendarmonth [7],
10018
15
      &ett_r3definecalendarmonth [8],
10019
15
      &ett_r3definecalendarmonth [9],
10020
15
      &ett_r3definecalendarmonth [10],
10021
15
      &ett_r3definecalendarmonth [11],
10022
15
      &ett_r3definecalendarmonth [12],
10023
15
      &ett_r3definetimezonestarttime,
10024
15
      &ett_r3definetimezoneendtime,
10025
15
      &ett_r3definetimezonedaymap,
10026
15
      &ett_r3eventlogdumpstarttime,
10027
15
      &ett_r3eventlogdumpendtime,
10028
15
      &ett_r3declinedlogdumpstarttime,
10029
15
      &ett_r3declinedlogdumpendtime,
10030
15
      &ett_r3alarmlogdumpstarttime,
10031
15
      &ett_r3alarmlogdumpendtime,
10032
15
      &ett_r3clearnvram,
10033
15
      &ett_r3filters,
10034
15
      &ett_r3alarmlist,
10035
15
      &ett_r3alarmcfg,
10036
15
      &ett_r3commandmfg,
10037
15
      &ett_r3serialnumber,
10038
15
      &ett_r3iopins,
10039
15
      &ett_r3checksumresults,
10040
15
      &ett_r3checksumresultsfield,
10041
15
      &ett_r3forceoptions,
10042
15
      &ett_r3peekpoke,
10043
15
      &ett_r3downloadfirmware,
10044
15
      &ett_r3capabilities,
10045
15
      &ett_r3lockstate,
10046
15
      &ett_r3mortisestatelog,
10047
15
      &ett_r3timerchain,
10048
15
      &ett_r3taskflags,
10049
15
      &ett_r3taskflagsentry,
10050
15
      &ett_r3checkpointlog,
10051
15
      &ett_r3checkpointlogentry,
10052
15
      &ett_r3cpuregisters,
10053
15
      &ett_r3cpuregister,
10054
15
      &ett_r3m41t81registers,
10055
15
      &ett_r3m41t81register,
10056
15
      &ett_r3debuglogrecord,
10057
15
      &ett_r3setdatetime,
10058
15
      &ett_r3manageuser
10059
15
    };
10060
10061
15
  static ei_register_info ei[] = {
10062
15
    { &ei_r3_malformed_length, { "r3.malformed_length", PI_MALFORMED, PI_ERROR, "Malformed length", EXPFILL }},
10063
15
    { &ei_r3_reserved_upstream_command_value, { "r3.reserved_upstream_command_value", PI_UNDECODED, PI_WARN, "\"Reserved\" Upstream Command value", EXPFILL }},
10064
15
    { &ei_r3_mfgfield, { "r3.mfgfield.field.unknown", PI_UNDECODED, PI_WARN, "Unknown manufacturing command value", EXPFILL }},
10065
15
    { &ei_r3_mfgfield_too_many_adc_values, { "r3.mfgfield.too_many_adc_values", PI_PROTOCOL, PI_WARN, "MFG Field: too many adc values", EXPFILL }},
10066
15
    { &ei_r3_peekpoke_operation, { "r3.peekpoke.operation.unknown", PI_UNDECODED, PI_WARN, "Unknown peekpoke operation value", EXPFILL }},
10067
15
    { &ei_r3_response_hasdata_octet_1, { "r3.response_hasdata.octet_1_not_cmd_response", PI_PROTOCOL, PI_WARN, "Octet 1 not CMD_RESPONSE", EXPFILL }},
10068
15
    { &ei_r3_response_hasdata_octet_2, { "r3.response_hasdata.octet_2_not_response_hasdata", PI_PROTOCOL, PI_WARN, "Octet 2 not RESPONSE_HASDATA", EXPFILL }},
10069
15
    { &ei_r3_response_hasdata_octet_3, { "r3.response_hasdata.octet_3_ge_upstreamcommand_last", PI_PROTOCOL, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST", EXPFILL }},
10070
15
    { &ei_r3_firmwaredownload_action, { "r3.firmwaredownload.action.unknown", PI_PROTOCOL, PI_WARN, "Unknown Firmware download action", EXPFILL }},
10071
15
    { &ei_r3_cmd_downloadfirmwaretimeout, { "r3.command.downloadfirmwaretimeout", PI_UNDECODED, PI_WARN, "Download Firmware Timeout", EXPFILL }},
10072
15
    { &ei_r3_unknown_command_value, { "r3.command.unknown", PI_UNDECODED, PI_WARN, "Unknown command value", EXPFILL }},
10073
15
  };
10074
10075
15
  expert_module_t* expert_r3;
10076
10077
15
  proto_r3 = proto_register_protocol ("Assa Abloy R3", "R3", "r3");
10078
15
  r3_handle = register_dissector ("r3", dissect_r3, proto_r3);
10079
15
  proto_register_field_array (proto_r3, hf, array_length (hf));
10080
15
  proto_register_subtree_array (ett, array_length (ett));
10081
15
  expert_r3 = expert_register_protocol(proto_r3);
10082
15
  expert_register_field_array(expert_r3, ei, array_length(ei));
10083
15
}
10084
10085
void proto_reg_handoff_r3 (void)
10086
15
{
10087
15
  dissector_add_uint_range_with_preference("tcp.port", ASSA_R3_PORT_RANGE, r3_handle);
10088
15
}
10089
10090
/*
10091
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
10092
 *
10093
 * Local Variables:
10094
 * c-basic-offset: 2
10095
 * tab-width: 8
10096
 * indent-tabs-mode: nil
10097
 * End:
10098
 *
10099
 * vi: set shiftwidth=2 tabstop=8 expandtab:
10100
 * :indentSize=2:tabSize=8:noTabs=true:
10101
 */