aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-12-30 20:36:01 -0600
committerDan Williams <dcbw@redhat.com>2011-12-30 20:42:51 -0600
commitc9d0dea5b09f2b6ad3b6f199a32a5c282d3716bc (patch)
tree0e549f587e3437d2737127a0d317a7a853ec94c0
parenta2b578d755e51f820bbe015431ef02266454e66b (diff)
decode: add some python tools to decode SniffUSB dumps
decode.py will read SniffUSB logs of communication with QMUX or WMC speaking devices. It will dump the packets in both hex and ASCII. If you know something about the device then you can tell it to decode the packets. For example, we know the Pantech UML290's WMC port speaks WMC using Bulk Transfers, so we can: decode.py --transfer=wmc <path to sniffusb logs> or we know the UML290's "rmnet" port speaks raw IP in the Bulk Transfers and QMUX in the Control Transfers, so: decode.py --control=qmux <path to sniffusb logs> qmiprotgen.py takes a path to an Entities.txt file and dumps out the protocol entities and services in Python code which is used by qmux.py. xml2ascii.py and analyze.py dump out UsbSnoopy XML logs but these are not as usable as the SniffUSB logs (they do not provide good direction information). http://www.wingmanteam.com/usbsnoopy/ http://www.pcausa.com/Utilities/UsbSnoop/
-rwxr-xr-xdecode/analyze.py179
-rwxr-xr-xdecode/decode.py71
-rw-r--r--decode/defs.py20
-rw-r--r--decode/packet.py192
-rwxr-xr-xdecode/qmiprotgen.py494
-rw-r--r--decode/qmiprotocol.py2352
-rw-r--r--decode/qmux.py187
-rw-r--r--decode/wmc.py211
-rwxr-xr-xdecode/xml2ascii.py82
9 files changed, 3788 insertions, 0 deletions
diff --git a/decode/analyze.py b/decode/analyze.py
new file mode 100755
index 00000000..36db3962
--- /dev/null
+++ b/decode/analyze.py
@@ -0,0 +1,179 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+# ---- Dumps UsbSnoopy XML captures of WMC traffic
+
+from xml.sax import saxutils
+from xml.sax import handler
+import binascii
+import string
+
+packets = []
+counts = {}
+
+TO_UNKNOWN = 0
+TO_MODEM = 1
+TO_HOST = 2
+
+class Packet:
+ def __init__(self, data, idx):
+ if len(data) % 2 != 0:
+ raise Exception("bad data length")
+
+ self.idx = idx
+ self.type = TO_UNKNOWN
+ if data[:14] == "41542a574d433d":
+ # host->device: remove the AT*WMC= bits and newline at the end
+ data = data[14:]
+ if data[len(data) - 2:] == "0d":
+ data = data[:len(data) - 2]
+ self.type = TO_MODEM
+# elif data[len(data) - 6:] == "30307e":
+# # device->host: remove HDLC terminator and fake CRC
+# data = data[:len(data) - 6]
+# self.type = TO_HOST
+ elif data[len(data) - 2:] == "7e":
+ # device->host: remove HDLC terminator and CRC
+ data = data[:len(data) - 6]
+ self.type = TO_HOST
+
+ self.data = binascii.unhexlify(data)
+ self.four = data[:4]
+
+ # PPP-unescape TO_MODEM data
+ escape = False
+ new_data = ""
+ for i in self.data:
+ if ord(i) == 0x7D:
+ escape = True
+ elif escape == True:
+ new_data += chr(ord(i) ^ 0x20)
+ escape = False
+ else:
+ new_data += i
+ self.data = new_data
+
+ def add_ascii(self, line, items):
+ if len(line) < 53:
+ line += " " * (53 - len(line))
+ for i in items:
+ if chr(i) in string.printable and i >= 32:
+ line += chr(i)
+ else:
+ line += "."
+ return line
+
+ def show(self):
+ line = "*"
+ if self.type == TO_MODEM:
+ line = ">"
+ elif self.type == TO_HOST:
+ line = "<"
+
+ offset = 0
+ items = []
+ printed = False
+ for i in self.data:
+ printed = False
+ line += " %02x" % ord(i)
+ items.append(ord(i))
+ if len(items) % 16 == 0:
+ print "%03d: %s" % (offset, self.add_ascii(line, items))
+ line = " "
+ items = []
+ printed = True
+ offset += 16
+ if not printed:
+ print "%03d: %s" % (offset, self.add_ascii(line, items))
+ print ""
+
+class FindPackets(handler.ContentHandler):
+ def __init__(self):
+ self.inFunction = False
+ self.inPayload = False
+ self.ignore = False
+ self.inTimestamp = False
+ self.timestamp = None
+ self.packet = None
+ self.idx = 1
+
+ def startElement(self, name, attrs):
+ if name == "function":
+ self.inFunction = True
+ elif name == "payloadbytes":
+ self.inPayload = True
+ elif name == "timestamp":
+ self.inTimestamp = True
+
+ def characters(self, ch):
+ if self.ignore:
+ return
+
+ stripped = ch.strip()
+ if self.inFunction and ch != "BULK_OR_INTERRUPT_TRANSFER":
+ self.ignore = True
+ return
+ elif self.inTimestamp:
+ self.timestamp = stripped
+ elif self.inPayload and len(stripped) > 0:
+ if self.packet == None:
+ self.packet = stripped
+ else:
+ self.packet += stripped
+
+ def endElement(self, name):
+ if name == "function":
+ self.inFunction = False
+ elif name == "payloadbytes":
+ self.inPayload = False
+ elif name == "payload":
+ if self.packet:
+ p = Packet(self.packet, self.idx)
+ self.idx = self.idx + 1
+ packets.append(p)
+ self.packet = None
+
+ self.ignore = False
+ self.timestamp = None
+ elif name == "timestamp":
+ self.inTimestamp = False
+
+
+from xml.sax import make_parser
+from xml.sax import parse
+import sys
+
+if __name__ == "__main__":
+ dh = FindPackets()
+ parse(sys.argv[1], dh)
+
+ cmds = {}
+ for p in packets:
+ if cmds.has_key(p.four):
+ cmds[p.four].append(p)
+ else:
+ cmds[p.four] = [p]
+ if len(sys.argv) > 2:
+ if p.four == sys.argv[2]:
+ p.show()
+ else:
+ p.show()
+
+ print ""
+ print "cmd #tot"
+ for k in cmds.keys():
+ print "%s (%d)" % (k, len(cmds[k]))
+ print ""
+
diff --git a/decode/decode.py b/decode/decode.py
new file mode 100755
index 00000000..5be72cdc
--- /dev/null
+++ b/decode/decode.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+
+import binascii
+import string
+import sys
+import defs
+from packet import Packet
+
+packets = []
+control = None
+transfer = None
+
+def get_protocol(arg):
+ return arg[arg.index("=") + 1:]
+
+if __name__ == "__main__":
+ i = 1
+ if sys.argv[i].startswith("--control="):
+ control = get_protocol(sys.argv[i])
+ i = i + 1
+ if sys.argv[i].startswith("--transfer="):
+ transfer = get_protocol(sys.argv[i])
+ i = i + 1
+
+ path = sys.argv[i]
+ f = open(path, 'r')
+ lines = f.readlines()
+ f.close()
+
+ in_packet = False
+ finish_packet = False
+ pkt_lines = []
+ for l in lines:
+ if l[0] == '[':
+ # Start of a packet
+ if "] >>> URB" in l or "] <<< URB" in l:
+ if in_packet == True:
+ in_packet = False
+ finish_packet = True
+ else:
+ in_packet = True
+ elif "] UsbSnoop - " in l:
+ # Packet done?
+ if in_packet == True:
+ in_packet = False
+ finish_packet = True
+
+ if finish_packet == True:
+ packets.append(Packet(pkt_lines, control, transfer))
+ pkt_lines = []
+ finish_packet = False
+
+ if in_packet == True:
+ pkt_lines.append(l)
+
+ for p in packets:
+ p.show()
diff --git a/decode/defs.py b/decode/defs.py
new file mode 100644
index 00000000..847b67f4
--- /dev/null
+++ b/decode/defs.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+
+TO_UNKNOWN = 0
+TO_MODEM = 1
+TO_HOST = 2
+
diff --git a/decode/packet.py b/decode/packet.py
new file mode 100644
index 00000000..89fb9683
--- /dev/null
+++ b/decode/packet.py
@@ -0,0 +1,192 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+
+import binascii
+import string
+import sys
+
+import defs
+
+import wmc
+
+URBF_UNKNOWN = 0
+URBF_GET_DESC = 1
+URBF_SEL_CONF = 2
+URBF_RESET_PIPE = 3
+URBF_TRANSFER = 4
+URBF_GET_STATUS = 5
+URBF_CONTROL = 6
+
+funcs = {
+ "-- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:": (URBF_GET_DESC, False, None),
+ "-- URB_FUNCTION_SELECT_CONFIGURATION:": (URBF_SEL_CONF, False, None),
+ "-- URB_FUNCTION_RESET_PIPE:": (URBF_RESET_PIPE, False, None),
+ "-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:": (URBF_TRANSFER, True, "T"),
+ "-- URB_FUNCTION_GET_STATUS_FROM_DEVICE:": (URBF_GET_STATUS, False, None),
+ "-- URB_FUNCTION_CONTROL_TRANSFER:": (URBF_CONTROL, True, "C")
+}
+
+def get_urb_info(l):
+ num = 0
+ direction = defs.TO_UNKNOWN
+
+ idx = string.find(l, ">>> URB ")
+ if idx >= 0:
+ direction = defs.TO_MODEM
+ else:
+ idx = string.find(l, "<<< URB ")
+ if idx >= 0:
+ direction = defs.TO_HOST
+ else:
+ raise Exception("Invalid packet start line")
+
+ numstr = ""
+ for c in l[idx + 9:]:
+ if c.isdigit():
+ numstr = numstr + c
+ else:
+ break
+
+ if not len(numstr):
+ raise Exception("Failed to get URB number ('%s')" % l)
+
+ return (direction, int(numstr))
+
+class Packet:
+ def __init__(self, lines, control_prot, transfer_prot):
+ self.direction = defs.TO_UNKNOWN
+ self.func = URBF_UNKNOWN
+ self.extra = []
+ self.data = None
+ self.urbnum = 0
+ self.protocol = None
+ self.has_data = False
+ self.typecode = None
+
+ # Parse the packet
+
+ (self.direction, self.urbnum) = get_urb_info(lines[0])
+
+ try:
+ (self.func, self.has_data, self.typecode) = funcs[lines[1].strip()]
+ except KeyError:
+ raise KeyError("URB function %s not handled" % lines[1].strip())
+
+ if self.func == URBF_TRANSFER:
+ self.protocol = transfer_prot
+ elif self.func == URBF_CONTROL:
+ self.protocol = control_prot
+
+ # Parse transfer buffer data
+ in_data = False
+ data = ""
+ for i in range(2, len(lines)):
+ l = lines[i].strip()
+ if self.has_data:
+ if l.startswith("TransferBufferMDL"):
+ if in_data == True:
+ raise Exception("Already in data")
+ in_data = True
+ elif l.startswith("UrbLink"):
+ in_data = False
+ elif in_data and len(l) and not "no data supplied" in l:
+ d = l[l.index(": ") + 2:] # get data alone
+ data += d.replace(" ", "")
+ else:
+ self.extra.append(l)
+
+ if len(data) > 0:
+ self.parse_data(data)
+
+ def get_funcs(self):
+ if self.protocol:
+ exec "from %s import get_funcs" % self.protocol
+ return get_funcs()
+ return (None, None)
+
+ def parse_data(self, data):
+ if not self.has_data:
+ raise Exception("Data only valid for URBF_TRANSFER or URBF_CONTROL")
+
+ (unpack, show) = self.get_funcs()
+ if unpack:
+ self.data = unpack(data, self.direction)
+ else:
+ self.data = binascii.unhexlify(data)
+
+ def add_ascii(self, line, items):
+ if len(line) < 53:
+ line += " " * (53 - len(line))
+ for i in items:
+ if chr(i) in string.printable and i >= 32:
+ line += chr(i)
+ else:
+ line += "."
+ return line
+
+ def show(self):
+ if not self.has_data or not self.data:
+ return
+
+ # Ignore URBF_TRANSFER packets that appear to be returning SetupPacket data
+ if self.data == chr(0xa1) + chr(0x01) + chr(0x00) + chr(0x00) + chr(0x05) + chr(0x00) + chr(0x00) + chr(0x00):
+ return
+
+ offset = 0
+ items = []
+ printed = False
+ line = ""
+
+ prefix = "*"
+ if self.direction == defs.TO_MODEM:
+ prefix = ">"
+ elif self.direction == defs.TO_HOST:
+ prefix = "<"
+
+ if self.typecode:
+ prefix = prefix + " " + self.typecode + " "
+ else:
+ prefix = prefix + " "
+
+ prefix_printed = False
+ for i in self.data:
+ printed = False
+ line += " %02x" % ord(i)
+ items.append(ord(i))
+ if len(items) % 16 == 0:
+ output = "%04d: %s" % (offset, self.add_ascii(line, items))
+ if offset == 0:
+ print prefix + output
+ else:
+ print " " + output
+ line = ""
+ items = []
+ printed = True
+ offset += 16
+ prefix_printed = True
+
+ if not printed:
+ output = "%04d: %s" % (offset, self.add_ascii(line, items))
+ if prefix_printed:
+ print " " + output
+ else:
+ print prefix + output
+ print ""
+
+ (unpack, show) = self.get_funcs()
+ if show:
+ show(self.data, " " * 8, self.direction)
+
diff --git a/decode/qmiprotgen.py b/decode/qmiprotgen.py
new file mode 100755
index 00000000..b3692845
--- /dev/null
+++ b/decode/qmiprotgen.py
@@ -0,0 +1,494 @@
+#!/bin/env python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+# Takes an Entity.txt and generates the Python dicts defining the commands
+# and the TLVs associated with those commands
+
+import sys
+
+TP_REQUEST = 0
+TP_RESPONSE = 1
+TP_INDICATION = 2
+
+cmdenum = """
+ eQMI_CTL_SET_INSTANCE_ID = 32, // 32 Set the unique link instance ID
+ eQMI_CTL_GET_VERSION_INFO, // 33 Get supported service version info
+ eQMI_CTL_GET_CLIENT_ID, // 34 Get a unique client ID
+ eQMI_CTL_RELEASE_CLIENT_ID, // 35 Release the unique client ID
+ eQMI_CTL_REVOKE_CLIENT_ID_IND, // 36 Indication of client ID revocation
+ eQMI_CTL_INVALID_CLIENT_ID, // 37 Indication of invalid client ID
+ eQMI_CTL_SET_DATA_FORMAT, // 38 Set host driver data format
+ eQMI_CTL_SYNC, // 39 Synchronize client/server
+ eQMI_CTL_SYNC_IND = 39, // 39 Synchronize indication
+ eQMI_CTL_SET_EVENT, // 40 Set event report conditions
+ eQMI_CTL_EVENT_IND = 40, // 40 Event report indication
+ eQMI_CTL_SET_POWER_SAVE_CFG, // 41 Set power save config
+ eQMI_CTL_SET_POWER_SAVE_MODE, // 42 Set power save mode
+ eQMI_CTL_GET_POWER_SAVE_MODE, // 43 Get power save mode
+
+ eQMI_WDS_RESET, // 00 Reset WDS service state variables
+ eQMI_WDS_SET_EVENT, // 01 Set connection state report conditions
+ eQMI_WDS_EVENT_IND = 1, // 01 Connection state report indication
+ eQMI_WDS_ABORT, // 02 Abort previously issued WDS command
+ eQMI_WDS_START_NET = 32, // 32 Start WDS network interface
+ eQMI_WDS_STOP_NET, // 33 Stop WDS network interface
+ eQMI_WDS_GET_PKT_STATUS, // 34 Get packet data connection status
+ eQMI_WDS_PKT_STATUS_IND = 34, // 34 Packet data connection status indication
+ eQMI_WDS_GET_RATES, // 35 Get current bit rates of the connection
+ eQMI_WDS_GET_STATISTICS, // 36 Get the packet data transfer statistics
+ eQMI_WDS_G0_DORMANT, // 37 Go dormant
+ eQMI_WDS_G0_ACTIVE, // 38 Go active
+ eQMI_WDS_CREATE_PROFILE, // 39 Create profile with specified settings
+ eQMI_WDS_MODIFY_PROFILE, // 40 Modify profile with specified settings
+ eQMI_WDS_DELETE_PROFILE, // 41 Delete the specified profile
+ eQMI_WDS_GET_PROFILE_LIST, // 42 Get all profiles
+ eQMI_WDS_GET_PROFILE, // 43 Get the specified profile
+ eQMI_WDS_GET_DEFAULTS, // 44 Get the default data session settings
+ eQMI_WDS_GET_SETTINGS, // 45 Get the runtime data session settings
+ eQMI_WDS_SET_MIP, // 46 Get the mobile IP setting
+ eQMI_WDS_GET_MIP, // 47 Set the mobile IP setting
+ eQMI_WDS_GET_DORMANCY, // 48 Get the dormancy status
+ eQMI_WDS_GET_AUTOCONNECT = 52, // 52 Get the NDIS autoconnect setting
+ eQMI_WDS_GET_DURATION, // 53 Get the duration of data session
+ eQMI_WDS_GET_MODEM_STATUS, // 54 Get the modem status
+ eQMI_WDS_MODEM_IND = 54, // 54 Modem status indication
+ eQMI_WDS_GET_DATA_BEARER, // 55 Get the data bearer type
+ eQMI_WDS_GET_MODEM_INFO, // 56 Get the modem info
+ eQMI_WDS_MODEM_INFO_IND = 56, // 56 Modem info indication
+ eQMI_WDS_GET_ACTIVE_MIP = 60, // 60 Get the active mobile IP profile
+ eQMI_WDS_SET_ACTIVE_MIP, // 61 Set the active mobile IP profile
+ eQMI_WDS_GET_MIP_PROFILE, // 62 Get mobile IP profile settings
+ eQMI_WDS_SET_MIP_PROFILE, // 63 Set mobile IP profile settings
+ eQMI_WDS_GET_MIP_PARAMS, // 64 Get mobile IP parameters
+ eQMI_WDS_SET_MIP_PARAMS, // 65 Set mobile IP parameters
+ eQMI_WDS_GET_LAST_MIP_STATUS, // 66 Get last mobile IP status
+ eQMI_WDS_GET_AAA_AUTH_STATUS, // 67 Get AN-AAA authentication status
+ eQMI_WDS_GET_CUR_DATA_BEARER, // 68 Get current data bearer
+ eQMI_WDS_GET_CALL_LIST, // 69 Get the call history list
+ eQMI_WDS_GET_CALL_ENTRY, // 70 Get an entry from the call history list
+ eQMI_WDS_CLEAR_CALL_LIST, // 71 Clear the call history list
+ eQMI_WDS_GET_CALL_LIST_MAX, // 72 Get maximum size of call history list
+ eQMI_WDS_SET_IP_FAMILY = 77, // 77 Set the client IP family preference
+ eQMI_WDS_SET_AUTOCONNECT = 81, // 81 Set the NDIS autoconnect setting
+ eQMI_WDS_GET_DNS, // 82 Get the DNS setting
+ eQMI_WDS_SET_DNS, // 83 Set the DNS setting
+
+ eQMI_DMS_RESET, // 00 Reset DMS service state variables
+ eQMI_DMS_SET_EVENT, // 01 Set connection state report conditions
+ eQMI_DMS_EVENT_IND = 1, // 01 Connection state report indication
+ eQMI_DMS_GET_CAPS = 32, // 32 Get the device capabilities
+ eQMI_DMS_GET_MANUFACTURER, // 33 Get the device manfacturer
+ eQMI_DMS_GET_MODEL_ID, // 34 Get the device model ID
+ eQMI_DMS_GET_REV_ID, // 35 Get the device revision ID
+ eQMI_DMS_GET_NUMBER, // 36 Get the assigned voice number
+ eQMI_DMS_GET_IDS, // 37 Get the ESN/IMEI/MEID
+ eQMI_DMS_GET_POWER_STATE, // 38 Get the get power state
+ eQMI_DMS_UIM_SET_PIN_PROT, // 39 UIM - Set PIN protection
+ eQMI_DMS_UIM_PIN_VERIFY, // 40 UIM - Verify PIN
+ eQMI_DMS_UIM_PIN_UNBLOCK, // 41 UIM - Unblock PIN
+ eQMI_DMS_UIM_PIN_CHANGE, // 42 UIM - Change PIN
+ eQMI_DMS_UIM_GET_PIN_STATUS, // 43 UIM - Get PIN status
+ eQMI_DMS_GET_MSM_ID = 44, // 44 Get MSM ID
+ eQMI_DMS_GET_OPERTAING_MODE, // 45 Get the operating mode
+ eQMI_DMS_SET_OPERATING_MODE, // 46 Set the operating mode
+ eQMI_DMS_GET_TIME, // 47 Get timestamp from the device
+ eQMI_DMS_GET_PRL_VERSION, // 48 Get the PRL version
+ eQMI_DMS_GET_ACTIVATED_STATE, // 49 Get the activation state
+ eQMI_DMS_ACTIVATE_AUTOMATIC, // 50 Perform an automatic activation
+ eQMI_DMS_ACTIVATE_MANUAL, // 51 Perform a manual activation
+ eQMI_DMS_GET_USER_LOCK_STATE, // 52 Get the lock state
+ eQMI_DMS_SET_USER_LOCK_STATE, // 53 Set the lock state
+ eQMI_DMS_SET_USER_LOCK_CODE, // 54 Set the lock PIN
+ eQMI_DMS_READ_USER_DATA, // 55 Read user data
+ eQMI_DMS_WRITE_USER_DATA, // 56 Write user data
+ eQMI_DMS_READ_ERI_FILE, // 57 Read the enhanced roaming indicator file
+ eQMI_DMS_FACTORY_DEFAULTS, // 58 Reset to factory defaults
+ eQMI_DMS_VALIDATE_SPC, // 59 Validate service programming code
+ eQMI_DMS_UIM_GET_ICCID, // 60 Get UIM ICCID
+ eQMI_DMS_GET_FIRWARE_ID, // 61 Get firmware ID
+ eQMI_DMS_SET_FIRMWARE_ID, // 62 Set firmware ID
+ eQMI_DMS_GET_HOST_LOCK_ID, // 63 Get host lock ID
+ eQMI_DMS_UIM_GET_CK_STATUS, // 64 UIM - Get control key status
+ eQMI_DMS_UIM_SET_CK_PROT, // 65 UIM - Set control key protection
+ eQMI_DMS_UIM_UNBLOCK_CK, // 66 UIM - Unblock facility control key
+ eQMI_DMS_GET_IMSI, // 67 Get the IMSI
+ eQMI_DMS_UIM_GET_STATE, // 68 UIM - Get the UIM state
+ eQMI_DMS_GET_BAND_CAPS, // 69 Get the device band capabilities
+ eQMI_DMS_GET_FACTORY_ID, // 70 Get the device factory ID
+ eQMI_DMS_GET_FIRMWARE_PREF, // 71 Get firmware preference
+ eQMI_DMS_SET_FIRMWARE_PREF, // 72 Set firmware preference
+ eQMI_DMS_LIST_FIRMWARE, // 73 List all stored firmware
+ eQMI_DMS_DELETE_FIRMWARE, // 74 Delete specified stored firmware
+ eQMI_DMS_SET_TIME, // 75 Set device time
+ eQMI_DMS_GET_FIRMWARE_INFO, // 76 Get stored firmware info
+ eQMI_DMS_GET_ALT_NET_CFG, // 77 Get alternate network config
+ eQMI_DMS_SET_ALT_NET_CFG, // 78 Set alternate network config
+ eQMI_DMS_GET_IMG_DLOAD_MODE, // 79 Get next image download mode
+ eQMI_DMS_SET_IMG_DLOAD_MODE, // 80 Set next image download mod
+
+ eQMI_NAS_RESET, // 00 Reset NAS service state variables
+ eQMI_NAS_ABORT, // 01 Abort previously issued NAS command
+ eQMI_NAS_SET_EVENT, // 02 Set NAS state report conditions
+ eQMI_NAS_EVENT_IND = 2, // 02 Connection state report indication
+ eQMI_NAS_SET_REG_EVENT, // 03 Set NAS registration report conditions
+ eQMI_NAS_GET_RSSI = 32, // 32 Get the signal strength
+ eQMI_NAS_SCAN_NETS, // 33 Scan for visible network
+ eQMI_NAS_REGISTER_NET, // 34 Initiate a network registration
+ eQMI_NAS_ATTACH_DETACH, // 35 Initiate an attach or detach action
+ eQMI_NAS_GET_SS_INFO, // 36 Get info about current serving system
+ eQMI_NAS_SS_INFO_IND = 36, // 36 Current serving system info indication
+ eQMI_NAS_GET_HOME_INFO, // 37 Get info about home network
+ eQMI_NAS_GET_NET_PREF_LIST, // 38 Get the list of preferred networks
+ eQMI_NAS_SET_NET_PREF_LIST, // 39 Set the list of preferred networks
+ eQMI_NAS_GET_NET_BAN_LIST, // 40 Get the list of forbidden networks
+ eQMI_NAS_SET_NET_BAN_LIST, // 41 Set the list of forbidden networks
+ eQMI_NAS_SET_TECH_PREF, // 42 Set the technology preference
+ eQMI_NAS_GET_TECH_PREF, // 43 Get the technology preference
+ eQMI_NAS_GET_ACCOLC, // 44 Get the Access Overload Class
+ eQMI_NAS_SET_ACCOLC, // 45 Set the Access Overload Class
+ eQMI_NAS_GET_SYSPREF, // 46 Get the CDMA system preference
+ eQMI_NAS_GET_NET_PARAMS, // 47 Get various network parameters
+ eQMI_NAS_SET_NET_PARAMS, // 48 Set various network parameters
+ eQMI_NAS_GET_RF_INFO, // 49 Get the SS radio/band channel info
+ eQMI_NAS_GET_AAA_AUTH_STATUS, // 50 Get AN-AAA authentication status
+ eQMI_NAS_SET_SYS_SELECT_PREF, // 51 Set system selection preference
+ eQMI_NAS_GET_SYS_SELECT_PREF, // 52 Get system selection preference
+ eQMI_NAS_SYS_SELECT_IND = 52, // 52 System selection pref indication
+ eQMI_NAS_SET_DDTM_PREF = 55, // 55 Set DDTM preference
+ eQMI_NAS_GET_DDTM_PREF, // 56 Get DDTM preference
+ eQMI_NAS_DDTM_IND = 56, // 56 DDTM preference indication
+ eQMI_NAS_GET_PLMN_MODE = 59, // 59 Get PLMN mode bit from CSP
+ eQMI_NAS_PLMN_MODE_IND, // 60 CSP PLMN mode bit indication
+ eQMI_NAS_GET_PLMN_NAME = 68, // 68 Get operator name for specified network
+
+ eQMI_WMS_RESET, // 00 Reset WMS service state variables
+ eQMI_WMS_SET_EVENT, // 01 Set new message report conditions
+ eQMI_WMS_EVENT_IND = 1, // 01 New message report indication
+ eQMI_WMS_RAW_SEND = 32, // 32 Send a raw message
+ eQMI_WMS_RAW_WRITE, // 33 Write a raw message to the device
+ eQMI_WMS_RAW_READ, // 34 Read a raw message from the device
+ eQMI_WMS_MODIFY_TAG, // 35 Modify message tag on the device
+ eQMI_WMS_DELETE, // 36 Delete message by index/tag/memory
+ eQMI_WMS_GET_MSG_PROTOCOL = 48, // 48 Get the current message protocol
+ eQMI_WMS_GET_MSG_LIST, // 49 Get list of messages from the device
+ eQMI_WMS_SET_ROUTES, // 50 Set routes for message memory storage
+ eQMI_WMS_GET_ROUTES, // 51 Get routes for message memory storage
+ eQMI_WMS_GET_SMSC_ADDR, // 52 Get SMSC address
+ eQMI_WMS_SET_SMSC_ADDR, // 53 Set SMSC address
+ eQMI_WMS_GET_MSG_LIST_MAX, // 54 Get maximum size of SMS storage
+ eQMI_WMS_SEND_ACK, // 55 Send ACK
+ eQMI_WMS_SET_RETRY_PERIOD, // 56 Set retry period
+ eQMI_WMS_SET_RETRY_INTERVAL, // 57 Set retry interval
+ eQMI_WMS_SET_DC_DISCO_TIMER, // 58 Set DC auto-disconnect timer
+ eQMI_WMS_SET_MEMORY_STATUS, // 59 Set memory storage status
+ eQMI_WMS_SET_BC_ACTIVATION, // 60 Set broadcast activation
+ eQMI_WMS_SET_BC_CONFIG, // 61 Set broadcast config
+ eQMI_WMS_GET_BC_CONFIG, // 62 Get broadcast config
+ eQMI_WMS_MEMORY_FULL_IND, // 63 Memory full indication
+ eQMI_WMS_GET_DOMAIN_PREF, // 64 Get domain preference
+ eQMI_WMS_SET_DOMAIN_PREF, // 65 Set domain preference
+ eQMI_WMS_MEMORY_SEND, // 66 Send message from memory store
+ eQMI_WMS_GET_MSG_WAITING, // 67 Get message waiting info
+ eQMI_WMS_MSG_WAITING_IND, // 68 Message waiting indication
+ eQMI_WMS_SET_PRIMARY_CLIENT, // 69 Set client as primary client
+ eQMI_WMS_SMSC_ADDR_IND, // 70 SMSC address indication
+
+ eQMI_PDS_RESET, // 00 Reset PDS service state variables
+ eQMI_PDS_SET_EVENT, // 01 Set PDS report conditions
+ eQMI_PDS_EVENT_IND = 1, // 01 PDS report indication
+ eQMI_PDS_GET_STATE = 32, // 32 Return PDS service state
+ eQMI_PDS_STATE_IND = 32, // 32 PDS service state indication
+ eQMI_PDS_SET_STATE, // 33 Set PDS service state
+ eQMI_PDS_START_SESSION, // 34 Start a PDS tracking session
+ eQMI_PDS_GET_SESSION_INFO, // 35 Get PDS tracking session info
+ eQMI_PDS_FIX_POSITION, // 36 Manual tracking session position
+ eQMI_PDS_END_SESSION, // 37 End a PDS tracking session
+ eQMI_PDS_GET_NMEA_CFG, // 38 Get NMEA sentence config
+ eQMI_PDS_SET_NMEA_CFG, // 39 Set NMEA sentence config
+ eQMI_PDS_INJECT_TIME, // 40 Inject a time reference
+ eQMI_PDS_GET_DEFAULTS, // 41 Get default tracking session config
+ eQMI_PDS_SET_DEFAULTS, // 42 Set default tracking session config
+ eQMI_PDS_GET_XTRA_PARAMS, // 43 Get the GPS XTRA parameters
+ eQMI_PDS_SET_XTRA_PARAMS, // 44 Set the GPS XTRA parameters
+ eQMI_PDS_FORCE_XTRA_DL, // 45 Force a GPS XTRA database download
+ eQMI_PDS_GET_AGPS_CONFIG, // 46 Get the AGPS mode configuration
+ eQMI_PDS_SET_AGPS_CONFIG, // 47 Set the AGPS mode configuration
+ eQMI_PDS_GET_SVC_AUTOTRACK, // 48 Get the service auto-tracking state
+ eQMI_PDS_SET_SVC_AUTOTRACK, // 49 Set the service auto-tracking state
+ eQMI_PDS_GET_COM_AUTOTRACK, // 50 Get COM port auto-tracking config
+ eQMI_PDS_SET_COM_AUTOTRACK, // 51 Set COM port auto-tracking config
+ eQMI_PDS_RESET_DATA, // 52 Reset PDS service data
+ eQMI_PDS_SINGLE_FIX, // 53 Request single position fix
+ eQMI_PDS_GET_VERSION, // 54 Get PDS service version
+ eQMI_PDS_INJECT_XTRA, // 55 Inject XTRA data
+ eQMI_PDS_INJECT_POSITION, // 56 Inject position data
+ eQMI_PDS_INJECT_WIFI, // 57 Inject Wi-Fi obtained data
+ eQMI_PDS_GET_SBAS_CONFIG, // 58 Get SBAS config
+ eQMI_PDS_SET_SBAS_CONFIG, // 59 Set SBAS config
+ eQMI_PDS_SEND_NI_RESPONSE, // 60 Send network initiated response
+ eQMI_PDS_INJECT_ABS_TIME, // 61 Inject absolute time
+ eQMI_PDS_INJECT_EFS, // 62 Inject EFS data
+ eQMI_PDS_GET_DPO_CONFIG, // 63 Get DPO config
+ eQMI_PDS_SET_DPO_CONFIG, // 64 Set DPO config
+ eQMI_PDS_GET_ODP_CONFIG, // 65 Get ODP config
+ eQMI_PDS_SET_ODP_CONFIG, // 66 Set ODP config
+ eQMI_PDS_CANCEL_SINGLE_FIX, // 67 Cancel single position fix
+ eQMI_PDS_GET_GPS_STATE, // 68 Get GPS state
+ eQMI_PDS_GET_METHODS = 80, // 80 Get GPS position methods state
+ eQMI_PDS_SET_METHODS, // 81 Set GPS position methods state
+
+ eQMI_AUTH_START_EAP = 32, // 32 Start the EAP session
+ eQMI_AUTH_SEND_EAP, // 33 Send and receive EAP packets
+ eQMI_AUTH_EAP_RESULT_IND, // 34 EAP session result indication
+ eQMI_AUTH_GET_EAP_KEYS, // 35 Get the EAP session keys
+ eQMI_AUTH_END_EAP, // 36 End the EAP session
+
+ eQMI_VOICE_INDICATION_REG = 3, // 03 Set indication registration state
+ eQMI_VOICE_CALL_ORIGINATE = 32, // 32 Originate a voice call
+ eQMI_VOICE_CALL_END, // 33 End a voice call
+ eQMI_VOICE_CALL_ANSWER, // 34 Answer incoming voice call
+ eQMI_VOICE_GET_CALL_INFO = 36, // 36 Get call information
+ eQMI_VOICE_OTASP_STATUS_IND, // 37 OTASP/OTAPA event indication
+ eQMI_VOICE_INFO_REC_IND, // 38 New info record indication
+ eQMI_VOICE_SEND_FLASH, // 39 Send a simple flash
+ eQMI_VOICE_BURST_DTMF, // 40 Send a burst DTMF
+ eQMI_VOICE_START_CONT_DTMF, // 41 Starts a continuous DTMF
+ eQMI_VOICE_STOP_CONT_DTMF, // 42 Stops a continuous DTMF
+ eQMI_VOICE_DTMF_IND, // 43 DTMF event indication
+ eQMI_VOICE_SET_PRIVACY_PREF, // 44 Set privacy preference
+ eQMI_VOICE_PRIVACY_IND, // 45 Privacy change indication
+ eQMI_VOICE_ALL_STATUS_IND, // 46 Voice all call status indication
+ eQMI_VOICE_GET_ALL_STATUS, // 47 Get voice all call status
+ eQMI_VOICE_MANAGE_CALLS = 49, // 49 Manage calls
+ eQMI_VOICE_SUPS_NOTIFICATION_IND, // 50 Supplementary service notifications
+ eQMI_VOICE_SET_SUPS_SERVICE, // 51 Manage supplementary service
+ eQMI_VOICE_GET_CALL_WAITING, // 52 Query sup service call waiting
+ eQMI_VOICE_GET_CALL_BARRING, // 53 Query sup service call barring
+ eQMI_VOICE_GET_CLIP, // 54 Query sup service CLIP
+ eQMI_VOICE_GET_CLIR, // 55 Query sup service CLIR
+ eQMI_VOICE_GET_CALL_FWDING, // 56 Query sup service call forwarding
+ eQMI_VOICE_SET_CALL_BARRING_PWD, // 57 Set call barring password
+ eQMI_VOICE_ORIG_USSD, // 58 Initiate USSD operation
+ eQMI_VOICE_ANSWER_USSD, // 59 Answer USSD request
+ eQMI_VOICE_CANCEL_USSD, // 60 Cancel USSD operation
+ eQMI_VOICE_USSD_RELEASE_IND, // 61 USSD release indication
+ eQMI_VOICE_USSD_IND, // 62 USSD request/notification indication
+ eQMI_VOICE_UUS_IND, // 63 UUS information indication
+ eQMI_VOICE_SET_CONFIG, // 64 Set config
+ eQMI_VOICE_GET_CONFIG, // 65 Get config
+ eQMI_VOICE_SUPS_IND, // 66 Sup service request indication
+ eQMI_VOICE_ASYNC_ORIG_USSD, // 67 Initiate USSD operation
+ eQMI_VOICE_ASYNC_USSD_IND = 67, // 67 USSD request/notification indication
+
+ eQMI_CAT_RESET, // 00 Reset CAT service state variables
+ eQMI_CAT_SET_EVENT, // 01 Set new message report conditions
+ eQMI_CAT_EVENT_IND = 1, // 01 New message report indication
+ eQMI_CAT_GET_STATE = 32, // 32 Get service state information
+ eQMI_CAT_SEND_TERMINAL, // 33 Send a terminal response
+ eQMI_CAT_SEND_ENVELOPE, // 34 Send an envelope command
+
+ eQMI_RMS_RESET, // 00 Reset RMS service state variables
+ eQMI_RMS_GET_SMS_WAKE = 32, // 32 Get SMS wake settings
+ eQMI_RMS_SET_SMS_WAKE, // 33 Set SMS wake settings
+
+ eQMI_OMA_RESET, // 00 Reset OMA service state variables
+ eQMI_OMA_SET_EVENT, // 01 Set OMA report conditions
+ eQMI_OMA_EVENT_IND = 1, // 01 OMA report indication
+
+ eQMI_OMA_START_SESSION = 32, // 32 Start client inititated session
+ eQMI_OMA_CANCEL_SESSION, // 33 Cancel session
+ eQMI_OMA_GET_SESSION_INFO, // 34 Get session information
+ eQMI_OMA_SEND_SELECTION, // 35 Send selection for net inititated msg
+ eQMI_OMA_GET_FEATURES, // 36 Get feature settings
+ eQMI_OMA_SET_FEATURES, // 37 Set feature settings
+"""
+
+entities = { 30: TP_REQUEST, # 30 QMI CTL request
+ 31: TP_RESPONSE, # 31 QMI CTL response
+ 32: TP_INDICATION, # 32 QMI CTL indication
+ 33: TP_REQUEST, # 33 QMI WDS request
+ 34: TP_RESPONSE, # 34 QMI WDS response
+ 35: TP_INDICATION, # 35 QMI WDS indication
+ 36: TP_REQUEST, # 36 QMI DMS request
+ 37: TP_RESPONSE, # 37 QMI DMS response
+ 38: TP_INDICATION, # 38 QMI DMS indication
+ 39: TP_REQUEST, # 39 QMI NAS request
+ 40: TP_RESPONSE, # 40 QMI NAS response
+ 41: TP_INDICATION, # 41 QMI NAS indication
+ 42: TP_REQUEST, # 42 QMI QOS request
+ 43: TP_RESPONSE, # 43 QMI QOS response
+ 44: TP_INDICATION, # 44 QMI QOS indication
+ 45: TP_REQUEST, # 45 QMI WMS request
+ 46: TP_RESPONSE, # 46 QMI WMS response
+ 47: TP_INDICATION, # 47 QMI WMS indication
+ 48: TP_REQUEST, # 48 QMI PDS request
+ 49: TP_RESPONSE, # 49 QMI PDS response
+ 50: TP_INDICATION, # 50 QMI PDS indication
+ 51: TP_REQUEST, # 51 QMI AUTH request
+ 52: TP_RESPONSE, # 52 QMI AUTH response
+ 53: TP_INDICATION, # 53 QMI AUTH indication
+ 54: TP_REQUEST, # 54 QMI CAT request
+ 55: TP_RESPONSE, # 55 QMI CAT response
+ 56: TP_INDICATION, # 56 QMI CAT indication
+ 57: TP_REQUEST, # 57 QMI RMS request
+ 58: TP_RESPONSE, # 58 QMI RMS response
+ 59: TP_INDICATION, # 59 QMI RMS indication
+ 60: TP_REQUEST, # 60 QMI OMA request
+ 61: TP_RESPONSE, # 61 QMI OMA response
+ 62: TP_INDICATION, # 62 QMI OMA indication
+ 63: TP_REQUEST, # 63 QMI voice request
+ 64: TP_RESPONSE, # 64 QMI voice response
+ 65: TP_INDICATION # 65 QMI voice indication
+ }
+
+class Tlv:
+ def __init__(self, entno, cmdno, tlvno, service, cmdname, tlvname, direction):
+ self.entno = entno
+ self.cmdno = cmdno
+ self.tlvno = tlvno
+ self.service = service
+ self.cmdname = cmdname
+ self.name = tlvname
+ self.direction = direction
+
+ def show(self):
+ print (" " * 10) + '%s: "%s/%s/%s",' % (self.tlvno, self.service, self.cmdname, self.name)
+
+
+class Cmd:
+ def __init__(self, service, cmdno, name):
+ self.service = service
+ self.cmdno = cmdno
+ self.name = name
+ self.tlvs = { TP_REQUEST: {}, TP_RESPONSE: {}, TP_INDICATION: {} }
+
+ def add_tlv(self, direction, tlv):
+ if self.tlvs[direction].has_key(tlv.tlvno):
+ old = self.tlvs[direction][tlv.tlvno]
+ raise ValueError("Tried to add duplicate TLV [%s %d:%d (%s/%s/%s)] had [%s %d:%d (%s/%s/%s)]" % (self.service, \
+ self.cmdno, tlv.tlvno, self.service, self.name, tlv.name, self.service, self.cmdno, old.tlvno, self.service, \
+ self.name, old.name))
+ self.tlvs[direction][tlv.tlvno] = tlv
+
+ def show_direction(self, direction):
+ if len(self.tlvs[direction].keys()) == 0:
+ return
+
+ print "%s = { # %d" % (self.get_array_name(direction), self.cmdno)
+ keys = self.tlvs[direction].keys()
+ keys.sort()
+ for k in keys:
+ tlv = self.tlvs[direction][k]
+ tlv.show()
+ print (" " * 8) + "}\n"
+
+ def show_tlvs(self):
+ self.show_direction(TP_REQUEST)
+ self.show_direction(TP_RESPONSE)
+ self.show_direction(TP_INDICATION)
+
+ def get_array_name(self, direction):
+ if len(self.tlvs[direction].keys()) == 0:
+ return "None"
+ tags = { TP_REQUEST: "req", TP_RESPONSE: "rsp", TP_INDICATION: "ind" }
+ return "%s_%s_%s_tlvs" % (self.service, self.name.lower(), tags[direction])
+
+# parse list of services and their commands
+services = {}
+for l in cmdenum.split("\n"):
+ l = l.strip()
+ if not len(l):
+ continue
+ l = l.replace("eQMI_", "")
+ svcend = l.find("_")
+ if svcend < 0:
+ raise ValueError("Failed to get service")
+ svc = l[:svcend].lower()
+ l = l[svcend + 1:]
+
+ comma = l.find(",")
+ space = l.find(" =")
+ idx = -1
+ if comma >= 0 and (space < 0 or comma < space):
+ idx = comma
+ elif space >= 0 and (comma < 0 or space < comma):
+ idx = space
+ else:
+ raise ValueError("Couldn't determine command name")
+ cmdname = l[:idx]
+ l = l[idx:]
+ comment = l.index("// ")
+ l = l[comment + 3:]
+ end = l.index(" ")
+ cmdno = int(l[:end])
+
+ cmd = Cmd(svc, cmdno, cmdname)
+
+ if not services.has_key(svc):
+ services[svc] = {}
+ if services[svc].has_key(cmdno):
+ # ignore duplicat indication numbers
+ if cmdname.find("_IND") >= 0:
+ continue
+ raise KeyError("Already have %s/%s/%d" % (svc, cmdname, cmdno))
+ services[svc][cmdno] = cmd
+
+# read in Entity.txt
+f = open(sys.argv[1])
+lines = f.readlines()
+f.close()
+
+for line in lines:
+ parts = line.split("^")
+ struct = int(parts[3])
+
+ entno = int(parts[0])
+
+ ids = parts[1].replace('"', "").split(",")
+ cmdno = int(ids[0])
+ tlvno = int(ids[1])
+
+ name = parts[2].replace('"', "").split("/")
+ service = name[0]
+ cmdname = name[1]
+ tlvname = name[2]
+
+ direction = entities[entno]
+
+ tlv = Tlv(entno, cmdno, tlvno, service, cmdname, tlvname, direction)
+ services[service.lower()][cmdno].add_tlv(direction, tlv)
+
+svcsorted = services.keys()
+svcsorted.sort()
+for s in svcsorted:
+ # print each service's command's TLVs
+ cmdssorted = services[s].keys()
+ cmdssorted.sort()
+ for c in cmdssorted:
+ cmd = services[s][c]
+ cmd.show_tlvs()
+
+ # print each service's command dict
+ print "%s_cmds = {" % s
+ for c in cmdssorted:
+ cmd = services[s][c]
+ print ' %d: ("%s", %s, %s, %s),' % (cmd.cmdno, cmd.name, \
+ cmd.get_array_name(TP_REQUEST), cmd.get_array_name(TP_RESPONSE), cmd.get_array_name(TP_INDICATION))
+ print " }"
+print ""
+
+# print out services
+slist = { 0: "ctl", 1: "wds", 2: "dms", 3: "nas", 4: "qos", 5: "wms",
+ 6: "pds", 7: "auth", 9: "voice", 224: "cat", 225: "rms", 226: "oma" }
+
+slistsorted = slist.keys()
+slistsorted.sort()
+print "services = {"
+for s in slistsorted:
+ cmdlistname = "None"
+ if slist[s] != "qos":
+ # QoS doesn't appear to have any commands
+ cmdlistname = slist[s] + "_cmds"
+ print ' %d: ("%s", %s),' % (s, slist[s], cmdlistname)
+print " }"
+
diff --git a/decode/qmiprotocol.py b/decode/qmiprotocol.py
new file mode 100644
index 00000000..d9e51c81
--- /dev/null
+++ b/decode/qmiprotocol.py
@@ -0,0 +1,2352 @@
+auth_start_eap_req_tlvs = { # 32
+ 16: "AUTH/Start EAP Session Request/Method Mask",
+ }
+
+auth_start_eap_rsp_tlvs = { # 32
+ 2: "AUTH/Start EAP Session Response/Result Code",
+ }
+
+auth_send_eap_req_tlvs = { # 33
+ 1: "AUTH/Send EAP Packet Request/Request Packet",
+ }
+
+auth_send_eap_rsp_tlvs = { # 33
+ 1: "AUTH/Send EAP Packet Response/Response Packet",
+ 2: "AUTH/Send EAP Packet Response/Result Code",
+ }
+
+auth_eap_result_ind_rsp_tlvs = { # 34
+ 1: "AUTH/EAP Session Result/Result",
+ }
+
+auth_get_eap_keys_rsp_tlvs = { # 35
+ 1: "AUTH/Get EAP Session Keys Response/Session Keys",
+ 2: "AUTH/Get EAP Session Keys Response/Result Code",
+ }
+
+auth_end_eap_rsp_tlvs = { # 36
+ 2: "AUTH/End EAP Session Response/Result Code",
+ }
+
+auth_cmds = {
+ 32: ("START_EAP", auth_start_eap_req_tlvs, auth_start_eap_rsp_tlvs, None),
+ 33: ("SEND_EAP", auth_send_eap_req_tlvs, auth_send_eap_rsp_tlvs, None),
+ 34: ("EAP_RESULT_IND", None, auth_eap_result_ind_rsp_tlvs, None),
+ 35: ("GET_EAP_KEYS", None, auth_get_eap_keys_rsp_tlvs, None),
+ 36: ("END_EAP", None, auth_end_eap_rsp_tlvs, None),
+ }
+cat_reset_rsp_tlvs = { # 0
+ 2: "CAT/Reset Response/Result Code",
+ }
+
+cat_set_event_req_tlvs = { # 1
+ 16: "CAT/Set Event Report Request/Report Mask",
+ }
+
+cat_set_event_rsp_tlvs = { # 1
+ 2: "CAT/Set Event Report Response/Result Code",
+ 16: "CAT/Set Event Report Response/Reg Status Mask",
+ }
+
+cat_set_event_ind_tlvs = { # 1
+ 16: "CAT/Event Report/Display Text Event",
+ 17: "CAT/Event Report/Get Inkey Event",
+ 18: "CAT/Event Report/Get Input Event",
+ 19: "CAT/Event Report/Setup Menu Event",
+ 20: "CAT/Event Report/Select Item Event",
+ 21: "CAT/Event Report/Alpha ID Available",
+ 22: "CAT/Event Report/Setup Event List",
+ 23: "CAT/Event Report/Setup Idle Mode Text Event",
+ 24: "CAT/Event Report/Language Notification Event",
+ 25: "CAT/Event Report/Refresh Event",
+ 26: "CAT/Event Report/End Proactive Session",
+ }
+
+cat_get_state_rsp_tlvs = { # 32
+ 1: "CAT/Get Service State Response/CAT Service State",
+ 2: "CAT/Get Service State Response/Result Code",
+ }
+
+cat_send_terminal_req_tlvs = { # 33
+ 1: "CAT/Send Terminal Response Request/Terminal Response Type",
+ }
+
+cat_send_terminal_rsp_tlvs = { # 33
+ 2: "CAT/Send Terminal Response Response/Result Code",
+ }
+
+cat_send_envelope_req_tlvs = { # 34
+ 1: "CAT/Envelope Command Request/Envelope Command",
+ }
+
+cat_send_envelope_rsp_tlvs = { # 34
+ 2: "CAT/Envelope Command Response/Result Code",
+ }
+
+cat_cmds = {
+ 0: ("RESET", None, cat_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", cat_set_event_req_tlvs, cat_set_event_rsp_tlvs, cat_set_event_ind_tlvs),
+ 32: ("GET_STATE", None, cat_get_state_rsp_tlvs, None),
+ 33: ("SEND_TERMINAL", cat_send_terminal_req_tlvs, cat_send_terminal_rsp_tlvs, None),
+ 34: ("SEND_ENVELOPE", cat_send_envelope_req_tlvs, cat_send_envelope_rsp_tlvs, None),
+ }
+ctl_set_instance_id_req_tlvs = { # 32
+ 1: "CTL/Set Instance ID Request/Instance",
+ }
+
+ctl_set_instance_id_rsp_tlvs = { # 32
+ 1: "CTL/Set Instance ID Response/Link",
+ 2: "CTL/Set Instance ID Response/Result Code",
+ }
+
+ctl_get_version_info_rsp_tlvs = { # 33
+ 1: "CTL/Get Version Info Response/List",
+ 2: "CTL/Get Version Info Response/Result Code",
+ 16: "CTL/Get Version Info Response/Addendum",
+ }
+
+ctl_get_client_id_req_tlvs = { # 34
+ 1: "CTL/Get Client ID Request/Type",
+ }
+
+ctl_get_client_id_rsp_tlvs = { # 34
+ 1: "CTL/Get Client ID Response/ID",
+ 2: "CTL/Get Client ID Response/Result Code",
+ }
+
+ctl_release_client_id_req_tlvs = { # 35
+ 1: "CTL/Release Client ID Request/ID",
+ }
+
+ctl_release_client_id_rsp_tlvs = { # 35
+ 1: "CTL/Release Client ID Response/ID",
+ 2: "CTL/Release Client ID Response/Result Code",
+ }
+
+ctl_revoke_client_id_ind_ind_tlvs = { # 36
+ 1: "CTL/Release Client ID Indication/ID",
+ }
+
+ctl_invalid_client_id_ind_tlvs = { # 37
+ 1: "CTL/Invalid Client ID Indication/ID",
+ }
+
+ctl_set_data_format_req_tlvs = { # 38
+ 1: "CTL/Set Data Format Request/Format",
+ 16: "CTL/Set Data Format Request/Protocol",
+ }
+
+ctl_set_data_format_rsp_tlvs = { # 38
+ 2: "CTL/Set Data Format Response/Result Code",
+ 16: "CTL/Set Data Format Response/Protocol",
+ }
+
+ctl_set_event_req_tlvs = { # 40
+ 1: "CTL/Set Event Report Request/Report",
+ }
+
+ctl_set_event_rsp_tlvs = { # 40
+ 2: "CTL/Set Event Report Response/Result Code",
+ }
+
+ctl_set_event_ind_tlvs = { # 40
+ 1: "CTL/Event Report Indication/Report",
+ }
+
+ctl_set_power_save_cfg_req_tlvs = { # 41
+ 1: "CTL/Set Power Save Config Request/Descriptor",
+ 17: "CTL/Set Power Save Config Request/Permitted Set",
+ }
+
+ctl_set_power_save_cfg_rsp_tlvs = { # 41
+ 2: "CTL/Set Power Save Config Response/Result Code",
+ }
+
+ctl_set_power_save_mode_req_tlvs = { # 42
+ 1: "CTL/Set Power Save Mode Request/Mode",
+ }
+
+ctl_set_power_save_mode_rsp_tlvs = { # 42
+ 2: "CTL/Set Power Save Mode Response/Result Code",
+ }
+
+ctl_get_power_save_mode_rsp_tlvs = { # 43
+ 1: "CTL/Get Power Save Mode Response/Mode",
+ 2: "CTL/Get Power Save Mode Response/Result Code",
+ }
+
+ctl_cmds = {
+ 32: ("SET_INSTANCE_ID", ctl_set_instance_id_req_tlvs, ctl_set_instance_id_rsp_tlvs, None),
+ 33: ("GET_VERSION_INFO", None, ctl_get_version_info_rsp_tlvs, None),
+ 34: ("GET_CLIENT_ID", ctl_get_client_id_req_tlvs, ctl_get_client_id_rsp_tlvs, None),
+ 35: ("RELEASE_CLIENT_ID", ctl_release_client_id_req_tlvs, ctl_release_client_id_rsp_tlvs, None),
+ 36: ("REVOKE_CLIENT_ID_IND", None, None, ctl_revoke_client_id_ind_ind_tlvs),
+ 37: ("INVALID_CLIENT_ID", None, None, ctl_invalid_client_id_ind_tlvs),
+ 38: ("SET_DATA_FORMAT", ctl_set_data_format_req_tlvs, ctl_set_data_format_rsp_tlvs, None),
+ 39: ("SYNC", None, None, None),
+ 40: ("SET_EVENT", ctl_set_event_req_tlvs, ctl_set_event_rsp_tlvs, ctl_set_event_ind_tlvs),
+ 41: ("SET_POWER_SAVE_CFG", ctl_set_power_save_cfg_req_tlvs, ctl_set_power_save_cfg_rsp_tlvs, None),
+ 42: ("SET_POWER_SAVE_MODE", ctl_set_power_save_mode_req_tlvs, ctl_set_power_save_mode_rsp_tlvs, None),
+ 43: ("GET_POWER_SAVE_MODE", None, ctl_get_power_save_mode_rsp_tlvs, None),
+ }
+dms_reset_rsp_tlvs = { # 0
+ 2: "DMS/Reset Response/Result Code",
+ }
+
+dms_set_event_req_tlvs = { # 1
+ 16: "DMS/Set Event Report Request/Power State",
+ 17: "DMS/Set Event Report Request/Battery Level",
+ 18: "DMS/Set Event Report Request/PIN Status",
+ 19: "DMS/Set Event Report Request/Activation State",
+ 20: "DMS/Set Event Report Request/Operating Mode",
+ 21: "DMS/Set Event Report Request/UIM State",
+ 22: "DMS/Set Event Report Request/Wireless Disable State",
+ }
+
+dms_set_event_rsp_tlvs = { # 1
+ 2: "DMS/Set Event Report Response/Result Code",
+ }
+
+dms_set_event_ind_tlvs = { # 1
+ 16: "DMS/Event Report/Power State",
+ 17: "DMS/Event Report/PIN1 State",
+ 18: "DMS/Event Report/PIN2 State",
+ 19: "DMS/Event Report/Activation State",
+ 20: "DMS/Event Report/Operating Mode",
+ 21: "DMS/Event Report/UIM State",
+ 22: "DMS/Event Report/Wireless Disable State",
+ }
+
+dms_get_caps_rsp_tlvs = { # 32
+ 1: "DMS/Get Device Capabilities Response/Capabilities",
+ 2: "DMS/Get Device Capabilities Response/Result Code",
+ }
+
+dms_get_manufacturer_rsp_tlvs = { # 33
+ 1: "DMS/Get Device Manfacturer Response/Manfacturer",
+ 2: "DMS/Get Device Manfacturer Response/Result Code",
+ }
+
+dms_get_model_id_rsp_tlvs = { # 34
+ 1: "DMS/Get Device Model Response/Model",
+ 2: "DMS/Get Device Model Response/Result Code",
+ }
+
+dms_get_rev_id_rsp_tlvs = { # 35
+ 1: "DMS/Get Device Revision Response/Revision",
+ 2: "DMS/Get Device Revision Response/Result Code",
+ 16: "DMS/Get Device Revision Response/Boot Code Revision",
+ 17: "DMS/Get Device Revision Response/UQCN Revision",
+ }
+
+dms_get_number_rsp_tlvs = { # 36
+ 1: "DMS/Get Device Voice Number Response/Voice Number",
+ 2: "DMS/Get Device Voice Number Response/Result Code",
+ 16: "DMS/Get Device Voice Number Response/Mobile ID Number",
+ 17: "DMS/Get Device Voice Number Response/IMSI",
+ }
+
+dms_get_ids_rsp_tlvs = { # 37
+ 2: "DMS/Get Device Serial Numbers Response/Result Code",
+ 16: "DMS/Get Device Serial Numbers Response/ESN",
+ 17: "DMS/Get Device Serial Numbers Response/IMEI",
+ 18: "DMS/Get Device Serial Numbers Response/MEID",
+ }
+
+dms_get_power_state_rsp_tlvs = { # 38
+ 1: "DMS/Get Power State Response/Power State",
+ 2: "DMS/Get Power State Response/Result Code",
+ }
+
+dms_uim_set_pin_prot_req_tlvs = { # 39
+ 1: "DMS/UIM Set PIN Protection Request/Info",
+ }
+
+dms_uim_set_pin_prot_rsp_tlvs = { # 39
+ 2: "DMS/UIM Set PIN Protection Response/Result Code",
+ 16: "DMS/UIM Set PIN Protection Response/Retry Info",
+ }
+
+dms_uim_pin_verify_req_tlvs = { # 40
+ 1: "DMS/UIM Verify PIN Request/Info",
+ }
+
+dms_uim_pin_verify_rsp_tlvs = { # 40
+ 2: "DMS/UIM Verify PIN Response/Result Code",
+ 16: "DMS/UIM Verify PIN Response/Retry Info",
+ }
+
+dms_uim_pin_unblock_req_tlvs = { # 41
+ 1: "DMS/UIM Unblock PIN Request/Info",
+ }
+
+dms_uim_pin_unblock_rsp_tlvs = { # 41
+ 2: "DMS/UIM Unblock PIN Response/Result Code",
+ 16: "DMS/UIM Unblock PIN Response/Retry Info",
+ }
+
+dms_uim_pin_change_req_tlvs = { # 42
+ 1: "DMS/UIM Change PIN Request/Info",
+ }
+
+dms_uim_pin_change_rsp_tlvs = { # 42
+ 2: "DMS/UIM Change PIN Response/Result Code",
+ 16: "DMS/UIM Change PIN Response/Retry Info",
+ }
+
+dms_uim_get_pin_status_rsp_tlvs = { # 43
+ 2: "DMS/UIM Get PIN Status Response/Result Code",
+ 17: "DMS/UIM Get PIN Status Response/PIN1 Status",
+ 18: "DMS/UIM Get PIN Status Response/PIN2 Status",
+ }
+
+dms_get_msm_id_rsp_tlvs = { # 44
+ 1: "DMS/Get Hardware Revision Response/Hardware Revision",
+ 2: "DMS/Get Hardware Revision Response/Result Code",
+ }
+
+dms_get_opertaing_mode_rsp_tlvs = { # 45
+ 1: "DMS/Get Operating Mode Response/Operating Mode",
+ 2: "DMS/Get Operating Mode Response/Result Code",
+ 16: "DMS/Get Operating Mode Response/Offline Reason",
+ 17: "DMS/Get Operating Mode Response/Platform Restricted",
+ }
+
+dms_set_operating_mode_req_tlvs = { # 46
+ 1: "DMS/Set Operating Mode Request/Operating Mode",
+ }
+
+dms_set_operating_mode_rsp_tlvs = { # 46
+ 2: "DMS/Set Operating Mode Response/Result Code",
+ }
+
+dms_get_time_rsp_tlvs = { # 47
+ 1: "DMS/Get Timestamp Response/Timestamp",
+ 2: "DMS/Get Timestamp Response/Result Code",
+ }
+
+dms_get_prl_version_rsp_tlvs = { # 48
+ 1: "DMS/Get PRL Version Response/PRL Version",
+ 2: "DMS/Get PRL Version Response/Result Code",
+ }
+
+dms_get_activated_state_rsp_tlvs = { # 49
+ 1: "DMS/Get Activation State Response/Activation State",
+ 2: "DMS/Get Activation State Response/Result Code",
+ }
+
+dms_activate_automatic_req_tlvs = { # 50
+ 1: "DMS/Activate Automatic Request/Activation Code",
+ }
+
+dms_activate_automatic_rsp_tlvs = { # 50
+ 2: "DMS/Activate Automatic Response/Result Code",
+ }
+
+dms_activate_manual_req_tlvs = { # 51
+ 1: "DMS/Activate Manual Request/Activation Data",
+ 16: "DMS/Activate Manual Request/PRL (Obsolete)",
+ 17: "DMS/Activate Manual Request/MN-HA Key",
+ 18: "DMS/Activate Manual Request/MN-AAA Key",
+ 19: "DMS/Activate Manual Request/PRL",
+ }
+
+dms_activate_manual_rsp_tlvs = { # 51
+ 2: "DMS/Activate Manual Response/Result Code",
+ }
+
+dms_get_user_lock_state_rsp_tlvs = { # 52
+ 1: "DMS/Get Lock State Response/Lock State",
+ 2: "DMS/Get Lock State Response/Result Code",
+ }
+
+dms_set_user_lock_state_req_tlvs = { # 53
+ 1: "DMS/Set Lock State Request/Lock State",
+ }
+
+dms_set_user_lock_state_rsp_tlvs = { # 53
+ 2: "DMS/Set Lock State Response/Result Code",
+ }
+
+dms_set_user_lock_code_req_tlvs = { # 54
+ 1: "DMS/Set Lock Code Request/Lock Code",
+ }
+
+dms_set_user_lock_code_rsp_tlvs = { # 54
+ 2: "DMS/Set Lock Code Response/Result Code",
+ }
+
+dms_read_user_data_rsp_tlvs = { # 55
+ 1: "DMS/Read User Data Response/User Data",
+ 2: "DMS/Read User Data Response/Result Code",
+ }
+
+dms_write_user_data_req_tlvs = { # 56
+ 1: "DMS/Write User Data Request/User Data",
+ }
+
+dms_write_user_data_rsp_tlvs = { # 56
+ 2: "DMS/Write User Data Response/Result Code",
+ }
+
+dms_read_eri_file_rsp_tlvs = { # 57
+ 1: "DMS/Read ERI Data Response/User Data",
+ 2: "DMS/Read ERI Data Response/Result Code",
+ }
+
+dms_factory_defaults_req_tlvs = { # 58
+ 1: "DMS/Reset Factory Defaults Request/SPC",
+ }
+
+dms_factory_defaults_rsp_tlvs = { # 58
+ 2: "DMS/Reset Factory Defaults Response/Result Code",
+ }
+
+dms_validate_spc_req_tlvs = { # 59
+ 1: "DMS/Validate SPC Request/SPC",
+ }
+
+dms_validate_spc_rsp_tlvs = { # 59
+ 2: "DMS/Validate SPC Response/Result Code",
+ }
+
+dms_uim_get_iccid_rsp_tlvs = { # 60
+ 1: "DMS/UIM Get ICCID Response/ICCID",
+ 2: "DMS/UIM Get ICCID Response/Result Code",
+ }
+
+dms_get_firware_id_rsp_tlvs = { # 61
+ 1: "DMS/UIM Get Firmware ID Response/ID",
+ 2: "DMS/UIM Get Firmware ID Response/Result Code",
+ }
+
+dms_set_firmware_id_req_tlvs = { # 62
+ 1: "DMS/UIM Set Firmware ID Request/ID",
+ }
+
+dms_set_firmware_id_rsp_tlvs = { # 62
+ 2: "DMS/UIM Set Firmware ID Response/Result Code",
+ }
+
+dms_get_host_lock_id_rsp_tlvs = { # 63
+ 1: "DMS/UIM Get Host Lock ID Response/ID",
+ 2: "DMS/UIM Get Host Lock ID Response/Result Code",
+ }
+
+dms_uim_get_ck_status_req_tlvs = { # 64
+ 1: "DMS/UIM Get Control Key Status Request/Facility",
+ }
+
+dms_uim_get_ck_status_rsp_tlvs = { # 64
+ 1: "DMS/UIM Get Control Key Status Response/Status",
+ 2: "DMS/UIM Get Control Key Status Response/Result Code",
+ 16: "DMS/UIM Get Control Key Status Response/Blocking",
+ }
+
+dms_uim_set_ck_prot_req_tlvs = { # 65
+ 1: "DMS/UIM Set Control Key Protection Request/Facility",
+ }
+
+dms_uim_set_ck_prot_rsp_tlvs = { # 65
+ 2: "DMS/UIM Set Control Key Protection Response/Result Code",
+ 16: "DMS/UIM Set Control Key Protection Response/Status",
+ }
+
+dms_uim_unblock_ck_req_tlvs = { # 66
+ 1: "DMS/UIM Unblock Control Key Request/Facility",
+ }
+
+dms_uim_unblock_ck_rsp_tlvs = { # 66
+ 2: "DMS/UIM Unblock Control Key Response/Result Code",
+ 16: "DMS/UIM Unblock Control Key Response/Status",
+ }
+
+dms_get_imsi_rsp_tlvs = { # 67
+ 1: "DMS/Get IMSI Response/IMSI",
+ 2: "DMS/Get IMSI Response/Result Code",
+ }
+
+dms_uim_get_state_rsp_tlvs = { # 68
+ 1: "DMS/Get UIM State Response/State",
+ 2: "DMS/Get UIM State Response/Result Code",
+ }
+
+dms_get_band_caps_rsp_tlvs = { # 69
+ 1: "DMS/Get Band Capabilities Response/Bands",
+ 2: "DMS/Get Band Capabilities Response/Result Code",
+ }
+
+dms_get_factory_id_rsp_tlvs = { # 70
+ 1: "DMS/Get Factory Serial Number Response/ID",
+ 2: "DMS/Get Factory Serial Number Response/Result Code",
+ }
+
+dms_get_firmware_pref_rsp_tlvs = { # 71
+ 1: "DMS/Get Firmware Preference Response/Image List",
+ 2: "DMS/Get Firmware Preference Response/Result Code",
+ }
+
+dms_set_firmware_pref_req_tlvs = { # 72
+ 1: "DMS/Set Firmware Preference Request/Image List",
+ 16: "DMS/Set Firmware Preference Request/Override",
+ 17: "DMS/Set Firmware Preference Request/Index",
+ }
+
+dms_set_firmware_pref_rsp_tlvs = { # 72
+ 1: "DMS/Set Firmware Preference Response/Image List",
+ 2: "DMS/Set Firmware Preference Response/Result Code",
+ 16: "DMS/Set Firmware Preference Response/Maximum",
+ }
+
+dms_list_firmware_rsp_tlvs = { # 73
+ 1: "DMS/List Stored Firmware Response/Image List",
+ 2: "DMS/List Stored Firmware Response/Result Code",
+ }
+
+dms_delete_firmware_req_tlvs = { # 74
+ 1: "DMS/Delete Stored Firmware Request/Image",
+ }
+
+dms_delete_firmware_rsp_tlvs = { # 74
+ 2: "DMS/Delete Stored Firmware Response/Result Code",
+ }
+
+dms_set_time_req_tlvs = { # 75
+ 1: "DMS/Set Device Time Request/Time",
+ 16: "DMS/Set Device Time Request/Type",
+ }
+
+dms_set_time_rsp_tlvs = { # 75
+ 2: "DMS/Set Device Time Response/Result Code",
+ }
+
+dms_get_firmware_info_req_tlvs = { # 76
+ 1: "DMS/Get Stored Firmware Info Request/Image",
+ }
+
+dms_get_firmware_info_rsp_tlvs = { # 76
+ 2: "DMS/Get Stored Firmware Info Response/Result Code",
+ 16: "DMS/Get Stored Firmware Info Response/Boot Version",
+ 17: "DMS/Get Stored Firmware Info Response/PRI Version",
+ 18: "DMS/Get Stored Firmware Info Response/OEM Lock ID",
+ }
+
+dms_get_alt_net_cfg_rsp_tlvs = { # 77
+ 1: "DMS/Get Alternate Net Config Response/Config",
+ 2: "DMS/Get Alternate Net Config Response/Result Code",
+ }
+
+dms_set_alt_net_cfg_req_tlvs = { # 78
+ 1: "DMS/Set Alternate Net Config Request/Config",
+ }
+
+dms_set_alt_net_cfg_rsp_tlvs = { # 78
+ 2: "DMS/Set Alternate Net Config Response/Result Code",
+ }
+
+dms_get_img_dload_mode_rsp_tlvs = { # 79
+ 2: "DMS/Get Image Download Mode Response/Result Code",
+ 16: "DMS/Get Image Download Mode Response/Mode",
+ }
+
+dms_set_img_dload_mode_req_tlvs = { # 80
+ 1: "DMS/Set Image Download Mode Request/Mode",
+ }
+
+dms_set_img_dload_mode_rsp_tlvs = { # 80
+ 2: "DMS/Set Image Download Mode Response/Result Code",
+ }
+
+dms_cmds = {
+ 0: ("RESET", None, dms_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", dms_set_event_req_tlvs, dms_set_event_rsp_tlvs, dms_set_event_ind_tlvs),
+ 32: ("GET_CAPS", None, dms_get_caps_rsp_tlvs, None),
+ 33: ("GET_MANUFACTURER", None, dms_get_manufacturer_rsp_tlvs, None),
+ 34: ("GET_MODEL_ID", None, dms_get_model_id_rsp_tlvs, None),
+ 35: ("GET_REV_ID", None, dms_get_rev_id_rsp_tlvs, None),
+ 36: ("GET_NUMBER", None, dms_get_number_rsp_tlvs, None),
+ 37: ("GET_IDS", None, dms_get_ids_rsp_tlvs, None),
+ 38: ("GET_POWER_STATE", None, dms_get_power_state_rsp_tlvs, None),
+ 39: ("UIM_SET_PIN_PROT", dms_uim_set_pin_prot_req_tlvs, dms_uim_set_pin_prot_rsp_tlvs, None),
+ 40: ("UIM_PIN_VERIFY", dms_uim_pin_verify_req_tlvs, dms_uim_pin_verify_rsp_tlvs, None),
+ 41: ("UIM_PIN_UNBLOCK", dms_uim_pin_unblock_req_tlvs, dms_uim_pin_unblock_rsp_tlvs, None),
+ 42: ("UIM_PIN_CHANGE", dms_uim_pin_change_req_tlvs, dms_uim_pin_change_rsp_tlvs, None),
+ 43: ("UIM_GET_PIN_STATUS", None, dms_uim_get_pin_status_rsp_tlvs, None),
+ 44: ("GET_MSM_ID", None, dms_get_msm_id_rsp_tlvs, None),
+ 45: ("GET_OPERTAING_MODE", None, dms_get_opertaing_mode_rsp_tlvs, None),
+ 46: ("SET_OPERATING_MODE", dms_set_operating_mode_req_tlvs, dms_set_operating_mode_rsp_tlvs, None),
+ 47: ("GET_TIME", None, dms_get_time_rsp_tlvs, None),
+ 48: ("GET_PRL_VERSION", None, dms_get_prl_version_rsp_tlvs, None),
+ 49: ("GET_ACTIVATED_STATE", None, dms_get_activated_state_rsp_tlvs, None),
+ 50: ("ACTIVATE_AUTOMATIC", dms_activate_automatic_req_tlvs, dms_activate_automatic_rsp_tlvs, None),
+ 51: ("ACTIVATE_MANUAL", dms_activate_manual_req_tlvs, dms_activate_manual_rsp_tlvs, None),
+ 52: ("GET_USER_LOCK_STATE", None, dms_get_user_lock_state_rsp_tlvs, None),
+ 53: ("SET_USER_LOCK_STATE", dms_set_user_lock_state_req_tlvs, dms_set_user_lock_state_rsp_tlvs, None),
+ 54: ("SET_USER_LOCK_CODE", dms_set_user_lock_code_req_tlvs, dms_set_user_lock_code_rsp_tlvs, None),
+ 55: ("READ_USER_DATA", None, dms_read_user_data_rsp_tlvs, None),
+ 56: ("WRITE_USER_DATA", dms_write_user_data_req_tlvs, dms_write_user_data_rsp_tlvs, None),
+ 57: ("READ_ERI_FILE", None, dms_read_eri_file_rsp_tlvs, None),
+ 58: ("FACTORY_DEFAULTS", dms_factory_defaults_req_tlvs, dms_factory_defaults_rsp_tlvs, None),
+ 59: ("VALIDATE_SPC", dms_validate_spc_req_tlvs, dms_validate_spc_rsp_tlvs, None),
+ 60: ("UIM_GET_ICCID", None, dms_uim_get_iccid_rsp_tlvs, None),
+ 61: ("GET_FIRWARE_ID", None, dms_get_firware_id_rsp_tlvs, None),
+ 62: ("SET_FIRMWARE_ID", dms_set_firmware_id_req_tlvs, dms_set_firmware_id_rsp_tlvs, None),
+ 63: ("GET_HOST_LOCK_ID", None, dms_get_host_lock_id_rsp_tlvs, None),
+ 64: ("UIM_GET_CK_STATUS", dms_uim_get_ck_status_req_tlvs, dms_uim_get_ck_status_rsp_tlvs, None),
+ 65: ("UIM_SET_CK_PROT", dms_uim_set_ck_prot_req_tlvs, dms_uim_set_ck_prot_rsp_tlvs, None),
+ 66: ("UIM_UNBLOCK_CK", dms_uim_unblock_ck_req_tlvs, dms_uim_unblock_ck_rsp_tlvs, None),
+ 67: ("GET_IMSI", None, dms_get_imsi_rsp_tlvs, None),
+ 68: ("UIM_GET_STATE", None, dms_uim_get_state_rsp_tlvs, None),
+ 69: ("GET_BAND_CAPS", None, dms_get_band_caps_rsp_tlvs, None),
+ 70: ("GET_FACTORY_ID", None, dms_get_factory_id_rsp_tlvs, None),
+ 71: ("GET_FIRMWARE_PREF", None, dms_get_firmware_pref_rsp_tlvs, None),
+ 72: ("SET_FIRMWARE_PREF", dms_set_firmware_pref_req_tlvs, dms_set_firmware_pref_rsp_tlvs, None),
+ 73: ("LIST_FIRMWARE", None, dms_list_firmware_rsp_tlvs, None),
+ 74: ("DELETE_FIRMWARE", dms_delete_firmware_req_tlvs, dms_delete_firmware_rsp_tlvs, None),
+ 75: ("SET_TIME", dms_set_time_req_tlvs, dms_set_time_rsp_tlvs, None),
+ 76: ("GET_FIRMWARE_INFO", dms_get_firmware_info_req_tlvs, dms_get_firmware_info_rsp_tlvs, None),
+ 77: ("GET_ALT_NET_CFG", None, dms_get_alt_net_cfg_rsp_tlvs, None),
+ 78: ("SET_ALT_NET_CFG", dms_set_alt_net_cfg_req_tlvs, dms_set_alt_net_cfg_rsp_tlvs, None),
+ 79: ("GET_IMG_DLOAD_MODE", None, dms_get_img_dload_mode_rsp_tlvs, None),
+ 80: ("SET_IMG_DLOAD_MODE", dms_set_img_dload_mode_req_tlvs, dms_set_img_dload_mode_rsp_tlvs, None),
+ }
+nas_reset_rsp_tlvs = { # 0
+ 2: "NAS/Reset Response/Result Code",
+ }
+
+nas_abort_req_tlvs = { # 1
+ 1: "NAS/Abort Request/Transaction ID",
+ }
+
+nas_abort_rsp_tlvs = { # 1
+ 2: "NAS/Abort Response/Result Code",
+ }
+
+nas_set_event_req_tlvs = { # 2
+ 16: "NAS/Set Event Report Request/Signal Indicator",
+ 17: "NAS/Set Event Report Request/RF Indicator",
+ 18: "NAS/Set Event Report Request/Registration Reject Indicator",
+ 19: "NAS/Set Event Report Request/RSSI Indicator",
+ 20: "NAS/Set Event Report Request/ECIO Indicator",
+ 21: "NAS/Set Event Report Request/IO Indicator",
+ 22: "NAS/Set Event Report Request/SINR Indicator",
+ 23: "NAS/Set Event Report Request/Error Rate Indicator",
+ 24: "NAS/Set Event Report Request/RSRQ Indicator",
+ }
+
+nas_set_event_rsp_tlvs = { # 2
+ 2: "NAS/Set Event Report Response/Result Code",
+ }
+
+nas_set_event_ind_tlvs = { # 2
+ 16: "NAS/Event Report/Signal Strength",
+ 17: "NAS/Event Report/RF Info",
+ 18: "NAS/Event Report/Registration Reject",
+ 19: "NAS/Event Report/RSSI",
+ 20: "NAS/Event Report/ECIO",
+ 21: "NAS/Event Report/IO",
+ 22: "NAS/Event Report/SINR",
+ 23: "NAS/Event Report/Error Rate",
+ 24: "NAS/Event Report/RSRQ",
+ }
+
+nas_set_reg_event_req_tlvs = { # 3
+ 16: "NAS/Set Registration Event Report Request/System Select Indicator",
+ 18: "NAS/Set Registration Event Report Request/DDTM Indicator",
+ 19: "NAS/Set Registration Event Report Request/Serving System Indicator",
+ }
+
+nas_set_reg_event_rsp_tlvs = { # 3
+ 2: "NAS/Set Registration Event Report Response/Result Code",
+ }
+
+nas_get_rssi_req_tlvs = { # 32
+ 16: "NAS/Get Signal Strength Request/Request Mask",
+ }
+
+nas_get_rssi_rsp_tlvs = { # 32
+ 1: "NAS/Get Signal Strength Response/Signal Strength",
+ 2: "NAS/Get Signal Strength Response/Result Code",
+ 16: "NAS/Get Signal Strength Response/Signal Strength List",
+ 17: "NAS/Get Signal Strength Response/RSSI List",
+ 18: "NAS/Get Signal Strength Response/ECIO List",
+ 19: "NAS/Get Signal Strength Response/IO",
+ 20: "NAS/Get Signal Strength Response/SINR",
+ 21: "NAS/Get Signal Strength Response/Error Rate List",
+ }
+
+nas_scan_nets_rsp_tlvs = { # 33
+ 2: "NAS/Perform Network Scan Response/Result Code",
+ 16: "NAS/Perform Network Scan Response/Network Info",
+ 17: "NAS/Perform Network Scan Response/Network RAT",
+ }
+
+nas_register_net_req_tlvs = { # 34
+ 1: "NAS/Initiate Network Register Request/Action",
+ 16: "NAS/Initiate Network Register Request/Manual Info",
+ 17: "NAS/Initiate Network Register Request/Change Duration",
+ }
+
+nas_register_net_rsp_tlvs = { # 34
+ 2: "NAS/Initiate Network Register Response/Result Code",
+ }
+
+nas_attach_detach_req_tlvs = { # 35
+ 16: "NAS/Initiate Attach Request/Action",
+ }
+
+nas_attach_detach_rsp_tlvs = { # 35
+ 2: "NAS/Initiate Attach Response/Result Code",
+ }
+
+nas_get_ss_info_rsp_tlvs = { # 36
+ 1: "NAS/Get Serving System Response/Serving System",
+ 2: "NAS/Get Serving System Response/Result Code",
+ 16: "NAS/Get Serving System Response/Roaming Indicator",
+ 17: "NAS/Get Serving System Response/Data Services",
+ 18: "NAS/Get Serving System Response/Current PLMN",
+ 19: "NAS/Get Serving System Response/System ID",
+ 20: "NAS/Get Serving System Response/Base Station",
+ 21: "NAS/Get Serving System Response/Roaming List",
+ 22: "NAS/Get Serving System Response/Default Roaming",
+ 23: "NAS/Get Serving System Response/Time Zone",
+ 24: "NAS/Get Serving System Response/Protocol Revision",
+ }
+
+nas_get_ss_info_ind_tlvs = { # 36
+ 1: "NAS/Serving System Indication/Serving System",
+ 16: "NAS/Serving System Indication/Roaming Indicator",
+ 17: "NAS/Serving System Indication/Data Services",
+ 18: "NAS/Serving System Indication/Current PLMN",
+ 19: "NAS/Serving System Indication/System ID",
+ 20: "NAS/Serving System Indication/Base Station",
+ 21: "NAS/Serving System Indication/Roaming List",
+ 22: "NAS/Serving System Indication/Default Roaming",
+ 23: "NAS/Serving System Indication/Time Zone",
+ 24: "NAS/Serving System Indication/Protocol Revision",
+ 25: "NAS/Serving System Indication/PLMN Change",
+ }
+
+nas_get_home_info_rsp_tlvs = { # 37
+ 1: "NAS/Get Home Network Response/Home Network",
+ 2: "NAS/Get Home Network Response/Result Code",
+ 16: "NAS/Get Home Network Response/Home IDs",
+ 17: "NAS/Get Home Network Response/Extended Home Network",
+ }
+
+nas_get_net_pref_list_rsp_tlvs = { # 38
+ 2: "NAS/Get Preferred Networks Response/Result Code",
+ 16: "NAS/Get Preferred Networks Response/Networks",
+ 17: "NAS/Get Preferred Networks Response/Static Networks",
+ }
+
+nas_set_net_pref_list_req_tlvs = { # 39
+ 16: "NAS/Set Preferred Networks Request/Networks",
+ }
+
+nas_set_net_pref_list_rsp_tlvs = { # 39
+ 2: "NAS/Set Preferred Networks Response/Result Code",
+ }
+
+nas_get_net_ban_list_rsp_tlvs = { # 40
+ 2: "NAS/Get Forbidden Networks Response/Result Code",
+ 16: "NAS/Get Forbidden Networks Response/Networks",
+ }
+
+nas_set_net_ban_list_req_tlvs = { # 41
+ 16: "NAS/Set Forbidden Networks Request/Networks",
+ }
+
+nas_set_net_ban_list_rsp_tlvs = { # 41
+ 2: "NAS/Set Forbidden Networks Response/Result Code",
+ }
+
+nas_set_tech_pref_req_tlvs = { # 42
+ 1: "NAS/Set Technology Preference Request/Preference",
+ }
+
+nas_set_tech_pref_rsp_tlvs = { # 42
+ 2: "NAS/Set Technology Preference Response/Result Code",
+ }
+
+nas_get_tech_pref_rsp_tlvs = { # 43
+ 1: "NAS/Get Technology Preference Response/Active Preference",
+ 2: "NAS/Get Technology Preference Response/Result Code",
+ 16: "NAS/Get Technology Preference Response/Persistent Preference",
+ }
+
+nas_get_accolc_rsp_tlvs = { # 44
+ 1: "NAS/Get ACCOLC Response/ACCOLC",
+ 2: "NAS/Get ACCOLC Response/Result Code",
+ }
+
+nas_set_accolc_req_tlvs = { # 45
+ 1: "NAS/Set ACCOLC Request/ACCOLC",
+ }
+
+nas_set_accolc_rsp_tlvs = { # 45
+ 2: "NAS/Set ACCOLC Response/Result Code",
+ }
+
+nas_get_syspref_rsp_tlvs = { # 46
+ 1: "NAS/Get System Preference/Pref",
+ 2: "NAS/Get System Preference/Result Code",
+ }
+
+nas_get_net_params_rsp_tlvs = { # 47
+ 2: "NAS/Get Network Parameters Response/Result Code",
+ 17: "NAS/Get Network Parameters Response/SCI",
+ 18: "NAS/Get Network Parameters Response/SCM",
+ 19: "NAS/Get Network Parameters Response/Registration",
+ 20: "NAS/Get Network Parameters Response/CDMA 1xEV-DO Revision",
+ 21: "NAS/Get Network Parameters Response/CDMA 1xEV-DO SCP Custom",
+ 22: "NAS/Get Network Parameters Response/Roaming",
+ }
+
+nas_set_net_params_req_tlvs = { # 48
+ 16: "NAS/Set Network Parameters Request/SPC",
+ 20: "NAS/Set Network Parameters Request/CDMA 1xEV-DO Revision",
+ 21: "NAS/Set Network Parameters Request/CDMA 1xEV-DO SCP Custom",
+ 22: "NAS/Set Network Parameters Request/Roaming",
+ }
+
+nas_set_net_params_rsp_tlvs = { # 48
+ 2: "NAS/Set Network Parameters Response/Result Code",
+ }
+
+nas_get_rf_info_rsp_tlvs = { # 49
+ 1: "NAS/Get RF Info Response/RF Info",
+ 2: "NAS/Get RF Info Response/Result Code",
+ }
+
+nas_get_aaa_auth_status_rsp_tlvs = { # 50
+ 1: "NAS/Get AN-AAA Authentication Status Response/Status",
+ 2: "NAS/Get AN-AAA Authentication Status Response/Result Code",
+ }
+
+nas_set_sys_select_pref_req_tlvs = { # 51
+ 16: "NAS/Set System Selection Pref Request/Emergency Mode",
+ 17: "NAS/Set System Selection Pref Request/Mode",
+ 18: "NAS/Set System Selection Pref Request/Band",
+ 19: "NAS/Set System Selection Pref Request/PRL",
+ 20: "NAS/Set System Selection Pref Request/Roaming",
+ }
+
+nas_set_sys_select_pref_rsp_tlvs = { # 51
+ 2: "NAS/Set System Selection Pref Response/Result Code",
+ }
+
+nas_get_sys_select_pref_rsp_tlvs = { # 52
+ 2: "NAS/Get System Selection Pref Response/Result Code",
+ 16: "NAS/Get System Selection Pref Response/Emergency Mode",
+ 17: "NAS/Get System Selection Pref Response/Mode",
+ 18: "NAS/Get System Selection Pref Response/Band",
+ 19: "NAS/Get System Selection Pref Response/PRL",
+ 20: "NAS/Get System Selection Pref Response/Roaming",
+ }
+
+nas_get_sys_select_pref_ind_tlvs = { # 52
+ 16: "NAS/System Selection Pref Indication/Emergency Mode",
+ 17: "NAS/System Selection Pref Indication/Mode",
+ 18: "NAS/System Selection Pref Indication/Band",
+ 19: "NAS/System Selection Pref Indication/PRL",
+ 20: "NAS/System Selection Pref Indication/Roaming",
+ }
+
+nas_set_ddtm_pref_req_tlvs = { # 55
+ 1: "NAS/Set DDTM Preference Request/DDTM",
+ }
+
+nas_set_ddtm_pref_rsp_tlvs = { # 55
+ 2: "NAS/Set DDTM Preference Response/Result Code",
+ }
+
+nas_get_ddtm_pref_rsp_tlvs = { # 56
+ 1: "NAS/Get DDTM Preference Response/DDTM",
+ 2: "NAS/Get DDTM Preference Response/Result Code",
+ }
+
+nas_get_ddtm_pref_ind_tlvs = { # 56
+ 1: "NAS/DDTM Preference Indication/DDTM",
+ }
+
+nas_get_plmn_mode_rsp_tlvs = { # 59
+ 2: "NAS/Get CSP PLMN Mode Response/Result Code",
+ 16: "NAS/Get CSP PLMN Mode Response/Mode",
+ }
+
+nas_plmn_mode_ind_ind_tlvs = { # 60
+ 16: "NAS/CSP PLMN Mode Indication/Mode",
+ }
+
+nas_get_plmn_name_req_tlvs = { # 68
+ 1: "NAS/Get PLMN Name Request/PLMN",
+ }
+
+nas_get_plmn_name_rsp_tlvs = { # 68
+ 2: "NAS/Get PLMN Name Response/Result Code",
+ 16: "NAS/Get PLMN Name Response/Name",
+ }
+
+nas_cmds = {
+ 0: ("RESET", None, nas_reset_rsp_tlvs, None),
+ 1: ("ABORT", nas_abort_req_tlvs, nas_abort_rsp_tlvs, None),
+ 2: ("SET_EVENT", nas_set_event_req_tlvs, nas_set_event_rsp_tlvs, nas_set_event_ind_tlvs),
+ 3: ("SET_REG_EVENT", nas_set_reg_event_req_tlvs, nas_set_reg_event_rsp_tlvs, None),
+ 32: ("GET_RSSI", nas_get_rssi_req_tlvs, nas_get_rssi_rsp_tlvs, None),
+ 33: ("SCAN_NETS", None, nas_scan_nets_rsp_tlvs, None),
+ 34: ("REGISTER_NET", nas_register_net_req_tlvs, nas_register_net_rsp_tlvs, None),
+ 35: ("ATTACH_DETACH", nas_attach_detach_req_tlvs, nas_attach_detach_rsp_tlvs, None),
+ 36: ("GET_SS_INFO", None, nas_get_ss_info_rsp_tlvs, nas_get_ss_info_ind_tlvs),
+ 37: ("GET_HOME_INFO", None, nas_get_home_info_rsp_tlvs, None),
+ 38: ("GET_NET_PREF_LIST", None, nas_get_net_pref_list_rsp_tlvs, None),
+ 39: ("SET_NET_PREF_LIST", nas_set_net_pref_list_req_tlvs, nas_set_net_pref_list_rsp_tlvs, None),
+ 40: ("GET_NET_BAN_LIST", None, nas_get_net_ban_list_rsp_tlvs, None),
+ 41: ("SET_NET_BAN_LIST", nas_set_net_ban_list_req_tlvs, nas_set_net_ban_list_rsp_tlvs, None),
+ 42: ("SET_TECH_PREF", nas_set_tech_pref_req_tlvs, nas_set_tech_pref_rsp_tlvs, None),
+ 43: ("GET_TECH_PREF", None, nas_get_tech_pref_rsp_tlvs, None),
+ 44: ("GET_ACCOLC", None, nas_get_accolc_rsp_tlvs, None),
+ 45: ("SET_ACCOLC", nas_set_accolc_req_tlvs, nas_set_accolc_rsp_tlvs, None),
+ 46: ("GET_SYSPREF", None, nas_get_syspref_rsp_tlvs, None),
+ 47: ("GET_NET_PARAMS", None, nas_get_net_params_rsp_tlvs, None),
+ 48: ("SET_NET_PARAMS", nas_set_net_params_req_tlvs, nas_set_net_params_rsp_tlvs, None),
+ 49: ("GET_RF_INFO", None, nas_get_rf_info_rsp_tlvs, None),
+ 50: ("GET_AAA_AUTH_STATUS", None, nas_get_aaa_auth_status_rsp_tlvs, None),
+ 51: ("SET_SYS_SELECT_PREF", nas_set_sys_select_pref_req_tlvs, nas_set_sys_select_pref_rsp_tlvs, None),
+ 52: ("GET_SYS_SELECT_PREF", None, nas_get_sys_select_pref_rsp_tlvs, nas_get_sys_select_pref_ind_tlvs),
+ 55: ("SET_DDTM_PREF", nas_set_ddtm_pref_req_tlvs, nas_set_ddtm_pref_rsp_tlvs, None),
+ 56: ("GET_DDTM_PREF", None, nas_get_ddtm_pref_rsp_tlvs, nas_get_ddtm_pref_ind_tlvs),
+ 59: ("GET_PLMN_MODE", None, nas_get_plmn_mode_rsp_tlvs, None),
+ 60: ("PLMN_MODE_IND", None, None, nas_plmn_mode_ind_ind_tlvs),
+ 68: ("GET_PLMN_NAME", nas_get_plmn_name_req_tlvs, nas_get_plmn_name_rsp_tlvs, None),
+ }
+oma_reset_rsp_tlvs = { # 0
+ 2: "OMA/Reset Response/Result Code",
+ }
+
+oma_set_event_req_tlvs = { # 1
+ 16: "OMA/Set Event Report Request/NIA",
+ 17: "OMA/Set Event Report Request/Status",
+ }
+
+oma_set_event_rsp_tlvs = { # 1
+ 2: "OMA/Set Event Report Response/Result Code",
+ }
+
+oma_set_event_ind_tlvs = { # 1
+ 16: "OMA/Event Report/NIA",
+ 17: "OMA/Event Report/Status",
+ 18: "OMA/Event Report/Failure",
+ }
+
+oma_start_session_req_tlvs = { # 32
+ 16: "OMA/Start Session Request/Type",
+ }
+
+oma_start_session_rsp_tlvs = { # 32
+ 2: "OMA/Start Session Response/Result Code",
+ }
+
+oma_cancel_session_rsp_tlvs = { # 33
+ 2: "OMA/Cancel Session Response/Result Code",
+ }
+
+oma_get_session_info_rsp_tlvs = { # 34
+ 2: "OMA/Get Session Info Response/Result Code",
+ 16: "OMA/Get Session Info Response/Info",
+ 17: "OMA/Get Session Info Response/Failure",
+ 18: "OMA/Get Session Info Response/Retry",
+ 19: "OMA/Get Session Info Response/NIA",
+ }
+
+oma_send_selection_req_tlvs = { # 35
+ 16: "OMA/Send Selection Request/Type",
+ }
+
+oma_send_selection_rsp_tlvs = { # 35
+ 2: "OMA/Send Selection Response/Result Code",
+ }
+
+oma_get_features_rsp_tlvs = { # 36
+ 2: "OMA/Get Features Response/Result Code",
+ 16: "OMA/Get Features Response/Provisioning",
+ 17: "OMA/Get Features Response/PRL Update",
+ 18: "OMA/Get Features Response/HFA Feature",
+ 19: "OMA/Get Features Response/HFA Done State",
+ }
+
+oma_set_features_req_tlvs = { # 37
+ 16: "OMA/Set Features Response/Provisioning",
+ 17: "OMA/Set Features Response/PRL Update",
+ 18: "OMA/Set Features Response/HFA Feature",
+ }
+
+oma_set_features_rsp_tlvs = { # 37
+ 2: "OMA/Set Features Response/Result Code",
+ }
+
+oma_cmds = {
+ 0: ("RESET", None, oma_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", oma_set_event_req_tlvs, oma_set_event_rsp_tlvs, oma_set_event_ind_tlvs),
+ 32: ("START_SESSION", oma_start_session_req_tlvs, oma_start_session_rsp_tlvs, None),
+ 33: ("CANCEL_SESSION", None, oma_cancel_session_rsp_tlvs, None),
+ 34: ("GET_SESSION_INFO", None, oma_get_session_info_rsp_tlvs, None),
+ 35: ("SEND_SELECTION", oma_send_selection_req_tlvs, oma_send_selection_rsp_tlvs, None),
+ 36: ("GET_FEATURES", None, oma_get_features_rsp_tlvs, None),
+ 37: ("SET_FEATURES", oma_set_features_req_tlvs, oma_set_features_rsp_tlvs, None),
+ }
+pds_reset_rsp_tlvs = { # 0
+ 2: "PDS/Reset Response/Result Code",
+ }
+
+pds_set_event_req_tlvs = { # 1
+ 16: "PDS/Set Event Report Request/NMEA Indicator",
+ 17: "PDS/Set Event Report Request/Mode Indicator",
+ 18: "PDS/Set Event Report Request/Raw Indicator",
+ 19: "PDS/Set Event Report Request/XTRA Request Indicator",
+ 20: "PDS/Set Event Report Request/Time Injection Indicator",
+ 21: "PDS/Set Event Report Request/Wi-Fi Indicator",
+ 22: "PDS/Set Event Report Request/Satellite Indicator",
+ 23: "PDS/Set Event Report Request/VX Network Indicator",
+ 24: "PDS/Set Event Report Request/SUPL Network Indicator",
+ 25: "PDS/Set Event Report Request/UMTS CP Network Indicator",
+ 26: "PDS/Set Event Report Request/PDS Comm Indicator",
+ }
+
+pds_set_event_rsp_tlvs = { # 1
+ 2: "PDS/Set Event Report Response/Result Code",
+ }
+
+pds_set_event_ind_tlvs = { # 1
+ 16: "PDS/Event Report/NMEA Sentence",
+ 17: "PDS/Event Report/NMEA Sentence Plus Mode",
+ 18: "PDS/Event Report/Position Session Status",
+ 19: "PDS/Event Report/Parsed Position Data",
+ 20: "PDS/Event Report/External XTRA Request",
+ 21: "PDS/Event Report/External Time Injection Request",
+ 22: "PDS/Event Report/External Wi-Fi Position Request",
+ 23: "PDS/Event Report/Satellite Info",
+ 24: "PDS/Event Report/VX Network Initiated Prompt",
+ 25: "PDS/Event Report/SUPL Network Initiated Prompt",
+ 26: "PDS/Event Report/UMTS CP Network Initiated Prompt",
+ 27: "PDS/Event Report/Comm Events",
+ }
+
+pds_get_state_rsp_tlvs = { # 32
+ 1: "PDS/Get Service State Response/State",
+ 2: "PDS/Get Service State Response/Result Code",
+ }
+
+pds_get_state_ind_tlvs = { # 32
+ 1: "PDS/Service State Indication/State",
+ }
+
+pds_set_state_req_tlvs = { # 33
+ 1: "PDS/Set Service State Request/State",
+ }
+
+pds_set_state_rsp_tlvs = { # 33
+ 2: "PDS/Set Service State Response/Result Code",
+ }
+
+pds_start_session_req_tlvs = { # 34
+ 1: "PDS/Start Tracking Session Request/Session",
+ }
+
+pds_start_session_rsp_tlvs = { # 34
+ 2: "PDS/Start Tracking Session Response/Result Code",
+ }
+
+pds_get_session_info_rsp_tlvs = { # 35
+ 1: "PDS/Get Tracking Session Info Response/Info",
+ 2: "PDS/Get Tracking Session Info Response/Result Code",
+ }
+
+pds_fix_position_rsp_tlvs = { # 36
+ 2: "PDS/Fix Position Response/Result Code",
+ }
+
+pds_end_session_rsp_tlvs = { # 37
+ 2: "PDS/End Tracking Session Response/Result Code",
+ }
+
+pds_get_nmea_cfg_rsp_tlvs = { # 38
+ 1: "PDS/Get NMEA Config Response/Config",
+ 2: "PDS/Get NMEA Config Response/Result Code",
+ }
+
+pds_set_nmea_cfg_req_tlvs = { # 39
+ 1: "PDS/Set NMEA Config Request/Config",
+ }
+
+pds_set_nmea_cfg_rsp_tlvs = { # 39
+ 2: "PDS/Set NMEA Config Response/Result Code",
+ }
+
+pds_inject_time_req_tlvs = { # 40
+ 1: "PDS/Inject Time Reference Request/Time",
+ }
+
+pds_inject_time_rsp_tlvs = { # 40
+ 2: "PDS/Inject Time Reference Response/Result Code",
+ }
+
+pds_get_defaults_rsp_tlvs = { # 41
+ 1: "PDS/Get Defaults Response/Defaults",
+ 2: "PDS/Get Defaults Response/Result Code",
+ }
+
+pds_set_defaults_req_tlvs = { # 42
+ 1: "PDS/Set Defaults Request/Defaults",
+ }
+
+pds_set_defaults_rsp_tlvs = { # 42
+ 2: "PDS/Set Defaults Response/Result Code",
+ }
+
+pds_get_xtra_params_rsp_tlvs = { # 43
+ 2: "PDS/Get XTRA Parameters Response/Result Code",
+ 16: "PDS/Get XTRA Parameters Response/Automatic",
+ 17: "PDS/Get XTRA Parameters Response/Medium",
+ 18: "PDS/Get XTRA Parameters Response/Network",
+ 19: "PDS/Get XTRA Parameters Response/Validity",
+ 20: "PDS/Get XTRA Parameters Response/Embedded",
+ }
+
+pds_set_xtra_params_req_tlvs = { # 44
+ 16: "PDS/Set XTRA Parameters Request/Automatic",
+ 17: "PDS/Set XTRA Parameters Request/Medium",
+ 18: "PDS/Set XTRA Parameters Request/Network",
+ 20: "PDS/Set XTRA Parameters Request/Embedded",
+ }
+
+pds_set_xtra_params_rsp_tlvs = { # 44
+ 2: "PDS/Set XTRA Parameters Response/Result Code",
+ }
+
+pds_force_xtra_dl_rsp_tlvs = { # 45
+ 2: "PDS/Force XTRA Download Response/Result Code",
+ }
+
+pds_get_agps_config_req_tlvs = { # 46
+ 18: "PDS/Get AGPS Config Request/Network Mode",
+ }
+
+pds_get_agps_config_rsp_tlvs = { # 46
+ 2: "PDS/Get AGPS Config Response/Result Code",
+ 16: "PDS/Get AGPS Config Response/Server",
+ 17: "PDS/Get AGPS Config Response/Server URL",
+ }
+
+pds_set_agps_config_req_tlvs = { # 47
+ 16: "PDS/Set AGPS Config Request/Server",
+ 17: "PDS/Set AGPS Config Request/Server URL",
+ 18: "PDS/Set AGPS Config Request/Network Mode",
+ }
+
+pds_set_agps_config_rsp_tlvs = { # 47
+ 2: "PDS/Set AGPS Config Response/Result Code",
+ }
+
+pds_get_svc_autotrack_rsp_tlvs = { # 48
+ 1: "PDS/Get Service Auto-Tracking State Response/State",
+ 2: "PDS/Get Service Auto-Tracking State Response/Result Code",
+ }
+
+pds_set_svc_autotrack_req_tlvs = { # 49
+ 1: "PDS/Set Service Auto-Tracking State Request/State",
+ }
+
+pds_set_svc_autotrack_rsp_tlvs = { # 49
+ 2: "PDS/Set Service Auto-Tracking State Response/Result Code",
+ }
+
+pds_get_com_autotrack_rsp_tlvs = { # 50
+ 1: "PDS/Get COM Port Auto-Tracking Config Response/Config",
+ 2: "PDS/Get COM Port Auto-Tracking Config Response/Result Code",
+ }
+
+pds_set_com_autotrack_req_tlvs = { # 51
+ 1: "PDS/Set COM Port Auto-Tracking Config Request/Config",
+ }
+
+pds_set_com_autotrack_rsp_tlvs = { # 51
+ 2: "PDS/Set COM Port Auto-Tracking Config Response/Result Code",
+ }
+
+pds_reset_data_req_tlvs = { # 52
+ 16: "PDS/Reset PDS Data Request/GPS Data",
+ 17: "PDS/Reset PDS Data Request/Cell Data",
+ }
+
+pds_reset_data_rsp_tlvs = { # 52
+ 2: "PDS/Reset PDS Data Response/Result Code",
+ }
+
+pds_single_fix_req_tlvs = { # 53
+ 16: "PDS/Single Position Fix Request/Mode",
+ 17: "PDS/Single Position Fix Request/Timeout",
+ 18: "PDS/Single Position Fix Request/Accuracy",
+ }
+
+pds_single_fix_rsp_tlvs = { # 53
+ 2: "PDS/Single Position Fix Response/Result Code",
+ }
+
+pds_get_version_rsp_tlvs = { # 54
+ 1: "PDS/Get Service Version Response/Version",
+ 2: "PDS/Get Service Version Response/Result Code",
+ }
+
+pds_inject_xtra_req_tlvs = { # 55
+ 1: "PDS/Inject XTRA Data Request/Data",
+ }
+
+pds_inject_xtra_rsp_tlvs = { # 55
+ 2: "PDS/Inject XTRA Data Response/Result Code",
+ }
+
+pds_inject_position_req_tlvs = { # 56
+ 16: "PDS/Inject Position Data Request/Timestamp",
+ 17: "PDS/Inject Position Data Request/Latitude",
+ 18: "PDS/Inject Position Data Request/Longitude",
+ 19: "PDS/Inject Position Data Request/Altitude Ellipsoid",
+ 20: "PDS/Inject Position Data Request/Altitude Sea Level",
+ 21: "PDS/Inject Position Data Request/Horizontal Uncertainty",
+ 22: "PDS/Inject Position Data Request/Vertical Uncertainty",
+ 23: "PDS/Inject Position Data Request/Horizontal Confidence",
+ 24: "PDS/Inject Position Data Request/Vertical Confidence",
+ 25: "PDS/Inject Position Data Request/Source",
+ }
+
+pds_inject_position_rsp_tlvs = { # 56
+ 2: "PDS/Inject Position Data Response/Result Code",
+ }
+
+pds_inject_wifi_req_tlvs = { # 57
+ 16: "PDS/Inject Wi-Fi Position Data Request/Time",
+ 17: "PDS/Inject Wi-Fi Position Data Request/Position",
+ 18: "PDS/Inject Wi-Fi Position Data Request/AP Info",
+ }
+
+pds_inject_wifi_rsp_tlvs = { # 57
+ 2: "PDS/Inject Wi-Fi Position Data Response/Result Code",
+ }
+
+pds_get_sbas_config_rsp_tlvs = { # 58
+ 2: "PDS/Get SBAS Config Response/Result Code",
+ 16: "PDS/Get SBAS Config Response/Config",
+ }
+
+pds_set_sbas_config_req_tlvs = { # 59
+ 16: "PDS/Set SBAS Config Request/Config",
+ }
+
+pds_set_sbas_config_rsp_tlvs = { # 59
+ 2: "PDS/Set SBAS Config Response/Result Code",
+ }
+
+pds_send_ni_response_req_tlvs = { # 60
+ 1: "PDS/Send Network Initiated Response Request/Action",
+ 16: "PDS/Send Network Initiated Response Request/VX",
+ 17: "PDS/Send Network Initiated Response Request/SUPL",
+ 18: "PDS/Send Network Initiated Response Request/UMTS CP",
+ }
+
+pds_send_ni_response_rsp_tlvs = { # 60
+ 2: "PDS/Send Network Initiated Response Response/Result Code",
+ }
+
+pds_inject_abs_time_req_tlvs = { # 61
+ 1: "PDS/Inject Absolute Time Request/Time",
+ }
+
+pds_inject_abs_time_rsp_tlvs = { # 61
+ 2: "PDS/Inject Absolute Time Response/Result Code",
+ }
+
+pds_inject_efs_req_tlvs = { # 62
+ 1: "PDS/Inject EFS Data Request/Date File",
+ }
+
+pds_inject_efs_rsp_tlvs = { # 62
+ 2: "PDS/Inject EFS Data Response/Result Code",
+ }
+
+pds_get_dpo_config_rsp_tlvs = { # 63
+ 2: "PDS/Get DPO Config Response/Result Code",
+ 16: "PDS/Get DPO Config Response/Config",
+ }
+
+pds_set_dpo_config_req_tlvs = { # 64
+ 1: "PDS/Set DPO Config Request/Config",
+ }
+
+pds_set_dpo_config_rsp_tlvs = { # 64
+ 2: "PDS/Set DPO Config Response/Result Code",
+ }
+
+pds_get_odp_config_rsp_tlvs = { # 65
+ 2: "PDS/Get ODP Config Response/Result Code",
+ 16: "PDS/Get ODP Config Response/Config",
+ }
+
+pds_set_odp_config_req_tlvs = { # 66
+ 16: "PDS/Set ODP Config Request/Config",
+ }
+
+pds_set_odp_config_rsp_tlvs = { # 66
+ 2: "PDS/Set ODP Config Response/Result Code",
+ }
+
+pds_cancel_single_fix_rsp_tlvs = { # 67
+ 2: "PDS/Cancel Single Position Fix Response/Result Code",
+ }
+
+pds_get_gps_state_rsp_tlvs = { # 68
+ 2: "PDS/Get GPS State Response/Result Code",
+ 16: "PDS/Get GPS State Response/State",
+ }
+
+pds_get_methods_rsp_tlvs = { # 80
+ 2: "PDS/Get Position Methods State Response/Result Code",
+ 16: "PDS/Get Position Methods State Response/XTRA Time",
+ 17: "PDS/Get Position Methods State Response/XTRA Data",
+ 18: "PDS/Get Position Methods State Response/Wi-Fi",
+ }
+
+pds_set_methods_req_tlvs = { # 81
+ 16: "PDS/Set Position Methods State Request/XTRA Time",
+ 17: "PDS/Set Position Methods State Request/XTRA Data",
+ 18: "PDS/Set Position Methods State Request/Wi-Fi",
+ }
+
+pds_set_methods_rsp_tlvs = { # 81
+ 2: "PDS/Set Position Methods State Response/Result Code",
+ }
+
+pds_cmds = {
+ 0: ("RESET", None, pds_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", pds_set_event_req_tlvs, pds_set_event_rsp_tlvs, pds_set_event_ind_tlvs),
+ 32: ("GET_STATE", None, pds_get_state_rsp_tlvs, pds_get_state_ind_tlvs),
+ 33: ("SET_STATE", pds_set_state_req_tlvs, pds_set_state_rsp_tlvs, None),
+ 34: ("START_SESSION", pds_start_session_req_tlvs, pds_start_session_rsp_tlvs, None),
+ 35: ("GET_SESSION_INFO", None, pds_get_session_info_rsp_tlvs, None),
+ 36: ("FIX_POSITION", None, pds_fix_position_rsp_tlvs, None),
+ 37: ("END_SESSION", None, pds_end_session_rsp_tlvs, None),
+ 38: ("GET_NMEA_CFG", None, pds_get_nmea_cfg_rsp_tlvs, None),
+ 39: ("SET_NMEA_CFG", pds_set_nmea_cfg_req_tlvs, pds_set_nmea_cfg_rsp_tlvs, None),
+ 40: ("INJECT_TIME", pds_inject_time_req_tlvs, pds_inject_time_rsp_tlvs, None),
+ 41: ("GET_DEFAULTS", None, pds_get_defaults_rsp_tlvs, None),
+ 42: ("SET_DEFAULTS", pds_set_defaults_req_tlvs, pds_set_defaults_rsp_tlvs, None),
+ 43: ("GET_XTRA_PARAMS", None, pds_get_xtra_params_rsp_tlvs, None),
+ 44: ("SET_XTRA_PARAMS", pds_set_xtra_params_req_tlvs, pds_set_xtra_params_rsp_tlvs, None),
+ 45: ("FORCE_XTRA_DL", None, pds_force_xtra_dl_rsp_tlvs, None),
+ 46: ("GET_AGPS_CONFIG", pds_get_agps_config_req_tlvs, pds_get_agps_config_rsp_tlvs, None),
+ 47: ("SET_AGPS_CONFIG", pds_set_agps_config_req_tlvs, pds_set_agps_config_rsp_tlvs, None),
+ 48: ("GET_SVC_AUTOTRACK", None, pds_get_svc_autotrack_rsp_tlvs, None),
+ 49: ("SET_SVC_AUTOTRACK", pds_set_svc_autotrack_req_tlvs, pds_set_svc_autotrack_rsp_tlvs, None),
+ 50: ("GET_COM_AUTOTRACK", None, pds_get_com_autotrack_rsp_tlvs, None),
+ 51: ("SET_COM_AUTOTRACK", pds_set_com_autotrack_req_tlvs, pds_set_com_autotrack_rsp_tlvs, None),
+ 52: ("RESET_DATA", pds_reset_data_req_tlvs, pds_reset_data_rsp_tlvs, None),
+ 53: ("SINGLE_FIX", pds_single_fix_req_tlvs, pds_single_fix_rsp_tlvs, None),
+ 54: ("GET_VERSION", None, pds_get_version_rsp_tlvs, None),
+ 55: ("INJECT_XTRA", pds_inject_xtra_req_tlvs, pds_inject_xtra_rsp_tlvs, None),
+ 56: ("INJECT_POSITION", pds_inject_position_req_tlvs, pds_inject_position_rsp_tlvs, None),
+ 57: ("INJECT_WIFI", pds_inject_wifi_req_tlvs, pds_inject_wifi_rsp_tlvs, None),
+ 58: ("GET_SBAS_CONFIG", None, pds_get_sbas_config_rsp_tlvs, None),
+ 59: ("SET_SBAS_CONFIG", pds_set_sbas_config_req_tlvs, pds_set_sbas_config_rsp_tlvs, None),
+ 60: ("SEND_NI_RESPONSE", pds_send_ni_response_req_tlvs, pds_send_ni_response_rsp_tlvs, None),
+ 61: ("INJECT_ABS_TIME", pds_inject_abs_time_req_tlvs, pds_inject_abs_time_rsp_tlvs, None),
+ 62: ("INJECT_EFS", pds_inject_efs_req_tlvs, pds_inject_efs_rsp_tlvs, None),
+ 63: ("GET_DPO_CONFIG", None, pds_get_dpo_config_rsp_tlvs, None),
+ 64: ("SET_DPO_CONFIG", pds_set_dpo_config_req_tlvs, pds_set_dpo_config_rsp_tlvs, None),
+ 65: ("GET_ODP_CONFIG", None, pds_get_odp_config_rsp_tlvs, None),
+ 66: ("SET_ODP_CONFIG", pds_set_odp_config_req_tlvs, pds_set_odp_config_rsp_tlvs, None),
+ 67: ("CANCEL_SINGLE_FIX", None, pds_cancel_single_fix_rsp_tlvs, None),
+ 68: ("GET_GPS_STATE", None, pds_get_gps_state_rsp_tlvs, None),
+ 80: ("GET_METHODS", None, pds_get_methods_rsp_tlvs, None),
+ 81: ("SET_METHODS", pds_set_methods_req_tlvs, pds_set_methods_rsp_tlvs, None),
+ }
+rms_reset_rsp_tlvs = { # 0
+ 2: "RMS/Reset Response/Result Code",
+ }
+
+rms_get_sms_wake_rsp_tlvs = { # 32
+ 2: "RMS/Get SMS Wake Response/Result Code",
+ 16: "RMS/Get SMS Wake Response/State",
+ 17: "RMS/Get SMS Wake Request/Mask",
+ }
+
+rms_set_sms_wake_req_tlvs = { # 33
+ 16: "RMS/Set SMS Wake Request/State",
+ 17: "RMS/Set SMS Wake Request/Mask",
+ }
+
+rms_set_sms_wake_rsp_tlvs = { # 33
+ 2: "RMS/Set SMS Wake Response/Result Code",
+ }
+
+rms_cmds = {
+ 0: ("RESET", None, rms_reset_rsp_tlvs, None),
+ 32: ("GET_SMS_WAKE", None, rms_get_sms_wake_rsp_tlvs, None),
+ 33: ("SET_SMS_WAKE", rms_set_sms_wake_req_tlvs, rms_set_sms_wake_rsp_tlvs, None),
+ }
+voice_orig_ussd_req_tlvs = { # 58
+ 1: "Voice/Initiate USSD Request/Info",
+ }
+
+voice_orig_ussd_rsp_tlvs = { # 58
+ 2: "Voice/Initiate USSD Response/Result Code",
+ 16: "Voice/Initiate USSD Response/Fail Cause",
+ 17: "Voice/Initiate USSD Response/Alpha ID",
+ 18: "Voice/Initiate USSD Response/Data",
+ }
+
+voice_answer_ussd_req_tlvs = { # 59
+ 1: "Voice/Answer USSD Request/Info",
+ }
+
+voice_answer_ussd_rsp_tlvs = { # 59
+ 2: "Voice/Answer USSD Response/Result Code",
+ }
+
+voice_cancel_ussd_rsp_tlvs = { # 60
+ 2: "Voice/Cancel USSD Response/Result Code",
+ }
+
+voice_ussd_ind_ind_tlvs = { # 62
+ 1: "Voice/USSD Indication/Type",
+ 16: "Voice/USSD Indication/Data",
+ }
+
+voice_async_orig_ussd_req_tlvs = { # 67
+ 1: "Voice/Async Initiate USSD Request/Info",
+ }
+
+voice_async_orig_ussd_rsp_tlvs = { # 67
+ 2: "Voice/Async Initiate USSD Response/Result Code",
+ }
+
+voice_async_orig_ussd_ind_tlvs = { # 67
+ 16: "Voice/USSD Async Indication/Error",
+ 17: "Voice/USSD Async Indication/Fail Cause",
+ 18: "Voice/USSD Async Indication/Info",
+ 19: "Voice/USSD Async Indication/Alpha ID",
+ }
+
+voice_cmds = {
+ 3: ("INDICATION_REG", None, None, None),
+ 32: ("CALL_ORIGINATE", None, None, None),
+ 33: ("CALL_END", None, None, None),
+ 34: ("CALL_ANSWER", None, None, None),
+ 36: ("GET_CALL_INFO", None, None, None),
+ 37: ("OTASP_STATUS_IND", None, None, None),
+ 38: ("INFO_REC_IND", None, None, None),
+ 39: ("SEND_FLASH", None, None, None),
+ 40: ("BURST_DTMF", None, None, None),
+ 41: ("START_CONT_DTMF", None, None, None),
+ 42: ("STOP_CONT_DTMF", None, None, None),
+ 43: ("DTMF_IND", None, None, None),
+ 44: ("SET_PRIVACY_PREF", None, None, None),
+ 45: ("PRIVACY_IND", None, None, None),
+ 46: ("ALL_STATUS_IND", None, None, None),
+ 47: ("GET_ALL_STATUS", None, None, None),
+ 49: ("MANAGE_CALLS", None, None, None),
+ 50: ("SUPS_NOTIFICATION_IND", None, None, None),
+ 51: ("SET_SUPS_SERVICE", None, None, None),
+ 52: ("GET_CALL_WAITING", None, None, None),
+ 53: ("GET_CALL_BARRING", None, None, None),
+ 54: ("GET_CLIP", None, None, None),
+ 55: ("GET_CLIR", None, None, None),
+ 56: ("GET_CALL_FWDING", None, None, None),
+ 57: ("SET_CALL_BARRING_PWD", None, None, None),
+ 58: ("ORIG_USSD", voice_orig_ussd_req_tlvs, voice_orig_ussd_rsp_tlvs, None),
+ 59: ("ANSWER_USSD", voice_answer_ussd_req_tlvs, voice_answer_ussd_rsp_tlvs, None),
+ 60: ("CANCEL_USSD", None, voice_cancel_ussd_rsp_tlvs, None),
+ 61: ("USSD_RELEASE_IND", None, None, None),
+ 62: ("USSD_IND", None, None, voice_ussd_ind_ind_tlvs),
+ 63: ("UUS_IND", None, None, None),
+ 64: ("SET_CONFIG", None, None, None),
+ 65: ("GET_CONFIG", None, None, None),
+ 66: ("SUPS_IND", None, None, None),
+ 67: ("ASYNC_ORIG_USSD", voice_async_orig_ussd_req_tlvs, voice_async_orig_ussd_rsp_tlvs, voice_async_orig_ussd_ind_tlvs),
+ }
+wds_reset_rsp_tlvs = { # 0
+ 2: "WDS/Reset Response/Result Code",
+ }
+
+wds_set_event_req_tlvs = { # 1
+ 16: "WDS/Set Event Report Request/Channel Rate Indicator",
+ 17: "WDS/Set Event Report Request/Transfer Statistics Indicator",
+ 18: "WDS/Set Event Report Request/Data Bearer Technology Indicator",
+ 19: "WDS/Set Event Report Request/Dormancy Status Indicator",
+ 20: "WDS/Set Event Report Request/MIP Status Indicator",
+ 21: "WDS/Set Event Report Request/Current Data Bearer Technology Indicator",
+ }
+
+wds_set_event_rsp_tlvs = { # 1
+ 2: "WDS/Set Event Report Response/Result Code",
+ }
+
+wds_set_event_ind_tlvs = { # 1
+ 16: "WDS/Event Report/TX Packet Successes",
+ 17: "WDS/Event Report/RX Packet Successes",
+ 18: "WDS/Event Report/TX Packet Errors",
+ 19: "WDS/Event Report/RX Packet Errors",
+ 20: "WDS/Event Report/TX Overflows",
+ 21: "WDS/Event Report/RX Overflows",
+ 22: "WDS/Event Report/Channel Rates",
+ 23: "WDS/Event Report/Data Bearer Technology",
+ 24: "WDS/Event Report/Dormancy Status",
+ 25: "WDS/Event Report/TX Bytes",
+ 26: "WDS/Event Report/RX Bytes",
+ 27: "WDS/Event Report/MIP Status",
+ 29: "WDS/Event Report/Current Data Bearer Technology",
+ }
+
+wds_abort_req_tlvs = { # 2
+ 1: "WDS/Abort Request/Transaction ID",
+ }
+
+wds_abort_rsp_tlvs = { # 2
+ 2: "WDS/Abort Response/Result Code",
+ }
+
+wds_start_net_req_tlvs = { # 32
+ 16: "WDS/Start Network Interface Request/Primary DNS",
+ 17: "WDS/Start Network Interface Request/Secondary DNS",
+ 18: "WDS/Start Network Interface Request/Primary NBNS",
+ 19: "WDS/Start Network Interface Request/Secondary NBNS",
+ 20: "WDS/Start Network Interface Request/Context APN Name",
+ 21: "WDS/Start Network Interface Request/IP Address",
+ 22: "WDS/Start Network Interface Request/Authentication",
+ 23: "WDS/Start Network Interface Request/Username",
+ 24: "WDS/Start Network Interface Request/Password",
+ 25: "WDS/Start Network Interface Request/IP Family",
+ 48: "WDS/Start Network Interface Request/Technology Preference",
+ 49: "WDS/Start Network Interface Request/3GPP Profile Identifier",
+ 50: "WDS/Start Network Interface Request/3GPP2 Profile Identifier",
+ 51: "WDS/Start Network Interface Request/Autoconnect",
+ 52: "WDS/Start Network Interface Request/Extended Technology Preference",
+ 53: "WDS/Start Network Interface Request/Call Type",
+ }
+
+wds_start_net_rsp_tlvs = { # 32
+ 1: "WDS/Start Network Interface Response/Packet Data Handle",
+ 2: "WDS/Start Network Interface Response/Result Code",
+ 16: "WDS/Start Network Interface Response/Call End Reason",
+ 17: "WDS/Start Network Interface Response/Verbose Call End Reason",
+ }
+
+wds_stop_net_req_tlvs = { # 33
+ 1: "WDS/Stop Network Interface Request/Packet Data Handle",
+ 16: "WDS/Stop Network Interface Request/Autoconnect",
+ }
+
+wds_stop_net_rsp_tlvs = { # 33
+ 2: "WDS/Stop Network Interface Response/Result Code",
+ }
+
+wds_get_pkt_status_rsp_tlvs = { # 34
+ 1: "WDS/Get Packet Service Status Response/Status",
+ 2: "WDS/Get Packet Service Status Response/Result Code",
+ }
+
+wds_get_pkt_status_ind_tlvs = { # 34
+ 1: "WDS/Packet Service Status Report/Status",
+ 16: "WDS/Packet Service Status Report/Call End Reason",
+ 17: "WDS/Packet Service Status Report/Verbose Call End Reason",
+ }
+
+wds_get_rates_rsp_tlvs = { # 35
+ 1: "WDS/Get Channel Rates Response/Channel Rates",
+ 2: "WDS/Get Channel Rates Response/Result Code",
+ }
+
+wds_get_statistics_req_tlvs = { # 36
+ 1: "WDS/Get Packet Statistics Request/Packet Stats Mask",
+ }
+
+wds_get_statistics_rsp_tlvs = { # 36
+ 2: "WDS/Get Packet Statistics Response/Result Code",
+ 16: "WDS/Get Packet Statistics Response/TX Packet Successes",
+ 17: "WDS/Get Packet Statistics Response/RX Packet Successes",
+ 18: "WDS/Get Packet Statistics Response/TX Packet Errors",
+ 19: "WDS/Get Packet Statistics Response/RX Packet Errors",
+ 20: "WDS/Get Packet Statistics Response/TX Overflows",
+ 21: "WDS/Get Packet Statistics Response/RX Overflows",
+ 25: "WDS/Get Packet Statistics Response/TX Bytes",
+ 26: "WDS/Get Packet Statistics Response/RX Bytes",
+ 27: "WDS/Get Packet Statistics Response/Previous TX Bytes",
+ 28: "WDS/Get Packet Statistics Response/Previous RX Bytes",
+ }
+
+wds_g0_dormant_rsp_tlvs = { # 37
+ 2: "WDS/Go Dormant Response/Result Code",
+ }
+
+wds_g0_active_rsp_tlvs = { # 38
+ 2: "WDS/Go Active Response/Result Code",
+ }
+
+wds_create_profile_req_tlvs = { # 39
+ 1: "WDS/Create Profile Request/Profile Type",
+ 16: "WDS/Create Profile Request/Profile Name",
+ 17: "WDS/Create Profile Request/PDP Type",
+ 20: "WDS/Create Profile Request/APN Name",
+ 21: "WDS/Create Profile Request/Primary DNS",
+ 22: "WDS/Create Profile Request/Secondary DNS",
+ 23: "WDS/Create Profile Request/UMTS Requested QoS",
+ 24: "WDS/Create Profile Request/UMTS Minimum QoS",
+ 25: "WDS/Create Profile Request/GPRS Requested QoS",
+ 26: "WDS/Create Profile Request/GPRS Minimum QoS",
+ 27: "WDS/Create Profile Request/Username",
+ 28: "WDS/Create Profile Request/Password",
+ 29: "WDS/Create Profile Request/Authentication",
+ 30: "WDS/Create Profile Request/IP Address",
+ 31: "WDS/Create Profile Request/P-CSCF",
+ }
+
+wds_create_profile_rsp_tlvs = { # 39
+ 1: "WDS/Create Profile Response/Profile Identifier",
+ 2: "WDS/Create Profile Response/Result Code",
+ }
+
+wds_modify_profile_req_tlvs = { # 40
+ 1: "WDS/Modify Profile Request/Profile Identifier",
+ 16: "WDS/Modify Profile Request/Profile Name",
+ 17: "WDS/Modify Profile Request/PDP Type",
+ 20: "WDS/Modify Profile Request/APN Name",
+ 21: "WDS/Modify Profile Request/Primary DNS",
+ 22: "WDS/Modify Profile Request/Secondary DNS",
+ 23: "WDS/Modify Profile Request/UMTS Requested QoS",
+ 24: "WDS/Modify Profile Request/UMTS Minimum QoS",
+ 25: "WDS/Modify Profile Request/GPRS Requested QoS",
+ 26: "WDS/Modify Profile Request/GPRS Minimum QoS",
+ 27: "WDS/Modify Profile Request/Username",
+ 28: "WDS/Modify Profile Request/Password",
+ 29: "WDS/Modify Profile Request/Authentication",
+ 30: "WDS/Modify Profile Request/IP Address",
+ 31: "WDS/Modify Profile Request/P-CSCF",
+ 32: "WDS/Modify Profile Request/PDP Access Control Flag",
+ 33: "WDS/Modify Profile Request/P-CSCF Address Using DHCP",
+ 34: "WDS/Modify Profile Request/IM CN Flag",
+ 35: "WDS/Modify Profile Request/Traffic Flow Template ID1 Parameters",
+ 36: "WDS/Modify Profile Request/Traffic Flow Template ID2 Parameters",
+ 37: "WDS/Modify Profile Request/PDP Context Number",
+ 38: "WDS/Modify Profile Request/PDP Context Secondary Flag",
+ 39: "WDS/Modify Profile Request/PDP Context Primary ID",
+ 40: "WDS/Modify Profile Request/IPv6 Address",
+ 41: "WDS/Modify Profile Request/Requested QoS",
+ 42: "WDS/Modify Profile Request/Minimum QoS",
+ 43: "WDS/Modify Profile Request/Primary IPv6",
+ 44: "WDS/Modify Profile Request/Secondary IPv6",
+ 45: "WDS/Modify Profile Request/Address Allocation Preference",
+ 46: "WDS/Modify Profile Request/LTE QoS Parameters",
+ 144: "WDS/Modify Profile Request/Negotiate DNS Server Prefrence",
+ 145: "WDS/Modify Profile Request/PPP Session Close Timer DO",
+ 146: "WDS/Modify Profile Request/PPP Session Close Timer 1X",
+ 147: "WDS/Modify Profile Request/Allow Linger",
+ 148: "WDS/Modify Profile Request/LCP ACK Timeout",
+ 149: "WDS/Modify Profile Request/IPCP ACK Timeout",
+ 150: "WDS/Modify Profile Request/Authentication Timeout",
+ 154: "WDS/Modify Profile Request/Authentication Protocol",
+ 155: "WDS/Modify Profile Request/User ID",
+ 156: "WDS/Modify Profile Request/Authentication Password",
+ 157: "WDS/Modify Profile Request/Data Rate",
+ 158: "WDS/Modify Profile Request/Application Type",
+ 159: "WDS/Modify Profile Request/Data Mode",
+ 160: "WDS/Modify Profile Request/Application Priority",
+ 161: "WDS/Modify Profile Request/APN String",
+ 162: "WDS/Modify Profile Request/PDN Type",
+ 163: "WDS/Modify Profile Request/P-CSCF Address Needed",
+ 164: "WDS/Modify Profile Request/Primary IPv4 Address",
+ 165: "WDS/Modify Profile Request/Secondary IPv4 Address",
+ 166: "WDS/Modify Profile Request/Primary IPv6 Address",
+ 167: "WDS/Modify Profile Request/Secondary IPv6 Address",
+ }
+
+wds_modify_profile_rsp_tlvs = { # 40
+ 2: "WDS/Modify Profile Response/Result Code",
+ 151: "WDS/Modify Profile Request/LCP Config Retry Count",
+ 152: "WDS/Modify Profile Request/IPCP Config Retry Count",
+ 153: "WDS/Modify Profile Request/Authentication Retry",
+ 224: "WDS/Modify Profile Request/Extended Error Code",
+ }
+
+wds_delete_profile_req_tlvs = { # 41
+ 1: "WDS/Delete Profile Request/Profile Identifier",
+ }
+
+wds_delete_profile_rsp_tlvs = { # 41
+ 2: "WDS/Delete Profile Response/Result Code",
+ }
+
+wds_get_profile_list_rsp_tlvs = { # 42
+ 1: "WDS/Get Profile List Response/Profile List",
+ 2: "WDS/Get Profile List Response/Result Code",
+ }
+
+wds_get_profile_req_tlvs = { # 43
+ 1: "WDS/Get Profile Settings Request/Profile Identifier",
+ }
+
+wds_get_profile_rsp_tlvs = { # 43
+ 2: "WDS/Get Profile Settings Response/Result Code",
+ 16: "WDS/Get Profile Settings Response/Profile Name",
+ 17: "WDS/Get Profile Settings Response/PDP Type",
+ 20: "WDS/Get Profile Settings Response/APN Name",
+ 21: "WDS/Get Profile Settings Response/Primary DNS",
+ 22: "WDS/Get Profile Settings Response/Secondary DNS",
+ 23: "WDS/Get Profile Settings Response/UMTS Requested QoS",
+ 24: "WDS/Get Profile Settings Response/UMTS Minimum QoS",
+ 25: "WDS/Get Profile Settings Response/GPRS Requested QoS",
+ 26: "WDS/Get Profile Settings Response/GPRS Minimum QoS",
+ 27: "WDS/Get Profile Settings Response/Username",
+ 29: "WDS/Get Profile Settings Response/Authentication",
+ 30: "WDS/Get Profile Settings Response/IP Address",
+ 31: "WDS/Get Profile Settings Response/P-CSCF",
+ }
+
+wds_get_defaults_req_tlvs = { # 44
+ 1: "WDS/Get Default Settings Request/Profile Type",
+ }
+
+wds_get_defaults_rsp_tlvs = { # 44
+ 2: "WDS/Get Default Settings Response/Result Code",
+ 16: "WDS/Get Default Settings Response/Profile Name",
+ 17: "WDS/Get Default Settings Response/PDP Type",
+ 20: "WDS/Get Default Settings Response/APN Name",
+ 21: "WDS/Get Default Settings Response/Primary DNS",
+ 22: "WDS/Get Default Settings Response/Secondary DNS",
+ 23: "WDS/Get Default Settings Response/UMTS Requested QoS",
+ 24: "WDS/Get Default Settings Response/UMTS Minimum QoS",
+ 25: "WDS/Get Default Settings Response/GPRS Requested QoS",
+ 26: "WDS/Get Default Settings Response/GPRS Minimum QoS",
+ 27: "WDS/Get Default Settings Response/Username",
+ 28: "WDS/Get Default Settings Response/Password",
+ 29: "WDS/Get Default Settings Response/Authentication",
+ 30: "WDS/Get Default Settings Response/IP Address",
+ 31: "WDS/Get Default Settings Response/P-CSCF",
+ 32: "WDS/Get Default Settings Response/PDP Access Control Flag",
+ 33: "WDS/Get Default Settings Response/P-CSCF Address Using DHCP",
+ 34: "WDS/Get Default Settings Response/IM CN Flag",
+ 35: "WDS/Get Default Settings Response/Traffic Flow Template ID1 Parameters",
+ 36: "WDS/Get Default Settings Response/Traffic Flow Template ID2 Parameters",
+ 37: "WDS/Get Default Settings Response/PDP Context Number",
+ 38: "WDS/Get Default Settings Response/PDP Context Secondary Flag",
+ 39: "WDS/Get Default Settings Response/PDP Context Primary ID",
+ 40: "WDS/Get Default Settings Response/IPv6 Address",
+ 41: "WDS/Get Default Settings Response/Requested QoS",
+ 42: "WDS/Get Default Settings Response/Minimum QoS",
+ 43: "WDS/Get Default Settings Response/Primary DNS IPv6 Address",
+ 44: "WDS/Get Default Settings Response/Secondary DNS IPv6 Address",
+ 45: "WDS/Get Default Settings Response/DHCP NAS Preference",
+ 46: "WDS/Get Default Settings Response/LTE QoS Parameters",
+ 144: "WDS/Get Default Settings Response/Negotiate DSN Server Preferences",
+ 145: "WDS/Get Default Settings Response/PPP Session CLose Timer DO",
+ 146: "WDS/Get Default Settings Response/PPP Session Close Timer 1X",
+ 147: "WDS/Get Default Settings Response/Allow Lingering Interface",
+ 148: "WDS/Get Default Settings Response/LCP ACK Timeout",
+ 149: "WDS/Get Default Settings Response/IPCP ACK Timeout",
+ 150: "WDS/Get Default Settings Response/Authentication Timeout",
+ 151: "WDS/Get Default Settings Response/LCP Config Retry Count",
+ 152: "WDS/Get Default Settings Response/IPCP Config Retry Count",
+ 153: "WDS/Get Default Settings Response/Authentication Retry",
+ 154: "WDS/Get Default Settings Response/Authentication Protocol",
+ 155: "WDS/Get Default Settings Response/User ID",
+ 156: "WDS/Get Default Settings Response/Authentication Password",
+ 157: "WDS/Get Default Settings Response/Data Rate",
+ 158: "WDS/Get Default Settings Response/Application Type",
+ 159: "WDS/Get Default Settings Response/Data Mode",
+ 160: "WDS/Get Default Settings Response/Application Priority",
+ 161: "WDS/Get Default Settings Response/APN String",
+ 162: "WDS/Get Default Settings Response/PDN Type",
+ 163: "WDS/Get Default Settings Response/P-CSCF Address Needed",
+ 164: "WDS/Get Default Settings Response/Primary DNS Address",
+ 165: "WDS/Get Default Settings Response/Secondary DNS Address",
+ 166: "WDS/Get Default Settings Response/Primary IPv6 Address",
+ 167: "WDS/Get Default Settings Response/Secondary IPv6 Address",
+ 224: "WDS/Get Default Settings Response/Extended Error Code",
+ }
+
+wds_get_settings_req_tlvs = { # 45
+ 16: "WDS/Get Current Settings Request/Requested Settings",
+ }
+
+wds_get_settings_rsp_tlvs = { # 45
+ 2: "WDS/Get Current Settings Response/Result Code",
+ 16: "WDS/Get Current Settings Response/Profile Name",
+ 17: "WDS/Get Current Settings Response/PDP Type",
+ 20: "WDS/Get Current Settings Response/APN Name",
+ 21: "WDS/Get Current Settings Response/Primary DNS",
+ 22: "WDS/Get Current Settings Response/Secondary DNS",
+ 23: "WDS/Get Current Settings Response/UMTS Granted QoS",
+ 25: "WDS/Get Current Settings Response/GPRS Granted QoS",
+ 27: "WDS/Get Current Settings Response/Username",
+ 29: "WDS/Get Current Settings Response/Authentication",
+ 30: "WDS/Get Current Settings Response/IP Address",
+ 31: "WDS/Get Current Settings Response/Profile ID",
+ 32: "WDS/Get Current Settings Response/Gateway Address",
+ 33: "WDS/Get Current Settings Response/Gateway Subnet Mask",
+ 34: "WDS/Get Current Settings Response/P-CSCF",
+ 35: "WDS/Get Current Settings Response/P-CSCF Server Address List",
+ 36: "WDS/Get Current Settings Response/P-CSCF Domain Name List",
+ 37: "WDS/Get Current Settings Response/IPv6 Address",
+ 38: "WDS/Get Current Settings Response/IPv6 Gateway Address",
+ 39: "WDS/Get Current Settings Response/Primary IPv6 DNS",
+ 40: "WDS/Get Current Settings Response/Secondary IPv6 DNS",
+ 41: "WDS/Get Current Settings Response/MTU",
+ 42: "WDS/Get Current Settings Response/Domain Name List",
+ 43: "WDS/Get Current Settings Response/IP Family",
+ 44: "WDS/Get Current Settings Response/IM CN Flag",
+ 45: "WDS/Get Current Settings Response/Extended Technology",
+ 46: "WDS/Get Current Settings Response/P-CSCF IPv6 Address List",
+ }
+
+wds_set_mip_req_tlvs = { # 46
+ 1: "WDS/Set MIP Mode Request/Mobile IP Mode",
+ }
+
+wds_set_mip_rsp_tlvs = { # 46
+ 2: "WDS/Set MIP Mode Response/Result Code",
+ }
+
+wds_get_mip_rsp_tlvs = { # 47
+ 1: "WDS/Get MIP Mode Response/Mobile IP Mode",
+ 2: "WDS/Get MIP Mode Response/Result Code",
+ }
+
+wds_get_dormancy_rsp_tlvs = { # 48
+ 1: "WDS/Get Dormancy Response/Dormancy Status",
+ 2: "WDS/Get Dormancy Response/Result Code",
+ }
+
+wds_get_autoconnect_rsp_tlvs = { # 52
+ 1: "WDS/Get Autoconnect Setting Response/Autoconnect",
+ 2: "WDS/Get Autoconnect Setting Response/Result Code",
+ 16: "WDS/Get Autoconnect Setting Response/Roam",
+ }
+
+wds_get_duration_rsp_tlvs = { # 53
+ 1: "WDS/Get Data Session Duration Response/Duration",
+ 2: "WDS/Get Data Session Duration Response/Result Code",
+ 16: "WDS/Get Data Session Duration Response/Previous Duration",
+ 17: "WDS/Get Data Session Duration Response/Active Duration",
+ 18: "WDS/Get Data Session Duration Response/Previous Active Duration",
+ }
+
+wds_get_modem_status_rsp_tlvs = { # 54
+ 1: "WDS/Get Modem Status Response/Status",
+ 2: "WDS/Get Modem Status Response/Result Code",
+ 16: "WDS/Get Modem Status Response/Call End Reason",
+ }
+
+wds_get_modem_status_ind_tlvs = { # 54
+ 1: "WDS/Modem Status Report/Status",
+ 16: "WDS/Modem Status Report/Call End Reason",
+ }
+
+wds_get_data_bearer_rsp_tlvs = { # 55
+ 1: "WDS/Get Data Bearer Technology Response/Technology",
+ 2: "WDS/Get Data Bearer Technology Response/Result Code",
+ 16: "WDS/Get Data Bearer Technology Response/Last Call Technology",
+ }
+
+wds_get_modem_info_req_tlvs = { # 56
+ 1: "WDS/Get Modem Info Request/Requested Status",
+ 16: "WDS/Get Modem Info Request/Connection Status Indicator",
+ 17: "WDS/Get Modem Info Request/Transfer Statistics Indicator",
+ 18: "WDS/Get Modem Info Request/Dormancy Status Indicator",
+ 19: "WDS/Get Modem Info Request/Data Bearer Technology Indicator",
+ 20: "WDS/Get Modem Info Request/Channel Rate Indicator",
+ }
+
+wds_get_modem_info_rsp_tlvs = { # 56
+ 2: "WDS/Get Modem Info Response/Result Code",
+ 16: "WDS/Get Modem Info Response/Status",
+ 17: "WDS/Get Modem Info Response/Call End Reason",
+ 18: "WDS/Get Modem Info Response/TX Bytes",
+ 19: "WDS/Get Modem Info Response/RX Bytes",
+ 20: "WDS/Get Modem Info Response/Dormancy Status",
+ 21: "WDS/Get Modem Info Response/Technology",
+ 22: "WDS/Get Modem Info Response/Rates",
+ 23: "WDS/Get Modem Info Response/Previous TX Bytes",
+ 24: "WDS/Get Modem Info Response/Previous RX Bytes",
+ 25: "WDS/Get Modem Info Duration Response/Active Duration",
+ }
+
+wds_get_modem_info_ind_tlvs = { # 56
+ 16: "WDS/Modem Info Report/Status",
+ 17: "WDS/Modem Info Report/Call End Reason",
+ 18: "WDS/Modem Info Report/TX Bytes",
+ 19: "WDS/Modem Info Report/RX Bytes",
+ 20: "WDS/Modem Info Report/Dormancy Status",
+ 21: "WDS/Modem Info Report/Technology",
+ 22: "WDS/Modem Info Report/Rates",
+ }
+
+wds_get_active_mip_rsp_tlvs = { # 60
+ 1: "WDS/Get Active MIP Profile Response/Index",
+ 2: "WDS/Get Active MIP Profile Response/Result Code",
+ }
+
+wds_set_active_mip_req_tlvs = { # 61
+ 1: "WDS/Set Active MIP Profile Request/Index",
+ }
+
+wds_set_active_mip_rsp_tlvs = { # 61
+ 2: "WDS/Set Active MIP Profile Response/Result Code",
+ }
+
+wds_get_mip_profile_req_tlvs = { # 62
+ 1: "WDS/Get MIP Profile Request/Index",
+ }
+
+wds_get_mip_profile_rsp_tlvs = { # 62
+ 2: "WDS/Get MIP Profile Response/Result Code",
+ 16: "WDS/Get MIP Profile Response/State",
+ 17: "WDS/Get MIP Profile Response/Home Address",
+ 18: "WDS/Get MIP Profile Response/Primary Home Agent Address",
+ 19: "WDS/Get MIP Profile Response/Secondary Home Agent Address",
+ 20: "WDS/Get MIP Profile Response/Reverse Tunneling",
+ 21: "WDS/Get MIP Profile Response/NAI",
+ 22: "WDS/Get MIP Profile Response/HA SPI",
+ 23: "WDS/Get MIP Profile Response/AAA SPI",
+ 26: "WDS/Get MIP Profile Response/HA State",
+ 27: "WDS/Get MIP Profile Response/AAA State",
+ }
+
+wds_set_mip_profile_req_tlvs = { # 63
+ 1: "WDS/Set MIP Profile Request/Index",
+ 16: "WDS/Set MIP Profile Request/State",
+ 17: "WDS/Set MIP Profile Request/Home Address",
+ 18: "WDS/Set MIP Profile Request/Primary Home Agent Address",
+ 19: "WDS/Set MIP Profile Request/Secondary Home Agent Address",
+ 20: "WDS/Set MIP Profile Request/Reverse Tunneling",
+ 21: "WDS/Set MIP Profile Request/NAI",
+ 22: "WDS/Set MIP Profile Request/HA SPI",
+ 23: "WDS/Set MIP Profile Requeste/AAA SPI",
+ 24: "WDS/Set MIP Profile Request/MN-HA",
+ 25: "WDS/Set MIP Profile Request/MN-AAA",
+ }
+
+wds_set_mip_profile_rsp_tlvs = { # 63
+ 2: "WDS/Set MIP Profile Response/Result Code",
+ }
+
+wds_get_mip_params_rsp_tlvs = { # 64
+ 2: "WDS/Get MIP Parameters Response/Result Code",
+ 16: "WDS/Get MIP Parameters Response/Mobile IP Mode",
+ 17: "WDS/Get MIP Parameters Response/Retry Attempt Limit",
+ 18: "WDS/Get MIP Parameters Response/Retry Attempt Interval",
+ 19: "WDS/Get MIP Parameters Response/Re-Registration Period",
+ 20: "WDS/Get MIP Parameters Response/Re-Registration Only With Traffic",
+ 21: "WDS/Get MIP Parameters Response/MN-HA Authenticator Calculator",
+ 22: "WDS/Get MIP Parameters Response/MN-HA RFC 2002 BIS Authentication",
+ }
+
+wds_set_mip_params_req_tlvs = { # 65
+ 1: "WDS/Set MIP Parameters Request/SPC",
+ 16: "WDS/Set MIP Parameters Request/Mobile IP Mode",
+ 17: "WDS/Set MIP Parameters Request/Retry Attempt Limit",
+ 18: "WDS/Set MIP Parameters Request/Retry Attempt Interval",
+ 19: "WDS/Set MIP Parameters Request/Re-Registration Period",
+ 20: "WDS/Set MIP Parameters Request/Re-Registration Only With Traffic",
+ 21: "WDS/Set MIP Parameters Request/MN-HA Authenticator Calculator",
+ 22: "WDS/Set MIP Parameters Request/MN-HA RFC 2002 BIS Authentication",
+ }
+
+wds_set_mip_params_rsp_tlvs = { # 65
+ 2: "WDS/Set MIP Parameters Response/Result Code",
+ }
+
+wds_get_last_mip_status_rsp_tlvs = { # 66
+ 1: "WDS/Get Last MIP Status Response/Status",
+ 2: "WDS/Get Last MIP Status Response/Result Code",
+ }
+
+wds_get_aaa_auth_status_rsp_tlvs = { # 67
+ 1: "WDS/Get AN-AAA Authentication Status Response/Status",
+ 2: "WDS/Get AN-AAA Authentication Status Response/Result Code",
+ }
+
+wds_get_cur_data_bearer_rsp_tlvs = { # 68
+ 1: "WDS/Get Current Data Bearer Technology Response/Technology",
+ 2: "WDS/Get Current Data Bearer Technology Response/Result Code",
+ }
+
+wds_get_call_list_req_tlvs = { # 69
+ 16: "WDS/Get Call List Request/List Type",
+ }
+
+wds_get_call_list_rsp_tlvs = { # 69
+ 2: "WDS/Get Call List Response/Result Code",
+ 16: "WDS/Get Call List Response/Full List",
+ 17: "WDS/Get Call List Response/ID List",
+ }
+
+wds_get_call_entry_req_tlvs = { # 70
+ 1: "WDS/Get Call Record Request/Record ID",
+ }
+
+wds_get_call_entry_rsp_tlvs = { # 70
+ 1: "WDS/Get Call Record Response/Record",
+ 2: "WDS/Get Call Record Response/Result Code",
+ }
+
+wds_clear_call_list_rsp_tlvs = { # 71
+ 2: "WDS/Clear Call List Response/Result Code",
+ }
+
+wds_get_call_list_max_rsp_tlvs = { # 72
+ 1: "WDS/Get Call List Max Size Response/Maximum",
+ 2: "WDS/Get Call List Max Size Response/Result Code",
+ }
+
+wds_set_autoconnect_req_tlvs = { # 81
+ 1: "WDS/Set Autoconnect Setting Request/Autoconnect",
+ 16: "WDS/Set Autoconnect Setting Request/Roam",
+ }
+
+wds_set_autoconnect_rsp_tlvs = { # 81
+ 2: "WDS/Set Autoconnect Setting Response/Result Code",
+ }
+
+wds_get_dns_rsp_tlvs = { # 82
+ 2: "WDS/Get DNS Setting Response/Result Code",
+ 16: "WDS/Get DNS Setting Response/Primary",
+ 17: "WDS/Get DNS Setting Response/Secondary",
+ 18: "WDS/Get DNS Setting Response/Primary IPv6",
+ 19: "WDS/Get DNS Setting Response/Secondary IPv6",
+ }
+
+wds_set_dns_req_tlvs = { # 83
+ 16: "WDS/Set DNS Setting Request/Primary",
+ 17: "WDS/Set DNS Setting Request/Secondary",
+ 18: "WDS/Set DNS Setting Request/Primary IPv6 Address",
+ 19: "WDS/Set DNS Setting Request/Secondary IPv6 Address",
+ }
+
+wds_set_dns_rsp_tlvs = { # 83
+ 2: "WDS/Set DNS Setting Response/Result Code",
+ }
+
+wds_cmds = {
+ 0: ("RESET", None, wds_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", wds_set_event_req_tlvs, wds_set_event_rsp_tlvs, wds_set_event_ind_tlvs),
+ 2: ("ABORT", wds_abort_req_tlvs, wds_abort_rsp_tlvs, None),
+ 32: ("START_NET", wds_start_net_req_tlvs, wds_start_net_rsp_tlvs, None),
+ 33: ("STOP_NET", wds_stop_net_req_tlvs, wds_stop_net_rsp_tlvs, None),
+ 34: ("GET_PKT_STATUS", None, wds_get_pkt_status_rsp_tlvs, wds_get_pkt_status_ind_tlvs),
+ 35: ("GET_RATES", None, wds_get_rates_rsp_tlvs, None),
+ 36: ("GET_STATISTICS", wds_get_statistics_req_tlvs, wds_get_statistics_rsp_tlvs, None),
+ 37: ("G0_DORMANT", None, wds_g0_dormant_rsp_tlvs, None),
+ 38: ("G0_ACTIVE", None, wds_g0_active_rsp_tlvs, None),
+ 39: ("CREATE_PROFILE", wds_create_profile_req_tlvs, wds_create_profile_rsp_tlvs, None),
+ 40: ("MODIFY_PROFILE", wds_modify_profile_req_tlvs, wds_modify_profile_rsp_tlvs, None),
+ 41: ("DELETE_PROFILE", wds_delete_profile_req_tlvs, wds_delete_profile_rsp_tlvs, None),
+ 42: ("GET_PROFILE_LIST", None, wds_get_profile_list_rsp_tlvs, None),
+ 43: ("GET_PROFILE", wds_get_profile_req_tlvs, wds_get_profile_rsp_tlvs, None),
+ 44: ("GET_DEFAULTS", wds_get_defaults_req_tlvs, wds_get_defaults_rsp_tlvs, None),
+ 45: ("GET_SETTINGS", wds_get_settings_req_tlvs, wds_get_settings_rsp_tlvs, None),
+ 46: ("SET_MIP", wds_set_mip_req_tlvs, wds_set_mip_rsp_tlvs, None),
+ 47: ("GET_MIP", None, wds_get_mip_rsp_tlvs, None),
+ 48: ("GET_DORMANCY", None, wds_get_dormancy_rsp_tlvs, None),
+ 52: ("GET_AUTOCONNECT", None, wds_get_autoconnect_rsp_tlvs, None),
+ 53: ("GET_DURATION", None, wds_get_duration_rsp_tlvs, None),
+ 54: ("GET_MODEM_STATUS", None, wds_get_modem_status_rsp_tlvs, wds_get_modem_status_ind_tlvs),
+ 55: ("GET_DATA_BEARER", None, wds_get_data_bearer_rsp_tlvs, None),
+ 56: ("GET_MODEM_INFO", wds_get_modem_info_req_tlvs, wds_get_modem_info_rsp_tlvs, wds_get_modem_info_ind_tlvs),
+ 60: ("GET_ACTIVE_MIP", None, wds_get_active_mip_rsp_tlvs, None),
+ 61: ("SET_ACTIVE_MIP", wds_set_active_mip_req_tlvs, wds_set_active_mip_rsp_tlvs, None),
+ 62: ("GET_MIP_PROFILE", wds_get_mip_profile_req_tlvs, wds_get_mip_profile_rsp_tlvs, None),
+ 63: ("SET_MIP_PROFILE", wds_set_mip_profile_req_tlvs, wds_set_mip_profile_rsp_tlvs, None),
+ 64: ("GET_MIP_PARAMS", None, wds_get_mip_params_rsp_tlvs, None),
+ 65: ("SET_MIP_PARAMS", wds_set_mip_params_req_tlvs, wds_set_mip_params_rsp_tlvs, None),
+ 66: ("GET_LAST_MIP_STATUS", None, wds_get_last_mip_status_rsp_tlvs, None),
+ 67: ("GET_AAA_AUTH_STATUS", None, wds_get_aaa_auth_status_rsp_tlvs, None),
+ 68: ("GET_CUR_DATA_BEARER", None, wds_get_cur_data_bearer_rsp_tlvs, None),
+ 69: ("GET_CALL_LIST", wds_get_call_list_req_tlvs, wds_get_call_list_rsp_tlvs, None),
+ 70: ("GET_CALL_ENTRY", wds_get_call_entry_req_tlvs, wds_get_call_entry_rsp_tlvs, None),
+ 71: ("CLEAR_CALL_LIST", None, wds_clear_call_list_rsp_tlvs, None),
+ 72: ("GET_CALL_LIST_MAX", None, wds_get_call_list_max_rsp_tlvs, None),
+ 77: ("SET_IP_FAMILY", None, None, None),
+ 81: ("SET_AUTOCONNECT", wds_set_autoconnect_req_tlvs, wds_set_autoconnect_rsp_tlvs, None),
+ 82: ("GET_DNS", None, wds_get_dns_rsp_tlvs, None),
+ 83: ("SET_DNS", wds_set_dns_req_tlvs, wds_set_dns_rsp_tlvs, None),
+ }
+wms_reset_rsp_tlvs = { # 0
+ 2: "WMS/Reset Response/Result Code",
+ }
+
+wms_set_event_req_tlvs = { # 1
+ 16: "WMS/Set Event Report Request/New MT Message Indicator",
+ }
+
+wms_set_event_rsp_tlvs = { # 1
+ 2: "WMS/Set Event Report Response/Result Code",
+ }
+
+wms_set_event_ind_tlvs = { # 1
+ 16: "WMS/Event Report/Received MT Message",
+ 17: "WMS/Event Report/Transfer Route MT Message",
+ 18: "WMS/Event Report/Message Mode",
+ }
+
+wms_raw_send_req_tlvs = { # 32
+ 1: "WMS/Raw Send Request/Message Data",
+ 16: "WMS/Raw Send Request/Force On DC",
+ 17: "WMS/Raw Send Request/Follow On DC",
+ 18: "WMS/Raw Send Request/Link Control",
+ }
+
+wms_raw_send_rsp_tlvs = { # 32
+ 2: "WMS/Raw Send Response/Result Code",
+ 16: "WMS/Raw Send Response/Cause Code",
+ 17: "WMS/Raw Send Response/Error Class",
+ 18: "WMS/Raw Send Response/Cause Info",
+ }
+
+wms_raw_write_req_tlvs = { # 33
+ 1: "WMS/Raw Write Request/Message Data",
+ }
+
+wms_raw_write_rsp_tlvs = { # 33
+ 1: "WMS/Raw Write Response/Message Index",
+ 2: "WMS/Raw Write Response/Result Code",
+ }
+
+wms_raw_read_req_tlvs = { # 34
+ 1: "WMS/Raw Read Request/Message Index",
+ 16: "WMS/Raw Read Request/Message Mode",
+ }
+
+wms_raw_read_rsp_tlvs = { # 34
+ 1: "WMS/Raw Read Response/Message Data",
+ 2: "WMS/Raw Read Response/Result Code",
+ }
+
+wms_modify_tag_req_tlvs = { # 35
+ 1: "WMS/Modify Tag Request/Message Tag",
+ 16: "WMS/Modify Tag Request/Message Mode",
+ }
+
+wms_modify_tag_rsp_tlvs = { # 35
+ 2: "WMS/Modify Tag Response/Result Code",
+ }
+
+wms_delete_req_tlvs = { # 36
+ 1: "WMS/Delete Request/Memory Storage",
+ 16: "WMS/Delete Request/Message Index",
+ 17: "WMS/Delete Request/Message Tag",
+ 18: "WMS/Delete Request/Message Mode",
+ }
+
+wms_delete_rsp_tlvs = { # 36
+ 2: "WMS/Delete Response/Result Code",
+ }
+
+wms_get_msg_protocol_rsp_tlvs = { # 48
+ 1: "WMS/Get Message Protocol Response/Message Protocol",
+ 2: "WMS/Get Message Protocol Response/Result Code",
+ }
+
+wms_get_msg_list_req_tlvs = { # 49
+ 1: "WMS/List Messages Request/Memory Storage",
+ 16: "WMS/List Messages Request/Message Tag",
+ 17: "WMS/List Messages Request/Message Mode",
+ }
+
+wms_get_msg_list_rsp_tlvs = { # 49
+ 1: "WMS/List Messages Response/Message List",
+ 2: "WMS/List Messages Response/Result Code",
+ }
+
+wms_set_routes_req_tlvs = { # 50
+ 1: "WMS/Set Routes Request/Route List",
+ 16: "WMS/Set Routes Request/Transfer Status Report",
+ }
+
+wms_set_routes_rsp_tlvs = { # 50
+ 2: "WMS/Set Routes Response/Result Code",
+ }
+
+wms_get_routes_rsp_tlvs = { # 51
+ 1: "WMS/Get Routes Response/Route List",
+ 2: "WMS/Get Routes Response/Result Code",
+ 16: "WMS/Get Routes Response/Transfer Status Report",
+ }
+
+wms_get_smsc_addr_rsp_tlvs = { # 52
+ 1: "WMS/Get SMSC Address Response/Address",
+ 2: "WMS/Get SMSC Address Response/Result Code",
+ }
+
+wms_set_smsc_addr_req_tlvs = { # 53
+ 1: "WMS/Set SMSC Address Request/Address",
+ 16: "WMS/Set SMSC Address Request/Address Type",
+ }
+
+wms_get_msg_list_max_req_tlvs = { # 54
+ 1: "WMS/Get Storage Max Size Request/Memory Storage",
+ 16: "WMS/Get Storage Max Size Request/Message Mode",
+ }
+
+wms_get_msg_list_max_rsp_tlvs = { # 54
+ 1: "WMS/Get Storage Max Size Response/Max Size",
+ 2: "WMS/Get Storage Max Size Response/Result Code",
+ 16: "WMS/Get Storage Max Size Response/Available Size",
+ }
+
+wms_send_ack_req_tlvs = { # 55
+ 1: "WMS/Send ACK Request/ACK",
+ 16: "WMS/Send ACK Request/3GPP2 Failure Info",
+ 17: "WMS/Send ACK Request/3GPP Failure Info",
+ }
+
+wms_send_ack_rsp_tlvs = { # 55
+ 2: "WMS/Send ACK Response/Result Code",
+ }
+
+wms_set_retry_period_req_tlvs = { # 56
+ 1: "WMS/Set Retry Period Request/Period",
+ }
+
+wms_set_retry_period_rsp_tlvs = { # 56
+ 2: "WMS/Set Retry Period Response/Result Code",
+ }
+
+wms_set_retry_interval_req_tlvs = { # 57
+ 1: "WMS/Set Retry Interval Request/Interval",
+ }
+
+wms_set_retry_interval_rsp_tlvs = { # 57
+ 2: "WMS/Set Retry Interval Response/Result Code",
+ }
+
+wms_set_dc_disco_timer_req_tlvs = { # 58
+ 1: "WMS/Set DC Disconnect Timer Request/Timer",
+ }
+
+wms_set_dc_disco_timer_rsp_tlvs = { # 58
+ 2: "WMS/Set DC Disconnect Timer Response/Result Code",
+ }
+
+wms_set_memory_status_req_tlvs = { # 59
+ 1: "WMS/Set Memory Status Request/Status",
+ }
+
+wms_set_memory_status_rsp_tlvs = { # 59
+ 2: "WMS/Set Memory Status Response/Result Code",
+ }
+
+wms_set_bc_activation_req_tlvs = { # 60
+ 1: "WMS/Set Broadcast Activation Request/BC Info",
+ }
+
+wms_set_bc_activation_rsp_tlvs = { # 60
+ 2: "WMS/Set Broadcast Activation Response/Result Code",
+ }
+
+wms_set_bc_config_req_tlvs = { # 61
+ 1: "WMS/Set Broadcast Config Request/Mode",
+ 16: "WMS/Set Broadcast Config Request/3GPP Info",
+ 17: "WMS/Set Broadcast Config Request/3GPP2 Info",
+ }
+
+wms_set_bc_config_rsp_tlvs = { # 61
+ 2: "WMS/Set Broadcast Config Response/Result Code",
+ }
+
+wms_get_bc_config_req_tlvs = { # 62
+ 1: "WMS/Get Broadcast Config Request/Mode",
+ }
+
+wms_get_bc_config_rsp_tlvs = { # 62
+ 2: "WMS/Get Broadcast Config Response/Result Code",
+ 16: "WMS/Get Broadcast Config Response/3GPP Info",
+ 17: "WMS/Get Broadcast Config Response/3GPP2 Info",
+ }
+
+wms_memory_full_ind_ind_tlvs = { # 63
+ 1: "WMS/Memory Full Indication/Info",
+ }
+
+wms_get_domain_pref_rsp_tlvs = { # 64
+ 1: "WMS/Get Domain Preference Response/Pref",
+ 2: "WMS/Get Domain Preference Response/Result Code",
+ }
+
+wms_set_domain_pref_req_tlvs = { # 65
+ 1: "WMS/Set Domain Preference Request/Pref",
+ }
+
+wms_set_domain_pref_rsp_tlvs = { # 65
+ 2: "WMS/Set Domain Preference Response/Result Code",
+ }
+
+wms_memory_send_req_tlvs = { # 66
+ 1: "WMS/Send From Memory Store Request/Info",
+ }
+
+wms_memory_send_rsp_tlvs = { # 66
+ 2: "WMS/Send From Memory Store Response/Result Code",
+ 16: "WMS/Send From Memory Store Response/Message ID",
+ 17: "WMS/Send From Memory Store Response/Cause Code",
+ 18: "WMS/Send From Memory Store Response/Error Class",
+ 19: "WMS/Send From Memory Store Response/Cause Info",
+ }
+
+wms_smsc_addr_ind_ind_tlvs = { # 70
+ 1: "WMS/SMSC Address Indication/Address",
+ }
+
+wms_cmds = {
+ 0: ("RESET", None, wms_reset_rsp_tlvs, None),
+ 1: ("SET_EVENT", wms_set_event_req_tlvs, wms_set_event_rsp_tlvs, wms_set_event_ind_tlvs),
+ 32: ("RAW_SEND", wms_raw_send_req_tlvs, wms_raw_send_rsp_tlvs, None),
+ 33: ("RAW_WRITE", wms_raw_write_req_tlvs, wms_raw_write_rsp_tlvs, None),
+ 34: ("RAW_READ", wms_raw_read_req_tlvs, wms_raw_read_rsp_tlvs, None),
+ 35: ("MODIFY_TAG", wms_modify_tag_req_tlvs, wms_modify_tag_rsp_tlvs, None),
+ 36: ("DELETE", wms_delete_req_tlvs, wms_delete_rsp_tlvs, None),
+ 48: ("GET_MSG_PROTOCOL", None, wms_get_msg_protocol_rsp_tlvs, None),
+ 49: ("GET_MSG_LIST", wms_get_msg_list_req_tlvs, wms_get_msg_list_rsp_tlvs, None),
+ 50: ("SET_ROUTES", wms_set_routes_req_tlvs, wms_set_routes_rsp_tlvs, None),
+ 51: ("GET_ROUTES", None, wms_get_routes_rsp_tlvs, None),
+ 52: ("GET_SMSC_ADDR", None, wms_get_smsc_addr_rsp_tlvs, None),
+ 53: ("SET_SMSC_ADDR", wms_set_smsc_addr_req_tlvs, None, None),
+ 54: ("GET_MSG_LIST_MAX", wms_get_msg_list_max_req_tlvs, wms_get_msg_list_max_rsp_tlvs, None),
+ 55: ("SEND_ACK", wms_send_ack_req_tlvs, wms_send_ack_rsp_tlvs, None),
+ 56: ("SET_RETRY_PERIOD", wms_set_retry_period_req_tlvs, wms_set_retry_period_rsp_tlvs, None),
+ 57: ("SET_RETRY_INTERVAL", wms_set_retry_interval_req_tlvs, wms_set_retry_interval_rsp_tlvs, None),
+ 58: ("SET_DC_DISCO_TIMER", wms_set_dc_disco_timer_req_tlvs, wms_set_dc_disco_timer_rsp_tlvs, None),
+ 59: ("SET_MEMORY_STATUS", wms_set_memory_status_req_tlvs, wms_set_memory_status_rsp_tlvs, None),
+ 60: ("SET_BC_ACTIVATION", wms_set_bc_activation_req_tlvs, wms_set_bc_activation_rsp_tlvs, None),
+ 61: ("SET_BC_CONFIG", wms_set_bc_config_req_tlvs, wms_set_bc_config_rsp_tlvs, None),
+ 62: ("GET_BC_CONFIG", wms_get_bc_config_req_tlvs, wms_get_bc_config_rsp_tlvs, None),
+ 63: ("MEMORY_FULL_IND", None, None, wms_memory_full_ind_ind_tlvs),
+ 64: ("GET_DOMAIN_PREF", None, wms_get_domain_pref_rsp_tlvs, None),
+ 65: ("SET_DOMAIN_PREF", wms_set_domain_pref_req_tlvs, wms_set_domain_pref_rsp_tlvs, None),
+ 66: ("MEMORY_SEND", wms_memory_send_req_tlvs, wms_memory_send_rsp_tlvs, None),
+ 67: ("GET_MSG_WAITING", None, None, None),
+ 68: ("MSG_WAITING_IND", None, None, None),
+ 69: ("SET_PRIMARY_CLIENT", None, None, None),
+ 70: ("SMSC_ADDR_IND", None, None, wms_smsc_addr_ind_ind_tlvs),
+ }
+
+services = {
+ 0: ("ctl", ctl_cmds),
+ 1: ("wds", wds_cmds),
+ 2: ("dms", dms_cmds),
+ 3: ("nas", nas_cmds),
+ 4: ("qos", None),
+ 5: ("wms", wms_cmds),
+ 6: ("pds", pds_cmds),
+ 7: ("auth", auth_cmds),
+ 9: ("voice", voice_cmds),
+ 224: ("cat", cat_cmds),
+ 225: ("rms", rms_cmds),
+ 226: ("oma", oma_cmds),
+ }
diff --git a/decode/qmux.py b/decode/qmux.py
new file mode 100644
index 00000000..36a2f302
--- /dev/null
+++ b/decode/qmux.py
@@ -0,0 +1,187 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+
+import binascii
+import defs
+import struct
+
+from qmiprotocol import services
+
+TP_REQUEST = 0x00
+TP_RESPONSE = 0x02
+TP_INDICATION = 0x04
+
+def unpack(data, direction):
+ return binascii.unhexlify(data)
+
+def service_to_string(s):
+ try:
+ return services[s][0]
+ except KeyError:
+ return ""
+
+def qmi_cmd_to_string(cmdno, service):
+ (name, cmds) = services[service]
+ return cmds[cmdno][0]
+
+class Tlv:
+ def __init__(self, tlvid, size, data, service, cmdno, direction):
+ self.id = tlvid
+ self.size = size
+ self.data = data
+ if size != len(data):
+ raise ValueError("Mismatched TLV size! (got %d expected %d)" % (len(data), size))
+ self.service = service
+ self.cmdno = cmdno
+ self.direction = direction
+
+ def show_data(self, prefix):
+ line = ""
+ for i in self.data:
+ line += " %02x" % ord(i)
+ print prefix + " Data: %s" % line
+
+ def show(self, prefix):
+ svc = services[self.service]
+ cmd = svc[1][self.cmdno]
+ tlvlist = None
+ if self.direction == TP_REQUEST:
+ tlvlist = cmd[1]
+ elif self.direction == TP_RESPONSE:
+ tlvlist = cmd[2]
+ elif self.direction == TP_INDICATION:
+ tlvlist = cmd[3]
+ else:
+ raise ValueError("Unknown TLV dir0ection %s" % self.direction)
+
+ tlvname = "!!! UNKNOWN !!!"
+ if self.service == 1 and self.cmdno == 77: # WDS/SET_IP_FAMILY
+ tlvname = "WDS/Set IP Family/IP Family !!! NOT DEFINED !!!"
+ else:
+ try:
+ tlvname = tlvlist[self.id]
+ except KeyError:
+ pass
+
+ print prefix + " TLV: 0x%02x (%s)" % (self.id, tlvname)
+ print prefix + " Size: 0x%04x" % self.size
+ if self.id == 2:
+ # Status response
+ (status, error) = struct.unpack("<HH", self.data)
+ if status == 0:
+ sstatus = "SUCCESS"
+ else:
+ sstatus = "ERROR"
+ print prefix + " Status: %d (%s)" % (status, sstatus)
+
+ print prefix + " Error: %d" % error
+ else:
+ self.show_data(prefix)
+ print ""
+
+def get_tlvs(data, service, cmdno, direction):
+ tlvs = []
+ while len(data) >= 3:
+ (tlvid, size) = struct.unpack("<BH", data[:3])
+ if size > len(data) - 3:
+ raise ValueError("Malformed TLV ID %d size %d (len left %d)" % (tlvid, size, len(data)))
+ tlvs.append(Tlv(tlvid, size, data[3:3 + size], service, cmdno, direction))
+ data = data[size + 3:]
+ if len(data) != 0:
+ raise ValueError("leftover data parsing tlvs")
+ return tlvs
+
+def show(data, prefix, direction):
+ if len(data) < 7:
+ return
+
+ qmuxfmt = "<BHBBB"
+ sz = struct.calcsize(qmuxfmt)
+ (ifc, l, sender, service, cid) = struct.unpack(qmuxfmt, data[:sz])
+
+ if ifc != 0x01:
+ raise ValueError("Packet not QMUX")
+
+ print prefix + "QMUX Header:"
+ print prefix + " len: 0x%04x" % l
+
+ ssender = ""
+ if sender == 0x00:
+ ssender = "(client)"
+ elif sender == 0x80:
+ ssender = "(service)"
+ print prefix + " sender: 0x%02x %s" % (sender, ssender)
+
+ sservice = service_to_string(service)
+ print prefix + " svc: 0x%02x (%s)" % (service, sservice)
+
+ scid = ""
+ if cid == 0xff:
+ scid = "(broadcast)"
+ print prefix + " cid: 0x%02x %s" % (cid, scid)
+
+ print ""
+
+ # QMI header
+ data = data[sz:]
+ if service == 0:
+ qmifmt = "<BBHH"
+ else:
+ qmifmt = "<BHHH"
+
+ sz = struct.calcsize(qmifmt)
+ (flags, txnid, cmdno, size) = struct.unpack(qmifmt, data[:sz])
+
+ print prefix + "QMI Header:"
+
+ sflags = ""
+ if service == 0:
+ # Besides the CTL service header being shorter, the flags are different
+ if flags == 0x00:
+ flags = TP_REQUEST
+ elif flags == 0x01:
+ flags = TP_RESPONSE
+ elif flags == 0x02:
+ flags = TP_INDICATION
+
+ if flags == TP_REQUEST:
+ sflags = "(request)"
+ elif flags == TP_RESPONSE:
+ sflags = "(response)"
+ elif flags == TP_INDICATION:
+ sflags = "(indication)"
+ else:
+ raise ValueError("Unknown flags %d" % flags)
+ print prefix + " Flags: 0x%02x %s" % (flags, sflags)
+
+ print prefix + " TXN: 0x%04x" % txnid
+
+ scmd = qmi_cmd_to_string(cmdno, service)
+ print prefix + " Cmd: 0x%04x (%s)" % (cmdno, scmd)
+
+ print prefix + " Size: 0x%04x" % size
+ print ""
+
+ data = data[sz:]
+ tlvs = get_tlvs(data, service, cmdno, flags)
+ for tlv in tlvs:
+ tlv.show(prefix)
+
+ print ""
+
+def get_funcs():
+ return (unpack, show)
+
diff --git a/decode/wmc.py b/decode/wmc.py
new file mode 100644
index 00000000..cf7d9a91
--- /dev/null
+++ b/decode/wmc.py
@@ -0,0 +1,211 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+
+import binascii
+import struct
+import defs
+
+def unpack(data, direction):
+ # unpack the data
+ if direction == defs.TO_MODEM:
+ if data[:14] == "41542a574d433d":
+ # remove the AT*WMC= bits, and the newline and CRC at the end
+ data = data[14:]
+ if data[len(data) - 2:] == "0d":
+ data = data[:len(data) - 6]
+ elif direction == defs.TO_HOST:
+ if data[len(data) - 2:] == "7e":
+ # remove HDLC terminator and CRC
+ data = data[:len(data) - 6]
+ else:
+ raise ValueError("No data direction")
+
+ data = binascii.unhexlify(data)
+
+ # PPP-unescape it
+ escape = False
+ new_data = ""
+ for i in data:
+ if ord(i) == 0x7D:
+ escape = True
+ elif escape == True:
+ new_data += chr(ord(i) ^ 0x20)
+ escape = False
+ else:
+ new_data += i
+
+ return new_data
+
+def show_data(data, prefix):
+ line = ""
+ for i in data:
+ line += " %02x" % ord(i)
+ print prefix + " Data: %s" % line
+
+def show_device_info(data, prefix, direction):
+ if direction != defs.TO_HOST:
+ return
+
+ fmt = "<"
+ fmt = fmt + "27s" # unknown1
+ fmt = fmt + "64s" # manf
+ fmt = fmt + "64s" # model
+ fmt = fmt + "64s" # fwrev
+ fmt = fmt + "64s" # hwrev
+ fmt = fmt + "64s" # unknown2
+ fmt = fmt + "64s" # unknown3
+ fmt = fmt + "10s" # min
+ fmt = fmt + "12s" # unknown4
+ fmt = fmt + "H" # home_sid
+ fmt = fmt + "6s" # unknown5
+ fmt = fmt + "H" # eri_ver?
+ fmt = fmt + "3s" # unknown6
+ fmt = fmt + "64s" # unknown7
+ fmt = fmt + "20s" # meid
+ fmt = fmt + "22s" # imei
+ fmt = fmt + "16s" # unknown9
+ fmt = fmt + "22s" # iccid
+ fmt = fmt + "4s" # unknown10
+ fmt = fmt + "16s" # MCC
+ fmt = fmt + "16s" # MNC
+ fmt = fmt + "4s" # unknown11
+ fmt = fmt + "4s" # unknown12
+ fmt = fmt + "4s" # unknown13
+ fmt = fmt + "1s"
+
+ expected = struct.calcsize(fmt)
+ if len(data) != expected:
+ raise ValueError("Unexpected Info command response len (got %d expected %d)" % (len(data), expected))
+ (u1, manf, model, fwrev, hwrev, u2, u3, cdmamin, u4, homesid, u5, eriver, \
+ u6, u7, meid, imei, u9, iccid, u10, mcc, mnc, u11, u12, u13, u14) = struct.unpack(fmt, data)
+
+ print prefix + " Manf: %s" % manf
+ print prefix + " Model: %s" % model
+ print prefix + " FW Rev: %s" % fwrev
+ print prefix + " HW Rev: %s" % hwrev
+ print prefix + " MIN: %s" % cdmamin
+ print prefix + " Home SID: %d" % homesid
+ print prefix + " ERI Ver: %d" % eriver
+ print prefix + " MEID: %s" % meid
+ print prefix + " IMEI: %s" % imei
+ print prefix + " Unk9: %s" % u9
+ print prefix + " ICCID: %s" % iccid
+ print prefix + " MCC: %s" % mcc
+ print prefix + " MNC: %s" % mnc
+
+def show_ip_info(data, prefix, direction):
+ if direction != defs.TO_HOST:
+ return
+
+ fmt = "<"
+ fmt = fmt + "I" # rx_bytes
+ fmt = fmt + "I" # tx_bytes
+ fmt = fmt + "8s" # unknown3
+ fmt = fmt + "B" # unknown4
+ fmt = fmt + "7s" # unknown7
+ fmt = fmt + "16s" # ip4_address
+ fmt = fmt + "8s" # netmask?
+ fmt = fmt + "40s" # ip6_address
+
+ expected = struct.calcsize(fmt)
+ if len(data) != expected:
+ raise ValueError("Unexpected IP Info command response len (got %d expected %d)" % (len(data), expected))
+ (rxb, txb, u3, u4, u7, ip4addr, netmask, ip6addr) = struct.unpack(fmt, data)
+
+ print prefix + " RX Bytes: %d" % rxb
+ print prefix + " TX Bytes: %d" % txb
+ print prefix + " IP4 Addr: %s" % ip4addr
+ print prefix + " IP6 Addr: %s" % ip6addr
+
+def get_signal(item):
+ if item == 0x7D:
+ return (item * -1, "(NO SIGNAL)")
+ else:
+ return (item * -1, "")
+
+def show_status(data, prefix, direction):
+ if direction != defs.TO_HOST:
+ return
+
+ fmt = "<"
+ fmt = fmt + "B" # unknown1
+ fmt = fmt + "3s" # unknown2
+ fmt = fmt + "B" # unknown3
+ fmt = fmt + "B" # unknown4
+ fmt = fmt + "10s" # magic
+ fmt = fmt + "H" # counter1
+ fmt = fmt + "H" # counter2
+ fmt = fmt + "B" # unknown5
+ fmt = fmt + "3s" # unknown6
+ fmt = fmt + "B" # cdma1x_dbm
+ fmt = fmt + "3s" # unknown7
+ fmt = fmt + "16s" # cdma_opname
+ fmt = fmt + "18s" # unknown8
+ fmt = fmt + "B" # hdr_dbm
+ fmt = fmt + "3s" # unknown9
+ fmt = fmt + "B" # unknown10
+ fmt = fmt + "3s" # unknown11
+ fmt = fmt + "B" # unknown12
+ fmt = fmt + "8s" # lte_opname
+ fmt = fmt + "60s" # unknown13
+ fmt = fmt + "B" # lte_dbm
+ fmt = fmt + "3s" # unknown14
+ fmt = fmt + "4s" # unknown15
+
+ expected = struct.calcsize(fmt)
+ if len(data) != expected:
+ raise ValueError("Unexpected Status command response len (got %d expected %d)" % (len(data), expected))
+ (u1, u2, u3, u4, magic, counter1, counter2, u5, u6, cdma_dbm, u7, cdma_opname, \
+ u8, hdr_dbm, u9, u10, u11, u12, lte_opname, u13, lte_dbm, u14, u15) = struct.unpack(fmt, data)
+
+ print prefix + " Counter1: %s" % counter1
+ print prefix + " Counter2: %s" % counter2
+ print prefix + " CDMA dBm: %d dBm %s" % get_signal(cdma_dbm)
+ print prefix + " CDMA Op: %s" % cdma_opname
+ print prefix + " HDR dBm: %d dBm %s" % get_signal(hdr_dbm)
+ print prefix + " LTE Op: %s" % lte_opname
+ print prefix + " LTE dBm: %d dBm %s" % get_signal(lte_dbm)
+
+def show_init(data, prefix, direction):
+ show_data(data, prefix)
+
+def show_bearer_info(data, prefix, direction):
+ pass
+
+cmds = { 0x06: ("DEVICE_INFO", show_device_info),
+ 0x0A: ("IP_INFO", show_ip_info),
+ 0x0B: ("STATUS", show_status),
+ 0x0D: ("INIT", show_init),
+ 0x4D: ("EPS_BEARER_INFO", show_bearer_info)
+ }
+
+def show(data, prefix, direction):
+ data = data[1:] # skip 0xC8 header
+ cmdno = ord(data[:1])
+ try:
+ cmdinfo = cmds[cmdno]
+ except KeyError:
+ return
+ data = data[1:] # skip cmdno
+
+ print prefix + "WMC Packet:"
+ print prefix + " Cmd: 0x%02x (%s)" % (cmdno, cmdinfo[0])
+ cmdinfo[1](data, prefix, direction)
+ print ""
+
+def get_funcs():
+ return (unpack, show)
+
diff --git a/decode/xml2ascii.py b/decode/xml2ascii.py
new file mode 100755
index 00000000..b14b0894
--- /dev/null
+++ b/decode/xml2ascii.py
@@ -0,0 +1,82 @@
+#!/usr/bin/python
+# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details:
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+# --- Dumps UsbSnoopy XML export files
+
+from xml.sax import saxutils
+from xml.sax import handler
+
+packets = []
+counts = {}
+
+class FindPackets(handler.ContentHandler):
+ def __init__(self):
+ self.inFunction = False
+ self.inPayload = False
+ self.ignore = False
+ self.inTimestamp = False
+ self.timestamp = None
+ self.packet = None
+
+ def startElement(self, name, attrs):
+ if name == "function":
+ self.inFunction = True
+ elif name == "payloadbytes":
+ self.inPayload = True
+ elif name == "timestamp":
+ self.inTimestamp = True
+
+ def characters(self, ch):
+ if self.ignore:
+ return
+
+ stripped = ch.strip()
+ if self.inFunction and ch != "BULK_OR_INTERRUPT_TRANSFER":
+ self.ignore = True
+ return
+ elif self.inTimestamp:
+ self.timestamp = stripped
+ elif self.inPayload and len(stripped) > 0:
+ if self.packet == None:
+ self.packet = stripped
+ else:
+ self.packet += stripped
+
+ def endElement(self, name):
+ if name == "function":
+ self.inFunction = False
+ elif name == "payloadbytes":
+ self.inPayload = False
+ elif name == "payload":
+ if self.packet:
+ import binascii
+ bytes = binascii.a2b_hex(self.packet)
+ print bytes
+ self.packet = None
+
+ self.ignore = False
+ self.timestamp = None
+ elif name == "timestamp":
+ self.inTimestamp = False
+
+
+from xml.sax import make_parser
+from xml.sax import parse
+import sys
+
+if __name__ == "__main__":
+ dh = FindPackets()
+ parse(sys.argv[1], dh)
+