Difference between revisions of "Ericsson F3507g Mobile Broadband Module"

From ThinkWiki
Jump to: navigation, search
(available on T400)
(added category)
 
(75 intermediate revisions by 20 users not shown)
Line 1: Line 1:
Even though Ericsson claims that their F3507g MiniPCIe WWAN/GPS card is compartible with Linux, they do not provide any information how to make this card work. Here are some basics:
+
{| width="100%"
 +
|style="vertical-align:top" |
 +
<div style="margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;">
 +
=== Ericsson F3507g Mobile Broadband Module ===
 +
This is a Ericsson WWAN Adapter that is installed in a Mini-PCI Express slot
  
* the card will not work without inserted SIM, even the GPS function. If you want to use just GPS, any SIM would work, even if it is not attached to any active account with any GSM provider.
+
{{NOTE|Specific versions of this card may come pre-configured for a certain carrier (AT&T)}}
* the card provides USB interface, and is recognized by cdc_acm kernel module
+
* it registers three pseudo-TTY's, in my case /dev/ttyACM0, /dev/ttyACM1 and /dev/ttyACM2
+
* the card is controlled by sending AT-commands to one of it's pseudo-TTY's
+
* it applears that all three TTY's are identical. So, for example, we can use /dev/ttyACM0 for broadband 3G, /dev/ttyACM1 for controlling the card via AT-commands, and /dev/ttyACM2 for GPS, or in any other order.
+
  
==Activating the card==
+
=== Features ===
Before the card can be used, you have to activate it. It is done by sending
+
* Chipset: Ericsson F3507g
 +
* USB ID: 0bdb:1900
 +
* USB ID: 0bdb:1902
 +
* WCDMA 2100/1900/850MHz
 +
* GSM/GPRS/EDGE 850/900/1800/1900MHz
 +
* GPS
 +
* Download up to 7.2Mbps
 +
* Upload up to 2.0Mbps
 +
</div>
 +
|style="vertical-align:top" |
 +
[[image:EriccsonWWAN.gif|thumb|Ericsson F3507g WWAN Adapter]]
 +
|}
  
AT+CFUN=1
+
== Lenovo Partnumbers ==
 +
* Option PN 43R9152 (AT&T)
 +
* FRU 43Y6537 (AT&T)
 +
* FRU 43Y6513 (Other)
  
