/* packet-assa_r3.c * Routines for R3 packet dissection * Copyright (c) 2009 Assa Abloy USA * * 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 * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "config.h" #include #include #include #include #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; static dissector_handle_t r3_handle = NULL; /* * 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 (i0) { 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 (i0) { 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 (i0) { 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 (i0) { 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"); r3_handle = 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_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: */