diff options
-rwxr-xr-x | decode/analyze.py | 179 | ||||
-rwxr-xr-x | decode/decode.py | 71 | ||||
-rw-r--r-- | decode/defs.py | 20 | ||||
-rw-r--r-- | decode/packet.py | 192 | ||||
-rwxr-xr-x | decode/qmiprotgen.py | 494 | ||||
-rw-r--r-- | decode/qmiprotocol.py | 2352 | ||||
-rw-r--r-- | decode/qmux.py | 187 | ||||
-rw-r--r-- | decode/wmc.py | 211 | ||||
-rwxr-xr-x | decode/xml2ascii.py | 82 |
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) + |