to /dev/ttyACM1. The responce should be
+
Forumthread with [http://www.netbooks.ph/forums/viewtopic.php?f=56&t=1756#p18011 list of FRUs and corresponding firmwares] (scroll down):
 +
{| {{prettytable}}
 +
! Firmware !! Date      !! FRU      !! Remarks
 +
|-
 +
| R1A034  || 2008-05-17 || 43Y6477
 +
|-
 +
| R1B003  || 2008-07-08 || 43Y6479
 +
|-
 +
| R1B/1    || 2008-07-30 || 43Y6513
 +
|-
 +
| R1D06    || 2008-11-07 || 43Y6537 || better performance and stability, fixed many bugs from the previous version
 +
|}
  
OK
+
Unlike other manufactures (Dell, Toshiba etc.) Lenovo does not release the firmware update utility public, so the only way to get a newer version F3507g is by replacing the existing one.
  
You can do it with any terminal terminal program like "minicom", or using "cu" in "expect" script as [http://redmonk.com/sogrady/2008/09/24/apone/ here]. But we are not done yet. If you SIM is protected by a PIN-code, we may have to unlock it. This is done by sending
+
__TOC__
 +
 
 +
== Overview ==
 +
Here are some basics about Ericsson F3507g MiniPCIe WWAN/GPS card (USB ID <tt>0bdb:1900</tt> and <tt>0bdb:1902</tt>):
 +
 
 +
* the card will not work without an inserted SIM, even the GPS function. If you want to use just GPS, any SIM would work, even if it is not attached to any active account with any GSM provider.
 +
* the card provides three CDC ACM interfaces (<tt>CONFIG_USB_ACM=m</tt>), two CDC WDM interfaces (<tt>CONFIG_USB_WDM=m</tt>) and one CDC Ethernet interface (<tt>CONFIG_USB_NET_CDCETHER=m</tt>), and identifies them as
 +
for n in `ls /sys/class/*/*{ACM,wdm,usb0}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
 +
 +
usb0 : Ericsson F3507g Mobile Broadband Minicard Network Adapter
 +
ttyACM0 : Ericsson F3507g Mobile Broadband Minicard Modem
 +
ttyACM1 : Ericsson F3507g Mobile Broadband Minicard Data Modem
 +
ttyACM2 : Ericsson F3507g Mobile Broadband Minicard GPS Port
 +
cdc-wdm0 : Ericsson F3507g Mobile Broadband Minicard Device Management
 +
cdc-wdm1 : Ericsson F3507g Mobile Broadband Minicard PC SC Port
 +
'''Note''':
 +
*apparently, for a while <tt>option</tt> USB-serial driver had claimed USB ID <tt>0bdb:1900</tt>, but this was wrong, and as of kernel 2.6.28.9 that commit was reversed. If instead of <tt>/dev/ttyACM*</tt> you see <tt>/dev/ttyUSB*</tt>, it means that <tt>option</tt> module is loaded. You may need to blacklist it to make sure it doesn't happen.
 +
*Support for the CDC Ethernet interface appears only in kernel 2.6.28.8. But if your kernel is older, you can still connect to the net using one of the "Modem" interfaces. As of kernel 2.6.33 it is named <tt>wwan0</tt> rather than <tt>usb0</tt>.
 +
 
 +
As Ericsson's naming scheme suggests, idealy we would use <tt>/dev/cdc-wdm0</tt> for controlling the card, <tt>usb0</tt> (or <tt>wwan0</tt>) as a network device, <tt>/dev/ttyACM0</tt> or <tt>/dev/ttyACM1</tt> as a modem, and <tt>/dev/ttyACM2</tt> for GPS. This works for manual testing, but unfortunately, due to [http://markmail.org/message/2sd7culbgekugow2 limitations] of <tt>chat</tt>, does not play very well in scripts. So, instead of <tt>/dev/cdc-wdm0</tt>, for controlling the card we will use <tt>/dev/ttyACM1</tt>.
 +
 
 +
==Turning the card on==
 +
First, check whenever the SIM is protected by PIN by sending
 +
 
 +
AT+CPIN?
 +
 
 +
to <tt>/dev/ttyACM1</tt>. You can do it with any terminal terminal program like <tt>cu</tt> or <tt>minicom</tt>. If the answer is
 +
 
 +
+CPIN: READY
 +
 
 +
then the SIM is unlocked. If the answer is
 +
 
 +
+CPIN: SIM PIN
 +
 
 +
you need first to unlock it by sending
  
 
  AT+CPIN="YOUR-PIN"
 
  AT+CPIN="YOUR-PIN"
  
to /dev/ttyACM1. If your SIM is not protected by a PIN-code, or it is configured not to require one on connecting to the network, the last command is not necessary. Anyway, your card is not active until it responds with
+
to <tt>/dev/ttyACM1</tt>. Now the card can be turned on by sending
 +
 
 +
AT+CFUN=1
 +
 
 +
to <tt>/dev/ttyACM1</tt>. The answer should be
  
 
  +PACSP0
 
  +PACSP0
  
Don't try to do anything until you see it.
+
Don't try to do anything until you see it. To force GSM-only connection, send
 +
 
 +
AT+CFUN=5
 +
 
 +
to <tt>/dev/ttyACM1</tt>. To force WCDMA-only connection, send
 +
 
 +
AT+CFUN=6
 +
 
 +
to <tt>/dev/ttyACM1</tt>.
  
 
==Turning the card off==
 
==Turning the card off==
Line 31: Line 102:
 
  AT+CFUN=4
 
  AT+CFUN=4
  
to /dev/ttyACM1. To remove all power from the card, send
+
to <tt>/dev/ttyACM1</tt>. To remove all power from the card, send
  
 
  AT+CFUN=0
 
  AT+CFUN=0
  
to /dev/ttyACM1. Be carefull with the last command. It turns the card completely off, and it will no longer accept any AT-commands before the hard reset (which can be done either by rebooting the computer, or physically removing the power from the card).
+
to <tt>/dev/ttyACM1</tt>. Be carefull with the last command. It turns the card completely off, and it will no longer accept any AT-commands before the hard reset. To physically reset the card flip the wireless switch off, and then on. You can do the same by sending <tt>echo 0 > /sys/devices/platform/thinkpad_acpi/rfkill/rfkill0/state</tt> (to turn off) and then <tt>echo 1 > /sys/devices/platform/thinkpad_acpi/rfkill/rfkill0/state</tt> (to turn on).
On x200 at least, flipping the wireless on/off switch will cause the card to reinitialize and be put back into service, without a reboot.
+
  
 
==Using the card as a wireless modem==
 
==Using the card as a wireless modem==
Once the card is active, we can use it to connect to 3G network in the same way as any GPRS modem. For example to connect to AT&T Wireless network, your wvdial.conf would have to be something like this
+
Once the card is turned on, there are two ways to connect to the net. The first one is just to use the card as any "normal" GPRS modem and start <tt>pppd</tt> daemon on one of <tt>/dev/ttyACM*</tt>. The other way is to use CDC Ethernet interface. It is supposed to be more efficient, but it requires a pretty recent (>=2.6.28.8) kernel.
  
  [Dialer att]
+
====Connecting to the net via pppd====
 +
For the first approach, the easiest way to do it is to use <tt>wvdial</tt>. For example, to connect to AT&T Wireless network, your <tt>/etc/wvdial.conf</tt> would have to be something like this
 +
  [Dialer 3G]
 
  Modem = /dev/ttyACM0
 
  Modem = /dev/ttyACM0
  Init1 = AT+CGDCONT=1,"IP","proxy"
+
  Init1 = AT+CGDCONT=1,"IP","'''proxy'''"
 
  Stupid mode = 1
 
  Stupid mode = 1
 
  phone= *99#
 
  phone= *99#
 
  Username = *
 
  Username = *
 
  Password = *
 
  Password = *
 +
'''Note''': if you are using a SIM from a different mobile provider, you may need to change the access point name (APN) "'''proxy'''" in <tt>Init1</tt> string and Username/Password to something else. You can find the appropriate APN [http://www.pinstack.com/carrier_settings_apn_gateway.html here].
  
==Using the card as GPSr==
+
====Connecting to the net via CDC Ethernet interface====
Once the card is active, we can use it to get GPS info via NMEA protocol. First, you have to configure the a few NMEA options. It is done by sending  
+
The [http://marc.info/?l=linux-usb&m=123334979706403&w=2 second approach] works for kernels >=2.6.28.8. Configure the APN by sending
 +
 
 +
AT+CGDCONT=1,"IP","'''proxy'''"
 +
 
 +
to <tt>/dev/ttyACM1</tt>. Instead of "'''proxy'''" you may need to use to something else. Find the appropriate APN [http://www.pinstack.com/carrier_settings_apn_gateway.html here]. To initiate the connection, send
 +
 
 +
AT*ENAP=1,1
 +
 
 +
to <tt>/dev/ttyACM1</tt>. Now, if your wireless provider lets you in, you are connected. Launch <tt>dhclient</tt>
 +
 
 +
dhclient usb0
 +
 
 +
and start surfing the net (or use <tt>wwan0</tt> for kernels >= 2.6.33). To disconnect, send
 +
 
 +
AT*ENAP=0
 +
 
 +
to <tt>/dev/ttyACM1</tt>.
 +
 
 +
==Using the card as a GPS receiver==
 +
Once the card is turned on, we can use it to get GPS info via NMEA protocol. First, you have to configure the a few NMEA options. It is done by sending  
  
 
  AT*E2GPSCTL=X,Y,Z
 
  AT*E2GPSCTL=X,Y,Z
  
to /dev/ttyACM1. Here
+
to <tt>/dev/ttyACM1</tt>. Here
  
 
*X can be 0 (NMEA stream turned off) or 1 (NMEA stream turned on)
 
*X can be 0 (NMEA stream turned off) or 1 (NMEA stream turned on)
Line 64: Line 156:
 
  AT*E2GPSCTL=1,5,1
 
  AT*E2GPSCTL=1,5,1
  
to /dev/ttyACM1. Once the GPSr is configured, we can get the NMEA stream on /dev/ttyACM2 by sending
+
to <tt>/dev/ttyACM1</tt>. Once the GPSr is configured, we can get the NMEA stream on /dev/ttyACM2 by sending
  
 
  AT*E2GPSNPD
 
  AT*E2GPSNPD
  
to /dev/ttyACM2. Once you do that, /dev/ttyACM2 will no longer accept any new AT-commands. But you still can change the the behavior of the NMEA stream by sending the appropriate
+
to <tt>/dev/ttyACM2</tt>. Once you do that, <tt>/dev/ttyACM2</tt> will no longer accept any new AT-commands. But you still can change the the behavior of the NMEA stream by sending the appropriate
  
 
  AT*E2GPSCTL=X,Y,Z
 
  AT*E2GPSCTL=X,Y,Z
  
to /dev/ttyACM1. Now you can read the NMEA stream by saying
+
to <tt>/dev/ttyACM1</tt>. Now you can read the NMEA stream by saying
  
 
  cat /dev/ttyACM2
 
  cat /dev/ttyACM2
  
or better yet, start gpsd interface on /dev/ttyACM2.
+
or better yet, start <tt>gpsd</tt> interface on <tt>/dev/ttyACM2</tt>.
  
==Other thoughts==
+
Note: There is a now a sourceforge project dedicated to the Ericsson Mobile Broadband modules. Gps control sw that does the above automatically is available and also a graphical user interface. Details are available on the [http://sourceforge.net/apps/mediawiki/mbm/index.php?title=Main_Page#GPS_Control_.28mbm-gpsd.29 MBM Wiki].
While "AT+CFUN=*" and "AT+CPIN=*" are pretty standard commands for wireless modems and are well-documented (e.g. [http://www.sics.se/~bg/GC75-AT-Commands-R2A.pdf here] and [http://www.gsm-modem.de/gsm-modem-faq.html here]), it appears that the commands "AT*E2GPSCTL" and "AT*E2GPSNPD" are unique for Ericsson F3507g card. All credit for discovering them goes to N Z who left a comment in this [http://redmonk.com/sogrady/2008/09/24/apone/ thread]. I imagine one could find them via a USB sniffer on a working Windows machine (or a Linux machine with Windows running in a virtual machine). Another way to get them it to try to look for "gps" string in Windows drivers. What is interesting, is that F3507g supports few other AT-commands with "GPS" substring (you can get all supported AT-commands by sending "AT*" to /dev/ttyACM1 after activating it with "AT+CFUN=1").
+
  
 
==Scripting everything==
 
==Scripting everything==
 +
Install the packages
  
On my {{X301}} I have a simple script to power up and initialise the 3G device, dial out with wvdial and then power everything down again when I've finished online. This is worth doing because on the {{X301}} running the 3G device increases the power consumption by more than 10% (note: I have not tested how much more power is used if the device is not online and configured in low power mode, but it seems sensible to assume it is more than zero). I am using a UK spec {{X301}} with the supplied Vodafone SIM card. I needed to activate the SIM card on the Vodafone web site before this would work.
+
apt-get install sysfsutils gpsd wvdial
 
+
This script works fine on Debian but may require changes for other distributions. This worked up to kernel 2.6.28; with kernels after 2.6.28 the name of the serial devices associated with the 3G device has changed from "/dev/ttyACM" to "/dev/ttyUSB", I have noted changes required below.
+
  
First you need to install the "ppp", "sysfsutils" and "wvdial" packages with
+
In order to save the power, let us use '''sysfsutils''' to completely power off the WWAN card on boot. Append the following line to <tt>/etc/sysfs.conf</tt>
  
  apt-get install ppp wvdial sysfsutils
+
  devices/platform/thinkpad_acpi/rfkill/rfkill0/state = 0
  
I use sysfsutils to completely power off the 3G WWAN device on boot, in order to save power. I also power off the bluetooth, disable the white LED in the power button, and instruct the kernel to use the "noop" scheduler for the SSD. Edit /etc/sysfs.conf to look like this:
+
It will power down the card on boot, but when the laptop wakes from sleep, in some cases the card is powered up again. To re-apply these settings on wake-up, create a script named <tt>/etc/pm/sleep.d/10sysfsutils</tt>:
  
block/sda/queue/scheduler = noop
+
  #!/bin/sh
devices/platform/thinkpad_acpi/bluetooth_enable = 0
+
devices/platform/thinkpad_acpi/wwan_enable = 0
+
class/leds/tpacpi::power/brightness = 0
+
 
+
These will now be applied on boot, but when the laptop wakes from sleep the BIOS seems to undo some of these settings, so create a script named "/etc/pm/sleep.d/sysfsutils":
+
 
+
  #!/bin/bash
+
 
  case $1 in
 
  case $1 in
 
     (hibernate|suspend)
 
     (hibernate|suspend)
Line 111: Line 194:
 
  esac
 
  esac
  
Don't forget to "chmod a+x /etc/pm/sleep.d/sysfsutils". This script will be called when the laptop wakes up and it will power-off the 3G WWAN device again.
+
Don't forget to <tt>chmod a+x /etc/pm/sleep.d/10sysfsutils</tt>. Create a file called <tt>/usr/local/etc/F3507g</tt> containing the following:
  
Now we need to set up "wvdial" to work with the 3G WWAN device. Edit /etc/wvdial.conf to look like this:
+
'''USB_ID="0bdb:1900"'''
 +
'''PIN=""'''
 +
'''APN="proxy"'''
 +
 +
GPSDPID="/var/run/gpsd.pid"
 +
 +
RFKILL_DEVICE=$(for n in /sys/devices/platform/thinkpad_acpi/rfkill/rfkill*; do if [ "$(cat $n/name)" = "tpacpi_wwan_sw" ]; then echo $n/state; fi; done)
 +
 +
CONTROL_DEVICE () {
 +
echo /dev/$(for n in /sys/class/tty/ttyACM*/device/interface;do if [ "$(cat $n)" = "Ericsson F3507g Mobile Broadband Minicard Data Modem" ]; then echo $n|awk -F '/' '{print $5}'; fi; done)
 +
}
 +
 +
GPS_DEVICE () {
 +
echo /dev/$(for n in /sys/class/tty/ttyACM*/device/interface;do if [ "$(cat $n)" = "Ericsson F3507g Mobile Broadband Minicard GPS Port" ]; then echo $n|awk -F '/' '{print $5}'; fi; done)
 +
}
 +
 +
powerup_F3507g () {
 +
echo -n "Powering up F3507g card.."
 +
echo 1 > $RFKILL_DEVICE
 +
while [ -z "$(lsusb -d $USB_ID)" ]; do sleep 0.5; echo -n "."; done
 +
echo "done"
 +
echo -n "Turning on F3507g card..."
 +
sleep 3
 +
if [ -n "$PIN" ]; then
 +
    /usr/sbin/chat -v "" "AT+CPIN?" "SIM PIN" "AT" "OK" "AT+CPIN=\"$PIN\"" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
fi
 +
/usr/sbin/chat -v "" "AT+CPIN?" "READY" "AT+CFUN=1" "+PACSP" "AT" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
echo "done"
 +
}
 +
 +
powerdown_F3507g () {
 +
echo -n "Turning off F3507g card..."
 +
/usr/sbin/chat -v "" "AT+CFUN=4" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
echo "done"
 +
echo -n "Powering down F3507g card.."
 +
echo 0 > $RFKILL_DEVICE
 +
while [ -n "$(lsusb -d $USB_ID)" ]; do sleep 0.5; echo -n "."; done
 +
echo "done"
 +
}
 +
 +
configure_GPS () {
 +
/usr/sbin/chat -v "" "AT*E2GPSCTL=$1,$2,$3" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
}
 +
 +
turnon_GPS () {
 +
echo -n "Starting NMEA stream on $(GPS_DEVICE)..."
 +
configure_GPS 1 1 1
 +
sleep 1
 +
/usr/sbin/chat -v "" "AT*E2GPSNPD" "GPGGA" > $(GPS_DEVICE) < $(GPS_DEVICE)
 +
start-stop-daemon --start --exec /usr/sbin/gpsd -- -P $GPSDPID $(GPS_DEVICE)
 +
echo "done"
 +
}
 +
 +
turnoff_GPS () {
 +
echo -n "Stopping NMEA stream on $(GPS_DEVICE)..."
 +
start-stop-daemon --stop --pidfile $GPSDPID
 +
configure_GPS 0 1 0
 +
echo "done"
 +
turnoff_F3507g
 +
}
 +
 +
turnon_WWAN () {
 +
echo -n "Starting WWAN connection..."
 +
/usr/sbin/chat -v "" "AT+CGDCONT=1,\"IP\",\"$APN\"" "OK" "AT*ENAP=1,1" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
echo "done"
 +
}
 +
 +
turnoff_WWAN () {
 +
echo -n "Stopping WWAN connection..."
 +
/usr/sbin/chat -v "" "AT*ENAP=0" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
 +
echo "done"
 +
turnoff_F3507g
 +
}
 +
 +
turnoff_F3507g () {
 +
[ -z $(grep gps /etc/network/run/ifstate) ] && \
 +
[ -z $(grep usb0 /etc/network/run/ifstate) ] && \
 +
[ -z $(grep 3G /etc/network/run/ifstate) ] && \
 +
ifdown F3507g
 +
}
 +
 
 +
Give the correct '''USB_ID''' and '''PIN''', and find the '''APN''' for your wireless provider [http://www.pinstack.com/carrier_settings_apn_gateway.html here]. Append the following lines to your <tt>/etc/network/interfaces</tt> file
 +
 
 +
iface F3507g inet manual
 +
up . /usr/local/etc/F3507g; powerup_F3507g
 +
down . /usr/local/etc/F3507g; powerdown_F3507g
 +
 +
iface 3G inet wvdial
 +
pre-up ifup F3507g
 +
post-down . /usr/local/etc/F3507g; turnoff_F3507g
 +
provider 3G
 +
 
 +
iface gps inet manual
 +
up . /usr/local/etc/F3507g; ifup F3507g; turnon_GPS
 +
down . /usr/local/etc/F3507g; turnoff_GPS
 +
 +
iface usb0 inet dhcp
 +
pre-up . /usr/local/etc/F3507g; ifup F3507g; turnon_WWAN
 +
post-down . /usr/local/etc/F3507g; turnoff_WWAN
 +
 
 +
Configure <tt>/etc/wvdial.conf</tt> to look like this:
  
 
  [Dialer 3G]
 
  [Dialer 3G]
 
  Modem = /dev/ttyACM0
 
  Modem = /dev/ttyACM0
  Init1 = AT+CGDCONT=1,"IP","Internet"
+
  Init1 = AT+CGDCONT=1,"IP","'''proxy'''"
 
  Stupid mode = 1
 
  Stupid mode = 1
 
  phone= *99#
 
  phone= *99#
Line 123: Line 306:
 
  Password = *
 
  Password = *
  
If you are using kernel 2.6.28 or later, replace "/dev/ttyACM0" with "/dev/ttyUSB2".
+
'''Note''': you may need to change the access point name (APN) "'''proxy'''" in <tt>Init1</tt> string and Username/Password to something else. Find the appropriate APN [http://www.pinstack.com/carrier_settings_apn_gateway.html here].
  
If you are using a SIM from a mobile provider other than Vodafone UK you may need to change the access point name (APN) in the Init1 string. I found that Vodafone UK uses the APN "Internet" and T-mobile use the APN "general.t-mobile.uk", presumably other providers also use different APN values. AT&T will work using the APN string "ISP.CINGULAR".
+
Now broadband connection could be started in the same way as you start any other network interface, just by saying <tt>ifup usb0</tt> (or <tt>ifup 3G</tt>, if connecting via <tt>pppd</tt>). To shut it down, say <tt>ifdown usb0</tt> (or <tt>ifdown 3G</tt>). Similarly, GPS interface is started by <tt>ifup gps</tt> and turned off by <tt>ifdown gps</tt>. Once you get a fix, you can use your favourite GPS mapping application like [http://www.tangogps.org tangogps].  The "cold start" seems to take quite a bit however, and sometimes it cannot get a fix if indoors.
  
Edit /etc/ppp/peers/wvdial to look like this:
+
==Using F3507g with ifup / ifdown==
 +
The [http://vog.github.io/wwan-helper/ wwan-helper] script is a simpler alternative to the "Scripting everything" section. It has slightly different chat scripts that establish a WWAN connection more reliably, even in case of a partially-initialized modem. It retries as often as necessary until the WWAN connection is really established. The downside is that it doesn't (yet) enable GPS. To use it, simply download wwan-helper:
  
  noauth
+
  git clone <nowiki>https://github.com/vog/wwan-helper.git</nowiki> /etc/wwan-helper
name wvdial
+
usepeerdns
+
noccp
+
novj
+
novjccomp
+
  
Create a file called "/usr/local/bin/3g-dialup" containing the following:
+
and configure your APN and PIN in <tt>/etc/wwan-helper/config</tt>:
  
  #!/bin/sh
+
  APN=web.vodafone.de
+
  PIN=1234
WWANDEVICE=/dev/ttyACM2
+
+
## Check we have appropriate permissions
+
if [ `whoami` != "root" ]; then
+
    echo Run this script as root
+
    exit 0
+
fi
+
+
## Enable the WWAN hardware
+
echo -n "Powering up WWAN device .."
+
  echo 1 > /sys/devices/platform/thinkpad_acpi/wwan_enable
+
while [ ! -c $WWANDEVICE ]; do sleep 0.5; echo -n "."; done
+
echo " OK"
+
+
echo -n "Initialising WWAN modem ..."
+
/usr/sbin/chat -v "" "AT+CFUN=1" "+PACSP0" "AT" "OK" > $WWANDEVICE < $WWANDEVICE
+
echo " OK"
+
+
echo "Starting PPP -- hit Ctrl+C when finished"
+
/usr/bin/wvdial 3G
+
+
echo -n "Shutting down WWAN modem ..."
+
/usr/sbin/chat -v "" "AT+CFUN=4" "OK" > $WWANDEVICE < $WWANDEVICE
+
echo " OK"
+
+
## Disable the WWAN hardware, save power
+
echo -n "Powering down WWAN device .."
+
echo 0 > /sys/devices/platform/thinkpad_acpi/wwan_enable
+
while [ -c $WWANDEVICE ]; do sleep 0.5; echo -n "."; done
+
echo " OK"
+
  
You'll need to make this script executable with "chmod a+x /usr/local/bin/3g-dialup".
+
Finally, add wwan-helper to the pre-up and post-down hooks:
 +
 
 +
ln -s ../../wwan-helper/wwan-helper /etc/network/if-pre-up.d/wwan-helper
 +
ln -s ../../wwan-helper/wwan-helper /etc/network/if-post-down.d/wwan-helper
 +
 
 +
That way, no special settings in /etc/network/interfaces are needed, just the plain standard entry:
 +
 
 +
iface wwan0 inet dhcp
 +
 
 +
(Reminder from the [[#Overview|Overview]] section: If you have a Linux kernel 3.2 or older, use <tt>usb0</tt> instead of <tt>wwan0</tt>.)
 +
 
 +
==Using F3507g with NetworkManager==
 +
Work is ongoing to add support for Ericsson Mobile Broadband Modules to GNOME NetworkManager / modem-manager. More information is available on the [http://mbm.sourceforge.net/ MBM project website] and the [http://sourceforge.net/apps/mediawiki/mbm/index.php?title=MBM MBM wiki].
 +
 
 +
The F3507g card (in a ThinkPad {{T400s}}) works out of the box on Fedora 11. No configuration is needed beyond setting the data plan provider in the nm-applet GUI.
 +
 
 +
Using mbm-gpsd gps works flawlessly with the F3507g on Karmic Koala with modemmanager packages from [https://launchpad.net/~modemmanager/+archive/ppa Ubuntu PPA], the mbm-gpsd installed by source using the description from [http://sourceforge.net/apps/mediawiki/mbm/index.php?title=MBM#GPS_Control_.28mbm-gpsd.29 here] and knowing the PIN of your SIM card.
 +
 
 +
== SMS with wammu/gammu ==
 +
You can use [http://wammu.eu/ Wammu] to receive and send SMS.
 +
 
 +
After installing wammu (with the usual <tt>apt-get install wammu</tt> or whatever), choose to configure it "Manually":
 +
  port=/dev/ttyACM0
 +
  connection=at
 +
 
 +
(credits: [http://www.thinkpad-forum.de/thinkpad-software/linux-und-osx/p633662-sms-mit-der-ericsson-3507g/  linrunner])
 +
 
 +
Sony Ericsson F3507g configuration [http://wammu.eu/phones/sony-ericsson/3595/ explained on wammu website]
 +
 
 +
==Other thoughts==
 +
While <tt>AT+CFUN=*</tt> and <tt>AT+CPIN=*</tt> are pretty standard commands for wireless modems and are well-documented, it appears that the commands <tt>AT*E2GPSCTL</tt> and <tt>AT*E2GPSNPD</tt> are unique to the Ericsson F3507g card. All credit for discovering them goes to "Nickolai Zeldovich" who left a comment in this [http://redmonk.com/sogrady/2008/09/24/apone/ thread]. I imagine one could find them via a USB sniffer on a working Windows machine (or a Linux machine with Windows running in a virtual machine). Another way to get them is to try to look for "gps" string in Windows drivers. What is interesting, F3507g supports a few other AT-commands with "GPS" substring (you can get all supported AT-commands by sending <tt>AT*</tt> to <tt>/dev/ttyACM1</tt> after activating it with <tt>AT+CFUN=1</tt>). Anyway, there is a [http://www.natisbad.org/E4300/Dell_Wireless_5530_AT_cmd_ref.html project] aiming to document all AT-commands for the Ericsson F3507g card. The project links to a full reference which no longer works. The new link appears to be [http://developer.sonyericsson.com/cws/download/1/707/466/1277362028/DW-65054-dg_at_2006--10_r17a.pdf]
  
If you are using kernel 2.6.28 or later, replace "/dev/ttyACM2" in the script with "/dev/ttyUSB2".
+
==Related Links==
 +
*[http://www.ericsson.com/solutions/mobile_broadband_modules/docs/mobile_broadband_module_datasheet_print.pdf Ericsson Datasheet]
 +
*[http://www.natisbad.org/E4300/Dell_Wireless_5530_AT_cmd_ref.html F3507g - AT commands reference]
 +
*[http://developer.sonyericsson.com/cws/download/1/707/466/1277362028/DW-65054-dg_at_2006--10_r17a.pdf Sony Ericsson AT commands reference]
 +
*[http://www.pinstack.com/carrier_settings_apn_gateway.html Carrier internet Settings (Apn, Gateway, etc)]
 +
*[http://mbm.sourceforge.net/ MBM project website (Support for f3507g/f3607gw in NetworkManager, kernel drivers, gps control software etc)]
  
Now I can fire up a 3G connection trivially with "sudo 3g-dialup" in an xterm. Once pppd has acquired an IP address you can use the Internet. Once you're finished simply hit Ctrl+C in the xterm and it will close the PPP session and power down the modem again. It's probably a good idea to shut down the connection in this way before you put the laptop to sleep.
+
==Bugs==
 +
* Ubuntu 8.10 kernel suffers from the "option" regression mentioned above. However both CDC ACM and CDC Ethernet interfaces are treated correctly by Ubuntu 9.04 kernel.
 +
* Playing around with the device under Linux can cause it to disappear under Windows Vista. Issue + Fix described [http://forums.lenovo.com/t5/T400-T500-and-newer-T-series/Ericsson-f3507g-doesn-t-appear-under-Vista32-anymore-but-works/m-p/138874 here]
  
If the system stays waiting for the device to power up forever check if you are running kernel 2.6.28 or later, you may need to adjust the device names from "/dev/ttyACM*" to "/dev/ttyUSB*" as described above.
+
==Troubleshooting==
 +
Under certain circumstances the device may disappear completely from your system or refuse to connect to a network even though everything worked fine up to now. In such a situation one of the following methods could solve the problem:
 +
* Use the killswitch to reset the card. Switch all rf devices off, wait about 30s (all wireless leds should be off), switch them on again and wait for the card to appear. Use 'lsusb' to find the device.
 +
* Shut down, remove the battery, take out the SIM, clean the SIM slot, insert the SIM and battery and start your Thinkpad again.
 +
* Disable the card in the BIOS: go to "Config", "Security", "I/O Port Access" and switch "wireless wan" to "disabled". Save, restart and boot. Then do the same thing again and enable it again.
 +
If the last method doesn't show any success on windows, support will consider your card to be broken and send you a new one while your Thinkpad is still covered by the warranty.
 +
Please note that Linux can revive a locked up card that can't be discovered on windows after using the last method. If even Linux can't find the device it's definitely broken and needs to be replaced.
  
==Models==
+
==ThinkPads this adapter may be found in==
*{{X200}}
+
*{{SL300}}, {{SL400}}, {{SL500}}, {{SL510}}
*{{X301}}
+
*{{T400}}, {{T400s}}, {{T500}}
*{{T400}}
+
*{{W500}}
 +
*{{X200}}, {{X200 Tablet}}, {{X301}}
  
[[Category:X200]] [[Category:T400]]
+
[[Category:WWAN Adapters]]

Latest revision as of 15:41, 22 January 2021

Ericsson F3507g Mobile Broadband Module

This is a Ericsson WWAN Adapter that is installed in a Mini-PCI Express slot

NOTE!
Specific versions of this card may come pre-configured for a certain carrier (AT&T)

Features

  • Chipset: Ericsson F3507g
  • USB ID: 0bdb:1900
  • USB ID: 0bdb:1902
  • WCDMA 2100/1900/850MHz
  • GSM/GPRS/EDGE 850/900/1800/1900MHz
  • GPS
  • Download up to 7.2Mbps
  • Upload up to 2.0Mbps
Ericsson F3507g WWAN Adapter

Lenovo Partnumbers

  • Option PN 43R9152 (AT&T)
  • FRU 43Y6537 (AT&T)
  • FRU 43Y6513 (Other)

Forumthread with list of FRUs and corresponding firmwares (scroll down):

Firmware Date FRU Remarks
R1A034 2008-05-17 43Y6477
R1B003 2008-07-08 43Y6479
R1B/1 2008-07-30 43Y6513
R1D06 2008-11-07 43Y6537 better performance and stability, fixed many bugs from the previous version

Unlike other manufactures (Dell, Toshiba etc.) Lenovo does not release the firmware update utility public, so the only way to get a newer version F3507g is by replacing the existing one.

Overview

Here are some basics about Ericsson F3507g MiniPCIe WWAN/GPS card (USB ID 0bdb:1900 and 0bdb:1902):

  • the card will not work without an inserted SIM, even the GPS function. If you want to use just GPS, any SIM would work, even if it is not attached to any active account with any GSM provider.
  • the card provides three CDC ACM interfaces (CONFIG_USB_ACM=m), two CDC WDM interfaces (CONFIG_USB_WDM=m) and one CDC Ethernet interface (CONFIG_USB_NET_CDCETHER=m), and identifies them as
for n in `ls /sys/class/*/*{ACM,wdm,usb0}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done

usb0 : Ericsson F3507g Mobile Broadband Minicard Network Adapter
ttyACM0 : Ericsson F3507g Mobile Broadband Minicard Modem
ttyACM1 : Ericsson F3507g Mobile Broadband Minicard Data Modem
ttyACM2 : Ericsson F3507g Mobile Broadband Minicard GPS Port
cdc-wdm0 : Ericsson F3507g Mobile Broadband Minicard Device Management
cdc-wdm1 : Ericsson F3507g Mobile Broadband Minicard PC SC Port

Note:

  • apparently, for a while option USB-serial driver had claimed USB ID 0bdb:1900, but this was wrong, and as of kernel 2.6.28.9 that commit was reversed. If instead of /dev/ttyACM* you see /dev/ttyUSB*, it means that option module is loaded. You may need to blacklist it to make sure it doesn't happen.
  • Support for the CDC Ethernet interface appears only in kernel 2.6.28.8. But if your kernel is older, you can still connect to the net using one of the "Modem" interfaces. As of kernel 2.6.33 it is named wwan0 rather than usb0.

As Ericsson's naming scheme suggests, idealy we would use /dev/cdc-wdm0 for controlling the card, usb0 (or wwan0) as a network device, /dev/ttyACM0 or /dev/ttyACM1 as a modem, and /dev/ttyACM2 for GPS. This works for manual testing, but unfortunately, due to limitations of chat, does not play very well in scripts. So, instead of /dev/cdc-wdm0, for controlling the card we will use /dev/ttyACM1.

Turning the card on

First, check whenever the SIM is protected by PIN by sending

AT+CPIN?

to /dev/ttyACM1. You can do it with any terminal terminal program like cu or minicom. If the answer is

+CPIN: READY

then the SIM is unlocked. If the answer is

+CPIN: SIM PIN

you need first to unlock it by sending

AT+CPIN="YOUR-PIN"

to /dev/ttyACM1. Now the card can be turned on by sending

AT+CFUN=1

to /dev/ttyACM1. The answer should be

+PACSP0

Don't try to do anything until you see it. To force GSM-only connection, send

AT+CFUN=5

to /dev/ttyACM1. To force WCDMA-only connection, send

AT+CFUN=6

to /dev/ttyACM1.

Turning the card off

To put the card into energy-saving mode (this is the default), you can send

AT+CFUN=4

to /dev/ttyACM1. To remove all power from the card, send

AT+CFUN=0

to /dev/ttyACM1. Be carefull with the last command. It turns the card completely off, and it will no longer accept any AT-commands before the hard reset. To physically reset the card flip the wireless switch off, and then on. You can do the same by sending echo 0 > /sys/devices/platform/thinkpad_acpi/rfkill/rfkill0/state (to turn off) and then echo 1 > /sys/devices/platform/thinkpad_acpi/rfkill/rfkill0/state (to turn on).

Using the card as a wireless modem

Once the card is turned on, there are two ways to connect to the net. The first one is just to use the card as any "normal" GPRS modem and start pppd daemon on one of /dev/ttyACM*. The other way is to use CDC Ethernet interface. It is supposed to be more efficient, but it requires a pretty recent (>=2.6.28.8) kernel.

Connecting to the net via pppd

For the first approach, the easiest way to do it is to use wvdial. For example, to connect to AT&T Wireless network, your /etc/wvdial.conf would have to be something like this

[Dialer 3G]
Modem = /dev/ttyACM0
Init1 = AT+CGDCONT=1,"IP","proxy"
Stupid mode = 1
phone= *99#
Username = *
Password = *

Note: if you are using a SIM from a different mobile provider, you may need to change the access point name (APN) "proxy" in Init1 string and Username/Password to something else. You can find the appropriate APN here.

Connecting to the net via CDC Ethernet interface

The second approach works for kernels >=2.6.28.8. Configure the APN by sending

AT+CGDCONT=1,"IP","proxy"

to /dev/ttyACM1. Instead of "proxy" you may need to use to something else. Find the appropriate APN here. To initiate the connection, send

AT*ENAP=1,1

to /dev/ttyACM1. Now, if your wireless provider lets you in, you are connected. Launch dhclient

dhclient usb0

and start surfing the net (or use wwan0 for kernels >= 2.6.33). To disconnect, send

AT*ENAP=0

to /dev/ttyACM1.

Using the card as a GPS receiver

Once the card is turned on, we can use it to get GPS info via NMEA protocol. First, you have to configure the a few NMEA options. It is done by sending

AT*E2GPSCTL=X,Y,Z

to /dev/ttyACM1. Here

  • X can be 0 (NMEA stream turned off) or 1 (NMEA stream turned on)
  • Y can be an integer form 1 to 60, and sets the frequency of how often the card emits the NMEA sentences
  • Z can be 0 (DGPS is turned off) or 1 (DGPS is turned on)

so, to configure the GPSr to update every 5 seconds, and turn DGPS on, you would send

AT*E2GPSCTL=1,5,1

to /dev/ttyACM1. Once the GPSr is configured, we can get the NMEA stream on /dev/ttyACM2 by sending

AT*E2GPSNPD

to /dev/ttyACM2. Once you do that, /dev/ttyACM2 will no longer accept any new AT-commands. But you still can change the the behavior of the NMEA stream by sending the appropriate

AT*E2GPSCTL=X,Y,Z

to /dev/ttyACM1. Now you can read the NMEA stream by saying

cat /dev/ttyACM2

or better yet, start gpsd interface on /dev/ttyACM2.

Note: There is a now a sourceforge project dedicated to the Ericsson Mobile Broadband modules. Gps control sw that does the above automatically is available and also a graphical user interface. Details are available on the MBM Wiki.

Scripting everything

Install the packages

apt-get install sysfsutils gpsd wvdial

In order to save the power, let us use sysfsutils to completely power off the WWAN card on boot. Append the following line to /etc/sysfs.conf

devices/platform/thinkpad_acpi/rfkill/rfkill0/state = 0

It will power down the card on boot, but when the laptop wakes from sleep, in some cases the card is powered up again. To re-apply these settings on wake-up, create a script named /etc/pm/sleep.d/10sysfsutils:

#!/bin/sh
case $1 in
    (hibernate|suspend)
        ;;
    (thaw|resume)
        /etc/init.d/sysfsutils start
        ;;
    *)  echo "somebody is calling me totally wrong."
        ;;
esac

Don't forget to chmod a+x /etc/pm/sleep.d/10sysfsutils. Create a file called /usr/local/etc/F3507g containing the following:

USB_ID="0bdb:1900"
PIN=""
APN="proxy"

GPSDPID="/var/run/gpsd.pid"

RFKILL_DEVICE=$(for n in /sys/devices/platform/thinkpad_acpi/rfkill/rfkill*; do if [ "$(cat $n/name)" = "tpacpi_wwan_sw" ]; then echo $n/state; fi; done)

CONTROL_DEVICE () {
echo /dev/$(for n in /sys/class/tty/ttyACM*/device/interface;do if [ "$(cat $n)" = "Ericsson F3507g Mobile Broadband Minicard Data Modem" ]; then echo $n|awk -F '/' '{print $5}'; fi; done)
}

