doc: add notes about Pantech UML290 and the WMC protocol
WMC is a proprietary protocol observed on various Verizon devices and implemented by the UML290.
This commit is contained in:
163
uml290.txt
Normal file
163
uml290.txt
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
This document describes information about the Pantech UML290 and the WMC
|
||||||
|
protocol observed through USB packet capture and other investigation.
|
||||||
|
|
||||||
|
|
||||||
|
Pantech UML290 Notes
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
This device exposes 4 USB interfaces. They are, in no particular order, a
|
||||||
|
CDC-ACM compatible AT command port, a QCDM/Diag port, an WMC port, and a
|
||||||
|
raw IP network port. The modem's native command interface is the WMC port
|
||||||
|
which the Windows driver uses for all normal communication.
|
||||||
|
|
||||||
|
|
||||||
|
CDC-ACM AT Port
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The modem's +GCAP response reports:
|
||||||
|
|
||||||
|
+GCAP: +CIS707-A, CIS-856, CIS-856-A, +CGSM, +CLTE1
|
||||||
|
|
||||||
|
and with recent firmware updates (L0290VWB333F.230 [Mar 15 2011 15:03:20] or
|
||||||
|
later) the device does, in fact, appear to support common IS-707-A and ETSI
|
||||||
|
27.007 GSM and LTE AT commands. This interface does support PPP data but when
|
||||||
|
PPP is used the device does not support handoffs between LTE and EVDO.
|
||||||
|
|
||||||
|
To support seamless operation of devices between LTE and EVDO Verizon has
|
||||||
|
upgraded their network to support the eHRPD protocol. Older, non-LTE capable
|
||||||
|
devices usually do not include support for eHRPD and use the standard HRPD
|
||||||
|
protocols. LTE-capable devices support both eHRPD and standard HRPD, but at
|
||||||
|
least with the UML290, connections to the 3G EVDO network using direct PPP over
|
||||||
|
the AT modem port do not use eHRPD. Thus to successfully connect to the 3G
|
||||||
|
EVDO network, the modem must be switched into standard HRPD mode by changing
|
||||||
|
the value of the NV_HDRSCP_FORCE_AT_CONFIG_I NVRAM item using the the QCDM/Diag
|
||||||
|
port and the DIAG protocol. Use of HRPD only prevents connections to the LTE
|
||||||
|
network. It is possible that connections initiated using the WMC port and
|
||||||
|
utilizing the "raw IP" network interface do not have this problem.
|
||||||
|
|
||||||
|
|
||||||
|
QCDM/Diag Port
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This port is a normal QCDM/Diag port and responds to DIAG commands.
|
||||||
|
|
||||||
|
|
||||||
|
Raw IP Network Port
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
This USB interface is the normal network interface port the device uses in
|
||||||
|
Windows for network communication. It appears to operate in a "raw IP" mode
|
||||||
|
where raw IP packets are sent and received over USB with no additional framing
|
||||||
|
or encapsulation. The IPv4 and IPv6 addresses for the interface are determined
|
||||||
|
using WMC commands on the WMC port, not through the AT command port. The AT
|
||||||
|
command port only supports PPP-based communication. More information about the
|
||||||
|
"raw IP" mode may be available in the Qualcomm CodeAurora SMD/QMI drivers which
|
||||||
|
implement a "raw IP" network communication mode for various MSM7xxx chipsets
|
||||||
|
used in Android devices.
|
||||||
|
|
||||||
|
|
||||||
|
WMC Port
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This port accepts and responds to WMC protocol requests. Instead of using plain
|
||||||
|
WMC however, requests are prefixed with the string "AT*WMC=" and terminated with
|
||||||
|
a newline (0x0D) character instead of the normal WMC frame termination
|
||||||
|
character (0x7E). The data in between is normal binary WMC data, except that
|
||||||
|
all bytes less than 0x20 are escaped using normal HDLC/PPP escaping while a
|
||||||
|
normal WMC request would only escape the special HDLC/PPP characters of 0x7E and
|
||||||
|
0x7D. Thus a UML290 request looks like this in hexadecimal:
|
||||||
|
|
||||||
|
41542a574d433dc87d2a87b80d
|
||||||
|
|
||||||
|
This "AT"-style framing has not been observed on other devices.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WMC Protocol Framing
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The protocol is a request/response style protocol though unsolicited responses
|
||||||
|
are sometimes sent from the modem to the host. There does not appear to be any
|
||||||
|
sequence numbering in either the request or response packets. WMC packets
|
||||||
|
always begin with the frame start marker (0xC8). The second byte is the command
|
||||||
|
number. The frame ends with a three-byte trailer including a CRC-16 and a
|
||||||
|
standard HDLC/PPP frame terminator (0x7E), though this terminator is missing in
|
||||||
|
some cases as described below. Thus a normal WMC packet looks like this:
|
||||||
|
|
||||||
|
0xC8 <command number> <data> <CRC-16> 0x7E
|
||||||
|
|
||||||
|
The entire frame (exclusive of the 0x7E frame terminator) is escaped using
|
||||||
|
standard HDLC/PPP escaping mechanisms to ensure that the bytes 0x7E and 0x7D
|
||||||
|
never appear in the packet.
|
||||||
|
|
||||||
|
|
||||||
|
Requests
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Requests are usually short, often only 4 or 5 bytes long, including the frame
|
||||||
|
start marker (0xC8), the command number, the CRC, and the frame termination
|
||||||
|
marker. Requests always receive a response from the modem containing the same
|
||||||
|
command number.
|
||||||
|
|
||||||
|
The UML290 uses different "AT"-style framing of requests, prefixing the
|
||||||
|
request with "AT*WMC=" and using a frame termination marker of 0x0D instead
|
||||||
|
of the standard 0x7E. The UML290 also uses a different CRC-16 initial seed of
|
||||||
|
0xAAFE instead of the standard 0xFFFF used on other devices and with HDLC
|
||||||
|
framing in general. For added lolz the UML290 HDLC-escapes all control
|
||||||
|
characters in the request instead of only the standard 0x7D and 0x7E characters
|
||||||
|
escaped in HDLC.
|
||||||
|
|
||||||
|
Thus a normal WMC request (from a PC5740) looks like this:
|
||||||
|
|
||||||
|
c8 0a 77 a4 7e
|
||||||
|
<frame start> <cmd no> <CRC-16> <terminator>
|
||||||
|
|
||||||
|
while the same request from the UML290 looks like this:
|
||||||
|
|
||||||
|
41542a574d433d c8 7d2a 87 b8 0d
|
||||||
|
<AT*WMC=> <frame start> <cmd no> <CRC-16> <terminator>
|
||||||
|
|
||||||
|
Thus after removing all framing and escaping, this WMC request is a single
|
||||||
|
byte (0x0A) which indicates the command number of the request.
|
||||||
|
|
||||||
|
|
||||||
|
WMC Responses and Unsolicited Messages
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Responses begin with the WMC frame start marker (0xC8) and end with the standard
|
||||||
|
HDLC/PPP frame terminator (0x7E) in all observed cases, even on the UML290.
|
||||||
|
The data in between is HDLC/PPP escaped and there is a CRC-16 before the frame
|
||||||
|
terminator. Not all devices use the same CRC-16 calculation however; the
|
||||||
|
UML290 always uses a CRC-16 of 0x3030, while the PC5740 includes a valid CRC-16
|
||||||
|
using a standard polynomial of 0x8408 and an initial seed of 0xFFFF. Responses
|
||||||
|
may span multiple USB packets if they are large enough, but the frame terminator
|
||||||
|
provides a convenient mechanism for detecting when the frame is complete.
|
||||||
|
|
||||||
|
A standard WMC response (from a UML290) looks like this:
|
||||||
|
|
||||||
|
c80d0000000030307e
|
||||||
|
|
||||||
|
which translates to:
|
||||||
|
|
||||||
|
c8 0d 00 00 00 00
|
||||||
|
|
||||||
|
|
||||||
|
WMC Command Numbers
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
These command numbers have been observed and minimally investigated:
|
||||||
|
|
||||||
|
0x06: request device information, including manufacturer, model, firmware
|
||||||
|
revision, hardware revision, MCC/MNC, serial number
|
||||||
|
|
||||||
|
0x0A: request IP configuration when connected (IPv4 and IPv6) on the UML290; may
|
||||||
|
include elapsed connected time or traffic byte counts too. Request has
|
||||||
|
been observed on the PC5740 but is significantly shorter.
|
||||||
|
|
||||||
|
0x0B: get status including operator name, RSSI dBm, and possibly registration
|
||||||
|
status
|
||||||
|
|
||||||
|
0x13: retrieve SMS messages
|
||||||
|
|
||||||
|
0x4D: appears to request EPS bearer configuration; response includes the APN
|
||||||
|
|
Reference in New Issue
Block a user