Activating the modem circuit

The modem initially introduces itself as an USB storage device, containing the proprietary drivers set. One must send a special activation code on the bus in order to have the device reconnect itself as a true communications device.

Description: SCHG message
Destination VID/PID : 0x1004/0x1000
Endpoint : 0x08
Message : 55534243988d54870000000000000aff554d53434847000000000000000000

After sending that message the devices disconnects then reconnects itself as VID/PID 0x1004/0x6107 (in the case of the LG model).

Handling the device at the operating system level

MacOSX

You will need a custom userland application that generates the SCHG message described above. Probably a codeless kext too, to avoid the usb storage device being captured by OSX. That being done, the device will be handled by MacOSX's usb serial driver.

Linux

One can use the usb_modeswitch utility to send the initial SCHG message described above. The device introduces itself as a CDC ACM communications device but using this driver will not work. The device can be handled using the usbserial.ko kernel module, but beware : the default usbserial driver (at the moment) has a communication speed limit of about 60kBps. This is why we use the option.ko kernel module, which enhances the communication speed of the usbserial driver. Here is how we can initialize the option.ko kernel module and use it with that modem :

#!/bin/sh
# This action must be performed upon connect using a udev rule
modprobe option
echo "0x1004 0x6107" > /sys/bus/usb-serial/drivers/option1/new_id

Here's the udev rule in case you need it :

# /etc/udev/rules.d/45-lgevdorevausbmomdem
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", SYSFS{idProduct}=="1000", RUN+="/usr/sbin/usb_modeswitch -v 0x1004 -p 0x1000 -m 0x08 -M 55534243c83244ff0000000000000aff554d53434847000000000000000000"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", SYSFS{idProduct}=="6107", RUN+="/path/to/the/script/above"

This being done, the driver instantiates serveral /dev/ttyUSB interfaces when the modem is connected. Each tty is hooked to an interface described in the modem. We will only be considering the following interfaces :

  • /dev/ttyUSB1 : Modem communications interface (endpoint 0x82/0x02)
  • /dev/ttyUSB3 : Diagnostics/setup interface (endpoint 0x84/0x04)

A debian/ubuntu package is available at http://tinyurl.com/9tndzk .

Commands available on the diag/setup interface

The modem has a proprietary AT command set available on the diag/setup interface hooked to endpoints 0x84/0x04. The following commands and results have been identified :

Description: Show device info
Command: AT$GMINFO?
Sample response: 
$GMINFO: INNOMTEK,LDU-1900D,ICEBOX30010,LDU19DEMCF11

Description: Show internal phone number
Command: AT$PHONENUM?
Sample response: $PHONENUM:0000000000

Description: Get PRL identifier
Command: AT$GETPRLID=1
Sample response: $GETPRLID:1,3

Description: Not available
Command: AT$RSSILVLURC=1

Description: Get RSSI level?
Command: AT$RSSILVL?
Sample response: $RSSILVL:7

Description: Not available
Command: AT$CURNAM?
Sample response: $CURNAM:1

Description: Not available
Command: AT$MTCNT?
Sample response: $MTCNT:0

Description: Not available
Command: AT$GETROAMIND?
Sample response: $GETROAMIND:0

Description: Get modem lock code
Command: AT$LOCKCODE?
Sample response: $LOCKCODE:0000

Description: Not available
Command: AT$CAD?
Sample response: $CAD:1

Description: Show available networks
Command: AT$AVAILNET?
Sample response: $AVAILNET:4

Description: Show network date
Command: AT$SYSTIME?
Sample response: $SYSTIME:20090107040833WED

Description: Show RF mode (hybrid/1x/evdo)
Command: AT$HYBRIDMODE?
Sample response: $HYBRIDMODE:0
Useful Values: 0(Hybrid), 1(1X)

Description: Enable hybrid RF mode
Command: AT$HYBRIDMODE=0

Description: Enable 1X RF mode
Command: AT$HYBRIDMODE=1

The same interface also publishes information messages. They are useful to display informations in a user applet :

Description: Connected to network #
Sample Message: $CONNET:4

Description: End of packet session
Message: $PKTEND

Description: Available network #
Sample message: $UAVAILNET:4

ATI on the modem comm interface

Issuing an ATI on the interface hooked to endpoint 0x82/0x02 produces the following output :

Manufacturer: INNOMTEK
Model: 119
Revision: LDU19DEMCF11  1  [Oct 13 2008 11:48:40]
ESN: 0x114CXXXX
+GCAP: +CIS707-A, CIS-856, +MS, +ES, +DS, +FCLASS

Connect sequence

In this case one must use the endpoint 0x82/0x02 interface (ttyUSB1 on Linux using the option.ko serial driver). The following AT command script is known to work :

AT
ATE0V1&D2&C1S0=0
ATS0=0
ATS7=60
ATDT#777