GPS_DEVICE () {
echo /dev/$(for n in /sys/class/tty/ttyACM*/device/interface;do if [ "$(cat $n)" = "Ericsson F3507g Mobile Broadband Minicard GPS Port" ]; then echo $n|awk -F '/' '{print $5}'; fi; done)
}

powerup_F3507g () {
	echo -n "Powering up F3507g card.."
	echo 1 > $RFKILL_DEVICE
	while [ -z "$(lsusb -d $USB_ID)" ]; do sleep 0.5; echo -n "."; done
	echo "done"
	echo -n "Turning on F3507g card..."
	sleep 3
	if [ -n "$PIN" ]; then
	    /usr/sbin/chat -v "" "AT+CPIN?" "SIM PIN" "AT" "OK" "AT+CPIN=\"$PIN\"" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
	fi
	/usr/sbin/chat -v "" "AT+CPIN?" "READY" "AT+CFUN=1" "+PACSP" "AT" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
	echo "done"
}

powerdown_F3507g () {
	echo -n "Turning off F3507g card..."
	/usr/sbin/chat -v "" "AT+CFUN=4" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
	echo "done"
	echo -n "Powering down F3507g card.."
	echo 0 > $RFKILL_DEVICE
	while [ -n "$(lsusb -d $USB_ID)" ]; do sleep 0.5; echo -n "."; done
	echo "done"
}

