08janv. 2009
Spécifications LG LDU-1900D / Innomtek LDU19DEMCF11
Par Jérome Oufella
Suite de l'article Libérer le LDU-1900D. Inclut les spécifications du protocole de contrôle du modem.
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