The 3G model contains an Ericsson F3307 Mobile Broadband Module. With the provided kernel sources, this presents itself as /dev/ttyACM{0,1,2} as well as a cdc network device “usb0”. Excerpt from dmesg:
usb 2-1.1: New USB device found, idVendor=0bdb, idProduct=190a usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 2-1.1: Product: F3307 usb 2-1.1: Manufacturer: <DB>^KF3307 usb 2-1.1: SerialNumber: 352641XXXXXXXXXX usb 2-1.1: configuration #1 chosen from 2 choices cdc_acm 2-1.1:1.1: ttyACM0: USB ACM device cdc_acm 2-1.1:1.3: ttyACM1: USB ACM device cdc_wdm 2-1.1:1.5: cdc-wdm0: USB WDM device usb0 (cdc_ether): not using net_device_ops yet usb0: register 'cdc_ether' at usb-tegra-ehci.2-1.1, CDC Ethernet Device, 02:XX:XX:XX:XX:XX cdc_wdm 2-1.1:1.8: cdc-wdm1: USB WDM device cdc_acm 2-1.1:1.9: ttyACM2: USB ACM device
/dev/ttyACM0 and 1 both behave as modems if you connect to them with eg. minicom. The “AT*” query gives a huge list of possible commands, many of which have been documented by someone with a similar device or within Ericsson's own guide
/dev/ttyACM2 appears useless (in some other Ericsson modules, it's for the GPS device.)
The usb0 device is used with Android's Radio Interface Layer. From the “libmbm-ril.so” file on the android filesystem, I think it's using the patches provided by the MBM project (this project also provides kernel patches for 2.6.28 similar to those in the massive archive provided by Toshiba). To use it on linux, you need to send the following AT commands to the modem:
AT+CFUN=1 # enable the radio - the orange LED should turn on AT+CGDCONT=1,“IP”,“$APN” # set up the internet account - $APN depends on your provider. Only necessary after changing SIM. AT*ENAP=1,1 # starts the PDP connection Once the last command has completed (AT*E2NAP=1 will give status reports), you should be able to bring up the network connection with
dhclient usb0
For those who do not like to use networl managers it's possible to write peers and chatscripts so that you can bring up the connection by typing “pppd call <peer name>” on a shell prompt. The chat script will need, along with the other stuff, the 3 AT comands listed above. Here are the reference setup files: root@ac100:~/# cat /etc/ppp/peers/generic # /etc/ppp/peers/generic pppd peer script # use “pppd call generic” to initiate connection
/dev/ttyACM0 noipdefault defaultroute persist noauth nodetach usepeerdns connect “/usr/sbin/chat -vf /etc/ppp/chatscripts/generic.chat”
root@ac100:~/# cat /etc/ppp/chatscripts/generic.chat TIMEOUT 3 ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED “” ATZ OK ATX3Q0V1E1S0=0&C1&D2 OK-AT-OK AT+CFUN=1 OK-AT-OK AT+CGDCONT=1,“IP”, OK ATDT*99# CONNECT “”
root@ac100:~/#
If NetworkManager is already running, it may have already started a dhcp client as soon as the link became active. (This hacker spent a couple of days trying to work out which exact order of commands to use, trying arrangements that sometimes worked and sometimes didn't, before realising NetworkManager was automatically doing it behind the scenes. Check what your distro is doing.)
You can also use this device in much the same way as with a mobile broadband dongle, using pppd. However, this requires that you (re)compile the kernel with CONFIG_PPP selected, and you also can't use wvdial with Ubuntu-armel's libc because wvstreams relies on some unimplemented features (setcontext/getcontext).
To turn the radio off again (eg. for better battery life), send AT+CFUN=4. AT+CFUN=0 will turn the modem off completely, removing the /dev/ttyACM* devices, and you'll need a reboot (or reload the modules if avalible).
Ofono works, at least you can send sms with it if you are able to get it running. Currently the network support is not working but may in future release or with some hacks.
TODO: Provide example peer and chat config files, and a script to set up usb0 from the chat output. Hints: verify that the SIM card is inserted correctly, the sticker on the back might be wrong wvdial is not working until wvstreams is patched to work on ARM pppd caused a kernel bug