configure_GPS () {
	/usr/sbin/chat -v "" "AT*E2GPSCTL=$1,$2,$3" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
}

turnon_GPS () {
	echo -n "Starting NMEA stream on $(GPS_DEVICE)..."
	configure_GPS 1 1 1
	sleep 1
	/usr/sbin/chat -v "" "AT*E2GPSNPD" "GPGGA" > $(GPS_DEVICE) < $(GPS_DEVICE)
	start-stop-daemon --start --exec /usr/sbin/gpsd -- -P $GPSDPID $(GPS_DEVICE)
	echo "done"
}

turnoff_GPS () {
	echo -n "Stopping NMEA stream on $(GPS_DEVICE)..."
	start-stop-daemon --stop --pidfile $GPSDPID
	configure_GPS 0 1 0
	echo "done"
	turnoff_F3507g
}

turnon_WWAN () {
	echo -n "Starting WWAN connection..."
	/usr/sbin/chat -v "" "AT+CGDCONT=1,\"IP\",\"$APN\"" "OK" "AT*ENAP=1,1" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
	echo "done"
}

turnoff_WWAN () {
	echo -n "Stopping WWAN connection..."
	/usr/sbin/chat -v "" "AT*ENAP=0" "OK" > $(CONTROL_DEVICE) < $(CONTROL_DEVICE)
	echo "done"
	turnoff_F3507g
}

