Difference between revisions of "Ericsson F3507g Mobile Broadband Module"

From ThinkWiki
Jump to: navigation, search
Line 3: Line 3:
 
* 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 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 USB interface, and is served by <tt>cdc_acm</tt> kernel module (apparently, for a while the <tt>option</tt> USB-serial driver claimed USB ID <tt>0bdb:1900</tt>, but this was wrong, and as of kernel 2.6.28.9 that commit was reversed. You may need to blacklist the <tt>option</tt> driver to make sure it doesn't happen).
 
* the card provides USB interface, and is served by <tt>cdc_acm</tt> kernel module (apparently, for a while the <tt>option</tt> USB-serial driver claimed USB ID <tt>0bdb:1900</tt>, but this was wrong, and as of kernel 2.6.28.9 that commit was reversed. You may need to blacklist the <tt>option</tt> driver to make sure it doesn't happen).
* it registers three pseudo-TTY's, in my case /dev/ttyACM0, /dev/ttyACM1 and /dev/ttyACM2 .
+
* it registers three pseudo-TTY's, in my case <tt>/dev/ttyACM0</tt>, <tt>/dev/ttyACM1</tt> and <tt>/dev/ttyACM2</tt>.
 
* the card is controlled by sending AT-commands to one of it's pseudo-TTY's
 
* the card is controlled by sending AT-commands to one of it's pseudo-TTY's
* it appears that all three TTY's have identical funcionality. 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.
+
* it appears that all three TTY's have identical funcionality. So, for example, we can use <tt>/dev/ttyACM0</tt> for broadband 3G, <tt>/dev/ttyACM1</tt> for controlling the card via AT-commands, and <tt>/dev/ttyACM2</tt> for GPS, or in any other order.
  
 
==Turning the card on==
 
==Turning the card on==
Line 12: Line 12:
 
  AT+CFUN=1
 
  AT+CFUN=1
  
to /dev/ttyACM1. The responce should be
+
to <tt>/dev/ttyACM1</tt>. The responce should be
  
 
  OK
 
  OK
Line 20: Line 20:
 
  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 cannot be used for communication until it responds with
+
to <tt>/dev/ttyACM1</tt>. 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 cannot be used for communication until it responds with
  
 
  +PACSP0
 
  +PACSP0
Line 31: Line 31:
 
  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. To physically reset the card flip the wireless switch off, and then on. You can do the same by sending "0" to <tt>/sys/devices/platform/thinkpad_acpi/wwan_enable</tt> (to turn off) and then "1" to <tt>/sys/devices/platform/thinkpad_acpi/wwan_enable</tt> (to turn on).
+
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 "0" to <tt>/sys/devices/platform/thinkpad_acpi/wwan_enable</tt> (to turn off) and then "1" to <tt>/sys/devices/platform/thinkpad_acpi/wwan_enable</tt> (to turn on).
  
 
==Using the card as a wireless modem==
 
==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 <tt>pppd</tt> daemon on one of the pseudo-TTY's /dev/ttyACM* . The other way is supposedly more efficient as it does not require running <tt>pppd</tt>, and the catch is that it requires [http://www.nabble.com/Cannot-get-Ericsson-F3507G-to-work-with-the-Option-module-td21993695.html patching] the kernel. But since this driver has not yet been accepted to the kernel, and there are [https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/287893/comments/6 reports] that it is not (yet) significantly more efficient, we will stick with the first approach.
+
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 the pseudo-TTY's <tt>/dev/ttyACM*</tt> . The other way is supposedly more efficient as it does not require running <tt>pppd</tt>, and the catch is that it requires [http://www.nabble.com/Cannot-get-Ericsson-F3507G-to-work-with-the-Option-module-td21993695.html patching] the kernel. But since this driver has not yet been accepted to the kernel, and there are [https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/287893/comments/6 reports] that it is not (yet) significantly more efficient, we will stick with 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
 
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
Line 50: Line 50:
 
  Password = *
 
  Password = *
  
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].
+
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 a GPS receiver==
 
==Using the card as a GPS receiver==
Line 57: Line 57:
 
  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 67: Line 67:
 
  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 <tt>gpsd</tt> interface on /dev/ttyACM2.
+
or better yet, start <tt>gpsd</tt> interface on <tt>/dev/ttyACM2</tt>.
  
 
==Scripting everything==
 
==Scripting everything==
  
First you need to install the "ppp", "wvdial", "sysfsutils" and "gpsd" packages with
+
First you need to install the '''ppp''', '''wvdial''', '''sysfsutils''' and '''gpsd''' packages with
  
 
  apt-get install ppp wvdial sysfsutils gpsd
 
  apt-get install ppp wvdial sysfsutils gpsd
  
I use sysfsutils to completely power off the F3507g card on boot, in order to save power (this is worth doing because on my {{X301}} running the 3G device increases the power consumption by more than 10%. I have not tested how much more power is used if the device is not online and configured in low power mode, but it reasonable to assume it is more than zero). 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:
+
I use sysfsutils to completely power off the F3507g card on boot, in order to save power (this is worth doing because on my {{X301}} running the 3G device increases the power consumption by more than 10%. I have not tested how much more power is used if the device is not online and configured in low power mode, but it reasonable to assume it is more than zero). I also power off the bluetooth, disable the white LED in the power button, and instruct the kernel to use the <tt>noop</tt> scheduler for the SSD. Edit <tt>/etc/sysfs.conf</tt> to look like this:
  
 
  block/sda/queue/scheduler = noop
 
  block/sda/queue/scheduler = noop
Line 94: Line 94:
 
  class/leds/tpacpi::power/brightness = 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/10sysfsutils":
+
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 <tt>/etc/pm/sleep.d/10sysfsutils</tt>:
  
 
  #!/bin/bash
 
  #!/bin/bash
Line 107: Line 107:
 
  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/sysfsutils</tt>. This script will be called when the laptop wakes up and it will power-off the 3G WWAN device again.
  
Now we need to set up "wvdial" to work with the 3G WWAN device. Edit /etc/wvdial.conf to look like this:
+
Now we need to set up <tt>wvdial</tt> to work with the 3G WWAN device. Edit <tt>/etc/wvdial.conf</tt> to look like this:
  
 
  [Dialer 3G]
 
  [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#
Line 119: Line 119:
 
  Password = *
 
  Password = *
  
Edit /etc/ppp/peers/wvdial to look like this:
+
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].
 +
 
 +
Edit <tt>/etc/ppp/peers/wvdial</tt> to look like this:
  
 
  noauth
 
  noauth
Line 128: Line 130:
 
  novjccomp
 
  novjccomp
  
Create a file called "/usr/local/bin/F3507g" containing the following:
+
Create a file called <tt>/usr/local/bin/F3507g</tt> containing the following:
  
 
  #!/bin/sh
 
  #!/bin/sh
Line 169: Line 171:
 
  }
 
  }
  
