wireshark/epan/dissectors/packet-assa_r3.c
Michael Mann 268841f3e0 Combine Decode As and port preferences for tcp.port dissector table.
This patch introduces new APIs to allow dissectors to have a preference for
a (TCP) port, but the underlying data is actually part of Decode As functionality.
For now the APIs are intentionally separate from the regular APIs that register a
dissector within a dissector table.  It may be possible to eventually combine the
two so that all dissectors that register with a dissector table have an opportunity
to "automatically" have a preference to adjust the "table value" through the
preferences dialog.

The tcp.port dissector table was used as the guinea pig.  This will eventually be
expanded to other dissector tables as well (most notably UDP ports).  Some
dissectors that "shared" a TCP/UDP port preference were also converted. It also
removed the need for some preference callback functions (mostly when the callback
function was the proto_reg_handoff function) so there is cleanup around that.

Dissectors that has a port preference whose default was 0 were switched to using
the dissector_add_for_decode_as_with_preference API rather than dissector_add_uint_with_preference

Also added comments for TCP ports used that aren't IANA registered.

Change-Id: I99604f95d426ad345f4b494598d94178b886eb67
Reviewed-on: https://code.wireshark.org/review/17724
Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-10-08 02:44:53 +00:00

10125 lines
445 KiB
C

/* packet-assa_r3.c
* Routines for R3 packet dissection
* Copyright (c) 2009 Assa Abloy USA <jcwren[AT]assaabloyusa.com>
*
* R3 is an electronic lock management protocol for configuring operational
* parameters, adding/removing/altering users, dumping log files, etc.
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/range.h>
#include <epan/crc16-tvb.h>
#include "packet-tcp.h"
void proto_register_r3(void);
void proto_reg_handoff_r3(void);
#if 0
/* */
/* System limits */
/* */
#define MAX_USERS 2400
#define MAX_TIMEZONES 32
#define MAX_EXCEPTIONS 64
#define MAX_EXCEPTIONGROUPS 64
#define MAX_EVENTENTRIES 10000
#define MAX_DECLINEDENTRIES 500
#define MAX_ALARMENTRIES 200
#endif
/*
* Enumerations
*/
typedef enum
{
ACCESSMODE_NONE = 0, /* 0 - No access mode (not used, not legal, I think) */
ACCESSMODE_PRIMARYONLY, /* 1 - Primary only */
ACCESSMODE_PRIMARYORAUX, /* 2 - Primary or aux field */
ACCESSMODE_PRIMARYANDAUX, /* 3 - Primary and aux field */
ACCESSMODE_PRIMARYTHENAUX, /* 4 - Primary required first, then aux */
ACCESSMODE_LAST /* 5 - Dummy, for range checking */
}
accessMode_e;
typedef enum
{
ADDUSERPARAMTYPE_DISPOSITION = 0, /* 0 - What we're supposed to do (add, delete, etc) */
ADDUSERPARAMTYPE_USERNO, /* 1 - User to manage (user number, U16) */
ADDUSERPARAMTYPE_ACCESSALWAYS, /* 2 - Access always (boolean) */
ADDUSERPARAMTYPE_ACCESSMODE, /* 3 - Access type (accessMode_e) */
ADDUSERPARAMTYPE_CACHED, /* 4 - Entry is managed by cache system (boolean) */
ADDUSERPARAMTYPE_USERTYPE, /* 5 - User type (userType_e) */
ADDUSERPARAMTYPE_PRIMARYFIELD, /* 6 - Primary field (MAX_CREDENTIALBYTES) */
ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, /* 7 - Primary field type (fieldType_e); */
ADDUSERPARAMTYPE_AUXFIELD, /* 8 - Auxiliary field (MAX_CREDENTIALBYTES) */
ADDUSERPARAMTYPE_AUXFIELDTYPE, /* 9 - Auxiliary field type (fieldType_e) */
ADDUSERPARAMTYPE_TIMEZONE, /* 10 - Timezone bitmap (U32) */
ADDUSERPARAMTYPE_EXPIREON, /* 11 - Date on which user no longer granted access, if non-0 */
ADDUSERPARAMTYPE_USECOUNT, /* 12 - Use count */
ADDUSERPARAMTYPE_EXCEPTIONGROUP, /* 13 - Exception group */
ADDUSERPARAMTYPE_LAST
}
addUserParamType_e;
typedef enum
{
ALARMID_NONE = 0, /* 0 - No alarm */
ALARMID_VALIDIN, /* 1 - Valid entry */
ALARMID_DENIEDACCESS, /* 2 - Denied access (bad credential) */
ALARMID_SECURED, /* 3 - Door closed & secured (only seen after alarms 3 or 4) */
ALARMID_DOORFORCED, /* 4 - Door forced */
ALARMID_KEYOVERRIDE, /* 5 - Key override */
ALARMID_INVALIDENTRY, /* 6 - Door open but invalid entry (key used?) */
ALARMID_DOORAJAR, /* 7 - Door ajar (needs .ja woman with Engrish accent) */
ALARMID_LOWBATTERY, /* 8 - Low battery alarm */
ALARMID_RXHELD, /* 9 - RX held */
ALARMID_LAST
}
alarmID_e;
typedef enum
{
CAPABILITIES_USERS = 0, /* 0 - Number of users supported */
CAPABILITIES_TIMEZONES, /* 1 - Number of timezone supported */
CAPABILITIES_EXCEPTIONS, /* 2 - Number of exceptions supported */
CAPABILITIES_EXCEPTIONGROUPS, /* 3 - Number of exception groups supported */
CAPABILITIES_EVENTLOG, /* 4 - Number of event log entries supported */
CAPABILITIES_DECLINEDLOG, /* 5 - Number of declined log entries supported */
CAPABILITIES_ALARMLOG, /* 6 - Number of alarm log entries supported */
CAPABILITIES_TOTALEVENTS, /* 7 - Total events (EVENT_LAST - 1) */
CAPABILITIES_LAST
}
capabilities_e;
typedef enum
{
CHECKSUMRESULT_CONFIGURATIONNVRAM = 0, /* 0 - Checksum results of the configuration NVRAM */
CHECKSUMRESULT_EXCEPTIONS, /* 1 - Checksum results of the exceptions NVRAM */
CHECKSUMRESULT_EXCEPTIONGROUPS, /* 2 - Checksum results of the exception groups NVRAM */
CHECKSUMRESULT_TZCALENDARS, /* 3 - Checksum results of the time zone calendar NVRAM */
CHECKSUMRESULT_TIMEZONES, /* 4 - Checksum results of the time zone NVRAM */
CHECKSUMRESULT_USERS, /* 5 - Checksum results of the users NVRAM */
CHECKSUMRESULT_CACHELRU, /* 6 - Checksum results of the cache LRU */
CHECKSUMRESULT_LAST
}
checksumResult_e;
typedef enum
{
CMD_RESPONSE = 0, /* 0 - Response to command */
CMD_HANDSHAKE, /* 1 - Establish session */
CMD_KILLSESSION, /* 2 - Kill session */
CMD_QUERYSERIALNUMBER, /* 3 - Query serial number */
CMD_QUERYVERSION, /* 4 - Query version */
CMD_SETDATETIME, /* 5 - Set date and time */
CMD_QUERYDATETIME, /* 6 - Query date and time */
CMD_SETCONFIG, /* 7 - Set configuration options */
CMD_GETCONFIG, /* 8 - Read configuration options */
CMD_MANAGEUSER, /* 9 - Manage users (add/delete/replace/update) */
CMD_DELETEUSERS, /* 10 - Delete users (all/most/cached) */
CMD_DEFINEEXCEPTION, /* 11 - Define exception (old block holiday) */
CMD_DEFINEEXCEPTIONGROUP, /* 12 - Define exception group */
CMD_DEFINECALENDAR, /* 13 - Define calendar */
CMD_DEFINETIMEZONE, /* 14 - Define time zone */
CMD_RMTAUTHRETRY, /* 15 - Remote authorization retry */
CMD_FILTERS, /* 16 - Event log filter configuration */
CMD_ALARMCONFIGURE, /* 17 - Alarm condition configuration */
CMD_EVENTLOGDUMP, /* 18 - Dump event log */
CMD_DECLINEDLOGDUMP, /* 19 - Dump declined log */
CMD_ALARMLOGDUMP, /* 20 - Dump alarm log */
CMD_DOWNLOADFIRMWARE, /* 21 - Download firmware */
CMD_DOWNLOADFIRMWARETIMEOUT, /* 22 - Download firmware timeout (internal command only) */
CMD_POWERTABLESELECTION, /* 23 - Power table selection */
CMD_CLEARNVRAM, /* 24 - Clear nvram (config/event log/declined log/etc) */
CMD_DPAC, /* 25 - DPAC manipulation commands */
CMD_SELFTEST, /* 26 - Selftest (heh) */
CMD_RESET, /* 27 - Restart controller */
CMD_LOGWRITE, /* 28 - Write event to event log */
CMD_MFGCOMMAND, /* 29 - Manufacturing commands */
CMD_NVRAMBACKUP, /* 30 - Backup/restore/erase NVRAM */
CMD_EXTENDEDRESPONSE, /* 31 - Response to command (extended version) */
CMD_LAST
}
cmdCommand_e;
typedef enum
{
CMDMFG_SETSERIALNUMBER = 0, /* 0 - Set serial number */
CMDMFG_SETCRYPTKEY, /* 1 - Set encryption key */
CMDMFG_DUMPNVRAM, /* 2 - Dump NVRAM */
CMDMFG_TERMINAL, /* 3 - DPAC terminal mode */
CMDMFG_REMOTEUNLOCK, /* 4 - Remote unlock (only on 'd' builds) */
CMDMFG_AUXCTLRVERSION, /* 5 - Request version of auxiliary controller */
CMDMFG_IOPINS, /* 6 - Read I/O pin states */
CMDMFG_ADCS, /* 7 - Read ADC values */
CMDMFG_HARDWAREID, /* 8 - Read hardware ID and CPU ID */
CMDMFG_CHECKPOINTLOGDUMP, /* 9 - Dump checkpoint log */
CMDMFG_CHECKPOINTLOGCLEAR, /* 10 - Clear checkpoint log */
CMDMFG_READREGISTERS, /* 11 - Read selected CPU registers */
CMDMFG_FORCEOPTIONS, /* 12 - Force I/O lines to certain states */
CMDMFG_COMMUSER, /* 13 - Fake a comm user entry */
CMDMFG_DUMPKEYPAD, /* 14 - Dump keypad debugging buffer */
CMDMFG_BATTERYCHECK, /* 15 - Force battery check */
CMDMFG_RAMREFRESH, /* 16 - Refresh RAM variables from NVRAM */
CMDMFG_TASKFLAGS, /* 17 - Dump task flags */
CMDMFG_TIMERCHAIN, /* 18 - Dump active timer chains */
CMDMFG_PEEKPOKE, /* 19 - Peek/poke CPU RAM memory */
CMDMFG_LOCKSTATE, /* 20 - Display global gLockState variable */
CMDMFG_CAPABILITIES, /* 21 - Read firmware capabilities (# users/event log entries, etc) */
CMDMFG_DUMPM41T81, /* 22 - Dump M41T81 RTC registers */
CMDMFG_DEBUGLOGDUMP, /* 23 - Dump debugging log */
CMDMFG_DEBUGLOGCLEAR, /* 24 - Clear debugging log */
CMDMFG_TESTWDT, /* 25 - Test watchdog */
CMDMFG_QUERYCKSUM, /* 26 - Query NVRAM checksum value */
CMDMFG_VALIDATECHECKSUMS, /* 27 - Validate checksums */
CMDMFG_REBUILDLRUCACHE, /* 28 - Rebuild LRC cache */
CMDMFG_TZUPDATE, /* 29 - Send TZCHANGE to tod.c */
CMDMFG_TESTPRESERVE, /* 30 - Test preserve save/restore code */
CMDMFG_MORTISESTATELOGDUMP, /* 31 - Dump the mortise state log */
CMDMFG_MORTISESTATELOGCLEAR, /* 32 - Clear the mortise state log */
CMDMFG_MORTISEPINS, /* 33 - Display current mortise pin status */
CMDMFG_HALTANDCATCHFIRE, /* 34 - Stop processor (optionally catch fire) */
CMDMFG_LAST
}
cmdMfgCommand_e;
typedef enum
{
CONFIGITEM_SERIAL_NUMBER = 0, /* 0 - Ye olde serial number */
CONFIGITEM_CRYPT_KEY, /* 1 - The encryption/decryption key */
CONFIGITEM_HARDWARE_OPTIONS_MFG, /* 2 - Bit map of hardware options at manufacturing time (hardwareOptions_e) */
CONFIGITEM_HARDWARE_OPTIONS, /* 3 - Bit map of hardware options at runtime time (hardwareOptions_e) */
CONFIGITEM_NVRAM_CHANGES, /* 4 - Log of NVRAM changes since reset (which blocks were reset) */
CONFIGITEM_NVRAMDIRTY, /* 5 - NVRAM is (or might be) dirty */
CONFIGITEM_NVRAM_WV, /* 6 - NVRAM write verify (I2C parts only) */
CONFIGITEM_ENABLE_WDT, /* 7 - If true, and OPT_WATCHDOG enabled, enables WDT */
CONFIGITEM_EARLY_ACK, /* 8 - Generates early RESPONSE_COMMANDRECEIVED message for commands that take some time */
CONFIGITEM_CONSOLE_AES_ONLY, /* 9 - If set, requires AES encryption on serial communications */
CONFIGITEM_RADIO_AES_ONLY, /* 10 - If set, requires AES encryption on radio communications */
CONFIGITEM_NDRLE, /* 11 - RLE (Run Length Encoding) NVRAM dump enable/disable */
CONFIGITEM_SOMF, /* 12 - Stop on mortise failure */
CONFIGITEM_NOGAF, /* 13 - Prevents what should be fatal errors from being fatal (i.e, No One Gives A Flip) */
CONFIGITEM_CARD_READER_POWER, /* 14 - External mag reader power supply control */
CONFIGITEM_PROX_ENABLE, /* 15 - Prox into permanent sleep mode */
CONFIGITEM_CKSUMCONFIG, /* 16 - Configuration NVRAM checksum enable/disable */
CONFIGITEM_DAILY_BATTERY_CHECK, /* 17 - Enable/disable daily battery check */
CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, /* 18 - If daily battery check enabled, top of the hour to check at */
CONFIGITEM_BATTERY_LOW, /* 19 - Return low battery status (TRUE = low) */
CONFIGITEM_LRU_HEAD, /* 20 - Cache LRU head pointer */
CONFIGITEM_LRU_TAIL, /* 21 - Cache LRU tail pointer */
CONFIGITEM_RTC_CALIBRATION, /* 22 - Signed 6 bit value written to M41T81 calibration register */
CONFIGITEM_ACVREQUESTER, /* 23 - Auxiliary controller version requester (fromDevice_e, internal variable) */
CONFIGITEM_LOCAL_LED, /* 24 - Local LED function assignment */
CONFIGITEM_ERRCNT_XORLEN, /* 25 - Error counter for XOR length not matching in protocol.c */
CONFIGITEM_ERRCNT_CRC, /* 26 - Error counter for bad CRC in protocol.c */
CONFIGITEM_ERRCNT_NOTSIGIL, /* 27 - Error counter for character received was not sigil in protocol.c */
CONFIGITEM_ERRCNT_TIMEOUT, /* 28 - Error counter for timeout in protocol.c */
CONFIGITEM_ERRCNT_TOOLONG, /* 29 - Error counter for packet too long in protocol.c */
CONFIGITEM_ERRCNT_TOOSHORT, /* 30 - Error counter for packet too short in protocol.c */
CONFIGITEM_ERRCNT_HITDEFAULT, /* 31 - Error counter for hitting default handler in protocol.c */
CONFIGITEM_ERRCNT_OVERRUN, /* 32 - Error counter for serial buffer overrun in serial.c */
CONFIGITEM_ERRCNT_UARTFE, /* 33 - Error counter for UART framing error in serial.c */
CONFIGITEM_ERRCNT_UARTOE, /* 34 - Error counter for UART overrun error in serial.c */
CONFIGITEM_DST_SET, /* 35 - Daylight savings time currently active */
CONFIGITEM_DST_MODE, /* 36 - Determines if repeating month/date, repeating month/day, or specific month/date (dstMode_e) */
CONFIGITEM_DST_FORWARD_MONTH, /* 37 - Month to skip forward on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_FORWARD_DOM, /* 38 - Day of month to skip forward on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_FORWARD_OOD, /* 39 - Occurence number of CONFIGITEM_DST_FORWARD_DOW to skip forward on (1-5) (DSTMODE_REPEATINGDOW) */
CONFIGITEM_DST_FORWARD_DOW, /* 40 - Day of week to skip forward on (1-7) (DSTMODE_REPEATINGDOW) */
CONFIGITEM_DST_FORWARD_HOUR, /* 41 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_FORWARD_MINUTE, /* 42 - Hour of day of month to skip forward on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_FORWARD_ADJUST, /* 43 - Number of minutes to move forward */
CONFIGITEM_DST_BACK_MONTH, /* 44 - Month to fall back on (1-12) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDAY, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_BACK_DOM, /* 45 - Day of month to fall back on (1-31) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_BACK_OOD, /* 46 - Occurence number of CONFIGITEM_DST_BACK_DOW to fall back on (1-5) (DSTMODE_REPEATINGDOW) */
CONFIGITEM_DST_BACK_DOW, /* 47 - Day of week to fall back on (1-7) (DSTMODE_REPEATINGDATE, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_BACK_HOUR, /* 48 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_BACK_MINUTE, /* 49 - Hour of day of month to fall back on (0-23) (DSTMODE_REPEATINGDATE, DSTMODE_REPEATINGDOW, DSTMODE_ONETIMEDATE) */
CONFIGITEM_DST_BACK_ADJUST, /* 50 - Number of minutes to move backwards */
CONFIGITEM_EVENTLOG_ZEROMEM, /* 51 - If set, event log memory is zeroed when event log cleared */
CONFIGITEM_EVENTLOG_BEGIN, /* 52 - Beginning record number when event log cleared */
CONFIGITEM_EVENTLOG_RECORD, /* 53 - Next event log record to write */
CONFIGITEM_EVENTLOG_ENTRIES, /* 54 - Number of entries in event log */
CONFIGITEM_EVENTLOG_WARNDEVICE, /* 55 - Event log warning device */
CONFIGITEM_EVENTLOG_WARNEVERY, /* 56 - Warn at every 'n' records (more or less) */
CONFIGITEM_EVENTLOG_RMTDEVICE, /* 57 - Device event log entries copied to (fromDevice_e) */
CONFIGITEM_DECLINEDLOG_ZEROMEM, /* 58 - If set, declined log memory is zeroed when declined log cleared */
CONFIGITEM_DECLINEDLOG_BEGIN, /* 59 - Beginning record number when declined log cleared */
CONFIGITEM_DECLINEDLOG_RECORD, /* 60 - Next declined log record to write */
CONFIGITEM_DECLINEDLOG_ENTRIES, /* 61 - Number of entries in declined log */
CONFIGITEM_DECLINEDLOG_WARNDEVICE, /* 62 - Declined record warning device */
CONFIGITEM_DECLINEDLOG_WARNEVERY, /* 63 - Warn at every 'n' records (more or less) */
CONFIGITEM_DECLINEDLOG_RMTDEVICE, /* 64 - Device declined entries copied to (fromDevice_e) */
CONFIGITEM_ALARMLOG_ZEROMEM, /* 65 - If set, alarm log memory is zeroed when alarm log cleared */
CONFIGITEM_ALARMLOG_BEGIN, /* 66 - Beginning record number when alarm log cleared */
CONFIGITEM_ALARMLOG_RECORD, /* 67 - Next alarm log record to write */
CONFIGITEM_ALARMLOG_ENTRIES, /* 68 - Number of entries in alarm log */
CONFIGITEM_ALARMLOG_WARNDEVICE, /* 69 - Alarm record warning device */
CONFIGITEM_ALARMLOG_WARNEVERY, /* 70 - Warn at every 'n' records (more or less) */
CONFIGITEM_ALARMLOG_RMTDEVICE, /* 71 - Device alarm entries copied to (fromDevice_e) */
CONFIGITEM_VISIBLE_FEEDBACK, /* 72 - Visible feedback on keypad presses enabled */
CONFIGITEM_AUDIBLE_FEEDBACK, /* 73 - Audible feedback on keypad presses enabled */
CONFIGITEM_VISIBLE_INDICATORS, /* 74 - Visible indicators on all actions (run dark) */
CONFIGITEM_AUDIBLE_INDICATORS, /* 75 - Audible indicators on all actions (run silent) */
CONFIGITEM_2NDPINDURATION, /* 76 - Number of seconds to wait for second PIN */
CONFIGITEM_LOCKOUT_ATTEMPTS, /* 77 - Number of pin/prox/magcard attempts before lockout */
CONFIGITEM_LOCKOUT_DURATION, /* 78 - Duration of lockout, in penta-seconds */
CONFIGITEM_KEYPAD_INACTIVITY, /* 79 - Duration in seconds with no key entries before key buffer cleared */
CONFIGITEM_ICIDLE_DURATION, /* 80 - If last credential was invalid, invalid attempt counter reset after this many seconds */
CONFIGITEM_WRITE_DECLINED_LOG, /* 81 - Declined log writing enable/disable */
CONFIGITEM_LOW_BATTERY_INDICATOR, /* 82 - Low battery audio/visual indicator enable/disable */
CONFIGITEM_PANIC_MODE, /* 83 - Enable/disable panic mode */
CONFIGITEM_TIMEZONE_ENABLE, /* 84 - Timezones enabled (applies to users, not passage modes) */
CONFIGITEM_EXCEPTION_ENABLE, /* 85 - Exceptions enabled (applies to users and passage modes) */
CONFIGITEM_AUTOUNLOCK_ENABLE, /* 86 - Auto-unlocking (schedule based) enabled */
CONFIGITEM_LOCK_PRIORITY_EMERGENCY, /* 87 - DPAC/PWM lock priority for emergency users (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, /* 88 - DPAC/PWM lock priority for supervisors (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_USER, /* 89 - DPAC/PWM lock priority for users (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_PASSAGE, /* 90 - DPAC/PWM lock priority for passage mode (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_PANIC, /* 91 - DPAC/PWM lock priority for panic mode/panic users (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_LOCKOUT, /* 92 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_RELOCK, /* 93 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, /* 94 - DPAC/PWM lock priority for bolt thrown (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, /* 95 - DPAC/PWM lock priority for configuration change (CONFIGITEM_LOCK_TYPE) (lockPriority_e) */
CONFIGITEM_LOCK_PRIORITY_REMOTE, /* 96 - DPAC/PWM lock priority for remote unlock (lockPriority_e) */
CONFIGITEM_LOCK_TYPE, /* 97 - Type of lock (PWM, electric, magnetic) */
CONFIGITEM_DOUBLE_PULSE, /* 98 - Lock double pulse enabled */
CONFIGITEM_DOUBLE_DELAY, /* 99 - Delay between double pulses, in centiseconds */
CONFIGITEM_MOTOR_DURATION, /* 100 - Duration lock motor to run, in centiseconds */
CONFIGITEM_MORTISE_TYPE, /* 101 - Type of mortise connected to controller */
CONFIGITEM_UNLOCK_TIME, /* 102 - Normal unlock duration in seconds */
CONFIGITEM_EXT_UNLOCK_TIME, /* 103 - Extended unlock duration, in seconds */
CONFIGITEM_DOOR_AJAR_TIME, /* 104 - Time before door considered stuck open, in seconds */
CONFIGITEM_SESSION_TIMEOUT, /* 105 - Session timeout, in seconds */
CONFIGITEM_RETRY_ON_TIMEOUT, /* 106 - Retry lock-initiated sessions if comm session timed out (instead of terminated by remote end) */
CONFIGITEM_UNSOLICITED_ENCRYPT, /* 107 - Unsolicited messages are encrypted (encryptionScheme_e) */
CONFIGITEM_RMT_AUTH_TIMEOUT, /* 108 - Seconds to wait for remote authorization timeout (0 = no remote auth) */
CONFIGITEM_RMT_AUTH_DEVICE, /* 109 - Device remote authorization requests sent over (fromDevice_e) */
CONFIGITEM_ALARM_DEVICE, /* 110 - Device alarm condition connects via */
CONFIGITEM_NOTIFY_DEVICE, /* 111 - Notify user device */
CONFIGITEM_COMMUSER_DEVICE, /* 112 - Device comm user connects via */
CONFIGITEM_SCHEDULER_DEVICE, /* 113 - Device scheduler connects via */
CONFIGITEM_SCHEDULER_TYPE, /* 114 - Scheduling algorithm to use (schedulerType_e) */
CONFIGITEM_SCHEDULER_AWAKE, /* 115 - Number of decaseconds scheduler is awake for */
CONFIGITEM_SCHEDULER_PERIOD, /* 116 - Interval in minutes between scheduled wakeups (SCHEDULERTYPE_SIMPLE) */
CONFIGITEM_SCHEDULER_HOD, /* 117 - Hour of day map (SCHEDULERTYPE_HOD) */
CONFIGITEM_SCHEDULER_DOW, /* 118 - Day of month map (SCHEDULERTYPE_DOW) */
CONFIGITEM_SCHEDULER_DOM, /* 119 - Day of month map (SCHEDULERTYPE_DOM) */
CONFIGITEM_SCHEDULER_HM1, /* 120 - On at hour:minute #1 */
CONFIGITEM_SCHEDULER_HM2, /* 121 - On at hour:minute #2 */
CONFIGITEM_SCHEDULER_HM3, /* 122 - On at hour:minute #3 */
CONFIGITEM_SCHEDULER_HM4, /* 123 - On at hour:minute #4 */
CONFIGITEM_RADIO_TYPE, /* 124 - Radio type (None, DPAC, WiPort, etc) */
CONFIGITEM_RADIO_MODE, /* 125 - Radio mode (DPAC=active/passive) */
CONFIGITEM_RADIO_TIMEOUT, /* 126 - Number of seconds before we decide server didn't hear us (only in RADIOMODE_LOCKINITIATED) */
CONFIGITEM_RADIO_ATTEMPTS, /* 127 - Number of times to attempt connection to server (only in RADIOMODE_LOCKINITIATED) */
CONFIGITEM_RADIO_HOUSEKEEPING, /* 128 - Time we allow for radio housekeeping (associate with AP, etc) */
CONFIGITEM_RADIO_LEAPUSERNAME, /* 129 - LEAP username */
CONFIGITEM_RADIO_LEAPPASSWORD, /* 130 - LEAP password */
CONFIGITEM_INHIBIT_VOLTAGE, /* 131 - Voltage when battery is considered dead */
CONFIGITEM_LOW_VOLTAGE, /* 132 - Voltage when battery is considered low */
CONFIGITEM_PT_RANGE_1, /* 133 - Power table for 0.00 to 5.99 volts */
CONFIGITEM_PT_RANGE_2, /* 134 - Power table for 6.00 to 6.49 volts */
CONFIGITEM_PT_RANGE_3, /* 135 - Power table for 6.50 to 6.99 volts */
CONFIGITEM_PT_RANGE_4, /* 136 - Power table for 7.00 to 7.49 volts */
CONFIGITEM_PT_RANGE_5, /* 137 - Power table for 7.50 to 7.99 volts */
CONFIGITEM_PT_RANGE_6, /* 138 - Power table for 8.00 to 8.49 volts */
CONFIGITEM_PT_RANGE_7, /* 139 - Power table for 8.50 to 8.99 volts */
CONFIGITEM_PT_RANGE_8, /* 140 - Power table for 9.00 and up volts */
CONFIGITEM_MAGCARD_IFS, /* 141 - Include field separator character in returned data */
CONFIGITEM_MAGCARD_FIELDS, /* 142 - Mag card fields to include */
CONFIGITEM_MAGCARD_OFFSET, /* 143 - Offset into concatenated field */
CONFIGITEM_MAGCARD_DIGITS, /* 144 - Number of digits to return past offset */
CONFIGITEM_ALARMS, /* 145 - Alarms (not writable) */
CONFIGITEM_FILTERS, /* 146 - Event filter storage (not writable) */
CONFIGITEM_ALARMSTATE, /* 147 - Current alarm state (alarmID_e) */
CONFIGITEM_DOORSTATE, /* 148 - Current door state (doorState_e) */
CONFIGITEM_DPACDEBUG, /* 149 - Enable DPAC debug events to event log */
CONFIGITEM_FAILOPENSECURE, /* 150 - Fail open (false) or secure (true) on battery dead */
CONFIGITEM_REPLACED_VOLTAGE, /* 151 - If battery above this voltage, it's been replaced */
CONFIGITEM_RX_HELD_TIME, /* 152 - If RX held longer than this, sent RX held alarm */
CONFIGITEM_PACKET_TIMEOUT, /* 153 - Time (in seconds) that a complete packet must arrive in */
CONFIGITEM_EXTENDEDRESPONSE, /* 154 - Enables extended response (which includes original sequence number) */
CONFIGITEM_PASSAGEMODEINDICATOR, /* 155 - When lock in passage mode, LEDs show denied if set, granted if cleared (Squish #1133) */
CONFIGITEM_PFMRETURNTIME, /* 156 - Number of seconds power must be present to exit power fail death loop */
CONFIGITEM_LAST /* Must be last item defined (All non-virtual items added above) */
#if 0 /* XXX: unused ? */
,
CONFIGITEM_MAGIC_FIRST = 239, /* Next item is first magic command */
CONFIGITEM_MAGIC_USERFIELD, /* 240 - Virtual command to delete PIN '8989', add user '8989' */
CONFIGITEM_MAGIC_USERADD, /* 241 - Virtual command to add a user (PIN only) */
CONFIGITEM_MAGIC_USERDELETE, /* 242 - Virtual command to delete a user */
CONFIGITEM_MAGIC_NVRAMBACKUP, /* 243 - Virtual command to backup NVRAM to FLASH */
CONFIGITEM_MAGIC_NVRAMRESTORE, /* 244 - Virtual command to restore NVRAM from FLASH */
CONFIGITEM_MAGIC_NVRAMERASE, /* 245 - Virtual command to erase backed-up NVRAM */
CONFIGITEM_MAGIC_LAST /* *Really* the last item */
#endif
}
configItem_e;
typedef enum
{
DELETEUSERS_ALL = 0, /* 0 - Delete ALL users, including master and emergency, restores default users */
DELETEUSERS_CACHED, /* 1 - Delete only cached users */
DELETEUSERS_LAST
}
deleteUsers_e;
typedef enum
{
DISPOSITION_ADD = 0, /* 0 - Add, must not exist (by user number only) */
DISPOSITION_REPLACE, /* 1 - Replace, (add, but overwrite if necessary) */
DISPOSITION_UPDATE, /* 2 - Update, must already exist */
DISPOSITION_DELETE, /* 3 - Delete, exists or not is irrelevant */
DISPOSITION_RETRIEVE, /* 4 - Retrieve, must exist */
DISPOSITION_LAST
}
disposition_e;
#if 0
typedef enum
{
DOORSTATE_NONE = 0, /* 0 - No door state available */
DOORSTATE_SECURED, /* 1 - Door closed & secured */
DOORSTATE_DOORFORCED, /* 2 - Door forced */
DOORSTATE_KEYOVERRIDE, /* 3 - Key override */
DOORSTATE_DOORAJAR, /* 4 - Door ajar */
DOORSTATE_LAST
}
doorState_e;
#endif
#if 0
typedef enum
{
DSTMODE_NONE, /* 0 - Automatic DST switching disabled */
DSTMODE_REPEATINGDOM, /* 1 - Particular day on a particular month (Apr 2nd) */
DSTMODE_REPEATINGDOW, /* 2 - Day of week on a particular week of a particular month (Sunday of last week of April) */
DSTMODE_ONETIMEDOM, /* 3 - Like DSTMODE_REPEATINGDOM, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|DAY] items */
DSTMODE_ONETIMEDOW, /* 4 - Like DSTMODE_REPEATINGDOW, but clears CONFIGITEM_DST_[FORWARD|BACK][MONTH|OOD|DOW] items */
DSTMODE_LAST
}
dstMode_e;
#endif
typedef enum
{
ENCRYPTIONSCHEME_NONE = 0, /* 0 - No encryption */
ENCRYPTIONSCHEME_ROLLING, /* 1 - XOR with crypt key, shift each byte */
ENCRYPTIONSCHEME_SN, /* 2 - XOR with serial number, shift each byte */
ENCRYPTIONSCHEME_AESIV, /* 3 - AES implementation (set initial vector) */
ENCRYPTIONSCHEME_AES, /* 4 - AES implementation */
ENCRYPTIONSCHEME_LAST
}
encryptionScheme_e;
typedef enum
{
EVENT_INVALIDPIN = 0, /* 0 - Entered PIN was invalid */
EVENT_USER, /* 1 - Regular user has been granted access */
EVENT_ONETIME, /* 2 - One-time user has been granted access */
EVENT_PASSAGEBEGIN, /* 3 - Lock has unlocked because of auto-unlock mode */
EVENT_PASSAGEEND, /* 4 - Lock has relocked because of auto-unlock mode */
EVENT_BADTIME, /* 5 - Access attempted outside of allowed time/date */
EVENT_LOCKEDOUT, /* 6 - Access attempted during panic or lockout */
EVENT_LOWBATTERY, /* 7 - Battery is low */
EVENT_DEADBATTERY, /* 8 - Battery is dead */
EVENT_BATTERYREPLACED, /* 9 - Battery has been replaced */
EVENT_USERADDED, /* 10 - User added or changed */
EVENT_USERDELETED, /* 11 - User deleted */
EVENT_EMERGENCY, /* 12 - The emergency code was entered */
EVENT_PANIC, /* 13 - Somebody pushed the panic button */
EVENT_RELOCK, /* 14 - Relock code was entered */
EVENT_LOCKOUTBEGIN, /* 15 - Lockout code was entered */
EVENT_LOCKOUTEND, /* 16 - Lockout code was entered again */
EVENT_RESET, /* 17 - Lock was reset (restarted) */
EVENT_DATETIMESET, /* 18 - System date & time was set */
EVENT_LOGCLEARED, /* 19 - Event log cleared */
EVENT_DBRESET, /* 20 - User database reset */
EVENT_COMMSTARTED, /* 21 - Communications session started */
EVENT_COMMENDED, /* 22 - Communications session ended */
EVENT_FIRMWAREABORT, /* 23 - A firmware update aborted */
EVENT_FIRMWAREERROR, /* 24 - A firmware update encountered an error */
EVENT_FIRMWARETIMEOUT, /* 25 - Timeout expecting firmware download data record */
EVENT_DSTFALLBACK, /* 26 - Clock set back */
EVENT_DSTSPRINGFORWARD, /* 27 - Clock set forward */
EVENT_BOLTTHROWN, /* 28 - Bolt thrown */
EVENT_BOLTRETRACTED, /* 29 - Bolt retracted */
EVENT_MASTERCODE, /* 30 - Master code entered (clears panic, relock, and lockout) */
EVENT_COMMUSER, /* 31 - A comm user was activated */
EVENT_DPACDISABLED, /* 32 - DPAC disabled */
EVENT_NOTIFY, /* 33 - Notify user has been granted access */
EVENT_EXPIRED, /* 34 - Expired user attempted access */
EVENT_SUPERVISOR, /* 35 - The supervisor code was entered */
EVENT_MCCENTER, /* 36 - Entered MCC programming mode */
EVENT_MCCEXIT, /* 37 - Exited MCC programming mode */
EVENT_SERIALRXOVERRUN, /* 38 - Serial receiver overrun */
EVENT_DPACRXOVERRUN, /* 39 - DPAC receiver overrun */
EVENT_NVRAMPBCLEAR, /* 40 - NVRAM cleared by pushybutton */
EVENT_NVRAMLAYOUTCHANGE, /* 41 - NVRAM cleared by revision */
EVENT_NVRAMOK, /* 42 - NVRAM wasn't changed */
EVENT_USERREPLACED, /* 43 - User replaced */
EVENT_RADIOTIMEOUT, /* 44 - Radio timed out waiting for remote login */
EVENT_SUSPENDEDUSER, /* 45 - Suspended user attempted access */
EVENT_USERUPDATED, /* 46 - User updated */
EVENT_DOORBOLTED, /* 47 - Access denied because door is bolted */
EVENT_PANICACTIVE, /* 48 - Access denied because lock is in panic mode */
EVENT_PASSAGEACTIVE, /* 49 - Access denied because lock is in passage mode */
EVENT_PASSAGEINACTIVE, /* 50 - Access denied because lock is not in passage mode */
EVENT_BADACCESSMODE, /* 51 - Access denied because access mode is weird */
EVENT_CLOCKERR, /* 52 - Error reading RTC */
EVENT_REMOTEUNLOCK, /* 53 - Remote unlock */
EVENT_TZHAUDISABLED, /* 54 - Time zone, exceptions, and auto-unlock functionality disabled */
EVENT_EVENTLOGWRAPPED, /* 55 - Event log wrapped */
EVENT_DECLINEDLOGWRAPPED, /* 56 - Declined log wrapped */
EVENT_ALARMLOGWRAPPED, /* 57 - Alarm log wrapped */
EVENT_RADIOBUSYEMERGENCY, /* 58 - Access denied because radio is busy */
EVENT_RADIOBUSYSUPERVISOR, /* 59 - Access denied because radio is busy */
EVENT_RADIOBUSYONETIME, /* 60 - Access denied because radio is busy */
EVENT_RADIOBUSYUSER, /* 61 - Access denied because radio is busy */
EVENT_RADIOBUSYPANIC, /* 62 - Access denied because radio is busy */
EVENT_RADIOBUSYREX, /* 63 - Access denied because radio is busy */
EVENT_RADIOBUSYLOCKOUT, /* 64 - Access denied because radio is busy */
EVENT_RADIOBUSYRELOCK, /* 65 - Access denied because radio is busy */
EVENT_BATTERYCHECKHELDOFF, /* 66 - Battery check was not performed (user number says why) */
EVENT_RMTAUTHREQUEST, /* 67 - Remote authorization request made */
EVENT_FIRMWAREUPDATE, /* 68 - A firmware update was attempted, and succeeded */
EVENT_FIRMWAREUPDATEFAILED, /* 69 - A firmware update was attempted, and failed */
EVENT_MSMFAILURE, /* 70 - Mortise state machine failure */
EVENT_CLOCKRESET, /* 71 - The RTC was reset, likely due to ESD */
EVENT_POWERFAIL, /* 72 - Power Fail Monitor (PFM) circuit triggered */
EVENT_DPAC501WENTSTUPID, /* 73 - DPAC-501 failed to release CTS on power up */
/*
* These are all internal debugging events. Real events should go before these.
*/
EVENT_CHECKSUMCONFIG, /* 74 - Performing checksum on configuration NVRAM */
EVENT_CHECKSUMTZ, /* 75 - Performing checksum on timezone data NVRAM */
EVENT_DEBUG, /* 76 - Debug event, could mean anything (programmer discretion) */
EVENT_LAST /* 77 - Everything must go before this entry */
}
event_e;
typedef enum
{
FIELDTYPE_NONE = 0, /* 0 - Field contains nothing */
FIELDTYPE_PIN, /* 1 - Field contains PIN */
FIELDTYPE_PROX, /* 2 - Field contains Prox card */
FIELDTYPE_MAGCARD, /* 3 - Field contains mag card */
FIELDTYPE_LAST
}
fieldType_e;
#if 0
typedef enum
{
FILTERMODE_NORMAL = 0, /* 0 - Filters events specified */
FILTERMODE_INVERT, /* 1 - Filters events not specified */
FILTERMODE_LAST
}
filterMode_e;
#endif
typedef enum
{
FILTERSELECT_RECORDING = 0, /* 0 - Recording filters */
FILTERSELECT_REPORTING, /* 1 - Reporting filters */
FILTERSELECT_LAST
}
filterSelect_e;
/* XXX: enum vals don't all match vals in comments ??? */
typedef enum
{
FORCEITEM_RADIOPOWER = 0, /* 0 - Radio power */
FORCEITEM_RADIOENABLE, /* 1 - Radio enable */
FORCEITEM_LEDRED, /* 2 - Red keypad LED */
FORCEITEM_LEDGREEN, /* 3 - Green keypad LED */
FORCEITEM_LEDYELLOW, /* 4 - Yellow keypad LED */
FORCEITEM_PIEZO, /* 5 - Keypad peizo */
FORCEITEM_MAGPOWER, /* 6 - Mag card reader power supply */
FORCEITEM_MAGLEDA, /* 7 - Mag card LED A (usually red) */
FORCEITEM_MAGLEDB, /* 8 - Mag card LED B (usually green) */
FORCEITEM_PROXPOWER, /* 13 - Prox circuitry power (opamps, etc) */
FORCEITEM_PROXPING, /* 14 - Prox PIC12F629 ping/sleep mode */
FORCEITEM_PROXMODE, /* 15 - Prox ping/read mode (selects 50hz/125KHz filters) */
FORCEITEM_I2CPOWER, /* 16 - I2C power */
FORCEITEM_MOTORARUN, /* 17 - Motor A run (to H-bridge) */
FORCEITEM_MOTORBRUN, /* 18 - Motor B run (to H-bridge) */
FORCEITEM_VMON, /* 19 - VMon (ADC 0 battery sense) */
FORCEITEM_PROX, /* 20 - Prox test mode (continuous 125KHz read) */
FORCEITEM_MORTISETEST, /* 21 - Force mortise into test mode */
FORCEITEM_KEYPADTEST, /* 22 - Force keypad into test mode */
FORCEITEM_MAGTEST, /* 23 - Force mag card test mode */
FORCEITEM_PROXTEST, /* 24 - Force prox card test mode */
FORCEITEM_ICLASSPOWER, /* 25 - iClass Prox power */
FORCEITEM_ICLASSRESET, /* 26 - iClass Prox reset */
FORCEITEM_LAST
}
forceItem_e;
typedef enum
{
FROMDEVICE_NONE = 0, /* 0 - Used to indicate no device */
FROMDEVICE_INTERNAL, /* 1 - Generated internally */
FROMDEVICE_KEYPAD, /* 2 - Generated from keypad */
FROMDEVICE_CONSOLE, /* 3 - Generated from console */
FROMDEVICE_WIFI, /* 4 - Generated from wi-fi (DPAC) */
FROMDEVICE_LAST
}
fromDevice_e;
#if 0
typedef enum
{
HARDWAREOPTIONS_NONE = 0x0000, /* No options installed (?!) */
HARDWAREOPTIONS_CLOCK = 0x0001, /* Has RTC installed (always set) */
HARDWAREOPTIONS_CONSOLE = 0x0002, /* Has serial console (always set) */
HARDWAREOPTIONS_KEYPAD = 0x0004, /* Has keypad installed */
HARDWAREOPTIONS_PROXREADER = 0x0008, /* Has Prox card circuitry installed */
HARDWAREOPTIONS_MAGREADER = 0x0010, /* Has magnetic card reader attached */
HARDWAREOPTIONS_1WIRE = 0x0020, /* Has Dallas 1-wire interface installed */
HARDWAREOPTIONS_WIFI = 0x0040, /* Has WiFi module installed (DPAC only, for now) */
HARDWAREOPTIONS_RS485 = 0x0080, /* Has RS-485 optioning (RS-232 assumed if not) */
HARDWAREOPTIONS_IR = 0x0100, /* Has IR LED communications interface installed */
HARDWAREOPTIONS_PUSHBUTTON = 0x0200, /* Has MCC pushbutton */
HARDWAREOPTIONS_WATCHDOG = 0x0400, /* Has watchdog option compiled in */
HARDWAREOPTIONS_ICLASSREADER = 0x0800, /* Has iClass OEM75 prox reader installed */
HARDWAREOPTIONS_AVAIL1000 = 0x1000, /* Not defined */
HARDWAREOPTIONS_AVAIL2000 = 0x2000, /* Not defined */
HARDWAREOPTIONS_AVAIL4000 = 0x4000, /* Not defined */
HARDWAREOPTIONS_AVAIL8000 = 0x8000, /* Not defined */
HARDWAREOPTIONS_RADIO = (HARDWAREOPTIONS_WIFI),
HARDWAREOPTIONS_LAST = 0xffff /* Place holder, don't use */
}
hardwareOptions_e;
#endif
#if 0
typedef enum
{
LOCALLED_NONE = 0, /* 0 - No assignment */
LOCALLED_RADIOPOWER, /* 1 - Follows radio power supply (lit=power on) */
LOCALLED_LOCKUNLOCKED, /* 2 - Follows strike state (lit=locked) */
LOCALLED_I2CPOWER, /* 3 - Follows I2C power (lit=power on) */
LOCALLED_AUTHCONSOLE, /* 4 - Follows authorization from console port (lit=authorized) */
LOCALLED_AUTHWIFI, /* 5 - Follows authorization from Wifi port (lit=authorized) */
LOCALLED_BATTERYLOW, /* 6 - Follows battery low status (lit=low) */
LOCALLED_BATTERYDEAD, /* 7 - Follows battery dead status (lit=battery dead) */
LOCALLED_PROXREADY, /* 8 - Follows Prox ready to read (lit=ready) */
LOCALLED_APACQUIRED, /* 9 - Follows WAP acquired via DPAC (lit=acquired) */
LOCALLED_PASSMODE, /* 10 - Follows DPAC entering pass mode (lit=pass mode successful) */
LOCALLED_PROXREAD, /* 11 - Follows receiving a prox read event (PROXCARDEVENT_READCARD) */
LOCALLED_CONNECTED, /* 12 - Follows the DPAC interrupt line, indicating connection status */
LOCALLED_DPACCTSTIMER, /* 13 - Follows DPAC CTS line, if asserted more than 5 seconds */
LOCALLED_PFMCHARGING, /* 14 - Follows the state of the PFM super-cap charger */
LOCALLED_LAST
}
localLED_e;
#endif
#if 0
typedef enum
{
LOCKPRIORITY_NONE = 0, /* 0 - Radio is not shut down for motor run, access not denied if radio is on */
LOCKPRIORITY_DPAC, /* 1 - Radio is not shut down for motor run, access denied if radio is on */
LOCKPRIORITY_LOCK, /* 2 - Radio is shut down for motor run, access not denied if radio is on */
LOCKPRIORITY_LAST
}
lockPriority_e;
#endif
#if 0
typedef enum
{
LOCKTYPE_NONE = 0, /* 0 - No lock present */
LOCKTYPE_PWM, /* 1 - PWM motor */
LOCKTYPE_ELECTRIC_STRIKE, /* 2 - Electric strike (normally de-energized, uses Motor A side of H-bridge) */
LOCKTYPE_MAGNETIC_LOCK, /* 3 - Magnetic lock (normally energized, uses Motor A side of H-bridge) */
LOCKTYPE_RELAY, /* 4 - Relay (normally de-energized, uses Motor B side of H-bridge) */
LOCKTYPE_LAST
}
lockType_e;
#endif
typedef enum
{
MFGFIELD_IOPINS = 0, /* 0 - Contains data about the state of the IO pins */
MFGFIELD_ADCS, /* 1 - Contains raw ADC data */
MFGFIELD_HARDWAREID, /* 2 - Contains hardware ID & revision of PIC */
MFGFIELD_CHECKPOINTLOG, /* 3 - Contains the checkpoint log data */
MFGFIELD_CPUREGISTERS, /* 4 - Contains the contents of selected PIC registers */
MFGFIELD_TASKFLAGS, /* 5 - Contains a list of all task flag values */
MFGFIELD_TIMERCHAIN, /* 6 - Contains a complete list of all active timers (timerData_t) */
MFGFIELD_PEEKPOKE, /* 7 - Contains results of peeking memory (U8, U16, U32, or string) */
MFGFIELD_LOCKSTATE, /* 8 - Contains the current passage mode flags (lockState_t) */
MFGFIELD_CAPABILITIES, /* 9 - Contains lock capability info (# users, event log entries, etc) */
MFGFIELD_DUMPM41T81, /* 10 - Contains a complete dump of the M41T81 RTC registers */
MFGFIELD_NVRAMCHECKSUMVALUE, /* 11 - Contains the 32-bit NVRAM checksum value */
MFGFIELD_CHECKSUMRESULTS, /* 12 - Contains results from checksumming exceptions, exceptiong roups, time zone calendars and time zones */
MFGFIELD_MORTISESTATELOG, /* 13 - Contains the last 32 mortise state changes */
MFGFIELD_MORTISEPINS, /* 14 - Contains the mortise pin status (S1,S2,S3,S4) */
MFGFIELD_KEYPADCHAR, /* 15 - Contains a character from the keypad */
MFGFIELD_MAGCARD, /* 16 - Contains mag card data */
MFGFIELD_PROXCARD, /* 17 - Contains prox card data */
MFGFIELD_LAST
}
mfgField_e;
typedef enum
{
MORTISETYPE_NONE = 0, /* 0 - No mortise installed */
MORTISETYPE_S82276, /* 1 - Sargent 82276 mortise (A) */
MORTISETYPE_S82277, /* 2 - Sargent 82277 mortise, no cylinder (B) */
MORTISETYPE_S82278, /* 3 - Sargent 82278 mortise, no deadbolt (C) */
MORTISETYPE_S82279, /* 4 - Sargent 82279 mortise, no cylinder or deadbolt (D) */
MORTISETYPE_S10G77, /* 5 - Sargent 10G77 bored lock body (E) */
MORTISETYPE_S8877, /* 6 - Sargent 8877 mortise exit device (F) */
MORTISETYPE_S8878, /* 7 - Sargent 8878 mortise exit device, no cylinder (G) */
MORTISETYPE_S8977, /* 8 - Sargent 8977 mortise exit device (H) */
MORTISETYPE_S8978, /* 9 - Sargent 8978 mortise exit device, no cylinder (I) */
MORTISETYPE_CRML20x36, /* 10 - Corbin-Russwin ML20736/ML20836 mortise (J) */
MORTISETYPE_CRML20x35, /* 11 - Corbin-Russwin ML20735/ML20835 mortise, no cylinder (K) */
MORTISETYPE_CRML20x34, /* 12 - Corbin-Russwin ML20734/ML20834 mortise, no deadbolt (L) */
MORTISETYPE_CRML20x33, /* 13 - Corbin-Russwin ML20733/ML20833 mortise, no cylinder or deadbolt (M) */
MORTISETYPE_CRCL33x34, /* 14 - Corbin-Russwin CL33734/CL33834 bored lock body (N) */
MORTISETYPE_CR9X34, /* 15 - Corbin-Russwin 9734/9834 bored lock body (O) */
MORTISETYPE_CR9X33, /* 16 - Corbin-Russwin 9833/9833 bored lock body, no cylinder (P) */
MORTISETYPE_CR9MX34, /* 17 - Corbin-Russwin 9M734/9M834 bored lock body (Q) */
MORTISETYPE_CR9MX33, /* 18 - Corbin-Russwin 9M733/9M833 bored lock body, no cylinder (R) */
MORTISETYPE_LAST
}
mortiseType_e;
#if 0
typedef enum
{
NVRAMCLEAROPTIONS_NONE = 0x0000, /* Place holder */
NVRAMCLEAROPTIONS_CFGINSTALLER = 0x0001, /* Options settable by the installer (lock type, etc) */
NVRAMCLEAROPTIONS_CFGADMIN = 0x0002, /* Options settable by the lock administrator (time, date, etc) */
NVRAMCLEAROPTIONS_EXCEPTIONS = 0x0004, /* The exceptions definitions */
NVRAMCLEAROPTIONS_EXCEPTIONGROUPS = 0x0008, /* The exception group definitions */
NVRAMCLEAROPTIONS_CALENDARS = 0x0010, /* The timezones calendar definitions */
NVRAMCLEAROPTIONS_TIMEZONES = 0x0020, /* The timezones definitions */
NVRAMCLEAROPTIONS_FILTERS = 0x0040, /* Recording filters */
NVRAMCLEAROPTIONS_EVENTLOG = 0x0080, /* The event log */
NVRAMCLEAROPTIONS_USERDATA = 0x0100, /* The actual user database */
NVRAMCLEAROPTIONS_DECLINEDLOG = 0x0200, /* Declined credentials log */
NVRAMCLEAROPTIONS_ALARMLOG = 0x0400, /* Alarm log */
NVRAMCLEAROPTIONS_LRUCACHE = 0x0800, /* LRU cache for remote authorization (status, user doesn't clear explicitly) */
NVRAMCLEAROPTIONS_DBHASH = 0x1000, /* User database hash (status, user doesn't clear explicitly) */
NVRAMCLEAROPTIONS_CFGSYSTEM = 0x2000, /* Factory settable options, system variables (status, user doesn't clear explicitly) */
NVRAMCLEAROPTIONS_AVAIL4000 = 0x4000, /* Unused */
NVRAMCLEAROPTIONS_ALL = 0x7fff, /* All of the above */
NVRAMCLEAROPTIONS_USEBACKUP = 0x8000 /* If set, installer and admin options are set according from NVRAM backup (if valid) */
}
nvramClearOptions_e;
#endif
#if 0
typedef enum
{
NVRAMCOMMAND_BACKUP = 0, /* 0 - Backup NVRAM to backup region */
NVRAMCOMMAND_ERASE, /* 1 - Erase backup region */
NVRAMCOMMAND_RESTORE, /* 2 - Restore NVRAM from backup region */
NVRAMCOMMAND_LAST
}
nvramCommand_e;
#endif
#if 0
typedef enum
{
NVRAMDUMPSELECT_ALL = 0, /* 0 - Dump all */
NVRAMDUMPSELECT_PIC, /* 1 - Dump NVRAM on PIC */
NVRAMDUMPSELECT_USER, /* 2 - Dump I2C NVRAM containing user data, exceptions, exception groups, calendars, timezones */
NVRAMDUMPSELECT_EVENT, /* 3 - Dump I2C NVRAM containing event log, declined log, alarm log, LRU cache */
NVRAMDUMPSELECT_LAST
}
nvramDumpSelect_e;
#endif
typedef enum
{
PEEKPOKE_READU8 = 0, /* 0 - Read 8 bit value */
PEEKPOKE_READU16, /* 1 - Read 16 bit value */
PEEKPOKE_READU24, /* 2 - Read 24 bit value */
PEEKPOKE_READU32, /* 3 - Read 32 bit value */
PEEKPOKE_READSTRING, /* 4 - Read 'n' 8 bit values */
PEEKPOKE_WRITEU8, /* 5 - Write 8 bit value */
PEEKPOKE_WRITEU16, /* 6 - Write 16 bit value */
PEEKPOKE_WRITEU24, /* 7 - Write 24 bit value */
PEEKPOKE_WRITEU32, /* 8 - Write 32 bit value */
PEEKPOKE_WRITESTRING, /* 9 - Write 'n' 8 bit values */
PEEKPOKE_LAST
}
peekPoke_e;
typedef enum
{
PPMISOURCE_NONE = 0, /* 0 - PPMI came from nowhere (not set) */
PPMISOURCE_PIN, /* 1 - PPMI came from PIN */
PPMISOURCE_PROX, /* 2 - PPMI came from Prox */
PPMISOURCE_MAGCARD, /* 3 - PPMI came from mag card */
PPMISOURCE_LAST
}
ppmiSource_e;
#if 0
typedef enum
{
RADIOMODE_HOSTINITIATED = 0, /* 0 - DPAC in listen mode (default) */
RADIOMODE_LOCKINITIATED, /* 1 - DPAC in pass-through mode */
RADIOMODE_LAST
}
radioMode_e;
#endif
#if 0
typedef enum
{
RADIOTYPE_NONE = 0, /* 0 - No radio present */
RADIOTYPE_WIPORTNR, /* 1 - WiPortNR */
RADIOTYPE_DPAC80211B, /* 2 - DPAC 802.11b */
RADIOTYPE_DPAC80211BG, /* 3 - DPAC 802.11bg */
RADIOTYPE_LAST
}
radioType_e;
#endif
typedef enum
{
RESPONSETYPE_OK = 0, /* 0 - All is well */
RESPONSETYPE_ERROR, /* 1 - Generic error */
RESPONSETYPE_HASDATA, /* 2 - Response has data */
RESPONSETYPE_NOHANDLER, /* 3 - Command requested with no handler (internal error) */
RESPONSETYPE_NOSESSION, /* 4 - No session established */
RESPONSETYPE_BADCOMMAND, /* 5 - Bad command value */
RESPONSETYPE_BADPARAMETER, /* 6 - Bad parameter (can mean a lot of things) */
RESPONSETYPE_BADPARAMETERLEN, /* 7 - Bad parameter length (too short, too long) */
RESPONSETYPE_MISSINGPARAMETER, /* 8 - Missing parameter (something was required, what'd you forget?) */
RESPONSETYPE_DUPLICATEPARAMETER, /* 9 - Parameter supplied more than once (D'oh!) */
RESPONSETYPE_PARAMETERCONFLICT, /* 10 - Parameters conflict (usually mutually exclusive items) */
RESPONSETYPE_BADDEVICE, /* 11 - Bad device (command came from a device that's not allowed) */
RESPONSETYPE_NVRAMERROR, /* 12 - Hardware problem... */
RESPONSETYPE_NVRAMERRORNOACK, /* 13 - Hardware problem... */
RESPONSETYPE_NVRAMERRORNOACK32, /* 14 - Hardware problem... */
RESPONSETYPE_NOTI2CADDRESS, /* 15 - Illegal I2C address in i2cStart */
RESPONSETYPE_FIRMWAREERROR, /* 16 - Generic firmware upload error (can mean lots of things) */
RESPONSETYPE_DUMPINPROGRESS, /* 17 - Can't do something, a dump is in progress */
RESPONSETYPE_INTERNALERROR, /* 18 - Something Bad Happened(tm) */
RESPONSETYPE_NOTIMPLEMENTED, /* 19 - Command or function not implemented */
RESPONSETYPE_PINFORMATERROR, /* 20 - Error in formatting of PIN (non hex character) */
RESPONSETYPE_PINEXISTS, /* 21 - PIN already exists in database */
RESPONSETYPE_PINNOTFOUND, /* 22 - PIN wasn't found (actionManageUsers) */
RESPONSETYPE_USERACTIVE, /* 23 - The record for this user is active (not deleted or free) */
RESPONSETYPE_USERINACTIVE, /* 24 - The record for this user is inactive (not in use) */
RESPONSETYPE_PARENTNOTFOUND, /* 25 - Users parent couldn't be found (used internally by dbmgr.c) */
RESPONSETYPE_NOCHAIN, /* 26 - No users in chain (used internally by dbmgr.c) */
RESPONSETYPE_CAUGHTINLOOP, /* 27 - Caught in a loop somewhere */
RESPONSETYPE_EVENTFILTERED, /* 28 - Event record was filtered (eventlog.c) */
RESPONSETYPE_PAYLOADTOOLARGE, /* 29 - Message payload too large (protocol.c) */
RESPONSETYPE_ENDOFDATA, /* 30 - No more data (used internally by eventlog.c) */
RESPONSETYPE_RMTAUTHREJECTED, /* 31 - Remote authorization rejected (lockmgr.c) */
RESPONSETYPE_NVRAMVERSIONERROR, /* 32 - NVRAM version doesn't match expected value */
RESPONSETYPE_NOHARDWARE, /* 33 - Operation requested for unsupported hardware */
RESPONSETYPE_SCHEDULERCONFLICT, /* 34 - Scheduler not in correct mode for this operation */
RESPONSETYPE_NVRAMWRITEERROR, /* 35 - NVRAM write compare error */
RESPONSETYPE_DECLINEDFILTERED, /* 36 - Declined record was filtered (declinedlog.c) */
RESPONSETYPE_NECONFIGPARM, /* 37 - Non-existent configuration parameter */
RESPONSETYPE_FLASHERASEERROR, /* 38 - Error erasing FLASH */
RESPONSETYPE_FLASHWRITEERROR, /* 39 - Error writing FLASH */
RESPONSETYPE_BADNVBACKUP, /* 40 - NVBackup length doesn't match sizeof (configParametersNV_t) */
RESPONSETYPE_EARLYACK, /* 41 - Sent prior to long commands if CONFIGITEM_EARLYACK set */
RESPONSETYPE_ALARMFILTERED, /* 42 - Alarm record was filtered (alarm.c) */
RESPONSETYPE_ACVFAILURE, /* 43 - Auxiliary controller version request failure */
RESPONSETYPE_USERCHECKSUMERROR, /* 44 - User checksum value error */
RESPONSETYPE_CHECKSUMERROR, /* 45 - Generic checksum error */
RESPONSETYPE_RTCSQWFAILURE, /* 46 - RTC isn't generating square wave */
RESPONSETYPE_PRIORITYSHUTDOWN, /* 47 - Session terminated early because lock has priority over communications */
RESPONSETYPE_NOTMODIFIABLE, /* 48 - Configuration parameter is not user modifiable */
RESPONSETYPE_CANTPRESERVE, /* 49 - Can't preserve configuration (config.c, not enough space) */
RESPONSETYPE_INPASSAGEMODE, /* 50 - Lock is in passage mode, can't do remote unlock */
RESPONSETYPE_LAST
#if 0
,
/*
* These should not be exposed to the user
*/
RESPONSETYPE_NOREPLY, /* 51 - Do not send a reply, subroutine is posting its own */
RESPONSETYPE_TAKEABREAK, /* 52 - Intermediate return result, when log searches taking too long */
RESPONSETYPE_DPACBLOCKS, /* 53 - PWM lock, battery powered, DPAC takes priority */
RESPONSETYPE_ACKNAKTIMEOUT, /* 54 - Added for console.c, not used in lock firmware */
RESPONSETYPE_UNKNOWNCPUSPEED /* 55 - Unknown CPU speed (utils.c, utilCalculateClockRate()) */
#endif
}
responseType_e;
#if 0
typedef enum
{
SCHEDULERTYPE_HARDON = 0, /* 0 - Radio is always on */
SCHEDULERTYPE_SIMPLE, /* 1 - Simple 'x' minutes off, 'y' seconds on scheduler */
SCHEDULERTYPE_DOM, /* 2 - Day of month scheduling */
SCHEDULERTYPE_DOW, /* 3 - Day of week scheduling */
SCHEDULERTYPE_COMMUSER, /* 4 - Only a comm user triggers power on */
SCHEDULERTYPE_HOD, /* 5 - Hour of day scheduling */
SCHEDULERTYPE_OFF, /* 6 - Nothing wakes up radio */
SCHEDULERTYPE_LAST
}
schedulerType_e;
#endif
typedef enum
{
TIMEZONEMODE_NORMAL = 0, /* 0 - Timezone is applied to user, no auto unlocking */
TIMEZONEMODE_EXCLUSION, /* 1 - User NOT permitted access if in this zone at this time */
TIMEZONEMODE_AUTOTIME, /* 2 - Auto unlock at the start of the TZ, lock at end */
TIMEZONEMODE_AUTOFPT, /* 3 - Unlock on first person through, lock at end */
TIMEZONEMODE_UAPM, /* 4 - Permits user activated passage mode when active */
TIMEZONEMODE_LAST
}
timeZoneMode_e;
#if 0
typedef enum
{
UNLOCKMODE_NORMAL = 0, /* 0 - Normal unlock (CONFIGITEM_UNLOCK_TIME duration) */
UNLOCKMODE_UNLOCK, /* 1 - Unlock, switching to passage mode */
UNLOCKMODE_LOCK, /* 2 - Lock, regardless of mode */
UNLOCKMODE_LAST
}
unlockMode_e;
#endif
/* XXX: enum vals don't all match vals in comments ??? */
typedef enum
{
UPSTREAMCOMMAND_RESERVED = 0, /* 0 - Not used */
UPSTREAMCOMMAND_DEBUGMSG, /* 1 - Debug message (zero terminated) */
UPSTREAMCOMMAND_QUERYVERSION, /* 2 - Version string (zero terminated) */
UPSTREAMCOMMAND_QUERYDATETIME, /* 3 - Current date/time */
UPSTREAMCOMMAND_QUERYSERIALNUMBER, /* 5 - Serial number (MAX_SERIALNUM_LENGTH bytes) */
UPSTREAMCOMMAND_DUMPEVENTLOG, /* 6 - Event log record */
UPSTREAMCOMMAND_DUMPNVRAM, /* 7 - NVRAM dump record */
UPSTREAMCOMMAND_RMTAUTHREQUEST, /* 8 - Remote authorization request */
UPSTREAMCOMMAND_RETRIEVEUSER, /* 9 - Retrieve user record */
UPSTREAMCOMMAND_QUERYCONFIG, /* 10 - Query configuration */
UPSTREAMCOMMAND_RMTEVENTLOGRECORD, /* 11 - Remote event log record */
UPSTREAMCOMMAND_DPAC, /* 12 - DPAC related message */
UPSTREAMCOMMAND_NOTIFY, /* 14 - Notify user message */
UPSTREAMCOMMAND_MFG, /* 15 - Manufacturing data */
UPSTREAMCOMMAND_EVENTLOGWARNING, /* 16 - Event log warning level message */
UPSTREAMCOMMAND_DUMPNVRAMRLE, /* 17 - Run Length Encoded (RLE) NVRAM dump record */
UPSTREAMCOMMAND_RMTDECLINEDRECORD, /* 18 - Remote declined log record */
UPSTREAMCOMMAND_DECLINEDWARNING, /* 19 - Declined log warning level message */
UPSTREAMCOMMAND_DUMPDECLINEDLOG, /* 20 - Declined log record dump */
UPSTREAMCOMMAND_RMTALARMRECORD, /* 21 - Remote alarm log record */
UPSTREAMCOMMAND_ALARMWARNING, /* 22 - Alarm log warning level message */
UPSTREAMCOMMAND_DUMPALARMLOG, /* 23 - Alarm log record dump */
UPSTREAMCOMMAND_CONNECTSCHEDULER, /* 24 - Connection because of scheduler, contains serial number */
UPSTREAMCOMMAND_CONNECTCOMMUSER, /* 25 - Connection because of comm user, contains serial number */
UPSTREAMCOMMAND_CONNECTALARM, /* 26 - Connection because of alarm event, contains serial number */
UPSTREAMCOMMAND_DUMPDEBUGLOG, /* 27 - Debug log dump record */
UPSTREAMCOMMAND_LAST
}
upstreamCommand_e;
/* XXX: enum vals don't all match vals in comments ??? */
typedef enum
{
UPSTREAMFIELD_NOTUSED = 0, /* 0 - Not used */
UPSTREAMFIELD_SERIALNUMBER, /* 1 - Contains unit serial number */
UPSTREAMFIELD_NAR, /* 2 - Contains 16 bit Next Available Record */
UPSTREAMFIELD_ENTRYDEVICE, /* 3 - Contains a ppmSource_e */
UPSTREAMFIELD_PPMIFIELDTYPE, /* 4 - Contains a type of _PIN (auxFieldType_e) */
UPSTREAMFIELD_PIN, /* 5 - Contains a PIN, Prox, mag key */
UPSTREAMFIELD_SEQUENCENUMBER, /* 6 - Contains 16 bit sequence number */
UPSTREAMFIELD_RESPONSEWINDOW, /* 7 - Contains 8 bit response window (number of seconds) */
UPSTREAMFIELD_USERNUMBER, /* 8 - Contains 16 bit user number */
UPSTREAMFIELD_VERSION, /* 9 - Contains version string */
UPSTREAMFIELD_EVENTLOGRECORD, /* 10 - Contains eventLog_e event log record */
UPSTREAMFIELD_DATETIME, /* 11 - Contains 8 byte date/time data */
UPSTREAMFIELD_EVENTLOGRECORDCOUNT, /* 17 - Contains number of event log records */
UPSTREAMFIELD_DECLINEDRECORDCOUNT, /* 20 - Contains number of declined log records */
UPSTREAMFIELD_DECLINEDRECORD, /* 21 - Contains declinedLog_t declined log record */
UPSTREAMFIELD_USERTYPE, /* 23 - Contains the user type (master, emergency, normal, etc) */
UPSTREAMFIELD_ACCESSALWAYS, /* 24 - Contains the access always mode (true, false) */
UPSTREAMFIELD_CACHED, /* 25 - Contains the cached flag (true, false) */
UPSTREAMFIELD_PRIMARYFIELDTYPE, /* 26 - Contains the primary field type (pin, prox, mag) */
UPSTREAMFIELD_AUXFIELDTYPE, /* 27 - Contains the aux field type (pin, prox, mag) */
UPSTREAMFIELD_ACCESSMODE, /* 28 - Contains the access mode (aux only, aux + pin, aux or pin, etc) */
UPSTREAMFIELD_EXPIREON, /* 29 - Contains the date the user expires on (00/00/00 if not set) */
UPSTREAMFIELD_USECOUNT, /* 30 - Contains the use count (if user type is ONE_TIME) */
UPSTREAMFIELD_TIMEZONE, /* 31 - Contains the timezone bit map */
UPSTREAMFIELD_EXCEPTIONGROUP, /* 32 - Contains the exception group */
UPSTREAMFIELD_PRIMARYPIN, /* 33 - Contains the primary PPMI (ASCII, 0 terminated) */
UPSTREAMFIELD_AUXPIN, /* 34 - Contains the aux PPMI (ASCII, 0 terminated) */
UPSTREAMFIELD_ALARMRECORDCOUNT, /* 35 - Contains number of alarm log records */
UPSTREAMFIELD_ALARMRECORD, /* 36 - Contains alarmLog_t alarm log record */
UPSTREAMFIELD_AUXCTLRVERSION, /* 37 - Contains the version number of the auxiliary controller */
UPSTREAMFIELD_LAST
}
upstreamField_e;
typedef enum
{
USERTYPE_NONE = 0, /* 0 - No user */
USERTYPE_MASTER, /* 1 - Master user (clears panic, relock, lockout and auto open) */
USERTYPE_EMERGENCY, /* 2 - Opens door regardless of state */
USERTYPE_SUPERVISOR, /* 3 - Like emergency user, except won't unlock when in panic mode */
USERTYPE_USER, /* 4 - Generic user */
USERTYPE_EXTENDED, /* 5 - Same as _USER, but strike can be kept open longer */
USERTYPE_PASSAGE, /* 6 - Toggles strike between passage and non-passage modes */
USERTYPE_ONETIME, /* 7 - User may be used one time */
USERTYPE_PANIC, /* 8 - Locks down locks, no user except master valid */
USERTYPE_LOCKOUT, /* 9 - Locks out regular, extended, passage, one time, and notify users */
USERTYPE_RELOCK, /* 10 - Relock cancels passage mode, but can't unlock */
USERTYPE_NOTIFY, /* 11 - Same as _USER, only sends unsolicited message to server */
USERTYPE_COMM, /* 12 - Kicks a communications sessions off if not running _HARDON scheduler */
USERTYPE_SUSPENDED, /* 13 - User is suspended */
USERTYPE_LAST
}
userType_e;
#define ASSA_R3_PORT_RANGE "2571,8023" /* Neither are IANA registered */
/*
* Wireshark ID of the R3 protocol
*/
static gint proto_r3 = -1;
/*
* Packet variables
*/
static gint hf_r3_tildex3ds = -1; /* Got ~~~ds */
static gint hf_r3_header = -1; /* Packet header */
static gint hf_r3_payload = -1; /* Packet payload */
static gint hf_r3_tail = -1; /* Packet tail */
static gint hf_r3_sigil = -1; /* Packet sigil */
static gint hf_r3_address = -1; /* Packet address */
static gint hf_r3_packetnumber = -1; /* Packet number */
static gint hf_r3_packetlength = -1; /* Packet length */
static gint hf_r3_encryption = -1; /* Packet encryption scheme */
static gint hf_r3_crc = -1; /* Packet CRC */
static gint hf_r3_crc_bad = -1; /* Packet CRC bad (for filtering) */
static gint hf_r3_xor = -1; /* Packet Xor */
static gint hf_r3_xor_bad = -1; /* Packet Xor bad (for filtering) */
static gint hf_r3_commandlength = -1; /* Command length */
static gint hf_r3_command = -1; /* Command (cmdCommand_e) */
static gint hf_r3_commanddata = -1; /* Command data (not always present) */
static gint hf_r3_commandmfglength = -1; /* Mfg Command length */
static gint hf_r3_commandmfg = -1; /* Mfg Command (cmdCommand_e) */
/*static gint hf_r3_commandmfgdata = -1;*/ /* Mfg Command data (not always present) */
static gint hf_r3_responselength = -1; /* Response length */
static gint hf_r3_responsecommand = -1; /* Response command */
static gint hf_r3_responsetype = -1; /* Response type (responseType_e) */
static gint hf_r3_responsetocommand = -1; /* Response to command (cmdCommand_e) */
/*static gint hf_r3_responsedata = -1;*/ /* Response data (not always present) */
static gint hf_r3_upstreamcommand = -1;
static gint hf_r3_upstreamfield = -1; /* Upstream field (length + type + data) */
static gint hf_r3_upstreamfieldlength = -1; /* Upstream field length */
static gint hf_r3_upstreamfieldtype = -1; /* Upstream field type (upstreamField_e) */
/*static gint hf_r3_upstreamfielddatalen = -1;*/ /* Upstream field data length */
static gint hf_r3_upstreamfielderror = -1; /* Upstream field is unknown type */
static gint hf_r3_upstreamfieldarray[UPSTREAMFIELD_LAST];
static gint hf_r3_configitems = -1;
static gint hf_r3_configitem = -1;
/*static gint hf_r3_configfield = -1;*/
static gint hf_r3_configitemlength = -1;
static gint hf_r3_configitemtype = -1;
static gint hf_r3_configitemdata = -1;
static gint hf_r3_configitemdata_bool = -1;
static gint hf_r3_configitemdata_8 = -1;
static gint hf_r3_configitemdata_16 = -1;
static gint hf_r3_configitemdata_32 = -1;
static gint hf_r3_configitemdata_string = -1;
static gint hf_r3_timezonearray0 = -1;
static gint hf_r3_timezonearray1 = -1;
static gint hf_r3_timezonearray2 = -1;
static gint hf_r3_timezonearray3 = -1;
static gint hf_r3_timezonearray4 = -1;
static gint hf_r3_timezonearray5 = -1;
static gint hf_r3_timezonearray6 = -1;
static gint hf_r3_timezonearray7 = -1;
static gint hf_r3_timezonearray8 = -1;
static gint hf_r3_timezonearray9 = -1;
static gint hf_r3_timezonearray10 = -1;
static gint hf_r3_timezonearray11 = -1;
static gint hf_r3_timezonearray12 = -1;
static gint hf_r3_timezonearray13 = -1;
static gint hf_r3_timezonearray14 = -1;
static gint hf_r3_timezonearray15 = -1;
static gint hf_r3_timezonearray16 = -1;
static gint hf_r3_timezonearray17 = -1;
static gint hf_r3_timezonearray18 = -1;
static gint hf_r3_timezonearray19 = -1;
static gint hf_r3_timezonearray20 = -1;
static gint hf_r3_timezonearray21 = -1;
static gint hf_r3_timezonearray22 = -1;
static gint hf_r3_timezonearray23 = -1;
static gint hf_r3_timezonearray24 = -1;
static gint hf_r3_timezonearray25 = -1;
static gint hf_r3_timezonearray26 = -1;
static gint hf_r3_timezonearray27 = -1;
static gint hf_r3_timezonearray28 = -1;
static gint hf_r3_timezonearray29 = -1;
static gint hf_r3_timezonearray30 = -1;
static gint hf_r3_timezonearray31 = -1;
static gint hf_r3_expireon_year = -1;
static gint hf_r3_expireon_month = -1;
static gint hf_r3_expireon_day = -1;
static gint hf_r3_datetime_year = -1;
static gint hf_r3_datetime_month = -1;
static gint hf_r3_datetime_day = -1;
static gint hf_r3_datetime_dow = -1;
static gint hf_r3_datetime_hours = -1;
static gint hf_r3_datetime_minutes = -1;
static gint hf_r3_datetime_seconds = -1;
static gint hf_r3_datetime_dst = -1;
static gint hf_r3_eventlog_recordnumber = -1;
static gint hf_r3_eventlog_year = -1;
static gint hf_r3_eventlog_month = -1;
static gint hf_r3_eventlog_day = -1;
static gint hf_r3_eventlog_hour = -1;
static gint hf_r3_eventlog_minute = -1;
static gint hf_r3_eventlog_second = -1;
static gint hf_r3_eventlog_usernumber = -1;
static gint hf_r3_eventlog_event = -1;
static gint hf_r3_declinedlog_recordnumber = -1;
static gint hf_r3_declinedlog_year = -1;
static gint hf_r3_declinedlog_month = -1;
static gint hf_r3_declinedlog_day = -1;
static gint hf_r3_declinedlog_hour = -1;
static gint hf_r3_declinedlog_minute = -1;
static gint hf_r3_declinedlog_second = -1;
static gint hf_r3_declinedlog_usernumber = -1;
static gint hf_r3_declinedlog_cred1type = -1;
static gint hf_r3_declinedlog_cred2type = -1;
static gint hf_r3_declinedlog_cred1 = -1;
static gint hf_r3_declinedlog_cred2 = -1;
static gint hf_r3_alarmlog_recordnumber = -1;
static gint hf_r3_alarmlog_year = -1;
static gint hf_r3_alarmlog_month = -1;
static gint hf_r3_alarmlog_day = -1;
static gint hf_r3_alarmlog_hour = -1;
static gint hf_r3_alarmlog_minute = -1;
static gint hf_r3_alarmlog_second = -1;
static gint hf_r3_alarmlog_id = -1;
static gint hf_r3_alarmlog_usernumber = -1;
static gint hf_r3_debugmsg = -1;
static gint hf_r3_setdate_year = -1;
static gint hf_r3_setdate_month = -1;
static gint hf_r3_setdate_day = -1;
static gint hf_r3_setdate_dow = -1;
static gint hf_r3_setdate_hours = -1;
static gint hf_r3_setdate_minutes = -1;
static gint hf_r3_setdate_seconds = -1;
static gint hf_r3_deleteusers = -1;
static gint hf_r3_defineexception_number = -1;
static gint hf_r3_defineexception_startdate_month = -1;
static gint hf_r3_defineexception_startdate_day = -1;
static gint hf_r3_defineexception_startdate_hours = -1;
static gint hf_r3_defineexception_startdate_minutes = -1;
static gint hf_r3_defineexception_enddate_month = -1;
static gint hf_r3_defineexception_enddate_day = -1;
static gint hf_r3_defineexception_enddate_hours = -1;
static gint hf_r3_defineexception_enddate_minutes = -1;
static gint hf_r3_defineexceptiongroup_number = -1;
static gint hf_r3_defineexceptiongroup_bits = -1;
static gint hf_r3_definecalendar_number = -1;
static gint hf_r3_definecalendar_bits = -1;
static gint hf_r3_definetimezone_number = -1;
static gint hf_r3_definetimezone_starttime_hours = -1;
static gint hf_r3_definetimezone_starttime_minutes = -1;
static gint hf_r3_definetimezone_endtime_hours = -1;
static gint hf_r3_definetimezone_endtime_minutes = -1;
static gint hf_r3_definetimezone_daymap = -1;
static gint hf_r3_definetimezone_daymap0 = -1;
static gint hf_r3_definetimezone_daymap1 = -1;
static gint hf_r3_definetimezone_daymap2 = -1;
static gint hf_r3_definetimezone_daymap3 = -1;
static gint hf_r3_definetimezone_daymap4 = -1;
static gint hf_r3_definetimezone_daymap5 = -1;
static gint hf_r3_definetimezone_daymap6 = -1;
static gint hf_r3_definetimezone_exceptiongroup = -1;
static gint hf_r3_definetimezone_mode = -1;
static gint hf_r3_definetimezone_calendar = -1;
static gint hf_r3_rmtauthretry_sequence = -1;
static gint hf_r3_rmtauthretry_retry = -1;
static gint hf_r3_eventlogdump_starttime_year = -1;
static gint hf_r3_eventlogdump_starttime_month = -1;
static gint hf_r3_eventlogdump_starttime_day = -1;
static gint hf_r3_eventlogdump_starttime_hours = -1;
static gint hf_r3_eventlogdump_starttime_minutes = -1;
static gint hf_r3_eventlogdump_endtime_year = -1;
static gint hf_r3_eventlogdump_endtime_month = -1;
static gint hf_r3_eventlogdump_endtime_day = -1;
static gint hf_r3_eventlogdump_endtime_hours = -1;
static gint hf_r3_eventlogdump_endtime_minutes = -1;
static gint hf_r3_eventlogdump_user = -1;
static gint hf_r3_declinedlogdump_starttime_year = -1;
static gint hf_r3_declinedlogdump_starttime_month = -1;
static gint hf_r3_declinedlogdump_starttime_day = -1;
static gint hf_r3_declinedlogdump_starttime_hours = -1;
static gint hf_r3_declinedlogdump_starttime_minutes = -1;
static gint hf_r3_declinedlogdump_endtime_year = -1;
static gint hf_r3_declinedlogdump_endtime_month = -1;
static gint hf_r3_declinedlogdump_endtime_day = -1;
static gint hf_r3_declinedlogdump_endtime_hours = -1;
static gint hf_r3_declinedlogdump_endtime_minutes = -1;
static gint hf_r3_alarmlogdump_starttime_year = -1;
static gint hf_r3_alarmlogdump_starttime_month = -1;
static gint hf_r3_alarmlogdump_starttime_day = -1;
static gint hf_r3_alarmlogdump_starttime_hours = -1;
static gint hf_r3_alarmlogdump_starttime_minutes = -1;
static gint hf_r3_alarmlogdump_endtime_year = -1;
static gint hf_r3_alarmlogdump_endtime_month = -1;
static gint hf_r3_alarmlogdump_endtime_day = -1;
static gint hf_r3_alarmlogdump_endtime_hours = -1;
static gint hf_r3_alarmlogdump_endtime_minutes = -1;
static gint hf_r3_nvramclearoptions = -1;
static gint hf_r3_nvramclearoptions0 = -1;
static gint hf_r3_nvramclearoptions1 = -1;
static gint hf_r3_nvramclearoptions2 = -1;
static gint hf_r3_nvramclearoptions3 = -1;
static gint hf_r3_nvramclearoptions4 = -1;
static gint hf_r3_nvramclearoptions5 = -1;
static gint hf_r3_nvramclearoptions6 = -1;
static gint hf_r3_nvramclearoptions7 = -1;
static gint hf_r3_nvramclearoptions8 = -1;
static gint hf_r3_nvramclearoptions9 = -1;
static gint hf_r3_nvramclearoptions10 = -1;
static gint hf_r3_nvramclearoptions11 = -1;
static gint hf_r3_nvramclearoptions12 = -1;
static gint hf_r3_nvramclearoptions13 = -1;
static gint hf_r3_nvramclearoptions14 = -1;
static gint hf_r3_nvramclearoptions15 = -1;
static gint hf_r3_writeeventlog_user = -1;
static gint hf_r3_writeeventlog_event = -1;
static gint hf_r3_powertableselection = -1;
static gint hf_r3_filter_type = -1;
static gint hf_r3_filter_list = -1;
static gint hf_r3_alarm_length = -1;
static gint hf_r3_alarm_id = -1;
static gint hf_r3_alarm_state = -1;
static gint hf_r3_dpac_action = -1;
static gint hf_r3_dpac_waittime = -1;
static gint hf_r3_dpac_command = -1;
static gint hf_r3_dpacreply_stuff = -1;
static gint hf_r3_dpacreply_length = -1;
static gint hf_r3_dpacreply_reply = -1;
static gint hf_r3_mfgfield_length = -1;
static gint hf_r3_mfgfield = -1;
/*static gint hf_r3_mfgfield_data = -1;*/
static gint hf_r3_mfgsetserialnumber = -1;
static gint hf_r3_mfgsetcryptkey = -1;
static gint hf_r3_mfgdumpnvram = -1;
static gint hf_r3_mfgremoteunlock = -1;
static gint hf_r3_mfgtestpreserve = -1;
static gint hf_r3_adc [8];
static gint hf_r3_hardwareid_board = -1;
static gint hf_r3_hardwareid_cpuid = -1;
static gint hf_r3_hardwareid_cpurev = -1;
static gint hf_r3_testkeypad = -1;
static gint hf_r3_testmagcard = -1;
static gint hf_r3_testproxcard = -1;
static gint hf_r3_nvramdump_record = -1;
static gint hf_r3_nvramdump_length = -1;
static gint hf_r3_nvramdump_data = -1;
static gint hf_r3_nvramdumprle_record = -1;
static gint hf_r3_nvramdumprle_length = -1;
static gint hf_r3_nvramdumprle_data = -1;
static gint hf_r3_iopins_lat = -1;
static gint hf_r3_iopins_port = -1;
static gint hf_r3_iopins_tris = -1;
static gint hf_r3_mortisepins_s1 = -1;
static gint hf_r3_mortisepins_s2 = -1;
static gint hf_r3_mortisepins_s3 = -1;
static gint hf_r3_mortisepins_s4 = -1;
static gint hf_r3_checksumresults = -1;
static gint hf_r3_checksumresults_field = -1;
static gint hf_r3_checksumresults_length = -1;
static gint hf_r3_checksumresults_state = -1;
static gint hf_r3_forceoptions_length = -1;
static gint hf_r3_forceoptions_item = -1;
static gint hf_r3_forceoptions_state_8= -1;
static gint hf_r3_forceoptions_state_16 = -1;
static gint hf_r3_forceoptions_state_24 = -1;
static gint hf_r3_forceoptions_state_32 = -1;
static gint hf_r3_peekpoke_operation = -1;
static gint hf_r3_peekpoke_address = -1;
static gint hf_r3_peekpoke_length = -1;
static gint hf_r3_peekpoke_poke8 = -1;
static gint hf_r3_peekpoke_poke16 = -1;
static gint hf_r3_peekpoke_poke24 = -1;
static gint hf_r3_peekpoke_poke32 = -1;
static gint hf_r3_peekpoke_pokestring = -1;
static gint hf_r3_firmwaredownload_length = -1;
static gint hf_r3_firmwaredownload_record = -1;
static gint hf_r3_firmwaredownload_action = -1;
static gint hf_r3_firmwaredownload_timeout = -1;
static gint hf_r3_firmwaredownload_nvram = -1;
static gint hf_r3_firmwaredownload_address = -1;
static gint hf_r3_firmwaredownload_bytes = -1;
static gint hf_r3_firmwaredownload_data = -1;
static gint hf_r3_firmwaredownload_crc = -1;
static gint hf_r3_firmwaredownload_crc_bad = -1;
static gint hf_r3_nvramchecksumvalue = -1;
static gint hf_r3_nvramchecksumvalue_fixup = -1;
static gint hf_r3_capabilities = -1;
static gint hf_r3_capabilities_length = -1;
static gint hf_r3_capabilities_type = -1;
static gint hf_r3_capabilities_value = -1;
static gint hf_r3_lockstate = -1;
static gint hf_r3_lockstate_passage = -1;
static gint hf_r3_lockstate_panic = -1;
static gint hf_r3_lockstate_lockout = -1;
static gint hf_r3_lockstate_relock = -1;
static gint hf_r3_lockstate_autoopen = -1;
static gint hf_r3_lockstate_nextauto = -1;
static gint hf_r3_lockstate_lockstate = -1;
static gint hf_r3_lockstate_wantstate = -1;
static gint hf_r3_lockstate_remote = -1;
static gint hf_r3_lockstate_update = -1;
static gint hf_r3_lockstate_exceptionspresent = -1;
static gint hf_r3_lockstate_exceptionsactive = -1;
static gint hf_r3_lockstate_timezonespresent = -1;
static gint hf_r3_lockstate_timezonesactive = -1;
static gint hf_r3_lockstate_autounlockspresent = -1;
static gint hf_r3_lockstate_autounlocksactive = -1;
static gint hf_r3_lockstate_uapmspresent = -1;
static gint hf_r3_lockstate_uapmsactive = -1;
static gint hf_r3_lockstate_uapmrelockspresent = -1;
static gint hf_r3_lockstate_uapmreslocksactive = -1;
static gint hf_r3_lockstate_nvramprotect = -1;
static gint hf_r3_lockstate_nvramchecksum = -1;
/*static gint hf_r3_mortisestatelog = -1;*/
static gint hf_r3_mortisestatelog_pointer = -1;
static gint hf_r3_mortisestatelog_mortisetype = -1;
static gint hf_r3_mortisestatelog_waiting = -1;
static gint hf_r3_mortisestatelog_state = -1;
static gint hf_r3_mortisestatelog_last = -1;
static gint hf_r3_mortisestatelog_event = -1;
static gint hf_r3_timerchain_newtick = -1;
static gint hf_r3_timerchain_currentboundary = -1;
static gint hf_r3_timerchain_tasktag = -1;
static gint hf_r3_timerchain_address = -1;
static gint hf_r3_timerchain_reload = -1;
static gint hf_r3_timerchain_boundary = -1;
static gint hf_r3_timerchain_count = -1;
static gint hf_r3_timerchain_flags = -1;
static gint hf_r3_taskflags_taskid = -1;
static gint hf_r3_taskflags_flags = -1;
static gint hf_r3_checkpointlog_entryptr = -1;
static gint hf_r3_checkpointlog_rcon = -1;
static gint hf_r3_checkpointlog_checkpoint = -1;
static gint hf_r3_cpuregisters_intcon = -1;
static gint hf_r3_cpuregisters_intcon2 = -1;
static gint hf_r3_cpuregisters_intcon3 = -1;
static gint hf_r3_cpuregisters_pir1 = -1;
static gint hf_r3_cpuregisters_pir2 = -1;
static gint hf_r3_cpuregisters_pir3 = -1;
static gint hf_r3_cpuregisters_pie1 = -1;
static gint hf_r3_cpuregisters_pie2 = -1;
static gint hf_r3_cpuregisters_pie3 = -1;
static gint hf_r3_cpuregisters_ipr1 = -1;
static gint hf_r3_cpuregisters_ipr2 = -1;
static gint hf_r3_cpuregisters_ipr3 = -1;
static gint hf_r3_cpuregisters_rcon = -1;
static gint hf_r3_cpuregisters_osccon = -1;
static gint hf_r3_cpuregisters_rcsta = -1;
static gint hf_r3_cpuregisters_txsta = -1;
static gint hf_r3_cpuregisters_rcsta2 = -1;
static gint hf_r3_cpuregisters_txsta2 = -1;
static gint hf_r3_cpuregisters_wdtcon = -1;
static gint hf_r3_cpuregisters_intcon_rbif = -1;
static gint hf_r3_cpuregisters_intcon_int0if = -1;
static gint hf_r3_cpuregisters_intcon_tmr0if = -1;
static gint hf_r3_cpuregisters_intcon_rbie = -1;
static gint hf_r3_cpuregisters_intcon_int0ie = -1;
static gint hf_r3_cpuregisters_intcon_tmr0ie = -1;
static gint hf_r3_cpuregisters_intcon_giel = -1;
static gint hf_r3_cpuregisters_intcon_gieh = -1;
static gint hf_r3_cpuregisters_intcon2_rbip = -1;
static gint hf_r3_cpuregisters_intcon2_int3ip = -1;
static gint hf_r3_cpuregisters_intcon2_tmr0ip = -1;
static gint hf_r3_cpuregisters_intcon2_intedg3 = -1;
static gint hf_r3_cpuregisters_intcon2_intedg2 = -1;
static gint hf_r3_cpuregisters_intcon2_intedg1 = -1;
static gint hf_r3_cpuregisters_intcon2_intedg0 = -1;
static gint hf_r3_cpuregisters_intcon2_rbpu = -1;
static gint hf_r3_cpuregisters_intcon3_int1if = -1;
static gint hf_r3_cpuregisters_intcon3_int2if = -1;
static gint hf_r3_cpuregisters_intcon3_int3if = -1;
static gint hf_r3_cpuregisters_intcon3_int1ie = -1;
static gint hf_r3_cpuregisters_intcon3_int2ie = -1;
static gint hf_r3_cpuregisters_intcon3_int3ie = -1;
static gint hf_r3_cpuregisters_intcon3_int1ip = -1;
static gint hf_r3_cpuregisters_intcon3_int2ip = -1;
static gint hf_r3_cpuregisters_pir1_tmr1if = -1;
static gint hf_r3_cpuregisters_pir1_tmr2if = -1;
static gint hf_r3_cpuregisters_pir1_ccp1if = -1;
static gint hf_r3_cpuregisters_pir1_ssp1if = -1;
static gint hf_r3_cpuregisters_pir1_tx1if = -1;
static gint hf_r3_cpuregisters_pir1_rc1if = -1;
static gint hf_r3_cpuregisters_pir1_adif = -1;
static gint hf_r3_cpuregisters_pir1_pspif = -1;
static gint hf_r3_cpuregisters_pir2_ccp2if = -1;
static gint hf_r3_cpuregisters_pir2_tmr3if = -1;
static gint hf_r3_cpuregisters_pir2_hlvdif = -1;
static gint hf_r3_cpuregisters_pir2_bcl1if = -1;
static gint hf_r3_cpuregisters_pir2_eeif = -1;
static gint hf_r3_cpuregisters_pir2_unused5 = -1;
static gint hf_r3_cpuregisters_pir2_cmif = -1;
static gint hf_r3_cpuregisters_pir2_oscfif = -1;
static gint hf_r3_cpuregisters_pir3_ccp3if = -1;
static gint hf_r3_cpuregisters_pir3_ccp4if = -1;
static gint hf_r3_cpuregisters_pir3_ccp5if = -1;
static gint hf_r3_cpuregisters_pir3_tmr4if = -1;
static gint hf_r3_cpuregisters_pir3_tx2if = -1;
static gint hf_r3_cpuregisters_pir3_rc2if = -1;
static gint hf_r3_cpuregisters_pir3_bcl2if = -1;
static gint hf_r3_cpuregisters_pir3_ssp2if = -1;
static gint hf_r3_cpuregisters_pie1_tmr1ie = -1;
static gint hf_r3_cpuregisters_pie1_tmr2ie = -1;
static gint hf_r3_cpuregisters_pie1_ccp1ie = -1;
static gint hf_r3_cpuregisters_pie1_ssp1ie = -1;
static gint hf_r3_cpuregisters_pie1_tx1ie = -1;
static gint hf_r3_cpuregisters_pie1_rc1ie = -1;
static gint hf_r3_cpuregisters_pie1_adie = -1;
static gint hf_r3_cpuregisters_pie1_pspie = -1;
static gint hf_r3_cpuregisters_pie2_oscfie = -1;
static gint hf_r3_cpuregisters_pie2_cmie = -1;
static gint hf_r3_cpuregisters_pie2_unused2 = -1;
static gint hf_r3_cpuregisters_pie2_eeie = -1;
static gint hf_r3_cpuregisters_pie2_bcl1ie = -1;
static gint hf_r3_cpuregisters_pie2_hlvdie = -1;
static gint hf_r3_cpuregisters_pie2_tmr3ie = -1;
static gint hf_r3_cpuregisters_pie2_ccp2ie = -1;
static gint hf_r3_cpuregisters_pie3_ccp3ie = -1;
static gint hf_r3_cpuregisters_pie3_ccp4ie = -1;
static gint hf_r3_cpuregisters_pie3_ccp5ie = -1;
static gint hf_r3_cpuregisters_pie3_tmr4ie = -1;
static gint hf_r3_cpuregisters_pie3_tx2ie = -1;
static gint hf_r3_cpuregisters_pie3_rc2ie = -1;
static gint hf_r3_cpuregisters_pie3_bcl2ie = -1;
static gint hf_r3_cpuregisters_pie3_ssp2ie = -1;
static gint hf_r3_cpuregisters_ipr1_tmr1ip = -1;
static gint hf_r3_cpuregisters_ipr1_tmr2ip = -1;
static gint hf_r3_cpuregisters_ipr1_ccp1ip = -1;
static gint hf_r3_cpuregisters_ipr1_ssp1ip = -1;
static gint hf_r3_cpuregisters_ipr1_tx1ip = -1;
static gint hf_r3_cpuregisters_ipr1_rc1ip = -1;
static gint hf_r3_cpuregisters_ipr1_adip = -1;
static gint hf_r3_cpuregisters_ipr1_pspip = -1;
static gint hf_r3_cpuregisters_ipr2_ccp2ip = -1;
static gint hf_r3_cpuregisters_ipr2_tmr3ip = -1;
static gint hf_r3_cpuregisters_ipr2_hlvdip = -1;
static gint hf_r3_cpuregisters_ipr2_bcl1ip = -1;
static gint hf_r3_cpuregisters_ipr2_eeip = -1;
static gint hf_r3_cpuregisters_ipr2_unused5 = -1;
static gint hf_r3_cpuregisters_ipr2_cmip = -1;
static gint hf_r3_cpuregisters_ipr2_oscfip = -1;
static gint hf_r3_cpuregisters_ipr3_ccp2ip = -1;
static gint hf_r3_cpuregisters_ipr3_ccp4ip = -1;
static gint hf_r3_cpuregisters_ipr3_ccp5ip = -1;
static gint hf_r3_cpuregisters_ipr3_tmr4ip = -1;
static gint hf_r3_cpuregisters_ipr3_tx2ip = -1;
static gint hf_r3_cpuregisters_ipr3_rc2ip = -1;
static gint hf_r3_cpuregisters_ipr3_bcl2ip = -1;
static gint hf_r3_cpuregisters_ipr3_ssp2ip = -1;
static gint hf_r3_cpuregisters_rcon_bor = -1;
static gint hf_r3_cpuregisters_rcon_por = -1;
static gint hf_r3_cpuregisters_rcon_pd = -1;
static gint hf_r3_cpuregisters_rcon_to = -1;
static gint hf_r3_cpuregisters_rcon_unused4 = -1;
static gint hf_r3_cpuregisters_rcon_ri = -1;
static gint hf_r3_cpuregisters_rcon_sboren = -1;
static gint hf_r3_cpuregisters_rcon_ipen = -1;
static gint hf_r3_cpuregisters_osccon_scs0 = -1;
static gint hf_r3_cpuregisters_osccon_scs1 = -1;
static gint hf_r3_cpuregisters_osccon_iofs = -1;
static gint hf_r3_cpuregisters_osccon_osts = -1;
static gint hf_r3_cpuregisters_osccon_ircf0 = -1;
static gint hf_r3_cpuregisters_osccon_ircf1 = -1;
static gint hf_r3_cpuregisters_osccon_ircf2 = -1;
static gint hf_r3_cpuregisters_osccon_idlen = -1;
static gint hf_r3_cpuregisters_rcsta_rx9d = -1;
static gint hf_r3_cpuregisters_rcsta_oerr = -1;
static gint hf_r3_cpuregisters_rcsta_ferr = -1;
static gint hf_r3_cpuregisters_rcsta_adden = -1;
static gint hf_r3_cpuregisters_rcsta_cren = -1;
static gint hf_r3_cpuregisters_rcsta_sren = -1;
static gint hf_r3_cpuregisters_rcsta_rx9 = -1;
static gint hf_r3_cpuregisters_rcsta_spen = -1;
static gint hf_r3_cpuregisters_txsta_tx9d = -1;
static gint hf_r3_cpuregisters_txsta_trmt = -1;
static gint hf_r3_cpuregisters_txsta_brgh = -1;
static gint hf_r3_cpuregisters_txsta_sendb = -1;
static gint hf_r3_cpuregisters_txsta_sync = -1;
static gint hf_r3_cpuregisters_txsta_txen = -1;
static gint hf_r3_cpuregisters_txsta_tx9 = -1;
static gint hf_r3_cpuregisters_txsta_csrc = -1;
static gint hf_r3_cpuregisters_rcsta2_rx9d = -1;
static gint hf_r3_cpuregisters_rcsta2_oerr = -1;
static gint hf_r3_cpuregisters_rcsta2_ferr = -1;
static gint hf_r3_cpuregisters_rcsta2_adden = -1;
static gint hf_r3_cpuregisters_rcsta2_cren = -1;
static gint hf_r3_cpuregisters_rcsta2_sren = -1;
static gint hf_r3_cpuregisters_rcsta2_rx9 = -1;
static gint hf_r3_cpuregisters_rcsta2_spen = -1;
static gint hf_r3_cpuregisters_txsta2_tx9d = -1;
static gint hf_r3_cpuregisters_txsta2_trmt = -1;
static gint hf_r3_cpuregisters_txsta2_brgh = -1;
static gint hf_r3_cpuregisters_txsta2_sendb = -1;
static gint hf_r3_cpuregisters_txsta2_sync = -1;
static gint hf_r3_cpuregisters_txsta2_txen = -1;
static gint hf_r3_cpuregisters_txsta2_tx9 = -1;
static gint hf_r3_cpuregisters_txsta2_csrc = -1;
static gint hf_r3_cpuregisters_wdtcon_swdten = -1;
static gint hf_r3_cpuregisters_wdtcon_unused1 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused2 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused3 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused4 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused5 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused6 = -1;
static gint hf_r3_cpuregisters_wdtcon_unused7 = -1;
static gint hf_r3_dumpm41t81_reg00 = -1;
static gint hf_r3_dumpm41t81_reg01 = -1;
static gint hf_r3_dumpm41t81_reg02 = -1;
static gint hf_r3_dumpm41t81_reg03 = -1;
static gint hf_r3_dumpm41t81_reg04 = -1;
static gint hf_r3_dumpm41t81_reg05 = -1;
static gint hf_r3_dumpm41t81_reg06 = -1;
static gint hf_r3_dumpm41t81_reg07 = -1;
static gint hf_r3_dumpm41t81_reg08 = -1;
static gint hf_r3_dumpm41t81_reg09 = -1;
static gint hf_r3_dumpm41t81_reg0a = -1;
static gint hf_r3_dumpm41t81_reg0b = -1;
static gint hf_r3_dumpm41t81_reg0c = -1;
static gint hf_r3_dumpm41t81_reg0d = -1;
static gint hf_r3_dumpm41t81_reg0e = -1;
static gint hf_r3_dumpm41t81_reg0f = -1;
static gint hf_r3_dumpm41t81_reg10 = -1;
static gint hf_r3_dumpm41t81_reg11 = -1;
static gint hf_r3_dumpm41t81_reg12 = -1;
static gint hf_r3_dumpm41t81_reg13 = -1;
static gint hf_r3_dumpm41t81_reg00_sec1 = -1;
static gint hf_r3_dumpm41t81_reg00_sec01 = -1;
static gint hf_r3_dumpm41t81_reg01_st = -1;
static gint hf_r3_dumpm41t81_reg01_10sec = -1;
static gint hf_r3_dumpm41t81_reg01_1sec = -1;
static gint hf_r3_dumpm41t81_reg02_notused = -1;
static gint hf_r3_dumpm41t81_reg02_10min = -1;
static gint hf_r3_dumpm41t81_reg02_1min = -1;
static gint hf_r3_dumpm41t81_reg03_cbe = -1;
static gint hf_r3_dumpm41t81_reg03_cb = -1;
static gint hf_r3_dumpm41t81_reg03_10hour = -1;
static gint hf_r3_dumpm41t81_reg03_1hour = -1;
static gint hf_r3_dumpm41t81_reg04_notused = -1;
static gint hf_r3_dumpm41t81_reg04_dow = -1;
static gint hf_r3_dumpm41t81_reg05_notused = -1;
static gint hf_r3_dumpm41t81_reg05_10day = -1;
static gint hf_r3_dumpm41t81_reg05_1day = -1;
static gint hf_r3_dumpm41t81_reg06_notused = -1;
static gint hf_r3_dumpm41t81_reg06_10month = -1;
static gint hf_r3_dumpm41t81_reg06_1month = -1;
static gint hf_r3_dumpm41t81_reg07_10year = -1;
static gint hf_r3_dumpm41t81_reg07_1year = -1;
static gint hf_r3_dumpm41t81_reg08_out = -1;
static gint hf_r3_dumpm41t81_reg08_ft = -1;
static gint hf_r3_dumpm41t81_reg08_s = -1;
static gint hf_r3_dumpm41t81_reg08_cal = -1;
static gint hf_r3_dumpm41t81_reg09_notused = -1;
static gint hf_r3_dumpm41t81_reg09_bmb = -1;
static gint hf_r3_dumpm41t81_reg09_rb = -1;
static gint hf_r3_dumpm41t81_reg0a_afe = -1;
static gint hf_r3_dumpm41t81_reg0a_sqwe = -1;
static gint hf_r3_dumpm41t81_reg0a_abe = -1;
static gint hf_r3_dumpm41t81_reg0a_10monthalm = -1;
static gint hf_r3_dumpm41t81_reg0a_1monthalm = -1;
static gint hf_r3_dumpm41t81_reg0b_rpt5 = -1;
static gint hf_r3_dumpm41t81_reg0b_rpt4 = -1;
static gint hf_r3_dumpm41t81_reg0b_10dayalm = -1;
static gint hf_r3_dumpm41t81_reg0b_1dayalm = -1;
static gint hf_r3_dumpm41t81_reg0c_rpt3 = -1;
static gint hf_r3_dumpm41t81_reg0c_ht = -1;
static gint hf_r3_dumpm41t81_reg0c_10houralm = -1;
static gint hf_r3_dumpm41t81_reg0c_1houralm = -1;
static gint hf_r3_dumpm41t81_reg0d_rpt2 = -1;
static gint hf_r3_dumpm41t81_reg0d_10minalm = -1;
static gint hf_r3_dumpm41t81_reg0d_1minalm = -1;
static gint hf_r3_dumpm41t81_reg0e_rpt1 = -1;
static gint hf_r3_dumpm41t81_reg0e_10secalm = -1;
static gint hf_r3_dumpm41t81_reg0e_1secalm = -1;
static gint hf_r3_dumpm41t81_reg0f_wdf = -1;
static gint hf_r3_dumpm41t81_reg0f_af = -1;
static gint hf_r3_dumpm41t81_reg0f_notused = -1;
static gint hf_r3_dumpm41t81_reg10_notused = -1;
static gint hf_r3_dumpm41t81_reg11_notused = -1;
static gint hf_r3_dumpm41t81_reg12_notused = -1;
static gint hf_r3_dumpm41t81_reg13_rs = -1;
static gint hf_r3_dumpm41t81_reg13_notused = -1;
static gint hf_r3_sn_manufacturer = -1;
static gint hf_r3_sn_year = -1;
static gint hf_r3_sn_week = -1;
static gint hf_r3_sn_model = -1;
static gint hf_r3_sn_sequence = -1;
static gint hf_r3_sn_group = -1;
static gint hf_r3_sn_nid = -1;
static gint hf_r3_sn_hid = -1;
static gint hf_r3_sn_power_supply = -1;
static gint hf_r3_sn_mortise = -1;
static gint hf_r3_debuglog_recordnumber = -1;
static gint hf_r3_debuglog_flags = -1;
static gint hf_r3_debuglog_tick = -1;
static gint hf_r3_adduserparamtype = -1;
static gint hf_r3_adduserparamtypelength = -1;
static gint hf_r3_adduserparamtypetype = -1;
/*static gint hf_r3_adduserparamtypedatalen = -1;*/
/*static gint hf_r3_adduserparamtypeerror = -1;*/
static gint hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_LAST];
static gint ett_r3 = -1;
static gint ett_r3header = -1;
static gint ett_r3tail = -1;
static gint ett_r3payload = -1;
static gint ett_r3cmd = -1;
static gint ett_r3configitem = -1;
static gint ett_r3upstreamcommand = -1;
static gint ett_r3upstreamfield = -1;
static gint ett_r3timezone = -1;
static gint ett_r3expireon = -1;
static gint ett_r3datetime = -1;
static gint ett_r3eventlogrecord = -1;
static gint ett_r3declinedlogrecord = -1;
static gint ett_r3alarmlogrecord = -1;
static gint ett_r3debugmsg = -1;
static gint ett_r3defineexceptionstartdate = -1;
static gint ett_r3defineexceptionenddate = -1;
static gint ett_r3defineexceptiongroupbits = -1;
static gint ett_r3definecalendarmonth [13] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
static gint ett_r3definetimezonestarttime = -1;
static gint ett_r3definetimezoneendtime = -1;
static gint ett_r3definetimezonedaymap = -1;
static gint ett_r3eventlogdumpstarttime = -1;
static gint ett_r3eventlogdumpendtime = -1;
static gint ett_r3declinedlogdumpstarttime = -1;
static gint ett_r3declinedlogdumpendtime = -1;
static gint ett_r3alarmlogdumpstarttime = -1;
static gint ett_r3alarmlogdumpendtime = -1;
static gint ett_r3clearnvram = -1;
static gint ett_r3filters = -1;
static gint ett_r3alarmlist = -1;
static gint ett_r3alarmcfg = -1;
static gint ett_r3commandmfg = -1;
static gint ett_r3serialnumber = -1;
static gint ett_r3iopins = -1;
static gint ett_r3checksumresults = -1;
static gint ett_r3checksumresultsfield = -1;
static gint ett_r3forceoptions = -1;
static gint ett_r3peekpoke = -1;
static gint ett_r3downloadfirmware = -1;
static gint ett_r3capabilities = -1;
static gint ett_r3lockstate = -1;
static gint ett_r3mortisestatelog = -1;
static gint ett_r3timerchain = -1;
static gint ett_r3taskflags = -1;
static gint ett_r3taskflagsentry = -1;
static gint ett_r3checkpointlog = -1;
static gint ett_r3checkpointlogentry = -1;
static gint ett_r3cpuregisters = -1;
static gint ett_r3cpuregister = -1;
static gint ett_r3m41t81registers = -1;
static gint ett_r3m41t81register = -1;
static gint ett_r3debuglogrecord = -1;
static gint ett_r3setdatetime = -1;
static gint ett_r3manageuser = -1;
static expert_field ei_r3_response_hasdata_octet_2 = EI_INIT;
static expert_field ei_r3_mfgfield_too_many_adc_values = EI_INIT;
static expert_field ei_r3_peekpoke_operation = EI_INIT;
static expert_field ei_r3_response_hasdata_octet_1 = EI_INIT;
static expert_field ei_r3_reserved_upstream_command_value = EI_INIT;
static expert_field ei_r3_firmwaredownload_action = EI_INIT;
static expert_field ei_r3_malformed_length = EI_INIT;
static expert_field ei_r3_mfgfield = EI_INIT;
static expert_field ei_r3_unknown_command_value = EI_INIT;
static expert_field ei_r3_response_hasdata_octet_3 = EI_INIT;
static expert_field ei_r3_cmd_downloadfirmwaretimeout = EI_INIT;
/*
* Indicates next command to be processed as a manufacturing command
*/
static gint mfgCommandFlag = FALSE;
/*
* Some enums that don't exist in public.h and should
*/
typedef enum
{
CHECKPOINT_NONE = 0,
CHECKPOINT_ADC,
CHECKPOINT_DPAC1,
CHECKPOINT_DPAC2,
CHECKPOINT_I2C1,
CHECKPOINT_I2C2,
CHECKPOINT_I2C3,
CHECKPOINT_I2C4,
CHECKPOINT_I2C5,
CHECKPOINT_I2C6,
CHECKPOINT_I2C7,
CHECKPOINT_I2C8,
CHECKPOINT_I2C9,
CHECKPOINT_I2C10,
CHECKPOINT_I2C11,
CHECKPOINT_I2C12,
CHECKPOINT_I2C13,
CHECKPOINT_I2C14,
CHECKPOINT_I2C15,
CHECKPOINT_I2C16,
CHECKPOINT_I2C17,
CHECKPOINT_I2C18,
CHECKPOINT_I2C19,
CHECKPOINT_I2C20,
CHECKPOINT_I2C21,
CHECKPOINT_I2C22,
CHECKPOINT_I2C23,
CHECKPOINT_I2C24,
CHECKPOINT_I2C25,
CHECKPOINT_I2C26,
CHECKPOINT_I2C27,
CHECKPOINT_I2C28,
CHECKPOINT_I2C29,
CHECKPOINT_I2C30,
CHECKPOINT_I2C31,
CHECKPOINT_I2C32,
CHECKPOINT_I2C33,
CHECKPOINT_I2C34,
CHECKPOINT_I2C35,
CHECKPOINT_I2C36,
CHECKPOINT_I2C37,
CHECKPOINT_I2C38,
CHECKPOINT_I2C39,
CHECKPOINT_I2C40,
CHECKPOINT_I2C41,
CHECKPOINT_I2C42,
CHECKPOINT_I2C43,
CHECKPOINT_I2C44,
CHECKPOINT_I2C45,
CHECKPOINT_NVRAM,
CHECKPOINT_SERIAL1,
CHECKPOINT_SERIAL2,
CHECKPOINT_SERIAL3,
CHECKPOINT_WANDERING,
CHECKPOINT_STRAYHPINT,
CHECKPOINT_STRAYLPINT,
CHECKPOINT_TESTWDT,
CHECKPOINT_DPACDEBUG,
CHECKPOINT_LAST
}
checkPoint_e;
typedef enum
{
CONFIGTYPE_NONE = 0,
CONFIGTYPE_BOOL,
CONFIGTYPE_8,
CONFIGTYPE_16,
CONFIGTYPE_32,
CONFIGTYPE_STRING,
CONFIGTYPE_LAST
}
configType_e;
typedef enum
{
DOWNLOADFIRMWARE_START = 0,
DOWNLOADFIRMWARE_DATA,
DOWNLOADFIRMWARE_COMPLETE,
DOWNLOADFIRMWARE_ABORT,
DOWNLOADFIRMWARE_RESET,
DOWNLOADFIRMWARE_LAST
}
downloadFirmware_e;
typedef enum
{
MORTISEEVENT_DX_THROWN = 0,
MORTISEEVENT_DX_RETRACTED,
MORTISEEVENT_LX_RETRACTED,
MORTISEEVENT_LX_EXTENDED,
MORTISEEVENT_AX_EXTENDED,
MORTISEEVENT_AX_RETRACTED,
MORTISEEVENT_RX_DEPRESSED,
MORTISEEVENT_RX_RELEASED,
MORTISEEVENT_PX_OPEN,
MORTISEEVENT_PX_CLOSED,
MORTISEEVENT_MX_UNLOCKED,
MORTISEEVENT_MX_LOCKED,
MORTISEEVENT_LAST,
MORTISEEVENT_IGNORE
}
mortiseEvent_e;
/*
* Print things with nice textual names
*/
static const value_string r3_accessmodenames [] =
{
{ ACCESSMODE_NONE, "ACCESMODE_NONE" },
{ ACCESSMODE_PRIMARYONLY, "ACCESSMODE_PRIMARYONLY" },
{ ACCESSMODE_PRIMARYORAUX, "ACCESSMODE_PRIMARYORAUX" },
{ ACCESSMODE_PRIMARYANDAUX, "ACCESSMODE_PRIMARYANDAUX" },
{ ACCESSMODE_PRIMARYTHENAUX, "ACCESSMODE_PRIMARYTHENAUX" },
{ 0, NULL }
};
static value_string_ext r3_accessmodenames_ext = VALUE_STRING_EXT_INIT(r3_accessmodenames);
static const value_string r3_adduserparamtypenames [] =
{
{ ADDUSERPARAMTYPE_DISPOSITION, "ADDUSERPARAMTYPE_DISPOSITION" },
{ ADDUSERPARAMTYPE_USERNO, "ADDUSERPARAMTYPE_USERNO" },
{ ADDUSERPARAMTYPE_ACCESSALWAYS, "ADDUSERPARAMTYPE_ACCESSALWAYS" },
{ ADDUSERPARAMTYPE_ACCESSMODE, "ADDUSERPARAMTYPE_ACCESSMODE" },
{ ADDUSERPARAMTYPE_CACHED, "ADDUSERPARAMTYPE_CACHED" },
{ ADDUSERPARAMTYPE_USERTYPE, "ADDUSERPARAMTYPE_USERTYPE" },
{ ADDUSERPARAMTYPE_PRIMARYFIELD, "ADDUSERPARAMTYPE_PRIMARYFIELD" },
{ ADDUSERPARAMTYPE_PRIMARYFIELDTYPE, "ADDUSERPARAMTYPE_PRIMARYFIELDTYPE" },
{ ADDUSERPARAMTYPE_AUXFIELD, "ADDUSERPARAMTYPE_AUXFIELD" },
{ ADDUSERPARAMTYPE_AUXFIELDTYPE, "ADDUSERPARAMTYPE_AUXFIELDTYPE" },
{ ADDUSERPARAMTYPE_TIMEZONE, "ADDUSERPARAMTYPE_TIMEZONE" },
{ ADDUSERPARAMTYPE_EXPIREON, "ADDUSERPARAMTYPE_EXPIREON" },
{ ADDUSERPARAMTYPE_USECOUNT, "ADDUSERPARAMTYPE_USECOUNT" },
{ ADDUSERPARAMTYPE_EXCEPTIONGROUP, "ADDUSERPARAMTYPE_EXCEPTIONGROUP" },
{ 0, NULL }
};
static value_string_ext r3_adduserparamtypenames_ext = VALUE_STRING_EXT_INIT(r3_adduserparamtypenames);
static const value_string r3_alarmidnames [] =
{
{ ALARMID_NONE, "ALARMID_NONE" },
{ ALARMID_VALIDIN, "ALARMID_VALIDIN" },
{ ALARMID_DENIEDACCESS, "ALARMID_DENIEDACCESS" },
{ ALARMID_SECURED, "ALARMID_SECURED" },
{ ALARMID_DOORFORCED, "ALARMID_DOORFORCED" },
{ ALARMID_KEYOVERRIDE, "ALARMID_KEYOVERRIDE" },
{ ALARMID_INVALIDENTRY, "ALARMID_INVALIDENTRY" },
{ ALARMID_DOORAJAR, "ALARMID_DOORAJAR" },
{ ALARMID_LOWBATTERY, "ALARMID_LOWBATTERY" },
{ ALARMID_RXHELD, "ALARMID_RXHELD" },
{ 0, NULL }
};
static value_string_ext r3_alarmidnames_ext = VALUE_STRING_EXT_INIT(r3_alarmidnames);
static const value_string r3_capabilitiesnames [] =
{
{ CAPABILITIES_USERS, "CAPABILITIES_USERS" },
{ CAPABILITIES_TIMEZONES, "CAPABILITIES_TIMEZONES" },
{ CAPABILITIES_EXCEPTIONS, "CAPABILITIES_EXCEPTIONS" },
{ CAPABILITIES_EXCEPTIONGROUPS, "CAPABILITIES_EXCEPTIONGROUPS" },
{ CAPABILITIES_EVENTLOG, "CAPABILITIES_EVENTLOG" },
{ CAPABILITIES_DECLINEDLOG, "CAPABILITIES_DECLINEDLOG" },
{ CAPABILITIES_ALARMLOG, "CAPABILITIES_ALARMLOG" },
{ CAPABILITIES_TOTALEVENTS, "CAPABILITIES_TOTALEVENTS" },
{ 0, NULL }
};
static value_string_ext r3_capabilitiesnames_ext = VALUE_STRING_EXT_INIT(r3_capabilitiesnames);
static const value_string r3_checkpointnames [] =
{
{ CHECKPOINT_NONE, "CHECKPOINT_NONE" },
{ CHECKPOINT_ADC, "CHECKPOINT_ADC" },
{ CHECKPOINT_DPAC1, "CHECKPOINT_DPAC1" },
{ CHECKPOINT_DPAC2, "CHECKPOINT_DPAC2" },
{ CHECKPOINT_I2C1, "CHECKPOINT_I2C1" },
{ CHECKPOINT_I2C2, "CHECKPOINT_I2C2" },
{ CHECKPOINT_I2C3, "CHECKPOINT_I2C3" },
{ CHECKPOINT_I2C4, "CHECKPOINT_I2C4" },
{ CHECKPOINT_I2C5, "CHECKPOINT_I2C5" },
{ CHECKPOINT_I2C6, "CHECKPOINT_I2C6" },
{ CHECKPOINT_I2C7, "CHECKPOINT_I2C7" },
{ CHECKPOINT_I2C8, "CHECKPOINT_I2C8" },
{ CHECKPOINT_I2C9, "CHECKPOINT_I2C9" },
{ CHECKPOINT_I2C10, "CHECKPOINT_I2C10" },
{ CHECKPOINT_I2C11, "CHECKPOINT_I2C11" },
{ CHECKPOINT_I2C12, "CHECKPOINT_I2C12" },
{ CHECKPOINT_I2C13, "CHECKPOINT_I2C13" },
{ CHECKPOINT_I2C14, "CHECKPOINT_I2C14" },
{ CHECKPOINT_I2C15, "CHECKPOINT_I2C15" },
{ CHECKPOINT_I2C16, "CHECKPOINT_I2C16" },
{ CHECKPOINT_I2C17, "CHECKPOINT_I2C17" },
{ CHECKPOINT_I2C18, "CHECKPOINT_I2C18" },
{ CHECKPOINT_I2C19, "CHECKPOINT_I2C19" },
{ CHECKPOINT_I2C20, "CHECKPOINT_I2C20" },
{ CHECKPOINT_I2C21, "CHECKPOINT_I2C21" },
{ CHECKPOINT_I2C22, "CHECKPOINT_I2C22" },
{ CHECKPOINT_I2C23, "CHECKPOINT_I2C23" },
{ CHECKPOINT_I2C24, "CHECKPOINT_I2C24" },
{ CHECKPOINT_I2C25, "CHECKPOINT_I2C25" },
{ CHECKPOINT_I2C26, "CHECKPOINT_I2C26" },
{ CHECKPOINT_I2C27, "CHECKPOINT_I2C27" },
{ CHECKPOINT_I2C28, "CHECKPOINT_I2C28" },
{ CHECKPOINT_I2C29, "CHECKPOINT_I2C29" },
{ CHECKPOINT_I2C30, "CHECKPOINT_I2C30" },
{ CHECKPOINT_I2C31, "CHECKPOINT_I2C31" },
{ CHECKPOINT_I2C32, "CHECKPOINT_I2C32" },
{ CHECKPOINT_I2C33, "CHECKPOINT_I2C33" },
{ CHECKPOINT_I2C34, "CHECKPOINT_I2C34" },
{ CHECKPOINT_I2C35, "CHECKPOINT_I2C35" },
{ CHECKPOINT_I2C36, "CHECKPOINT_I2C36" },
{ CHECKPOINT_I2C37, "CHECKPOINT_I2C37" },
{ CHECKPOINT_I2C38, "CHECKPOINT_I2C38" },
{ CHECKPOINT_I2C39, "CHECKPOINT_I2C39" },
{ CHECKPOINT_I2C40, "CHECKPOINT_I2C40" },
{ CHECKPOINT_I2C41, "CHECKPOINT_I2C41" },
{ CHECKPOINT_I2C42, "CHECKPOINT_I2C42" },
{ CHECKPOINT_I2C43, "CHECKPOINT_I2C43" },
{ CHECKPOINT_I2C44, "CHECKPOINT_I2C44" },
{ CHECKPOINT_I2C45, "CHECKPOINT_I2C45" },
{ CHECKPOINT_NVRAM, "CHECKPOINT_NVRAM" },
{ CHECKPOINT_SERIAL1, "CHECKPOINT_SERIAL1" },
{ CHECKPOINT_SERIAL2, "CHECKPOINT_SERIAL2" },
{ CHECKPOINT_SERIAL3, "CHECKPOINT_SERIAL3" },
{ CHECKPOINT_WANDERING, "CHECKPOINT_WANDERING" },
{ CHECKPOINT_STRAYHPINT, "CHECKPOINT_STRAYHPINT" },
{ CHECKPOINT_STRAYLPINT, "CHECKPOINT_STRAYLPINT" },
{ CHECKPOINT_TESTWDT, "CHECKPOINT_TESTWDT" },
{ CHECKPOINT_DPACDEBUG, "CHECKPOINT_DPACDEBUG" },
{ 0, NULL }
};
static value_string_ext r3_checkpointnames_ext = VALUE_STRING_EXT_INIT(r3_checkpointnames);
static const value_string r3_checksumresultnames [] =
{
{ CHECKSUMRESULT_CONFIGURATIONNVRAM, "CHECKSUMRESULT_CONFIGURATIONNVRAM" },
{ CHECKSUMRESULT_EXCEPTIONS, "CHECKSUMRESULT_EXCEPTIONS" },
{ CHECKSUMRESULT_EXCEPTIONGROUPS, "CHECKSUMRESULT_EXCEPTIONGROUPS" },
{ CHECKSUMRESULT_TZCALENDARS, "CHECKSUMRESULT_TZCALENDARS" },
{ CHECKSUMRESULT_TIMEZONES, "CHECKSUMRESULT_TIMEZONES" },
{ CHECKSUMRESULT_USERS, "CHECKSUMRESULT_USERS" },
{ CHECKSUMRESULT_CACHELRU, "CHECKSUMRESULT_CACHELRU" },
{ 0, NULL }
};
static value_string_ext r3_checksumresultnames_ext = VALUE_STRING_EXT_INIT(r3_checksumresultnames);
static const value_string r3_cmdnames [] =
{
{ CMD_RESPONSE, "CMD_RESPONSE" },
{ CMD_HANDSHAKE, "CMD_HANDSHAKE" },
{ CMD_KILLSESSION, "CMD_KILLSESSION" },
{ CMD_QUERYSERIALNUMBER, "CMD_QUERYSERIALNUMBER" },
{ CMD_QUERYVERSION, "CMD_QUERYVERSION" },
{ CMD_SETDATETIME, "CMD_SETDATETIME" },
{ CMD_QUERYDATETIME, "CMD_QUERYDATETIME" },
{ CMD_SETCONFIG, "CMD_SETCONFIG" },
{ CMD_GETCONFIG, "CMD_GETCONFIG" },
{ CMD_MANAGEUSER, "CMD_MANAGEUSER" },
{ CMD_DELETEUSERS, "CMD_DELETEUSERS" },
{ CMD_DEFINEEXCEPTION, "CMD_DEFINEEXCEPTION" },
{ CMD_DEFINEEXCEPTIONGROUP, "CMD_DEFINEEXCEPTIONGROUP" },
{ CMD_DEFINECALENDAR, "CMD_DEFINECALENDAR" },
{ CMD_DEFINETIMEZONE, "CMD_DEFINETIMEZONE" },
{ CMD_RMTAUTHRETRY, "CMD_RMTAUTHRETRY" },
{ CMD_FILTERS, "CMD_FILTERS" },
{ CMD_ALARMCONFIGURE, "CMD_ALARMCONFIGURE" },
{ CMD_EVENTLOGDUMP, "CMD_EVENTLOGDUMP" },
{ CMD_DECLINEDLOGDUMP, "CMD_DECLINEDLOGDUMP" },
{ CMD_ALARMLOGDUMP, "CMD_ALARMLOGDUMP" },
{ CMD_DOWNLOADFIRMWARE, "CMD_DOWNLOADFIRMWARE" },
{ CMD_DOWNLOADFIRMWARETIMEOUT, "CMD_DOWNLOADFIRMWARETIMEOUT" },
{ CMD_POWERTABLESELECTION, "CMD_POWERTABLESELECTION" },
{ CMD_CLEARNVRAM, "CMD_CLEARNVRAM" },
{ CMD_DPAC, "CMD_DPAC" },
{ CMD_SELFTEST, "CMD_SELFTEST" },
{ CMD_RESET, "CMD_RESET" },
{ CMD_LOGWRITE, "CMD_LOGWRITE" },
{ CMD_MFGCOMMAND, "CMD_MFGCOMMAND" },
{ CMD_NVRAMBACKUP, "CMD_NVRAMBACKUP" },
{ CMD_EXTENDEDRESPONSE, "CMD_EXTENDEDRESPONSE" },
{ 0, NULL }
};
static value_string_ext r3_cmdnames_ext = VALUE_STRING_EXT_INIT(r3_cmdnames);
static const value_string r3_cmdmfgnames [] =
{
{ CMDMFG_SETSERIALNUMBER, "CMDMFG_SETSERIALNUMBER" },
{ CMDMFG_SETCRYPTKEY, "CMDMFG_SETCRYPTKEY" },
{ CMDMFG_DUMPNVRAM, "CMDMFG_DUMPNVRAM" },
{ CMDMFG_TERMINAL, "CMDMFG_TERMINAL" },
{ CMDMFG_REMOTEUNLOCK, "CMDMFG_REMOTEUNLOCK" },
{ CMDMFG_AUXCTLRVERSION, "CMDMFG_AUXCTLRVERSION" },
{ CMDMFG_IOPINS, "CMDMFG_IOPINS" },
{ CMDMFG_ADCS, "CMDMFG_ADCS" },
{ CMDMFG_HARDWAREID, "CMDMFG_HARDWAREID" },
{ CMDMFG_CHECKPOINTLOGDUMP, "CMDMFG_CHECKPOINTLOGDUMP" },
{ CMDMFG_CHECKPOINTLOGCLEAR, "CMDMFG_CHECKPOINTLOGCLEAR" },
{ CMDMFG_READREGISTERS, "CMDMFG_READREGISTERS" },
{ CMDMFG_FORCEOPTIONS, "CMDMFG_FORCEOPTIONS" },
{ CMDMFG_COMMUSER, "CMDMFG_COMMUSER" },
{ CMDMFG_DUMPKEYPAD, "CMDMFG_DUMPKEYPAD" },
{ CMDMFG_BATTERYCHECK, "CMDMFG_BATTERYCHECK" },
{ CMDMFG_RAMREFRESH, "CMDMFG_RAMREFRESH" },
{ CMDMFG_TASKFLAGS, "CMDMFG_TASKFLAGS" },
{ CMDMFG_TIMERCHAIN, "CMDMFG_TIMERCHAIN" },
{ CMDMFG_PEEKPOKE, "CMDMFG_PEEKPOKE" },
{ CMDMFG_LOCKSTATE, "CMDMFG_LOCKSTATE" },
{ CMDMFG_CAPABILITIES, "CMDMFG_CAPABILITIES" },
{ CMDMFG_DUMPM41T81, "CMDMFG_DUMPM41T81" },
{ CMDMFG_DEBUGLOGDUMP, "CMDMFG_DEBUGLOGDUMP" },
{ CMDMFG_DEBUGLOGCLEAR, "CMDMFG_DEBUGLOGCLEAR" },
{ CMDMFG_TESTWDT, "CMDMFG_TESTWDT" },
{ CMDMFG_QUERYCKSUM, "CMDMFG_QUERYCKSUM" },
{ CMDMFG_VALIDATECHECKSUMS, "CMDMFG_VALIDATECHECKSUMS" },
{ CMDMFG_REBUILDLRUCACHE, "CMDMFG_REBUILDLRUCACHE" },
{ CMDMFG_TZUPDATE, "CMDMFG_TZUPDATE" },
{ CMDMFG_TESTPRESERVE, "CMDMFG_TESTPRESERVE" },
{ CMDMFG_MORTISESTATELOGDUMP, "CMDMFG_MORTISESTATELOGDUMP" },
{ CMDMFG_MORTISESTATELOGCLEAR, "CMDMFG_MORTISESTATELOGCLEAR" },
{ CMDMFG_MORTISEPINS, "CMDMFG_MORTISEPINS" },
{ CMDMFG_HALTANDCATCHFIRE, "CMDMFG_HALTANDCATCHFIRE" },
{ 0, NULL }
};
static value_string_ext r3_cmdmfgnames_ext = VALUE_STRING_EXT_INIT(r3_cmdmfgnames);
static const value_string r3_configitemnames [] =
{
{ CONFIGITEM_SERIAL_NUMBER, "CONFIGITEM_SERIAL_NUMBER" },
{ CONFIGITEM_CRYPT_KEY, "CONFIGITEM_CRYPT_KEY" },
{ CONFIGITEM_HARDWARE_OPTIONS_MFG, "CONFIGITEM_HARDWARE_OPTIONS_MFG" },
{ CONFIGITEM_HARDWARE_OPTIONS, "CONFIGITEM_HARDWARE_OPTIONS" },
{ CONFIGITEM_NVRAM_CHANGES, "CONFIGITEM_NVRAM_CHANGES" },
{ CONFIGITEM_NVRAMDIRTY, "CONFIGITEM_NVRAMDIRTY" },
{ CONFIGITEM_NVRAM_WV, "CONFIGITEM_NVRAM_WV" },
{ CONFIGITEM_ENABLE_WDT, "CONFIGITEM_ENABLE_WDT" },
{ CONFIGITEM_EARLY_ACK, "CONFIGITEM_EARLY_ACK" },
{ CONFIGITEM_CONSOLE_AES_ONLY, "CONFIGITEM_CONSOLE_AES_ONLY" },
{ CONFIGITEM_RADIO_AES_ONLY, "CONFIGITEM_RADIO_AES_ONLY" },
{ CONFIGITEM_NDRLE, "CONFIGITEM_NDRLE" },
{ CONFIGITEM_SOMF, "CONFIGITEM_SOMF" },
{ CONFIGITEM_NOGAF, "CONFIGITEM_NOGAF" },
{ CONFIGITEM_CARD_READER_POWER, "CONFIGITEM_CARD_READER_POWER" },
{ CONFIGITEM_PROX_ENABLE, "CONFIGITEM_PROX_ENABLE" },
{ CONFIGITEM_CKSUMCONFIG, "CONFIGITEM_CKSUMCONFIG" },
{ CONFIGITEM_DAILY_BATTERY_CHECK, "CONFIGITEM_DAILY_BATTERY_CHECK" },
{ CONFIGITEM_DAILY_BATTERY_CHECK_HOUR, "CONFIGITEM_DAILY_BATTERY_CHECK_HOUR" },
{ CONFIGITEM_BATTERY_LOW, "CONFIGITEM_BATTERY_LOW" },
{ CONFIGITEM_LRU_HEAD, "CONFIGITEM_LRU_HEAD" },
{ CONFIGITEM_LRU_TAIL, "CONFIGITEM_LRU_TAIL" },
{ CONFIGITEM_RTC_CALIBRATION, "CONFIGITEM_RTC_CALIBRATION" },
{ CONFIGITEM_ACVREQUESTER, "CONFIGITEM_ACVREQUESTER" },
{ CONFIGITEM_LOCAL_LED, "CONFIGITEM_LOCAL_LED" },
{ CONFIGITEM_ERRCNT_XORLEN, "CONFIGITEM_ERRCNT_XORLEN" },
{ CONFIGITEM_ERRCNT_CRC, "CONFIGITEM_ERRCNT_CRC" },
{ CONFIGITEM_ERRCNT_NOTSIGIL, "CONFIGITEM_ERRCNT_NOTSIGIL" },
{ CONFIGITEM_ERRCNT_TIMEOUT, "CONFIGITEM_ERRCNT_TIMEOUT" },
{ CONFIGITEM_ERRCNT_TOOLONG, "CONFIGITEM_ERRCNT_TOOLONG" },
{ CONFIGITEM_ERRCNT_TOOSHORT, "CONFIGITEM_ERRCNT_TOOSHORT" },
{ CONFIGITEM_ERRCNT_HITDEFAULT, "CONFIGITEM_ERRCNT_HITDEFAULT" },
{ CONFIGITEM_ERRCNT_OVERRUN, "CONFIGITEM_ERRCNT_OVERRUN" },
{ CONFIGITEM_ERRCNT_UARTFE, "CONFIGITEM_ERRCNT_UARTFE" },
{ CONFIGITEM_ERRCNT_UARTOE, "CONFIGITEM_ERRCNT_UARTOE" },
{ CONFIGITEM_DST_SET, "CONFIGITEM_DST_SET" },
{ CONFIGITEM_DST_MODE, "CONFIGITEM_DST_MODE" },
{ CONFIGITEM_DST_FORWARD_MONTH, "CONFIGITEM_DST_FORWARD_MONTH" },
{ CONFIGITEM_DST_FORWARD_DOM, "CONFIGITEM_DST_FORWARD_DOM" },
{ CONFIGITEM_DST_FORWARD_OOD, "CONFIGITEM_DST_FORWARD_OOD" },
{ CONFIGITEM_DST_FORWARD_DOW, "CONFIGITEM_DST_FORWARD_DOW" },
{ CONFIGITEM_DST_FORWARD_HOUR, "CONFIGITEM_DST_FORWARD_HOUR" },
{ CONFIGITEM_DST_FORWARD_MINUTE, "CONFIGITEM_DST_FORWARD_MINUTE" },
{ CONFIGITEM_DST_FORWARD_ADJUST, "CONFIGITEM_DST_FORWARD_ADJUST" },
{ CONFIGITEM_DST_BACK_MONTH, "CONFIGITEM_DST_BACK_MONTH" },
{ CONFIGITEM_DST_BACK_DOM, "CONFIGITEM_DST_BACK_DOM" },
{ CONFIGITEM_DST_BACK_OOD, "CONFIGITEM_DST_BACK_OOD" },
{ CONFIGITEM_DST_BACK_DOW, "CONFIGITEM_DST_BACK_DOW" },
{ CONFIGITEM_DST_BACK_HOUR, "CONFIGITEM_DST_BACK_HOUR" },
{ CONFIGITEM_DST_BACK_MINUTE, "CONFIGITEM_DST_BACK_MINUTE" },
{ CONFIGITEM_DST_BACK_ADJUST, "CONFIGITEM_DST_BACK_ADJUST" },
{ CONFIGITEM_EVENTLOG_ZEROMEM, "CONFIGITEM_EVENTLOG_ZEROMEM" },
{ CONFIGITEM_EVENTLOG_BEGIN, "CONFIGITEM_EVENTLOG_BEGIN" },
{ CONFIGITEM_EVENTLOG_RECORD, "CONFIGITEM_EVENTLOG_RECORD" },
{ CONFIGITEM_EVENTLOG_ENTRIES, "CONFIGITEM_EVENTLOG_ENTRIES" },
{ CONFIGITEM_EVENTLOG_WARNDEVICE, "CONFIGITEM_EVENTLOG_WARNDEVICE" },
{ CONFIGITEM_EVENTLOG_WARNEVERY, "CONFIGITEM_EVENTLOG_WARNEVERY" },
{ CONFIGITEM_EVENTLOG_RMTDEVICE, "CONFIGITEM_EVENTLOG_RMTDEVICE" },
{ CONFIGITEM_DECLINEDLOG_ZEROMEM, "CONFIGITEM_DECLINEDLOG_ZEROMEM" },
{ CONFIGITEM_DECLINEDLOG_BEGIN, "CONFIGITEM_DECLINEDLOG_BEGIN" },
{ CONFIGITEM_DECLINEDLOG_RECORD, "CONFIGITEM_DECLINEDLOG_RECORD" },
{ CONFIGITEM_DECLINEDLOG_ENTRIES, "CONFIGITEM_DECLINEDLOG_ENTRIES" },
{ CONFIGITEM_DECLINEDLOG_WARNDEVICE, "CONFIGITEM_DECLINEDLOG_WARNDEVICE" },
{ CONFIGITEM_DECLINEDLOG_WARNEVERY, "CONFIGITEM_DECLINEDLOG_WARNEVERY" },
{ CONFIGITEM_DECLINEDLOG_RMTDEVICE, "CONFIGITEM_DECLINEDLOG_RMTDEVICE" },
{ CONFIGITEM_ALARMLOG_ZEROMEM, "CONFIGITEM_ALARMLOG_ZEROMEM" },
{ CONFIGITEM_ALARMLOG_BEGIN, "CONFIGITEM_ALARMLOG_BEGIN" },
{ CONFIGITEM_ALARMLOG_RECORD, "CONFIGITEM_ALARMLOG_RECORD" },
{ CONFIGITEM_ALARMLOG_ENTRIES, "CONFIGITEM_ALARMLOG_ENTRIES" },
{ CONFIGITEM_ALARMLOG_WARNDEVICE, "CONFIGITEM_ALARMLOG_WARNDEVICE" },
{ CONFIGITEM_ALARMLOG_WARNEVERY, "CONFIGITEM_ALARMLOG_WARNEVERY" },
{ CONFIGITEM_ALARMLOG_RMTDEVICE, "CONFIGITEM_ALARMLOG_RMTDEVICE" },
{ CONFIGITEM_VISIBLE_FEEDBACK, "CONFIGITEM_VISIBLE_FEEDBACK" },
{ CONFIGITEM_AUDIBLE_FEEDBACK, "CONFIGITEM_AUDIBLE_FEEDBACK" },
{ CONFIGITEM_VISIBLE_INDICATORS, "CONFIGITEM_VISIBLE_INDICATORS" },
{ CONFIGITEM_AUDIBLE_INDICATORS, "CONFIGITEM_AUDIBLE_INDICATORS" },
{ CONFIGITEM_2NDPINDURATION, "CONFIGITEM_2NDPINDURATION" },
{ CONFIGITEM_LOCKOUT_ATTEMPTS, "CONFIGITEM_LOCKOUT_ATTEMPTS" },
{ CONFIGITEM_LOCKOUT_DURATION, "CONFIGITEM_LOCKOUT_DURATION" },
{ CONFIGITEM_KEYPAD_INACTIVITY, "CONFIGITEM_KEYPAD_INACTIVITY" },
{ CONFIGITEM_ICIDLE_DURATION, "CONFIGITEM_ICIDLE_DURATION" },
{ CONFIGITEM_WRITE_DECLINED_LOG, "CONFIGITEM_WRITE_DECLINED_LOG" },
{ CONFIGITEM_LOW_BATTERY_INDICATOR, "CONFIGITEM_LOW_BATTERY_INDICATOR" },
{ CONFIGITEM_PANIC_MODE, "CONFIGITEM_PANIC_MODE" },
{ CONFIGITEM_TIMEZONE_ENABLE, "CONFIGITEM_TIMEZONE_ENABLE" },
{ CONFIGITEM_EXCEPTION_ENABLE, "CONFIGITEM_EXCEPTION_ENABLE" },
{ CONFIGITEM_AUTOUNLOCK_ENABLE, "CONFIGITEM_AUTOUNLOCK_ENABLE" },
{ CONFIGITEM_LOCK_PRIORITY_EMERGENCY, "CONFIGITEM_LOCK_PRIORITY_EMERGENCY" },
{ CONFIGITEM_LOCK_PRIORITY_SUPERVISOR, "CONFIGITEM_LOCK_PRIORITY_SUPERVISOR" },
{ CONFIGITEM_LOCK_PRIORITY_USER, "CONFIGITEM_LOCK_PRIORITY_USER" },
{ CONFIGITEM_LOCK_PRIORITY_PASSAGE, "CONFIGITEM_LOCK_PRIORITY_PASSAGE" },
{ CONFIGITEM_LOCK_PRIORITY_PANIC, "CONFIGITEM_LOCK_PRIORITY_PANIC" },
{ CONFIGITEM_LOCK_PRIORITY_LOCKOUT, "CONFIGITEM_LOCK_PRIORITY_LOCKOUT" },
{ CONFIGITEM_LOCK_PRIORITY_RELOCK, "CONFIGITEM_LOCK_PRIORITY_RELOCK" },
{ CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN, "CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN" },
{ CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE, "CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE" },
{ CONFIGITEM_LOCK_PRIORITY_REMOTE, "CONFIGITEM_LOCK_PRIORITY_REMOTE" },
{ CONFIGITEM_LOCK_TYPE, "CONFIGITEM_LOCK_TYPE" },
{ CONFIGITEM_DOUBLE_PULSE, "CONFIGITEM_DOUBLE_PULSE" },
{ CONFIGITEM_DOUBLE_DELAY, "CONFIGITEM_DOUBLE_DELAY" },
{ CONFIGITEM_MOTOR_DURATION, "CONFIGITEM_MOTOR_DURATION" },
{ CONFIGITEM_MORTISE_TYPE, "CONFIGITEM_MORTISE_TYPE" },
{ CONFIGITEM_UNLOCK_TIME, "CONFIGITEM_UNLOCK_TIME" },
{ CONFIGITEM_EXT_UNLOCK_TIME, "CONFIGITEM_EXT_UNLOCK_TIME" },
{ CONFIGITEM_DOOR_AJAR_TIME, "CONFIGITEM_DOOR_AJAR_TIME" },
{ CONFIGITEM_SESSION_TIMEOUT, "CONFIGITEM_SESSION_TIMEOUT" },
{ CONFIGITEM_RETRY_ON_TIMEOUT, "CONFIGITEM_RETRY_ON_TIMEOUT" },
{ CONFIGITEM_UNSOLICITED_ENCRYPT, "CONFIGITEM_UNSOLICITED_ENCRYPT" },
{ CONFIGITEM_RMT_AUTH_TIMEOUT, "CONFIGITEM_RMT_AUTH_TIMEOUT" },
{ CONFIGITEM_RMT_AUTH_DEVICE, "CONFIGITEM_RMT_AUTH_DEVICE" },
{ CONFIGITEM_ALARM_DEVICE, "CONFIGITEM_ALARM_DEVICE" },
{ CONFIGITEM_NOTIFY_DEVICE, "CONFIGITEM_NOTIFY_DEVICE" },
{ CONFIGITEM_COMMUSER_DEVICE, "CONFIGITEM_COMMUSER_DEVICE" },
{ CONFIGITEM_SCHEDULER_DEVICE, "CONFIGITEM_SCHEDULER_DEVICE" },
{ CONFIGITEM_SCHEDULER_TYPE, "CONFIGITEM_SCHEDULER_TYPE" },
{ CONFIGITEM_SCHEDULER_AWAKE, "CONFIGITEM_SCHEDULER_AWAKE" },
{ CONFIGITEM_SCHEDULER_PERIOD, "CONFIGITEM_SCHEDULER_PERIOD" },
{ CONFIGITEM_SCHEDULER_HOD, "CONFIGITEM_SCHEDULER_HOD" },
{ CONFIGITEM_SCHEDULER_DOW, "CONFIGITEM_SCHEDULER_DOW" },
{ CONFIGITEM_SCHEDULER_DOM, "CONFIGITEM_SCHEDULER_DOM" },
{ CONFIGITEM_SCHEDULER_HM1, "CONFIGITEM_SCHEDULER_HM1" },
{ CONFIGITEM_SCHEDULER_HM2, "CONFIGITEM_SCHEDULER_HM2" },
{ CONFIGITEM_SCHEDULER_HM3, "CONFIGITEM_SCHEDULER_HM3" },
{ CONFIGITEM_SCHEDULER_HM4, "CONFIGITEM_SCHEDULER_HM4" },
{ CONFIGITEM_RADIO_TYPE, "CONFIGITEM_RADIO_TYPE" },
{ CONFIGITEM_RADIO_MODE, "CONFIGITEM_RADIO_MODE" },
{ CONFIGITEM_RADIO_TIMEOUT, "CONFIGITEM_RADIO_TIMEOUT" },
{ CONFIGITEM_RADIO_ATTEMPTS, "CONFIGITEM_RADIO_ATTEMPTS" },
{ CONFIGITEM_RADIO_HOUSEKEEPING, "CONFIGITEM_RADIO_HOUSEKEEPING" },
{ CONFIGITEM_RADIO_LEAPUSERNAME, "CONFIGITEM_RADIO_LEAPUSERNAME" },
{ CONFIGITEM_RADIO_LEAPPASSWORD, "CONFIGITEM_RADIO_LEAPPASSWORD" },
{ CONFIGITEM_INHIBIT_VOLTAGE, "CONFIGITEM_INHIBIT_VOLTAGE" },
{ CONFIGITEM_LOW_VOLTAGE, "CONFIGITEM_LOW_VOLTAGE" },
{ CONFIGITEM_PT_RANGE_1, "CONFIGITEM_PT_RANGE_1" },
{ CONFIGITEM_PT_RANGE_2, "CONFIGITEM_PT_RANGE_2" },
{ CONFIGITEM_PT_RANGE_3, "CONFIGITEM_PT_RANGE_3" },
{ CONFIGITEM_PT_RANGE_4, "CONFIGITEM_PT_RANGE_4" },
{ CONFIGITEM_PT_RANGE_5, "CONFIGITEM_PT_RANGE_5" },
{ CONFIGITEM_PT_RANGE_6, "CONFIGITEM_PT_RANGE_6" },
{ CONFIGITEM_PT_RANGE_7, "CONFIGITEM_PT_RANGE_7" },
{ CONFIGITEM_PT_RANGE_8, "CONFIGITEM_PT_RANGE_8" },
{ CONFIGITEM_MAGCARD_IFS, "CONFIGITEM_MAGCARD_IFS" },
{ CONFIGITEM_MAGCARD_FIELDS, "CONFIGITEM_MAGCARD_FIELDS" },
{ CONFIGITEM_MAGCARD_OFFSET, "CONFIGITEM_MAGCARD_OFFSET" },
{ CONFIGITEM_MAGCARD_DIGITS, "CONFIGITEM_MAGCARD_DIGITS" },
{ CONFIGITEM_ALARMS, "CONFIGITEM_ALARMS" },
{ CONFIGITEM_FILTERS, "CONFIGITEM_FILTERS" },
{ CONFIGITEM_ALARMSTATE, "CONFIGITEM_ALARMSTATE" },
{ CONFIGITEM_DOORSTATE, "CONFIGITEM_DOORSTATE" },
{ CONFIGITEM_DPACDEBUG, "CONFIGITEM_DPACDEBUG" },
{ CONFIGITEM_FAILOPENSECURE, "CONFIGITEM_FAILOPENSECURE" },
{ CONFIGITEM_REPLACED_VOLTAGE, "CONFIGITEM_REPLACED_VOLTAGE" },
{ CONFIGITEM_RX_HELD_TIME, "CONFIGITEM_RX_HELD_TIME" },
{ CONFIGITEM_PACKET_TIMEOUT, "CONFIGITEM_PACKET_TIMEOUT" },
{ CONFIGITEM_EXTENDEDRESPONSE, "CONFIGITEM_EXTENDEDRESPONSE" },
{ CONFIGITEM_PASSAGEMODEINDICATOR, "CONFIGITEM_PASSAGEMODEINDICATOR" },
{ CONFIGITEM_PFMRETURNTIME, "CONFIGITEM_PFMRETURNTIME" },
{ 0, NULL }
};
static value_string_ext r3_configitemnames_ext = VALUE_STRING_EXT_INIT(r3_configitemnames);
static const value_string r3_configtypenames [] =
{
{ CONFIGTYPE_NONE, "CONFIGTYPE_NONE" },
{ CONFIGTYPE_BOOL, "CONFIGTYPE_BOOL" },
{ CONFIGTYPE_8, "CONFIGTYPE_8" },
{ CONFIGTYPE_16, "CONFIGTYPE_16" },
{ CONFIGTYPE_32, "CONFIGTYPE_32" },
{ CONFIGTYPE_STRING, "CONFIGTYPE_STRING" },
{ 0, NULL }
};
static value_string_ext r3_configtypenames_ext = VALUE_STRING_EXT_INIT(r3_configtypenames);
static const value_string r3_dispositionnames [] =
{
{ DISPOSITION_ADD, "DISPOSITION_ADD" },
{ DISPOSITION_REPLACE, "DISPOSITION_REPLACE" },
{ DISPOSITION_UPDATE, "DISPOSITION_UPDATE" },
{ DISPOSITION_DELETE, "DISPOSITION_DELETE" },
{ DISPOSITION_RETRIEVE, "DISPOSITION_RETRIEVE" },
{ 0, NULL }
};
static value_string_ext r3_dispositionnames_ext = VALUE_STRING_EXT_INIT(r3_dispositionnames);
static const value_string r3_deleteusersnames [] =
{
{ DELETEUSERS_ALL, "DELETEUSER_ALL" },
{ DELETEUSERS_CACHED, "DELETEUSER_CACHED" },
{ 0, NULL }
};
static value_string_ext r3_deleteusersnames_ext = VALUE_STRING_EXT_INIT(r3_deleteusersnames);
static const value_string r3_downloadfirmwarenames [] =
{
{ DOWNLOADFIRMWARE_START, "DOWNLOADFIRMWARE_START" },
{ DOWNLOADFIRMWARE_DATA, "DOWNLOADFIRMWARE_DATA" },
{ DOWNLOADFIRMWARE_COMPLETE, "DOWNLOADFIRMWARE_COMPLETE" },
{ DOWNLOADFIRMWARE_ABORT, "DOWNLOADFIRMWARE_ABORT" },
{ DOWNLOADFIRMWARE_RESET, "DOWNLOADFIRMWARE_RESET" },
{ 0, NULL }
};
static value_string_ext r3_downloadfirmwarenames_ext = VALUE_STRING_EXT_INIT(r3_downloadfirmwarenames);
static const value_string r3_encryptionschemenames [] =
{
{ ENCRYPTIONSCHEME_NONE, "ENCRYPTIONSCHEME_NONE" },
{ ENCRYPTIONSCHEME_ROLLING, "ENCRYPTIONSCHEME_ROLLING" },
{ ENCRYPTIONSCHEME_SN, "ENCRYPTIONSCHEME_SN" },
{ ENCRYPTIONSCHEME_AESIV, "ENCRYPTIONSCHEME_AESIV" },
{ ENCRYPTIONSCHEME_AES, "ENCRYPTIONSCHEME_AES" },
{ 0, NULL }
};
static value_string_ext r3_encryptionschemenames_ext = VALUE_STRING_EXT_INIT(r3_encryptionschemenames);
static const value_string r3_eventnames [] =
{
{ EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
{ EVENT_USER, "EVENT_USER" },
{ EVENT_ONETIME, "EVENT_ONETIME" },
{ EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
{ EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
{ EVENT_BADTIME, "EVENT_BADTIME" },
{ EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
{ EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
{ EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
{ EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
{ EVENT_USERADDED, "EVENT_USERADDED" },
{ EVENT_USERDELETED, "EVENT_USERDELETED" },
{ EVENT_EMERGENCY, "EVENT_EMERGENCY" },
{ EVENT_PANIC, "EVENT_PANIC" },
{ EVENT_RELOCK, "EVENT_RELOCK" },
{ EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
{ EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
{ EVENT_RESET, "EVENT_RESET" },
{ EVENT_DATETIMESET, "EVENT_DATETIMESET" },
{ EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
{ EVENT_DBRESET, "EVENT_DBRESET" },
{ EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
{ EVENT_COMMENDED, "EVENT_COMMENDED" },
{ EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
{ EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
{ EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
{ EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
{ EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
{ EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
{ EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
{ EVENT_MASTERCODE, "EVENT_MASTERCODE" },
{ EVENT_COMMUSER, "EVENT_COMMUSER" },
{ EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
{ EVENT_NOTIFY, "EVENT_NOTIFY" },
{ EVENT_EXPIRED, "EVENT_EXPIRED" },
{ EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
{ EVENT_MCCENTER, "EVENT_MCCENTER" },
{ EVENT_MCCEXIT, "EVENT_MCCEXIT" },
{ EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
{ EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
{ EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
{ EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
{ EVENT_NVRAMOK, "EVENT_NVRAMOK" },
{ EVENT_USERREPLACED, "EVENT_USERREPLACED" },
{ EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
{ EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
{ EVENT_USERUPDATED, "EVENT_USERUPDATED" },
{ EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
{ EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
{ EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
{ EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
{ EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
{ EVENT_CLOCKERR, "EVENT_CLOCKERR" },
{ EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
{ EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
{ EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
{ EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
{ EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
{ EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
{ EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
{ EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
{ EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
{ EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
{ EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
{ EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
{ EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
{ EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
{ EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
{ EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
{ EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
{ EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
{ EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
{ EVENT_POWERFAIL, "EVENT_POWERFAIL" },
{ EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
{ EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
{ EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
{ EVENT_DEBUG, "EVENT_DEBUG" },
{ 0, NULL }
};
static value_string_ext r3_eventnames_ext = VALUE_STRING_EXT_INIT(r3_eventnames);
static const value_string r3_fieldtypenames [] =
{
{ FIELDTYPE_NONE, "FIELDTYPE_NONE" },
{ FIELDTYPE_PIN, "FIELDTYPE_PIN" },
{ FIELDTYPE_PROX, "FIELDTYPE_PROX" },
{ FIELDTYPE_MAGCARD, "FIELDTYPE_MAGCARD" },
{ 0, NULL }
};
static value_string_ext r3_fieldtypenames_ext = VALUE_STRING_EXT_INIT(r3_fieldtypenames);
static const value_string r3_filtereventnames [] =
{
{ EVENT_INVALIDPIN, "EVENT_INVALIDPIN" },
{ EVENT_USER, "EVENT_USER" },
{ EVENT_ONETIME, "EVENT_ONETIME" },
{ EVENT_PASSAGEBEGIN, "EVENT_PASSAGEBEGIN" },
{ EVENT_PASSAGEEND, "EVENT_PASSAGEEND" },
{ EVENT_BADTIME, "EVENT_BADTIME" },
{ EVENT_LOCKEDOUT, "EVENT_LOCKEDOUT" },
{ EVENT_LOWBATTERY, "EVENT_LOWBATTERY" },
{ EVENT_DEADBATTERY, "EVENT_DEADBATTERY" },
{ EVENT_BATTERYREPLACED, "EVENT_BATTERYREPLACED" },
{ EVENT_USERADDED, "EVENT_USERADDED" },
{ EVENT_USERDELETED, "EVENT_USERDELETED" },
{ EVENT_EMERGENCY, "EVENT_EMERGENCY" },
{ EVENT_PANIC, "EVENT_PANIC" },
{ EVENT_RELOCK, "EVENT_RELOCK" },
{ EVENT_LOCKOUTBEGIN, "EVENT_LOCKOUTBEGIN" },
{ EVENT_LOCKOUTEND, "EVENT_LOCKOUTEND" },
{ EVENT_RESET, "EVENT_RESET" },
{ EVENT_DATETIMESET, "EVENT_DATETIMESET" },
{ EVENT_LOGCLEARED, "EVENT_LOGCLEARED" },
{ EVENT_DBRESET, "EVENT_DBRESET" },
{ EVENT_COMMSTARTED, "EVENT_COMMSTARTED" },
{ EVENT_COMMENDED, "EVENT_COMMENDED" },
{ EVENT_FIRMWAREABORT, "EVENT_FIRMWAREABORT" },
{ EVENT_FIRMWAREERROR, "EVENT_FIRMWAREERROR" },
{ EVENT_FIRMWARETIMEOUT, "EVENT_FIRMWARETIMEOUT" },
{ EVENT_DSTFALLBACK, "EVENT_DSTFALLBACK" },
{ EVENT_DSTSPRINGFORWARD, "EVENT_DSTSPRINGFORWARD" },
{ EVENT_BOLTTHROWN, "EVENT_BOLTTHROWN" },
{ EVENT_BOLTRETRACTED, "EVENT_BOLTRETRACTED" },
{ EVENT_MASTERCODE, "EVENT_MASTERCODE" },
{ EVENT_COMMUSER, "EVENT_COMMUSER" },
{ EVENT_DPACDISABLED, "EVENT_DPACDISABLED" },
{ EVENT_NOTIFY, "EVENT_NOTIFY" },
{ EVENT_EXPIRED, "EVENT_EXPIRED" },
{ EVENT_SUPERVISOR, "EVENT_SUPERVISOR" },
{ EVENT_MCCENTER, "EVENT_MCCENTER" },
{ EVENT_MCCEXIT, "EVENT_MCCEXIT" },
{ EVENT_SERIALRXOVERRUN, "EVENT_SERIALRXOVERRUN" },
{ EVENT_DPACRXOVERRUN, "EVENT_DPACRXOVERRUN" },
{ EVENT_NVRAMPBCLEAR, "EVENT_NVRAMPBCLEAR" },
{ EVENT_NVRAMLAYOUTCHANGE, "EVENT_NVRAMLAYOUTCHANGE" },
{ EVENT_NVRAMOK, "EVENT_NVRAMOK" },
{ EVENT_USERREPLACED, "EVENT_USERREPLACED" },
{ EVENT_RADIOTIMEOUT, "EVENT_RADIOTIMEOUT" },
{ EVENT_SUSPENDEDUSER, "EVENT_SUSPENDEDUSER" },
{ EVENT_USERUPDATED, "EVENT_USERUPDATED" },
{ EVENT_DOORBOLTED, "EVENT_DOORBOLTED" },
{ EVENT_PANICACTIVE, "EVENT_PANICACTIVE" },
{ EVENT_PASSAGEACTIVE, "EVENT_PASSAGEACTIVE" },
{ EVENT_PASSAGEINACTIVE, "EVENT_PASSAGEINACTIVE" },
{ EVENT_BADACCESSMODE, "EVENT_BADACCESSMODE" },
{ EVENT_CLOCKERR, "EVENT_CLOCKERR" },
{ EVENT_REMOTEUNLOCK, "EVENT_REMOTEUNLOCK" },
{ EVENT_TZHAUDISABLED, "EVENT_TZHAUDISABLED" },
{ EVENT_EVENTLOGWRAPPED, "EVENT_EVENTLOGWRAPPED" },
{ EVENT_DECLINEDLOGWRAPPED, "EVENT_DECLINEDLOGWRAPPED" },
{ EVENT_ALARMLOGWRAPPED, "EVENT_ALARMLOGWRAPPED" },
{ EVENT_RADIOBUSYEMERGENCY, "EVENT_RADIOBUSYEMERGENCY" },
{ EVENT_RADIOBUSYSUPERVISOR, "EVENT_RADIOBUSYSUPERVISOR" },
{ EVENT_RADIOBUSYONETIME, "EVENT_RADIOBUSYONETIME" },
{ EVENT_RADIOBUSYUSER, "EVENT_RADIOBUSYUSER" },
{ EVENT_RADIOBUSYPANIC, "EVENT_RADIOBUSYPANIC" },
{ EVENT_RADIOBUSYREX, "EVENT_RADIOBUSYREX" },
{ EVENT_RADIOBUSYLOCKOUT, "EVENT_RADIOBUSYLOCKOUT" },
{ EVENT_RADIOBUSYRELOCK, "EVENT_RADIOBUSYRELOCK" },
{ EVENT_BATTERYCHECKHELDOFF, "EVENT_BATTERYCHECKHELDOFF" },
{ EVENT_RMTAUTHREQUEST, "EVENT_RMTAUTHREQUEST" },
{ EVENT_FIRMWAREUPDATE, "EVENT_FIRMWAREUPDATE" },
{ EVENT_FIRMWAREUPDATEFAILED, "EVENT_FIRMWAREUPDATEFAILED" },
{ EVENT_MSMFAILURE, "EVENT_MSMFAILURE" },
{ EVENT_CLOCKRESET, "EVENT_CLOCKRESET" },
{ EVENT_POWERFAIL, "EVENT_POWERFAIL" },
{ EVENT_DPAC501WENTSTUPID, "EVENT_DPAC501WENTSTUPID" },
{ EVENT_CHECKSUMCONFIG, "EVENT_CHECKSUMCONFIG" },
{ EVENT_CHECKSUMTZ, "EVENT_CHECKSUMTZ" },
{ EVENT_DEBUG, "EVENT_DEBUG" },
{ 0xfe, "(Enable All Filters)" },
{ 0xff, "(Disable All Filters)" },
{ 0, NULL }
};
static value_string_ext r3_filtereventnames_ext = VALUE_STRING_EXT_INIT(r3_filtereventnames);
static const value_string r3_filtertypenames [] =
{
{ FILTERSELECT_RECORDING, "FILTERSELECT_RECORDING" },
{ FILTERSELECT_REPORTING, "FILTERSELECT_REPORTING" },
{ 0, NULL }
};
static value_string_ext r3_filtertypenames_ext = VALUE_STRING_EXT_INIT(r3_filtertypenames);
static const value_string r3_forceitemnames [] =
{
{ FORCEITEM_RADIOPOWER, "FORCEITEM_RADIOPOWER" },
{ FORCEITEM_RADIOENABLE, "FORCEITEM_RADIOENABLE" },
{ FORCEITEM_LEDRED, "FORCEITEM_LEDRED" },
{ FORCEITEM_LEDGREEN, "FORCEITEM_LEDGREEN" },
{ FORCEITEM_LEDYELLOW, "FORCEITEM_LEDYELLOW" },
{ FORCEITEM_PIEZO, "FORCEITEM_PIEZO" },
{ FORCEITEM_MAGPOWER, "FORCEITEM_MAGPOWER" },
{ FORCEITEM_MAGLEDA, "FORCEITEM_MAGLEDA" },
{ FORCEITEM_MAGLEDB, "FORCEITEM_MAGLEDB" },
{ FORCEITEM_PROXPOWER, "FORCEITEM_PROXPOWER" },
{ FORCEITEM_PROXPING, "FORCEITEM_PROXPING" },
{ FORCEITEM_PROXMODE, "FORCEITEM_PROXMODE" },
{ FORCEITEM_I2CPOWER, "FORCEITEM_I2CPOWER" },
{ FORCEITEM_MOTORARUN, "FORCEITEM_MOTORARUN" },
{ FORCEITEM_MOTORBRUN, "FORCEITEM_MOTORBRUN" },
{ FORCEITEM_VMON, "FORCEITEM_VMON" },
{ FORCEITEM_PROX, "FORCEITEM_PROX" },
{ FORCEITEM_MORTISETEST, "FORCEITEM_MORTISETEST" },
{ FORCEITEM_KEYPADTEST, "FORCEITEM_KEYPADTEST" },
{ FORCEITEM_MAGTEST, "FORCEITEM_MAGTEST" },
{ FORCEITEM_PROXTEST, "FORCEITEM_PROXTEST" },
{ 0, NULL }
};
static value_string_ext r3_forceitemnames_ext = VALUE_STRING_EXT_INIT(r3_forceitemnames);
static const value_string r3_mfgfieldnames [] =
{
{ MFGFIELD_IOPINS, "MFGFIELD_IOPINS" },
{ MFGFIELD_ADCS, "MFGFIELD_ADCS" },
{ MFGFIELD_HARDWAREID, "MFGFIELD_HARDWAREID" },
{ MFGFIELD_CHECKPOINTLOG, "MFGFIELD_CHECKPOINTLOG" },
{ MFGFIELD_CPUREGISTERS, "MFGFIELD_CPUREGISTERS" },
{ MFGFIELD_TASKFLAGS, "MFGFIELD_TASKFLAGS" },
{ MFGFIELD_TIMERCHAIN, "MFGFIELD_TIMERCHAIN" },
{ MFGFIELD_PEEKPOKE, "MFGFIELD_PEEKPOKE" },
{ MFGFIELD_LOCKSTATE, "MFGFIELD_LOCKSTATE" },
{ MFGFIELD_CAPABILITIES, "MFGFIELD_CAPABILITIES" },
{ MFGFIELD_DUMPM41T81, "MFGFIELD_DUMPM41T81" },
{ MFGFIELD_NVRAMCHECKSUMVALUE, "MFGFIELD_NVRAMCHECKSUMVALUE" },
{ MFGFIELD_CHECKSUMRESULTS, "MFGFIELD_CHECKSUMRESULTS" },
{ MFGFIELD_MORTISESTATELOG, "MFGFIELD_MORTISESTATELOG" },
{ MFGFIELD_MORTISEPINS, "MFGFIELD_MORTISEPINS" },
{ MFGFIELD_KEYPADCHAR, "MFGFIELD_KEYPADCHAR" },
{ MFGFIELD_MAGCARD, "MFGFIELD_MAGCARD" },
{ MFGFIELD_PROXCARD, "MFGFIELD_PROXCARD" },
{ 0, NULL }
};
static value_string_ext r3_mfgfieldnames_ext = VALUE_STRING_EXT_INIT(r3_mfgfieldnames);
static const value_string r3_mortiseeventnames [] =
{
{ MORTISEEVENT_DX_THROWN, "MORTISEEVENT_DX_THROWN" },
{ MORTISEEVENT_DX_RETRACTED, "MORTISEEVENT_DX_RETRACTED" },
{ MORTISEEVENT_LX_RETRACTED, "MORTISEEVENT_LX_RETRACTED" },
{ MORTISEEVENT_LX_EXTENDED, "MORTISEEVENT_LX_EXTENDED" },
{ MORTISEEVENT_AX_EXTENDED, "MORTISEEVENT_AX_EXTENDED" },
{ MORTISEEVENT_AX_RETRACTED, "MORTISEEVENT_AX_RETRACTED" },
{ MORTISEEVENT_RX_DEPRESSED, "MORTISEEVENT_RX_DEPRESSED" },
{ MORTISEEVENT_RX_RELEASED, "MORTISEEVENT_RX_RELEASED" },
{ MORTISEEVENT_PX_OPEN, "MORTISEEVENT_PX_OPEN" },
{ MORTISEEVENT_PX_CLOSED, "MORTISEEVENT_PX_CLOSED" },
{ MORTISEEVENT_MX_UNLOCKED, "MORTISEEVENT_MX_UNLOCKED" },
{ MORTISEEVENT_MX_LOCKED, "MORTISEEVENT_MX_LOCKED" },
{ MORTISEEVENT_LAST, "MORTISEEVENT_LAST" },
{ MORTISEEVENT_IGNORE, "MORTISEEVENT_IGNORE" },
{ 0, NULL }
};
static value_string_ext r3_mortiseeventnames_ext = VALUE_STRING_EXT_INIT(r3_mortiseeventnames);
static const value_string r3_mortisetypenames [] =
{
{ MORTISETYPE_NONE, "MORTISETYPE_NONE" },
{ MORTISETYPE_S82276, "MORTISETYPE_S82276" },
{ MORTISETYPE_S82277, "MORTISETYPE_S82277" },
{ MORTISETYPE_S82278, "MORTISETYPE_S82278" },
{ MORTISETYPE_S82279, "MORTISETYPE_S82279" },
{ MORTISETYPE_S10G77, "MORTISETYPE_S10G77" },
{ MORTISETYPE_S8877, "MORTISETYPE_S8877" },
{ MORTISETYPE_S8878, "MORTISETYPE_S8878" },
{ MORTISETYPE_S8977, "MORTISETYPE_S8977" },
{ MORTISETYPE_S8978, "MORTISETYPE_S8978" },
{ MORTISETYPE_CRML20x36, "MORTISETYPE_CRML20x36" },
{ MORTISETYPE_CRML20x35, "MORTISETYPE_CRML20x35" },
{ MORTISETYPE_CRML20x34, "MORTISETYPE_CRML20x34" },
{ MORTISETYPE_CRML20x33, "MORTISETYPE_CRML20x33" },
{ MORTISETYPE_CRCL33x34, "MORTISETYPE_CRCL33x34" },
{ MORTISETYPE_CR9X34, "MORTISETYPE_CR9X34" },
{ MORTISETYPE_CR9X33, "MORTISETYPE_CR9X33" },
{ MORTISETYPE_CR9MX34, "MORTISETYPE_CR9MX34" },
{ MORTISETYPE_CR9MX33, "MORTISETYPE_CR9MX33" },
{ 0, NULL }
};
static value_string_ext r3_mortisetypenames_ext = VALUE_STRING_EXT_INIT(r3_mortisetypenames);
static const value_string r3_peekpokenames [] =
{
{ PEEKPOKE_READU8, "PEEKPOKE_READU8" },
{ PEEKPOKE_READU16, "PEEKPOKE_READU16" },
{ PEEKPOKE_READU24, "PEEKPOKE_READU24" },
{ PEEKPOKE_READU32, "PEEKPOKE_READU32" },
{ PEEKPOKE_READSTRING, "PEEKPOKE_READSTRING" },
{ PEEKPOKE_WRITEU8, "PEEKPOKE_WRITEU8" },
{ PEEKPOKE_WRITEU16, "PEEKPOKE_WRITEU16" },
{ PEEKPOKE_WRITEU24, "PEEKPOKE_WRITEU24" },
{ PEEKPOKE_WRITEU32, "PEEKPOKE_WRITEU32" },
{ PEEKPOKE_WRITESTRING, "PEEKPOKE_WRITESTRING" },
{ 0, NULL }
};
static value_string_ext r3_peekpokenames_ext = VALUE_STRING_EXT_INIT(r3_peekpokenames);
static const value_string r3_ppmisourcenames [] =
{
{ PPMISOURCE_NONE, "PPMISOURCE_NONE" },
{ PPMISOURCE_PIN, "PPMISOURCE_PIN" },
{ PPMISOURCE_PROX, "PPMISOURCE_PROX" },
{ PPMISOURCE_MAGCARD, "PPMISOURCE_MAGCARD" },
{ 0, NULL }
};
static value_string_ext r3_ppmisourcenames_ext = VALUE_STRING_EXT_INIT(r3_ppmisourcenames);
static const value_string r3_responsetypenames [] =
{
{ RESPONSETYPE_OK, "RESPONSETYPE_OK" },
{ RESPONSETYPE_ERROR, "RESPONSETYPE_ERROR" },
{ RESPONSETYPE_HASDATA, "RESPONSETYPE_HASDATA" },
{ RESPONSETYPE_NOHANDLER, "RESPONSETYPE_NOHANDLER" },
{ RESPONSETYPE_NOSESSION, "RESPONSETYPE_NOSESSION" },
{ RESPONSETYPE_BADCOMMAND, "RESPONSETYPE_BADCOMMAND" },
{ RESPONSETYPE_BADPARAMETER, "RESPONSETYPE_BADPARAMETER" },
{ RESPONSETYPE_BADPARAMETERLEN, "RESPONSETYPE_BADPARAMETERLEN" },
{ RESPONSETYPE_MISSINGPARAMETER, "RESPONSETYPE_MISSINGPARAMETER" },
{ RESPONSETYPE_DUPLICATEPARAMETER, "RESPONSETYPE_DUPLICATEPARAMETER" },
{ RESPONSETYPE_PARAMETERCONFLICT, "RESPONSETYPE_PARAMETERCONFLICT" },
{ RESPONSETYPE_BADDEVICE, "RESPONSETYPE_BADDEVICE" },
{ RESPONSETYPE_NVRAMERROR, "RESPONSETYPE_NVRAMERROR" },
{ RESPONSETYPE_NVRAMERRORNOACK, "RESPONSETYPE_NVRAMERRORNOACK" },
{ RESPONSETYPE_NVRAMERRORNOACK32, "RESPONSETYPE_NVRAMERRORNOACK32" },
{ RESPONSETYPE_NOTI2CADDRESS, "RESPONSETYPE_NOTI2CADDRESS" },
{ RESPONSETYPE_FIRMWAREERROR, "RESPONSETYPE_FIRMWAREERROR" },
{ RESPONSETYPE_DUMPINPROGRESS, "RESPONSETYPE_DUMPINPROGRESS" },
{ RESPONSETYPE_INTERNALERROR, "RESPONSETYPE_INTERNALERROR" },
{ RESPONSETYPE_NOTIMPLEMENTED, "RESPONSETYPE_NOTIMPLEMENTED" },
{ RESPONSETYPE_PINFORMATERROR, "RESPONSETYPE_PINFORMATERROR" },
{ RESPONSETYPE_PINEXISTS, "RESPONSETYPE_PINEXISTS" },
{ RESPONSETYPE_PINNOTFOUND, "RESPONSETYPE_PINNOTFOUND" },
{ RESPONSETYPE_USERACTIVE, "RESPONSETYPE_USERACTIVE" },
{ RESPONSETYPE_USERINACTIVE, "RESPONSETYPE_USERINACTIVE" },
{ RESPONSETYPE_PARENTNOTFOUND, "RESPONSETYPE_PARENTNOTFOUND" },
{ RESPONSETYPE_NOCHAIN, "RESPONSETYPE_NOCHAIN" },
{ RESPONSETYPE_CAUGHTINLOOP, "RESPONSETYPE_CAUGHTINLOOP" },
{ RESPONSETYPE_EVENTFILTERED, "RESPONSETYPE_EVENTFILTERED" },
{ RESPONSETYPE_PAYLOADTOOLARGE, "RESPONSETYPE_PAYLOADTOOLARGE" },
{ RESPONSETYPE_ENDOFDATA, "RESPONSETYPE_ENDOFDATA" },
{ RESPONSETYPE_RMTAUTHREJECTED, "RESPONSETYPE_RMTAUTHREJECTED" },
{ RESPONSETYPE_NVRAMVERSIONERROR, "RESPONSETYPE_NVRAMVERSIONERROR" },
{ RESPONSETYPE_NOHARDWARE, "RESPONSETYPE_NOHARDWARE" },
{ RESPONSETYPE_SCHEDULERCONFLICT, "RESPONSETYPE_SCHEDULERCONFLICT" },
{ RESPONSETYPE_NVRAMWRITEERROR, "RESPONSETYPE_NVRAMWRITEERROR" },
{ RESPONSETYPE_DECLINEDFILTERED, "RESPONSETYPE_DECLINEDFILTERED" },
{ RESPONSETYPE_NECONFIGPARM, "RESPONSETYPE_NECONFIGPARM" },
{ RESPONSETYPE_FLASHERASEERROR, "RESPONSETYPE_FLASHERASEERROR" },
{ RESPONSETYPE_FLASHWRITEERROR, "RESPONSETYPE_FLASHWRITEERROR" },
{ RESPONSETYPE_BADNVBACKUP, "RESPONSETYPE_BADNVBACKUP" },
{ RESPONSETYPE_EARLYACK, "RESPONSETYPE_EARLYACK" },
{ RESPONSETYPE_ALARMFILTERED, "RESPONSETYPE_ALARMFILTERED" },
{ RESPONSETYPE_ACVFAILURE, "RESPONSETYPE_ACVFAILURE" },
{ RESPONSETYPE_USERCHECKSUMERROR, "RESPONSETYPE_USERCHECKSUMERROR" },
{ RESPONSETYPE_CHECKSUMERROR, "RESPONSETYPE_CHECKSUMERROR" },
{ RESPONSETYPE_RTCSQWFAILURE, "RESPONSETYPE_RTCSQWFAILURE" },
{ RESPONSETYPE_PRIORITYSHUTDOWN, "RESPONSETYPE_PRIORITYSHUTDOWN" },
{ RESPONSETYPE_NOTMODIFIABLE, "RESPONSETYPE_NOTMODIFIABLE" },
{ RESPONSETYPE_CANTPRESERVE, "RESPONSETYPE_CANTPRESERVE" },
{ RESPONSETYPE_INPASSAGEMODE, "RESPONSETYPE_INPASSAGEMODE" },
{ 0, NULL }
};
static value_string_ext r3_responsetypenames_ext = VALUE_STRING_EXT_INIT(r3_responsetypenames);
static const value_string r3_timezonemodenames [] =
{
{ TIMEZONEMODE_NORMAL, "TIMEZONEMODE_NORMAL" },
{ TIMEZONEMODE_EXCLUSION, "TIMEZONEMODE_EXCLUSION" },
{ TIMEZONEMODE_AUTOTIME, "TIMEZONEMODE_AUTOTIME" },
{ TIMEZONEMODE_AUTOFPT, "TIMEZONEMODE_AUTOFPT" },
{ TIMEZONEMODE_UAPM, "TIMEZONEMODE_UAPM" },
{ 0, NULL }
};
static value_string_ext r3_timezonemodenames_ext = VALUE_STRING_EXT_INIT(r3_timezonemodenames);
static const value_string r3_upstreamcommandnames [] =
{
{ UPSTREAMCOMMAND_RESERVED, "UPSTREAMCOMMAND_RESERVED" },
{ UPSTREAMCOMMAND_DEBUGMSG, "UPSTREAMCOMMAND_DEBUGMSG" },
{ UPSTREAMCOMMAND_QUERYVERSION, "UPSTREAMCOMMAND_QUERYVERSION" },
{ UPSTREAMCOMMAND_QUERYDATETIME, "UPSTREAMCOMMAND_QUERYDATETIME" },
{ UPSTREAMCOMMAND_QUERYSERIALNUMBER, "UPSTREAMCOMMAND_QUERYSERIALNUMBER" },
{ UPSTREAMCOMMAND_DUMPEVENTLOG, "UPSTREAMCOMMAND_DUMPEVENTLOG" },
{ UPSTREAMCOMMAND_DUMPNVRAM, "UPSTREAMCOMMAND_DUMPNVRAM" },
{ UPSTREAMCOMMAND_RMTAUTHREQUEST, "UPSTREAMCOMMAND_RMTAUTHREQUEST" },
{ UPSTREAMCOMMAND_RETRIEVEUSER, "UPSTREAMCOMMAND_RETRIEVEUSER" },
{ UPSTREAMCOMMAND_QUERYCONFIG, "UPSTREAMCOMMAND_QUERYCONFIG" },
{ UPSTREAMCOMMAND_RMTEVENTLOGRECORD, "UPSTREAMCOMMAND_RMTEVENTLOGRECORD" },
{ UPSTREAMCOMMAND_DPAC, "UPSTREAMCOMMAND_DPAC" },
{ UPSTREAMCOMMAND_NOTIFY, "UPSTREAMCOMMAND_NOTIFY" },
{ UPSTREAMCOMMAND_MFG, "UPSTREAMCOMMAND_MFG" },
{ UPSTREAMCOMMAND_EVENTLOGWARNING, "UPSTREAMCOMMAND_EVENTLOGWARNING" },
{ UPSTREAMCOMMAND_DUMPNVRAMRLE, "UPSTREAMCOMMAND_DUMPNVRAMRLE" },
{ UPSTREAMCOMMAND_RMTDECLINEDRECORD, "UPSTREAMCOMMAND_RMTDECLINEDRECORD" },
{ UPSTREAMCOMMAND_DECLINEDWARNING, "UPSTREAMCOMMAND_DECLINEDWARNING" },
{ UPSTREAMCOMMAND_DUMPDECLINEDLOG, "UPSTREAMCOMMAND_DUMPDECLINEDLOG" },
{ UPSTREAMCOMMAND_RMTALARMRECORD, "UPSTREAMCOMMAND_RMTALARMRECORD" },
{ UPSTREAMCOMMAND_ALARMWARNING, "UPSTREAMCOMMAND_ALARMWARNING" },
{ UPSTREAMCOMMAND_DUMPALARMLOG, "UPSTREAMCOMMAND_DUMPALARMLOG" },
{ UPSTREAMCOMMAND_CONNECTSCHEDULER, "UPSTREAMCOMMAND_CONNECTSCHEDULER" },
{ UPSTREAMCOMMAND_CONNECTCOMMUSER, "UPSTREAMCOMMAND_CONNECTCOMMUSER" },
{ UPSTREAMCOMMAND_CONNECTALARM, "UPSTREAMCOMMAND_CONNECTALARM" },
{ UPSTREAMCOMMAND_DUMPDEBUGLOG, "UPSTREAMCOMMAND_DUMPDEBUGLOG" },
{ 0, NULL }
};
static value_string_ext r3_upstreamcommandnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamcommandnames);
static const value_string r3_upstreamfieldnames [] =
{
{ UPSTREAMFIELD_NOTUSED, "UPSTREAMFIELD_NOTUSED" },
{ UPSTREAMFIELD_SERIALNUMBER, "UPSTREAMFIELD_SERIALNUMBER" },
{ UPSTREAMFIELD_NAR, "UPSTREAMFIELD_NAR" },
{ UPSTREAMFIELD_ENTRYDEVICE, "UPSTREAMFIELD_ENTRYDEVICE" },
{ UPSTREAMFIELD_PPMIFIELDTYPE, "UPSTREAMFIELD_PPMIFIELDTYPE" },
{ UPSTREAMFIELD_PIN, "UPSTREAMFIELD_PIN" },
{ UPSTREAMFIELD_SEQUENCENUMBER, "UPSTREAMFIELD_SEQUENCENUMBER" },
{ UPSTREAMFIELD_RESPONSEWINDOW, "UPSTREAMFIELD_RESPONSEWINDOW" },
{ UPSTREAMFIELD_USERNUMBER, "UPSTREAMFIELD_USERNUMBER" },
{ UPSTREAMFIELD_VERSION, "UPSTREAMFIELD_VERSION" },
{ UPSTREAMFIELD_EVENTLOGRECORD, "UPSTREAMFIELD_EVENTLOGRECORD" },
{ UPSTREAMFIELD_DATETIME, "UPSTREAMFIELD_DATETIME" },
{ UPSTREAMFIELD_EVENTLOGRECORDCOUNT, "UPSTREAMFIELD_EVENTLOGRECORDCOUNT" },
{ UPSTREAMFIELD_DECLINEDRECORDCOUNT, "UPSTREAMFIELD_DECLINEDRECORDCOUNT" },
{ UPSTREAMFIELD_DECLINEDRECORD, "UPSTREAMFIELD_DECLINEDRECORD" },
{ UPSTREAMFIELD_USERTYPE, "UPSTREAMFIELD_USERTYPE" },
{ UPSTREAMFIELD_ACCESSALWAYS, "UPSTREAMFIELD_ACCESSALWAYS" },
{ UPSTREAMFIELD_CACHED, "UPSTREAMFIELD_CACHED" },
{ UPSTREAMFIELD_PRIMARYFIELDTYPE, "UPSTREAMFIELD_PRIMARYFIELDTYPE" },
{ UPSTREAMFIELD_AUXFIELDTYPE, "UPSTREAMFIELD_AUXFIELDTYPE" },
{ UPSTREAMFIELD_ACCESSMODE, "UPSTREAMFIELD_ACCESSMODE" },
{ UPSTREAMFIELD_EXPIREON, "UPSTREAMFIELD_EXPIREON" },
{ UPSTREAMFIELD_USECOUNT, "UPSTREAMFIELD_USECOUNT" },
{ UPSTREAMFIELD_TIMEZONE, "UPSTREAMFIELD_TIMEZONE" },
{ UPSTREAMFIELD_EXCEPTIONGROUP, "UPSTREAMFIELD_EXCEPTIONGROUP" },
{ UPSTREAMFIELD_PRIMARYPIN, "UPSTREAMFIELD_PRIMARYPIN" },
{ UPSTREAMFIELD_AUXPIN, "UPSTREAMFIELD_AUXPIN" },
{ UPSTREAMFIELD_ALARMRECORDCOUNT, "UPSTREAMFIELD_ALARMRECORDCOUNT" },
{ UPSTREAMFIELD_ALARMRECORD, "UPSTREAMFIELD_ALARMRECORD" },
{ UPSTREAMFIELD_AUXCTLRVERSION, "UPSTREAMFIELD_AUXCTLRVERSION" },
{ 0, NULL }
};
static value_string_ext r3_upstreamfieldnames_ext = VALUE_STRING_EXT_INIT(r3_upstreamfieldnames);
static const value_string r3_usertypenames [] =
{
{ USERTYPE_NONE, "USERTYPE_NONE" },
{ USERTYPE_MASTER, "USERTYPE_MASTER" },
{ USERTYPE_EMERGENCY, "USERTYPE_EMERGENCY" },
{ USERTYPE_SUPERVISOR, "USERTYPE_SUPERVISOR" },
{ USERTYPE_USER, "USERTYPE_USER" },
{ USERTYPE_EXTENDED, "USERTYPE_EXTENDED" },
{ USERTYPE_PASSAGE, "USERTYPE_PASSAGE" },
{ USERTYPE_ONETIME, "USERTYPE_ONETIME" },
{ USERTYPE_PANIC, "USERTYPE_PANIC" },
{ USERTYPE_LOCKOUT, "USERTYPE_LOCKOUT" },
{ USERTYPE_RELOCK, "USERTYPE_RELOCK" },
{ USERTYPE_NOTIFY, "USERTYPE_NOTIFY" },
{ USERTYPE_COMM, "USERTYPE_COMM" },
{ USERTYPE_SUSPENDED, "USERTYPE_SUSPENDED" },
{ 0, NULL }
};
static value_string_ext r3_usertypenames_ext = VALUE_STRING_EXT_INIT(r3_usertypenames);
static const value_string r3_mfgnvramdumpnames [] =
{
{ 0, "All" },
{ 1, "PIC" },
{ 2, "User" },
{ 3, "Event" },
{ 0, NULL }
};
static value_string_ext r3_mfgnvramdumpnames_ext = VALUE_STRING_EXT_INIT(r3_mfgnvramdumpnames);
static const value_string r3_mfgremoteunlocknames [] =
{
{ 0, "Normal" },
{ 1, "Unlock" },
{ 2, "Lock" },
{ 0, NULL }
};
static value_string_ext r3_mfgremoteunlocknames_ext = VALUE_STRING_EXT_INIT(r3_mfgremoteunlocknames);
static const value_string r3_mfgtestpreservenames [] =
{
{ 0, "Save" },
{ 1, "Restore" },
{ 0, NULL }
};
static value_string_ext r3_mfgtestpreservenames_ext = VALUE_STRING_EXT_INIT(r3_mfgtestpreservenames);
static const value_string r3_daynames [] =
{
{ 0, "Sunday" },
{ 1, "Monday" },
{ 2, "Tueday" },
{ 3, "Wednesday" },
{ 4, "Thursday" },
{ 5, "Friday" },
{ 6, "Saturday" },
{ 0, NULL }
};
static value_string_ext r3_daynames_ext = VALUE_STRING_EXT_INIT(r3_daynames);
static const value_string r3_monthnames [] =
{
{ 0, "ERROR!" },
{ 1, "January" },
{ 2, "February" },
{ 3, "March" },
{ 4, "April" },
{ 5, "May" },
{ 6, "June" },
{ 7, "July" },
{ 8, "August" },
{ 9, "September" },
{ 10, "October" },
{ 11, "November" },
{ 12, "December" },
{ 0, NULL }
};
static value_string_ext r3_monthnames_ext = VALUE_STRING_EXT_INIT(r3_monthnames);
static const value_string r3_monthdaynames [] =
{
{ 0, "ERROR!" },
{ 1, " 1st" },
{ 2, " 2nd" },
{ 3, " 3rd" },
{ 4, " 4th" },
{ 5, " 5th" },
{ 6, " 6th" },
{ 7, " 7th" },
{ 8, " 8th" },
{ 9, " 9th" },
{ 10, "10th" },
{ 11, "11th" },
{ 12, "12th" },
{ 13, "13th" },
{ 14, "14th" },
{ 15, "15th" },
{ 16, "16th" },
{ 17, "17th" },
{ 18, "18th" },
{ 19, "19th" },
{ 20, "20th" },
{ 21, "21st" },
{ 22, "22nd" },
{ 23, "23rd" },
{ 24, "24th" },
{ 25, "25th" },
{ 26, "26th" },
{ 27, "27th" },
{ 28, "28th" },
{ 29, "29th" },
{ 30, "30th" },
{ 31, "31st" },
{ 0, NULL }
};
static value_string_ext r3_monthdaynames_ext = VALUE_STRING_EXT_INIT(r3_monthdaynames);
static const value_string r3_powertablenames [] =
{
{ 1, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
{ 2, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
{ 3, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
{ 4, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {12, 11, 11, 10, 10, 9, 9, 8}" },
{ 5, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {13, 12, 12, 11, 11, 10, 10, 9}" },
{ 6, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {14, 13, 13, 12, 12, 11, 11, 10}" },
{ 7, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {15, 14, 14, 13, 13, 12, 12, 11}" },
{ 8, "CONFIGITEM_PT_RANGE_1..CONFIGITEM_PT_RANGE_8 = {16, 15, 15, 14, 14, 13, 13, 12}" },
{ 0, NULL }
};
static value_string_ext r3_powertablenames_ext = VALUE_STRING_EXT_INIT(r3_powertablenames);
static const true_false_string tfs_rmtauthretry_flags =
{
"Retry",
"Deny"
};
static const true_false_string tfs_mortisepins_flags =
{
"High",
"Low"
};
static const true_false_string tfs_errornoerror_flags =
{
"Error",
"No Error"
};
static const string_string r3_snmanufacturernames [] =
{
{ "IT", "ITS" },
{ "KC", "Kimchuk" },
{ NULL, NULL }
};
static const string_string r3_snyearnames [] =
{
{ "5", "2005" },
{ "6", "2006" },
{ "7", "2007" },
{ "8", "2008" },
{ "9", "2009" },
{ "0", "2010" },
{ "1", "2011" },
{ "2", "2012" },
{ "3", "2013" },
{ "4", "2014" },
{ NULL, NULL }
};
static const string_string r3_snmodelnames [] =
{
{ "H", "Sx controller" },
{ "J", "Px controller" },
{ "D", "PG offline interface board" },
{ "E", "Px online interface board" },
{ "N", "Ethernet-PD board" },
{ "O", "CAM board" },
{ NULL, NULL }
};
static const string_string r3_sngroupnames [] =
{
{ "S", "Sargent" },
{ "P", "Persona" },
{ "C", "Corbin-Russwin" },
{ NULL, NULL }
};
static const string_string r3_snnidnames [] =
{
{ "A", "Ethernet" },
{ "B", "DPAC 802.11b" },
{ "C", "DPAC 802.11bg" },
{ "D", "Zigbee" },
{ "E", "GPRS" },
{ NULL, NULL }
};
static const string_string r3_snhidnames [] =
{
{ "00", "[None]" },
{ "01", "Keypad" },
{ "02", "eProx" },
{ "03", "eProx, Keypad" },
{ "04", "iProx" },
{ "05", "iProx, Keypad" },
{ "06", "iProx, eProx" },
{ "07", "iProx, eProx, Keypad" },
{ "08", "Mag Card" },
{ "09", "Mag Card, Keypad" },
{ "0a", "Mag Card, eProx" },
{ "0b", "Mag Card, eProx, Keypad" },
{ "0c", "Mag Card, iProx" },
{ "0d", "Mag Card, iProx, Keypad" },
{ "0e", "Mag Card, iProx, eProx" },
{ "0f", "Mag Card, iProx, eProx, Keypad" },
{ "10", "Biometric" },
{ "11", "Biometric, Keypad" },
{ "12", "Biometric, eProx" },
{ "13", "Biometric, eProx, Keypad" },
{ "14", "Biometric, iProx" },
{ "15", "Biometric, iProx, Keypad" },
{ "16", "Biometric, iProx, eProx" },
{ "17", "Biometric, iProx, eProx, Keypad" },
{ "18", "Biometric, Mag Card" },
{ "19", "Biometric, Mag Card, Keypad" },
{ "1a", "Biometric, Mag Card, eProx" },
{ "1b", "Biometric, Mag Card, eProx, Keypad" },
{ "1c", "Biometric, Mag Card, iProx" },
{ "1d", "Biometric, Mag Card, iProx, Keypad" },
{ "1e", "Biometric, Mag Card, iProx, eProx" },
{ "1f", "Biometric, Mag Card, iProx, eProx, Keypad" },
{ NULL, NULL }
};
static const string_string r3_snpowersupplynames [] =
{
{ "A", "Batteries" },
{ "B", "External power" },
{ "C", "Power over Ethernet" },
{ "D", "External power w/ backup" },
{ "E", "Power over Ethernet w/ backup" },
{ NULL, NULL }
};
static const string_string r3_snmortisenames [] =
{
{ "A", "Sargent 82276 mortise" },
{ "B", "Sargent 82277 mortise" },
{ "C", "Sargent 82278 mortise" },
{ "D", "Sargent 82279 mortise" },
{ "E", "Sargent 10G77 bored" },
{ "F", "Sargent 8877 exit" },
{ "G", "Sargent 8878 exit" },
{ "H", "Sargent 8977 exit" },
{ "I", "Sargent 8878 exit" },
{ "J", "Corbin-Russwin ML20736/ML20836 mortise" },
{ "K", "Corbin-Russwin ML20735/ML20835 mortise" },
{ "L", "Corbin-Russwin ML20734/ML20834 mortise" },
{ "M", "Corbin-Russwin ML20733/ML20833 mortise" },
{ "N", "Corbin-Russwin CL33734/CL33834 bored" },
{ "O", "Corbin-Russwin 9734/9834 exit" },
{ "P", "Corbin-Russwin 9733/9833 exit" },
{ "Q", "Corbin-Russwin 9M734/9M834 exit" },
{ "R", "Corbin-Russwin 9M733/9M833 exit" },
{ NULL, NULL }
};
static const int * r3_timezonearray[] = {
&hf_r3_timezonearray0,
&hf_r3_timezonearray1,
&hf_r3_timezonearray2,
&hf_r3_timezonearray3,
&hf_r3_timezonearray4,
&hf_r3_timezonearray5,
&hf_r3_timezonearray6,
&hf_r3_timezonearray7,
&hf_r3_timezonearray8,
&hf_r3_timezonearray9,
&hf_r3_timezonearray10,
&hf_r3_timezonearray11,
&hf_r3_timezonearray12,
&hf_r3_timezonearray13,
&hf_r3_timezonearray14,
&hf_r3_timezonearray15,
&hf_r3_timezonearray16,
&hf_r3_timezonearray17,
&hf_r3_timezonearray18,
&hf_r3_timezonearray19,
&hf_r3_timezonearray20,
&hf_r3_timezonearray21,
&hf_r3_timezonearray22,
&hf_r3_timezonearray23,
&hf_r3_timezonearray24,
&hf_r3_timezonearray25,
&hf_r3_timezonearray26,
&hf_r3_timezonearray27,
&hf_r3_timezonearray28,
&hf_r3_timezonearray29,
&hf_r3_timezonearray30,
&hf_r3_timezonearray31,
NULL
};
static const int * r3_definetimezone_daymap[] = {
&hf_r3_definetimezone_daymap0,
&hf_r3_definetimezone_daymap1,
&hf_r3_definetimezone_daymap2,
&hf_r3_definetimezone_daymap3,
&hf_r3_definetimezone_daymap4,
&hf_r3_definetimezone_daymap5,
&hf_r3_definetimezone_daymap6,
NULL
};
static const int * r3_nvramclearoptions[] = {
&hf_r3_nvramclearoptions0,
&hf_r3_nvramclearoptions1,
&hf_r3_nvramclearoptions2,
&hf_r3_nvramclearoptions3,
&hf_r3_nvramclearoptions4,
&hf_r3_nvramclearoptions5,
&hf_r3_nvramclearoptions6,
&hf_r3_nvramclearoptions7,
&hf_r3_nvramclearoptions8,
&hf_r3_nvramclearoptions9,
&hf_r3_nvramclearoptions10,
&hf_r3_nvramclearoptions11,
&hf_r3_nvramclearoptions12,
&hf_r3_nvramclearoptions13,
&hf_r3_nvramclearoptions14,
&hf_r3_nvramclearoptions15,
NULL
};
/*
* Mapping table so dissect_r3_cmd_setconfig() knows what the configuration item type is
*/
static configType_e configMap [] =
{
/* CONFIGITEM_SERIAL_NUMBER */ CONFIGTYPE_STRING,
/* CONFIGITEM_CRYPT_KEY */ CONFIGTYPE_STRING,
/* CONFIGITEM_HARDWARE_OPTIONS_MFG */ CONFIGTYPE_16,
/* CONFIGITEM_HARDWARE_OPTIONS */ CONFIGTYPE_16,
/* CONFIGITEM_NVRAM_CHANGES */ CONFIGTYPE_16,
/* CONFIGITEM_NVRAMDIRTY */ CONFIGTYPE_BOOL,
/* CONFIGITEM_NVRAM_WV */ CONFIGTYPE_BOOL,
/* CONFIGITEM_ENABLE_WDT */ CONFIGTYPE_BOOL,
/* CONFIGITEM_EARLY_ACK */ CONFIGTYPE_BOOL,
/* CONFIGITEM_CONSOLE_AES_ONLY */ CONFIGTYPE_BOOL,
/* CONFIGITEM_RADIO_AES_ONLY */ CONFIGTYPE_BOOL,
/* CONFIGITEM_NDRLE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_SOMF */ CONFIGTYPE_BOOL,
/* CONFIGITEM_NOGAF */ CONFIGTYPE_BOOL,
/* CONFIGITEM_CARD_READER_POWER */ CONFIGTYPE_BOOL,
/* CONFIGITEM_PROX_ENABLE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_CKSUMCONFIG */ CONFIGTYPE_BOOL,
/* CONFIGITEM_DAILY_BATTERY_CHECK */ CONFIGTYPE_BOOL,
/* CONFIGITEM_DAILY_BATTERY_CHECK_HOUR */ CONFIGTYPE_8,
/* CONFIGITEM_BATTERY_LOW */ CONFIGTYPE_BOOL,
/* CONFIGITEM_LRU_HEAD */ CONFIGTYPE_16,
/* CONFIGITEM_LRU_TAIL */ CONFIGTYPE_16,
/* CONFIGITEM_RTC_CALIBRATION */ CONFIGTYPE_8,
/* CONFIGITEM_ACVREQUESTER */ CONFIGTYPE_8,
/* CONFIGITEM_LOCAL_LED */ CONFIGTYPE_8,
/* CONFIGITEM_ERRCNT_XORLEN */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_CRC */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_NOTSIGIL */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_TIMEOUT */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_TOOLONG */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_TOOSHORT */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_HITDEFAULT */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_OVERRUN */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_UARTFE */ CONFIGTYPE_16,
/* CONFIGITEM_ERRCNT_UARTOE */ CONFIGTYPE_16,
/* CONFIGITEM_DST_SET */ CONFIGTYPE_BOOL,
/* CONFIGITEM_DST_MODE */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_MONTH */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_DOM */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_OOD */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_DOW */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_HOUR */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_MINUTE */ CONFIGTYPE_8,
/* CONFIGITEM_DST_FORWARD_ADJUST */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_MONTH */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_DOM */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_OOD */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_DOW */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_HOUR */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_MINUTE */ CONFIGTYPE_8,
/* CONFIGITEM_DST_BACK_ADJUST */ CONFIGTYPE_8,
/* CONFIGITEM_EVENTLOG_ZEROMEM */ CONFIGTYPE_BOOL,
/* CONFIGITEM_EVENTLOG_BEGIN */ CONFIGTYPE_16,
/* CONFIGITEM_EVENTLOG_RECORD */ CONFIGTYPE_16,
/* CONFIGITEM_EVENTLOG_ENTRIES */ CONFIGTYPE_16,
/* CONFIGITEM_EVENTLOG_WARNDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_EVENTLOG_WARNEVERY */ CONFIGTYPE_16,
/* CONFIGITEM_EVENTLOG_RMTDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_DECLINEDLOG_ZEROMEM */ CONFIGTYPE_BOOL,
/* CONFIGITEM_DECLINEDLOG_BEGIN */ CONFIGTYPE_16,
/* CONFIGITEM_DECLINEDLOG_RECORD */ CONFIGTYPE_16,
/* CONFIGITEM_DECLINEDLOG_ENTRIES */ CONFIGTYPE_16,
/* CONFIGITEM_DECLINEDLOG_WARNDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_DECLINEDLOG_WARNEVERY */ CONFIGTYPE_16,
/* CONFIGITEM_DECLINEDLOG_RMTDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_ALARMLOG_ZEROMEM */ CONFIGTYPE_BOOL,
/* CONFIGITEM_ALARMLOG_BEGIN */ CONFIGTYPE_16,
/* CONFIGITEM_ALARMLOG_RECORD */ CONFIGTYPE_16,
/* CONFIGITEM_ALARMLOG_ENTRIES */ CONFIGTYPE_16,
/* CONFIGITEM_ALARMLOG_WARNDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_ALARMLOG_WARNEVERY */ CONFIGTYPE_16,
/* CONFIGITEM_ALARMLOG_RMTDEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_VISIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
/* CONFIGITEM_AUDIBLE_FEEDBACK */ CONFIGTYPE_BOOL,
/* CONFIGITEM_VISIBLE_INDICATORS */ CONFIGTYPE_BOOL,
/* CONFIGITEM_AUDIBLE_INDICATORS */ CONFIGTYPE_BOOL,
/* CONFIGITEM_2NDPINDURATION */ CONFIGTYPE_8,
/* CONFIGITEM_LOCKOUT_ATTEMPTS */ CONFIGTYPE_8,
/* CONFIGITEM_LOCKOUT_DURATION */ CONFIGTYPE_8,
/* CONFIGITEM_KEYPAD_INACTIVITY */ CONFIGTYPE_8,
/* CONFIGITEM_ICIDLE_DURATION */ CONFIGTYPE_8,
/* CONFIGITEM_WRITE_DECLINED_LOG */ CONFIGTYPE_BOOL,
/* CONFIGITEM_LOW_BATTERY_INDICATOR */ CONFIGTYPE_BOOL,
/* CONFIGITEM_PANIC_MODE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_TIMEZONE_ENABLE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_EXCEPTION_ENABLE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_AUTOUNLOCK_ENABLE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_LOCK_PRIORITY_EMERGENCY */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_SUPERVISOR */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_USER */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_PASSAGE */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_PANIC */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_LOCKOUT */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_RELOCK */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_BOLTTHROWN */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_CONFIGCHANGE */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_PRIORITY_REMOTE */ CONFIGTYPE_8,
/* CONFIGITEM_LOCK_TYPE */ CONFIGTYPE_8,
/* CONFIGITEM_DOUBLE_PULSE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_DOUBLE_DELAY */ CONFIGTYPE_8,
/* CONFIGITEM_MOTOR_DURATION */ CONFIGTYPE_8,
/* CONFIGITEM_MORTISE_TYPE */ CONFIGTYPE_8,
/* CONFIGITEM_UNLOCK_TIME */ CONFIGTYPE_8,
/* CONFIGITEM_EXT_UNLOCK_TIME */ CONFIGTYPE_8,
/* CONFIGITEM_DOOR_AJAR_TIME */ CONFIGTYPE_8,
/* CONFIGITEM_SESSION_TIMEOUT */ CONFIGTYPE_8,
/* CONFIGITEM_RETRY_ON_TIMEOUT */ CONFIGTYPE_BOOL,
/* CONFIGITEM_UNSOLICITED_ENCRYPT */ CONFIGTYPE_8,
/* CONFIGITEM_RMT_AUTH_TIMEOUT */ CONFIGTYPE_8,
/* CONFIGITEM_RMT_AUTH_DEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_ALARM_DEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_NOTIFY_DEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_COMMUSER_DEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_SCHEDULER_DEVICE */ CONFIGTYPE_8,
/* CONFIGITEM_SCHEDULER_TYPE */ CONFIGTYPE_8,
/* CONFIGITEM_SCHEDULER_AWAKE */ CONFIGTYPE_8,
/* CONFIGITEM_SCHEDULER_PERIOD */ CONFIGTYPE_16,
/* CONFIGITEM_SCHEDULER_HOD */ CONFIGTYPE_STRING,
/* CONFIGITEM_SCHEDULER_DOW */ CONFIGTYPE_8,
/* CONFIGITEM_SCHEDULER_DOM */ CONFIGTYPE_32,
/* CONFIGITEM_SCHEDULER_HM1 */ CONFIGTYPE_16,
/* CONFIGITEM_SCHEDULER_HM2 */ CONFIGTYPE_16,
/* CONFIGITEM_SCHEDULER_HM3 */ CONFIGTYPE_16,
/* CONFIGITEM_SCHEDULER_HM4 */ CONFIGTYPE_16,
/* CONFIGITEM_RADIO_TYPE */ CONFIGTYPE_8,
/* CONFIGITEM_RADIO_MODE */ CONFIGTYPE_8,
/* CONFIGITEM_RADIO_TIMEOUT */ CONFIGTYPE_8,
/* CONFIGITEM_RADIO_ATTEMPTS */ CONFIGTYPE_8,
/* CONFIGITEM_RADIO_HOUSEKEEPING */ CONFIGTYPE_8,
/* CONFIGITEM_RADIO_LEAPUSERNAME */ CONFIGTYPE_STRING,
/* CONFIGITEM_RADIO_LEAPPASSWORD */ CONFIGTYPE_STRING,
/* CONFIGITEM_INHIBIT_VOLTAGE */ CONFIGTYPE_8,
/* CONFIGITEM_LOW_VOLTAGE */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_1 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_2 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_3 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_4 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_5 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_6 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_7 */ CONFIGTYPE_8,
/* CONFIGITEM_PT_RANGE_8 */ CONFIGTYPE_8,
/* CONFIGITEM_MAGCARD_IFS */ CONFIGTYPE_BOOL,
/* CONFIGITEM_MAGCARD_FIELDS */ CONFIGTYPE_8,
/* CONFIGITEM_MAGCARD_OFFSET */ CONFIGTYPE_8,
/* CONFIGITEM_MAGCARD_DIGITS */ CONFIGTYPE_8,
/* CONFIGITEM_ALARMS */ CONFIGTYPE_STRING,
/* CONFIGITEM_FILTERS */ CONFIGTYPE_STRING,
/* CONFIGITEM_ALARMSTATE */ CONFIGTYPE_8,
/* CONFIGITEM_DOORSTATE */ CONFIGTYPE_8,
/* CONFIGITEM_DPACDEBUG */ CONFIGTYPE_BOOL,
/* CONFIGITEM_FAILOPENSECURE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_REPLACED_VOLTAGE */ CONFIGTYPE_8,
/* CONFIGITEM_RX_HELD_TIME */ CONFIGTYPE_8,
/* CONFIGITEM_PACKET_TIMEOUT */ CONFIGTYPE_8,
/* CONFIGITEM_EXTENDEDRESPONSE */ CONFIGTYPE_BOOL,
/* CONFIGITEM_PASSAGEMODEINDICATOR */ CONFIGTYPE_BOOL,
/* CONFIGITEM_PFMRETURNTIME */ CONFIGTYPE_8
};
/*
* Dissectors for each command
*/
static void dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void (*r3command_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
{
/* CMD_RESPONSE */ dissect_r3_cmd_response,
/* CMD_HANDSHAKE */ dissect_r3_cmd_handshake,
/* CMD_KILLSESSION */ dissect_r3_cmd_killsession,
/* CMD_QUERYSERIALNUMBER */ dissect_r3_cmd_queryserialnumber,
/* CMD_QUERYVERSION */ dissect_r3_cmd_queryversion,
/* CMD_SETDATETIME */ dissect_r3_cmd_setdatetime,
/* CMD_QUERYDATETIME */ dissect_r3_cmd_querydatetime,
/* CMD_SETCONFIG */ dissect_r3_cmd_setconfig,
/* CMD_GETCONFIG */ dissect_r3_cmd_getconfig,
/* CMD_MANAGEUSER */ dissect_r3_cmd_manageuser,
/* CMD_DELETEUSERS */ dissect_r3_cmd_deleteusers,
/* CMD_DEFINEEXCEPTION */ dissect_r3_cmd_defineexception,
/* CMD_DEFINEEXCEPTIONGROUP */ dissect_r3_cmd_defineexceptiongroup,
/* CMD_DEFINECALENDAR */ dissect_r3_cmd_definecalendar,
/* CMD_DEFINETIMEZONE */ dissect_r3_cmd_definetimezone,
/* CMD_RMTAUTHRETRY */ dissect_r3_cmd_rmtauthretry,
/* CMD_FILTERS */ dissect_r3_cmd_filters,
/* CMD_ALARMCONFIGURE */ dissect_r3_cmd_alarmconfigure,
/* CMD_EVENTLOGDUMP */ dissect_r3_cmd_eventlogdump,
/* CMD_DECLINEDLOGDUMP */ dissect_r3_cmd_declinedlogdump,
/* CMD_ALARMLOGDUMP */ dissect_r3_cmd_alarmlogdump,
/* CMD_DOWNLOADFIRMWARE */ dissect_r3_cmd_downloadfirmware,
/* CMD_DOWNLOADFIRMWARETIMEOUT */ dissect_r3_cmd_downloadfirmwaretimeout,
/* CMD_POWERTABLESELECTION */ dissect_r3_cmd_powertableselection,
/* CMD_CLEARNVRAM */ dissect_r3_cmd_clearnvram,
/* CMD_DPAC */ dissect_r3_cmd_dpac,
/* CMD_SELFTEST */ dissect_r3_cmd_selftest,
/* CMD_RESET */ dissect_r3_cmd_reset,
/* CMD_LOGWRITE */ dissect_r3_cmd_logwrite,
/* CMD_MFGCOMMAND */ dissect_r3_cmd_mfgcommand,
/* CMD_NVRAMBACKUP */ dissect_r3_cmd_nvrambackup,
/* CMD_EXTENDEDRESPONSE */ dissect_r3_cmd_extendedresponse
};
static void dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void (*r3commandmfg_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
{
/* CMDMFG_SETSERIALNUMBER */ dissect_r3_cmdmfg_setserialnumber,
/* CMDMFG_SETCRYPTKEY */ dissect_r3_cmdmfg_setcryptkey,
/* CMDMFG_DUMPNVRAM */ dissect_r3_cmdmfg_dumpnvram,
/* CMDMFG_TERMINAL */ dissect_r3_cmdmfg_terminal,
/* CMDMFG_REMOTEUNLOCK */ dissect_r3_cmdmfg_remoteunlock,
/* CMDMFG_AUXCTLRVERSION */ dissect_r3_cmdmfg_auxctlrversion,
/* CMDMFG_IOPINS */ dissect_r3_cmdmfg_iopins,
/* CMDMFG_ADCS */ dissect_r3_cmdmfg_adcs,
/* CMDMFG_HARDWAREID */ dissect_r3_cmdmfg_hardwareid,
/* CMDMFG_CHECKPOINTLOGDUMP */ dissect_r3_cmdmfg_checkpointlogdump,
/* CMDMFG_CHECKPOINTLOGCLEAR */ dissect_r3_cmdmfg_checkpointlogclear,
/* CMDMFG_READREGISTERS */ dissect_r3_cmdmfg_readregisters,
/* CMDMFG_FORCEOPTIONS */ dissect_r3_cmdmfg_forceoptions,
/* CMDMFG_COMMUSER */ dissect_r3_cmdmfg_commuser,
/* CMDMFG_DUMPKEYPAD */ dissect_r3_cmdmfg_dumpkeypad,
/* CMDMFG_BATTERYCHECK */ dissect_r3_cmdmfg_batterycheck,
/* CMDMFG_RAMREFRESH */ dissect_r3_cmdmfg_ramrefresh,
/* CMDMFG_TASKFLAGS */ dissect_r3_cmdmfg_taskflags,
/* CMDMFG_TIMERCHAIN */ dissect_r3_cmdmfg_timerchain,
/* CMDMFG_PEEKPOKE */ dissect_r3_cmdmfg_peekpoke,
/* CMDMFG_LOCKSTATE */ dissect_r3_cmdmfg_lockstate,
/* CMDMFG_CAPABILITIES */ dissect_r3_cmdmfg_capabilities,
/* CMDMFG_DUMPM41T81 */ dissect_r3_cmdmfg_dumpm41t81,
/* CMDMFG_DEBUGLOGDUMP */ dissect_r3_cmdmfg_debuglogdump,
/* CMDMFG_DEBUGLOGCLEAR */ dissect_r3_cmdmfg_debuglogclear,
/* CMDMFG_TESTWDT */ dissect_r3_cmdmfg_testwdt,
/* CMDMFG_QUERYCKSUM */ dissect_r3_cmdmfg_querycksum,
/* CMDMFG_VALIDATECHECKSUMS */ dissect_r3_cmdmfg_validatechecksums,
/* CMDMFG_REBUILDLRUCACHE */ dissect_r3_cmdmfg_rebuildlrucache,
/* CMDMFG_TZUPDATE */ dissect_r3_cmdmfg_tzupdate,
/* CMDMFG_TESTPRESERVE */ dissect_r3_cmdmfg_testpreserve,
/* CMDMFG_MORTISESTATELOGDUMP */ dissect_r3_cmdmfg_mortisestatelogdump,
/* CMDMFG_MORTISESTATELOGCLEAR */ dissect_r3_cmdmfg_mortisestatelogclear,
/* CMDMFG_MORTISEPINS */ dissect_r3_cmdmfg_mortisepins,
/* CMDMFG_HALTANDCATCHFIRE */ dissect_r3_cmdmfg_haltandcatchfire
};
static void dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void (*r3response_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
{
/* RESPONSETYPE_OK */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_ERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_HASDATA */ dissect_r3_response_hasdata,
/* RESPONSETYPE_NOHANDLER */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOSESSION */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_BADCOMMAND */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_BADPARAMETER */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_BADPARAMETERLEN */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_MISSINGPARAMETER */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_DUPLICATEPARAMETER */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PARAMETERCONFLICT */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_BADDEVICE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NVRAMERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NVRAMERRORNOACK */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NVRAMERRORNOACK32 */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOTI2CADDRESS */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_FIRMWAREERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_DUMPINPROGRESS */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_INTERNALERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOTIMPLEMENTED */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PINFORMATERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PINEXISTS */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PINNOTFOUND */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_USERACTIVE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_USERINACTIVE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PARENTNOTFOUND */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOCHAIN */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_CAUGHTINLOOP */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_EVENTFILTERED */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PAYLOADTOOLARGE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_ENDOFDATA */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_RMTAUTHREJECTED */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NVRAMVERSIONERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOHARDWARE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_SCHEDULERCONFLICT */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NVRAMWRITEERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_DECLINEDFILTERED */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NECONFIGPARM */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_FLASHERASEERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_FLASHWRITEERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_BADNVBACKUP */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_EARLYACK */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_ALARMFILTERED */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_ACVFAILURE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_USERCHECKSUMERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_CHECKSUMERROR */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_RTCSQWFAILURE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_PRIORITYSHUTDOWN */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_NOTMODIFIABLE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_CANTPRESERVE */ dissect_r3_response_singlebyte,
/* RESPONSETYPE_INPASSAGEMODE */ dissect_r3_response_singlebyte
};
static void dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void (*r3upstreamcommand_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
{
/* UPSTREAMCOMMAND_RESERVED */ dissect_r3_upstreamcommand_reserved,
/* UPSTREAMCOMMAND_DEBUGMSG */ dissect_r3_upstreamcommand_debugmsg,
/* UPSTREAMCOMMAND_QUERYVERSION */ dissect_r3_upstreamcommand_queryversion,
/* UPSTREAMCOMMAND_QUERYDATETIME */ dissect_r3_upstreamcommand_querydatetime,
/* UPSTREAMCOMMAND_QUERYSERIALNUMBER */ dissect_r3_upstreamcommand_queryserialnumber,
/* UPSTREAMCOMMAND_DUMPEVENTLOG */ dissect_r3_upstreamcommand_dumpeventlog,
/* UPSTREAMCOMMAND_DUMPNVRAM */ dissect_r3_upstreamcommand_dumpnvram,
/* UPSTREAMCOMMAND_RMTAUTHREQUEST */ dissect_r3_upstreamcommand_rmtquthrequest,
/* UPSTREAMCOMMAND_RETRIEVEUSER */ dissect_r3_upstreamcommand_retrieveuser,
/* UPSTREAMCOMMAND_QUERYCONFIG */ dissect_r3_upstreamcommand_queryconfig,
/* UPSTREAMCOMMAND_RMTEVENTLOGRECORD */ dissect_r3_upstreamcommand_rmteventlogrecord,
/* UPSTREAMCOMMAND_DPAC */ dissect_r3_upstreamcommand_dpac,
/* UPSTREAMCOMMAND_NOTIFY */ dissect_r3_upstreamcommand_notify,
/* UPSTREAMCOMMAND_MFG */ dissect_r3_upstreamcommand_mfg,
/* UPSTREAMCOMMAND_EVENTLOGWARNING */ dissect_r3_upstreamcommand_eventlogwarning,
/* UPSTREAMCOMMAND_DUMPNVRAMRLE */ dissect_r3_upstreamcommand_dumpnvramrle,
/* UPSTREAMCOMMAND_RMTDECLINEDRECORD */ dissect_r3_upstreamcommand_rmtdeclinedrecord,
/* UPSTREAMCOMMAND_DECLINEDWARNING */ dissect_r3_upstreamcommand_declinedwarning,
/* UPSTREAMCOMMAND_DUMPDECLINEDLOG */ dissect_r3_upstreamcommand_dumpdeclinedlog,
/* UPSTREAMCOMMAND_RMTALARMRECORD */ dissect_r3_upstreamcommand_rmtalarmrecord,
/* UPSTREAMCOMMAND_ALARMWARNING */ dissect_r3_upstreamcommand_alarmwarning,
/* UPSTREAMCOMMAND_DUMPALARMLOG */ dissect_r3_upstreamcommand_dumpalarmlog,
/* UPSTREAMCOMMAND_CONNECTSCHEDULER */ dissect_r3_upstreamcommand_connectscheduler,
/* UPSTREAMCOMMAND_CONNECTCOMMUSER */ dissect_r3_upstreamcommand_connectcommuser,
/* UPSTREAMCOMMAND_CONNECTALARM */ dissect_r3_upstreamcommand_commandalarm,
/* UPSTREAMCOMMAND_DUMPDEBUGLOG */ dissect_r3_upstreamcommand_dumpdebuglog
};
static void dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree);
static void (*r3upstreammfgfield_dissect []) (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree) =
{
/* MFGFIELD_IOPINS */ dissect_r3_upstreammfgfield_iopins,
/* MFGFIELD_ADCS */ dissect_r3_upstreammfgfield_adcs,
/* MFGFIELD_HARDWAREID */ dissect_r3_upstreammfgfield_hardwareid,
/* MFGFIELD_CHECKPOINTLOG */ dissect_r3_upstreammfgfield_checkpointlog,
/* MFGFIELD_CPUREGISTERS */ dissect_r3_upstreammfgfield_cpuregisters,
/* MFGFIELD_TASKFLAGS */ dissect_r3_upstreammfgfield_taskflags,
/* MFGFIELD_TIMERCHAIN */ dissect_r3_upstreammfgfield_timerchain,
/* MFGFIELD_PEEKPOKE */ dissect_r3_upstreammfgfield_peekpoke,
/* MFGFIELD_LOCKSTATE */ dissect_r3_upstreammfgfield_lockstate,
/* MFGFIELD_CAPABILITIES */ dissect_r3_upstreammfgfield_capabilities,
/* MFGFIELD_DUMPM41T81 */ dissect_r3_upstreammfgfield_dumpm41t81,
/* MFGFIELD_NVRAMCHECKSUMVALUE */ dissect_r3_upstreammfgfield_nvramchecksumvalue,
/* MFGFIELD_CHECKSUMRESULTS */ dissect_r3_upstreammfgfield_checksumresults,
/* MFGFIELD_MORTISESTATELOG */ dissect_r3_upstreammfgfield_mortisestatelog,
/* MFGFIELD_MORTISEPINS */ dissect_r3_upstreammfgfield_mortisepins,
/* MFGFIELD_KEYPADCHAR */ dissect_r3_upstreammfgfield_keypadchar,
/* MFGFIELD_MAGCARD */ dissect_r3_upstreammfgfield_magcard,
/* MFGFIELD_PROXCARD */ dissect_r3_upstreammfgfield_proxcard
};
/*
* ***************************************************************************
*/
static void
dissect_serialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree, int hf_index)
{
proto_item *sn_item;
proto_tree *sn_tree;
const gchar *s;
tvb_ensure_bytes_exist (tvb, start_offset, 16);
if (!tree)
return;
sn_item = proto_tree_add_item (tree, hf_index, tvb, start_offset, 16, ENC_ASCII|ENC_NA);
sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 0, 2, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_manufacturer, tvb, start_offset + 0, 2, s, "%s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 2, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_year, tvb, start_offset + 2, 1, s, "%s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
proto_tree_add_item(sn_tree, hf_r3_sn_week, tvb, start_offset + 3, 2, ENC_ASCII|ENC_NA);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 5, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_model, tvb, start_offset + 5, 1, s, "%s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
proto_tree_add_item(sn_tree, hf_r3_sn_sequence, tvb, start_offset + 6, 4, ENC_ASCII|ENC_NA);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 10, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_group, tvb, start_offset + 10, 1, s, "%s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 11, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_nid, tvb, start_offset + 11, 1, s, "%s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 12, 2, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_hid, tvb, start_offset + 12, 2, s, "%s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 14, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_power_supply, tvb, start_offset + 14, 1, s, "%s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 15, 1, ENC_ASCII|ENC_NA);
proto_tree_add_string_format_value(sn_tree, hf_r3_sn_mortise, tvb, start_offset + 15, 1, s, "%s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
}
/*
* ***************************************************************************
*
* We've already ensured we have enough bytes in the table via tvb_ensure_bytes_exist()
*
*/
static void
dissect_r3_upstreamfields (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
guint32 offset = 0;
DISSECTOR_ASSERT(start_offset == 0);
while (offset < tvb_reported_length (tvb))
{
guint32 fieldLength = tvb_get_guint8 (tvb, offset + 0);
guint32 fieldType = tvb_get_guint8 (tvb, offset + 1);
guint32 dataLength = fieldLength - 2;
proto_item *upstreamfield_item;
proto_item *upstreamfield_length;
proto_tree *upstreamfield_tree;
const gchar *usfn;
usfn = val_to_str_ext_const (fieldType, &r3_upstreamfieldnames_ext, "[Unknown Field]");
upstreamfield_item = proto_tree_add_none_format (tree, hf_r3_upstreamfield, tvb, offset + 0, fieldLength, "Upstream Field: %s (%u)", usfn, fieldType);
upstreamfield_tree = proto_item_add_subtree (upstreamfield_item, ett_r3upstreamfield);
upstreamfield_length = proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldtype, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
if (fieldLength < 2)
{
dataLength = 0;
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
}
offset += 2;
switch (fieldType)
{
/*
* Booleans, 8 & 16 bit values
*/
case UPSTREAMFIELD_NOTUSED :
case UPSTREAMFIELD_PRIMARYPIN :
case UPSTREAMFIELD_AUXPIN :
case UPSTREAMFIELD_ACCESSALWAYS :
case UPSTREAMFIELD_CACHED :
case UPSTREAMFIELD_ENTRYDEVICE :
case UPSTREAMFIELD_PPMIFIELDTYPE :
case UPSTREAMFIELD_RESPONSEWINDOW :
case UPSTREAMFIELD_USERTYPE :
case UPSTREAMFIELD_PRIMARYFIELDTYPE :
case UPSTREAMFIELD_AUXFIELDTYPE :
case UPSTREAMFIELD_ACCESSMODE :
case UPSTREAMFIELD_USECOUNT :
case UPSTREAMFIELD_EXCEPTIONGROUP :
case UPSTREAMFIELD_NAR :
case UPSTREAMFIELD_SEQUENCENUMBER :
case UPSTREAMFIELD_USERNUMBER :
case UPSTREAMFIELD_EVENTLOGRECORDCOUNT :
case UPSTREAMFIELD_DECLINEDRECORDCOUNT :
case UPSTREAMFIELD_ALARMRECORDCOUNT :
proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
break;
/*
* Strings
*/
case UPSTREAMFIELD_PIN :
case UPSTREAMFIELD_VERSION :
case UPSTREAMFIELD_AUXCTLRVERSION :
proto_tree_add_item (upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType], tvb, offset, dataLength, ENC_ASCII|ENC_NA);
break;
/*
* Special types
*/
case UPSTREAMFIELD_SERIALNUMBER :
{
tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, offset, dataLength);
dissect_serialnumber (sn_tvb, 0, length, pinfo, upstreamfield_tree, hf_r3_upstreamfieldarray [fieldType]);
}
break;
case UPSTREAMFIELD_EVENTLOGRECORD :
{
if (dataLength != 9)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed event log field -- expected 9 octets");
}
else
{
proto_tree *eventlog_tree;
if (!upstreamfield_tree)
break;
eventlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3eventlogrecord, NULL, "Event Log Record");
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, offset + 8, 1, ENC_LITTLE_ENDIAN);
}
}
break;
case UPSTREAMFIELD_DATETIME :
{
if (dataLength != 8)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed date/time field -- expected 8 octets");
}
else
{
proto_tree *datetime_tree;
if (!upstreamfield_tree)
break;
datetime_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 8, ett_r3datetime, NULL,
"Date/Time: %02u/%02u/%02u-%u %02u:%02u:%02u %u",
tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1), tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 3),
tvb_get_guint8 (tvb, offset + 4), tvb_get_guint8 (tvb, offset + 5), tvb_get_guint8 (tvb, offset + 6), tvb_get_guint8 (tvb, offset + 7));
proto_tree_add_item (datetime_tree, hf_r3_datetime_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_dow, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_hours, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_minutes, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_seconds, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (datetime_tree, hf_r3_datetime_dst, tvb, offset + 7, 1, ENC_LITTLE_ENDIAN);
}
}
break;
case UPSTREAMFIELD_DECLINEDRECORD :
{
if (dataLength != 49)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed declined log field -- expected 49 octets");
}
else
{
proto_tree *declinedlog_tree;
guint8 cred1type;
guint8 cred2type;
if (!upstreamfield_tree)
break;
declinedlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 49, ett_r3declinedlogrecord, NULL, "Declined Log Record");
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, offset + 6, 2, ENC_LITTLE_ENDIAN);
cred1type = tvb_get_guint8 (tvb, offset + 8) & 0x07;
cred2type = (tvb_get_guint8 (tvb, offset + 8) & 0x38) >> 3;
proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, offset, 1, cred1type);
proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, offset, 1, cred2type);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, offset + 9, 19, ENC_NA);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, offset + 28, 19, ENC_NA);
}
}
break;
case UPSTREAMFIELD_EXPIREON :
{
if (dataLength != 3)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
}
else
{
proto_tree *expireon_tree;
if (!upstreamfield_tree)
break;
expireon_tree = proto_tree_add_subtree_format(upstreamfield_tree, tvb, offset, 3, ett_r3expireon, NULL,
"Expire YY/MM/DD: %02u/%02u/%02u",
tvb_get_guint8 (tvb, offset + 2), tvb_get_guint8 (tvb, offset + 0), tvb_get_guint8 (tvb, offset + 1));
proto_tree_add_item (expireon_tree, hf_r3_expireon_month, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (expireon_tree, hf_r3_expireon_day, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (expireon_tree, hf_r3_expireon_year, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
}
}
break;
case UPSTREAMFIELD_TIMEZONE :
{
if (dataLength != 4)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
}
else
{
proto_tree_add_bitmask(upstreamfield_tree, tvb, offset, hf_r3_upstreamfieldarray[fieldType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
}
}
break;
case UPSTREAMFIELD_ALARMRECORD :
{
if (dataLength != 9)
{
expert_add_info_format(pinfo, upstreamfield_length, &ei_r3_malformed_length, "Malformed alarm log field -- expected 9 octets");
}
else
{
proto_tree *alarmlog_tree;
if (!upstreamfield_tree)
break;
alarmlog_tree = proto_tree_add_subtree(upstreamfield_tree, tvb, offset, 9, ett_r3alarmlogrecord, NULL, "Alarm Record");
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, offset + 7, 2, ENC_LITTLE_ENDIAN);
}
}
break;
default :
proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset, dataLength, "Unknown Field Type");
break;
}
offset += dataLength;
}
}
/*
* ***************************************************************************
*
* These are passed a tvb that contains whatever occurs after the [UPSTREAMCOMMAND_*] byte
*/
static void
dissect_r3_upstreamcommand_reserved (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree_add_expert(tree, pinfo, &ei_r3_reserved_upstream_command_value, tvb, start_offset, length);
}
static void
dissect_r3_upstreamcommand_debugmsg (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *debugmsg_tree;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
debugmsg_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3debugmsg, NULL, "Debug message");
proto_tree_add_item (debugmsg_tree, hf_r3_debugmsg, tvb, 1, -1, ENC_ASCII|ENC_NA);
}
static void
dissect_r3_upstreamcommand_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dumpeventlog (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
DISSECTOR_ASSERT(start_offset == 0);
tvb_ensure_bytes_exist (tvb, 0, 11);
if (length != 11)
{
expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Malformed event log record -- expected 10 octets");
}
else
{
proto_tree *eventlog_tree;
const gchar *en;
if (!tree)
return;
en = val_to_str_ext_const (tvb_get_guint8 (tvb, 10), &r3_eventnames_ext, "[Unknown Event]");
eventlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 10, ett_r3eventlogrecord, NULL,
"Event Log Record %u (%s)", tvb_get_letohs (tvb, 0), en);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (eventlog_tree, hf_r3_eventlog_event, tvb, 10, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreamcommand_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
DISSECTOR_ASSERT(start_offset == 0);
tvb_ensure_bytes_exist (tvb, 0, 3);
if (!tree)
return;
proto_tree_add_item (tree, hf_r3_nvramdump_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_nvramdump_length, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_nvramdump_data, tvb, 3, tvb_get_guint8 (tvb, 2), ENC_NA);
}
static void
dissect_r3_upstreamcommand_rmtquthrequest (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_retrieveuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_queryconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint32 offset = 0;
DISSECTOR_ASSERT(start_offset == 0);
if (!tree)
return;
while (offset < tvb_reported_length (tvb))
{
proto_item *pi;
proto_tree *upstreamfield_tree;
const gchar *ci;
guint8 item_length;
ci = val_to_str_ext_const (tvb_get_guint8 (tvb, offset + 1), &r3_configitemnames_ext, "[Unknown Configuration Item]");
item_length = tvb_get_guint8 (tvb, offset + 0);
upstreamfield_tree = proto_tree_add_subtree_format(tree, tvb, offset + 0, item_length, ett_r3upstreamfield, NULL,
"Config Field: %s (%u)", ci, tvb_get_guint8 (tvb, offset + 1));
pi = proto_tree_add_item (upstreamfield_tree, hf_r3_configitemlength, tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
if (item_length == 0) {
expert_add_info_format(pinfo, pi, &ei_r3_malformed_length, "Invalid item length");
return;
}
proto_tree_add_item (upstreamfield_tree, hf_r3_configitem, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemtype, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
switch (tvb_get_guint8 (tvb, offset + 2))
{
case CONFIGTYPE_NONE :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata, tvb, offset + 3, item_length - 3, ENC_NA);
break;
case CONFIGTYPE_BOOL :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_bool, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_8 :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_8, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_16 :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_16, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_32 :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_32, tvb, offset + 3, 4, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_STRING :
proto_tree_add_item (upstreamfield_tree, hf_r3_configitemdata_string, tvb, offset + 3, item_length - 3, ENC_ASCII|ENC_NA);
break;
default :
proto_tree_add_none_format (upstreamfield_tree, hf_r3_upstreamfielderror, tvb, offset + 3, item_length - 3, "Unknown Field Type");
break;
}
offset += item_length;
}
}
static void
dissect_r3_upstreamcommand_rmteventlogrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
DISSECTOR_ASSERT(start_offset == 0);
/* XXX: hf[] entries for the following hf indexes originally missing */
proto_tree_add_item (tree, hf_r3_dpacreply_stuff, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_dpacreply_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_dpacreply_reply, tvb, 4, -1, ENC_NA);
}
}
static void
dissect_r3_upstreamcommand_notify (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_mfg (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
proto_tree *mfg_tree = NULL;
guint8 mfg_fld;
tvbuff_t *mfg_tvb;
proto_item *mfg_item;
const gchar *cn;
DISSECTOR_ASSERT(start_offset == 0);
mfg_tvb = tvb_new_subset_remaining (tvb, 2);
mfg_fld = tvb_get_guint8 (tvb, 1);
cn = val_to_str_ext_const (mfg_fld, &r3_mfgfieldnames_ext, "[Unknown Mfg Field]");
proto_tree_add_item (tree, hf_r3_mfgfield_length, tvb, 0, 1, ENC_LITTLE_ENDIAN);
mfg_tree = proto_tree_add_subtree_format(tree, tvb, 1, -1, ett_r3commandmfg, &mfg_item,
"Upstream Manufacturing Field: %s (%u)", cn, mfg_fld);
proto_tree_add_item (mfg_tree, hf_r3_mfgfield, tvb, 1, 1, ENC_LITTLE_ENDIAN);
if (mfg_fld >= MFGFIELD_LAST)
{
expert_add_info(pinfo, mfg_item, &ei_r3_mfgfield);
}
else if (r3upstreammfgfield_dissect [mfg_fld])
(*r3upstreammfgfield_dissect [mfg_fld]) (mfg_tvb, 0, length, pinfo, mfg_tree);
}
static void
dissect_r3_upstreamcommand_eventlogwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dumpnvramrle (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_item (tree, hf_r3_nvramdumprle_record, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_nvramdumprle_length, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_nvramdumprle_data, tvb, 4, tvb_get_guint8 (tvb, 3), ENC_NA);
}
static void
dissect_r3_upstreamcommand_rmtdeclinedrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_declinedwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dumpdeclinedlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *declinedlog_tree;
guint8 cred1type;
guint8 cred2type;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
declinedlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 49,
ett_r3declinedlogrecord, NULL, "Declined Log Record %u", tvb_get_letohs (tvb, 0));
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_usernumber, tvb, 8, 2, ENC_LITTLE_ENDIAN);
cred1type = tvb_get_guint8 (tvb, 10) & 0x07;
cred2type = (tvb_get_guint8 (tvb, 10) & 0x38) >> 3;
proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred1type, tvb, 10, 1, cred1type);
proto_tree_add_uint (declinedlog_tree, hf_r3_declinedlog_cred2type, tvb, 10, 1, cred2type);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred1, tvb, 11, 19, ENC_NA);
proto_tree_add_item (declinedlog_tree, hf_r3_declinedlog_cred2, tvb, 30, 19, ENC_NA);
}
static void
dissect_r3_upstreamcommand_rmtalarmrecord (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_alarmwarning (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dumpalarmlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *alarmlog_tree;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
alarmlog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 9,
ett_r3alarmlogrecord, NULL, "Alarm Log Record %u", tvb_get_letohs (tvb, 0));
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_year, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_month, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_day, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_hour, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_minute, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_second, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_id, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmlog_tree, hf_r3_alarmlog_usernumber, tvb, 9, 2, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_upstreamcommand_connectscheduler (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_connectcommuser (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_commandalarm (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
dissect_r3_upstreamfields (tvb, start_offset, length, pinfo, tree);
}
static void
dissect_r3_upstreamcommand_dumpdebuglog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *debuglog_tree;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
debuglog_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, 8,
ett_r3debuglogrecord, NULL, "Debug Log Record %u", tvb_get_letohs (tvb, 0));
proto_tree_add_item (debuglog_tree, hf_r3_debuglog_recordnumber, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (debuglog_tree, hf_r3_debuglog_flags, tvb, 2, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item (debuglog_tree, hf_r3_debuglog_tick, tvb, 6, 2, ENC_LITTLE_ENDIAN);
}
/*
* ***************************************************************************
*/
static void
dissect_r3_upstreammfgfield_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
gint len;
DISSECTOR_ASSERT(start_offset == 0);
len = MAX(0, tvb_reported_length_remaining(tvb, start_offset));
if (len % 3 != 0)
{
expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "IOPINS data length not modulo 3 == 0");
}
else
{
char portname = 'A';
gint i;
if (!tree)
return;
for (i = 0; i < len; i += 3, portname++)
{
proto_tree *port_tree = proto_tree_add_subtree_format(tree, tvb, i, 3, ett_r3iopins, NULL,
"Port %c Configuration", (portname == 'I') ? ++portname : portname);
proto_tree_add_item (port_tree, hf_r3_iopins_lat, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (port_tree, hf_r3_iopins_port, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (port_tree, hf_r3_iopins_tris, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
}
}
}
static void
dissect_r3_upstreammfgfield_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint len;
guint32 i;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
len = tvb_reported_length(tvb);
for (i = 0; i < MIN(len,8); i++)
{
proto_item *item = proto_tree_add_item (tree, hf_r3_adc [i], tvb, i, 1, ENC_LITTLE_ENDIAN);
proto_item_append_text (item, " (%.2f Volts)", (float) tvb_get_guint8 (tvb, i) * 0.04154);
}
if (len > 8)
{
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_mfgfield_too_many_adc_values);
}
}
static void
dissect_r3_upstreammfgfield_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_item (tree, hf_r3_hardwareid_board, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_hardwareid_cpuid, tvb, 1, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_hardwareid_cpurev, tvb, 3, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_upstreammfgfield_checkpointlog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *cpl_tree;
guint counter;
gint len;
gint i;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
len = tvb_reported_length_remaining (tvb, 1);
proto_tree_add_item (tree, hf_r3_checkpointlog_entryptr, tvb, 0, 1, ENC_LITTLE_ENDIAN);
cpl_tree = proto_tree_add_subtree(tree, tvb, 1, -1, ett_r3checkpointlog, NULL, "Checkpoint Log");
counter = 0;
for (i = 0; i < len; i += 2, counter++)
{
guint rcon = tvb_get_guint8 (tvb, i + 0);
guint cp = tvb_get_guint8 (tvb, i + 1);
proto_item *cpe_item;
proto_tree *cpe_tree;
guint resettype;
const gchar *desc;
static const gchar *resets [] = { "Stack underflow", "Stack overflow", "Power-On",
"Software", "Brown-out", "MCLR in sleep", "WDT",
"Normal", "[Unknown Reset Type]" };
cpe_tree = proto_tree_add_subtree_format(cpl_tree, tvb, i + 0, 2, ett_r3checkpointlogentry, &cpe_item,
"Checkpoint Log Entry %u", counter);
desc = val_to_str_ext_const (cp, &r3_checkpointnames_ext, "[Unknown Checkpoint]");
if (rcon == 0xff)
resettype = 8;
else
{
rcon &= 0x1f;
if (rcon == 0x1c)
resettype = 2;
else if ((rcon & 0x10) == 0x00)
resettype = 3;
else if ((rcon & 0x1d) == 0x1c)
resettype = 4;
else if ((rcon & 0x0c) == 0x08)
resettype = 5;
else if ((rcon & 0x0c) == 0x04)
resettype = 6;
else
resettype = 7;
}
proto_item_append_text (cpe_item, " (%s, %s)", resets [resettype], desc);
proto_item_append_text (
proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_rcon, tvb, i + 0, 1, ENC_LITTLE_ENDIAN),
" (%s)", resets [resettype]);
proto_item_append_text (
proto_tree_add_item (cpe_tree, hf_r3_checkpointlog_checkpoint, tvb, i + 1, 1, ENC_LITTLE_ENDIAN),
" (%s)", desc);
}
}
static void
dissect_r3_upstreammfgfield_cpuregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *tmp_tree [19];
proto_tree *cr_tree;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
cr_tree = proto_tree_add_subtree(tree, tvb, start_offset, -1, ett_r3cpuregisters, NULL, "CPU Registers");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbif, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0if, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_rbie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_int0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_tmr0ie, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_giel, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 0], hf_r3_cpuregisters_intcon_gieh, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_int3ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_tmr0ip, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg3, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg2, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg1, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_intedg0, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 1], hf_r3_cpuregisters_intcon2_rbpu, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3if, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int3ie, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int1ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 2], hf_r3_cpuregisters_intcon3_int2ip, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tmr2if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ccp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_ssp1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_tx1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_rc1if, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_adif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 3], hf_r3_cpuregisters_pir1_pspif, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_ccp2if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_tmr3if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_hlvdif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_bcl1if, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_eeif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_unused5, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_cmif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 4], hf_r3_cpuregisters_pir2_oscfif, tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp3if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ccp5if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tmr4if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_tx2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_rc2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_bcl2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 5], hf_r3_cpuregisters_pir3_ssp2if, tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tmr2ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ccp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_ssp1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_tx1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_rc1ie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_adie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 6], hf_r3_cpuregisters_pie1_pspie, tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_oscfie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_cmie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_unused2, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_eeie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_bcl1ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_hlvdie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_tmr3ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 7], hf_r3_cpuregisters_pie2_ccp2ie, tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp3ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ccp5ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tmr4ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_tx2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_rc2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_bcl2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 8], hf_r3_cpuregisters_pie3_ssp2ie, tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tmr2ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ccp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_ssp1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_tx1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_rc1ip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_adip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [ 9], hf_r3_cpuregisters_ipr1_pspip, tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_ccp2ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_tmr3ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_hlvdip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_bcl1ip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_eeip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_unused5, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_cmip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [10], hf_r3_cpuregisters_ipr2_oscfip, tvb, 10, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ccp5ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tmr4ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_tx2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_rc2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_bcl2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [11], hf_r3_cpuregisters_ipr3_ssp2ip, tvb, 11, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_bor, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_por, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_pd, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_to, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_unused4, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ri, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_sboren, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [12], hf_r3_cpuregisters_rcon_ipen, tvb, 12, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_scs1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_iofs, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_osts, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf0, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf1, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_ircf2, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [13], hf_r3_cpuregisters_osccon_idlen, tvb, 13, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9d, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_oerr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_ferr, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_adden, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_cren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_sren, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_rx9, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [14], hf_r3_cpuregisters_rcsta_spen, tvb, 14, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9d, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_trmt, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_brgh, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sendb, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_sync, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_txen, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_tx9, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [15], hf_r3_cpuregisters_txsta_csrc, tvb, 15, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9d, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_oerr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_ferr, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_adden, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_cren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_sren, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_rx9, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [16], hf_r3_cpuregisters_rcsta2_spen, tvb, 16, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9d, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_trmt, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_brgh, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sendb, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_sync, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_txen, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_tx9, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [17], hf_r3_cpuregisters_txsta2_csrc, tvb, 17, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_swdten, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused1, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused2, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused3, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused4, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused5, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused6, tvb, 18, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree [18], hf_r3_cpuregisters_wdtcon_unused7, tvb, 18, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_upstreammfgfield_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
gint len;
gint i;
proto_tree *tfg_tree;
DISSECTOR_ASSERT(start_offset == 0);
len = MAX(0, tvb_reported_length_remaining (tvb, 0));
tfg_tree = proto_tree_add_subtree_format(tree, tvb, 0, -1, ett_r3taskflags, NULL,
"Task Flags (%u tasks)", len / 5);
for (i = 0; i < len; i += 5)
{
proto_tree *tf_tree = proto_tree_add_subtree_format(tfg_tree, tvb, i, 5,
ett_r3taskflagsentry, NULL,
"Task Flags (%2d: 0x%06x)",
tvb_get_guint8 (tvb, i + 0),
tvb_get_letohl (tvb, i + 1));
proto_tree_add_item (tf_tree, hf_r3_taskflags_taskid, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tf_tree, hf_r3_taskflags_flags, tvb, i + 1, 4, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreammfgfield_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
gint len;
gint i;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
len = tvb_reported_length_remaining (tvb, 3);
proto_tree_add_item (tree, hf_r3_timerchain_newtick, tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_timerchain_currentboundary, tvb, 2, 1, ENC_LITTLE_ENDIAN);
for (i = 0; i < len; i += 12)
{
proto_tree *tc_tree = proto_tree_add_subtree(tree, tvb, 3 + i, 12, ett_r3timerchain, NULL, "Timer Chain Entry");
proto_tree_add_item (tc_tree, hf_r3_timerchain_tasktag, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tc_tree, hf_r3_timerchain_address, tvb, 3 + i + 1, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tc_tree, hf_r3_timerchain_reload, tvb, 3 + i + 3, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tc_tree, hf_r3_timerchain_boundary, tvb, 3 + i + 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tc_tree, hf_r3_timerchain_count, tvb, 3 + i + 6, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tc_tree, hf_r3_timerchain_flags, tvb, 3 + i + 8, 4, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreammfgfield_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
gint i;
gint len;
DISSECTOR_ASSERT(start_offset == 0);
len = tvb_reported_length_remaining (tvb, 0);
for (i = 0; i < len; i += 3)
{
proto_item *peekpoke_item;
proto_item *peekpoke_op_item;
proto_tree *peekpoke_tree;
peekpoke_tree = proto_tree_add_subtree(tree, tvb, i, 3, ett_r3peekpoke, &peekpoke_item, "");
peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, i + 1, 2, ENC_LITTLE_ENDIAN);
switch (tvb_get_guint8 (tvb, i + 0))
{
case PEEKPOKE_READU8 :
if (peekpoke_tree)
{
proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x = 0x%02x)",
tvb_get_letohs (tvb, i + 1),
tvb_get_guint8 (tvb, i + 3));
proto_item_set_len (peekpoke_item, 4);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
}
i += 1;
break;
case PEEKPOKE_READU16 :
if (peekpoke_tree)
{
proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x = 0x%04x)",
tvb_get_letohs (tvb, i + 1),
tvb_get_letohs (tvb, i + 3));
proto_item_set_len (peekpoke_item, 5);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, i + 3, 2, ENC_LITTLE_ENDIAN);
}
i += 2;
break;
case PEEKPOKE_READU24 :
if (peekpoke_tree)
{
proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x = 0x%06x)",
tvb_get_letohs (tvb, i + 1),
tvb_get_letoh24 (tvb, i + 3));
proto_item_set_len (peekpoke_item, 6);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, i + 3, 3, ENC_LITTLE_ENDIAN);
}
i += 3;
break;
case PEEKPOKE_READU32 :
if (peekpoke_tree)
{
proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x = 0x%08x)",
tvb_get_letohs (tvb, i + 1),
tvb_get_letohl (tvb, i + 3));
proto_item_set_len (peekpoke_item, 7);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, i + 3, 4, ENC_LITTLE_ENDIAN);
}
i += 4;
break;
case PEEKPOKE_READSTRING :
if (peekpoke_tree)
{
proto_item_append_text (peekpoke_item, "Read (%u Bytes @ 0x%04x)",
tvb_get_guint8 (tvb, i + 3),
tvb_get_letohs (tvb, i + 1));
proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, i + 3));
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, i + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, i + 4, tvb_get_guint8 (tvb, i + 3), ENC_NA);
}
i += tvb_get_guint8 (tvb, i + 3) + 1;
break;
default :
expert_add_info(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation);
return; /* quit */
}
}
}
static void
dissect_r3_upstreammfgfield_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
static const int * r3_lockstate_flags[] = {
&hf_r3_lockstate_passage,
&hf_r3_lockstate_panic,
&hf_r3_lockstate_lockout,
&hf_r3_lockstate_relock,
&hf_r3_lockstate_autoopen,
&hf_r3_lockstate_nextauto,
&hf_r3_lockstate_lockstate,
&hf_r3_lockstate_wantstate,
&hf_r3_lockstate_remote,
&hf_r3_lockstate_update,
&hf_r3_lockstate_exceptionspresent,
&hf_r3_lockstate_exceptionsactive,
&hf_r3_lockstate_timezonespresent,
&hf_r3_lockstate_timezonesactive,
&hf_r3_lockstate_autounlockspresent,
&hf_r3_lockstate_autounlocksactive,
&hf_r3_lockstate_uapmspresent,
&hf_r3_lockstate_uapmsactive,
&hf_r3_lockstate_uapmrelockspresent,
&hf_r3_lockstate_uapmreslocksactive,
&hf_r3_lockstate_nvramprotect,
&hf_r3_lockstate_nvramchecksum,
NULL
};
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_bitmask(tree, tvb, start_offset, hf_r3_lockstate, ett_r3lockstate, r3_lockstate_flags, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_upstreammfgfield_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
proto_tree *cf_tree;
gint len;
guint items;
guint octets;
gint i;
guint8 step;
DISSECTOR_ASSERT(start_offset == 0);
len = MAX(0, tvb_reported_length_remaining (tvb, 0));
items = 0;
i = 0;
while (i < len)
{
items++;
octets = tvb_get_guint8 (tvb, i);
if (!octets)
{
proto_tree_add_expert_format(tree, pinfo, &ei_r3_malformed_length, tvb, 0, len, "Capabilities could not be decoded because length of 0 encountered");
return;
}
i += octets;
}
if (!tree)
return;
cf_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3capabilities, NULL, "Capabilities (%u items)", items);
i = 0;
while (i<len && (step=tvb_get_guint8(tvb, i))>0)
{
proto_item *tmp_item = proto_tree_add_item (cf_tree, hf_r3_capabilities, tvb, i, tvb_get_guint8 (tvb, i), ENC_NA);
proto_tree *tmp_tree = proto_item_add_subtree (tmp_item, ett_r3capabilities);
const gchar *fn;
fn = val_to_str_ext_const (tvb_get_guint8 (tvb, i + 1), &r3_capabilitiesnames_ext, "[Unknown Field Name]");
proto_item_append_text (tmp_item, " (%s, %u)", fn, tvb_get_letohs (tvb, i + 2));
proto_tree_add_item (tmp_tree, hf_r3_capabilities_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree, hf_r3_capabilities_type, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tmp_tree, hf_r3_capabilities_value, tvb, i + 2, 2, ENC_LITTLE_ENDIAN);
i += step;
}
}
static void
dissect_r3_upstreammfgfield_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
DISSECTOR_ASSERT(start_offset == 0);
if (tvb_reported_length_remaining (tvb, 0) != 20)
{
expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Length of M41T81 RTC register dump not 20 octets");
}
else
{
proto_tree *rtc_tree;
proto_tree *tmp_tree [20];
guint offset_in_bits;
if (!tree)
return;
rtc_tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_r3m41t81registers, NULL, "M41T81 RTC Registers");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
offset_in_bits = 0 * 8;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
proto_tree_add_bits_item (tmp_tree [19], hf_r3_dumpm41t81_reg13_notused, tvb, offset_in_bits - 8, 4, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreammfgfield_nvramchecksumvalue (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_item (tree, hf_r3_nvramchecksumvalue, tvb, 0, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_nvramchecksumvalue_fixup, tvb, 4, 4, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreammfgfield_checksumresults (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
gint len;
DISSECTOR_ASSERT(start_offset == 0);
len = MAX(0, tvb_reported_length_remaining(tvb, 0));
if (len % 3 != 0)
{
expert_add_info_format(pinfo, proto_tree_get_parent (tree), &ei_r3_malformed_length, "Checksum results data length not modulo 3 == 0");
}
else
{
proto_tree *cksum_tree;
guint32 error = FALSE;
gint i;
guint8 step;
if (!tree)
return;
i = 0;
while (i<len && (step=tvb_get_guint8(tvb, i))>0)
{
error |= tvb_get_guint8 (tvb, i + 2);
i += step;
}
cksum_tree = proto_tree_add_subtree_format(tree, tvb, 0, len, ett_r3checksumresults, NULL,
"Checksum Results (%s)", error ? "Error" : "No Errors");
i = 0;
while (i<len && (step=tvb_get_guint8(tvb, i))>0)
{
proto_item *res_item = proto_tree_add_item (cksum_tree, hf_r3_checksumresults,
tvb,
i,
tvb_get_guint8 (tvb, i),
ENC_NA);
proto_tree *res_tree = proto_item_add_subtree (res_item, ett_r3checksumresultsfield);
const gchar *fn;
fn = val_to_str_ext_const (tvb_get_guint8 (tvb, i + 1), &r3_checksumresultnames_ext, "[Unknown Field Name]");
proto_item_append_text (res_item, " %s (%s)", fn, tvb_get_guint8 (tvb, i + 2) ? "Error" : "No Error");
proto_tree_add_item (res_tree, hf_r3_checksumresults_length, tvb, i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (res_tree, hf_r3_checksumresults_field, tvb, i + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (res_tree, hf_r3_checksumresults_state, tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
i += step;
}
}
}
static void
dissect_r3_upstreammfgfield_mortisestatelog (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
gint len;
gint i;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
len = tvb_reported_length_remaining (tvb, 3);
proto_tree_add_item (tree, hf_r3_mortisestatelog_pointer, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mortisestatelog_mortisetype, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mortisestatelog_waiting, tvb, 2, 1, ENC_LITTLE_ENDIAN);
for (i = 0; i < len; i += 3)
{
guint state = tvb_get_guint8 (tvb, 3 + i + 0);
guint last = tvb_get_guint8 (tvb, 3 + i + 1);
guint event = tvb_get_guint8 (tvb, 3 + i + 2);
proto_tree *ms_tree = proto_tree_add_subtree_format(tree, tvb, 3 + i, 3, ett_r3mortisestatelog, NULL,
"State Log Entry %2d (State=0x%02x, Last=0x%02x, Event=%s (0x%02x))",
i / 3,
state,
last,
val_to_str_ext_const (event, &r3_mortiseeventnames_ext, "[Unknown]"),
event);
proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_state, tvb, 3 + i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_last, tvb, 3 + i + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (ms_tree, hf_r3_mortisestatelog_event, tvb, 3 + i + 2, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_upstreammfgfield_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *iopins_tree;
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
iopins_tree = proto_tree_add_subtree_format(tree, tvb, 0, 1, ett_r3iopins, NULL,
"Mortise Pin States (0x%02x)", tvb_get_guint8 (tvb, 0));
proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s1, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s2, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s3, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (iopins_tree, hf_r3_mortisepins_s4, tvb, 0, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_upstreammfgfield_keypadchar (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (!tree)
return;
DISSECTOR_ASSERT(start_offset == 0);
proto_item_append_text (
proto_tree_add_item (tree, hf_r3_testkeypad, tvb, 0, 1, ENC_LITTLE_ENDIAN),
" ('%c')", tvb_get_guint8 (tvb, 0));
}
static void
dissect_r3_upstreammfgfield_magcard (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_item (tree, hf_r3_testmagcard, tvb, 0, -1, ENC_ASCII|ENC_NA);
}
static void
dissect_r3_upstreammfgfield_proxcard (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
DISSECTOR_ASSERT(start_offset == 0);
proto_tree_add_item (tree, hf_r3_testproxcard, tvb, 0, -1, ENC_ASCII|ENC_NA);
}
/*
* ***************************************************************************
*
* This is passed a tvb that contains [length] [CMD_RESPONSE] [responseType_e] [cmdCommand_e]
*/
static void
dissect_r3_response_singlebyte (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_responsetype, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_responsetocommand, tvb, start_offset + 3, 1, ENC_LITTLE_ENDIAN);
}
}
/*
* This is passed a tvb that contains [length] [CMD_RESPONSE] [RESPONSETYPE_HASDATA] [UPSTREAMCOMMAND_*]
*/
static void
dissect_r3_response_hasdata (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint32 commandPacketLen;
guint8 upstreamCmd;
DISSECTOR_ASSERT(start_offset == 0);
tvb_ensure_bytes_exist (tvb, 0, 4);
commandPacketLen = tvb_get_guint8 (tvb, 0);
upstreamCmd = tvb_get_guint8 (tvb, 3);
if (tvb_get_guint8 (tvb, 1) != CMD_RESPONSE)
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_1);
else if (tvb_get_guint8 (tvb, 2) != RESPONSETYPE_HASDATA)
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_2);
else if (upstreamCmd >= UPSTREAMCOMMAND_LAST)
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
else
{
proto_tree *upstreamcommand_tree = NULL;
tvbuff_t *upstreamcommand_tvb;
if (tree)
{
const gchar *ct;
ct = val_to_str_ext_const (upstreamCmd, &r3_upstreamcommandnames_ext, "[Unknown Command Type]");
proto_tree_add_item (tree, hf_r3_responsetype, tvb, 2, 1, ENC_LITTLE_ENDIAN);
upstreamcommand_tree = proto_tree_add_subtree_format(tree, tvb, 3, -1, ett_r3upstreamcommand, NULL,
"Upstream Command: %s (%u)", ct, upstreamCmd);
proto_tree_add_item (upstreamcommand_tree, hf_r3_upstreamcommand, tvb, 3, 1, ENC_LITTLE_ENDIAN);
}
tvb_ensure_bytes_exist (tvb, 0, commandPacketLen - 4);
upstreamcommand_tvb = tvb_new_subset_length (tvb, 4, commandPacketLen - 4);
if (r3upstreamcommand_dissect [upstreamCmd])
(*r3upstreamcommand_dissect [upstreamCmd]) (upstreamcommand_tvb, 0, commandPacketLen - 4, pinfo, upstreamcommand_tree);
}
}
/*
* ***************************************************************************
*
* These are passed a tvb that starts with [length] [CMD_RESPONSE] ...
*/
static void
dissect_r3_cmd_response (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
guint8 responseLen = tvb_get_guint8 (tvb, start_offset + 0);
responseType_e responseType = (responseType_e)tvb_get_guint8 (tvb, start_offset + 2);
tvbuff_t *payload_tvb = tvb_new_subset_length (tvb, start_offset, responseLen);
if (tree)
{
const gchar *rt;
rt = val_to_str_ext_const (responseType, &r3_responsetypenames_ext, "[Unknown Response Type]");
proto_item_set_text (proto_tree_get_parent (tree), "Response Packet: %s (%u)", rt, responseType);
proto_tree_add_item (tree, hf_r3_responselength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_responsecommand, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
if (responseType >= RESPONSETYPE_LAST)
{
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_response_hasdata_octet_3);
}
else if (r3response_dissect [responseType])
(*r3response_dissect [responseType]) (payload_tvb, 0, length, pinfo, tree);
}
/*
* These are passed a tvb that contains [length] [cmdCommand_e] [[data]]
*/
static void
dissect_r3_cmd_handshake (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_killsession (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_queryserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_queryversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_setdatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *dt_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
dt_tree = proto_tree_add_subtree_format (tree, payload_tvb, 0, -1, ett_r3setdatetime, NULL,
"Set Date/Time (%02u/%02u/%02u-%u %02u:%02u:%02u)",
tvb_get_guint8 (payload_tvb, 0),
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2),
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4),
tvb_get_guint8 (payload_tvb, 5),
tvb_get_guint8 (payload_tvb, 6));
proto_tree_add_item (dt_tree, hf_r3_setdate_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_dow, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_hours, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_minutes, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dt_tree, hf_r3_setdate_seconds, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_querydatetime (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint cmdLen;
tvbuff_t *payload_tvb;
guint32 offset = 0;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
while (offset < (cmdLen - 2))
{
proto_item *sc_item;
proto_tree *sc_tree;
const gchar *ci;
guint8 configItem;
guint8 item_length;
configItem = tvb_get_guint8 (payload_tvb, offset + 1);
ci = val_to_str_ext_const (
configItem,
&r3_configitemnames_ext,
"[Unknown Configuration Item]");
item_length = tvb_get_guint8 (payload_tvb, offset + 0);
sc_tree = proto_tree_add_subtree_format(tree, payload_tvb, offset + 0, item_length,
ett_r3upstreamfield, NULL, "Config Field: %s (%u)", ci, configItem);
sc_item = proto_tree_add_item (sc_tree, hf_r3_configitemlength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (sc_tree, hf_r3_configitem, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
if (item_length == 0) {
expert_add_info_format(pinfo, sc_item, &ei_r3_malformed_length, "Invalid item length");
return;
}
if (configItem < array_length (configMap))
{
switch (configMap [configItem])
{
case CONFIGTYPE_NONE :
proto_tree_add_item (sc_tree, hf_r3_configitemdata, payload_tvb, offset + 2, item_length - 3, ENC_NA);
break;
case CONFIGTYPE_BOOL :
proto_tree_add_item (sc_tree, hf_r3_configitemdata_bool, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_8 :
proto_tree_add_item (sc_tree, hf_r3_configitemdata_8, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_16 :
proto_tree_add_item (sc_tree, hf_r3_configitemdata_16, payload_tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_32 :
proto_tree_add_item (sc_tree, hf_r3_configitemdata_32, payload_tvb, offset + 2, 4, ENC_LITTLE_ENDIAN);
break;
case CONFIGTYPE_STRING :
proto_tree_add_item (sc_tree, hf_r3_configitemdata_string, payload_tvb, offset + 2,
item_length - 2, ENC_ASCII|ENC_NA);
break;
default :
proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
item_length - 2, "Unknown Field Type");
break;
}
}
else {
proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
item_length - 2, "Unknown Field Type");
}
offset += item_length;
}
}
static void
dissect_r3_cmd_getconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_item *config_item;
proto_tree *config_tree;
guint32 cmdLen;
guint32 i;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
config_item = proto_tree_add_item (tree, hf_r3_configitems, tvb, start_offset + 2, cmdLen - 2, ENC_NA);
config_tree = proto_item_add_subtree (config_item, ett_r3configitem);
for (i = 2; i < cmdLen; i++)
proto_tree_add_item (config_tree, hf_r3_configitem, tvb, start_offset + i, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_manageuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint8 cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
tvbuff_t *payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
guint32 offset = 0;
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
while (offset < tvb_reported_length (payload_tvb))
{
guint32 paramLength = tvb_get_guint8 (payload_tvb, offset + 0);
guint32 paramType = tvb_get_guint8 (payload_tvb, offset + 1);
guint32 dataLength = paramLength - 2;
proto_tree *mu_tree = NULL;
proto_item *len_field = NULL;
if (tree)
{
const gchar *auptn;
auptn = val_to_str_ext_const (paramType, &r3_adduserparamtypenames_ext, "[Unknown Field]");
mu_tree = proto_item_add_subtree (
proto_tree_add_none_format (tree, hf_r3_adduserparamtype, payload_tvb, offset + 0, paramLength,
"Manage User Field: %s (%u)", auptn, paramType), ett_r3manageuser);
len_field = proto_tree_add_item (mu_tree, hf_r3_adduserparamtypelength, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (mu_tree, hf_r3_adduserparamtypetype, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
}
if (paramLength < 2)
{
dataLength = 0;
expert_add_info_format(pinfo, len_field, &ei_r3_malformed_length, "Malformed length value -- all fields are at least 2 octets.");
}
offset += 2;
switch (paramType)
{
case ADDUSERPARAMTYPE_DISPOSITION :
case ADDUSERPARAMTYPE_ACCESSALWAYS :
case ADDUSERPARAMTYPE_ACCESSMODE :
case ADDUSERPARAMTYPE_CACHED :
case ADDUSERPARAMTYPE_USERTYPE :
case ADDUSERPARAMTYPE_PRIMARYFIELDTYPE :
case ADDUSERPARAMTYPE_AUXFIELDTYPE :
case ADDUSERPARAMTYPE_USECOUNT :
case ADDUSERPARAMTYPE_EXCEPTIONGROUP :
if (dataLength != 1)
{
expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 1 octet");
}
else
proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
break;
case ADDUSERPARAMTYPE_USERNO :
if (dataLength != 2)
{
expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed field -- expected 2 octets");
}
else
proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_LITTLE_ENDIAN);
break;
case ADDUSERPARAMTYPE_PRIMARYFIELD :
case ADDUSERPARAMTYPE_AUXFIELD :
proto_tree_add_item (mu_tree, hf_r3_adduserparamtypearray [paramType], payload_tvb, offset, dataLength, ENC_NA);
break;
case ADDUSERPARAMTYPE_EXPIREON :
{
if (dataLength != 3)
{
expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed expiration field -- expected 3 octets");
}
else
{
proto_tree *expireon_tree;
if (!tree)
break;
expireon_tree = proto_tree_add_subtree_format(mu_tree, payload_tvb, offset, 3,
ett_r3expireon, NULL,
"Expire YY/MM/DD: %02u/%02u/%02u",
tvb_get_guint8 (payload_tvb, offset + 2),
tvb_get_guint8 (payload_tvb, offset + 0),
tvb_get_guint8 (payload_tvb, offset + 1));
proto_tree_add_item (expireon_tree, hf_r3_expireon_month, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (expireon_tree, hf_r3_expireon_day, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (expireon_tree, hf_r3_expireon_year, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
}
}
break;
case ADDUSERPARAMTYPE_TIMEZONE :
{
if (dataLength != 4)
{
expert_add_info_format(pinfo, proto_tree_get_parent (mu_tree), &ei_r3_malformed_length, "Malformed timezone field -- expected 4 octets");
}
else
{
proto_tree_add_bitmask(mu_tree, payload_tvb, offset, hf_r3_adduserparamtypearray[paramType], ett_r3timezone, r3_timezonearray, ENC_LITTLE_ENDIAN);
}
}
break;
default :
proto_tree_add_string (mu_tree, hf_r3_upstreamfielderror, payload_tvb, offset, dataLength, "Unknown Field Type");
break;
}
offset += dataLength;
}
}
static void
dissect_r3_cmd_deleteusers (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_deleteusers, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_defineexception (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *startdate_tree;
proto_tree *enddate_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_defineexception_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
startdate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 4,
ett_r3defineexceptionstartdate, NULL,
"Start MM/DD HH:MM (%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2),
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4));
proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (startdate_tree, hf_r3_defineexception_startdate_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
enddate_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 4,
ett_r3defineexceptionenddate, NULL,
"End MM/DD HH:MM (%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 5),
tvb_get_guint8 (payload_tvb, 6),
tvb_get_guint8 (payload_tvb, 7),
tvb_get_guint8 (payload_tvb, 8));
proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_month, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_day, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_hours, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (enddate_tree, hf_r3_defineexception_enddate_minutes, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_defineexceptiongroup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *bits_tree;
guint cmdLen;
tvbuff_t *payload_tvb;
guint32 i;
guint32 bit = 0;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_defineexceptiongroup_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
bits_tree = proto_tree_add_subtree(tree, payload_tvb, 1, -1, ett_r3defineexceptiongroupbits, NULL, "Exception Group Bit Field");
for (i = 1; i < (cmdLen - 2); i++)
{
guint32 j;
guint8 byte = tvb_get_guint8 (payload_tvb, i);
for (j = 0; j < 8; j++)
proto_tree_add_none_format (bits_tree, hf_r3_defineexceptiongroup_bits, payload_tvb, i, 1,
"Exception Group %2d: %s", bit++, (byte & (1 << j)) ? "Enabled" : "Disabled");
}
}
static void
dissect_r3_cmd_definecalendar (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
const gchar *mn;
guint32 i;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_definecalendar_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
for (i = 0; i < 12; i++)
{
guint32 daymap = tvb_get_letohl (payload_tvb, (i * 4) + 1);
proto_tree *calendar_tree = proto_tree_add_subtree_format(tree, payload_tvb, (i * 4) + 1, 4,
ett_r3definecalendarmonth [i + 1], NULL,
"Calendar Bit Field - %s (0x%08x)",
(mn = val_to_str_ext_const (i + 1, &r3_monthnames_ext, "[Unknown Month]")),
daymap);
guint32 j;
for (j = 0; j < 31; j++)
proto_tree_add_none_format (calendar_tree, hf_r3_definecalendar_bits, payload_tvb, (i * 4) + 1, 4,
"%s Of %s: %s",
val_to_str_ext_const (j + 1, &r3_monthdaynames_ext, "[Unknown Day]"),
mn,
(daymap & (1 << j)) ? "Enabled" : "Disabled");
}
}
static void
dissect_r3_cmd_definetimezone (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *starttime_tree;
proto_tree *endtime_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
guint8 tzmode;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_definetimezone_number, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 1, 2,
ett_r3definetimezonestarttime, NULL,
"Start HH:MM (%02u:%02u)",
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2));
proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_hours, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_definetimezone_starttime_minutes, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 3, 2,
ett_r3definetimezoneendtime, NULL,
"End HH:MM (%02u:%02u)",
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4));
proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_definetimezone_endtime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_bitmask(tree, payload_tvb, 5, hf_r3_definetimezone_daymap, ett_r3definetimezonedaymap, r3_definetimezone_daymap, ENC_NA);
proto_tree_add_item (tree, hf_r3_definetimezone_exceptiongroup, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_uint (tree, hf_r3_definetimezone_mode, payload_tvb, 7, 1,
(tzmode = tvb_get_guint8 (payload_tvb, 7)) & 0x0f);
proto_tree_add_none_format (tree, hf_r3_definetimezone_calendar, payload_tvb, 7, 1,
"Access Always: %s", (tzmode & 0x10) ? "True" : "False");
}
static void
dissect_r3_cmd_rmtauthretry (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_rmtauthretry_sequence, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_rmtauthretry_retry, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_filters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *filter_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
guint32 i;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_filter_type, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
filter_tree = proto_tree_add_subtree_format(tree, payload_tvb, 2, -1, ett_r3filters, NULL,
"Filters (%u specified)", tvb_get_guint8 (payload_tvb, 0));
for (i = 0; i < tvb_get_guint8 (payload_tvb, 0); i++)
proto_tree_add_item (filter_tree, hf_r3_filter_list, payload_tvb, i + 2, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_alarmconfigure (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
proto_item *alarm_item;
proto_tree *alarm_tree;
guint cmdLen;
tvbuff_t *payload_tvb;
guint32 offset = 0;
guint32 alarms = 0;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
alarm_tree = proto_tree_add_subtree(tree, payload_tvb, 0, -1, ett_r3alarmlist, &alarm_item, "Alarm List (0 items)");
while (offset < (cmdLen - 2))
{
proto_item *pi;
proto_tree *alarmcfg_tree;
const gchar *ai;
const gchar *as;
guint32 alarm_len;
if (!(ai = try_val_to_str_ext (tvb_get_guint8 (payload_tvb, offset + 1), &r3_alarmidnames_ext)))
{
ai = "[Unknown Alarm ID]";
as = "N/A";
}
else
as = (tvb_get_guint8 (payload_tvb, offset + 2) & 0xfe) ?
"Error" : (tvb_get_guint8 (payload_tvb, offset + 2) & 0x01) ? "Enabled" : "Disabled";
alarmcfg_tree = proto_tree_add_subtree_format(alarm_tree, payload_tvb, offset, tvb_get_guint8 (payload_tvb, offset),
ett_r3alarmcfg, NULL, "Alarm Item (%s, %s)", ai, as);
alarm_len = tvb_get_guint8 (payload_tvb, offset + 0);
pi = proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_length, payload_tvb, offset + 0, 1, ENC_LITTLE_ENDIAN);
if (alarm_len == 0) {
expert_add_info_format (pinfo, pi, &ei_r3_malformed_length,
"Alarm length equal to 0. Payload could be partially decoded");
break;
}
proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_id, payload_tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (alarmcfg_tree, hf_r3_alarm_state, payload_tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
alarms++;
offset += alarm_len;
}
if (alarms)
proto_item_set_text (alarm_item, "Alarm List (%d items)", alarms);
}
static void
dissect_r3_cmd_eventlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *starttime_tree;
proto_tree *endtime_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
ett_r3eventlogdumpstarttime, NULL,
"Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 0),
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2),
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4));
proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_eventlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
ett_r3eventlogdumpendtime, NULL,
"End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 5),
tvb_get_guint8 (payload_tvb, 6),
tvb_get_guint8 (payload_tvb, 7),
tvb_get_guint8 (payload_tvb, 8),
tvb_get_guint8 (payload_tvb, 9));
proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_eventlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_eventlogdump_user, payload_tvb, 10, 2, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_declinedlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *starttime_tree;
proto_tree *endtime_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
ett_r3declinedlogdumpstarttime, NULL,
"Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 0),
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2),
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4));
proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_declinedlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
ett_r3declinedlogdumpendtime, NULL,
"End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 5),
tvb_get_guint8 (payload_tvb, 6),
tvb_get_guint8 (payload_tvb, 7),
tvb_get_guint8 (payload_tvb, 8),
tvb_get_guint8 (payload_tvb, 9));
proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_declinedlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_alarmlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree *starttime_tree;
proto_tree *endtime_tree;
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
starttime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, 5,
ett_r3alarmlogdumpstarttime, NULL,
"Start YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 0),
tvb_get_guint8 (payload_tvb, 1),
tvb_get_guint8 (payload_tvb, 2),
tvb_get_guint8 (payload_tvb, 3),
tvb_get_guint8 (payload_tvb, 4));
proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_year, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_month, payload_tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_day, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_hours, payload_tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (starttime_tree, hf_r3_alarmlogdump_starttime_minutes, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
endtime_tree = proto_tree_add_subtree_format(tree, payload_tvb, 5, 5,
ett_r3alarmlogdumpendtime, NULL,
"End YY/MM/DD HH:MM (%02u/%02u/%02u %02u:%02u)",
tvb_get_guint8 (payload_tvb, 5),
tvb_get_guint8 (payload_tvb, 6),
tvb_get_guint8 (payload_tvb, 7),
tvb_get_guint8 (payload_tvb, 8),
tvb_get_guint8 (payload_tvb, 9));
proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_year, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_month, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_day, payload_tvb, 7, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_hours, payload_tvb, 8, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (endtime_tree, hf_r3_alarmlogdump_endtime_minutes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_downloadfirmware (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
proto_item *dlfw_item = NULL;
proto_item *dlfw_action_item = NULL;
proto_tree *dlfw_tree = NULL;
guint8 cmdLen;
tvbuff_t *payload_tvb;
guint32 packetCRC;
guint32 calculatedCRC;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
dlfw_tree = proto_tree_add_subtree_format(tree, payload_tvb, 0, -1, ett_r3downloadfirmware, &dlfw_item,
"Download Record (Record #%u, ", tvb_get_letohs (payload_tvb, 2));
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_length, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_record, payload_tvb, 2, 2, ENC_LITTLE_ENDIAN);
dlfw_action_item = proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_action, payload_tvb, 4, 1, ENC_LITTLE_ENDIAN);
}
switch (tvb_get_guint8 (payload_tvb, 4))
{
case DOWNLOADFIRMWARE_START :
if (!dlfw_tree)
break;
proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_START)");
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_timeout, payload_tvb, 5, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_nvram, payload_tvb, 6, 1, ENC_LITTLE_ENDIAN);
break;
case DOWNLOADFIRMWARE_DATA :
if (!dlfw_tree)
break;
proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_DATA, Address 0x%08x, %u Bytes)",
tvb_get_letohl (payload_tvb, 5), tvb_get_guint8 (payload_tvb, 9));
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_address, payload_tvb, 5, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_bytes, payload_tvb, 9, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (dlfw_tree, hf_r3_firmwaredownload_data, payload_tvb, 10,
tvb_get_guint8 (payload_tvb, 9), ENC_NA);
break;
case DOWNLOADFIRMWARE_COMPLETE :
if (!dlfw_tree)
break;
proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_COMPLETE)");
break;
case DOWNLOADFIRMWARE_ABORT :
if (!dlfw_tree)
break;
proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_ABORT)");
break;
case DOWNLOADFIRMWARE_RESET :
if (!dlfw_tree)
break;
proto_item_append_text (dlfw_item, "DOWNLOADFIRMWARE_RESET)");
break;
default :
expert_add_info(pinfo, dlfw_action_item, &ei_r3_firmwaredownload_action);
return; /* quit */
}
if (!dlfw_tree)
return;
packetCRC = tvb_get_letohs (payload_tvb, cmdLen - 2 - 2);
if ((calculatedCRC = crc16_r3_ccitt_tvb(payload_tvb, 0, cmdLen - 2 - 2)) == packetCRC)
proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
cmdLen - 2 - 2, 2,
packetCRC, "0x%04x (correct)", packetCRC);
else
{
proto_item *tmp_item;
proto_tree_add_uint_format_value(dlfw_tree, hf_r3_firmwaredownload_crc, payload_tvb,
cmdLen - 2 - 2, 2,
packetCRC, "0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
tmp_item = proto_tree_add_boolean (dlfw_tree, hf_r3_firmwaredownload_crc_bad, payload_tvb,
cmdLen - 2 - 2, 2, TRUE);
PROTO_ITEM_SET_GENERATED (tmp_item);
}
}
static void
dissect_r3_cmd_downloadfirmwaretimeout (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (tree)
{
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commanddata, payload_tvb, 0, -1, ENC_NA);
}
expert_add_info(pinfo, proto_tree_get_parent (tree), &ei_r3_cmd_downloadfirmwaretimeout); /* XXX: ??? */
}
static void
dissect_r3_cmd_powertableselection (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_powertableselection, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_clearnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_bitmask(tree, tvb, start_offset + 2, hf_r3_nvramclearoptions,
ett_r3clearnvram, r3_nvramclearoptions, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_dpac (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
/* XXX: hf[] entries for the following hf indexes originally missing */
proto_tree_add_item (tree, hf_r3_dpac_action, payload_tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_dpac_waittime, payload_tvb, 1, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_dpac_command, payload_tvb, 3, -1, ENC_NA);
}
static void
dissect_r3_cmd_selftest (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_reset (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_logwrite (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 cmdLen;
tvbuff_t *payload_tvb;
if (!tree)
return;
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
payload_tvb = tvb_new_subset_length (tvb, start_offset + 2, cmdLen - 2);
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_writeeventlog_user, payload_tvb, 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_writeeventlog_event, payload_tvb, 2, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmd_mfgcommand (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
mfgCommandFlag = TRUE;
}
static void
dissect_r3_cmd_nvrambackup (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmd_extendedresponse (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandlength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_command, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
/*
* ***************************************************************************
*/
static void
dissect_r3_cmdmfg_setserialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *tree)
{
tvbuff_t *sn_tvb = tvb_new_subset_length (tvb, start_offset + 2, 16);
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
dissect_serialnumber (sn_tvb, 0, length, pinfo, tree, hf_r3_mfgsetserialnumber);
}
static void
dissect_r3_cmdmfg_setcryptkey (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mfgsetcryptkey, tvb, start_offset + 2, -1, ENC_NA);
}
}
static void
dissect_r3_cmdmfg_dumpnvram (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mfgdumpnvram, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_terminal (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_remoteunlock (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mfgremoteunlock, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_auxctlrversion (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_iopins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_adcs (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_hardwareid (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_checkpointlogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_checkpointlogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_readregisters (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_forceoptions (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
gint i;
gint len;
guint8 step;
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
start_offset += 2;
len = tvb_reported_length_remaining (tvb, start_offset);
i = 0;
while (i<len && (step=tvb_get_guint8(tvb, start_offset + i))>0)
{
proto_tree *force_tree = proto_tree_add_subtree_format(tree, tvb, start_offset + i, tvb_get_guint8 (tvb, start_offset + i),
ett_r3forceoptions, NULL,
"Force Option %s (%u)",
val_to_str_ext_const (
tvb_get_guint8 (tvb, start_offset + i + 1),
&r3_forceitemnames_ext, "[Unknown]"),
tvb_get_guint8 (tvb, start_offset + i + 1));
proto_item *force_item_item;
proto_tree_add_item (force_tree, hf_r3_forceoptions_length, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
force_item_item = proto_tree_add_item (force_tree, hf_r3_forceoptions_item, tvb, start_offset + i + 1, 1, ENC_LITTLE_ENDIAN);
switch (tvb_get_guint8 (tvb, start_offset + i) - 2)
{
case 1 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_8, tvb, start_offset + i + 2, 1, ENC_LITTLE_ENDIAN);
break;
case 2 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_16, tvb, start_offset + i + 2, 2, ENC_LITTLE_ENDIAN);
break;
case 3 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_24, tvb, start_offset + i + 2, 3, ENC_LITTLE_ENDIAN);
break;
case 4 : proto_tree_add_item (force_tree, hf_r3_forceoptions_state_32, tvb, start_offset + i + 2, 4, ENC_LITTLE_ENDIAN);
break;
default :
expert_add_info_format(pinfo, force_item_item, &ei_r3_malformed_length, "Invalid length for Forceoptions State entry");
return; /* quit */
break;
}
i += step;
}
}
static void
dissect_r3_cmdmfg_commuser (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_dumpkeypad (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_batterycheck (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_ramrefresh (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_taskflags (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_timerchain (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
if (tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
}
static void
dissect_r3_cmdmfg_peekpoke (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo, proto_tree *tree)
{
gint i;
gint len;
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
start_offset += 2;
len = tvb_reported_length_remaining (tvb, start_offset);
for (i = 0; i < len; i += 3)
{
proto_item *peekpoke_item;
proto_item *peekpoke_op_item;
proto_tree *peekpoke_tree;
peekpoke_tree = proto_tree_add_subtree(tree, tvb, start_offset + i, 3, ett_r3peekpoke, &peekpoke_item, "");
peekpoke_op_item = proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_operation, tvb, start_offset + i + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_address, tvb, start_offset + i + 1, 2, ENC_LITTLE_ENDIAN);
switch (tvb_get_guint8 (tvb, start_offset + i + 0))
{
case PEEKPOKE_READU8 :
proto_item_append_text (peekpoke_item, "Read (8 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
break;
case PEEKPOKE_READU16 :
proto_item_append_text (peekpoke_item, "Read (16 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
break;
case PEEKPOKE_READU24 :
proto_item_append_text (peekpoke_item, "Read (24 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
break;
case PEEKPOKE_READU32 :
proto_item_append_text (peekpoke_item, "Read (32 Bits @ 0x%04x)", tvb_get_letohs (tvb, start_offset + i + 1));
break;
case PEEKPOKE_READSTRING :
proto_item_append_text (peekpoke_item,
"Read (%d Bytes @ 0x%04x)",
tvb_get_guint8 (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 4);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
i += 1;
break;
case PEEKPOKE_WRITEU8 :
proto_item_append_text (peekpoke_item,
"Write (8 Bits: 0x%02x @ 0x%04x)",
tvb_get_guint8 (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 4);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke8, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
i += 1;
break;
case PEEKPOKE_WRITEU16 :
proto_item_append_text (peekpoke_item,
"Write (16 Bits: 0x%04x @ 0x%04x)",
tvb_get_letohs (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 5);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke16, tvb, start_offset + i + 3, 2, ENC_LITTLE_ENDIAN);
i += 2;
break;
case PEEKPOKE_WRITEU24 :
proto_item_append_text (peekpoke_item,
"Write (24 Bits: 0x%06x @ 0x%04x)",
tvb_get_letoh24 (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 6);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke24, tvb, start_offset + i + 3, 3, ENC_LITTLE_ENDIAN);
i += 3;
break;
case PEEKPOKE_WRITEU32 :
proto_item_append_text (peekpoke_item,
"Write (32 Bits: 0x%08x @ 0x%04x)",
tvb_get_letohl (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 7);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_poke32, tvb, start_offset + i + 3, 4, ENC_LITTLE_ENDIAN);
i += 4;
break;
case PEEKPOKE_WRITESTRING :
proto_item_append_text (peekpoke_item,
"Write (%d Bytes @ 0x%04x)",
tvb_get_guint8 (tvb, start_offset + i + 3),
tvb_get_letohs (tvb, start_offset + i + 1));
proto_item_set_len (peekpoke_item, 3 + 1 + tvb_get_guint8 (tvb, start_offset + i + 3));
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_length, tvb, start_offset + i + 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (peekpoke_tree, hf_r3_peekpoke_pokestring, tvb, start_offset + i + 4,
tvb_get_guint8 (tvb, start_offset + i + 3), ENC_NA);
i += tvb_get_guint8 (tvb, start_offset + i + 3) + 1;
break;
default :
expert_add_info_format(pinfo, peekpoke_op_item, &ei_r3_peekpoke_operation, "Unknown Mfg peekpoke operation value");
return; /* quit */
}
}
}
static void
dissect_r3_cmdmfg_lockstate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_capabilities (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_dumpm41t81 (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_debuglogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_debuglogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_testwdt (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_querycksum (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_validatechecksums (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_rebuildlrucache (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_tzupdate (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_testpreserve (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_mfgtestpreserve, tvb, start_offset + 2, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_mortisestatelogdump (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_mortisestatelogclear (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_mortisepins (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
static void
dissect_r3_cmdmfg_haltandcatchfire (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, packet_info *pinfo _U_, proto_tree *tree)
{
proto_tree_add_item (tree, hf_r3_commandmfglength, tvb, start_offset + 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (tree, hf_r3_commandmfg, tvb, start_offset + 1, 1, ENC_LITTLE_ENDIAN);
}
/*
*/
static gint
dissect_r3_command (tvbuff_t *tvb, guint32 start_offset, guint32 length, packet_info *pinfo, proto_tree *r3_tree)
{
proto_item *cmd_item;
proto_tree *cmd_tree;
const gchar *cn;
guint8 cmdLen;
guint8 cmd;
tvb_ensure_bytes_exist (tvb, start_offset, 2);
cmdLen = tvb_get_guint8 (tvb, start_offset + 0);
cmd = tvb_get_guint8 (tvb, start_offset + 1);
if (!mfgCommandFlag)
cn = val_to_str_ext_const (cmd, &r3_cmdnames_ext, "[Unknown Command]");
else
cn = val_to_str_ext_const (cmd, &r3_cmdmfgnames_ext, "[Unknown Mfg Command]");
cmd_tree = proto_tree_add_subtree_format(r3_tree, tvb, start_offset, cmdLen,
ett_r3cmd, &cmd_item, "Command Packet: %s (%d)", cn, cmd);
if (!mfgCommandFlag)
{
if (cmd >= CMD_LAST)
expert_add_info(pinfo, cmd_item, &ei_r3_unknown_command_value);
else if (r3command_dissect [cmd])
(*r3command_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
}
else
{
mfgCommandFlag = FALSE;
if (cmd >= CMDMFG_LAST)
{
expert_add_info_format(pinfo, proto_tree_get_parent (cmd_tree), &ei_r3_unknown_command_value, "Unknown manufacturing command value");
}
else if (r3commandmfg_dissect [cmd])
(*r3commandmfg_dissect [cmd]) (tvb, start_offset, length, pinfo, cmd_tree);
}
return tvb_get_guint8 (tvb, start_offset + 0);
}
/*
* ***************************************************************************
*
* Dissect a single r3 PDU
*
* return: amount consumed
*/
static int
dissect_r3_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tree *r3_tree)
{
proto_item *payload_item = NULL;
proto_tree *payload_tree = NULL;
guint offset = 0;
guint32 packetLen;
guint octConsumed;
if (tvb_strneql (tvb, 0, "~~~ds", 5) == 0)
{
if (r3_tree)
proto_tree_add_item (r3_tree, hf_r3_tildex3ds, tvb, 0, -1, ENC_ASCII|ENC_NA);
return 5;
}
/*
* Show basic header stuff
*/
if (r3_tree)
{
proto_item *header_item = proto_tree_add_item (r3_tree, hf_r3_header, tvb, 0, 5, ENC_NA);
proto_tree *header_tree = proto_item_add_subtree (header_item, ett_r3header);
proto_tree_add_item (header_tree, hf_r3_sigil, tvb, 0, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (header_tree, hf_r3_address, tvb, 1, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (header_tree, hf_r3_packetnumber, tvb, 2, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (header_tree, hf_r3_packetlength, tvb, 3, 1, ENC_LITTLE_ENDIAN);
proto_tree_add_item (header_tree, hf_r3_encryption, tvb, 4, 1, ENC_LITTLE_ENDIAN);
}
/* Note: packetLen == tvb_reported_length() */
packetLen = tvb_get_guint8 (tvb, 3);
if (r3_tree)
{
payload_item = proto_tree_add_item (r3_tree, hf_r3_payload, tvb, 5, -1, ENC_NA);
payload_tree = proto_item_add_subtree (payload_item, ett_r3payload);
}
offset = 5;
mfgCommandFlag = FALSE; /* XXX: Assumption: mfgCmd always follows Cmd in same r3 "packet" */
while (offset < (packetLen - 3))
{
octConsumed = dissect_r3_command (tvb, offset, 0, pinfo, payload_tree);
if(octConsumed == 0)
{
expert_add_info_format(pinfo, proto_tree_get_parent (payload_tree), &ei_r3_malformed_length,
"Command length equal to 0. Payload could be partially decoded");
offset = tvb_reported_length (tvb) - 3; /* just do CRC stuff ?? */
break;
}
offset += octConsumed;
}
/*
* Show the CRC and XOR status
*/
if (r3_tree)
{
proto_item *tail_item = proto_tree_add_item (r3_tree, hf_r3_tail, tvb, offset, 3, ENC_NA);
proto_tree *tail_tree = proto_item_add_subtree (tail_item, ett_r3tail);
guint32 packetCRC = tvb_get_letohs (tvb, offset);
guint32 packetXor = tvb_get_guint8 (tvb, offset + 2);
guint32 calculatedCRC;
if ((calculatedCRC = crc16_r3_ccitt_tvb(tvb, 1, packetLen - 3)) == packetCRC)
proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC, "0x%04x (correct)", packetCRC);
else
{
proto_item *tmp_item;
proto_tree_add_uint_format_value(tail_tree, hf_r3_crc, tvb, offset, 2, packetCRC,
"0x%04x (incorrect, should be 0x%04x)", calculatedCRC, packetCRC);
tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_crc_bad, tvb, offset, 2, TRUE);
PROTO_ITEM_SET_GENERATED (tmp_item);
}
if ((packetLen ^ 0xff) == packetXor)
proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 2, 1, packetXor,
"0x%02x (correct)", packetXor);
else
{
proto_item *tmp_item;
proto_tree_add_uint_format_value(tail_tree, hf_r3_xor, tvb, offset + 7, 1, packetXor,
"0x%02x (incorrect, should be 0x%02x)", packetXor, packetLen ^ 0xff);
tmp_item = proto_tree_add_boolean (tail_tree, hf_r3_xor_bad, tvb, offset + 7, 1, TRUE);
PROTO_ITEM_SET_GENERATED (tmp_item);
}
}
offset += 3;
return offset;
}
/*
* ***************************************************************************
*
* Main dissector entry points
*/
static int
dissect_r3_message (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
proto_tree *r3_tree = NULL;
col_set_str (pinfo->cinfo, COL_PROTOCOL, "R3");
col_clear (pinfo->cinfo, COL_INFO);
/* Note: The tvb (provided via tcp_dissect_pdus()) will contain (at most) one PDU of the length
* specified via get_r3_message_len()
*/
if (tree)
{
proto_item *r3_item;
r3_item = proto_tree_add_item (tree, proto_r3, tvb, 0, -1, ENC_NA);
r3_tree = proto_item_add_subtree (r3_item, ett_r3);
}
dissect_r3_packet (tvb, pinfo, r3_tree);
return tvb_reported_length(tvb);
}
static guint
get_r3_message_len (packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
{
return (guint) tvb_get_guint8 (tvb, offset + 3) + 1;
}
static int
dissect_r3 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
tcp_dissect_pdus (tvb, pinfo, tree, TRUE, 4, get_r3_message_len, dissect_r3_message, data);
return tvb_reported_length(tvb);
}
/*
* ***************************************************************************
*/
void proto_register_r3 (void)
{
/* Setup list of header fields */
static hf_register_info hf [] =
{
{ &hf_r3_tildex3ds,
{ "DPAC Attention", "r3.dpac_attention",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_header,
{ "Header", "r3.header",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_payload,
{ "Payload", "r3.payload",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_tail,
{ "Tail", "r3.tail",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sigil,
{ "Sigil", "r3.sigil",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_address,
{ "Address", "r3.address",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_packetnumber,
{ "Packet Number", "r3.packetnumber",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_packetlength,
{ "Packet Length", "r3.packetlength",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_encryption,
{ "Crypt Type", "r3.encryption",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_encryptionschemenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_crc,
{ "CRC", "r3.crc",
FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_crc_bad,
{ "Bad CRC", "r3.crc_bad",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_xor,
{ "XOR", "r3.xor",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_xor_bad,
{ "Bad XOR", "r3.xor_bad",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_commandlength,
{ "Command Length", "r3.command.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_command,
{ "Command", "r3.command.command",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_commanddata,
{ "Command Data", "r3.command.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_commandmfglength,
{ "Mfg Command Length", "r3.commandmfg.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_commandmfg,
{ "Mfg Command", "r3.commandmfg.command",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdmfgnames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_commandmfgdata,
{ "Mfg Command Data", "r3.commandmfg.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_responselength,
{ "Response Length", "r3.response.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_responsecommand,
{ "Response Command", "r3.response.command",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_responsetype,
{ "Response Type", "r3.response.responsetype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_responsetypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_responsetocommand,
{ "Response To Command", "r3.response.to_command",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_cmdnames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_responsedata,
{ "Response Data", "r3.response.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_upstreamcommand,
{ "Upstream Command", "r3.upstreamcommand.command",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamcommandnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfield,
{ "Upstream Field", "r3.upstreamfield",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldlength,
{ "Field Length", "r3.upstreamfield.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldtype,
{ "Field Type", "r3.upstreamfield.type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_upstreamfieldnames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_upstreamfielddatalen,
{ "Data Length", "r3.upstreamfield.datalen",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_upstreamfielderror,
{ "Error", "r3.upstreamfield.error",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SERIALNUMBER],
{ "Serial Number", "r3.upstreamfield.serialnumber",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_NAR],
{ "Next Available Record", "r3.upstreamfield.nar",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ENTRYDEVICE],
{ "Entry Device", "r3.upstreamfield.entrydevice",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PPMIFIELDTYPE],
{ "PPMI Field Type", "r3.upstreamfield.ppmifieldtype",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PIN],
{ "PIN", "r3.upstreamfield.pin",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_SEQUENCENUMBER],
{ "Sequence Number", "r3.upstreamfield.sequencenumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_RESPONSEWINDOW],
{ "Response Window", "r3.upstreamfield.responsewindow",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERNUMBER],
{ "User Number", "r3.upstreamfield.usernumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_VERSION],
{ "Version", "r3.upstreamfield.version",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORD],
{ "Event Log Record", "r3.upstreamfield.eventlogrecord",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DATETIME],
{ "Date/Time", "r3.upstreamfield.datetime",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EVENTLOGRECORDCOUNT],
{ "Event Log Record Count", "r3.upstreamfield.eventlogrecordcount",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORDCOUNT],
{ "Declined Log Record", "r3.upstreamfield.declinedlogrecord",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_DECLINEDRECORD],
{ "Declined Log", "r3.upstreamfield.declinedlog",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USERTYPE],
{ "User Type", "r3.upstreamfield.usertype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSALWAYS],
{ "Access Always", "r3.upstreamfield.accessalways",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_CACHED],
{ "Cached", "r3.upstreamfield.cached",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYFIELDTYPE],
{ "Primary Field Type", "r3.upstreamfield.primaryfieldtype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXFIELDTYPE],
{ "Aux Field Type", "r3.upstreamfield.auxfieldtype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ACCESSMODE],
{ "Access Mode", "r3.upstreamfield.accessmode",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXPIREON],
{ "Expire On", "r3.upstreamfield.expireon",
FT_UINT24, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_USECOUNT],
{ "Use Count", "r3.upstreamfield.usecount",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_TIMEZONE],
{ "Timezone", "r3.upstreamfield.timezone",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_EXCEPTIONGROUP],
{ "Exception Group", "r3.upstreamfield.exceptiongroup",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_PRIMARYPIN],
{ "Primary PIN", "r3.upstreamfield.primarypin",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXPIN],
{ "Aux PIN", "r3.upstreamfield.auxpin",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORDCOUNT],
{ "Alarm Record Count", "r3.upstreamfield.alarmrecordcount",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_ALARMRECORD],
{ "Alarm Record", "r3.upstreamfield.alarmrecord",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_upstreamfieldarray [UPSTREAMFIELD_AUXCTLRVERSION],
{ "Aux Controller Version", "r3.upstreamfield.auxctlrversion",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitems,
{ "Configuration Item List", "r3.configitems",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitem,
{ "Configuration Item", "r3.configitem",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configitemnames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_configfield,
{ "Config Field", "r3.configfield",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_configitemlength,
{ "Configuration Item Length", "r3.configitem.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemtype,
{ "Configuration Item Type", "r3.configitem.type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_configtypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata,
{ "Configuration Item Data", "r3.configitem.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata_bool,
{ "Configuration Item Boolean", "r3.configitem.data_boolean",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata_8,
{ "Configuration Item 8-bit", "r3.configitem.data_8",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata_16,
{ "Configuration Item 16-bit", "r3.configitem.data_16",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata_32,
{ "Configuration Item 32-bit", "r3.configitem.data_32",
FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_configitemdata_string,
{ "Configuration Item String", "r3.configitem.data_string",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timezonearray0,
{ "Timezone 0", "r3.timezone.0",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000001,
NULL, HFILL }
},
{ &hf_r3_timezonearray1,
{ "Timezone 1", "r3.timezone.1",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000002,
NULL, HFILL }
},
{ &hf_r3_timezonearray2,
{ "Timezone 2", "r3.timezone.2",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000004,
NULL, HFILL }
},
{ &hf_r3_timezonearray3,
{ "Timezone 3", "r3.timezone.3",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000008,
NULL, HFILL }
},
{ &hf_r3_timezonearray4,
{ "Timezone 4", "r3.timezone.4",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000010,
NULL, HFILL }
},
{ &hf_r3_timezonearray5,
{ "Timezone 5", "r3.timezone.5",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000020,
NULL, HFILL }
},
{ &hf_r3_timezonearray6,
{ "Timezone 6", "r3.timezone.6",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000040,
NULL, HFILL }
},
{ &hf_r3_timezonearray7,
{ "Timezone 7", "r3.timezone.7",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000080,
NULL, HFILL }
},
{ &hf_r3_timezonearray8,
{ "Timezone 8", "r3.timezone.8",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000100,
NULL, HFILL }
},
{ &hf_r3_timezonearray9,
{ "Timezone 9", "r3.timezone.9",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000200,
NULL, HFILL }
},
{ &hf_r3_timezonearray10,
{ "Timezone 10", "r3.timezone.10",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000400,
NULL, HFILL }
},
{ &hf_r3_timezonearray11,
{ "Timezone 11", "r3.timezone.11",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00000800,
NULL, HFILL }
},
{ &hf_r3_timezonearray12,
{ "Timezone 12", "r3.timezone.12",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00001000,
NULL, HFILL }
},
{ &hf_r3_timezonearray13,
{ "Timezone 13", "r3.timezone.13",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00002000,
NULL, HFILL }
},
{ &hf_r3_timezonearray14,
{ "Timezone 14", "r3.timezone.14",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00004000,
NULL, HFILL }
},
{ &hf_r3_timezonearray15,
{ "Timezone 15", "r3.timezone.15",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00008000,
NULL, HFILL }
},
{ &hf_r3_timezonearray16,
{ "Timezone 16", "r3.timezone.16",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00010000,
NULL, HFILL }
},
{ &hf_r3_timezonearray17,
{ "Timezone 17", "r3.timezone.17",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00020000,
NULL, HFILL }
},
{ &hf_r3_timezonearray18,
{ "Timezone 18", "r3.timezone.18",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00040000,
NULL, HFILL }
},
{ &hf_r3_timezonearray19,
{ "Timezone 19", "r3.timezone.19",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00080000,
NULL, HFILL }
},
{ &hf_r3_timezonearray20,
{ "Timezone 20", "r3.timezone.20",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00100000,
NULL, HFILL }
},
{ &hf_r3_timezonearray21,
{ "Timezone 21", "r3.timezone.21",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00200000,
NULL, HFILL }
},
{ &hf_r3_timezonearray22,
{ "Timezone 22", "r3.timezone.22",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00400000,
NULL, HFILL }
},
{ &hf_r3_timezonearray23,
{ "Timezone 23", "r3.timezone.23",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x00800000,
NULL, HFILL }
},
{ &hf_r3_timezonearray24,
{ "Timezone 24", "r3.timezone.24",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x01000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray25,
{ "Timezone 25", "r3.timezone.25",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x02000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray26,
{ "Timezone 26", "r3.timezone.26",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x04000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray27,
{ "Timezone 27", "r3.timezone.27",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x08000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray28,
{ "Timezone 28", "r3.timezone.28",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x10000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray29,
{ "Timezone 29", "r3.timezone.29",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x20000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray30,
{ "Timezone 30", "r3.timezone.30",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x40000000,
NULL, HFILL }
},
{ &hf_r3_timezonearray31,
{ "Timezone 31", "r3.timezone.31",
FT_BOOLEAN, 32, TFS (&tfs_enabled_disabled), 0x80000000,
NULL, HFILL }
},
{ &hf_r3_expireon_year,
{ "Expiration Year", "r3.expireon.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_expireon_month,
{ "Expiration Month", "r3.expireon.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_expireon_day,
{ "Expiration Day", "r3.expireon.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_year,
{ "Date/Time Year", "r3.datetime.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_month,
{ "Date/Time Month", "r3.datetime.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_day,
{ "Date/Time Day", "r3.datetime.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_dow,
{ "Date/Time DOW", "r3.datetime.dow",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_hours,
{ "Date/Time Hours", "r3.datetime.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_minutes,
{ "Date/Time Minutes", "r3.datetime.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_seconds,
{ "Date/Time Seconds", "r3.datetime.seconds",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_datetime_dst,
{ "Date/Time DST", "r3.datetime.dst",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_recordnumber,
{ "Record Number", "r3.eventlog.recordnumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_year,
{ "Year", "r3.eventlog.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_month,
{ "Month", "r3.eventlog.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_day,
{ "Day", "r3.eventlog.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_hour,
{ "Hours", "r3.eventlog.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_minute,
{ "Minutes", "r3.eventlog.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_second,
{ "Seconds", "r3.eventlog.seconds",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_usernumber,
{ "User Number", "r3.eventlog.usernumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlog_event,
{ "ID", "r3.eventlog.id",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_recordnumber,
{ "Record Number", "r3.declinedlog.recordnumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_year,
{ "Year", "r3.declinedlog.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_month,
{ "Month", "r3.declinedlog.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_day,
{ "Day", "r3.declinedlog.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_hour,
{ "Hours", "r3.declinedlog.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_minute,
{ "Minutes", "r3.declinedlog.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_second,
{ "Seconds", "r3.declinedlog.seconds",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_usernumber,
{ "User Number", "r3.declinedlog.usernumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_cred1type,
{ "Credential 1 Type", "r3.declinedlog.cred1type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_cred2type,
{ "Credential 2 Type", "r3.declinedlog.cred2type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_fieldtypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_cred1,
{ "Credential 1", "r3.declinedlog.cred1",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlog_cred2,
{ "Credential 2", "r3.declinedlog.cred2",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_recordnumber,
{ "Record Number", "r3.alarmlog.recordnumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_year,
{ "Year", "r3.alarmlog.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_month,
{ "Month", "r3.alarmlog.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_day,
{ "Day", "r3.alarmlog.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_hour,
{ "Hours", "r3.alarmlog.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_minute,
{ "Minutes", "r3.alarmlog.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_second,
{ "Seconds", "r3.alarmlog.seconds",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_id,
{ "ID", "r3.alarmlog.id",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlog_usernumber,
{ "User Number", "r3.alarmlog.usernumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_debugmsg,
{ "Debug Message", "r3.debug",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_year,
{ "Year", "r3.setdate.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_month,
{ "Month", "r3.setdate.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_day,
{ "Day", "r3.setdate.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_dow,
{ "Day-Of-Week", "r3.setdate.dow",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_daynames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_hours,
{ "Hours", "r3.setdate.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_minutes,
{ "Minutes", "r3.setdate.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_setdate_seconds,
{ "Seconds", "r3.setdate.seconds",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_deleteusers,
{ "Delete Users", "r3.deleteusers",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_deleteusersnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_number,
{ "Exception Number", "r3.defineexception.number",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_startdate_month,
{ "Start Month", "r3.defineexception.start.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_startdate_day,
{ "Start Day", "r3.defineexception.start.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_startdate_hours,
{ "Start Hours", "r3.defineexception.start.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_startdate_minutes,
{ "Start Minutes", "r3.defineexception.start.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_enddate_month,
{ "End Month", "r3.defineexception.end.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_enddate_day,
{ "End Day", "r3.defineexception.end.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_enddate_hours,
{ "End Hours", "r3.defineexception.end.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexception_enddate_minutes,
{ "End Minutes", "r3.defineexception.end.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexceptiongroup_number,
{ "Define Exception Group Number", "r3.defineexceptiongroup.number",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_defineexceptiongroup_bits,
{ "Define Exception Group Bit Field", "r3.defineexceptiongroup.field",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definecalendar_number,
{ "Define Calendar Number", "r3.definecalendar.number",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definecalendar_bits,
{ "Define Calendar Bit Field", "r3.definecalendar.field",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_number,
{ "Timezone Number", "r3.definetimezone.number",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_starttime_hours,
{ "Start Hours", "r3.definetimezone.start.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_starttime_minutes,
{ "Start Minutes", "r3.definetimezone.start.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_endtime_hours,
{ "End Hours", "r3.definetimezone.end.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_endtime_minutes,
{ "End Minutes", "r3.definetimezone.end.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap,
{ "Day Map", "r3.definetimezone.daymap",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap0,
{ "Sunday", "r3.definetimezone.daymap.sunday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000001,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap1,
{ "Monday", "r3.definetimezone.daymap.monday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000002,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap2,
{ "Tuesday", "r3.definetimezone.daymap.tuesday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000004,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap3,
{ "Wednesday", "r3.definetimezone.daymap.wednesday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000008,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap4,
{ "Thursday", "r3.definetimezone.daymap.thursday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000010,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap5,
{ "Friday", "r3.definetimezone.daymap.friday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000020,
NULL, HFILL }
},
{ &hf_r3_definetimezone_daymap6,
{ "Saturday", "r3.definetimezone.daymap.saturday",
FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x00000040,
NULL, HFILL }
},
{ &hf_r3_definetimezone_exceptiongroup,
{ "Exception Group", "r3.definetimezone.exceptiongroup",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_mode,
{ "Mode", "r3.definetimezone.mode",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_timezonemodenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_definetimezone_calendar,
{ "Calendar", "r3.definetimezone.calendar",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_rmtauthretry_sequence,
{ "Remote Auth Retry Sequence", "r3.rmtauthretry.sequence",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_rmtauthretry_retry,
{ "Remote Auth Retry Mode", "r3.rmtauthretry.mode",
FT_BOOLEAN, BASE_NONE, TFS (&tfs_rmtauthretry_flags), 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_starttime_year,
{ "Start Year", "r3.eventlogdump.start.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_starttime_month,
{ "Start Month", "r3.eventlogdump.start.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_starttime_day,
{ "Start Day", "r3.eventlogdump.start.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_starttime_hours,
{ "Start Hours", "r3.eventlogdump.start.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_starttime_minutes,
{ "Start Minutes", "r3.eventlogdump.start.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_endtime_year,
{ "End Year", "r3.eventlogdump.end.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_endtime_month,
{ "End Month", "r3.eventlogdump.end.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_endtime_day,
{ "End Day", "r3.eventlogdump.end.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_endtime_hours,
{ "End Hours", "r3.eventlogdump.end.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_endtime_minutes,
{ "End Minutes", "r3.eventlogdump.end.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_eventlogdump_user,
{ "Filter User", "r3.eventlogdump.user",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_starttime_year,
{ "Start Year", "r3.declinedlogdump.start.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_starttime_month,
{ "Start Month", "r3.declinedlogdump.start.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_starttime_day,
{ "Start Day", "r3.declinedlogdump.start.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_starttime_hours,
{ "Start Hours", "r3.declinedlogdump.start.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_starttime_minutes,
{ "Start Minutes", "r3.declinedlogdump.start.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_endtime_year,
{ "End Year", "r3.declinedlogdump.end.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_endtime_month,
{ "End Month", "r3.declinedlogdump.end.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_endtime_day,
{ "End Day", "r3.declinedlogdump.end.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_endtime_hours,
{ "End Hours", "r3.declinedlogdump.end.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_declinedlogdump_endtime_minutes,
{ "End Minutes", "r3.declinedlogdump.end.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_starttime_year,
{ "Start Year", "r3.alarmlogdump.start.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_starttime_month,
{ "Start Month", "r3.alarmlogdump.start.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_starttime_day,
{ "Start Day", "r3.alarmlogdump.start.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_starttime_hours,
{ "Start Hours", "r3.alarmlogdump.start.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_starttime_minutes,
{ "Start Minutes", "r3.alarmlogdump.start.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_endtime_year,
{ "End Year", "r3.alarmlogdump.end.year",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_endtime_month,
{ "End Month", "r3.alarmlogdump.end.month",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_monthnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_endtime_day,
{ "End Day", "r3.alarmlogdump.end.day",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_endtime_hours,
{ "End Hours", "r3.alarmlogdump.end.hours",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarmlogdump_endtime_minutes,
{ "End Minutes", "r3.alarmlogdump.end.minutes",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions,
{ "NVRAM Clean Options", "r3.nvramclear",
FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions0,
{ "NVRAMCLEAROPTIONS_CFGINSTALLER", "r3.nvramclear.cfginstaller",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000001,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions1,
{ "NVRAMCLEAROPTIONS_CFGADMIN", "r3.nvramclear.cfgadmin",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000002,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions2,
{ "NVRAMCLEAROPTIONS_EXCEPTIONS", "r3.nvramclear.exceptions",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000004,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions3,
{ "NVRAMCLEAROPTIONS_EXCEPTIONGROUPS", "r3.nvramclear.exceptiongroups",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000008,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions4,
{ "NVRAMCLEAROPTIONS_CALENDARS", "r3.nvramclear.calendars",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000010,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions5,
{ "NVRAMCLEAROPTIONS_TIMEZONES", "r3.nvramclear.timezones",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000020,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions6,
{ "NVRAMCLEAROPTIONS_FILTERS", "r3.nvramclear.filters",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000040,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions7,
{ "NVRAMCLEAROPTIONS_EVENTLOG", "r3.nvramclear.eventlog",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000080,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions8,
{ "NVRAMCLEAROPTIONS_USERDATA", "r3.nvramclear.userdata",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000100,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions9,
{ "NVRAMCLEAROPTIONS_DECLINEDLOG", "r3.nvramclear.declinedlog",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000200,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions10,
{ "NVRAMCLEAROPTIONS_ALARMLOG", "r3.nvramclear.alarmlog",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000400,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions11,
{ "NVRAMCLEAROPTIONS_LRUCACHE", "r3.nvramclear.lrucache",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00000800,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions12,
{ "NVRAMCLEAROPTIONS_DBHASH", "r3.nvramclear.dbhash",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00001000,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions13,
{ "NVRAMCLEAROPTIONS_CFGSYSTEM", "r3.nvramclear.cfgsystem",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00002000,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions14,
{ "NVRAMCLEAROPTIONS_UNUSED", "r3.nvramclear.unused",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00004000,
NULL, HFILL }
},
{ &hf_r3_nvramclearoptions15,
{ "NVRAMCLEAROPTIONS_USEBACKUP", "r3.nvramclear.usebackup",
FT_BOOLEAN, 16, TFS (&tfs_enabled_disabled), 0x00008000,
NULL, HFILL }
},
{ &hf_r3_writeeventlog_user,
{ "User", "r3.writeeventlog.user",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_writeeventlog_event,
{ "Event", "r3.writeeventlog.event",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_eventnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_powertableselection,
{ "Table", "r3.powertableselection",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_powertablenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_filter_type,
{ "Type", "r3.filter.type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtertypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_filter_list,
{ "Event", "r3.filter.event",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_filtereventnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarm_length,
{ "Length", "r3.alarm.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarm_id,
{ "ID", "r3.alarm.id",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_alarmidnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_alarm_state,
{ "State", "r3.alarm.state",
FT_BOOLEAN, BASE_NONE, TFS (&tfs_enabled_disabled), 0x0,
NULL, HFILL }
},
/* XXX: start: Originally missing: Best guess */
{ &hf_r3_dpac_action,
{ "Dpac Action", "r3.dpac.action",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dpac_waittime,
{ "Dpac Waittime", "r3.dpac.waittime",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dpac_command,
{ "Dpac Command", "r3.dpac.command",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dpacreply_stuff,
{ "Dpac Reply Stuff", "r3.dpacreply.stuff",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dpacreply_length,
{ "Dpac Reply Length", "r3.dpacreply.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dpacreply_reply,
{ "Dpac Reply", "r3.dpacreply.reply",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
/* XXX: end: Originally missing --- */
{ &hf_r3_mfgfield_length,
{ "Field Length", "r3.mfgfield.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mfgfield,
{ "Field", "r3.mfgfield.field",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgfieldnames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_mfgfield_data,
{ "Field Data", "r3.mfgfield.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_mfgsetserialnumber,
{ "Serial Number", "r3.mfgsetserialnumber",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mfgsetcryptkey,
{ "Crypt Key", "r3.mfgsetcryptkey",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mfgdumpnvram,
{ "NVRAM Section", "r3.mfgnvramdump",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgnvramdumpnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_mfgremoteunlock,
{ "Remote Unlock", "r3.mfgremoteunlock",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgremoteunlocknames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_mfgtestpreserve,
{ "Preserve Mode", "r3.mfgtestpreserve",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_mfgtestpreservenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [0],
{ "ADC 0", "r3.adc.0",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [1],
{ "ADC 1", "r3.adc.1",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [2],
{ "ADC 2", "r3.adc.2",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [3],
{ "ADC 3", "r3.adc.3",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [4],
{ "ADC 4", "r3.adc.4",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [5],
{ "ADC 5", "r3.adc.5",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [6],
{ "ADC 6", "r3.adc.6",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adc [7],
{ "ADC 7", "r3.adc.7",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_hardwareid_board,
{ "Board ID", "r3.hardwareid.board",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_hardwareid_cpuid,
{ "CPU ID", "r3.hardwareid.cpuid",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_hardwareid_cpurev,
{ "CPU Rev", "r3.hardwareid.cpurev",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_testkeypad,
{ "Keypad Char", "r3.test.keypad",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_testmagcard,
{ "Mag Card", "r3.test.magcard",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_testproxcard,
{ "Prox Card", "r3.test.proxcard",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdump_record,
{ "Record Number", "r3.nvramdump.record",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdump_length,
{ "Record Length", "r3.nvramdump.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdump_data,
{ "Record Data", "r3.nvramdump.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdumprle_record,
{ "Record Number", "r3.nvramdumprle.record",
FT_UINT24, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdumprle_length,
{ "Record Length", "r3.nvramdumprle.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramdumprle_data,
{ "Record Data", "r3.nvramdumprle.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_iopins_lat,
{ "LAT", "r3.iopins.lat",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_iopins_port,
{ "PORT", "r3.iopins.port",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_iopins_tris,
{ "TRIS", "r3.iopins.tris",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mortisepins_s1,
{ "Mortise Pin S1", "r3.mortisepins.s1",
FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000001,
NULL, HFILL }
},
{ &hf_r3_mortisepins_s2,
{ "Mortise Pin S2", "r3.mortisepins.s2",
FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000002,
NULL, HFILL }
},
{ &hf_r3_mortisepins_s3,
{ "Mortise Pin S3", "r3.mortisepins.s3",
FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000004,
NULL, HFILL }
},
{ &hf_r3_mortisepins_s4,
{ "Mortise Pin S4", "r3.mortisepins.s4",
FT_BOOLEAN, 8, TFS (&tfs_mortisepins_flags), 0x00000008,
NULL, HFILL }
},
{ &hf_r3_checksumresults ,
{ "Checksum Results", "r3.checksumresults",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_checksumresults_field,
{ "Field", "r3.checksumresults.field",
FT_UINT8, BASE_HEX|BASE_EXT_STRING, & r3_checksumresultnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_checksumresults_length,
{ "Length", "r3.checksumresults.length",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_checksumresults_state,
{ "State", "r3.checksumresults.state",
FT_BOOLEAN, BASE_NONE, TFS (&tfs_errornoerror_flags), 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_item,
{ "Item", "r3.forceoptions.item",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_forceitemnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_length,
{ "Length", "r3.forceoptions.length",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_state_8,
{ "State", "r3.forceoptions.state",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_state_16,
{ "State", "r3.forceoptions.state",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_state_24,
{ "State", "r3.forceoptions.state",
FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_forceoptions_state_32,
{ "State", "r3.forceoptions.state",
FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_operation,
{ "Operation", "r3.peekpoke.operation",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_peekpokenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_address,
{ "Address", "r3.peekpoke.address",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_length,
{ "Length", "r3.peekpoke.length",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_poke8,
{ "8 Bit Value", "r3.peekpoke.poke8",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_poke16,
{ "16 Bit Value", "r3.peekpoke.poke16",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_poke24,
{ "24 Bit Value", "r3.peekpoke.poke24",
FT_UINT24, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_poke32,
{ "32 Bit Value", "r3.peekpoke.poke32",
FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_peekpoke_pokestring,
{ "String Value", "r3.peekpoke.pokestring",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_length,
{ "Length", "r3.firmwaredownload.length",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_record,
{ "Record Number", "r3.firmwaredownload.record",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_action,
{ "Action", "r3.firmwaredownload.action",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_downloadfirmwarenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_timeout,
{ "Timeout", "r3.firmwaredownload.timeout",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_nvram,
{ "NVRAM", "r3.firmwaredownload.nvram",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_address,
{ "Address", "r3.firmwaredownload.address",
FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_bytes,
{ "Bytes", "r3.firmwaredownload.bytes",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_data,
{ "Data", "r3.firmwaredownload.data",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_crc,
{ "CRC", "r3.firmwaredownload.crc",
FT_UINT16, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_firmwaredownload_crc_bad,
{ "Bad CRC", "r3.firmwaredownload.crc_bad",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramchecksumvalue,
{ "Value", "r3.nvramchecksum.value",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_nvramchecksumvalue_fixup,
{ "Fixup", "r3.nvramchecksum.fixup",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_capabilities,
{ "Capability", "r3.capabilities",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_capabilities_length,
{ "Length", "r3.capabilities.length",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_capabilities_type,
{ "Type", "r3.capabilities.type",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_capabilitiesnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_capabilities_value,
{ "Value", "r3.capabilities.value",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_lockstate,
{ "Lock State", "r3.lockstate",
FT_UINT24, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_lockstate_passage,
{ "Passage", "r3.lockstate.passage",
FT_BOOLEAN, 24, NULL, 0x00000001,
NULL, HFILL }
},
{ &hf_r3_lockstate_panic,
{ "Panic", "r3.lockstate.panic",
FT_BOOLEAN, 24, NULL, 0x00000002,
NULL, HFILL }
},
{ &hf_r3_lockstate_lockout,
{ "Lockout", "r3.lockstate.lockout",
FT_BOOLEAN, 24, NULL, 0x00000004,
NULL, HFILL }
},
{ &hf_r3_lockstate_relock,
{ "Relock", "r3.lockstate.relock",
FT_BOOLEAN, 24, NULL, 0x00000008,
NULL, HFILL }
},
{ &hf_r3_lockstate_autoopen,
{ "Auto Open", "r3.lockstate.autoopen",
FT_BOOLEAN, 24, NULL, 0x00000010,
NULL, HFILL }
},
{ &hf_r3_lockstate_nextauto,
{ "Next Auto", "r3.lockstate.nextauto",
FT_BOOLEAN, 24, NULL, 0x00000020,
NULL, HFILL }
},
{ &hf_r3_lockstate_lockstate,
{ "Lock State", "r3.lockstate.lockstate",
FT_BOOLEAN, 24, NULL, 0x00000040,
NULL, HFILL }
},
{ &hf_r3_lockstate_wantstate,
{ "Want State", "r3.lockstate.wantstate",
FT_BOOLEAN, 24, NULL, 0x00000080,
NULL, HFILL }
},
{ &hf_r3_lockstate_remote,
{ "Remote", "r3.lockstate.remote",
FT_BOOLEAN, 24, NULL, 0x00000100,
NULL, HFILL }
},
{ &hf_r3_lockstate_update,
{ "Update", "r3.lockstate.update",
FT_BOOLEAN, 24, NULL, 0x00000200,
NULL, HFILL }
},
{ &hf_r3_lockstate_exceptionspresent,
{ "Exceptions Present", "r3.lockstate.exceptionspresent",
FT_BOOLEAN, 24, NULL, 0x00000400,
NULL, HFILL }
},
{ &hf_r3_lockstate_exceptionsactive,
{ "Exceptions Active", "r3.lockstate.exceptionsactive",
FT_BOOLEAN, 24, NULL, 0x00000800,
NULL, HFILL }
},
{ &hf_r3_lockstate_timezonespresent,
{ "Timezones Presents", "r3.lockstate.timezonespresent",
FT_BOOLEAN, 24, NULL, 0x00001000,
NULL, HFILL }
},
{ &hf_r3_lockstate_timezonesactive,
{ "Timezones Active", "r3.lockstate.timezonesactive",
FT_BOOLEAN, 24, NULL, 0x00002000,
NULL, HFILL }
},
{ &hf_r3_lockstate_autounlockspresent,
{ "Auto Unlocks Present", "r3.lockstate.autounlockspresent",
FT_BOOLEAN, 24, NULL, 0x00004000,
NULL, HFILL }
},
{ &hf_r3_lockstate_autounlocksactive,
{ "Auto Unlocks Active", "r3.lockstate.autounlocksactive",
FT_BOOLEAN, 24, NULL, 0x00008000,
NULL, HFILL }
},
{ &hf_r3_lockstate_uapmspresent,
{ "UAPMs Present", "r3.lockstate.uapmspresent",
FT_BOOLEAN, 24, NULL, 0x00010000,
NULL, HFILL }
},
{ &hf_r3_lockstate_uapmsactive,
{ "UAPMs Active", "r3.lockstate.uapmsactive",
FT_BOOLEAN, 24, NULL, 0x00020000,
NULL, HFILL }
},
{ &hf_r3_lockstate_uapmrelockspresent,
{ "UAPM Relocks Present", "r3.lockstate.uapmrelockspresent",
FT_BOOLEAN, 24, NULL, 0x00040000,
NULL, HFILL }
},
{ &hf_r3_lockstate_uapmreslocksactive,
{ "UAPM Relocks Active", "r3.lockstate.uapmreslocksactive",
FT_BOOLEAN, 24, NULL, 0x00080000,
NULL, HFILL }
},
{ &hf_r3_lockstate_nvramprotect,
{ "NVRAM Protect", "r3.lockstate.nvramprotect",
FT_BOOLEAN, 24, NULL, 0x00100000,
NULL, HFILL }
},
{ &hf_r3_lockstate_nvramchecksum,
{ "MVRAM Checksum", "r3.lockstate.nvramchecksum",
FT_BOOLEAN, 24, NULL, 0x00200000,
NULL, HFILL }
},
#if 0
{ &hf_r3_mortisestatelog,
{ "Mortise State Log", "r3.mortisestatelog",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_mortisestatelog_pointer,
{ "Event Pointer", "r3.mortisestatelog.pointer",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mortisestatelog_mortisetype,
{ "Mortise Type", "r3.mortisestatelog.mortisetype",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortisetypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_mortisestatelog_waiting,
{ "Waiting For Door Closed", "r3.mortisestatelog.waiting",
FT_BOOLEAN, BASE_NONE, TFS (&tfs_true_false ), 0x00,
NULL, HFILL }
},
{ &hf_r3_mortisestatelog_state,
{ "State", "r3.mortisestatelog.state",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mortisestatelog_last,
{ "Last State", "r3.mortisestatelog.laststate",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_mortisestatelog_event,
{ "Event", "r3.mortisestatelog.event",
FT_UINT8, BASE_HEX_DEC|BASE_EXT_STRING, &r3_mortiseeventnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_newtick,
{ "New Tick", "r3.timerchain.newtick",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_currentboundary,
{ "Current Boundary", "r3.timerchain.currentboundary",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_tasktag,
{ "Task Tag", "r3.timerchain.tasktag",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_address,
{ "Address", "r3.timerchain.address",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_reload,
{ "Reload", "r3.timerchain.reload",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_boundary,
{ "Boundary", "r3.timerchain.boundary",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_count,
{ "Count", "r3.timerchain.count",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_timerchain_flags,
{ "Flags", "r3.timerchain.flags",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_taskflags_taskid,
{ "Task ID", "r3.taskflags.taskid",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_taskflags_flags,
{ "Flags", "r3.taskflags.flags",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_checkpointlog_entryptr,
{ "Entry Pointer", "r3.checkpointlog.entrypointer",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_checkpointlog_rcon,
{ "RCON", "r3.checkpointlog.rcon",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_checkpointlog_checkpoint,
{ "Checkpoint", "r3.checkpointlog.checkpoint",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon,
{ "INTCON", "r3.cpuregisters.intcon",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2,
{ "INTCON2", "r3.cpuregisters.intcon2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3,
{ "INTCON3", "r3.cpuregisters.intcon3",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1,
{ "PIR1", "r3.cpuregisters.pir1",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2,
{ "PIR2", "r3.cpuregisters.pir2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3,
{ "PIR3", "r3.cpuregisters.pir3",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1,
{ "PIE1", "r3.cpuregisters.pie1",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2,
{ "PIE2", "r3.cpuregisters.pie2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3,
{ "PIE3", "r3.cpuregisters.pie3",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1,
{ "IPR1", "r3.cpuregisters.ipr1",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2,
{ "IPR2", "r3.cpuregisters.ipr2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3,
{ "IPR3", "r3.cpuregisters.ipr3",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon,
{ "RCON", "r3.cpuregisters.rcon",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon,
{ "OSCCON", "r3.cpuregisters.osccon",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta,
{ "RCSTA", "r3.cpuregisters.rcsta",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta,
{ "TXSTA", "r3.cpuregisters.txsta",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2,
{ "RCSTA2", "r3.cpuregisters.rcsta2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2,
{ "TXSTA2", "r3.cpuregisters.txsta2",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon,
{ "WDTCON", "r3.cpuregisters.wdtcon",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_rbif,
{ "INTCON.RBIF", "r3.cpuregisters.intcon.rbif",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_int0if,
{ "INTCON.INT0IF", "r3.cpuregisters.intcon.int0if",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_tmr0if,
{ "INTCON.TMR0IF", "r3.cpuregisters.intcon.tmr0if",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_rbie,
{ "INTCON.RBIE", "r3.cpuregisters.intcon.rbie",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_int0ie,
{ "INTCON.INT0IE", "r3.cpuregisters.intcon.int0ie",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_tmr0ie,
{ "INTCON.TMR0IE", "r3.cpuregisters.intcon.tmr0ie",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_giel,
{ "INTCON.GIEL", "r3.cpuregisters.intcon.giel",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon_gieh,
{ "INTCON.GIEH", "r3.cpuregisters.intcon.gieh",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_rbip,
{ "INTCON2.RBIP", "r3_cpuregisters_intcon2_rbip",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_int3ip,
{ "INTCON2.INT3IP", "r3_cpuregisters_intcon2_int3ip",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_tmr0ip,
{ "INTCON2.TMR0IP", "r3_cpuregisters_intcon2_tmr0ip",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_intedg3,
{ "INTCON2.INTEDG3", "r3_cpuregisters_intcon2_intedg3",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_intedg2,
{ "INTCON2.INTEDG2", "r3_cpuregisters_intcon2_intedg2",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_intedg1,
{ "INTCON2.INTEDG1", "r3_cpuregisters_intcon2_intedg1",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_intedg0,
{ "INTCON2.INTEDG0", "r3_cpuregisters_intcon2_intedg0",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon2_rbpu,
{ "INTCON2.RBPU", "r3_cpuregisters_intcon2_rbpu",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int1if,
{ "INTCON3.INT1IF", "r3.cpuregisters.intcon3.int1if",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int2if,
{ "INTCON3.INT2IF", "r3.cpuregisters.intcon3.int2if",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int3if,
{ "INTCON3.INT3IF", "r3.cpuregisters.intcon3.int3if",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int1ie,
{ "INTCON3.INT1IE", "r3.cpuregisters.intcon3.int1ie",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int2ie,
{ "INTCON3.INT2IE", "r3.cpuregisters.intcon3.int2ie",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int3ie,
{ "INTCON3.INT3IE", "r3.cpuregisters.intcon3.int3ie",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int1ip,
{ "INTCON3.INT1IP", "r3.cpuregisters.intcon3.int1ip",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_intcon3_int2ip,
{ "INTCON3.INT2IP", "r3.cpuregisters.intcon3.int2ip",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_tmr1if,
{ "PIR1.TMR1IF", "r3.cpuregisters.pir1.tmr1if",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_tmr2if,
{ "PIR1.TMR2IF", "r3.cpuregisters.pir1.tmr2if",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_ccp1if,
{ "PIR1.CCP1IF", "r3.cpuregisters.pir1.ccp1if",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_ssp1if,
{ "PIR1.SSP1IF", "r3.cpuregisters.pir1.ssp1if",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_tx1if,
{ "PIR1.TX1IF", "r3.cpuregisters.pir1.tx1if",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_rc1if,
{ "PIR1.RC1IF", "r3.cpuregisters.pir1.rc1if",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_adif,
{ "PIR1.ADIF", "r3.cpuregisters.pir1.adif",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir1_pspif,
{ "PIR1.PSPIF", "r3.cpuregisters.pir1.pspif",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_ccp2if,
{ "PIR2.CCP2IF", "r3.cpuregisters.pir2.ccp2if",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_tmr3if,
{ "PIR2.TMR3IF", "r3.cpuregisters.pir2.tmr3if",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_hlvdif,
{ "PIR2.HLVDIF", "r3.cpuregisters.pir2.hlvdif",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_bcl1if,
{ "PIR2.BCL1IF", "r3.cpuregisters.pir2.bcl1if",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_eeif,
{ "PIR2.EEIF", "r3.cpuregisters.pir2.eeif",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_unused5,
{ "PIR2.UNUSED5", "r3.cpuregisters.pir2.unused5",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_cmif,
{ "PIR2.CMIF", "r3.cpuregisters.pir2.cmif",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir2_oscfif,
{ "PIR2.OSCFIF", "r3.cpuregisters.pir2.oscfif",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_ccp3if,
{ "PIR3.CCP3IF", "r3.cpuregisters.pir3.ccp3if",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_ccp4if,
{ "PIR3.CCP4IF", "r3.cpuregisters.pir3.ccp4if",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_ccp5if,
{ "PIR3.CCP5IF", "r3.cpuregisters.pir3.ccp5if",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_tmr4if,
{ "PIR3.TMR4IF", "r3.cpuregisters.pir3.tmr4if",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_tx2if,
{ "PIR3.TX2IF", "r3.cpuregisters.pir3.tx2if",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_rc2if,
{ "PIR3.RC2IF", "r3.cpuregisters.pir3.rc2if",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_bcl2if,
{ "PIR3.BCL2IF", "r3.cpuregisters.pir3.bcl2if",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pir3_ssp2if,
{ "PIR3.SSP2IF", "r3.cpuregisters.pir3.ssp2if",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_tmr1ie,
{ "PIE1.TMR1IE", "r3.cpuregisters.pie1.tmr1ie",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_tmr2ie,
{ "PIE1.TMR2IE", "r3.cpuregisters.pie1.tmr2ie",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_ccp1ie,
{ "PIE1.CCP1IE", "r3.cpuregisters.pie1.ccp1ie",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_ssp1ie,
{ "PIE1.SSP1IE", "r3.cpuregisters.pie1.ssp1ie",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_tx1ie,
{ "PIE1.TX1IE", "r3.cpuregisters.pie1.tx1ie",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_rc1ie,
{ "PIE1.RC1IE", "r3.cpuregisters.pie1.rc1ie",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_adie,
{ "PIE1.ADIE", "r3.cpuregisters.pie1.adie",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie1_pspie,
{ "PIE1.PSPIE", "r3.cpuregisters.pie1.pspie",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_oscfie,
{ "PIE2.OSCFIE", "r3.cpuregisters.pie2.oscfie",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_cmie,
{ "PIE2.CMIE", "r3.cpuregisters.pie2.cmie",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_unused2,
{ "PIE2.UNUSED2", "r3.cpuregisters.pie2.unused2",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_eeie,
{ "PIE2.EEIE", "r3.cpuregisters.pie2.eeie",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_bcl1ie,
{ "PIE2.BCL1IE", "r3.cpuregisters.pie2.bcl1ie",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_hlvdie,
{ "PIE2.HLVDIE", "r3.cpuregisters.pie2.hlvdie",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_tmr3ie,
{ "PIE2.TMR3IE", "r3.cpuregisters.pie2.tmr3ie",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie2_ccp2ie,
{ "PIE2.CCP2IE", "r3.cpuregisters.pie2.ccp2ie",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_ccp3ie,
{ "PIE3.CCP3IE", "r3.cpuregisters.pie3.ccp3ie",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_ccp4ie,
{ "PIE3.CCP4IE", "r3.cpuregisters.pie3.ccp4ie",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_ccp5ie,
{ "PIE3.CCP5IE", "r3.cpuregisters.pie3.ccp5ie",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_tmr4ie,
{ "PIE3.TMR4IE", "r3.cpuregisters.pie3.tmr4ie",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_tx2ie,
{ "PIE3.TX2IE", "r3.cpuregisters.pie3.tx2ie",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_rc2ie,
{ "PIE3.RC2IE", "r3.cpuregisters.pie3.rc2ie",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_bcl2ie,
{ "PIE3.BCL2IE", "r3.cpuregisters.pie3.bcl2ie",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_pie3_ssp2ie,
{ "PIE3.SSP2IE", "r3.cpuregisters.pie3.ssp2ie",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_tmr1ip,
{ "IPR1.TMR1IP", "r3.cpuregisters.ipr1.tmr1ip",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_tmr2ip,
{ "IPR1.TMR2IP", "r3.cpuregisters.ipr1.tmr2ip",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_ccp1ip,
{ "IPR1.CCP1IP", "r3.cpuregisters.ipr1.ccp1ip",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_ssp1ip,
{ "IPR1.SSP1IP", "r3.cpuregisters.ipr1.ssp1ip",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_tx1ip,
{ "IPR1.TX1IP", "r3.cpuregisters.ipr1.tx1ip",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_rc1ip,
{ "IPR1.RC1IP", "r3.cpuregisters.ipr1.rc1ip",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_adip,
{ "IPR1.ADIP", "r3.cpuregisters.ipr1.adip",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr1_pspip,
{ "IPR1.PSPIP", "r3.cpuregisters.ipr1.pspip",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_ccp2ip,
{ "IPR2.CCP2IP", "r3.cpuregisters.ipr2.ccp2ip",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_tmr3ip,
{ "IPR2.TMR3IP", "r3.cpuregisters.ipr2.tmr3ip",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_hlvdip,
{ "IPR2.HLVDIP", "r3.cpuregisters.ipr2.hlvdip",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_bcl1ip,
{ "IPR2.BCL1IP", "r3.cpuregisters.ipr2.bcl1ip",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_eeip,
{ "IPR2.EEIP", "r3.cpuregisters.ipr2.eeip",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_unused5,
{ "IPR2.UNUSED5", "r3.cpuregisters.ipr2.unused5",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_cmip,
{ "IPR2.CMIP", "r3.cpuregisters.ipr2.cmip",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr2_oscfip,
{ "IPR2.OSCFIP", "r3.cpuregisters.ipr2.oscfip",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_ccp2ip,
{ "IPR3.CCP2IP", "r3.cpuregisters.ipr3.ccp2ip",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_ccp4ip,
{ "IPR3.CCP4IP", "r3.cpuregisters.ipr3.ccp4ip",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_ccp5ip,
{ "IPR3.CCP5IP", "r3.cpuregisters.ipr3.ccp5ip",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_tmr4ip,
{ "IPR3.TMR4IP", "r3.cpuregisters.ipr3.tmr4ip",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_tx2ip,
{ "IPR3.TX2IP", "r3.cpuregisters.ipr3.tx2ip",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_rc2ip,
{ "IPR3.RC2IP", "r3.cpuregisters.ipr3.rc2ip",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_bcl2ip,
{ "IPR3.BCL2IP", "r3.cpuregisters.ipr3.bcl2ip",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_ipr3_ssp2ip,
{ "IPR3.SSP2IP", "r3.cpuregisters.ipr3.ssp2ip",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_bor,
{ "RCON./BOR", "r3.cpuregisters.rcon.bor",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_por,
{ "RCON./POR", "r3.cpuregisters.rcon.por",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_pd,
{ "RCON./PD", "r3.cpuregisters.rcon.pd",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_to,
{ "RCON./TO", "r3.cpuregisters.rcon.to",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_unused4,
{ "RCON.UNUSED4", "r3.cpuregisters.rcon.unused4",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_ri,
{ "RCON./RI", "r3.cpuregisters.rcon.ri",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_sboren,
{ "RCON.SBOREN", "r3.cpuregisters.rcon.sboren",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcon_ipen,
{ "RCON.IPEN", "r3.cpuregisters.rcon.ipen",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_scs0,
{ "OSCCON.SCS0", "r3.cpuregisters.osccon.scs0",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_scs1,
{ "OSCCON.SCS1", "r3.cpuregisters.osccon.scs1",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_iofs,
{ "OSCCON.IOFS", "r3.cpuregisters.osccon.iofs",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_osts,
{ "OSCCON.OSTS", "r3.cpuregisters.osccon.osts",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_ircf0,
{ "OSCCON.IRCF0", "r3.cpuregisters.osccon.ircf0",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_ircf1,
{ "OSCCON.IRCF1", "r3.cpuregisters.osccon.ircf1",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_ircf2,
{ "OSCCON.IRCF2", "r3.cpuregisters.osccon.ircf2",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_osccon_idlen,
{ "OSCCON.IDLEN", "r3.cpuregisters.osccon.idlen",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_rx9d,
{ "RCSTA.RX9D", "r3.cpuregisters.rcsta.rx9d",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_oerr,
{ "RCSTA.OERR", "r3.cpuregisters.rcsta.oerr",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_ferr,
{ "RCSTA.FERR", "r3.cpuregisters.rcsta.ferr",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_adden,
{ "RCSTA.ADDEN", "r3.cpuregisters.rcsta.adden",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_cren,
{ "RCSTA.CREN", "r3.cpuregisters.rcsta.cren",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_sren,
{ "RCSTA.SREN", "r3.cpuregisters.rcsta.sren",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_rx9,
{ "RCSTA.RX9", "r3.cpuregisters.rcsta.rx9",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta_spen,
{ "RCSTA.SPEN", "r3.cpuregisters.rcsta.spen",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_tx9d,
{ "TXSTA.TX9D", "r3.cpuregisters.txsta.tx9d",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_trmt,
{ "TXSTA.TRMT", "r3.cpuregisters.txsta.trmt",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_brgh,
{ "TXSTA.BRGH", "r3.cpuregisters.txsta.brgh",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_sendb,
{ "TXSTA.SENDB", "r3.cpuregisters.txsta.sendb",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_sync,
{ "TXSTA.SYNC", "r3.cpuregisters.txsta.sync",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_txen,
{ "TXSTA.TXEN", "r3.cpuregisters.txsta.txen",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_tx9,
{ "TXSTA.TX9", "r3.cpuregisters.txsta.tx9",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta_csrc,
{ "TXSTA.CSRC", "r3.cpuregisters.txsta.csrc",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_rx9d,
{ "RCSTA2.RX9D", "r3.cpuregisters.rcsta2.rx9d",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_oerr,
{ "RCSTA2.OERR", "r3.cpuregisters.rcsta2.oerr",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_ferr,
{ "RCSTA2.FERR", "r3.cpuregisters.rcsta2.ferr",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_adden,
{ "RCSTA2.ADDEN", "r3.cpuregisters.rcsta2.adden",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_cren,
{ "RCSTA2.CREN", "r3.cpuregisters.rcsta2.cren",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_sren,
{ "RCSTA2.SREN", "r3.cpuregisters.rcsta2.sren",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_rx9,
{ "RCSTA2.RX9", "r3.cpuregisters.rcsta2.rx9",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_rcsta2_spen,
{ "RCSTA2.SPEN", "r3.cpuregisters.rcsta2.spen",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_tx9d,
{ "TXSTA2.TX9D", "r3.cpuregisters.txsta2.tx9d",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_trmt,
{ "TXSTA2.TRMT", "r3.cpuregisters.txsta2.trmt",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_brgh,
{ "TXSTA2.BRGH", "r3.cpuregisters.txsta2.brgh",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_sendb,
{ "TXSTA2.SENDB", "r3.cpuregisters.txsta2.sendb",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_sync,
{ "TXSTA2.SYNC", "r3.cpuregisters.txsta2.sync",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_txen,
{ "TXSTA2.TXEN", "r3.cpuregisters.txsta2.txen",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_tx9,
{ "TXSTA2.TX9", "r3.cpuregisters.txsta2.tx9",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_txsta2_csrc,
{ "TXSTA2.CSRC", "r3.cpuregisters.txsta2.csrc",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_swdten,
{ "WDTCON.SWDTEN", "r3.cpuregisters.wdtcon.swdten",
FT_BOOLEAN, 8, NULL, 0x01,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused1,
{ "WDTCON.UNUSED1", "r3.cpuregisters.wdtcon.unused1",
FT_BOOLEAN, 8, NULL, 0x02,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused2,
{ "WDTCON.UNUSED2", "r3.cpuregisters.wdtcon.unused2",
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused3,
{ "WDTCON.UNUSED3", "r3.cpuregisters.wdtcon.unused3",
FT_BOOLEAN, 8, NULL, 0x08,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused4,
{ "WDTCON.UNUSED4", "r3.cpuregisters.wdtcon.unused4",
FT_BOOLEAN, 8, NULL, 0x10,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused5,
{ "WDTCON.UNUSED5", "r3.cpuregisters.wdtcon.unused5",
FT_BOOLEAN, 8, NULL, 0x20,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused6,
{ "WDTCON.UNUSED6", "r3.cpuregisters.wdtcon.unused6",
FT_BOOLEAN, 8, NULL, 0x40,
NULL, HFILL }
},
{ &hf_r3_cpuregisters_wdtcon_unused7,
{ "WDTCON.UNUSED7", "r3.cpuregisters.wdtcon.unused7",
FT_BOOLEAN, 8, NULL, 0x80,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg00,
{ "REG 0x00", "r3.m41t81.reg00",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg01,
{ "REG 0x01", "r3.m41t81.reg01",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg02,
{ "REG 0x02", "r3.m41t81.reg02",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg03,
{ "REG 0x03", "r3.m41t81.reg03",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg04,
{ "REG 0x04", "r3.m41t81.reg04",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg05,
{ "REG 0x05", "r3.m41t81.reg05",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg06,
{ "REG 0x06", "r3.m41t81.reg06",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg07,
{ "REG 0x07", "r3.m41t81.reg07",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg08,
{ "REG 0x08", "r3.m41t81.reg08",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg09,
{ "REG 0x09", "r3.m41t81.reg09",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a,
{ "REG 0x0a", "r3.m41t81.reg0a",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0b,
{ "REG 0x0b", "r3.m41t81.reg0b",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0c,
{ "REG 0x0c", "r3.m41t81.reg0c",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0d,
{ "REG 0x0d", "r3.m41t81.reg0d",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0e,
{ "REG 0x0e", "r3.m41t81.reg0e",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0f,
{ "REG 0x0f", "r3.m41t81.reg0f",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg10,
{ "REG 0x10", "r3.m41t81.reg10",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg11,
{ "REG 0x11", "r3.m41t81.reg11",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg12,
{ "REG 0x12", "r3.m41t81.reg12",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg13,
{ "REG 0x13", "r3.m41t81.reg13",
FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg00_sec1,
{ ".1 Seconds", "r3.m41t81.reg00.sec1",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg00_sec01,
{ ".01 Seconds", "r3.m41t81.reg00.sec01",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg01_st,
{ "ST", "r3.m41t81.reg01.st",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg01_10sec,
{ "10 Seconds", "r3.m41t81.reg01.10sec",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg01_1sec,
{ "1 Seconds", "r3.m41t81.reg01.1sec",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg02_notused,
{ "(not used)", "r3.m41t81.reg02.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg02_10min,
{ "10 Minutes", "r3.m41t81.reg02.10min",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg02_1min,
{ "1 Minutes", "r3.m41t81.reg02.1min",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg03_cbe,
{ "CBE", "r3.m41t81.reg03.cbe",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg03_cb,
{ "CB", "r3.m41t81.reg03.cb",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg03_10hour,
{ "10 Hours", "r3.m41t81.reg03.10hour",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg03_1hour,
{ "1 Hours", "r3.m41t81.reg03.1hour",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg04_notused,
{ "(not used)", "r3.m41t81.reg04.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg04_dow,
{ "DOW", "r3.m41t81.reg04.dow",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg05_notused,
{ "(not used)", "r3.m41t81.reg05.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg05_10day,
{ "10 Day", "r3.m41t81.reg05.10day",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg05_1day,
{ "1 Day", "r3.m41t81.reg05.1day",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg06_notused,
{ "(not used)", "r3.m41t81.reg06.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg06_10month,
{ "10 Month", "r3.m41t81.reg06.10month",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg06_1month,
{ "1 Month", "r3.m41t81.reg06.1month",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg07_10year,
{ "10 Year", "r3.m41t81.reg07.10year",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg07_1year,
{ "1 Year", "r3.m41t81.reg07.1year",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg08_out,
{ "OUT", "r3.m41t81.reg08.out",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg08_ft,
{ "FT", "r3.m41t81.reg08.ft",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg08_s,
{ "S", "r3.m41t81.reg08.s",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg08_cal,
{ "CAL", "r3.m41t81.reg08.cal",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg09_notused,
{ "(not used)", "r3.m41t81.reg09.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg09_bmb,
{ "BMB", "r3.m41t81.reg09.bmb",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg09_rb,
{ "RB", "r3.m41t81.reg09.rb",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a_afe,
{ "AFE", "r3.m41t81.reg0a.afe",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a_sqwe,
{ "SQWE", "r3.m41t81.reg0a.sqwe",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a_abe,
{ "ABE", "r3.m41t81.reg0a.abe",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a_10monthalm,
{ "10 Month Alarm", "r3.m41t81.reg0a.10monthalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0a_1monthalm,
{ "1 Month Alarm", "r3.m41t81.reg0a.1monthalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0b_rpt5,
{ "RPT5", "r3.m41t81.reg0b.rpt5",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0b_rpt4,
{ "RPT4", "r3.m41t81.reg0b.rpt4",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0b_10dayalm,
{ "10 Day Alarm", "r3.m41t81.reg0b.10dayalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0b_1dayalm,
{ "1 Day Alarm", "r3.m41t81.reg0b.1dayalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0c_rpt3,
{ "RPT3", "r3.m41t81.reg0c.rpt3",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0c_ht,
{ "HT", "r3.m41t81.reg0c.ht",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0c_10houralm,
{ "10 Hour Alarm", "r3.m41t81.reg0c.10houralm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0c_1houralm,
{ "1 Hour Alarm", "r3.m41t81.reg0c.1houralm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0d_rpt2,
{ "RPT2", "r3.m41t81.reg0d.rpt2",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0d_10minalm,
{ "10 Min Alarm", "r3.m41t81.reg0d.10minalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0d_1minalm,
{ "1 Min Alarm", "r3.m41t81.reg0d.1minalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0e_rpt1,
{ "RPT1", "r3.m41t81.reg0e.rpt1",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0e_10secalm,
{ "10 Sec Alarm", "r3.m41t81.reg0e.10secalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0e_1secalm,
{ "1 Sec Alarm", "r3.m41t81.reg0e.1secalm",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0f_wdf,
{ "WDF", "r3.m41t81.reg0f.wdf",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0f_af,
{ "AF", "r3.m41t81.reg0f.af",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg0f_notused,
{ "(not used)", "r3.m41t81.reg0f.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg10_notused,
{ "(not used)", "r3.m41t81.reg10.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg11_notused,
{ "(not used)", "r3.m41t81.reg11.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg12_notused,
{ "(not used)", "r3.m41t81.reg12.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg13_rs,
{ "RS", "r3.m41t81.reg13.rs",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_dumpm41t81_reg13_notused,
{ "(not used)", "r3.m41t81.reg13.notused",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_manufacturer,
{ "Manufacturer", "r3.sn.manufacturer",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_year,
{ "Year", "r3.sn.year",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_week,
{ "Week", "r3.sn.week",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_model,
{ "Model", "r3.sn.model",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_sequence,
{ "Sequence", "r3.sn.sequence",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_group,
{ "Group", "r3.sn.group",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_nid,
{ "NID", "r3.sn.nid",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_hid,
{ "HID", "r3.sn.hid",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_power_supply,
{ "Power Supply", "r3.sn.power_supply",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_sn_mortise,
{ "Mortise", "r3.sn.mortise",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_debuglog_recordnumber,
{ "Record Number", "r3.debuglog.recordnumber",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_debuglog_flags,
{ "Flags", "r3.debuglog.flags",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_debuglog_tick,
{ "Tick", "r3.debuglog.tick",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtype,
{ "Upstream Field", "r3.manageuser",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypelength,
{ "Field Length", "r3.manageuser.length",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypetype,
{ "Field Type", "r3.manageuser.type",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_adduserparamtypenames_ext, 0x0,
NULL, HFILL }
},
#if 0
{ &hf_r3_adduserparamtypedatalen,
{ "Data Length", "r3.manageuser.datalen",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypeerror,
{ "Error", "r3.manageuser.error",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
#endif
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_DISPOSITION],
{ "Disposition", "r3.manageuser.disposition",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_dispositionnames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERNO],
{ "User Number", "r3.manageuser.usernumber",
FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSALWAYS],
{ "Access Always", "r3.manageuser.accessalways",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_ACCESSMODE],
{ "Access Mode", "r3.manageuser.accessmode",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_accessmodenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_CACHED],
{ "Cached", "r3.manageuser.cached",
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USERTYPE],
{ "User Type", "r3.manageuser.usertype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_usertypenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELD],
{ "Primary Field", "r3.manageuser.primaryfield",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_PRIMARYFIELDTYPE],
{ "Primary Field Type", "r3.manageuser.primaryfieldtype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELD],
{ "Aux Field", "r3.manageuser.auxfield",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_AUXFIELDTYPE],
{ "Aux Field Type", "r3.manageuser.auxfieldtype",
FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &r3_ppmisourcenames_ext, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_USECOUNT],
{ "Use Count", "r3.manageuser.usecount",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXCEPTIONGROUP],
{ "Exception Group", "r3.manageuser.exceptiongroup",
FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_EXPIREON],
{ "Expire On", "r3.manageuser.expireon",
FT_UINT24, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_r3_adduserparamtypearray [ADDUSERPARAMTYPE_TIMEZONE],
{ "Timezone", "r3.manageuser.timezone",
FT_UINT32, BASE_HEX, NULL, 0x0,
NULL, HFILL }
}
};
/* Setup protocol subtree array */
static gint *ett [] =
{
&ett_r3,
&ett_r3header,
&ett_r3tail,
&ett_r3payload,
&ett_r3cmd,
&ett_r3configitem,
&ett_r3upstreamcommand,
&ett_r3upstreamfield,
&ett_r3timezone,
&ett_r3expireon,
&ett_r3datetime,
&ett_r3eventlogrecord,
&ett_r3declinedlogrecord,
&ett_r3alarmlogrecord,
&ett_r3debugmsg,
&ett_r3defineexceptionstartdate,
&ett_r3defineexceptionenddate,
&ett_r3defineexceptiongroupbits,
&ett_r3definecalendarmonth [1],
&ett_r3definecalendarmonth [2],
&ett_r3definecalendarmonth [3],
&ett_r3definecalendarmonth [4],
&ett_r3definecalendarmonth [5],
&ett_r3definecalendarmonth [6],
&ett_r3definecalendarmonth [7],
&ett_r3definecalendarmonth [8],
&ett_r3definecalendarmonth [9],
&ett_r3definecalendarmonth [10],
&ett_r3definecalendarmonth [11],
&ett_r3definecalendarmonth [12],
&ett_r3definetimezonestarttime,
&ett_r3definetimezoneendtime,
&ett_r3definetimezonedaymap,
&ett_r3eventlogdumpstarttime,
&ett_r3eventlogdumpendtime,
&ett_r3declinedlogdumpstarttime,
&ett_r3declinedlogdumpendtime,
&ett_r3alarmlogdumpstarttime,
&ett_r3alarmlogdumpendtime,
&ett_r3clearnvram,
&ett_r3filters,
&ett_r3alarmlist,
&ett_r3alarmcfg,
&ett_r3commandmfg,
&ett_r3serialnumber,
&ett_r3iopins,
&ett_r3checksumresults,
&ett_r3checksumresultsfield,
&ett_r3forceoptions,
&ett_r3peekpoke,
&ett_r3downloadfirmware,
&ett_r3capabilities,
&ett_r3lockstate,
&ett_r3mortisestatelog,
&ett_r3timerchain,
&ett_r3taskflags,
&ett_r3taskflagsentry,
&ett_r3checkpointlog,
&ett_r3checkpointlogentry,
&ett_r3cpuregisters,
&ett_r3cpuregister,
&ett_r3m41t81registers,
&ett_r3m41t81register,
&ett_r3debuglogrecord,
&ett_r3setdatetime,
&ett_r3manageuser
};
static ei_register_info ei[] = {
{ &ei_r3_malformed_length, { "r3.malformed_length", PI_MALFORMED, PI_ERROR, "Malformed length", EXPFILL }},
{ &ei_r3_reserved_upstream_command_value, { "r3.reserved_upstream_command_value", PI_UNDECODED, PI_WARN, "\"Reserved\" Upstream Command value", EXPFILL }},
{ &ei_r3_mfgfield, { "r3.mfgfield.field.unknown", PI_UNDECODED, PI_WARN, "Unknown manufacturing command value", EXPFILL }},
{ &ei_r3_mfgfield_too_many_adc_values, { "r3.mfgfield.too_many_adc_values", PI_PROTOCOL, PI_WARN, "MFG Field: too many adc values", EXPFILL }},
{ &ei_r3_peekpoke_operation, { "r3.peekpoke.operation.unknown", PI_UNDECODED, PI_WARN, "Unknown peekpoke operation value", EXPFILL }},
{ &ei_r3_response_hasdata_octet_1, { "r3.response_hasdata.octet_1_not_cmd_response", PI_PROTOCOL, PI_WARN, "Octet 1 not CMD_RESPONSE", EXPFILL }},
{ &ei_r3_response_hasdata_octet_2, { "r3.response_hasdata.octet_2_not_response_hasdata", PI_PROTOCOL, PI_WARN, "Octet 2 not RESPONSE_HASDATA", EXPFILL }},
{ &ei_r3_response_hasdata_octet_3, { "r3.response_hasdata.octet_3_ge_upstreamcommand_last", PI_PROTOCOL, PI_WARN, "Octet 3 >= UPSTREAMCOMMAND_LAST", EXPFILL }},
{ &ei_r3_firmwaredownload_action, { "r3.firmwaredownload.action.unknown", PI_PROTOCOL, PI_WARN, "Unknown Firmware download action", EXPFILL }},
{ &ei_r3_cmd_downloadfirmwaretimeout, { "r3.command.downloadfirmwaretimeout", PI_UNDECODED, PI_WARN, "Download Firmware Timeout", EXPFILL }},
{ &ei_r3_unknown_command_value, { "r3.command.unknown", PI_UNDECODED, PI_WARN, "Unknown command value", EXPFILL }},
};
expert_module_t* expert_r3;
proto_r3 = proto_register_protocol ("Assa Abloy R3", "R3", "r3");
register_dissector ("r3", dissect_r3, proto_r3);
proto_register_field_array (proto_r3, hf, array_length (hf));
proto_register_subtree_array (ett, array_length (ett));
expert_r3 = expert_register_protocol(proto_r3);
expert_register_field_array(expert_r3, ei, array_length(ei));
}
void proto_reg_handoff_r3 (void)
{
dissector_handle_t r3_handle = find_dissector ("r3");
dissector_add_uint_range_with_preference("tcp.port", ASSA_R3_PORT_RANGE, r3_handle);
}
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*
* Local Variables:
* c-basic-offset: 2
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=2 tabstop=8 expandtab:
* :indentSize=2:tabSize=8:noTabs=true:
*/