turnoff_F3507g () {
	[ -z $(grep gps /etc/network/run/ifstate) ] && \
	[ -z $(grep usb0 /etc/network/run/ifstate) ] && \
	[ -z $(grep 3G /etc/network/run/ifstate) ] && \
	ifdown F3507g
}

Give the correct USB_ID and PIN, and find the APN for your wireless provider here. Append the following lines to your /etc/network/interfaces file

iface F3507g inet manual
up . /usr/local/etc/F3507g; powerup_F3507g
down . /usr/local/etc/F3507g; powerdown_F3507g

iface 3G inet wvdial
pre-up ifup F3507g
post-down . /usr/local/etc/F3507g; turnoff_F3507g
provider 3G
 
iface gps inet manual
up . /usr/local/etc/F3507g; ifup F3507g; turnon_GPS
down . /usr/local/etc/F3507g; turnoff_GPS

iface usb0 inet dhcp
pre-up . /usr/local/etc/F3507g; ifup F3507g; turnon_WWAN
post-down . /usr/local/etc/F3507g; turnoff_WWAN

Configure /etc/wvdial.conf to look like this:

[Dialer 3G]
Modem = /dev/ttyACM0
Init1 = AT+CGDCONT=1,"IP","proxy"
Stupid mode = 1
phone= *99#
Username = *
Password = *