Make this script executable with "chmod a+x /usr/local/bin/F3507g".
+
Make this script executable with <tt>chmod a+x /usr/local/bin/F3507g</tt>.
  
Append the following lines to your /etc/network/interfaces file
+
Append the following lines to your <tt>/etc/network/interfaces</tt> file
  
 
  iface 3G inet wvdial
 
  iface 3G inet wvdial
Line 182: Line 184:
 
  post-down . /usr/local/bin/F3507g; turnoff_F3507g; powerdown_F3507g
 
  post-down . /usr/local/bin/F3507g; turnoff_F3507g; powerdown_F3507g
  
Now 3G connection could be started in the same way as you start any other network interface, just by saying "sudo ifup 3G". To shut it down, say "sudo ifdown 3G". Similarly, GPS interface is started by "sudo ifup gps" and turned off by "sudo ifdown gps". 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.
+
Now 3G connection could be started in the same way as you start any other network interface, just by saying <tt>sudo ifup 3G</tt>. To shut it down, say <tt>sudo ifdown 3G</tt>. Similarly, GPS interface is started by <tt>sudo ifup gps</tt> and turned off by <tt>sudo 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.
  
 
==Other thoughts==
 
==Other thoughts==
While "AT+CFUN=*" and "AT+CPIN=*" are pretty standard commands for wireless modems and are well-documented (e.g. [http://developer.sonyericsson.com/getDocument.do?docId=65054 here] and [http://www.sierrawireless.com/resources/documents/support/2130617_Supported_AT_Command_Reference_Rev_2.1.pdf here]), 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 [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 the 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 [http://www.natisbad.org/E4300/Dell_Wireless_5530_AT_cmd_ref.html project] aiming to summarize all of this and document all AT-commands for F3507g.
+
While <tt>AT+CFUN=*</tt> and <tt>AT+CPIN=*</tt> are pretty standard commands for wireless modems and are well-documented (e.g. [http://developer.sonyericsson.com/getDocument.do?docId=65054 here] and [http://www.sierrawireless.com/resources/documents/support/2130617_Supported_AT_Command_Reference_Rev_2.1.pdf here]), 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 the 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.
  
 
==Related Links==
 
==Related Links==

Revision as of 19:15, 9 April 2009

Even though Ericsson claims that their F3507g MiniPCIe WWAN/GPS card (USB ID 0bdb:1900 and 0bdb:1902) is compartible with Linux, they do not provide any information how to make this card work. Here are some basics:

  • 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 USB interface, and is served by cdc_acm kernel module (apparently, for a while the option USB-serial driver claimed USB ID 0bdb:1900, but this was wrong, and as of kernel 2.6.28.9 that commit was reversed. You may need to blacklist the option driver to make sure it doesn't happen).
  • 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 appears that all three TTY's have identical funcionality. 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.

Turning the card on

Before the card can be used, you have to turn it on. It is done by sending

AT+CFUN=1

to /dev/ttyACM1. The responce should be

OK

You can do it with any terminal terminal program like minicom. But we are not done yet. If your SIM is protected by a PIN-code, we may have to unlock it. This is done by sending

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 cannot be used for communication until it responds with

+PACSP0

Don't try to do anything until you see it.

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 "0" to /sys/devices/platform/thinkpad_acpi/wwan_enable (to turn off) and then "1" to /sys/devices/platform/thinkpad_acpi/wwan_enable (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 the pseudo-TTY's /dev/ttyACM* . The other way is supposedly more efficient as it does not require running pppd, and the catch is that it requires patching the kernel. But since this driver has not yet been accepted to the kernel, and there are reports that it is not (yet) significantly more efficient, we will stick with 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.

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.

Scripting everything

First you need to install the ppp, wvdial, sysfsutils and gpsd packages with

apt-get install ppp wvdial sysfsutils gpsd

I use sysfsutils to completely power off the F3507g card on boot, in order to save power (this is worth doing because on my X301 running the 3G device increases the power consumption by more than 10%. I have not tested how much more power is used if the device is not online and configured in low power mode, but it reasonable to assume it is more than zero). 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:

block/sda/queue/scheduler = noop
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/10sysfsutils:

#!/bin/bash
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/sysfsutils. This script will be called when the laptop wakes up and it will power-off the 3G WWAN device again.

Now we need to set up wvdial to work with the 3G WWAN device. Edit /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.

Edit /etc/ppp/peers/wvdial to look like this:

noauth
name wvdial
usepeerdns
noccp
novj
novjccomp

Create a file called /usr/local/bin/F3507g containing the following:

#!/bin/sh

CONTROL_DEVICE=/dev/ttyACM1
GPS_DEVICE=/dev/ttyACM2

powerup_F3507g () {
        echo -n "Powering up F3507g card.."
        echo 1 > /sys/devices/platform/thinkpad_acpi/wwan_enable
        while [ ! -c $CONTROL_DEVICE ]; do sleep 0.5; echo -n "."; done
        echo "done"
}

turnon_F3507g () {
        echo -n "Turning on F3507g card..."
        /usr/sbin/chat -v "" "AT+CFUN=1" "+PACSP0" "AT" "OK" > $CONTROL_DEVICE < $CONTROL_DEVICE
        echo "done"
}

turnoff_F3507g () {
        echo -n "Turning off F3507g card..."
        killall gpsd
        /usr/sbin/chat -v "" "AT+CFUN=4" "OK" > $CONTROL_DEVICE < $CONTROL_DEVICE
        echo "done"
}

powerdown_F3507g () {
        echo -n "Powering down F3507g card.."
        echo 0 > /sys/devices/platform/thinkpad_acpi/wwan_enable
        while [ -c $CONTROL_DEVICE ]; do sleep 0.5; echo -n "."; done
        echo "done"
}

turnon_GPS () {
        echo -n "Starting NMEA stream on $GPS_DEVICE..."
        /usr/sbin/chat -v "" "AT*E2GPSCTL=1,3,1\r" "OK" "AT*E2GPSNPD\r" "GPGGA" > $GPS_DEVICE < $GPS_DEVICE
        gpsd $GPS_DEVICE
        echo " done"
}

Make this script executable with chmod a+x /usr/local/bin/F3507g.

Append the following lines to your /etc/network/interfaces file

iface 3G inet wvdial
pre-up . /usr/local/bin/F3507g; powerup_F3507g; turnon_F3507g
post-down . /usr/local/bin/F3507g; turnoff_F3507g; powerdown_F3507g
provider 3G

iface gps inet manual
pre-up . /usr/local/bin/F3507g; powerup_F3507g; turnon_F3507g; turnon_GPS
post-down . /usr/local/bin/F3507g; turnoff_F3507g; powerdown_F3507g

Now 3G connection could be started in the same way as you start any other network interface, just by saying sudo ifup 3G. To shut it down, say sudo ifdown 3G. Similarly, GPS interface is started by sudo ifup gps and turned off by sudo 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.

Other thoughts

While AT+CFUN=* and AT+CPIN=* are pretty standard commands for wireless modems and are well-documented (e.g. here and here), 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 the 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.

Related Links

Bugs

  • Ubuntu: works natively only on kernels <= 2.6.27-10-generic. > 2.6.27-10-generic kernels will not power on the device appropriately in my testing. See Ubuntu bug here.

Models