Note: you may need to change the access point name (APN) "proxy" in Init1 string and Username/Password to something else. Find the appropriate APN here.

Now broadband connection could be started in the same way as you start any other network interface, just by saying ifup usb0 (or ifup 3G, if connecting via pppd). To shut it down, say ifdown usb0 (or ifdown 3G). Similarly, GPS interface is started by ifup gps and turned off by ifdown gps. Once you get a fix, you can use your favourite GPS mapping application like tangogps. The "cold start" seems to take quite a bit however, and sometimes it cannot get a fix if indoors.

Using F3507g with ifup / ifdown

The wwan-helper script is a simpler alternative to the "Scripting everything" section. It has slightly different chat scripts that establish a WWAN connection more reliably, even in case of a partially-initialized modem. It retries as often as necessary until the WWAN connection is really established. The downside is that it doesn't (yet) enable GPS. To use it, simply download wwan-helper:

git clone https://github.com/vog/wwan-helper.git /etc/wwan-helper

and configure your APN and PIN in /etc/wwan-helper/config:

APN=web.vodafone.de
PIN=1234

Finally, add wwan-helper to the pre-up and post-down hooks:

ln -s ../../wwan-helper/wwan-helper /etc/network/if-pre-up.d/wwan-helper
ln -s ../../wwan-helper/wwan-helper /etc/network/if-post-down.d/wwan-helper

That way, no special settings in /etc/network/interfaces are needed, just the plain standard entry:

iface wwan0 inet dhcp

(Reminder from the Overview section: If you have a Linux kernel 3.2 or older, use usb0 instead of wwan0.)

Using F3507g with NetworkManager

Work is ongoing to add support for Ericsson Mobile Broadband Modules to GNOME NetworkManager / modem-manager. More information is available on the MBM project website and the MBM wiki.

The F3507g card (in a ThinkPad T400s) works out of the box on Fedora 11. No configuration is needed beyond setting the data plan provider in the nm-applet GUI.

Using mbm-gpsd gps works flawlessly with the F3507g on Karmic Koala with modemmanager packages from Ubuntu PPA, the mbm-gpsd installed by source using the description from here and knowing the PIN of your SIM card.

SMS with wammu/gammu

You can use Wammu to receive and send SMS.

After installing wammu (with the usual apt-get install wammu or whatever), choose to configure it "Manually":

 port=/dev/ttyACM0
 connection=at

(credits: linrunner)

Sony Ericsson F3507g configuration explained on wammu website

Other thoughts

While AT+CFUN=* and AT+CPIN=* are pretty standard commands for wireless modems and are well-documented, it appears that the commands AT*E2GPSCTL and AT*E2GPSNPD are unique to the Ericsson F3507g card. All credit for discovering them goes to "Nickolai Zeldovich" who left a comment in this thread. I imagine one could find them via a USB sniffer on a working Windows machine (or a Linux machine with Windows running in a virtual machine). Another way to get them is to try to look for "gps" string in Windows drivers. What is interesting, F3507g supports a few other AT-commands with "GPS" substring (you can get all supported AT-commands by sending AT* to /dev/ttyACM1 after activating it with AT+CFUN=1). Anyway, there is a project aiming to document all AT-commands for the Ericsson F3507g card. The project links to a full reference which no longer works. The new link appears to be [1]

Related Links

Bugs

  • Ubuntu 8.10 kernel suffers from the "option" regression mentioned above. However both CDC ACM and CDC Ethernet interfaces are treated correctly by Ubuntu 9.04 kernel.
  • Playing around with the device under Linux can cause it to disappear under Windows Vista. Issue + Fix described here

Troubleshooting

Under certain circumstances the device may disappear completely from your system or refuse to connect to a network even though everything worked fine up to now. In such a situation one of the following methods could solve the problem:

  • Use the killswitch to reset the card. Switch all rf devices off, wait about 30s (all wireless leds should be off), switch them on again and wait for the card to appear. Use 'lsusb' to find the device.
  • Shut down, remove the battery, take out the SIM, clean the SIM slot, insert the SIM and battery and start your Thinkpad again.
  • Disable the card in the BIOS: go to "Config", "Security", "I/O Port Access" and switch "wireless wan" to "disabled". Save, restart and boot. Then do the same thing again and enable it again.

If the last method doesn't show any success on windows, support will consider your card to be broken and send you a new one while your Thinkpad is still covered by the warranty. Please note that Linux can revive a locked up card that can't be discovered on windows after using the last method. If even Linux can't find the device it's definitely broken and needs to be replaced.

ThinkPads this adapter may be found in