<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openmoko.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Henrikp&amp;feedformat=atom</id>
		<title>Openmoko - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Henrikp&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/Henrikp"/>
		<updated>2013-05-26T06:15:58Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GSM_network_registration</id>
		<title>GSM network registration</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GSM_network_registration"/>
				<updated>2008-03-17T14:15:08Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We'd like to know the real network registration status by our NEO devices in the world.  Please provide some information about your NEO status!  The question list as below:&lt;br /&gt;
&lt;br /&gt;
1. What NEO device you are using? GTA01 or GTA02&lt;br /&gt;
&lt;br /&gt;
2. Where is your location and what is your network provider? eg. T-Mobile, San Francisco in USA&lt;br /&gt;
&lt;br /&gt;
3. When you boot the NEO, how long it takes to register the network? eg. in normal case, it should be able to register to a network in 1~2 minutes immediately.&lt;br /&gt;
&lt;br /&gt;
4. What is your GSM firmware version? you can get this number by an AT command. Using SSH to your NEO, then type this command:&lt;br /&gt;
[http://wiki.openmoko.org/wiki/USB_Networking How to use SSH] [http://wiki.openmoko.org/wiki/Gsmd  How to use libgsmd-tool]&lt;br /&gt;
root@fic-gta02:~# libgsmd-tool -m atcmd&lt;br /&gt;
 AT+CGMR&lt;br /&gt;
 STR=`AT+CGMR'&lt;br /&gt;
 RSTR=`+CGMR: &amp;quot;HW: GTA02BV5, GSM: gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-Moko6&amp;quot;'&lt;br /&gt;
&lt;br /&gt;
5. What is your IMEI code? by this AT command like previous steps.&lt;br /&gt;
 AT+CGSN&lt;br /&gt;
 STR=`AT+CGSN' &lt;br /&gt;
 RSTR=`+CGSN: 000000000000000'&lt;br /&gt;
&lt;br /&gt;
6. if NEO takes over 3 minutes to register to the network or it just re-register to the network again and again. Please attach your gsm log file ('/tmp/gsm.log') to our bugzilla, we already created a bug for [http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=1024 this issue].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|  Owner    ||   Location   |||   Network Provider ||  Device   ||   firmware   ||   IMEI  ||   Status ||   GSM log&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:erin_yueh@openmoko.com  Erin Yueh]   ||   Taipei, Taiwan    ||   TW mobile     ||    GTA02BV5  ||  Moko6   ||   NO   ||   Normal, can register to the network immediately||   no&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:marcus.bauer@gmail.com  Marcus Bauer]   ||   Nice, France    ||   Orange     ||   GTA01Bv4 ||  Moko4   ||   YES   ||   Registers immediately and stays registered for ~10 minutes before the re-registering loop starts once per minute||   [http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=554&amp;amp;action=view log]&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:ahvenas@gmail.com  Henrik Pihl]   ||   Kuressaare, Estonia    ||   Elisa     ||    GTA01Bv4  ||  Moko4   ||   YES   ||   Normal, can register to the network immediately, but starts reconnecting to the network in the first minutes.||   [http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=555&amp;amp;action=view log]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-03-11T20:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Some APN names for reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need to have [[GSM]] parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
crtscts &lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
defaultroute&lt;br /&gt;
usepeerdns&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
holdoff 3&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
lcp-echo-failure 8&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
persist&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
lcp-echo-failure 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This options where mentioned before with that strange comment. Mine worked fine for me without those.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# very long timeouts (unwise?)&lt;br /&gt;
lcp-echo-interval 300&lt;br /&gt;
lcp-echo-failure 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you'll need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 3\&lt;br /&gt;
	&amp;quot;&amp;quot; ATZ\&lt;br /&gt;
	OK-\\k\\k\\k\\d+++ATH-OK ATE1\&lt;br /&gt;
	OK AT+CFUN=0\&lt;br /&gt;
	OK \\dAT+CFUN=1\&lt;br /&gt;
	ERROR AT+CPIN\?\&lt;br /&gt;
	&amp;quot;+CPIN: READY-AT+CPIN=\&amp;quot;2222\&amp;quot;-OK&amp;quot; AT\&lt;br /&gt;
	TIMEOUT 60\&lt;br /&gt;
	OK AT+COPS\&lt;br /&gt;
	OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
	OK ATD*99#\&lt;br /&gt;
	CONNECT \d\c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; \\k\\k\\k\\d+++ATH\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
=== Required fixes ===&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting pppd ===&lt;br /&gt;
&lt;br /&gt;
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!&lt;br /&gt;
&lt;br /&gt;
To dial in - and get verbose output on the terminal - use pppd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GSM</id>
		<title>Manually using GSM</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GSM"/>
				<updated>2008-03-11T06:28:56Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Powering up the GSM Modem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''When men were real men and typed their own AT commands...'''&lt;br /&gt;
&lt;br /&gt;
Thankfully, this may now be partially obsolete.&lt;br /&gt;
The [[Dialer|dialer]] now works!&lt;br /&gt;
&lt;br /&gt;
This is a short guide how to manually get GSM going.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* GTA01Bv2 or GTA01Bv3 with very recent u-boot bootloader, providing usbtty (serial over USB) support)&lt;br /&gt;
* Do not connect any debug board!&lt;br /&gt;
&lt;br /&gt;
== Walk-Through ==&lt;br /&gt;
&lt;br /&gt;
=== Booting the system ===&lt;br /&gt;
&lt;br /&gt;
* Make sure the rootfs you use has 'auto usb0' in /etc/network/interfaces&lt;br /&gt;
* Configure the host's usb0 interface to 192.168.0.200 netmask 255.255.255.0 See [[USB_Networking]]&lt;br /&gt;
* ssh to root@192.168.0.201&lt;br /&gt;
&lt;br /&gt;
=== Disabling the getty ===&lt;br /&gt;
&lt;br /&gt;
Our default images all have a getty running on /dev/ttySAC0, please edit /etc/inittab and disable the getty on that port&lt;br /&gt;
&lt;br /&gt;
=== Reducing the loglevel ===&lt;br /&gt;
&lt;br /&gt;
{{note|You don't need this in kernel builds with patchset &amp;amp;ge; 1288}}&lt;br /&gt;
&lt;br /&gt;
To keep the kernel from writing to /dev/ttySAC0, you need to use &amp;lt;code&amp;gt;dmesg -n1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Powering up the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
* verify there is no getty or any other app running on /dev/ttySAC0 &lt;br /&gt;
 root@fic-gta01:~$ lsof | grep ttySAC0&lt;br /&gt;
&lt;br /&gt;
* If gsmd is using the GSM modem, shut it down with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta01:~$ /etc/init.d/gsmd stop &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* power-up the GSM Modem&lt;br /&gt;
 root@fic-gta01:~$ echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Connecting to GSM Modem (using socat) ===&lt;br /&gt;
&lt;br /&gt;
* If you have the command socat (built and installed):&lt;br /&gt;
 root@fic-gta01:~$ socat - file:/dev/ttySAC0,crtscts,crnl&lt;br /&gt;
 AT-Command Interpreter ready&lt;br /&gt;
&lt;br /&gt;
=== Connecting to GSM Modem (using cu) ===&lt;br /&gt;
&lt;br /&gt;
If you don't have socat, you can use cu, although it has problems with file permissions and hardware flow control.&lt;br /&gt;
&lt;br /&gt;
* change permissions on ttySAC0&lt;br /&gt;
 root@fic-gta01:~$ chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
* setup /usr/spool/uucp&lt;br /&gt;
 root@fic-gta01:~$ mkdir -p /usr/spool/uucp&lt;br /&gt;
 root@fic-gta01:~$ chown uucp.uucp /usr/spool/uucp&lt;br /&gt;
* enable CTS/RTS flow control&lt;br /&gt;
 root@fic-gta01:~$ stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
* access the GSM Modem UART&lt;br /&gt;
 root@fic-gta01:~$ cu -l /dev/ttySAC0&lt;br /&gt;
 Connected.&lt;br /&gt;
 AT-Command Interpreter Ready&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
''If it hangs on &amp;quot;Connected&amp;quot; message then probably your device has a non-working GSM modem - check [http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=256 Bug #256], also you may want to try powering off the modem then on again as this worked for me''&lt;br /&gt;
&lt;br /&gt;
'''cu seems to have problems with the hardware flow control. The one way I always managed to get GSM working is to start cu first and then on a different console issue the stty command.'''&lt;br /&gt;
--[[User:DanielWillmann|DanielWillmann]] 01:15, 20 March 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
* close the connection with &amp;lt;Return&amp;gt;~~.&amp;lt;Return&amp;gt;&lt;br /&gt;
 OK&lt;br /&gt;
 ~[fic-gta01].&lt;br /&gt;
 &lt;br /&gt;
 Disconnected.&lt;br /&gt;
 root@fic-gta01:/$&lt;br /&gt;
&lt;br /&gt;
=== Using it manually ===&lt;br /&gt;
==== Registering with the Network ====&lt;br /&gt;
&lt;br /&gt;
* enter the following [[Hardware:AT_Commands]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATE1&lt;br /&gt;
OK&lt;br /&gt;
AT+CFUN=1&lt;br /&gt;
ERROR&lt;br /&gt;
AT+CPIN=&amp;quot;....&amp;quot;&lt;br /&gt;
OK&lt;br /&gt;
AT+COPS&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== List available carriers ====&lt;br /&gt;
&lt;br /&gt;
This can take a few seconds to process but will list the available carriers&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+COPS=?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Answering an incoming call ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RING&lt;br /&gt;
ATA&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Dialling an outgoing call ====&lt;br /&gt;
&lt;br /&gt;
To actually be able to talk you have to configure your audio accordingly&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta01:~$ cd /etc/alsa/&lt;br /&gt;
root@fic-gta01:/etc/alsa$ wget http://opensource.wolfsonmicro.com/~gg/neo1973/gsmheadset.working.state&lt;br /&gt;
root@fic-gta01:/etc/alsa$ alsactl -f /etc/alsa/gsmheadset.working.state restore&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Up the &amp;quot;Amp right&amp;quot; volume to hear the speaker on both ears, then dial (note the ''';''' at the end of the dial string, this signifies a voice call, if you omit the ; it is regarded as a data call).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATD012340234;   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you get NO CARRIER, try...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATD+xxyzzzzzzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ie, ATD+&amp;lt;country_code&amp;gt;&amp;lt;area_code&amp;gt;&amp;lt;phone_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hanging up ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ATH&lt;br /&gt;
OK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using [[gsmd]] ===&lt;br /&gt;
&lt;br /&gt;
You can use the [[gsmd]] and [[Gsmd#libgsmd-tool | libgsmd-tool]] programs to have a slightly more high-level interface to the GSM Modem.  It's still console based, though.&lt;br /&gt;
&lt;br /&gt;
For further instructions, see [[gsmd]]&lt;br /&gt;
&lt;br /&gt;
=== Using tui ===&lt;br /&gt;
&lt;br /&gt;
Tui (available from [http://www.sf.net/projects/tui sourceforge]) is able to do all this. It is still text-based, but input-rxvt can take data from touchscreen, so you can actually do the calls using your finger. It also plays wav file on incoming call, so it is theoretically usable. It even does caller id.&lt;br /&gt;
&lt;br /&gt;
=== Manually using GPRS ===&lt;br /&gt;
&lt;br /&gt;
See [[Manually using GPRS]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GSM}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem</id>
		<title>Neo 1973 and Neo FreeRunner gsm modem</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem"/>
				<updated>2008-03-10T19:12:26Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Avoiding Infinite Echos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about the [[Neo1973]] GTA01 (and GTA02) GSM Modem, based on the Ti Calypso chipset.&lt;br /&gt;
&lt;br /&gt;
== [[Hardware:AT Commands|AT command]] interface ==&lt;br /&gt;
&lt;br /&gt;
=== Sending Commands ===&lt;br /&gt;
To send commands to the GSM modem, you may use &lt;br /&gt;
cu -l /dev/ttySAC0&lt;br /&gt;
or use gsmd and libgsmd-tool for a less direct method.&lt;br /&gt;
&lt;br /&gt;
If you connect directly (via cu) you must `chown uucp.uucp /dev/ttySAC0` first since cu is picky about permissions.&lt;br /&gt;
&lt;br /&gt;
libgsmd-tool is less functional than the direct raw connection to the modem.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
Note: If you use cu -l /dev/ttySAC0 to enter commands, type &amp;quot;~.&amp;quot; to quit &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard AT commands ===&lt;br /&gt;
The GSM modem follows GSM [http://www.3gpp.org/ftp/Specs/html-info/0705.htm TS07.05], [http://www.3gpp.org/ftp/Specs/html-info/0707.htm 07.07] and [http://www.3gpp.org/ftp/Specs/html-info/0710.htm 07.10] very closely.&lt;br /&gt;
&lt;br /&gt;
[http://www.3gpp.org/specs/numbering.htm 3gpp.org] has information about 3G and GSM specifications&lt;br /&gt;
&lt;br /&gt;
=== TI proprietary AT commands ===&lt;br /&gt;
&lt;br /&gt;
there are a few of them, but none of them are really required for regular operation of the device.  Due to NDA issues, OpenMoko cannot provide a reference documentation to those commands.  Using the standards-compliant '''AT+CLAC''', you will notice that the non-standard commands also show up in the command listing.&lt;br /&gt;
&lt;br /&gt;
You will also notice that those non-standard commands are prefixed with '''AT%''' rather than '''AT+''' for the standards-compliant commands.&lt;br /&gt;
&lt;br /&gt;
Thus, we welcome our user and developer community to play with those commands and document them here.  Since we never have released any NDA documentation to our community, there is no legal issue.&lt;br /&gt;
&lt;br /&gt;
Note that the syntax and the interpretation of the output of the commands listed here are only educated guesses and should not be relied on.  Part of the proprietary command set has identical or similar usage as on other modems in the market, some of which have fully opened specifications and information about these commands can be taken from their datasheets (some known similar modems with open specs: ''BenQ M22A'' and ''M23A'', ''Enfora Enabler-G [http://www.enfora.com/index.cgi?CONTENT_ID=376&amp;amp;User:LANGUAGE=en II] / [http://www.enfora.com/index.cgi?CONTENT_ID=377&amp;amp;User:LANGUAGE=en III]'' and ''SPT 1834'').&lt;br /&gt;
&lt;br /&gt;
==== AT%VER ====&lt;br /&gt;
Prints the firmware component versions.&lt;br /&gt;
&lt;br /&gt;
The modem's response looks like this on an un-updated phase-0 [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   15:11:24 17/04/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      10:21:37 28/03/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      10:25:01 28/03/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      10:25:12 28/03/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      10:18:09 28/03/07&lt;br /&gt;
 %VER: t30 a086 ** NONE **      10:29:01 28/03/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phase 1 phone, produced start of september:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   12:32:56 24/08/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      14:07:10 08/06/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      14:07:46 08/06/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      14:11:52 08/06/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      14:13:01 08/06/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      14:13:54 08/06/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      14:14:20 08/06/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      14:15:52 08/06/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      14:06:38 08/06/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      14:10:36 08/06/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      14:12:32 08/06/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      14:12:40 08/06/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      14:08:06 08/06/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv3|GTA01Bv3]] phase 0 phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   10:46:06 29/08/06&lt;br /&gt;
 %VER: cc a086 non_clearcase   14:53:59 28/08/06&lt;br /&gt;
 %VER: dl a086 non_clearcase   14:54:40 28/08/06&lt;br /&gt;
 %VER: mm a086 non_clearcase   14:59:25 28/08/06&lt;br /&gt;
 %VER: rr a086 non_clearcase   15:00:11 28/08/06&lt;br /&gt;
 %VER: sim a086 non_clearcase   15:00:57 28/08/06&lt;br /&gt;
 %VER: sms a086 non_clearcase   15:01:23 28/08/06&lt;br /&gt;
 %VER: ss a086 non_clearcase   15:02:22 28/08/06&lt;br /&gt;
 %VER: alr a086 non_clearcase   14:53:19 28/08/06&lt;br /&gt;
 %VER: l2r a086 non_clearcase   14:58:02 28/08/06&lt;br /&gt;
 %VER: ra a086 non_clearcase   14:59:50 28/08/06&lt;br /&gt;
 %VER: rlp a086 non_clearcase   14:59:56 28/08/06&lt;br /&gt;
 %VER: fad a086 non_clearcase   14:55:04 28/08/06&lt;br /&gt;
 %VER: t30 a086 non_clearcase   15:02:27 28/08/06&lt;br /&gt;
&lt;br /&gt;
The second column lists firmware component names (e.g. aci = AT Command Interface). The third column is the user name of the engineer who last modified given component. The rightmost column is probably the last time someone worked on it (Please note that the name 'sean' here is not Sean Moss-Pultz :)  while a086 is an anonymous TI engineer's nick, meaning that the component has not been modified at FIC).&lt;br /&gt;
&lt;br /&gt;
==== AT%A ====&lt;br /&gt;
Print values from an ADC.&lt;br /&gt;
&lt;br /&gt;
This command is not listed in AT+CLAC output but it is triggered by any input that starts with AT%A except AT%ALS (''Alternative Line Service'') and AT%ATR, which are other proprietary AT commands.  So for example AT%ABCD,HELLO will also run this commands.  On my Neo modem it prints a line containing nine values of the form ADC &amp;lt;number&amp;gt; = &amp;lt;value&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 AT%A&lt;br /&gt;
 EXT: I&lt;br /&gt;
 ADC 0 = e19, ADC 1 = 0, ADC 2 = d, ADC 3 = 6ea, ADC 4 = a25, ADC 5 = 9fc, ADC 6 = 96d, ADC 7 = 0, ADC 8 = 6&lt;br /&gt;
&lt;br /&gt;
It would seem there's an ADC (analog-to-digital converter) module in the modem with nine input lines connected to it and the values on these lines are reported by this command in hexadecimal format.  The values change over time.  Inputs 1 and 7 always show zero on my modem, input 1 value changes slightly (+/- 20), while values on inputs 3, 4, 5, 6 and 8 change seemingly randomly in the range 0x000 - 0xfff (it would seem the chip is 12-bit).&lt;br /&gt;
&lt;br /&gt;
==== AT%NRG ====&lt;br /&gt;
The AT%NRG (''Network registration and service selection'') is an expansion of the AT+COPS command.  It allows specifying the service state of the registration, in addition to AT+COPS functionality. It doesn't however allow listing all present operators (use AT+COPS for this).&lt;br /&gt;
&lt;br /&gt;
==== AT%EM ====&lt;br /&gt;
Execution of ''Engineering Mode'' commands.  Allows viewing the information accessible to the modem but not available through standard GSM AT commands set such as detailed information on the current Serving Cell (the one we're registered with), its neighbouring cells, the GPRS/EDGE availability and SIM card data.&lt;br /&gt;
&lt;br /&gt;
Citing Enfora Inc. Application Note EDG0108TN01:&lt;br /&gt;
''The purpose of Engineering Mode (EM) is to provide means to observe the behavior of the mobile station and the settings of the network as counterpart and therefore defines a lot of possibilities to analyze the network. The EM can be used for observation of a defined data set during functional test and field test.''&lt;br /&gt;
&lt;br /&gt;
''Warning: The display of certain parameters is dependent on the wireless network sending the correct information in the System Information Packets. There is no guaranty that the information is always forwarded from the network. At times data may not be present to display in the Engineering Mode responses.''&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
 AT%EM=&amp;lt;mode&amp;gt;,&amp;lt;command&amp;gt;&lt;br /&gt;
Allowed &amp;lt;mode&amp;gt; values:&lt;br /&gt;
* 2 - AT command mode&lt;br /&gt;
* 3 - PCO mode&lt;br /&gt;
I only describe the AT mode commands here.  Commands are in range 1 to 13:&lt;br /&gt;
 AT%EM=2,1  Serving Cell Information&lt;br /&gt;
 AT%EM=2,2  Serving Cell GPRS Information&lt;br /&gt;
 AT%EM=2,3  Neighbour Cell Information&lt;br /&gt;
 AT%EM=2,4  Location and Paging Parameters&lt;br /&gt;
 AT%EM=2,5  PLMN Parameters&lt;br /&gt;
 AT%EM=2,6  Ciphering, Hopping, DTX Parameters&lt;br /&gt;
 AT%EM=2,7  Power Parameters&lt;br /&gt;
 AT%EM=2,8  Identity Parameters&lt;br /&gt;
 AT%EM=2,9  Firmware components versions&lt;br /&gt;
 AT%EM=2,10 GMM Information&lt;br /&gt;
 AT%EM=2,11 GRLC Information&lt;br /&gt;
 AT%EM=2,12 AMR Configuration Information&lt;br /&gt;
 AT%EM=2,13 PDP Information&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell Information (2,1) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;afrcn&amp;gt;,&amp;lt;c1&amp;gt;,&amp;lt;c2&amp;gt;,&amp;lt;rxlev&amp;gt;,&amp;lt;bsic&amp;gt;,&amp;lt;cell_id&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;txlev&amp;gt;,&amp;lt;tn&amp;gt;,&amp;lt;rlt&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;rxlev_f&amp;gt;,&amp;lt;rxlev_s&amp;gt;,&amp;lt;rxqual_f&amp;gt;,&amp;lt;rxqual_s&amp;gt;,&amp;lt;lac&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;cbq&amp;gt;,&amp;lt;cell_type_ind&amp;gt;,&amp;lt;vocoder&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || Current Channel Number ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentifier ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || dsc || Downlink Signaling Counter || current counter value&lt;br /&gt;
|-&lt;br /&gt;
|8  || txlev || Transmit Power Level ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || tn || Timeslot Number ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || rlt || Radio Link Timeout Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || rxlev_f || Received Field Strength full ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || rxlev_s || Received Field Strength sub ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || rxqual_f || Received Quality full ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || rxqual_s || Received Quality sub ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|19 || Cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|20 || vocoder || Vocoder || Sig/speech/efr/amr/14.4/9.6/4.8/2.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
According to http://www.qrctech.com/freq_chart_24x36.pdf, frequencies can be calculated using the arfcn field like this:&lt;br /&gt;
 if 172 &amp;lt; arfcn &amp;lt;  252 then freq = 869 + (arfcn -127) x 0.2 MHz    # 850 band &lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  811 then freq = 1930 + (arfcn - 511) x 0.2 MHz  # 1900 band&lt;br /&gt;
 if   1 &amp;lt; arfcn &amp;lt;  124 then freq = 935 + (arfcn * 0.2) MHz         # 900 band (original alloc)&lt;br /&gt;
 if 974 &amp;lt; arfcn &amp;lt; 1023 then freq = 925 + (arfcn - 974) x 0.2 MHz   # 900 band E-GSM&lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  886 then freq = 1805 + (arfcn - 511) x 0.2 MHz  # 1800 band&lt;br /&gt;
&lt;br /&gt;
Notice the 1800 and 1900 bands have the same channel ids and nearly the same algorithm with a different starting point.&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell GPRS Information (2,2) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;nts&amp;gt;,&amp;lt;nmo&amp;gt;,&amp;lt;spgc_ccch_sup&amp;gt;,&amp;lt;priority_access_thr&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;rac&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;c31&amp;gt;,&amp;lt;c32&amp;gt;,&amp;lt;band_ind&amp;gt;,&amp;lt;pfc_supp_n_w&amp;gt;,&amp;lt;ccn_mode_sts&amp;gt;,&amp;lt;Psi_sts_suppt&amp;gt;,&amp;lt;edge_support&amp;gt;,&amp;lt;epcr_support&amp;gt;,&amp;lt;bep_period&amp;gt;,&amp;lt;bss_paging_coord&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || nts || PCCCH_TIMESLOT || Number of downlink timeslots&lt;br /&gt;
|-&lt;br /&gt;
|2  || nmo || Network Mode of Operation ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || spgc_ccch_sup || Network Control-spgc_ccch_sup || Network support for split paging&lt;br /&gt;
|-&lt;br /&gt;
|4  || priority_access_thr || Network Control-Priority_Access_Threshold || packet access to the NW according to priority level&lt;br /&gt;
|-&lt;br /&gt;
|5  || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || dsc || Downlink Signal Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || c31 || Cell-reselect Criterion C31 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || c32 || Cell-reselect Criterion C32 ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || band_ind || Band Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || pfc_supp_n_w || PFC Support ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || ccn_mode_sts || CCN Mode ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Psi_sts_suppt || PSI Support ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || edge_support || EDGE Support ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || epcr_support || EPCR Support ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || bep_period || BEP Period ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || bss_paging_coord || BSS Paging ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Neighbour Cell Information (2,3) =====&lt;br /&gt;
The first line of response is of the format %EM: &amp;lt;number of cells listed&amp;gt;, where the maximum seems to be 6, one cell for each channel.  The next sixteen lines list the values of each of the parameters for each of the cells.&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Short name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || BCCH channel ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentity ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || frame_offset || Frame Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || time_alignmnt || Time Alignment ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|13  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|14  || cell_resel_offset || Cell-reselection Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || temp_offset || Temporary Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || rxlev_acc_min || Rxlen access min ||&lt;br /&gt;
|}&lt;br /&gt;
My Neo1973 reports:&lt;br /&gt;
 AT%EM=2,3&lt;br /&gt;
 %EM: 6&lt;br /&gt;
 763,766,771,778,780,773&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 73,46,54,51,13,12&lt;br /&gt;
 6753,10951,3531,0,1933,1924&lt;br /&gt;
 100,100,300,300,300,100&lt;br /&gt;
 80229,961995,0,1166923,0,2715553&lt;br /&gt;
 3504,724,0,3724,4,1112&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 2,2,2,2,2,2&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 10,10,10,10,10,10&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
===== Location and Paging Parameters (2,4) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;bs_pa_mfrms&amp;gt;,&amp;lt;t3212&amp;gt;,&amp;lt;mcc[0]&amp;gt;&amp;lt;mcc[1]&amp;gt;&amp;lt;mcc[2]&amp;gt;,&amp;lt;mnc[0]&amp;gt;&amp;lt;mnc[1]&amp;gt;&amp;lt;mnc[2]&amp;gt;,&amp;lt;tmsi&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || bs_pa_mfrms || BS PA MFRMS paging repeat period&lt;br /&gt;
|-&lt;br /&gt;
|2 || t3212 || Periodic location updating interval&lt;br /&gt;
|-&lt;br /&gt;
|3 || mcc || [http://en.wikipedia.org/wiki/Mobile_country_code Mobile Country Code]&lt;br /&gt;
|-&lt;br /&gt;
|4 || mnc || [http://en.wikipedia.org/wiki/Mobile_Network_Code Mobile Network Code]&lt;br /&gt;
|-&lt;br /&gt;
|5 || tmsi || [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] (in binary)&lt;br /&gt;
|}&lt;br /&gt;
The MCC and MNC values are the same values that are used to form the Mobile Operator names used by the standard AT+COPS and AT+COPN commands in numeric format.  The TMSI is the same number that [http://wiki.openmoko.org/wiki/GTA01_gsm_modem#Identity_Parameters_.282.2C8.29 AT%EM=2,8] gives, just in a different format.&lt;br /&gt;
&lt;br /&gt;
===== PLMN Parameters (2,5) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;no_creq_max&amp;gt;,&amp;lt;reest_flag&amp;gt;,&amp;lt;txpwr_max&amp;gt;,&amp;lt;rxlev_min&amp;gt;,&amp;lt;rel_cs&amp;gt;,&amp;lt;sgsnr_rel&amp;gt;,&amp;lt;mscr_rel&amp;gt;,&amp;lt;net_rel&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || no_creq_max || Max. number or retries for channel requests&lt;br /&gt;
|-&lt;br /&gt;
|2 || reest_flag || Re-establishment Flag&lt;br /&gt;
|-&lt;br /&gt;
|3 || txpwr_max || MS TXPWR MAX CCCH&lt;br /&gt;
|-&lt;br /&gt;
|4 || rxlev_min || Rxlev_access_min&lt;br /&gt;
|-&lt;br /&gt;
|5 || rel_cs || Release Cause (only the last release cause is remembered)&lt;br /&gt;
|-&lt;br /&gt;
|6 || sgsnr_rel || SGSNR Release&lt;br /&gt;
|-&lt;br /&gt;
|7 || mscr_rel || MSCR Release&lt;br /&gt;
|-&lt;br /&gt;
|8 || net_rel || Network Release Info&lt;br /&gt;
|}&lt;br /&gt;
===== Ciphering, Hopping, DTX Parameters (2,6) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== Power Parameters (2,7) =====&lt;br /&gt;
The output consits of two lines, first line containing 12 comma-separated values and the second line 18 comma-separated values, such as:&lt;br /&gt;
 AT%EM=2,7&lt;br /&gt;
 %EM: 1,1,0,0,0,1,1,0,0,0,1,0&lt;br /&gt;
 6,0,0,0,0,1,1,1,4,0,0,0,0,1,0,0,0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
On the first line (called Classmark 2) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Revision Level ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || Controlled Early Classmark Sending || 1 means enabled&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/1 Encryption algorithm || 0 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || RF Power capability ||&lt;br /&gt;
|-&lt;br /&gt;
|5  || Pseudo-synchronisation capability || 1 means present&lt;br /&gt;
|-&lt;br /&gt;
|6  || SS Screening Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || SMS capability ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Frequency capability ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || Classmark 3 options || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|10 || CM Service Prompt || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|11 || A5/3 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|12 || A5/2 Encryption algorithm || 1 means available&lt;br /&gt;
|}&lt;br /&gt;
On the second line (called Classmark 3) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Multiband support ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || A5/7 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/6 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || A5/5 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|5  || A5/4 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|6  || Valid Radio capability 2 || ??&lt;br /&gt;
|-&lt;br /&gt;
|7  || Associated Radio capability 2 ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Valid Radio capability 1 || ??&lt;br /&gt;
|-&lt;br /&gt;
|9  || Associated Radio capability 1 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || Valid R Support || ??&lt;br /&gt;
|-&lt;br /&gt;
|11 || R Support || R-GSM Class&lt;br /&gt;
|-&lt;br /&gt;
|12 || Valid Multi-slot Class || ??&lt;br /&gt;
|-&lt;br /&gt;
|13 || Multi-slot Class ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Unicode 2 treatment ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || Extended Measurement capability || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|16 || Valid Switch-measure-value || ??&lt;br /&gt;
|-&lt;br /&gt;
|17 || Switch-measure-value ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || Switch-measure-switch-value ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Identity Parameters (2,8) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;imeisv&amp;gt;&lt;br /&gt;
 &amp;lt;imsi&amp;gt;&lt;br /&gt;
 &amp;lt;tmsi&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
The IMEISV line contains 20 numbers separated by commas, the numbers on positions 5 to 18 are the digits of the [http://en.wikipedia.org/wiki/IMEI IMEI] number as returned by AT+CGSN.  The second line contains another 20 numbers and the numbers on positions 5 to 19 form the digits of your SIM card's [http://en.wikipedia.org/wiki/IMSI IMSI] number, as returned by the AT+CIMI command. The last line contains the [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] number in plain format (ten digits).&lt;br /&gt;
&lt;br /&gt;
===== Firmware components versions (2,9) =====&lt;br /&gt;
Prints version information for different components of the modem's firmware.  The format and the scope of the information presented is identical to that in [[#AT%VER|AT%VER]] output with the exception that only a subset of all of the components are listed:&lt;br /&gt;
 AT%EM=2,9&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
===== GMM Information (2,10) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== GRLC Information (2,11) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== AMR Configuration Information (2,12) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== PDP Information (2,13) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem OpenMoko commands ===&lt;br /&gt;
&lt;br /&gt;
The Ti calypso GSM Modem firmware has been extended by OpenMoko specific AT&lt;br /&gt;
commands.  This page documents those commands.&lt;br /&gt;
&lt;br /&gt;
==== AT@POFF ====&lt;br /&gt;
&lt;br /&gt;
Powers off the GSM Modem. No parameters/options. &lt;br /&gt;
&lt;br /&gt;
==== AT@ST ====&lt;br /&gt;
&lt;br /&gt;
configure the sidetone level for voice calls generated inside the GSM Modem.  This should normally be off, since the sidetone in GTA01/GTA02 is generated inside the the [[WM8753|wolfson audio codec]].&lt;br /&gt;
&lt;br /&gt;
 AT@ST?&lt;br /&gt;
 +ST: -5&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=?&lt;br /&gt;
 @ST: (-26,-23,-20,-17,-14,-11,-8,-5,-2,1)&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=&amp;quot;-26&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
-26 means turn off the sidetone totally.&lt;br /&gt;
&lt;br /&gt;
==== AT@AUL ====&lt;br /&gt;
&lt;br /&gt;
audio table load.&lt;br /&gt;
&lt;br /&gt;
 AT@AUL=&amp;quot;0&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
 AT@AUL=?&lt;br /&gt;
 @AUL:(0)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This audio table is a collection of audio parameters for GSM calibrated by hardware engineers,&lt;br /&gt;
 &lt;br /&gt;
 Mode of microphone&lt;br /&gt;
 Gain of microphone&lt;br /&gt;
 FM PGA gain setting&lt;br /&gt;
 Bias setting for microphone&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 ANR parameters&lt;br /&gt;
 Level of side tone&lt;br /&gt;
 AEC parameters&lt;br /&gt;
 Echo suppressor&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 Gain of speaker&lt;br /&gt;
 Extra gain for AUDIO_SPEAKER_HANDSET and AUDIO_SPEAKER_HANDFREE modes&lt;br /&gt;
 Enable/Disable filter&lt;br /&gt;
 Enable/Disable high-pass filter&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 IIR uplink/downlink coefficients&lt;br /&gt;
 Limiter parameters&lt;br /&gt;
 Level of speaker&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 State of speaker&lt;br /&gt;
 Sampling frequency&lt;br /&gt;
 Level of volume &lt;br /&gt;
 AGC parameters&lt;br /&gt;
 DRC parameters&lt;br /&gt;
&lt;br /&gt;
The audio table will be stored in the flash file system within GSM modem, you can load it through this command. &lt;br /&gt;
&lt;br /&gt;
For now, we only provide one configuration, that is &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If AT@AUL=&amp;quot;0&amp;quot; responds with ERROR, it means there's no audio table existing and the GSM firmware will use default values.&lt;br /&gt;
&lt;br /&gt;
== Wakeup of CPU from GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== Problem description ===&lt;br /&gt;
&lt;br /&gt;
For power management reasons, it is absolutely neccessary that only the minimal &lt;br /&gt;
required parts of the device are powered at any given time.  If you carry your&lt;br /&gt;
Neo in your pocket, then all it should do is stay online with the GSM network, &lt;br /&gt;
and notify you in case there's an incoming call/sms (like other phones).&lt;br /&gt;
&lt;br /&gt;
During that time, the Neo1973 Application Processor (s3c24xx) is suspended,&lt;br /&gt;
i.e. not powered at all.  The SDRAM is in self-refresh mode.&lt;br /&gt;
&lt;br /&gt;
In this suspend mode (which Samsung calls by the funny name of POWER_OFF), the&lt;br /&gt;
processor is not able to receive any data from the GSM Modem.  Nor is it able&lt;br /&gt;
to detect incoming characters and wake up the CPU.  The only wake up sources&lt;br /&gt;
are a certain set of external interrupts (EINT).&lt;br /&gt;
&lt;br /&gt;
Thus, the GSM Modem GPIO line IO1 was connected with the Samsung EINT1, and&lt;br /&gt;
the GSM Modem firmware contains some special logic to generate an interrupt&lt;br /&gt;
(and thus wake-up event) to the CPU.&lt;br /&gt;
&lt;br /&gt;
=== Logic for problem solution ===&lt;br /&gt;
&lt;br /&gt;
Preconditions&lt;br /&gt;
# The default state of GSM Modem output IO1 is logical LOW.  &lt;br /&gt;
&lt;br /&gt;
Anytime the modem has pending data on the MODEM-UART channel, it&lt;br /&gt;
# checks if CTS_MODEM permits sending of data&lt;br /&gt;
## if CTS_MODEM permits sending of UART data, go to '4.2'&lt;br /&gt;
# [implicit: CTS_MODEM does not permit sending of UART data]&lt;br /&gt;
## set IO1 line to logical HIGH level&lt;br /&gt;
## buffer modem data [until buffer is full, after which data gets discarded]&lt;br /&gt;
# wait until CTS_MODEM permits sending of UART data   &lt;br /&gt;
# as soon as CTS_MODEM permits sending of UART data,&lt;br /&gt;
## set IO1 back to logical LOW level&lt;br /&gt;
## start sending of UART data&lt;br /&gt;
# once all data is transmitted, return to idle state.  When next data item is to be transmitted, start again from '1'&lt;br /&gt;
&lt;br /&gt;
=== Software implementation ===&lt;br /&gt;
&lt;br /&gt;
{{note|This is the plan, it has not been fully implemented yet}}&lt;br /&gt;
&lt;br /&gt;
# a firmware post may-16-2007 needs to be present in the gsm modem. This is true for all phones bought during phase 1 in the online shop.  However, I currently don't really know what firmware version was present in the GTA01Bv4 that we sent to phase 0.&lt;br /&gt;
# the suspend code probably still needs to correctly configure the RTS/CTS lines (i.e. put them in GPIO mode, and set them to their desired &amp;quot;don't send any more characters&amp;quot; level)&lt;br /&gt;
&lt;br /&gt;
So in this case, any data from the GSM modem will wake up the cpu for processing of that data.  The GSM modem has some internal buffer (I don't know how big right now) that should be sufficient for buffering the data until the CPU is alive.&lt;br /&gt;
&lt;br /&gt;
This also means that gsmd will eventually have to re-program the GSM modem to make sure only relevant unsolicited response codes are sent during suspend.  You usually don't want a signal level change to cause a CPU wake up, only things like incoming message / call.&lt;br /&gt;
&lt;br /&gt;
Upgrading the modem's firmware is technically possible but no proper software is currently legally available to users outside OpenMoko staff.&lt;br /&gt;
&lt;br /&gt;
== Power On, Power Off, and Reset of the GTA01 GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem Connections ===&lt;br /&gt;
&lt;br /&gt;
The GTA01 GSM modem communicates via a standard serial port to the host system.  The port operates at 115200 baud, 8 bits, no parity, and requires hardware flow control (RTSCTS) to operate.  Due to the fact that the host CPU has only a pair of serial ports but there are three devices that wish to use them, the GSM modem port is actually shared with the serial console (the third device is the GPS chip, which has exclusive use of the second serial port).&lt;br /&gt;
&lt;br /&gt;
A GPIO (General Purpose IO) pin controls the switching of the serial port between the console and the GSM modem.  Another GPIO is used to turn on the power to the GSM modem.  On older versions of the GTA01 a third GPIO could be used to reset the GSM modem; this signal proved to cause difficulties with the modem, and on all the GTA01 units sold this GPIO line is not connected.  The driver combines the the switching of the serial port to the GSM modem and the power-on signal to the modem into a single operation; the two cannot be controlled independently from user-space (at the time of this writing).&lt;br /&gt;
&lt;br /&gt;
It is important to note that the GPIO controlling the power-on of the GSM modem can only signal to the modem to turn itself on -- turning this GPIO off does not power off the GSM modem.  Instead, the '''AT@POFF''' sequence must be sent to the modem in order to perform a power off.&lt;br /&gt;
&lt;br /&gt;
Further complicating power control of the GTA01 GSM modem is the fact that the modem draws power from the battery/charger side of the power management circuitry -- this means that turning off the power to the host CPU on the GTA01 does not turn off the power to the modem.  In real-world operation, this means that unless the shutdown procedure for the host cpu's operating system issues the '''AT@POFF''' command to power off the GSM modem, the modem will remain turned on, drawing power from the battery even thought the host CPU is completely powered off.&lt;br /&gt;
&lt;br /&gt;
=== The Power-On Sequence ===&lt;br /&gt;
&lt;br /&gt;
The sharing of the serial port between the console and the GSM modem results in the need for a very specific power-on and power-off sequence.  Two major problems exist that must be avoided: infinite echos, and RTSCTS lockup.&lt;br /&gt;
&lt;br /&gt;
==== Avoiding Infinite Echos ====&lt;br /&gt;
&lt;br /&gt;
By default, the serial port is initialized in &amp;quot;echo&amp;quot; mode -- meaning that any characters sent to the serial port from the console will be echoed back to the console.  Upon power-up or reset, the GSM modem also echos back characters it receives.  So unless action is taken to disable the serial port's echo before the GSM modem is powered on, an infinite echo will result.  The modem will print the standard &amp;quot;Interpretor Ready&amp;quot; message, which will be echoed back to it by the serial port driver, the modem will echo that back to the serial port again (adding some error text to the message), the serial port will echo that again, and this continues until buffers in either or both the serial port and the modem fill up, and one of them ceases to transmit.&lt;br /&gt;
&lt;br /&gt;
Once in this situation, it is difficult for software (such as gsmd) to gain synchronization of commands and responses.&lt;br /&gt;
&lt;br /&gt;
The best solution is to avoid the problem to begin with.  Simply ensure that the serial port is set to &amp;quot;no-echo&amp;quot; mode before the GSM modem is enabled and powered up.  This sequence illustrates how this is normally done:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
(Note that the stty command argument syntax is somewhat unusual: &amp;quot;-echo&amp;quot; means &amp;quot;disable echo&amp;quot;, while &amp;quot;echo&amp;quot; means &amp;quot;enable echo&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==== Avoiding RTSCTS Lockup ====&lt;br /&gt;
&lt;br /&gt;
Hardware flow control uses additional signals in addition to the serial data in and out signals on the serial port to control the flow of the data.  Specifically, when hardware flow control is enabled, a given endpoint is expected to assert its RTS (Request To Send) line when it has data to transmit, and not transit that data until it sees a CTS (Clear TO Send) signal from the other end.  In this fashion, buffer overruns and data loss are avoided.&lt;br /&gt;
&lt;br /&gt;
The GSM modem requires that hardware flow control be enabled in order to communicate with the host.  However, the console lacks the RTS and CTS signals and thus is unable to communicate if hardware flow control is enabled.  But what really makes this problem serious is that if hardware flow control is enabled while the serial port is switched to the console, and the (small) transmit buffer for the port fills (such as a kernel log message), the Linux kernel will lock up, and become completely non-responsive.  There is no recovery mechanism for this other than to disconnect the device from its USB port or charger, and remove the battery.&lt;br /&gt;
&lt;br /&gt;
One solution to this is to disable the use of the serial port as a console for the kernel.  However, this is greatly inconvenient - the knowledgeable user with a debug board will usually wish to have a console available, and the novice user will probably wish to avoid changing the u-boot variables in order to disable the console.  So, a better approach is to avoid this situation by taking great care when powering-up, resetting, or powering-down the modem.  The following sequence illustrates how to switch the serial port back to the console mode safely:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Resetting the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
The GSM modem can be effectively reset by changing the state of the Power-On GPIO from off to on -- in other words, just disable the GSM modem and re-enable it.  The safe way to accomplish this is to combine the two sequences above:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
It should be noted that this reset sequence will also power up the modem if it is not enabled and powered up to begin with.  For this reason, the reset sequence above should be used for both power-up and reset purposes.&lt;br /&gt;
&lt;br /&gt;
=== Powering Off the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
Powering off the GSM modem on the GTA01 can only be done by issuing the '''AT@POFF''' command to the device.  In order to issue this command, it is usually necessary to return it to a known state.  So the normal mechanism is to issue the reset operation (above), wait for a short period of time (1 second seems to be sufficient), and send the '''AT@POFF''' command.  This should be followed by an additional short delay (to allow the text to be transmitted), and then the serial port can be switched back to the console.  The following script accomplishes this:&lt;br /&gt;
&lt;br /&gt;
 ### Reset the modem to place it in a known state&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 &lt;br /&gt;
 ### Now enable hardware flow control, and transmit the sequence&lt;br /&gt;
 stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
 sleep 1&lt;br /&gt;
 echo -e &amp;quot;AT@POFF\r&amp;quot; &amp;gt;/dev/ttySAC0&lt;br /&gt;
 sleep 1&lt;br /&gt;
 &lt;br /&gt;
 ### Finally, we disable flow control, and switch back the port&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Eliminating echo on the non-neo end of phone calls ===&lt;br /&gt;
Here is the modified /etc/gsmhandset.state that  eliminates echo during calls (at least for  [[User:Wurp]]): http://drivehq.com/file/df.aspx/publish/sagacis/PublicFolder/handset.sagacis.state&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem</id>
		<title>Neo 1973 and Neo FreeRunner gsm modem</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem"/>
				<updated>2008-03-10T19:12:11Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Avoiding RTSCTS Lockup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about the [[Neo1973]] GTA01 (and GTA02) GSM Modem, based on the Ti Calypso chipset.&lt;br /&gt;
&lt;br /&gt;
== [[Hardware:AT Commands|AT command]] interface ==&lt;br /&gt;
&lt;br /&gt;
=== Sending Commands ===&lt;br /&gt;
To send commands to the GSM modem, you may use &lt;br /&gt;
cu -l /dev/ttySAC0&lt;br /&gt;
or use gsmd and libgsmd-tool for a less direct method.&lt;br /&gt;
&lt;br /&gt;
If you connect directly (via cu) you must `chown uucp.uucp /dev/ttySAC0` first since cu is picky about permissions.&lt;br /&gt;
&lt;br /&gt;
libgsmd-tool is less functional than the direct raw connection to the modem.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
Note: If you use cu -l /dev/ttySAC0 to enter commands, type &amp;quot;~.&amp;quot; to quit &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard AT commands ===&lt;br /&gt;
The GSM modem follows GSM [http://www.3gpp.org/ftp/Specs/html-info/0705.htm TS07.05], [http://www.3gpp.org/ftp/Specs/html-info/0707.htm 07.07] and [http://www.3gpp.org/ftp/Specs/html-info/0710.htm 07.10] very closely.&lt;br /&gt;
&lt;br /&gt;
[http://www.3gpp.org/specs/numbering.htm 3gpp.org] has information about 3G and GSM specifications&lt;br /&gt;
&lt;br /&gt;
=== TI proprietary AT commands ===&lt;br /&gt;
&lt;br /&gt;
there are a few of them, but none of them are really required for regular operation of the device.  Due to NDA issues, OpenMoko cannot provide a reference documentation to those commands.  Using the standards-compliant '''AT+CLAC''', you will notice that the non-standard commands also show up in the command listing.&lt;br /&gt;
&lt;br /&gt;
You will also notice that those non-standard commands are prefixed with '''AT%''' rather than '''AT+''' for the standards-compliant commands.&lt;br /&gt;
&lt;br /&gt;
Thus, we welcome our user and developer community to play with those commands and document them here.  Since we never have released any NDA documentation to our community, there is no legal issue.&lt;br /&gt;
&lt;br /&gt;
Note that the syntax and the interpretation of the output of the commands listed here are only educated guesses and should not be relied on.  Part of the proprietary command set has identical or similar usage as on other modems in the market, some of which have fully opened specifications and information about these commands can be taken from their datasheets (some known similar modems with open specs: ''BenQ M22A'' and ''M23A'', ''Enfora Enabler-G [http://www.enfora.com/index.cgi?CONTENT_ID=376&amp;amp;User:LANGUAGE=en II] / [http://www.enfora.com/index.cgi?CONTENT_ID=377&amp;amp;User:LANGUAGE=en III]'' and ''SPT 1834'').&lt;br /&gt;
&lt;br /&gt;
==== AT%VER ====&lt;br /&gt;
Prints the firmware component versions.&lt;br /&gt;
&lt;br /&gt;
The modem's response looks like this on an un-updated phase-0 [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   15:11:24 17/04/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      10:21:37 28/03/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      10:25:01 28/03/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      10:25:12 28/03/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      10:18:09 28/03/07&lt;br /&gt;
 %VER: t30 a086 ** NONE **      10:29:01 28/03/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phase 1 phone, produced start of september:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   12:32:56 24/08/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      14:07:10 08/06/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      14:07:46 08/06/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      14:11:52 08/06/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      14:13:01 08/06/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      14:13:54 08/06/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      14:14:20 08/06/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      14:15:52 08/06/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      14:06:38 08/06/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      14:10:36 08/06/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      14:12:32 08/06/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      14:12:40 08/06/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      14:08:06 08/06/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv3|GTA01Bv3]] phase 0 phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   10:46:06 29/08/06&lt;br /&gt;
 %VER: cc a086 non_clearcase   14:53:59 28/08/06&lt;br /&gt;
 %VER: dl a086 non_clearcase   14:54:40 28/08/06&lt;br /&gt;
 %VER: mm a086 non_clearcase   14:59:25 28/08/06&lt;br /&gt;
 %VER: rr a086 non_clearcase   15:00:11 28/08/06&lt;br /&gt;
 %VER: sim a086 non_clearcase   15:00:57 28/08/06&lt;br /&gt;
 %VER: sms a086 non_clearcase   15:01:23 28/08/06&lt;br /&gt;
 %VER: ss a086 non_clearcase   15:02:22 28/08/06&lt;br /&gt;
 %VER: alr a086 non_clearcase   14:53:19 28/08/06&lt;br /&gt;
 %VER: l2r a086 non_clearcase   14:58:02 28/08/06&lt;br /&gt;
 %VER: ra a086 non_clearcase   14:59:50 28/08/06&lt;br /&gt;
 %VER: rlp a086 non_clearcase   14:59:56 28/08/06&lt;br /&gt;
 %VER: fad a086 non_clearcase   14:55:04 28/08/06&lt;br /&gt;
 %VER: t30 a086 non_clearcase   15:02:27 28/08/06&lt;br /&gt;
&lt;br /&gt;
The second column lists firmware component names (e.g. aci = AT Command Interface). The third column is the user name of the engineer who last modified given component. The rightmost column is probably the last time someone worked on it (Please note that the name 'sean' here is not Sean Moss-Pultz :)  while a086 is an anonymous TI engineer's nick, meaning that the component has not been modified at FIC).&lt;br /&gt;
&lt;br /&gt;
==== AT%A ====&lt;br /&gt;
Print values from an ADC.&lt;br /&gt;
&lt;br /&gt;
This command is not listed in AT+CLAC output but it is triggered by any input that starts with AT%A except AT%ALS (''Alternative Line Service'') and AT%ATR, which are other proprietary AT commands.  So for example AT%ABCD,HELLO will also run this commands.  On my Neo modem it prints a line containing nine values of the form ADC &amp;lt;number&amp;gt; = &amp;lt;value&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 AT%A&lt;br /&gt;
 EXT: I&lt;br /&gt;
 ADC 0 = e19, ADC 1 = 0, ADC 2 = d, ADC 3 = 6ea, ADC 4 = a25, ADC 5 = 9fc, ADC 6 = 96d, ADC 7 = 0, ADC 8 = 6&lt;br /&gt;
&lt;br /&gt;
It would seem there's an ADC (analog-to-digital converter) module in the modem with nine input lines connected to it and the values on these lines are reported by this command in hexadecimal format.  The values change over time.  Inputs 1 and 7 always show zero on my modem, input 1 value changes slightly (+/- 20), while values on inputs 3, 4, 5, 6 and 8 change seemingly randomly in the range 0x000 - 0xfff (it would seem the chip is 12-bit).&lt;br /&gt;
&lt;br /&gt;
==== AT%NRG ====&lt;br /&gt;
The AT%NRG (''Network registration and service selection'') is an expansion of the AT+COPS command.  It allows specifying the service state of the registration, in addition to AT+COPS functionality. It doesn't however allow listing all present operators (use AT+COPS for this).&lt;br /&gt;
&lt;br /&gt;
==== AT%EM ====&lt;br /&gt;
Execution of ''Engineering Mode'' commands.  Allows viewing the information accessible to the modem but not available through standard GSM AT commands set such as detailed information on the current Serving Cell (the one we're registered with), its neighbouring cells, the GPRS/EDGE availability and SIM card data.&lt;br /&gt;
&lt;br /&gt;
Citing Enfora Inc. Application Note EDG0108TN01:&lt;br /&gt;
''The purpose of Engineering Mode (EM) is to provide means to observe the behavior of the mobile station and the settings of the network as counterpart and therefore defines a lot of possibilities to analyze the network. The EM can be used for observation of a defined data set during functional test and field test.''&lt;br /&gt;
&lt;br /&gt;
''Warning: The display of certain parameters is dependent on the wireless network sending the correct information in the System Information Packets. There is no guaranty that the information is always forwarded from the network. At times data may not be present to display in the Engineering Mode responses.''&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
 AT%EM=&amp;lt;mode&amp;gt;,&amp;lt;command&amp;gt;&lt;br /&gt;
Allowed &amp;lt;mode&amp;gt; values:&lt;br /&gt;
* 2 - AT command mode&lt;br /&gt;
* 3 - PCO mode&lt;br /&gt;
I only describe the AT mode commands here.  Commands are in range 1 to 13:&lt;br /&gt;
 AT%EM=2,1  Serving Cell Information&lt;br /&gt;
 AT%EM=2,2  Serving Cell GPRS Information&lt;br /&gt;
 AT%EM=2,3  Neighbour Cell Information&lt;br /&gt;
 AT%EM=2,4  Location and Paging Parameters&lt;br /&gt;
 AT%EM=2,5  PLMN Parameters&lt;br /&gt;
 AT%EM=2,6  Ciphering, Hopping, DTX Parameters&lt;br /&gt;
 AT%EM=2,7  Power Parameters&lt;br /&gt;
 AT%EM=2,8  Identity Parameters&lt;br /&gt;
 AT%EM=2,9  Firmware components versions&lt;br /&gt;
 AT%EM=2,10 GMM Information&lt;br /&gt;
 AT%EM=2,11 GRLC Information&lt;br /&gt;
 AT%EM=2,12 AMR Configuration Information&lt;br /&gt;
 AT%EM=2,13 PDP Information&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell Information (2,1) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;afrcn&amp;gt;,&amp;lt;c1&amp;gt;,&amp;lt;c2&amp;gt;,&amp;lt;rxlev&amp;gt;,&amp;lt;bsic&amp;gt;,&amp;lt;cell_id&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;txlev&amp;gt;,&amp;lt;tn&amp;gt;,&amp;lt;rlt&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;rxlev_f&amp;gt;,&amp;lt;rxlev_s&amp;gt;,&amp;lt;rxqual_f&amp;gt;,&amp;lt;rxqual_s&amp;gt;,&amp;lt;lac&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;cbq&amp;gt;,&amp;lt;cell_type_ind&amp;gt;,&amp;lt;vocoder&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || Current Channel Number ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentifier ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || dsc || Downlink Signaling Counter || current counter value&lt;br /&gt;
|-&lt;br /&gt;
|8  || txlev || Transmit Power Level ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || tn || Timeslot Number ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || rlt || Radio Link Timeout Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || rxlev_f || Received Field Strength full ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || rxlev_s || Received Field Strength sub ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || rxqual_f || Received Quality full ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || rxqual_s || Received Quality sub ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|19 || Cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|20 || vocoder || Vocoder || Sig/speech/efr/amr/14.4/9.6/4.8/2.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
According to http://www.qrctech.com/freq_chart_24x36.pdf, frequencies can be calculated using the arfcn field like this:&lt;br /&gt;
 if 172 &amp;lt; arfcn &amp;lt;  252 then freq = 869 + (arfcn -127) x 0.2 MHz    # 850 band &lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  811 then freq = 1930 + (arfcn - 511) x 0.2 MHz  # 1900 band&lt;br /&gt;
 if   1 &amp;lt; arfcn &amp;lt;  124 then freq = 935 + (arfcn * 0.2) MHz         # 900 band (original alloc)&lt;br /&gt;
 if 974 &amp;lt; arfcn &amp;lt; 1023 then freq = 925 + (arfcn - 974) x 0.2 MHz   # 900 band E-GSM&lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  886 then freq = 1805 + (arfcn - 511) x 0.2 MHz  # 1800 band&lt;br /&gt;
&lt;br /&gt;
Notice the 1800 and 1900 bands have the same channel ids and nearly the same algorithm with a different starting point.&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell GPRS Information (2,2) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;nts&amp;gt;,&amp;lt;nmo&amp;gt;,&amp;lt;spgc_ccch_sup&amp;gt;,&amp;lt;priority_access_thr&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;rac&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;c31&amp;gt;,&amp;lt;c32&amp;gt;,&amp;lt;band_ind&amp;gt;,&amp;lt;pfc_supp_n_w&amp;gt;,&amp;lt;ccn_mode_sts&amp;gt;,&amp;lt;Psi_sts_suppt&amp;gt;,&amp;lt;edge_support&amp;gt;,&amp;lt;epcr_support&amp;gt;,&amp;lt;bep_period&amp;gt;,&amp;lt;bss_paging_coord&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || nts || PCCCH_TIMESLOT || Number of downlink timeslots&lt;br /&gt;
|-&lt;br /&gt;
|2  || nmo || Network Mode of Operation ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || spgc_ccch_sup || Network Control-spgc_ccch_sup || Network support for split paging&lt;br /&gt;
|-&lt;br /&gt;
|4  || priority_access_thr || Network Control-Priority_Access_Threshold || packet access to the NW according to priority level&lt;br /&gt;
|-&lt;br /&gt;
|5  || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || dsc || Downlink Signal Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || c31 || Cell-reselect Criterion C31 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || c32 || Cell-reselect Criterion C32 ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || band_ind || Band Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || pfc_supp_n_w || PFC Support ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || ccn_mode_sts || CCN Mode ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Psi_sts_suppt || PSI Support ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || edge_support || EDGE Support ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || epcr_support || EPCR Support ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || bep_period || BEP Period ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || bss_paging_coord || BSS Paging ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Neighbour Cell Information (2,3) =====&lt;br /&gt;
The first line of response is of the format %EM: &amp;lt;number of cells listed&amp;gt;, where the maximum seems to be 6, one cell for each channel.  The next sixteen lines list the values of each of the parameters for each of the cells.&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Short name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || BCCH channel ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentity ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || frame_offset || Frame Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || time_alignmnt || Time Alignment ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|13  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|14  || cell_resel_offset || Cell-reselection Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || temp_offset || Temporary Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || rxlev_acc_min || Rxlen access min ||&lt;br /&gt;
|}&lt;br /&gt;
My Neo1973 reports:&lt;br /&gt;
 AT%EM=2,3&lt;br /&gt;
 %EM: 6&lt;br /&gt;
 763,766,771,778,780,773&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 73,46,54,51,13,12&lt;br /&gt;
 6753,10951,3531,0,1933,1924&lt;br /&gt;
 100,100,300,300,300,100&lt;br /&gt;
 80229,961995,0,1166923,0,2715553&lt;br /&gt;
 3504,724,0,3724,4,1112&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 2,2,2,2,2,2&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 10,10,10,10,10,10&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
===== Location and Paging Parameters (2,4) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;bs_pa_mfrms&amp;gt;,&amp;lt;t3212&amp;gt;,&amp;lt;mcc[0]&amp;gt;&amp;lt;mcc[1]&amp;gt;&amp;lt;mcc[2]&amp;gt;,&amp;lt;mnc[0]&amp;gt;&amp;lt;mnc[1]&amp;gt;&amp;lt;mnc[2]&amp;gt;,&amp;lt;tmsi&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || bs_pa_mfrms || BS PA MFRMS paging repeat period&lt;br /&gt;
|-&lt;br /&gt;
|2 || t3212 || Periodic location updating interval&lt;br /&gt;
|-&lt;br /&gt;
|3 || mcc || [http://en.wikipedia.org/wiki/Mobile_country_code Mobile Country Code]&lt;br /&gt;
|-&lt;br /&gt;
|4 || mnc || [http://en.wikipedia.org/wiki/Mobile_Network_Code Mobile Network Code]&lt;br /&gt;
|-&lt;br /&gt;
|5 || tmsi || [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] (in binary)&lt;br /&gt;
|}&lt;br /&gt;
The MCC and MNC values are the same values that are used to form the Mobile Operator names used by the standard AT+COPS and AT+COPN commands in numeric format.  The TMSI is the same number that [http://wiki.openmoko.org/wiki/GTA01_gsm_modem#Identity_Parameters_.282.2C8.29 AT%EM=2,8] gives, just in a different format.&lt;br /&gt;
&lt;br /&gt;
===== PLMN Parameters (2,5) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;no_creq_max&amp;gt;,&amp;lt;reest_flag&amp;gt;,&amp;lt;txpwr_max&amp;gt;,&amp;lt;rxlev_min&amp;gt;,&amp;lt;rel_cs&amp;gt;,&amp;lt;sgsnr_rel&amp;gt;,&amp;lt;mscr_rel&amp;gt;,&amp;lt;net_rel&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || no_creq_max || Max. number or retries for channel requests&lt;br /&gt;
|-&lt;br /&gt;
|2 || reest_flag || Re-establishment Flag&lt;br /&gt;
|-&lt;br /&gt;
|3 || txpwr_max || MS TXPWR MAX CCCH&lt;br /&gt;
|-&lt;br /&gt;
|4 || rxlev_min || Rxlev_access_min&lt;br /&gt;
|-&lt;br /&gt;
|5 || rel_cs || Release Cause (only the last release cause is remembered)&lt;br /&gt;
|-&lt;br /&gt;
|6 || sgsnr_rel || SGSNR Release&lt;br /&gt;
|-&lt;br /&gt;
|7 || mscr_rel || MSCR Release&lt;br /&gt;
|-&lt;br /&gt;
|8 || net_rel || Network Release Info&lt;br /&gt;
|}&lt;br /&gt;
===== Ciphering, Hopping, DTX Parameters (2,6) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== Power Parameters (2,7) =====&lt;br /&gt;
The output consits of two lines, first line containing 12 comma-separated values and the second line 18 comma-separated values, such as:&lt;br /&gt;
 AT%EM=2,7&lt;br /&gt;
 %EM: 1,1,0,0,0,1,1,0,0,0,1,0&lt;br /&gt;
 6,0,0,0,0,1,1,1,4,0,0,0,0,1,0,0,0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
On the first line (called Classmark 2) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Revision Level ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || Controlled Early Classmark Sending || 1 means enabled&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/1 Encryption algorithm || 0 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || RF Power capability ||&lt;br /&gt;
|-&lt;br /&gt;
|5  || Pseudo-synchronisation capability || 1 means present&lt;br /&gt;
|-&lt;br /&gt;
|6  || SS Screening Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || SMS capability ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Frequency capability ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || Classmark 3 options || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|10 || CM Service Prompt || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|11 || A5/3 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|12 || A5/2 Encryption algorithm || 1 means available&lt;br /&gt;
|}&lt;br /&gt;
On the second line (called Classmark 3) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Multiband support ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || A5/7 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/6 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || A5/5 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|5  || A5/4 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|6  || Valid Radio capability 2 || ??&lt;br /&gt;
|-&lt;br /&gt;
|7  || Associated Radio capability 2 ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Valid Radio capability 1 || ??&lt;br /&gt;
|-&lt;br /&gt;
|9  || Associated Radio capability 1 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || Valid R Support || ??&lt;br /&gt;
|-&lt;br /&gt;
|11 || R Support || R-GSM Class&lt;br /&gt;
|-&lt;br /&gt;
|12 || Valid Multi-slot Class || ??&lt;br /&gt;
|-&lt;br /&gt;
|13 || Multi-slot Class ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Unicode 2 treatment ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || Extended Measurement capability || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|16 || Valid Switch-measure-value || ??&lt;br /&gt;
|-&lt;br /&gt;
|17 || Switch-measure-value ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || Switch-measure-switch-value ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Identity Parameters (2,8) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;imeisv&amp;gt;&lt;br /&gt;
 &amp;lt;imsi&amp;gt;&lt;br /&gt;
 &amp;lt;tmsi&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
The IMEISV line contains 20 numbers separated by commas, the numbers on positions 5 to 18 are the digits of the [http://en.wikipedia.org/wiki/IMEI IMEI] number as returned by AT+CGSN.  The second line contains another 20 numbers and the numbers on positions 5 to 19 form the digits of your SIM card's [http://en.wikipedia.org/wiki/IMSI IMSI] number, as returned by the AT+CIMI command. The last line contains the [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] number in plain format (ten digits).&lt;br /&gt;
&lt;br /&gt;
===== Firmware components versions (2,9) =====&lt;br /&gt;
Prints version information for different components of the modem's firmware.  The format and the scope of the information presented is identical to that in [[#AT%VER|AT%VER]] output with the exception that only a subset of all of the components are listed:&lt;br /&gt;
 AT%EM=2,9&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
===== GMM Information (2,10) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== GRLC Information (2,11) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== AMR Configuration Information (2,12) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== PDP Information (2,13) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem OpenMoko commands ===&lt;br /&gt;
&lt;br /&gt;
The Ti calypso GSM Modem firmware has been extended by OpenMoko specific AT&lt;br /&gt;
commands.  This page documents those commands.&lt;br /&gt;
&lt;br /&gt;
==== AT@POFF ====&lt;br /&gt;
&lt;br /&gt;
Powers off the GSM Modem. No parameters/options. &lt;br /&gt;
&lt;br /&gt;
==== AT@ST ====&lt;br /&gt;
&lt;br /&gt;
configure the sidetone level for voice calls generated inside the GSM Modem.  This should normally be off, since the sidetone in GTA01/GTA02 is generated inside the the [[WM8753|wolfson audio codec]].&lt;br /&gt;
&lt;br /&gt;
 AT@ST?&lt;br /&gt;
 +ST: -5&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=?&lt;br /&gt;
 @ST: (-26,-23,-20,-17,-14,-11,-8,-5,-2,1)&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=&amp;quot;-26&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
-26 means turn off the sidetone totally.&lt;br /&gt;
&lt;br /&gt;
==== AT@AUL ====&lt;br /&gt;
&lt;br /&gt;
audio table load.&lt;br /&gt;
&lt;br /&gt;
 AT@AUL=&amp;quot;0&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
 AT@AUL=?&lt;br /&gt;
 @AUL:(0)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This audio table is a collection of audio parameters for GSM calibrated by hardware engineers,&lt;br /&gt;
 &lt;br /&gt;
 Mode of microphone&lt;br /&gt;
 Gain of microphone&lt;br /&gt;
 FM PGA gain setting&lt;br /&gt;
 Bias setting for microphone&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 ANR parameters&lt;br /&gt;
 Level of side tone&lt;br /&gt;
 AEC parameters&lt;br /&gt;
 Echo suppressor&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 Gain of speaker&lt;br /&gt;
 Extra gain for AUDIO_SPEAKER_HANDSET and AUDIO_SPEAKER_HANDFREE modes&lt;br /&gt;
 Enable/Disable filter&lt;br /&gt;
 Enable/Disable high-pass filter&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 IIR uplink/downlink coefficients&lt;br /&gt;
 Limiter parameters&lt;br /&gt;
 Level of speaker&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 State of speaker&lt;br /&gt;
 Sampling frequency&lt;br /&gt;
 Level of volume &lt;br /&gt;
 AGC parameters&lt;br /&gt;
 DRC parameters&lt;br /&gt;
&lt;br /&gt;
The audio table will be stored in the flash file system within GSM modem, you can load it through this command. &lt;br /&gt;
&lt;br /&gt;
For now, we only provide one configuration, that is &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If AT@AUL=&amp;quot;0&amp;quot; responds with ERROR, it means there's no audio table existing and the GSM firmware will use default values.&lt;br /&gt;
&lt;br /&gt;
== Wakeup of CPU from GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== Problem description ===&lt;br /&gt;
&lt;br /&gt;
For power management reasons, it is absolutely neccessary that only the minimal &lt;br /&gt;
required parts of the device are powered at any given time.  If you carry your&lt;br /&gt;
Neo in your pocket, then all it should do is stay online with the GSM network, &lt;br /&gt;
and notify you in case there's an incoming call/sms (like other phones).&lt;br /&gt;
&lt;br /&gt;
During that time, the Neo1973 Application Processor (s3c24xx) is suspended,&lt;br /&gt;
i.e. not powered at all.  The SDRAM is in self-refresh mode.&lt;br /&gt;
&lt;br /&gt;
In this suspend mode (which Samsung calls by the funny name of POWER_OFF), the&lt;br /&gt;
processor is not able to receive any data from the GSM Modem.  Nor is it able&lt;br /&gt;
to detect incoming characters and wake up the CPU.  The only wake up sources&lt;br /&gt;
are a certain set of external interrupts (EINT).&lt;br /&gt;
&lt;br /&gt;
Thus, the GSM Modem GPIO line IO1 was connected with the Samsung EINT1, and&lt;br /&gt;
the GSM Modem firmware contains some special logic to generate an interrupt&lt;br /&gt;
(and thus wake-up event) to the CPU.&lt;br /&gt;
&lt;br /&gt;
=== Logic for problem solution ===&lt;br /&gt;
&lt;br /&gt;
Preconditions&lt;br /&gt;
# The default state of GSM Modem output IO1 is logical LOW.  &lt;br /&gt;
&lt;br /&gt;
Anytime the modem has pending data on the MODEM-UART channel, it&lt;br /&gt;
# checks if CTS_MODEM permits sending of data&lt;br /&gt;
## if CTS_MODEM permits sending of UART data, go to '4.2'&lt;br /&gt;
# [implicit: CTS_MODEM does not permit sending of UART data]&lt;br /&gt;
## set IO1 line to logical HIGH level&lt;br /&gt;
## buffer modem data [until buffer is full, after which data gets discarded]&lt;br /&gt;
# wait until CTS_MODEM permits sending of UART data   &lt;br /&gt;
# as soon as CTS_MODEM permits sending of UART data,&lt;br /&gt;
## set IO1 back to logical LOW level&lt;br /&gt;
## start sending of UART data&lt;br /&gt;
# once all data is transmitted, return to idle state.  When next data item is to be transmitted, start again from '1'&lt;br /&gt;
&lt;br /&gt;
=== Software implementation ===&lt;br /&gt;
&lt;br /&gt;
{{note|This is the plan, it has not been fully implemented yet}}&lt;br /&gt;
&lt;br /&gt;
# a firmware post may-16-2007 needs to be present in the gsm modem. This is true for all phones bought during phase 1 in the online shop.  However, I currently don't really know what firmware version was present in the GTA01Bv4 that we sent to phase 0.&lt;br /&gt;
# the suspend code probably still needs to correctly configure the RTS/CTS lines (i.e. put them in GPIO mode, and set them to their desired &amp;quot;don't send any more characters&amp;quot; level)&lt;br /&gt;
&lt;br /&gt;
So in this case, any data from the GSM modem will wake up the cpu for processing of that data.  The GSM modem has some internal buffer (I don't know how big right now) that should be sufficient for buffering the data until the CPU is alive.&lt;br /&gt;
&lt;br /&gt;
This also means that gsmd will eventually have to re-program the GSM modem to make sure only relevant unsolicited response codes are sent during suspend.  You usually don't want a signal level change to cause a CPU wake up, only things like incoming message / call.&lt;br /&gt;
&lt;br /&gt;
Upgrading the modem's firmware is technically possible but no proper software is currently legally available to users outside OpenMoko staff.&lt;br /&gt;
&lt;br /&gt;
== Power On, Power Off, and Reset of the GTA01 GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem Connections ===&lt;br /&gt;
&lt;br /&gt;
The GTA01 GSM modem communicates via a standard serial port to the host system.  The port operates at 115200 baud, 8 bits, no parity, and requires hardware flow control (RTSCTS) to operate.  Due to the fact that the host CPU has only a pair of serial ports but there are three devices that wish to use them, the GSM modem port is actually shared with the serial console (the third device is the GPS chip, which has exclusive use of the second serial port).&lt;br /&gt;
&lt;br /&gt;
A GPIO (General Purpose IO) pin controls the switching of the serial port between the console and the GSM modem.  Another GPIO is used to turn on the power to the GSM modem.  On older versions of the GTA01 a third GPIO could be used to reset the GSM modem; this signal proved to cause difficulties with the modem, and on all the GTA01 units sold this GPIO line is not connected.  The driver combines the the switching of the serial port to the GSM modem and the power-on signal to the modem into a single operation; the two cannot be controlled independently from user-space (at the time of this writing).&lt;br /&gt;
&lt;br /&gt;
It is important to note that the GPIO controlling the power-on of the GSM modem can only signal to the modem to turn itself on -- turning this GPIO off does not power off the GSM modem.  Instead, the '''AT@POFF''' sequence must be sent to the modem in order to perform a power off.&lt;br /&gt;
&lt;br /&gt;
Further complicating power control of the GTA01 GSM modem is the fact that the modem draws power from the battery/charger side of the power management circuitry -- this means that turning off the power to the host CPU on the GTA01 does not turn off the power to the modem.  In real-world operation, this means that unless the shutdown procedure for the host cpu's operating system issues the '''AT@POFF''' command to power off the GSM modem, the modem will remain turned on, drawing power from the battery even thought the host CPU is completely powered off.&lt;br /&gt;
&lt;br /&gt;
=== The Power-On Sequence ===&lt;br /&gt;
&lt;br /&gt;
The sharing of the serial port between the console and the GSM modem results in the need for a very specific power-on and power-off sequence.  Two major problems exist that must be avoided: infinite echos, and RTSCTS lockup.&lt;br /&gt;
&lt;br /&gt;
==== Avoiding Infinite Echos ====&lt;br /&gt;
&lt;br /&gt;
By default, the serial port is initialized in &amp;quot;echo&amp;quot; mode -- meaning that any characters sent to the serial port from the console will be echoed back to the console.  Upon power-up or reset, the GSM modem also echos back characters it receives.  So unless action is taken to disable the serial port's echo before the GSM modem is powered on, an infinite echo will result.  The modem will print the standard &amp;quot;Interpretor Ready&amp;quot; message, which will be echoed back to it by the serial port driver, the modem will echo that back to the serial port again (adding some error text to the message), the serial port will echo that again, and this continues until buffers in either or both the serial port and the modem fill up, and one of them ceases to transmit.&lt;br /&gt;
&lt;br /&gt;
Once in this situation, it is difficult for software (such as gsmd) to gain synchronization of commands and responses.&lt;br /&gt;
&lt;br /&gt;
The best solution is to avoid the problem to begin with.  Simply ensure that the serial port is set to &amp;quot;no-echo&amp;quot; mode before the GSM modem is enabled and powered up.  This sequence illustrates how this is normally done:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
(Note that the stty command argument syntax is somewhat unusual: &amp;quot;-echo&amp;quot; means &amp;quot;disable echo&amp;quot;, while &amp;quot;echo&amp;quot; means &amp;quot;enable echo&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==== Avoiding RTSCTS Lockup ====&lt;br /&gt;
&lt;br /&gt;
Hardware flow control uses additional signals in addition to the serial data in and out signals on the serial port to control the flow of the data.  Specifically, when hardware flow control is enabled, a given endpoint is expected to assert its RTS (Request To Send) line when it has data to transmit, and not transit that data until it sees a CTS (Clear TO Send) signal from the other end.  In this fashion, buffer overruns and data loss are avoided.&lt;br /&gt;
&lt;br /&gt;
The GSM modem requires that hardware flow control be enabled in order to communicate with the host.  However, the console lacks the RTS and CTS signals and thus is unable to communicate if hardware flow control is enabled.  But what really makes this problem serious is that if hardware flow control is enabled while the serial port is switched to the console, and the (small) transmit buffer for the port fills (such as a kernel log message), the Linux kernel will lock up, and become completely non-responsive.  There is no recovery mechanism for this other than to disconnect the device from its USB port or charger, and remove the battery.&lt;br /&gt;
&lt;br /&gt;
One solution to this is to disable the use of the serial port as a console for the kernel.  However, this is greatly inconvenient - the knowledgeable user with a debug board will usually wish to have a console available, and the novice user will probably wish to avoid changing the u-boot variables in order to disable the console.  So, a better approach is to avoid this situation by taking great care when powering-up, resetting, or powering-down the modem.  The following sequence illustrates how to switch the serial port back to the console mode safely:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Resetting the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
The GSM modem can be effectively reset by changing the state of the Power-On GPIO from off to on -- in other words, just disable the GSM modem and re-enable it.  The safe way to accomplish this is to combine the two sequences above:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
It should be noted that this reset sequence will also power up the modem if it is not enabled and powered up to begin with.  For this reason, the reset sequence above should be used for both power-up and reset purposes.&lt;br /&gt;
&lt;br /&gt;
=== Powering Off the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
Powering off the GSM modem on the GTA01 can only be done by issuing the '''AT@POFF''' command to the device.  In order to issue this command, it is usually necessary to return it to a known state.  So the normal mechanism is to issue the reset operation (above), wait for a short period of time (1 second seems to be sufficient), and send the '''AT@POFF''' command.  This should be followed by an additional short delay (to allow the text to be transmitted), and then the serial port can be switched back to the console.  The following script accomplishes this:&lt;br /&gt;
&lt;br /&gt;
 ### Reset the modem to place it in a known state&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 &lt;br /&gt;
 ### Now enable hardware flow control, and transmit the sequence&lt;br /&gt;
 stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
 sleep 1&lt;br /&gt;
 echo -e &amp;quot;AT@POFF\r&amp;quot; &amp;gt;/dev/ttySAC0&lt;br /&gt;
 sleep 1&lt;br /&gt;
 &lt;br /&gt;
 ### Finally, we disable flow control, and switch back the port&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Eliminating echo on the non-neo end of phone calls ===&lt;br /&gt;
Here is the modified /etc/gsmhandset.state that  eliminates echo during calls (at least for  [[User:Wurp]]): http://drivehq.com/file/df.aspx/publish/sagacis/PublicFolder/handset.sagacis.state&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem</id>
		<title>Neo 1973 and Neo FreeRunner gsm modem</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem"/>
				<updated>2008-03-10T19:11:54Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Resetting the GSM Modem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about the [[Neo1973]] GTA01 (and GTA02) GSM Modem, based on the Ti Calypso chipset.&lt;br /&gt;
&lt;br /&gt;
== [[Hardware:AT Commands|AT command]] interface ==&lt;br /&gt;
&lt;br /&gt;
=== Sending Commands ===&lt;br /&gt;
To send commands to the GSM modem, you may use &lt;br /&gt;
cu -l /dev/ttySAC0&lt;br /&gt;
or use gsmd and libgsmd-tool for a less direct method.&lt;br /&gt;
&lt;br /&gt;
If you connect directly (via cu) you must `chown uucp.uucp /dev/ttySAC0` first since cu is picky about permissions.&lt;br /&gt;
&lt;br /&gt;
libgsmd-tool is less functional than the direct raw connection to the modem.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
Note: If you use cu -l /dev/ttySAC0 to enter commands, type &amp;quot;~.&amp;quot; to quit &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard AT commands ===&lt;br /&gt;
The GSM modem follows GSM [http://www.3gpp.org/ftp/Specs/html-info/0705.htm TS07.05], [http://www.3gpp.org/ftp/Specs/html-info/0707.htm 07.07] and [http://www.3gpp.org/ftp/Specs/html-info/0710.htm 07.10] very closely.&lt;br /&gt;
&lt;br /&gt;
[http://www.3gpp.org/specs/numbering.htm 3gpp.org] has information about 3G and GSM specifications&lt;br /&gt;
&lt;br /&gt;
=== TI proprietary AT commands ===&lt;br /&gt;
&lt;br /&gt;
there are a few of them, but none of them are really required for regular operation of the device.  Due to NDA issues, OpenMoko cannot provide a reference documentation to those commands.  Using the standards-compliant '''AT+CLAC''', you will notice that the non-standard commands also show up in the command listing.&lt;br /&gt;
&lt;br /&gt;
You will also notice that those non-standard commands are prefixed with '''AT%''' rather than '''AT+''' for the standards-compliant commands.&lt;br /&gt;
&lt;br /&gt;
Thus, we welcome our user and developer community to play with those commands and document them here.  Since we never have released any NDA documentation to our community, there is no legal issue.&lt;br /&gt;
&lt;br /&gt;
Note that the syntax and the interpretation of the output of the commands listed here are only educated guesses and should not be relied on.  Part of the proprietary command set has identical or similar usage as on other modems in the market, some of which have fully opened specifications and information about these commands can be taken from their datasheets (some known similar modems with open specs: ''BenQ M22A'' and ''M23A'', ''Enfora Enabler-G [http://www.enfora.com/index.cgi?CONTENT_ID=376&amp;amp;User:LANGUAGE=en II] / [http://www.enfora.com/index.cgi?CONTENT_ID=377&amp;amp;User:LANGUAGE=en III]'' and ''SPT 1834'').&lt;br /&gt;
&lt;br /&gt;
==== AT%VER ====&lt;br /&gt;
Prints the firmware component versions.&lt;br /&gt;
&lt;br /&gt;
The modem's response looks like this on an un-updated phase-0 [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   15:11:24 17/04/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      10:21:37 28/03/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      10:25:01 28/03/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      10:25:12 28/03/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      10:18:09 28/03/07&lt;br /&gt;
 %VER: t30 a086 ** NONE **      10:29:01 28/03/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phase 1 phone, produced start of september:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   12:32:56 24/08/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      14:07:10 08/06/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      14:07:46 08/06/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      14:11:52 08/06/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      14:13:01 08/06/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      14:13:54 08/06/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      14:14:20 08/06/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      14:15:52 08/06/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      14:06:38 08/06/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      14:10:36 08/06/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      14:12:32 08/06/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      14:12:40 08/06/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      14:08:06 08/06/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv3|GTA01Bv3]] phase 0 phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   10:46:06 29/08/06&lt;br /&gt;
 %VER: cc a086 non_clearcase   14:53:59 28/08/06&lt;br /&gt;
 %VER: dl a086 non_clearcase   14:54:40 28/08/06&lt;br /&gt;
 %VER: mm a086 non_clearcase   14:59:25 28/08/06&lt;br /&gt;
 %VER: rr a086 non_clearcase   15:00:11 28/08/06&lt;br /&gt;
 %VER: sim a086 non_clearcase   15:00:57 28/08/06&lt;br /&gt;
 %VER: sms a086 non_clearcase   15:01:23 28/08/06&lt;br /&gt;
 %VER: ss a086 non_clearcase   15:02:22 28/08/06&lt;br /&gt;
 %VER: alr a086 non_clearcase   14:53:19 28/08/06&lt;br /&gt;
 %VER: l2r a086 non_clearcase   14:58:02 28/08/06&lt;br /&gt;
 %VER: ra a086 non_clearcase   14:59:50 28/08/06&lt;br /&gt;
 %VER: rlp a086 non_clearcase   14:59:56 28/08/06&lt;br /&gt;
 %VER: fad a086 non_clearcase   14:55:04 28/08/06&lt;br /&gt;
 %VER: t30 a086 non_clearcase   15:02:27 28/08/06&lt;br /&gt;
&lt;br /&gt;
The second column lists firmware component names (e.g. aci = AT Command Interface). The third column is the user name of the engineer who last modified given component. The rightmost column is probably the last time someone worked on it (Please note that the name 'sean' here is not Sean Moss-Pultz :)  while a086 is an anonymous TI engineer's nick, meaning that the component has not been modified at FIC).&lt;br /&gt;
&lt;br /&gt;
==== AT%A ====&lt;br /&gt;
Print values from an ADC.&lt;br /&gt;
&lt;br /&gt;
This command is not listed in AT+CLAC output but it is triggered by any input that starts with AT%A except AT%ALS (''Alternative Line Service'') and AT%ATR, which are other proprietary AT commands.  So for example AT%ABCD,HELLO will also run this commands.  On my Neo modem it prints a line containing nine values of the form ADC &amp;lt;number&amp;gt; = &amp;lt;value&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 AT%A&lt;br /&gt;
 EXT: I&lt;br /&gt;
 ADC 0 = e19, ADC 1 = 0, ADC 2 = d, ADC 3 = 6ea, ADC 4 = a25, ADC 5 = 9fc, ADC 6 = 96d, ADC 7 = 0, ADC 8 = 6&lt;br /&gt;
&lt;br /&gt;
It would seem there's an ADC (analog-to-digital converter) module in the modem with nine input lines connected to it and the values on these lines are reported by this command in hexadecimal format.  The values change over time.  Inputs 1 and 7 always show zero on my modem, input 1 value changes slightly (+/- 20), while values on inputs 3, 4, 5, 6 and 8 change seemingly randomly in the range 0x000 - 0xfff (it would seem the chip is 12-bit).&lt;br /&gt;
&lt;br /&gt;
==== AT%NRG ====&lt;br /&gt;
The AT%NRG (''Network registration and service selection'') is an expansion of the AT+COPS command.  It allows specifying the service state of the registration, in addition to AT+COPS functionality. It doesn't however allow listing all present operators (use AT+COPS for this).&lt;br /&gt;
&lt;br /&gt;
==== AT%EM ====&lt;br /&gt;
Execution of ''Engineering Mode'' commands.  Allows viewing the information accessible to the modem but not available through standard GSM AT commands set such as detailed information on the current Serving Cell (the one we're registered with), its neighbouring cells, the GPRS/EDGE availability and SIM card data.&lt;br /&gt;
&lt;br /&gt;
Citing Enfora Inc. Application Note EDG0108TN01:&lt;br /&gt;
''The purpose of Engineering Mode (EM) is to provide means to observe the behavior of the mobile station and the settings of the network as counterpart and therefore defines a lot of possibilities to analyze the network. The EM can be used for observation of a defined data set during functional test and field test.''&lt;br /&gt;
&lt;br /&gt;
''Warning: The display of certain parameters is dependent on the wireless network sending the correct information in the System Information Packets. There is no guaranty that the information is always forwarded from the network. At times data may not be present to display in the Engineering Mode responses.''&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
 AT%EM=&amp;lt;mode&amp;gt;,&amp;lt;command&amp;gt;&lt;br /&gt;
Allowed &amp;lt;mode&amp;gt; values:&lt;br /&gt;
* 2 - AT command mode&lt;br /&gt;
* 3 - PCO mode&lt;br /&gt;
I only describe the AT mode commands here.  Commands are in range 1 to 13:&lt;br /&gt;
 AT%EM=2,1  Serving Cell Information&lt;br /&gt;
 AT%EM=2,2  Serving Cell GPRS Information&lt;br /&gt;
 AT%EM=2,3  Neighbour Cell Information&lt;br /&gt;
 AT%EM=2,4  Location and Paging Parameters&lt;br /&gt;
 AT%EM=2,5  PLMN Parameters&lt;br /&gt;
 AT%EM=2,6  Ciphering, Hopping, DTX Parameters&lt;br /&gt;
 AT%EM=2,7  Power Parameters&lt;br /&gt;
 AT%EM=2,8  Identity Parameters&lt;br /&gt;
 AT%EM=2,9  Firmware components versions&lt;br /&gt;
 AT%EM=2,10 GMM Information&lt;br /&gt;
 AT%EM=2,11 GRLC Information&lt;br /&gt;
 AT%EM=2,12 AMR Configuration Information&lt;br /&gt;
 AT%EM=2,13 PDP Information&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell Information (2,1) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;afrcn&amp;gt;,&amp;lt;c1&amp;gt;,&amp;lt;c2&amp;gt;,&amp;lt;rxlev&amp;gt;,&amp;lt;bsic&amp;gt;,&amp;lt;cell_id&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;txlev&amp;gt;,&amp;lt;tn&amp;gt;,&amp;lt;rlt&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;rxlev_f&amp;gt;,&amp;lt;rxlev_s&amp;gt;,&amp;lt;rxqual_f&amp;gt;,&amp;lt;rxqual_s&amp;gt;,&amp;lt;lac&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;cbq&amp;gt;,&amp;lt;cell_type_ind&amp;gt;,&amp;lt;vocoder&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || Current Channel Number ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentifier ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || dsc || Downlink Signaling Counter || current counter value&lt;br /&gt;
|-&lt;br /&gt;
|8  || txlev || Transmit Power Level ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || tn || Timeslot Number ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || rlt || Radio Link Timeout Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || rxlev_f || Received Field Strength full ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || rxlev_s || Received Field Strength sub ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || rxqual_f || Received Quality full ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || rxqual_s || Received Quality sub ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|19 || Cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|20 || vocoder || Vocoder || Sig/speech/efr/amr/14.4/9.6/4.8/2.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
According to http://www.qrctech.com/freq_chart_24x36.pdf, frequencies can be calculated using the arfcn field like this:&lt;br /&gt;
 if 172 &amp;lt; arfcn &amp;lt;  252 then freq = 869 + (arfcn -127) x 0.2 MHz    # 850 band &lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  811 then freq = 1930 + (arfcn - 511) x 0.2 MHz  # 1900 band&lt;br /&gt;
 if   1 &amp;lt; arfcn &amp;lt;  124 then freq = 935 + (arfcn * 0.2) MHz         # 900 band (original alloc)&lt;br /&gt;
 if 974 &amp;lt; arfcn &amp;lt; 1023 then freq = 925 + (arfcn - 974) x 0.2 MHz   # 900 band E-GSM&lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  886 then freq = 1805 + (arfcn - 511) x 0.2 MHz  # 1800 band&lt;br /&gt;
&lt;br /&gt;
Notice the 1800 and 1900 bands have the same channel ids and nearly the same algorithm with a different starting point.&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell GPRS Information (2,2) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;nts&amp;gt;,&amp;lt;nmo&amp;gt;,&amp;lt;spgc_ccch_sup&amp;gt;,&amp;lt;priority_access_thr&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;rac&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;c31&amp;gt;,&amp;lt;c32&amp;gt;,&amp;lt;band_ind&amp;gt;,&amp;lt;pfc_supp_n_w&amp;gt;,&amp;lt;ccn_mode_sts&amp;gt;,&amp;lt;Psi_sts_suppt&amp;gt;,&amp;lt;edge_support&amp;gt;,&amp;lt;epcr_support&amp;gt;,&amp;lt;bep_period&amp;gt;,&amp;lt;bss_paging_coord&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || nts || PCCCH_TIMESLOT || Number of downlink timeslots&lt;br /&gt;
|-&lt;br /&gt;
|2  || nmo || Network Mode of Operation ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || spgc_ccch_sup || Network Control-spgc_ccch_sup || Network support for split paging&lt;br /&gt;
|-&lt;br /&gt;
|4  || priority_access_thr || Network Control-Priority_Access_Threshold || packet access to the NW according to priority level&lt;br /&gt;
|-&lt;br /&gt;
|5  || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || dsc || Downlink Signal Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || c31 || Cell-reselect Criterion C31 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || c32 || Cell-reselect Criterion C32 ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || band_ind || Band Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || pfc_supp_n_w || PFC Support ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || ccn_mode_sts || CCN Mode ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Psi_sts_suppt || PSI Support ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || edge_support || EDGE Support ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || epcr_support || EPCR Support ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || bep_period || BEP Period ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || bss_paging_coord || BSS Paging ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Neighbour Cell Information (2,3) =====&lt;br /&gt;
The first line of response is of the format %EM: &amp;lt;number of cells listed&amp;gt;, where the maximum seems to be 6, one cell for each channel.  The next sixteen lines list the values of each of the parameters for each of the cells.&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Short name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || BCCH channel ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentity ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || frame_offset || Frame Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || time_alignmnt || Time Alignment ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|13  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|14  || cell_resel_offset || Cell-reselection Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || temp_offset || Temporary Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || rxlev_acc_min || Rxlen access min ||&lt;br /&gt;
|}&lt;br /&gt;
My Neo1973 reports:&lt;br /&gt;
 AT%EM=2,3&lt;br /&gt;
 %EM: 6&lt;br /&gt;
 763,766,771,778,780,773&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 73,46,54,51,13,12&lt;br /&gt;
 6753,10951,3531,0,1933,1924&lt;br /&gt;
 100,100,300,300,300,100&lt;br /&gt;
 80229,961995,0,1166923,0,2715553&lt;br /&gt;
 3504,724,0,3724,4,1112&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 2,2,2,2,2,2&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 10,10,10,10,10,10&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
===== Location and Paging Parameters (2,4) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;bs_pa_mfrms&amp;gt;,&amp;lt;t3212&amp;gt;,&amp;lt;mcc[0]&amp;gt;&amp;lt;mcc[1]&amp;gt;&amp;lt;mcc[2]&amp;gt;,&amp;lt;mnc[0]&amp;gt;&amp;lt;mnc[1]&amp;gt;&amp;lt;mnc[2]&amp;gt;,&amp;lt;tmsi&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || bs_pa_mfrms || BS PA MFRMS paging repeat period&lt;br /&gt;
|-&lt;br /&gt;
|2 || t3212 || Periodic location updating interval&lt;br /&gt;
|-&lt;br /&gt;
|3 || mcc || [http://en.wikipedia.org/wiki/Mobile_country_code Mobile Country Code]&lt;br /&gt;
|-&lt;br /&gt;
|4 || mnc || [http://en.wikipedia.org/wiki/Mobile_Network_Code Mobile Network Code]&lt;br /&gt;
|-&lt;br /&gt;
|5 || tmsi || [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] (in binary)&lt;br /&gt;
|}&lt;br /&gt;
The MCC and MNC values are the same values that are used to form the Mobile Operator names used by the standard AT+COPS and AT+COPN commands in numeric format.  The TMSI is the same number that [http://wiki.openmoko.org/wiki/GTA01_gsm_modem#Identity_Parameters_.282.2C8.29 AT%EM=2,8] gives, just in a different format.&lt;br /&gt;
&lt;br /&gt;
===== PLMN Parameters (2,5) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;no_creq_max&amp;gt;,&amp;lt;reest_flag&amp;gt;,&amp;lt;txpwr_max&amp;gt;,&amp;lt;rxlev_min&amp;gt;,&amp;lt;rel_cs&amp;gt;,&amp;lt;sgsnr_rel&amp;gt;,&amp;lt;mscr_rel&amp;gt;,&amp;lt;net_rel&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || no_creq_max || Max. number or retries for channel requests&lt;br /&gt;
|-&lt;br /&gt;
|2 || reest_flag || Re-establishment Flag&lt;br /&gt;
|-&lt;br /&gt;
|3 || txpwr_max || MS TXPWR MAX CCCH&lt;br /&gt;
|-&lt;br /&gt;
|4 || rxlev_min || Rxlev_access_min&lt;br /&gt;
|-&lt;br /&gt;
|5 || rel_cs || Release Cause (only the last release cause is remembered)&lt;br /&gt;
|-&lt;br /&gt;
|6 || sgsnr_rel || SGSNR Release&lt;br /&gt;
|-&lt;br /&gt;
|7 || mscr_rel || MSCR Release&lt;br /&gt;
|-&lt;br /&gt;
|8 || net_rel || Network Release Info&lt;br /&gt;
|}&lt;br /&gt;
===== Ciphering, Hopping, DTX Parameters (2,6) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== Power Parameters (2,7) =====&lt;br /&gt;
The output consits of two lines, first line containing 12 comma-separated values and the second line 18 comma-separated values, such as:&lt;br /&gt;
 AT%EM=2,7&lt;br /&gt;
 %EM: 1,1,0,0,0,1,1,0,0,0,1,0&lt;br /&gt;
 6,0,0,0,0,1,1,1,4,0,0,0,0,1,0,0,0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
On the first line (called Classmark 2) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Revision Level ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || Controlled Early Classmark Sending || 1 means enabled&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/1 Encryption algorithm || 0 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || RF Power capability ||&lt;br /&gt;
|-&lt;br /&gt;
|5  || Pseudo-synchronisation capability || 1 means present&lt;br /&gt;
|-&lt;br /&gt;
|6  || SS Screening Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || SMS capability ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Frequency capability ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || Classmark 3 options || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|10 || CM Service Prompt || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|11 || A5/3 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|12 || A5/2 Encryption algorithm || 1 means available&lt;br /&gt;
|}&lt;br /&gt;
On the second line (called Classmark 3) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Multiband support ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || A5/7 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/6 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || A5/5 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|5  || A5/4 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|6  || Valid Radio capability 2 || ??&lt;br /&gt;
|-&lt;br /&gt;
|7  || Associated Radio capability 2 ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Valid Radio capability 1 || ??&lt;br /&gt;
|-&lt;br /&gt;
|9  || Associated Radio capability 1 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || Valid R Support || ??&lt;br /&gt;
|-&lt;br /&gt;
|11 || R Support || R-GSM Class&lt;br /&gt;
|-&lt;br /&gt;
|12 || Valid Multi-slot Class || ??&lt;br /&gt;
|-&lt;br /&gt;
|13 || Multi-slot Class ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Unicode 2 treatment ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || Extended Measurement capability || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|16 || Valid Switch-measure-value || ??&lt;br /&gt;
|-&lt;br /&gt;
|17 || Switch-measure-value ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || Switch-measure-switch-value ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Identity Parameters (2,8) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;imeisv&amp;gt;&lt;br /&gt;
 &amp;lt;imsi&amp;gt;&lt;br /&gt;
 &amp;lt;tmsi&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
The IMEISV line contains 20 numbers separated by commas, the numbers on positions 5 to 18 are the digits of the [http://en.wikipedia.org/wiki/IMEI IMEI] number as returned by AT+CGSN.  The second line contains another 20 numbers and the numbers on positions 5 to 19 form the digits of your SIM card's [http://en.wikipedia.org/wiki/IMSI IMSI] number, as returned by the AT+CIMI command. The last line contains the [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] number in plain format (ten digits).&lt;br /&gt;
&lt;br /&gt;
===== Firmware components versions (2,9) =====&lt;br /&gt;
Prints version information for different components of the modem's firmware.  The format and the scope of the information presented is identical to that in [[#AT%VER|AT%VER]] output with the exception that only a subset of all of the components are listed:&lt;br /&gt;
 AT%EM=2,9&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
===== GMM Information (2,10) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== GRLC Information (2,11) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== AMR Configuration Information (2,12) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== PDP Information (2,13) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem OpenMoko commands ===&lt;br /&gt;
&lt;br /&gt;
The Ti calypso GSM Modem firmware has been extended by OpenMoko specific AT&lt;br /&gt;
commands.  This page documents those commands.&lt;br /&gt;
&lt;br /&gt;
==== AT@POFF ====&lt;br /&gt;
&lt;br /&gt;
Powers off the GSM Modem. No parameters/options. &lt;br /&gt;
&lt;br /&gt;
==== AT@ST ====&lt;br /&gt;
&lt;br /&gt;
configure the sidetone level for voice calls generated inside the GSM Modem.  This should normally be off, since the sidetone in GTA01/GTA02 is generated inside the the [[WM8753|wolfson audio codec]].&lt;br /&gt;
&lt;br /&gt;
 AT@ST?&lt;br /&gt;
 +ST: -5&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=?&lt;br /&gt;
 @ST: (-26,-23,-20,-17,-14,-11,-8,-5,-2,1)&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=&amp;quot;-26&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
-26 means turn off the sidetone totally.&lt;br /&gt;
&lt;br /&gt;
==== AT@AUL ====&lt;br /&gt;
&lt;br /&gt;
audio table load.&lt;br /&gt;
&lt;br /&gt;
 AT@AUL=&amp;quot;0&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
 AT@AUL=?&lt;br /&gt;
 @AUL:(0)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This audio table is a collection of audio parameters for GSM calibrated by hardware engineers,&lt;br /&gt;
 &lt;br /&gt;
 Mode of microphone&lt;br /&gt;
 Gain of microphone&lt;br /&gt;
 FM PGA gain setting&lt;br /&gt;
 Bias setting for microphone&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 ANR parameters&lt;br /&gt;
 Level of side tone&lt;br /&gt;
 AEC parameters&lt;br /&gt;
 Echo suppressor&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 Gain of speaker&lt;br /&gt;
 Extra gain for AUDIO_SPEAKER_HANDSET and AUDIO_SPEAKER_HANDFREE modes&lt;br /&gt;
 Enable/Disable filter&lt;br /&gt;
 Enable/Disable high-pass filter&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 IIR uplink/downlink coefficients&lt;br /&gt;
 Limiter parameters&lt;br /&gt;
 Level of speaker&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 State of speaker&lt;br /&gt;
 Sampling frequency&lt;br /&gt;
 Level of volume &lt;br /&gt;
 AGC parameters&lt;br /&gt;
 DRC parameters&lt;br /&gt;
&lt;br /&gt;
The audio table will be stored in the flash file system within GSM modem, you can load it through this command. &lt;br /&gt;
&lt;br /&gt;
For now, we only provide one configuration, that is &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If AT@AUL=&amp;quot;0&amp;quot; responds with ERROR, it means there's no audio table existing and the GSM firmware will use default values.&lt;br /&gt;
&lt;br /&gt;
== Wakeup of CPU from GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== Problem description ===&lt;br /&gt;
&lt;br /&gt;
For power management reasons, it is absolutely neccessary that only the minimal &lt;br /&gt;
required parts of the device are powered at any given time.  If you carry your&lt;br /&gt;
Neo in your pocket, then all it should do is stay online with the GSM network, &lt;br /&gt;
and notify you in case there's an incoming call/sms (like other phones).&lt;br /&gt;
&lt;br /&gt;
During that time, the Neo1973 Application Processor (s3c24xx) is suspended,&lt;br /&gt;
i.e. not powered at all.  The SDRAM is in self-refresh mode.&lt;br /&gt;
&lt;br /&gt;
In this suspend mode (which Samsung calls by the funny name of POWER_OFF), the&lt;br /&gt;
processor is not able to receive any data from the GSM Modem.  Nor is it able&lt;br /&gt;
to detect incoming characters and wake up the CPU.  The only wake up sources&lt;br /&gt;
are a certain set of external interrupts (EINT).&lt;br /&gt;
&lt;br /&gt;
Thus, the GSM Modem GPIO line IO1 was connected with the Samsung EINT1, and&lt;br /&gt;
the GSM Modem firmware contains some special logic to generate an interrupt&lt;br /&gt;
(and thus wake-up event) to the CPU.&lt;br /&gt;
&lt;br /&gt;
=== Logic for problem solution ===&lt;br /&gt;
&lt;br /&gt;
Preconditions&lt;br /&gt;
# The default state of GSM Modem output IO1 is logical LOW.  &lt;br /&gt;
&lt;br /&gt;
Anytime the modem has pending data on the MODEM-UART channel, it&lt;br /&gt;
# checks if CTS_MODEM permits sending of data&lt;br /&gt;
## if CTS_MODEM permits sending of UART data, go to '4.2'&lt;br /&gt;
# [implicit: CTS_MODEM does not permit sending of UART data]&lt;br /&gt;
## set IO1 line to logical HIGH level&lt;br /&gt;
## buffer modem data [until buffer is full, after which data gets discarded]&lt;br /&gt;
# wait until CTS_MODEM permits sending of UART data   &lt;br /&gt;
# as soon as CTS_MODEM permits sending of UART data,&lt;br /&gt;
## set IO1 back to logical LOW level&lt;br /&gt;
## start sending of UART data&lt;br /&gt;
# once all data is transmitted, return to idle state.  When next data item is to be transmitted, start again from '1'&lt;br /&gt;
&lt;br /&gt;
=== Software implementation ===&lt;br /&gt;
&lt;br /&gt;
{{note|This is the plan, it has not been fully implemented yet}}&lt;br /&gt;
&lt;br /&gt;
# a firmware post may-16-2007 needs to be present in the gsm modem. This is true for all phones bought during phase 1 in the online shop.  However, I currently don't really know what firmware version was present in the GTA01Bv4 that we sent to phase 0.&lt;br /&gt;
# the suspend code probably still needs to correctly configure the RTS/CTS lines (i.e. put them in GPIO mode, and set them to their desired &amp;quot;don't send any more characters&amp;quot; level)&lt;br /&gt;
&lt;br /&gt;
So in this case, any data from the GSM modem will wake up the cpu for processing of that data.  The GSM modem has some internal buffer (I don't know how big right now) that should be sufficient for buffering the data until the CPU is alive.&lt;br /&gt;
&lt;br /&gt;
This also means that gsmd will eventually have to re-program the GSM modem to make sure only relevant unsolicited response codes are sent during suspend.  You usually don't want a signal level change to cause a CPU wake up, only things like incoming message / call.&lt;br /&gt;
&lt;br /&gt;
Upgrading the modem's firmware is technically possible but no proper software is currently legally available to users outside OpenMoko staff.&lt;br /&gt;
&lt;br /&gt;
== Power On, Power Off, and Reset of the GTA01 GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem Connections ===&lt;br /&gt;
&lt;br /&gt;
The GTA01 GSM modem communicates via a standard serial port to the host system.  The port operates at 115200 baud, 8 bits, no parity, and requires hardware flow control (RTSCTS) to operate.  Due to the fact that the host CPU has only a pair of serial ports but there are three devices that wish to use them, the GSM modem port is actually shared with the serial console (the third device is the GPS chip, which has exclusive use of the second serial port).&lt;br /&gt;
&lt;br /&gt;
A GPIO (General Purpose IO) pin controls the switching of the serial port between the console and the GSM modem.  Another GPIO is used to turn on the power to the GSM modem.  On older versions of the GTA01 a third GPIO could be used to reset the GSM modem; this signal proved to cause difficulties with the modem, and on all the GTA01 units sold this GPIO line is not connected.  The driver combines the the switching of the serial port to the GSM modem and the power-on signal to the modem into a single operation; the two cannot be controlled independently from user-space (at the time of this writing).&lt;br /&gt;
&lt;br /&gt;
It is important to note that the GPIO controlling the power-on of the GSM modem can only signal to the modem to turn itself on -- turning this GPIO off does not power off the GSM modem.  Instead, the '''AT@POFF''' sequence must be sent to the modem in order to perform a power off.&lt;br /&gt;
&lt;br /&gt;
Further complicating power control of the GTA01 GSM modem is the fact that the modem draws power from the battery/charger side of the power management circuitry -- this means that turning off the power to the host CPU on the GTA01 does not turn off the power to the modem.  In real-world operation, this means that unless the shutdown procedure for the host cpu's operating system issues the '''AT@POFF''' command to power off the GSM modem, the modem will remain turned on, drawing power from the battery even thought the host CPU is completely powered off.&lt;br /&gt;
&lt;br /&gt;
=== The Power-On Sequence ===&lt;br /&gt;
&lt;br /&gt;
The sharing of the serial port between the console and the GSM modem results in the need for a very specific power-on and power-off sequence.  Two major problems exist that must be avoided: infinite echos, and RTSCTS lockup.&lt;br /&gt;
&lt;br /&gt;
==== Avoiding Infinite Echos ====&lt;br /&gt;
&lt;br /&gt;
By default, the serial port is initialized in &amp;quot;echo&amp;quot; mode -- meaning that any characters sent to the serial port from the console will be echoed back to the console.  Upon power-up or reset, the GSM modem also echos back characters it receives.  So unless action is taken to disable the serial port's echo before the GSM modem is powered on, an infinite echo will result.  The modem will print the standard &amp;quot;Interpretor Ready&amp;quot; message, which will be echoed back to it by the serial port driver, the modem will echo that back to the serial port again (adding some error text to the message), the serial port will echo that again, and this continues until buffers in either or both the serial port and the modem fill up, and one of them ceases to transmit.&lt;br /&gt;
&lt;br /&gt;
Once in this situation, it is difficult for software (such as gsmd) to gain synchronization of commands and responses.&lt;br /&gt;
&lt;br /&gt;
The best solution is to avoid the problem to begin with.  Simply ensure that the serial port is set to &amp;quot;no-echo&amp;quot; mode before the GSM modem is enabled and powered up.  This sequence illustrates how this is normally done:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
(Note that the stty command argument syntax is somewhat unusual: &amp;quot;-echo&amp;quot; means &amp;quot;disable echo&amp;quot;, while &amp;quot;echo&amp;quot; means &amp;quot;enable echo&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==== Avoiding RTSCTS Lockup ====&lt;br /&gt;
&lt;br /&gt;
Hardware flow control uses additional signals in addition to the serial data in and out signals on the serial port to control the flow of the data.  Specifically, when hardware flow control is enabled, a given endpoint is expected to assert its RTS (Request To Send) line when it has data to transmit, and not transit that data until it sees a CTS (Clear TO Send) signal from the other end.  In this fashion, buffer overruns and data loss are avoided.&lt;br /&gt;
&lt;br /&gt;
The GSM modem requires that hardware flow control be enabled in order to communicate with the host.  However, the console lacks the RTS and CTS signals and thus is unable to communicate if hardware flow control is enabled.  But what really makes this problem serious is that if hardware flow control is enabled while the serial port is switched to the console, and the (small) transmit buffer for the port fills (such as a kernel log message), the Linux kernel will lock up, and become completely non-responsive.  There is no recovery mechanism for this other than to disconnect the device from its USB port or charger, and remove the battery.&lt;br /&gt;
&lt;br /&gt;
One solution to this is to disable the use of the serial port as a console for the kernel.  However, this is greatly inconvenient - the knowledgeable user with a debug board will usually wish to have a console available, and the novice user will probably wish to avoid changing the u-boot variables in order to disable the console.  So, a better approach is to avoid this situation by taking great care when powering-up, resetting, or powering-down the modem.  The following sequence illustrates how to switch the serial port back to the console mode safely:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Resetting the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
The GSM modem can be effectively reset by changing the state of the Power-On GPIO from off to on -- in other words, just disable the GSM modem and re-enable it.  The safe way to accomplish this is to combine the two sequences above:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
It should be noted that this reset sequence will also power up the modem if it is not enabled and powered up to begin with.  For this reason, the reset sequence above should be used for both power-up and reset purposes.&lt;br /&gt;
&lt;br /&gt;
=== Powering Off the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
Powering off the GSM modem on the GTA01 can only be done by issuing the '''AT@POFF''' command to the device.  In order to issue this command, it is usually necessary to return it to a known state.  So the normal mechanism is to issue the reset operation (above), wait for a short period of time (1 second seems to be sufficient), and send the '''AT@POFF''' command.  This should be followed by an additional short delay (to allow the text to be transmitted), and then the serial port can be switched back to the console.  The following script accomplishes this:&lt;br /&gt;
&lt;br /&gt;
 ### Reset the modem to place it in a known state&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 &lt;br /&gt;
 ### Now enable hardware flow control, and transmit the sequence&lt;br /&gt;
 stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
 sleep 1&lt;br /&gt;
 echo -e &amp;quot;AT@POFF\r&amp;quot; &amp;gt;/dev/ttySAC0&lt;br /&gt;
 sleep 1&lt;br /&gt;
 &lt;br /&gt;
 ### Finally, we disable flow control, and switch back the port&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Eliminating echo on the non-neo end of phone calls ===&lt;br /&gt;
Here is the modified /etc/gsmhandset.state that  eliminates echo during calls (at least for  [[User:Wurp]]): http://drivehq.com/file/df.aspx/publish/sagacis/PublicFolder/handset.sagacis.state&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem</id>
		<title>Neo 1973 and Neo FreeRunner gsm modem</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_and_Neo_FreeRunner_gsm_modem"/>
				<updated>2008-03-10T19:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Powering Off the GSM Modem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is about the [[Neo1973]] GTA01 (and GTA02) GSM Modem, based on the Ti Calypso chipset.&lt;br /&gt;
&lt;br /&gt;
== [[Hardware:AT Commands|AT command]] interface ==&lt;br /&gt;
&lt;br /&gt;
=== Sending Commands ===&lt;br /&gt;
To send commands to the GSM modem, you may use &lt;br /&gt;
cu -l /dev/ttySAC0&lt;br /&gt;
or use gsmd and libgsmd-tool for a less direct method.&lt;br /&gt;
&lt;br /&gt;
If you connect directly (via cu) you must `chown uucp.uucp /dev/ttySAC0` first since cu is picky about permissions.&lt;br /&gt;
&lt;br /&gt;
libgsmd-tool is less functional than the direct raw connection to the modem.&lt;br /&gt;
&lt;br /&gt;
{| &lt;br /&gt;
Note: If you use cu -l /dev/ttySAC0 to enter commands, type &amp;quot;~.&amp;quot; to quit &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Standard AT commands ===&lt;br /&gt;
The GSM modem follows GSM [http://www.3gpp.org/ftp/Specs/html-info/0705.htm TS07.05], [http://www.3gpp.org/ftp/Specs/html-info/0707.htm 07.07] and [http://www.3gpp.org/ftp/Specs/html-info/0710.htm 07.10] very closely.&lt;br /&gt;
&lt;br /&gt;
[http://www.3gpp.org/specs/numbering.htm 3gpp.org] has information about 3G and GSM specifications&lt;br /&gt;
&lt;br /&gt;
=== TI proprietary AT commands ===&lt;br /&gt;
&lt;br /&gt;
there are a few of them, but none of them are really required for regular operation of the device.  Due to NDA issues, OpenMoko cannot provide a reference documentation to those commands.  Using the standards-compliant '''AT+CLAC''', you will notice that the non-standard commands also show up in the command listing.&lt;br /&gt;
&lt;br /&gt;
You will also notice that those non-standard commands are prefixed with '''AT%''' rather than '''AT+''' for the standards-compliant commands.&lt;br /&gt;
&lt;br /&gt;
Thus, we welcome our user and developer community to play with those commands and document them here.  Since we never have released any NDA documentation to our community, there is no legal issue.&lt;br /&gt;
&lt;br /&gt;
Note that the syntax and the interpretation of the output of the commands listed here are only educated guesses and should not be relied on.  Part of the proprietary command set has identical or similar usage as on other modems in the market, some of which have fully opened specifications and information about these commands can be taken from their datasheets (some known similar modems with open specs: ''BenQ M22A'' and ''M23A'', ''Enfora Enabler-G [http://www.enfora.com/index.cgi?CONTENT_ID=376&amp;amp;User:LANGUAGE=en II] / [http://www.enfora.com/index.cgi?CONTENT_ID=377&amp;amp;User:LANGUAGE=en III]'' and ''SPT 1834'').&lt;br /&gt;
&lt;br /&gt;
==== AT%VER ====&lt;br /&gt;
Prints the firmware component versions.&lt;br /&gt;
&lt;br /&gt;
The modem's response looks like this on an un-updated phase-0 [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   15:11:24 17/04/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      10:21:37 28/03/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      10:25:01 28/03/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      10:25:12 28/03/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      10:18:09 28/03/07&lt;br /&gt;
 %VER: t30 a086 ** NONE **      10:29:01 28/03/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv4|GTA01Bv4]] phase 1 phone, produced start of september:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   12:32:56 24/08/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      14:07:10 08/06/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      14:07:46 08/06/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      14:11:52 08/06/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      14:13:01 08/06/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      14:13:54 08/06/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      14:14:20 08/06/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      14:15:52 08/06/07&lt;br /&gt;
 %VER: alr a086 ** NONE **      14:06:38 08/06/07&lt;br /&gt;
 %VER: l2r a086 ** NONE **      14:10:36 08/06/07&lt;br /&gt;
 %VER: ra a086 ** NONE **      14:12:32 08/06/07&lt;br /&gt;
 %VER: rlp a086 ** NONE **      14:12:40 08/06/07&lt;br /&gt;
 %VER: fad a086 ** NONE **      14:08:06 08/06/07&lt;br /&gt;
&lt;br /&gt;
For a [[Neo1973_Hardware#GTA01Bv3|GTA01Bv3]] phase 0 phone:&lt;br /&gt;
&lt;br /&gt;
 %VER: aci sean non_clearcase   10:46:06 29/08/06&lt;br /&gt;
 %VER: cc a086 non_clearcase   14:53:59 28/08/06&lt;br /&gt;
 %VER: dl a086 non_clearcase   14:54:40 28/08/06&lt;br /&gt;
 %VER: mm a086 non_clearcase   14:59:25 28/08/06&lt;br /&gt;
 %VER: rr a086 non_clearcase   15:00:11 28/08/06&lt;br /&gt;
 %VER: sim a086 non_clearcase   15:00:57 28/08/06&lt;br /&gt;
 %VER: sms a086 non_clearcase   15:01:23 28/08/06&lt;br /&gt;
 %VER: ss a086 non_clearcase   15:02:22 28/08/06&lt;br /&gt;
 %VER: alr a086 non_clearcase   14:53:19 28/08/06&lt;br /&gt;
 %VER: l2r a086 non_clearcase   14:58:02 28/08/06&lt;br /&gt;
 %VER: ra a086 non_clearcase   14:59:50 28/08/06&lt;br /&gt;
 %VER: rlp a086 non_clearcase   14:59:56 28/08/06&lt;br /&gt;
 %VER: fad a086 non_clearcase   14:55:04 28/08/06&lt;br /&gt;
 %VER: t30 a086 non_clearcase   15:02:27 28/08/06&lt;br /&gt;
&lt;br /&gt;
The second column lists firmware component names (e.g. aci = AT Command Interface). The third column is the user name of the engineer who last modified given component. The rightmost column is probably the last time someone worked on it (Please note that the name 'sean' here is not Sean Moss-Pultz :)  while a086 is an anonymous TI engineer's nick, meaning that the component has not been modified at FIC).&lt;br /&gt;
&lt;br /&gt;
==== AT%A ====&lt;br /&gt;
Print values from an ADC.&lt;br /&gt;
&lt;br /&gt;
This command is not listed in AT+CLAC output but it is triggered by any input that starts with AT%A except AT%ALS (''Alternative Line Service'') and AT%ATR, which are other proprietary AT commands.  So for example AT%ABCD,HELLO will also run this commands.  On my Neo modem it prints a line containing nine values of the form ADC &amp;lt;number&amp;gt; = &amp;lt;value&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 AT%A&lt;br /&gt;
 EXT: I&lt;br /&gt;
 ADC 0 = e19, ADC 1 = 0, ADC 2 = d, ADC 3 = 6ea, ADC 4 = a25, ADC 5 = 9fc, ADC 6 = 96d, ADC 7 = 0, ADC 8 = 6&lt;br /&gt;
&lt;br /&gt;
It would seem there's an ADC (analog-to-digital converter) module in the modem with nine input lines connected to it and the values on these lines are reported by this command in hexadecimal format.  The values change over time.  Inputs 1 and 7 always show zero on my modem, input 1 value changes slightly (+/- 20), while values on inputs 3, 4, 5, 6 and 8 change seemingly randomly in the range 0x000 - 0xfff (it would seem the chip is 12-bit).&lt;br /&gt;
&lt;br /&gt;
==== AT%NRG ====&lt;br /&gt;
The AT%NRG (''Network registration and service selection'') is an expansion of the AT+COPS command.  It allows specifying the service state of the registration, in addition to AT+COPS functionality. It doesn't however allow listing all present operators (use AT+COPS for this).&lt;br /&gt;
&lt;br /&gt;
==== AT%EM ====&lt;br /&gt;
Execution of ''Engineering Mode'' commands.  Allows viewing the information accessible to the modem but not available through standard GSM AT commands set such as detailed information on the current Serving Cell (the one we're registered with), its neighbouring cells, the GPRS/EDGE availability and SIM card data.&lt;br /&gt;
&lt;br /&gt;
Citing Enfora Inc. Application Note EDG0108TN01:&lt;br /&gt;
''The purpose of Engineering Mode (EM) is to provide means to observe the behavior of the mobile station and the settings of the network as counterpart and therefore defines a lot of possibilities to analyze the network. The EM can be used for observation of a defined data set during functional test and field test.''&lt;br /&gt;
&lt;br /&gt;
''Warning: The display of certain parameters is dependent on the wireless network sending the correct information in the System Information Packets. There is no guaranty that the information is always forwarded from the network. At times data may not be present to display in the Engineering Mode responses.''&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
 AT%EM=&amp;lt;mode&amp;gt;,&amp;lt;command&amp;gt;&lt;br /&gt;
Allowed &amp;lt;mode&amp;gt; values:&lt;br /&gt;
* 2 - AT command mode&lt;br /&gt;
* 3 - PCO mode&lt;br /&gt;
I only describe the AT mode commands here.  Commands are in range 1 to 13:&lt;br /&gt;
 AT%EM=2,1  Serving Cell Information&lt;br /&gt;
 AT%EM=2,2  Serving Cell GPRS Information&lt;br /&gt;
 AT%EM=2,3  Neighbour Cell Information&lt;br /&gt;
 AT%EM=2,4  Location and Paging Parameters&lt;br /&gt;
 AT%EM=2,5  PLMN Parameters&lt;br /&gt;
 AT%EM=2,6  Ciphering, Hopping, DTX Parameters&lt;br /&gt;
 AT%EM=2,7  Power Parameters&lt;br /&gt;
 AT%EM=2,8  Identity Parameters&lt;br /&gt;
 AT%EM=2,9  Firmware components versions&lt;br /&gt;
 AT%EM=2,10 GMM Information&lt;br /&gt;
 AT%EM=2,11 GRLC Information&lt;br /&gt;
 AT%EM=2,12 AMR Configuration Information&lt;br /&gt;
 AT%EM=2,13 PDP Information&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell Information (2,1) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;afrcn&amp;gt;,&amp;lt;c1&amp;gt;,&amp;lt;c2&amp;gt;,&amp;lt;rxlev&amp;gt;,&amp;lt;bsic&amp;gt;,&amp;lt;cell_id&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;txlev&amp;gt;,&amp;lt;tn&amp;gt;,&amp;lt;rlt&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;rxlev_f&amp;gt;,&amp;lt;rxlev_s&amp;gt;,&amp;lt;rxqual_f&amp;gt;,&amp;lt;rxqual_s&amp;gt;,&amp;lt;lac&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;cbq&amp;gt;,&amp;lt;cell_type_ind&amp;gt;,&amp;lt;vocoder&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || Current Channel Number ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentifier ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || dsc || Downlink Signaling Counter || current counter value&lt;br /&gt;
|-&lt;br /&gt;
|8  || txlev || Transmit Power Level ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || tn || Timeslot Number ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || rlt || Radio Link Timeout Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || rxlev_f || Received Field Strength full ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || rxlev_s || Received Field Strength sub ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || rxqual_f || Received Quality full ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || rxqual_s || Received Quality sub ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|19 || Cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|20 || vocoder || Vocoder || Sig/speech/efr/amr/14.4/9.6/4.8/2.4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
According to http://www.qrctech.com/freq_chart_24x36.pdf, frequencies can be calculated using the arfcn field like this:&lt;br /&gt;
 if 172 &amp;lt; arfcn &amp;lt;  252 then freq = 869 + (arfcn -127) x 0.2 MHz    # 850 band &lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  811 then freq = 1930 + (arfcn - 511) x 0.2 MHz  # 1900 band&lt;br /&gt;
 if   1 &amp;lt; arfcn &amp;lt;  124 then freq = 935 + (arfcn * 0.2) MHz         # 900 band (original alloc)&lt;br /&gt;
 if 974 &amp;lt; arfcn &amp;lt; 1023 then freq = 925 + (arfcn - 974) x 0.2 MHz   # 900 band E-GSM&lt;br /&gt;
 if 511 &amp;lt; arfcn &amp;lt;  886 then freq = 1805 + (arfcn - 511) x 0.2 MHz  # 1800 band&lt;br /&gt;
&lt;br /&gt;
Notice the 1800 and 1900 bands have the same channel ids and nearly the same algorithm with a different starting point.&lt;br /&gt;
&lt;br /&gt;
===== Serving Cell GPRS Information (2,2) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;nts&amp;gt;,&amp;lt;nmo&amp;gt;,&amp;lt;spgc_ccch_sup&amp;gt;,&amp;lt;priority_access_thr&amp;gt;,&amp;lt;cba&amp;gt;,&amp;lt;rac&amp;gt;,&amp;lt;tav&amp;gt;,&amp;lt;dsc&amp;gt;,&amp;lt;c31&amp;gt;,&amp;lt;c32&amp;gt;,&amp;lt;band_ind&amp;gt;,&amp;lt;pfc_supp_n_w&amp;gt;,&amp;lt;ccn_mode_sts&amp;gt;,&amp;lt;Psi_sts_suppt&amp;gt;,&amp;lt;edge_support&amp;gt;,&amp;lt;epcr_support&amp;gt;,&amp;lt;bep_period&amp;gt;,&amp;lt;bss_paging_coord&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || nts || PCCCH_TIMESLOT || Number of downlink timeslots&lt;br /&gt;
|-&lt;br /&gt;
|2  || nmo || Network Mode of Operation ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || spgc_ccch_sup || Network Control-spgc_ccch_sup || Network support for split paging&lt;br /&gt;
|-&lt;br /&gt;
|4  || priority_access_thr || Network Control-Priority_Access_Threshold || packet access to the NW according to priority level&lt;br /&gt;
|-&lt;br /&gt;
|5  || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || tav || Timing Advance ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || dsc || Downlink Signal Counter ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || c31 || Cell-reselect Criterion C31 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || c32 || Cell-reselect Criterion C32 ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || band_ind || Band Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || pfc_supp_n_w || PFC Support ||&lt;br /&gt;
|-&lt;br /&gt;
|13 || ccn_mode_sts || CCN Mode ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Psi_sts_suppt || PSI Support ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || edge_support || EDGE Support ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || epcr_support || EPCR Support ||&lt;br /&gt;
|-&lt;br /&gt;
|17 || bep_period || BEP Period ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || bss_paging_coord || BSS Paging ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Neighbour Cell Information (2,3) =====&lt;br /&gt;
The first line of response is of the format %EM: &amp;lt;number of cells listed&amp;gt;, where the maximum seems to be 6, one cell for each channel.  The next sixteen lines list the values of each of the parameters for each of the cells.&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Short name !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || arfcn || BCCH channel ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || c1 || Path Loss Criterion C1 ||&lt;br /&gt;
|-&lt;br /&gt;
|3  || c2 || Cell-reselection Criterion C2 ||&lt;br /&gt;
|-&lt;br /&gt;
|4  || rxlev || Received Field Strength || (rxlev/2)+2 gives the AT+CSQ response value&lt;br /&gt;
|-&lt;br /&gt;
|5  || bsic || Base Station ID Code ||&lt;br /&gt;
|-&lt;br /&gt;
|6  || cell_id || Cell Indentity ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || lac || Location Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || frame_offset || Frame Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || time_alignmnt || Time Alignment ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || cba || Cell Bar Access ||&lt;br /&gt;
|-&lt;br /&gt;
|11 || cbq || Cell Bar Qualifier ||&lt;br /&gt;
|-&lt;br /&gt;
|12 || cell_type_ind || Cell Type Indicator || NA/GSM/GPRS&lt;br /&gt;
|-&lt;br /&gt;
|13  || rac || Routing Area Code ||&lt;br /&gt;
|-&lt;br /&gt;
|14  || cell_resel_offset || Cell-reselection Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || temp_offset || Temporary Offset ||&lt;br /&gt;
|-&lt;br /&gt;
|16 || rxlev_acc_min || Rxlen access min ||&lt;br /&gt;
|}&lt;br /&gt;
My Neo1973 reports:&lt;br /&gt;
 AT%EM=2,3&lt;br /&gt;
 %EM: 6&lt;br /&gt;
 763,766,771,778,780,773&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 20,8,14,18,17,8&lt;br /&gt;
 73,46,54,51,13,12&lt;br /&gt;
 6753,10951,3531,0,1933,1924&lt;br /&gt;
 100,100,300,300,300,100&lt;br /&gt;
 80229,961995,0,1166923,0,2715553&lt;br /&gt;
 3504,724,0,3724,4,1112&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 2,2,2,2,2,2&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 0,0,0,0,0,0&lt;br /&gt;
 10,10,10,10,10,10&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
===== Location and Paging Parameters (2,4) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;bs_pa_mfrms&amp;gt;,&amp;lt;t3212&amp;gt;,&amp;lt;mcc[0]&amp;gt;&amp;lt;mcc[1]&amp;gt;&amp;lt;mcc[2]&amp;gt;,&amp;lt;mnc[0]&amp;gt;&amp;lt;mnc[1]&amp;gt;&amp;lt;mnc[2]&amp;gt;,&amp;lt;tmsi&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || bs_pa_mfrms || BS PA MFRMS paging repeat period&lt;br /&gt;
|-&lt;br /&gt;
|2 || t3212 || Periodic location updating interval&lt;br /&gt;
|-&lt;br /&gt;
|3 || mcc || [http://en.wikipedia.org/wiki/Mobile_country_code Mobile Country Code]&lt;br /&gt;
|-&lt;br /&gt;
|4 || mnc || [http://en.wikipedia.org/wiki/Mobile_Network_Code Mobile Network Code]&lt;br /&gt;
|-&lt;br /&gt;
|5 || tmsi || [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] (in binary)&lt;br /&gt;
|}&lt;br /&gt;
The MCC and MNC values are the same values that are used to form the Mobile Operator names used by the standard AT+COPS and AT+COPN commands in numeric format.  The TMSI is the same number that [http://wiki.openmoko.org/wiki/GTA01_gsm_modem#Identity_Parameters_.282.2C8.29 AT%EM=2,8] gives, just in a different format.&lt;br /&gt;
&lt;br /&gt;
===== PLMN Parameters (2,5) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;no_creq_max&amp;gt;,&amp;lt;reest_flag&amp;gt;,&amp;lt;txpwr_max&amp;gt;,&amp;lt;rxlev_min&amp;gt;,&amp;lt;rel_cs&amp;gt;,&amp;lt;sgsnr_rel&amp;gt;,&amp;lt;mscr_rel&amp;gt;,&amp;lt;net_rel&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Parameter no. !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
|1 || no_creq_max || Max. number or retries for channel requests&lt;br /&gt;
|-&lt;br /&gt;
|2 || reest_flag || Re-establishment Flag&lt;br /&gt;
|-&lt;br /&gt;
|3 || txpwr_max || MS TXPWR MAX CCCH&lt;br /&gt;
|-&lt;br /&gt;
|4 || rxlev_min || Rxlev_access_min&lt;br /&gt;
|-&lt;br /&gt;
|5 || rel_cs || Release Cause (only the last release cause is remembered)&lt;br /&gt;
|-&lt;br /&gt;
|6 || sgsnr_rel || SGSNR Release&lt;br /&gt;
|-&lt;br /&gt;
|7 || mscr_rel || MSCR Release&lt;br /&gt;
|-&lt;br /&gt;
|8 || net_rel || Network Release Info&lt;br /&gt;
|}&lt;br /&gt;
===== Ciphering, Hopping, DTX Parameters (2,6) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== Power Parameters (2,7) =====&lt;br /&gt;
The output consits of two lines, first line containing 12 comma-separated values and the second line 18 comma-separated values, such as:&lt;br /&gt;
 AT%EM=2,7&lt;br /&gt;
 %EM: 1,1,0,0,0,1,1,0,0,0,1,0&lt;br /&gt;
 6,0,0,0,0,1,1,1,4,0,0,0,0,1,0,0,0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
On the first line (called Classmark 2) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Revision Level ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || Controlled Early Classmark Sending || 1 means enabled&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/1 Encryption algorithm || 0 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || RF Power capability ||&lt;br /&gt;
|-&lt;br /&gt;
|5  || Pseudo-synchronisation capability || 1 means present&lt;br /&gt;
|-&lt;br /&gt;
|6  || SS Screening Indicator ||&lt;br /&gt;
|-&lt;br /&gt;
|7  || SMS capability ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Frequency capability ||&lt;br /&gt;
|-&lt;br /&gt;
|9  || Classmark 3 options || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|10 || CM Service Prompt || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|11 || A5/3 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|12 || A5/2 Encryption algorithm || 1 means available&lt;br /&gt;
|}&lt;br /&gt;
On the second line (called Classmark 3) we have:&lt;br /&gt;
{|&lt;br /&gt;
! Value no. !! Meaning !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
|1  || Multiband support ||&lt;br /&gt;
|-&lt;br /&gt;
|2  || A5/7 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|3  || A5/6 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|4  || A5/5 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|5  || A5/4 Encryption algorithm || 1 means available&lt;br /&gt;
|-&lt;br /&gt;
|6  || Valid Radio capability 2 || ??&lt;br /&gt;
|-&lt;br /&gt;
|7  || Associated Radio capability 2 ||&lt;br /&gt;
|-&lt;br /&gt;
|8  || Valid Radio capability 1 || ??&lt;br /&gt;
|-&lt;br /&gt;
|9  || Associated Radio capability 1 ||&lt;br /&gt;
|-&lt;br /&gt;
|10 || Valid R Support || ??&lt;br /&gt;
|-&lt;br /&gt;
|11 || R Support || R-GSM Class&lt;br /&gt;
|-&lt;br /&gt;
|12 || Valid Multi-slot Class || ??&lt;br /&gt;
|-&lt;br /&gt;
|13 || Multi-slot Class ||&lt;br /&gt;
|-&lt;br /&gt;
|14 || Unicode 2 treatment ||&lt;br /&gt;
|-&lt;br /&gt;
|15 || Extended Measurement capability || 1 means supported&lt;br /&gt;
|-&lt;br /&gt;
|16 || Valid Switch-measure-value || ??&lt;br /&gt;
|-&lt;br /&gt;
|17 || Switch-measure-value ||&lt;br /&gt;
|-&lt;br /&gt;
|18 || Switch-measure-switch-value ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Identity Parameters (2,8) =====&lt;br /&gt;
Response format:&lt;br /&gt;
 %EM: &amp;lt;imeisv&amp;gt;&lt;br /&gt;
 &amp;lt;imsi&amp;gt;&lt;br /&gt;
 &amp;lt;tmsi&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
The IMEISV line contains 20 numbers separated by commas, the numbers on positions 5 to 18 are the digits of the [http://en.wikipedia.org/wiki/IMEI IMEI] number as returned by AT+CGSN.  The second line contains another 20 numbers and the numbers on positions 5 to 19 form the digits of your SIM card's [http://en.wikipedia.org/wiki/IMSI IMSI] number, as returned by the AT+CIMI command. The last line contains the [http://en.wikipedia.org/wiki/TMSI Temporary Mobile Subscriber Identity] number in plain format (ten digits).&lt;br /&gt;
&lt;br /&gt;
===== Firmware components versions (2,9) =====&lt;br /&gt;
Prints version information for different components of the modem's firmware.  The format and the scope of the information presented is identical to that in [[#AT%VER|AT%VER]] output with the exception that only a subset of all of the components are listed:&lt;br /&gt;
 AT%EM=2,9&lt;br /&gt;
 %VER: alr a086 ** NONE **      10:15:48 28/03/07&lt;br /&gt;
 %VER: dl a086 ** NONE **      10:17:34 28/03/07&lt;br /&gt;
 %VER: rr a086 ** NONE **      10:25:37 28/03/07&lt;br /&gt;
 %VER: mm a086 ** NONE **      10:23:09 28/03/07&lt;br /&gt;
 %VER: cc a086 ** NONE **      10:16:39 28/03/07&lt;br /&gt;
 %VER: ss a086 ** NONE **      10:28:52 28/03/07&lt;br /&gt;
 %VER: sim a086 ** NONE **      10:26:45 28/03/07&lt;br /&gt;
 %VER: sms a086 ** NONE **      10:27:21 28/03/07&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
===== GMM Information (2,10) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== GRLC Information (2,11) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== AMR Configuration Information (2,12) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
===== PDP Information (2,13) =====&lt;br /&gt;
{{todo|Fill in}}&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem OpenMoko commands ===&lt;br /&gt;
&lt;br /&gt;
The Ti calypso GSM Modem firmware has been extended by OpenMoko specific AT&lt;br /&gt;
commands.  This page documents those commands.&lt;br /&gt;
&lt;br /&gt;
==== AT@POFF ====&lt;br /&gt;
&lt;br /&gt;
Powers off the GSM Modem. No parameters/options. &lt;br /&gt;
&lt;br /&gt;
==== AT@ST ====&lt;br /&gt;
&lt;br /&gt;
configure the sidetone level for voice calls generated inside the GSM Modem.  This should normally be off, since the sidetone in GTA01/GTA02 is generated inside the the [[WM8753|wolfson audio codec]].&lt;br /&gt;
&lt;br /&gt;
 AT@ST?&lt;br /&gt;
 +ST: -5&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=?&lt;br /&gt;
 @ST: (-26,-23,-20,-17,-14,-11,-8,-5,-2,1)&lt;br /&gt;
 OK&lt;br /&gt;
 AT@ST=&amp;quot;-26&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
-26 means turn off the sidetone totally.&lt;br /&gt;
&lt;br /&gt;
==== AT@AUL ====&lt;br /&gt;
&lt;br /&gt;
audio table load.&lt;br /&gt;
&lt;br /&gt;
 AT@AUL=&amp;quot;0&amp;quot;&lt;br /&gt;
 OK&lt;br /&gt;
 AT@AUL=?&lt;br /&gt;
 @AUL:(0)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
This audio table is a collection of audio parameters for GSM calibrated by hardware engineers,&lt;br /&gt;
 &lt;br /&gt;
 Mode of microphone&lt;br /&gt;
 Gain of microphone&lt;br /&gt;
 FM PGA gain setting&lt;br /&gt;
 Bias setting for microphone&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 ANR parameters&lt;br /&gt;
 Level of side tone&lt;br /&gt;
 AEC parameters&lt;br /&gt;
 Echo suppressor&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 Gain of speaker&lt;br /&gt;
 Extra gain for AUDIO_SPEAKER_HANDSET and AUDIO_SPEAKER_HANDFREE modes&lt;br /&gt;
 Enable/Disable filter&lt;br /&gt;
 Enable/Disable high-pass filter&lt;br /&gt;
 FIR coefficients&lt;br /&gt;
 IIR uplink/downlink coefficients&lt;br /&gt;
 Limiter parameters&lt;br /&gt;
 Level of speaker&lt;br /&gt;
 Mode of speaker&lt;br /&gt;
 State of speaker&lt;br /&gt;
 Sampling frequency&lt;br /&gt;
 Level of volume &lt;br /&gt;
 AGC parameters&lt;br /&gt;
 DRC parameters&lt;br /&gt;
&lt;br /&gt;
The audio table will be stored in the flash file system within GSM modem, you can load it through this command. &lt;br /&gt;
&lt;br /&gt;
For now, we only provide one configuration, that is &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If AT@AUL=&amp;quot;0&amp;quot; responds with ERROR, it means there's no audio table existing and the GSM firmware will use default values.&lt;br /&gt;
&lt;br /&gt;
== Wakeup of CPU from GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== Problem description ===&lt;br /&gt;
&lt;br /&gt;
For power management reasons, it is absolutely neccessary that only the minimal &lt;br /&gt;
required parts of the device are powered at any given time.  If you carry your&lt;br /&gt;
Neo in your pocket, then all it should do is stay online with the GSM network, &lt;br /&gt;
and notify you in case there's an incoming call/sms (like other phones).&lt;br /&gt;
&lt;br /&gt;
During that time, the Neo1973 Application Processor (s3c24xx) is suspended,&lt;br /&gt;
i.e. not powered at all.  The SDRAM is in self-refresh mode.&lt;br /&gt;
&lt;br /&gt;
In this suspend mode (which Samsung calls by the funny name of POWER_OFF), the&lt;br /&gt;
processor is not able to receive any data from the GSM Modem.  Nor is it able&lt;br /&gt;
to detect incoming characters and wake up the CPU.  The only wake up sources&lt;br /&gt;
are a certain set of external interrupts (EINT).&lt;br /&gt;
&lt;br /&gt;
Thus, the GSM Modem GPIO line IO1 was connected with the Samsung EINT1, and&lt;br /&gt;
the GSM Modem firmware contains some special logic to generate an interrupt&lt;br /&gt;
(and thus wake-up event) to the CPU.&lt;br /&gt;
&lt;br /&gt;
=== Logic for problem solution ===&lt;br /&gt;
&lt;br /&gt;
Preconditions&lt;br /&gt;
# The default state of GSM Modem output IO1 is logical LOW.  &lt;br /&gt;
&lt;br /&gt;
Anytime the modem has pending data on the MODEM-UART channel, it&lt;br /&gt;
# checks if CTS_MODEM permits sending of data&lt;br /&gt;
## if CTS_MODEM permits sending of UART data, go to '4.2'&lt;br /&gt;
# [implicit: CTS_MODEM does not permit sending of UART data]&lt;br /&gt;
## set IO1 line to logical HIGH level&lt;br /&gt;
## buffer modem data [until buffer is full, after which data gets discarded]&lt;br /&gt;
# wait until CTS_MODEM permits sending of UART data   &lt;br /&gt;
# as soon as CTS_MODEM permits sending of UART data,&lt;br /&gt;
## set IO1 back to logical LOW level&lt;br /&gt;
## start sending of UART data&lt;br /&gt;
# once all data is transmitted, return to idle state.  When next data item is to be transmitted, start again from '1'&lt;br /&gt;
&lt;br /&gt;
=== Software implementation ===&lt;br /&gt;
&lt;br /&gt;
{{note|This is the plan, it has not been fully implemented yet}}&lt;br /&gt;
&lt;br /&gt;
# a firmware post may-16-2007 needs to be present in the gsm modem. This is true for all phones bought during phase 1 in the online shop.  However, I currently don't really know what firmware version was present in the GTA01Bv4 that we sent to phase 0.&lt;br /&gt;
# the suspend code probably still needs to correctly configure the RTS/CTS lines (i.e. put them in GPIO mode, and set them to their desired &amp;quot;don't send any more characters&amp;quot; level)&lt;br /&gt;
&lt;br /&gt;
So in this case, any data from the GSM modem will wake up the cpu for processing of that data.  The GSM modem has some internal buffer (I don't know how big right now) that should be sufficient for buffering the data until the CPU is alive.&lt;br /&gt;
&lt;br /&gt;
This also means that gsmd will eventually have to re-program the GSM modem to make sure only relevant unsolicited response codes are sent during suspend.  You usually don't want a signal level change to cause a CPU wake up, only things like incoming message / call.&lt;br /&gt;
&lt;br /&gt;
Upgrading the modem's firmware is technically possible but no proper software is currently legally available to users outside OpenMoko staff.&lt;br /&gt;
&lt;br /&gt;
== Power On, Power Off, and Reset of the GTA01 GSM Modem ==&lt;br /&gt;
&lt;br /&gt;
=== GSM Modem Connections ===&lt;br /&gt;
&lt;br /&gt;
The GTA01 GSM modem communicates via a standard serial port to the host system.  The port operates at 115200 baud, 8 bits, no parity, and requires hardware flow control (RTSCTS) to operate.  Due to the fact that the host CPU has only a pair of serial ports but there are three devices that wish to use them, the GSM modem port is actually shared with the serial console (the third device is the GPS chip, which has exclusive use of the second serial port).&lt;br /&gt;
&lt;br /&gt;
A GPIO (General Purpose IO) pin controls the switching of the serial port between the console and the GSM modem.  Another GPIO is used to turn on the power to the GSM modem.  On older versions of the GTA01 a third GPIO could be used to reset the GSM modem; this signal proved to cause difficulties with the modem, and on all the GTA01 units sold this GPIO line is not connected.  The driver combines the the switching of the serial port to the GSM modem and the power-on signal to the modem into a single operation; the two cannot be controlled independently from user-space (at the time of this writing).&lt;br /&gt;
&lt;br /&gt;
It is important to note that the GPIO controlling the power-on of the GSM modem can only signal to the modem to turn itself on -- turning this GPIO off does not power off the GSM modem.  Instead, the '''AT@POFF''' sequence must be sent to the modem in order to perform a power off.&lt;br /&gt;
&lt;br /&gt;
Further complicating power control of the GTA01 GSM modem is the fact that the modem draws power from the battery/charger side of the power management circuitry -- this means that turning off the power to the host CPU on the GTA01 does not turn off the power to the modem.  In real-world operation, this means that unless the shutdown procedure for the host cpu's operating system issues the '''AT@POFF''' command to power off the GSM modem, the modem will remain turned on, drawing power from the battery even thought the host CPU is completely powered off.&lt;br /&gt;
&lt;br /&gt;
=== The Power-On Sequence ===&lt;br /&gt;
&lt;br /&gt;
The sharing of the serial port between the console and the GSM modem results in the need for a very specific power-on and power-off sequence.  Two major problems exist that must be avoided: infinite echos, and RTSCTS lockup.&lt;br /&gt;
&lt;br /&gt;
==== Avoiding Infinite Echos ====&lt;br /&gt;
&lt;br /&gt;
By default, the serial port is initialized in &amp;quot;echo&amp;quot; mode -- meaning that any characters sent to the serial port from the console will be echoed back to the console.  Upon power-up or reset, the GSM modem also echos back characters it receives.  So unless action is taken to disable the serial port's echo before the GSM modem is powered on, an infinite echo will result.  The modem will print the standard &amp;quot;Interpretor Ready&amp;quot; message, which will be echoed back to it by the serial port driver, the modem will echo that back to the serial port again (adding some error text to the message), the serial port will echo that again, and this continues until buffers in either or both the serial port and the modem fill up, and one of them ceases to transmit.&lt;br /&gt;
&lt;br /&gt;
Once in this situation, it is difficult for software (such as gsmd) to gain synchronization of commands and responses.&lt;br /&gt;
&lt;br /&gt;
The best solution is to avoid the problem to begin with.  Simply ensure that the serial port is set to &amp;quot;no-echo&amp;quot; mode before the GSM modem is enabled and powered up.  This sequence illustrates how this is normally done:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
(Note that the stty command argument syntax is somewhat unusual: &amp;quot;-echo&amp;quot; means &amp;quot;disable echo&amp;quot;, while &amp;quot;echo&amp;quot; means &amp;quot;enable echo&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
==== Avoiding RTSCTS Lockup ====&lt;br /&gt;
&lt;br /&gt;
Hardware flow control uses additional signals in addition to the serial data in and out signals on the serial port to control the flow of the data.  Specifically, when hardware flow control is enabled, a given endpoint is expected to assert its RTS (Request To Send) line when it has data to transmit, and not transit that data until it sees a CTS (Clear TO Send) signal from the other end.  In this fashion, buffer overruns and data loss are avoided.&lt;br /&gt;
&lt;br /&gt;
The GSM modem requires that hardware flow control be enabled in order to communicate with the host.  However, the console lacks the RTS and CTS signals and thus is unable to communicate if hardware flow control is enabled.  But what really makes this problem serious is that if hardware flow control is enabled while the serial port is switched to the console, and the (small) transmit buffer for the port fills (such as a kernel log message), the Linux kernel will lock up, and become completely non-responsive.  There is no recovery mechanism for this other than to disconnect the device from its USB port or charger, and remove the battery.&lt;br /&gt;
&lt;br /&gt;
One solution to this is to disable the use of the serial port as a console for the kernel.  However, this is greatly inconvenient - the knowledgeable user with a debug board will usually wish to have a console available, and the novice user will probably wish to avoid changing the u-boot variables in order to disable the console.  So, a better approach is to avoid this situation by taking great care when powering-up, resetting, or powering-down the modem.  The following sequence illustrates how to switch the serial port back to the console mode safely:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Resetting the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
The GSM modem can be effectively reset by changing the state of the Power-On GPIO from off to on -- in other words, just disable the GSM modem and re-enable it.  The safe way to accomplish this is to combine the two sequences above:&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/gta01-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
It should be noted that this reset sequence will also power up the modem if it is not enabled and powered up to begin with.  For this reason, the reset sequence above should be used for both power-up and reset purposes.&lt;br /&gt;
&lt;br /&gt;
=== Powering Off the GSM Modem ===&lt;br /&gt;
&lt;br /&gt;
Powering off the GSM modem on the GTA01 can only be done by issuing the '''AT@POFF''' command to the device.  In order to issue this command, it is usually necessary to return it to a known state.  So the normal mechanism is to issue the reset operation (above), wait for a short period of time (1 second seems to be sufficient), and send the '''AT@POFF''' command.  This should be followed by an additional short delay (to allow the text to be transmitted), and then the serial port can be switched back to the console.  The following script accomplishes this:&lt;br /&gt;
&lt;br /&gt;
 ### Reset the modem to place it in a known state&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 stty -F /dev/ttySAC0 -echo&lt;br /&gt;
 echo &amp;quot;1&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
 &lt;br /&gt;
 ### Now enable hardware flow control, and transmit the sequence&lt;br /&gt;
 stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
 sleep 1&lt;br /&gt;
 echo -e &amp;quot;AT@POFF\r&amp;quot; &amp;gt;/dev/ttySAC0&lt;br /&gt;
 sleep 1&lt;br /&gt;
 &lt;br /&gt;
 ### Finally, we disable flow control, and switch back the port&lt;br /&gt;
 stty -F /dev/ttySAC0 -crtscts&lt;br /&gt;
 echo &amp;quot;0&amp;quot; &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&lt;br /&gt;
=== Eliminating echo on the non-neo end of phone calls ===&lt;br /&gt;
Here is the modified /etc/gsmhandset.state that  eliminates echo during calls (at least for  [[User:Wurp]]): http://drivehq.com/file/df.aspx/publish/sagacis/PublicFolder/handset.sagacis.state&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-03-08T12:45:48Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Some APN names for reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need to have [[GSM]] parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
crtscts &lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
defaultroute&lt;br /&gt;
usepeerdns&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
holdoff 3&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
lcp-echo-failure 8&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
persist&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
lcp-echo-failure 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This options where mentioned before with that strange comment. Mine worked fine for me without those.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# very long timeouts (unwise?)&lt;br /&gt;
lcp-echo-interval 300&lt;br /&gt;
lcp-echo-failure 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you'll need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 3\&lt;br /&gt;
	&amp;quot;&amp;quot; ATZ\&lt;br /&gt;
	OK-\\k\\k\\k\\d+++ATH-OK ATE1\&lt;br /&gt;
	OK AT+CFUN=0\&lt;br /&gt;
	OK \\dAT+CFUN=1\&lt;br /&gt;
	ERROR AT+CPIN\?\&lt;br /&gt;
	&amp;quot;+CPIN: READY-AT+CPIN=\&amp;quot;2222\&amp;quot;-OK&amp;quot; AT\&lt;br /&gt;
	TIMEOUT 60\&lt;br /&gt;
	OK AT+COPS\&lt;br /&gt;
	OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
	OK ATD*99#\&lt;br /&gt;
	CONNECT \d\c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; \\k\\k\\k\\d+++ATH\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
=== Required fixes ===&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting pppd ===&lt;br /&gt;
&lt;br /&gt;
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!&lt;br /&gt;
&lt;br /&gt;
To dial in - and get verbose output on the terminal - use pppd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-03-08T12:30:49Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Some APN names for reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need to have [[GSM]] parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
crtscts &lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
defaultroute&lt;br /&gt;
usepeerdns&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
holdoff 3&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
lcp-echo-failure 8&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
persist&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
lcp-echo-failure 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This options where mentioned before with that strange comment. Mine worked fine for me without those.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# very long timeouts (unwise?)&lt;br /&gt;
lcp-echo-interval 300&lt;br /&gt;
lcp-echo-failure 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you'll need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 3\&lt;br /&gt;
	&amp;quot;&amp;quot; ATZ\&lt;br /&gt;
	OK-\\k\\k\\k\\d+++ATH-OK ATE1\&lt;br /&gt;
	OK AT+CFUN=0\&lt;br /&gt;
	OK \\dAT+CFUN=1\&lt;br /&gt;
	ERROR AT+CPIN\?\&lt;br /&gt;
	&amp;quot;+CPIN: READY-AT+CPIN=\&amp;quot;2222\&amp;quot;-OK&amp;quot; AT\&lt;br /&gt;
	TIMEOUT 60\&lt;br /&gt;
	OK AT+COPS\&lt;br /&gt;
	OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
	OK ATD*99#\&lt;br /&gt;
	CONNECT \d\c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; \\k\\k\\k\\d+++ATH\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
=== Required fixes ===&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting pppd ===&lt;br /&gt;
&lt;br /&gt;
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!&lt;br /&gt;
&lt;br /&gt;
To dial in - and get verbose output on the terminal - use pppd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind nat || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Henrikp</id>
		<title>User:Henrikp</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Henrikp"/>
				<updated>2007-12-10T13:51:10Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Henrikp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Got the device in the start of december '07.&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Kuressaare</id>
		<title>Openmoko Local Groups: Kuressaare</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Kuressaare"/>
				<updated>2007-12-10T13:49:33Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Kuressaare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Possible Participants ===&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Level of Interest&lt;br /&gt;
!Other&lt;br /&gt;
!Has Device&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Henrikp|Henrik Pihl]]&lt;br /&gt;
|Just an interested poweruser, might be contributing with porting existing software &lt;br /&gt;
|GPRS/GPS?&lt;br /&gt;
|computer repairtechnician&lt;br /&gt;
|[[ Image:Moko.jpg |center]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups</id>
		<title>Openmoko Local Groups</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups"/>
				<updated>2007-12-10T13:46:45Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''OpenMoko Local Groups...'''&lt;br /&gt;
&lt;br /&gt;
* can be used for developers to meet and get to know each other&lt;br /&gt;
* can be used for developing&lt;br /&gt;
* may provide the room for real-life discussions away from mailinglists/wiki&lt;br /&gt;
* can support early support handling their GTA01Bv4 and exchange experiences&lt;br /&gt;
* fasten the community's cohesion&lt;br /&gt;
* give motivation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!Has Device&lt;br /&gt;
|-&lt;br /&gt;
|If you have a device, on your local group's page, please add:&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: Moko.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|If you have a debug board, please add:&lt;br /&gt;
|[[Image: MokoBox.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: MokoBox.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Such as with [[OpenMoko_Local_Groups:_Singapore | Singapore]] or [[OpenMoko_Local_Groups:_San_Francisco | San Francisco]]&lt;br /&gt;
&lt;br /&gt;
== Europe ==&lt;br /&gt;
&lt;br /&gt;
* Austria&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vienna|Vienna]] &lt;br /&gt;
&lt;br /&gt;
* Belgium&lt;br /&gt;
** [[OpenMoko_local_Groups: Antwerp|Antwerp]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Denmark|Denmark]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Copenhagen|Copenhagen]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Aalborg|Aalborg]]&lt;br /&gt;
&lt;br /&gt;
* Estonia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Kuressaare|Kuressaare]] &lt;br /&gt;
&lt;br /&gt;
* Finland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Helsinki|Helsinki]] &lt;br /&gt;
&lt;br /&gt;
* France &lt;br /&gt;
** [[OpenMoko_Local_Groups: Paris|Paris]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toulouse|Toulouse]] &lt;br /&gt;
&lt;br /&gt;
* Germany &lt;br /&gt;
** [[OpenMoko_Local_Groups: Berlin|Berlin]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braunschweig|Braunschweig]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Duesseldorf|Duesseldorf]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Frankfurt Main|Frankfurt Main]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Freiburg im Breisgau|Freiburg im Breisgau]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: OWL|OWL]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ingolstadt|Ingolstadt]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ulm|Ulm]]&lt;br /&gt;
&lt;br /&gt;
* Greece&lt;br /&gt;
** [[OpenMoko_Local_Groups: Athens|Athens]]&lt;br /&gt;
&lt;br /&gt;
* Italy&lt;br /&gt;
** [[OpenMoko_Local_Groups: Milan|Milan]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Turin|Turin]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Netherlands|Netherlands]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Amsterdam|Amsterdam]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Den Haag|Den Haag/The Hague]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eindhoven|Eindhoven]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Ede|Ede]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Norway|Norway]]&lt;br /&gt;
** [[OpenMoko_Local_Groups:_Oslo|Oslo]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Trondheim|Trondheim]] &lt;br /&gt;
&lt;br /&gt;
* Poland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Warsaw|Warsaw]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Szczecin|Szczecin]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Portugal|Portugal]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braga|Braga]] &lt;br /&gt;
&lt;br /&gt;
* Romania&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bucharest|Bucharest]]&lt;br /&gt;
&lt;br /&gt;
* Russia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Moscow|Moscow]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Saint-Petersburg|Saint-Petersburg]]&lt;br /&gt;
&lt;br /&gt;
* Slovakia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bratislava|Bratislava]]&lt;br /&gt;
&lt;br /&gt;
* Spain &lt;br /&gt;
** [[OpenMoko_Local_Groups: Madrid|Madrid]] &lt;br /&gt;
&lt;br /&gt;
* Sweden &lt;br /&gt;
** [[OpenMoko_Local_Groups: Gothenburg|Gothenburg]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Linkoping|Linköping]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Umea|Umeå]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups: Switzerland|Switzerland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bern|Bern]] &lt;br /&gt;
&lt;br /&gt;
* UK&lt;br /&gt;
** England&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Birmingham|Birmingham]] &lt;br /&gt;
*** [[OpenMoko_Local_Groups: London|London]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: East Midlands|East Midlands]]&lt;br /&gt;
&lt;br /&gt;
** Scotland&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Fife|Fife]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Edinburgh|Edinburgh]]&lt;br /&gt;
&lt;br /&gt;
* Ukraine&lt;br /&gt;
** [[OpenMoko_Local_Groups: Lugansk|Lugansk]]&lt;br /&gt;
&lt;br /&gt;
== Oceania ==&lt;br /&gt;
&lt;br /&gt;
* Australia &lt;br /&gt;
** [[OpenMoko_Local_Groups: Adelaide|Adelaide]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Canberra|Canberra]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Melbourne|Melbourne]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Perth|Perth]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Sydney|Sydney]]&lt;br /&gt;
&lt;br /&gt;
* New Zealand&lt;br /&gt;
** [[OpenMoko_Local_Groups: Auckland|Auckland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Christchurch|Christchurch]]&lt;br /&gt;
&lt;br /&gt;
== Asia ==&lt;br /&gt;
* India&lt;br /&gt;
** [[OpenMoko_Local_Groups: Delhi|Delhi]]&lt;br /&gt;
* Singapore&lt;br /&gt;
** [[OpenMoko_Local_Groups: Singapore|Singapore]]&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
* Alabama&lt;br /&gt;
** [[OpenMoko_Local_Groups: Alabama|Alabama]]&lt;br /&gt;
&lt;br /&gt;
* Arizona&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arizona|Arizona]]&lt;br /&gt;
&lt;br /&gt;
* Arkansas&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arkansas|Arkansas]]&lt;br /&gt;
&lt;br /&gt;
* California &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Diego|San Diego]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Francisco|San Francisco]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Sacramento|Sacramento]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Los Angeles|Los Angeles]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Santa Barbara|Santa Barbara]]&lt;br /&gt;
&lt;br /&gt;
* Colorado&lt;br /&gt;
** [[OpenMoko_Local_Groups: Colorado Springs|Colorado Springs]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Denver|Denver]]&lt;br /&gt;
&lt;br /&gt;
* District of Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Washington DC Metro | Washington DC Metro]]&lt;br /&gt;
&lt;br /&gt;
* Florida&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Florida | Central Florida]]&lt;br /&gt;
&lt;br /&gt;
* Georgia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Atlanta | Atlanta]]&lt;br /&gt;
&lt;br /&gt;
* Illinois &lt;br /&gt;
** [[OpenMoko_Local_Groups: Chicago|Chicago]]&lt;br /&gt;
&lt;br /&gt;
* Indiana&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bloomington|Bloomington]]&lt;br /&gt;
&lt;br /&gt;
* Iowa&lt;br /&gt;
** [[OpenMoko_Local_Groups: Iowa-Ames | Iowa-Ames]] &lt;br /&gt;
&lt;br /&gt;
* Massachusetts&lt;br /&gt;
** [[OpenMoko_Local_groups: Boston|Boston]]&lt;br /&gt;
&lt;br /&gt;
* Michigan &lt;br /&gt;
** [[OpenMoko_Local_Groups: Detroit|Detroit]] &lt;br /&gt;
&lt;br /&gt;
* New Jersey&lt;br /&gt;
** [[OpenMoko_Local_Groups: Stevens Institute of Technology, Hoboken NJ | Stevens Institute of Technology, Hoboken NJ  ]]&lt;br /&gt;
&lt;br /&gt;
* New York&lt;br /&gt;
** [[OpenMoko_Local_Groups: NYC Metro | NYC Metro]]&lt;br /&gt;
&lt;br /&gt;
* North Carolina&lt;br /&gt;
** [[OpenMoko Local_Groups: Charlotte | Charlotte]]&lt;br /&gt;
&lt;br /&gt;
* Ohio &lt;br /&gt;
** [[OpenMoko_Local_Groups: Cleveland|Cleveland]] &lt;br /&gt;
&lt;br /&gt;
* Oregon &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eugene|Eugene]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Portland|Portland]] &lt;br /&gt;
&lt;br /&gt;
* Texas &lt;br /&gt;
** [[OpenMoko_Local_Groups: North Texas|North Texas]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Texas|Central Texas]]&lt;br /&gt;
&lt;br /&gt;
* Utah&lt;br /&gt;
** [[OpenMoko_Local_Groups: Salt Lake|Salt Lake]]&lt;br /&gt;
&lt;br /&gt;
* Virginia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Virginia|Virginia]]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
* Alberta&lt;br /&gt;
** [[OpenMoko_Local_Groups: Calgary|Calgary]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Edmonton|Edmonton]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Pincher Creek|Pincher Creek]]&lt;br /&gt;
* British Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vancouver|Vancouver]]&lt;br /&gt;
* Ontario&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ottawa|Ottawa]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toronto|Toronto]]&lt;br /&gt;
* Quebec &lt;br /&gt;
** [[OpenMoko_Local_Groups: Montreal|Montreal]]&lt;br /&gt;
&lt;br /&gt;
== South America ==&lt;br /&gt;
* Brasil&lt;br /&gt;
** [[OpenMoko_Local_Groups: Belo Horizonte|Belo Horizonte]]&lt;br /&gt;
* Colombia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bogota|Bogotá]]&lt;br /&gt;
* Uruguay&lt;br /&gt;
** [[OpenMoko_Local_Groups: Montevideo]]&lt;br /&gt;
&lt;br /&gt;
== Africa ==&lt;br /&gt;
* South Africa&lt;br /&gt;
**[[OpenMoko_Local_Groups: Cape Town|Cape Town]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups</id>
		<title>Openmoko Local Groups</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups"/>
				<updated>2007-12-10T13:43:10Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''OpenMoko Local Groups...'''&lt;br /&gt;
&lt;br /&gt;
* can be used for developers to meet and get to know each other&lt;br /&gt;
* can be used for developing&lt;br /&gt;
* may provide the room for real-life discussions away from mailinglists/wiki&lt;br /&gt;
* can support early support handling their GTA01Bv4 and exchange experiences&lt;br /&gt;
* fasten the community's cohesion&lt;br /&gt;
* give motivation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!Has Device&lt;br /&gt;
|-&lt;br /&gt;
|If you have a device, on your local group's page, please add:&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: Moko.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|If you have a debug board, please add:&lt;br /&gt;
|[[Image: MokoBox.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: MokoBox.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Such as with [[OpenMoko_Local_Groups:_Singapore | Singapore]] or [[OpenMoko_Local_Groups:_San_Francisco | San Francisco]]&lt;br /&gt;
&lt;br /&gt;
== Europe ==&lt;br /&gt;
&lt;br /&gt;
* Austria&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vienna|Vienna]] &lt;br /&gt;
&lt;br /&gt;
* Belgium&lt;br /&gt;
** [[OpenMoko_local_Groups: Antwerp|Antwerp]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Denmark|Denmark]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Copenhagen|Copenhagen]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Aalborg|Aalborg]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Estonia|Estonia]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Kuressaare|Kuressaare]] &lt;br /&gt;
&lt;br /&gt;
* Finland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Helsinki|Helsinki]] &lt;br /&gt;
&lt;br /&gt;
* France &lt;br /&gt;
** [[OpenMoko_Local_Groups: Paris|Paris]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toulouse|Toulouse]] &lt;br /&gt;
&lt;br /&gt;
* Germany &lt;br /&gt;
** [[OpenMoko_Local_Groups: Berlin|Berlin]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braunschweig|Braunschweig]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Duesseldorf|Duesseldorf]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Frankfurt Main|Frankfurt Main]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Freiburg im Breisgau|Freiburg im Breisgau]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: OWL|OWL]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ingolstadt|Ingolstadt]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ulm|Ulm]]&lt;br /&gt;
&lt;br /&gt;
* Greece&lt;br /&gt;
** [[OpenMoko_Local_Groups: Athens|Athens]]&lt;br /&gt;
&lt;br /&gt;
* Italy&lt;br /&gt;
** [[OpenMoko_Local_Groups: Milan|Milan]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Turin|Turin]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Netherlands|Netherlands]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Amsterdam|Amsterdam]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Den Haag|Den Haag/The Hague]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eindhoven|Eindhoven]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Ede|Ede]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Norway|Norway]]&lt;br /&gt;
** [[OpenMoko_Local_Groups:_Oslo|Oslo]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Trondheim|Trondheim]] &lt;br /&gt;
&lt;br /&gt;
* Poland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Warsaw|Warsaw]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Szczecin|Szczecin]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Portugal|Portugal]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braga|Braga]] &lt;br /&gt;
&lt;br /&gt;
* Romania&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bucharest|Bucharest]]&lt;br /&gt;
&lt;br /&gt;
* Russia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Moscow|Moscow]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Saint-Petersburg|Saint-Petersburg]]&lt;br /&gt;
&lt;br /&gt;
* Slovakia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bratislava|Bratislava]]&lt;br /&gt;
&lt;br /&gt;
* Spain &lt;br /&gt;
** [[OpenMoko_Local_Groups: Madrid|Madrid]] &lt;br /&gt;
&lt;br /&gt;
* Sweden &lt;br /&gt;
** [[OpenMoko_Local_Groups: Gothenburg|Gothenburg]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Linkoping|Linköping]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Umea|Umeå]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups: Switzerland|Switzerland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bern|Bern]] &lt;br /&gt;
&lt;br /&gt;
* UK&lt;br /&gt;
** England&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Birmingham|Birmingham]] &lt;br /&gt;
*** [[OpenMoko_Local_Groups: London|London]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: East Midlands|East Midlands]]&lt;br /&gt;
&lt;br /&gt;
** Scotland&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Fife|Fife]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Edinburgh|Edinburgh]]&lt;br /&gt;
&lt;br /&gt;
* Ukraine&lt;br /&gt;
** [[OpenMoko_Local_Groups: Lugansk|Lugansk]]&lt;br /&gt;
&lt;br /&gt;
== Oceania ==&lt;br /&gt;
&lt;br /&gt;
* Australia &lt;br /&gt;
** [[OpenMoko_Local_Groups: Adelaide|Adelaide]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Canberra|Canberra]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Melbourne|Melbourne]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Perth|Perth]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Sydney|Sydney]]&lt;br /&gt;
&lt;br /&gt;
* New Zealand&lt;br /&gt;
** [[OpenMoko_Local_Groups: Auckland|Auckland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Christchurch|Christchurch]]&lt;br /&gt;
&lt;br /&gt;
== Asia ==&lt;br /&gt;
* India&lt;br /&gt;
** [[OpenMoko_Local_Groups: Delhi|Delhi]]&lt;br /&gt;
* Singapore&lt;br /&gt;
** [[OpenMoko_Local_Groups: Singapore|Singapore]]&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
* Alabama&lt;br /&gt;
** [[OpenMoko_Local_Groups: Alabama|Alabama]]&lt;br /&gt;
&lt;br /&gt;
* Arizona&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arizona|Arizona]]&lt;br /&gt;
&lt;br /&gt;
* Arkansas&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arkansas|Arkansas]]&lt;br /&gt;
&lt;br /&gt;
* California &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Diego|San Diego]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Francisco|San Francisco]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Sacramento|Sacramento]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Los Angeles|Los Angeles]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Santa Barbara|Santa Barbara]]&lt;br /&gt;
&lt;br /&gt;
* Colorado&lt;br /&gt;
** [[OpenMoko_Local_Groups: Colorado Springs|Colorado Springs]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Denver|Denver]]&lt;br /&gt;
&lt;br /&gt;
* District of Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Washington DC Metro | Washington DC Metro]]&lt;br /&gt;
&lt;br /&gt;
* Florida&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Florida | Central Florida]]&lt;br /&gt;
&lt;br /&gt;
* Georgia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Atlanta | Atlanta]]&lt;br /&gt;
&lt;br /&gt;
* Illinois &lt;br /&gt;
** [[OpenMoko_Local_Groups: Chicago|Chicago]]&lt;br /&gt;
&lt;br /&gt;
* Indiana&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bloomington|Bloomington]]&lt;br /&gt;
&lt;br /&gt;
* Iowa&lt;br /&gt;
** [[OpenMoko_Local_Groups: Iowa-Ames | Iowa-Ames]] &lt;br /&gt;
&lt;br /&gt;
* Massachusetts&lt;br /&gt;
** [[OpenMoko_Local_groups: Boston|Boston]]&lt;br /&gt;
&lt;br /&gt;
* Michigan &lt;br /&gt;
** [[OpenMoko_Local_Groups: Detroit|Detroit]] &lt;br /&gt;
&lt;br /&gt;
* New Jersey&lt;br /&gt;
** [[OpenMoko_Local_Groups: Stevens Institute of Technology, Hoboken NJ | Stevens Institute of Technology, Hoboken NJ  ]]&lt;br /&gt;
&lt;br /&gt;
* New York&lt;br /&gt;
** [[OpenMoko_Local_Groups: NYC Metro | NYC Metro]]&lt;br /&gt;
&lt;br /&gt;
* North Carolina&lt;br /&gt;
** [[OpenMoko Local_Groups: Charlotte | Charlotte]]&lt;br /&gt;
&lt;br /&gt;
* Ohio &lt;br /&gt;
** [[OpenMoko_Local_Groups: Cleveland|Cleveland]] &lt;br /&gt;
&lt;br /&gt;
* Oregon &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eugene|Eugene]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Portland|Portland]] &lt;br /&gt;
&lt;br /&gt;
* Texas &lt;br /&gt;
** [[OpenMoko_Local_Groups: North Texas|North Texas]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Texas|Central Texas]]&lt;br /&gt;
&lt;br /&gt;
* Utah&lt;br /&gt;
** [[OpenMoko_Local_Groups: Salt Lake|Salt Lake]]&lt;br /&gt;
&lt;br /&gt;
* Virginia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Virginia|Virginia]]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
* Alberta&lt;br /&gt;
** [[OpenMoko_Local_Groups: Calgary|Calgary]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Edmonton|Edmonton]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Pincher Creek|Pincher Creek]]&lt;br /&gt;
* British Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vancouver|Vancouver]]&lt;br /&gt;
* Ontario&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ottawa|Ottawa]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toronto|Toronto]]&lt;br /&gt;
* Quebec &lt;br /&gt;
** [[OpenMoko_Local_Groups: Montreal|Montreal]]&lt;br /&gt;
&lt;br /&gt;
== South America ==&lt;br /&gt;
* Brasil&lt;br /&gt;
** [[OpenMoko_Local_Groups: Belo Horizonte|Belo Horizonte]]&lt;br /&gt;
* Colombia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bogota|Bogotá]]&lt;br /&gt;
* Uruguay&lt;br /&gt;
** [[OpenMoko_Local_Groups: Montevideo]]&lt;br /&gt;
&lt;br /&gt;
== Africa ==&lt;br /&gt;
* South Africa&lt;br /&gt;
**[[OpenMoko_Local_Groups: Cape Town|Cape Town]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Kuressaare</id>
		<title>Openmoko Local Groups: Kuressaare</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Kuressaare"/>
				<updated>2007-12-10T13:37:59Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Possible Participants ===&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Level of Interest&lt;br /&gt;
!Other&lt;br /&gt;
!Has Device&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Henrikp|Henrik Pihl]]&lt;br /&gt;
|Just an interested poweruser, might be contributing with porting existing software &lt;br /&gt;
|GPRS/GPS?&lt;br /&gt;
|computer repairtechnician&lt;br /&gt;
|[[ Image:Moko.jpg |center]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenMoko_Local_Groups:_Estonia]]&lt;br /&gt;
[[Category:OpenMoko_Local_Groups]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups</id>
		<title>Openmoko Local Groups</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups"/>
				<updated>2007-12-10T13:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Europe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''OpenMoko Local Groups...'''&lt;br /&gt;
&lt;br /&gt;
* can be used for developers to meet and get to know each other&lt;br /&gt;
* can be used for developing&lt;br /&gt;
* may provide the room for real-life discussions away from mailinglists/wiki&lt;br /&gt;
* can support early support handling their GTA01Bv4 and exchange experiences&lt;br /&gt;
* fasten the community's cohesion&lt;br /&gt;
* give motivation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!Has Device&lt;br /&gt;
|-&lt;br /&gt;
|If you have a device, on your local group's page, please add:&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: Moko.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|If you have a debug board, please add:&lt;br /&gt;
|[[Image: MokoBox.jpg|center]]&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Image: MokoBox.jpg|center]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Such as with [[OpenMoko_Local_Groups:_Singapore | Singapore]] or [[OpenMoko_Local_Groups:_San_Francisco | San Francisco]]&lt;br /&gt;
&lt;br /&gt;
== Europe ==&lt;br /&gt;
&lt;br /&gt;
* Austria&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vienna|Vienna]] &lt;br /&gt;
&lt;br /&gt;
* Belgium&lt;br /&gt;
** [[OpenMoko_local_Groups: Antwerp|Antwerp]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Denmark|Denmark]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Copenhagen|Copenhagen]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Aalborg|Aalborg]]&lt;br /&gt;
&lt;br /&gt;
* Estonia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Kuressaare|Kuressaare]] &lt;br /&gt;
&lt;br /&gt;
* Finland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Helsinki|Helsinki]] &lt;br /&gt;
&lt;br /&gt;
* France &lt;br /&gt;
** [[OpenMoko_Local_Groups: Paris|Paris]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toulouse|Toulouse]] &lt;br /&gt;
&lt;br /&gt;
* Germany &lt;br /&gt;
** [[OpenMoko_Local_Groups: Berlin|Berlin]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braunschweig|Braunschweig]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Duesseldorf|Duesseldorf]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Frankfurt Main|Frankfurt Main]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Freiburg im Breisgau|Freiburg im Breisgau]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: OWL|OWL]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ingolstadt|Ingolstadt]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ulm|Ulm]]&lt;br /&gt;
&lt;br /&gt;
* Greece&lt;br /&gt;
** [[OpenMoko_Local_Groups: Athens|Athens]]&lt;br /&gt;
&lt;br /&gt;
* Italy&lt;br /&gt;
** [[OpenMoko_Local_Groups: Milan|Milan]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Turin|Turin]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Netherlands|Netherlands]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Amsterdam|Amsterdam]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Den Haag|Den Haag/The Hague]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eindhoven|Eindhoven]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Ede|Ede]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Norway|Norway]]&lt;br /&gt;
** [[OpenMoko_Local_Groups:_Oslo|Oslo]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Trondheim|Trondheim]] &lt;br /&gt;
&lt;br /&gt;
* Poland &lt;br /&gt;
** [[OpenMoko_Local_Groups: Warsaw|Warsaw]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Szczecin|Szczecin]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups:_Portugal|Portugal]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Braga|Braga]] &lt;br /&gt;
&lt;br /&gt;
* Romania&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bucharest|Bucharest]]&lt;br /&gt;
&lt;br /&gt;
* Russia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Moscow|Moscow]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Saint-Petersburg|Saint-Petersburg]]&lt;br /&gt;
&lt;br /&gt;
* Slovakia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bratislava|Bratislava]]&lt;br /&gt;
&lt;br /&gt;
* Spain &lt;br /&gt;
** [[OpenMoko_Local_Groups: Madrid|Madrid]] &lt;br /&gt;
&lt;br /&gt;
* Sweden &lt;br /&gt;
** [[OpenMoko_Local_Groups: Gothenburg|Gothenburg]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Linkoping|Linköping]] &lt;br /&gt;
&lt;br /&gt;
* [[OpenMoko_Local_Groups: Switzerland|Switzerland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bern|Bern]] &lt;br /&gt;
&lt;br /&gt;
* UK&lt;br /&gt;
** England&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Birmingham|Birmingham]] &lt;br /&gt;
*** [[OpenMoko_Local_Groups: London|London]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: East Midlands|East Midlands]]&lt;br /&gt;
&lt;br /&gt;
** Scotland&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Fife|Fife]]&lt;br /&gt;
*** [[OpenMoko_Local_Groups: Edinburgh|Edinburgh]]&lt;br /&gt;
&lt;br /&gt;
* Ukraine&lt;br /&gt;
** [[OpenMoko_Local_Groups: Lugansk|Lugansk]]&lt;br /&gt;
&lt;br /&gt;
== Oceania ==&lt;br /&gt;
&lt;br /&gt;
* Australia &lt;br /&gt;
** [[OpenMoko_Local_Groups: Adelaide|Adelaide]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Canberra|Canberra]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Melbourne|Melbourne]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Perth|Perth]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Sydney|Sydney]]&lt;br /&gt;
&lt;br /&gt;
* New Zealand&lt;br /&gt;
** [[OpenMoko_Local_Groups: Auckland|Auckland]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Christchurch|Christchurch]]&lt;br /&gt;
&lt;br /&gt;
== Asia ==&lt;br /&gt;
* India&lt;br /&gt;
** [[OpenMoko_Local_Groups: Delhi|Delhi]]&lt;br /&gt;
* Singapore&lt;br /&gt;
** [[OpenMoko_Local_Groups: Singapore|Singapore]]&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
* Alabama&lt;br /&gt;
** [[OpenMoko_Local_Groups: Alabama|Alabama]]&lt;br /&gt;
&lt;br /&gt;
* Arizona&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arizona|Arizona]]&lt;br /&gt;
&lt;br /&gt;
* Arkansas&lt;br /&gt;
** [[OpenMoko_Local_Groups: Arkansas|Arkansas]]&lt;br /&gt;
&lt;br /&gt;
* California &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Diego|San Diego]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: San Francisco|San Francisco]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Sacramento|Sacramento]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Los Angeles|Los Angeles]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Santa Barbara|Santa Barbara]]&lt;br /&gt;
&lt;br /&gt;
* Colorado&lt;br /&gt;
** [[OpenMoko_Local_Groups: Colorado Springs|Colorado Springs]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Denver|Denver]]&lt;br /&gt;
&lt;br /&gt;
* District of Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Washington DC Metro | Washington DC Metro]]&lt;br /&gt;
&lt;br /&gt;
* Florida&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Florida | Central Florida]]&lt;br /&gt;
&lt;br /&gt;
* Georgia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Atlanta | Atlanta]]&lt;br /&gt;
&lt;br /&gt;
* Illinois &lt;br /&gt;
** [[OpenMoko_Local_Groups: Chicago|Chicago]]&lt;br /&gt;
&lt;br /&gt;
* Indiana&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bloomington|Bloomington]]&lt;br /&gt;
&lt;br /&gt;
* Iowa&lt;br /&gt;
** [[OpenMoko_Local_Groups: Iowa-Ames | Iowa-Ames]] &lt;br /&gt;
&lt;br /&gt;
* Massachusetts&lt;br /&gt;
** [[OpenMoko_Local_groups: Boston|Boston]]&lt;br /&gt;
&lt;br /&gt;
* Michigan &lt;br /&gt;
** [[OpenMoko_Local_Groups: Detroit|Detroit]] &lt;br /&gt;
&lt;br /&gt;
* New Jersey&lt;br /&gt;
** [[OpenMoko_Local_Groups: Stevens Institute of Technology, Hoboken NJ | Stevens Institute of Technology, Hoboken NJ  ]]&lt;br /&gt;
&lt;br /&gt;
* New York&lt;br /&gt;
** [[OpenMoko_Local_Groups: NYC Metro | NYC Metro]]&lt;br /&gt;
&lt;br /&gt;
* North Carolina&lt;br /&gt;
** [[OpenMoko Local_Groups: Charlotte | Charlotte]]&lt;br /&gt;
&lt;br /&gt;
* Ohio &lt;br /&gt;
** [[OpenMoko_Local_Groups: Cleveland|Cleveland]] &lt;br /&gt;
&lt;br /&gt;
* Oregon &lt;br /&gt;
** [[OpenMoko_Local_Groups: Eugene|Eugene]] &lt;br /&gt;
** [[OpenMoko_Local_Groups: Portland|Portland]] &lt;br /&gt;
&lt;br /&gt;
* Texas &lt;br /&gt;
** [[OpenMoko_Local_Groups: North Texas|North Texas]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Central Texas|Central Texas]]&lt;br /&gt;
&lt;br /&gt;
* Utah&lt;br /&gt;
** [[OpenMoko_Local_Groups: Salt Lake|Salt Lake]]&lt;br /&gt;
&lt;br /&gt;
* Virginia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Virginia|Virginia]]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
* Alberta&lt;br /&gt;
** [[OpenMoko_Local_Groups: Calgary|Calgary]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Edmonton|Edmonton]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Pincher Creek|Pincher Creek]]&lt;br /&gt;
* British Columbia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Vancouver|Vancouver]]&lt;br /&gt;
* Ontario&lt;br /&gt;
** [[OpenMoko_Local_Groups: Ottawa|Ottawa]]&lt;br /&gt;
** [[OpenMoko_Local_Groups: Toronto|Toronto]]&lt;br /&gt;
* Quebec &lt;br /&gt;
** [[OpenMoko_Local_Groups: Montreal|Montreal]]&lt;br /&gt;
&lt;br /&gt;
== South America ==&lt;br /&gt;
* Brasil&lt;br /&gt;
** [[OpenMoko_Local_Groups: Belo Horizonte|Belo Horizonte]]&lt;br /&gt;
* Colombia&lt;br /&gt;
** [[OpenMoko_Local_Groups: Bogota|Bogotá]]&lt;br /&gt;
* Uruguay&lt;br /&gt;
** [[OpenMoko_Local_Groups: Montevideo]]&lt;br /&gt;
&lt;br /&gt;
== Africa ==&lt;br /&gt;
* South Africa&lt;br /&gt;
**[[OpenMoko_Local_Groups: Cape Town|Cape Town]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Toolchain</id>
		<title>Toolchain</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Toolchain"/>
				<updated>2007-12-10T08:47:11Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Downloading and installing the toolchain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
A toolchain is a set of tools that allows you to compile code. For OpenMoko, we have to differenciate the following use-cases:&lt;br /&gt;
&lt;br /&gt;
* Developing a single application&lt;br /&gt;
&lt;br /&gt;
For this, you should use a prebuilt toolchain from the OpenMoko project. Here you can find a recipe to get started with this toolchain leading you through a series of steps to compile a project and run it on your target device. You might have heard about [[OpenEmbedded]], however as an application programmer, you should '''not''' be using [[OpenEmbedded]].&lt;br /&gt;
&lt;br /&gt;
* System Integration and customizing a distribution&lt;br /&gt;
&lt;br /&gt;
For this task, you should use [[OpenEmbedded]] which builds its own cross compiler during the bootstrapping/build process. System Integration and customizing a distribution is out of scope of this page.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites = &lt;br /&gt;
&lt;br /&gt;
You should be reasonably familiar with Linux and its command line tools, have an x86-compatible computer with at least 1G of free disk space. You should have experience with compiling programs from source using your local compiler. The remainder of this document will also assume you have write access in your home directory (~) and &amp;lt;tt&amp;gt;/usr/local/&amp;lt;/tt&amp;gt;. If this is not the case, please call your local administrator for help.&lt;br /&gt;
&lt;br /&gt;
= Downloading and installing the toolchain =&lt;br /&gt;
&lt;br /&gt;
The prebuilt toolchain can be downloaded from [[http://downloads.openmoko.org/toolchains downloads.openmoko.org]]:&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/sources&lt;br /&gt;
 cd ~/sources&lt;br /&gt;
 wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Next, you want to extract it on your filesystem. This toolchain is ''not'' relocatable, it needs to be installed into &amp;lt;tt&amp;gt;/usr/local/openmoko/&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 cd /&lt;br /&gt;
 tar xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
The prebuilt toolchain is for x86_64 or i686 now.  You could build it on your own with OE:&lt;br /&gt;
&lt;br /&gt;
 bitbake meta-toolchain-openmoko&lt;br /&gt;
&lt;br /&gt;
Finally, everytime you want to use this toolchain, you need to alter some environment variables, so that your tools will be found. The toolchain provides a script to do that, so the only thing you need to do is to source it:&lt;br /&gt;
&lt;br /&gt;
 source /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
= Using the toolchain to build a sample project =&lt;br /&gt;
&lt;br /&gt;
In your home directory:&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/arm/share/openmoko-sample2 ~/&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
 om-conf openmoko-sample2&lt;br /&gt;
 &amp;lt;modify it if you want and make&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to install this project on host for staging usage later, a shared library, for example, you can then call &amp;lt;tt&amp;gt;make install&amp;lt;/tt&amp;gt; to install it into the configured prefix.&lt;br /&gt;
&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
== Packaging your application ==&lt;br /&gt;
&lt;br /&gt;
We have included a script to make an ipkg out of your application. &lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your&lt;br /&gt;
neo and install it:&lt;br /&gt;
&lt;br /&gt;
 scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:&lt;br /&gt;
 ssh root@192.168.0.202 ipkg install openmoko-sample2_0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies.&lt;br /&gt;
&lt;br /&gt;
You could supply the version number, a description, and an author / contacts string in a control file if you know how to use it:&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg myapp myapp_control&lt;br /&gt;
&lt;br /&gt;
A template of myapp_control:&lt;br /&gt;
&lt;br /&gt;
 Package: $appname&lt;br /&gt;
 Version: 0.1&lt;br /&gt;
 Description: package built by openmoko toolchain&lt;br /&gt;
 Section: openmoko/applications&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: $USER&lt;br /&gt;
 Architecture: armv4t&lt;br /&gt;
 Homepage: http://www.openmoko.org/&lt;br /&gt;
 Depends: &lt;br /&gt;
 Source: ${SRC}&lt;br /&gt;
&lt;br /&gt;
{{todo|hint how to get the package included in OE}}&lt;br /&gt;
&lt;br /&gt;
= Where to go from here =&lt;br /&gt;
&lt;br /&gt;
{{todo|write}}&lt;br /&gt;
&lt;br /&gt;
= Advanced topics =&lt;br /&gt;
&lt;br /&gt;
== Installing additional libraries into the toolchain ==&lt;br /&gt;
&lt;br /&gt;
{{todo|write}}&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
{{todo|write}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|Toolchain}}&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenMoko]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee</id>
		<title>Neo1973: GTA01Bv4 versus GTA02 comparison/ee</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee"/>
				<updated>2007-12-08T14:29:33Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Neo1973 GTA01Bv4 ja GTA02 riistvaraline erinevus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Neo1973 GTA01Bv4 ja [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]] riistvaraline erinevus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 !Tunnus&lt;br /&gt;
 !GTA01Bv4&lt;br /&gt;
 !GTA02&lt;br /&gt;
 |-&lt;br /&gt;
 |Müük&lt;br /&gt;
 |Ostetav: https://direct.openmoko.com/&lt;br /&gt;
 |Ei ole veel valmis. Loe siit: http://wiki.openmoko.org/wiki/Community_Updates&lt;br /&gt;
 |-&lt;br /&gt;
 |Mõõtmed&amp;lt;br /&amp;gt;(ei ole erinevusi) &lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |-&lt;br /&gt;
 |Kaal&lt;br /&gt;
 |184 g&lt;br /&gt;
 |184 g (kinnitamata)&lt;br /&gt;
 |-&lt;br /&gt;
 |Ekraan&amp;lt;br /&amp;gt;(ei ole erinevusi)&lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi (pikselit tolli kohta), &lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi, [http://lists.openmoko.org/pipermail/community/2006-December/000576.html hiljem võibolla mitme-puuteline]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#microSD-Card|Andmemahutavus]]&lt;br /&gt;
 |64 MB integreeritud välkmälu (laiendatav [http://lists.openmoko.org/pipermail/community/2007-February/003156.html igas suuruses microSD või MicroSDHC mälukaardiga])&lt;br /&gt;
 | [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html 256 MB] integreeritud välkmälu.&lt;br /&gt;
Laiendatav [http://www.techtree.com/India/News/Samsung_Readies_8GB_microSD_Card/551-81172-581.html igas suuruses microSD või MicroSDHC mälukaardiga]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#Processor|Protsessor (CPU)]]&lt;br /&gt;
 |Samsung s3c2410 SoC @ 266 MHz[http://lists.openmoko.org/pipermail/announce/2007-January/000000.html]&lt;br /&gt;
 |[http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=SC32442&amp;amp;&amp;amp;ppmi= Samsung 2442] @ 400 MHz SoC &lt;br /&gt;
 |-&lt;br /&gt;
 |Graafikakiirendi&lt;br /&gt;
 |&lt;br /&gt;
 |[http://www.smediatech.com/product3362.htm SMedia 3362 2D/3D graafikakiirendi] [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html lists.openmoko.org teadeanne]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#RAM|Operatiivmälu (RAM)]]&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |-&lt;br /&gt;
 |Traadita ühendus&lt;br /&gt;
 |Kolmesageduslik GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (ei ole EDGE), Bluetooth 2.0 EDR&lt;br /&gt;
 |Kolmesageduslik GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (ei ole EDGE), Bluetooth 2.0 EDR; WiFi: [http://lists.openmoko.org/pipermail/announce/2007-April/000012.html Atheros AR6K] (Vaata ka [[AR6K]]) (802.11 b/g)&lt;br /&gt;
 |-&lt;br /&gt;
 |Sisseehitatud seadmed&lt;br /&gt;
 |Assisteeritud GPS, 2 nuppu&lt;br /&gt;
 |Assisteeritud GPS, 2 nuppu; 2x3D [[Accelerometer|kiirendusandurit]]&lt;br /&gt;
 |-&lt;br /&gt;
 |GPSi riistvara&lt;br /&gt;
 |Global Locate (nüüdseks Broadcom) Hammerhead&lt;br /&gt;
 |u-blox/Atmel ATR0635 [http://lists.openmoko.org/pipermail/community/2007-October/011013.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Heli&lt;br /&gt;
 |Sisseehitatud stereokõlarid, stereokuularid&lt;br /&gt;
 |Sisseehitatud monokõlar, stereokuularid&lt;br /&gt;
 |-&lt;br /&gt;
 |WiFi&lt;br /&gt;
 |ei&lt;br /&gt;
 |jah&lt;br /&gt;
 |-&lt;br /&gt;
 |Kiirendusandur&lt;br /&gt;
 |ei&lt;br /&gt;
 |jah&lt;br /&gt;
|-&lt;br /&gt;
 |Tarkvara&lt;br /&gt;
 |Äärmiselt vigane. Enamus tarkvara peab lisama või panema tööle.&lt;br /&gt;
 |Algeline PDA kaasas. Tavalised kasutajad saavad ise teha tarkvara.&lt;br /&gt;
 |-&lt;br /&gt;
 |Aku&lt;br /&gt;
 |Vahetatav [[Neo1973_Battery|1.2 Ah aku]] USB 1.1 kaudu laetav&lt;br /&gt;
 |Vahetatav [[Neo1973_Battery|1.7 Ah aku]] USB 1.1 kaudu laetav, või 1000mA välja andev seinalaadija[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=956]. Omab ka kulonilugejat täpse laengu väljalugemiseks[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=957]&lt;br /&gt;
 |-&lt;br /&gt;
 |USB Hosti tugi&lt;br /&gt;
 |Jah, kuid on vaja välist +5V&lt;br /&gt;
 |Jah, oma toitega ühendus [http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000280.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Kasutuseks valmis&lt;br /&gt;
 |Mitte eriti. [[Developer_preview|Mida ikka oodata arendaja eelvaatega GTA01-st]].&lt;br /&gt;
 |Jah.&lt;br /&gt;
 |-&lt;br /&gt;
 |Hind &amp;lt;br /&amp;gt; (ei sisalda transporti ja sinu riigi makse)&lt;br /&gt;
 |300 dollarit (~3200 krooni, baasmudel), 450 dollarit (~4800 krooni) Sisaldab lisariistvara arenduseks. (Kõik seadmed saadetakse Ameerika Ühendriikidest)&lt;br /&gt;
 |450 dollarit (~4800 krooni, baasmudel), 600 dollarit (~6500 krooni) Sisaldab lisariistvara arenduseks.&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973: GTA01Bv4 versus GTA02 comparison}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 2 related]]&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973</id>
		<title>Flashing the Neo 1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973"/>
				<updated>2007-12-08T14:23:39Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Actually flashing things into the device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to update your Neo1973 to the latest software. We'll update the kernel, the root filesystem and optionally u-boot [[partitions]] in the internal flash memory.&lt;br /&gt;
&lt;br /&gt;
{{warning|If you're updating u-boot and don't have a [[Debug Board]], you might render your unit unusable if the flashing procedure is interrupted}}&lt;br /&gt;
&lt;br /&gt;
{{warning|If you upload a rootfs image that is smaller than the previous one it won't work - you need to attach to bootloader, [[Nand_erase|erase NAND]] and then upload your rootfs first}}&lt;br /&gt;
&lt;br /&gt;
== Files to download ==&lt;br /&gt;
&lt;br /&gt;
MacOS X users: please refer to [[MacOS_X]]. Users without Linux please refer to [[No_Linux]] for the moment.&lt;br /&gt;
&lt;br /&gt;
The rootfs &amp;amp; kernel images you download need to match. The loadable modules for the kernel are in /lib/modules/ on the rootfs [[partition]] - if you get the wrong combination, you will get some error messages during bootup that it cannot access /lib/modules/x.y.z-moko123 - in this case swap either the kernel or the rootfs to match the other's version. Unfortunately the rootfs filename does not seem to tell what kernel version it is compatible with, you just have to try a few. '''NOTE:''' At least some combinations seem to boot up fine even if the module versions mismatch so be sure to check the console while it's booting after flashing.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;moko123&amp;quot; in the error message example above indicates the openmoko patchset version.&lt;br /&gt;
&lt;br /&gt;
Necessary files are at:&lt;br /&gt;
*http://buildhost.openmoko.org/OM2007.2/tmp/deploy/glibc/images/neo1973/?C=M;O=D&lt;br /&gt;
&lt;br /&gt;
*http://buildhost.automated.it/OM2007.2/?M=D (Location of more current unofficial builds.)&lt;br /&gt;
&lt;br /&gt;
A list of download locations can be found at [[Repositories]]. See [[Phase 1 Software Testing]] for a list of tested images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Changelogs can be found at:&lt;br /&gt;
*http://cia.vc/stats/project/openembedded/.rss&lt;br /&gt;
&lt;br /&gt;
*http://cia.vc/stats/project/openmoko/.rss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Get:&lt;br /&gt;
* [[dfu-util]] (the precompiled binary on http://buildhost.openmoko.org is for Linux/i386)&lt;br /&gt;
** (this is the part that runs on the PC, that pushes the files across the USB to the phone)&lt;br /&gt;
* openmoko-devel-image-fic-gta01-2007********.rootfs.jffs2&lt;br /&gt;
* uImage-2.6.21.*-moko*-r*_0_****_0-fic-gta01.bin&lt;br /&gt;
* for phase 0 (Bv03) phones:&lt;br /&gt;
** Tested by a few people:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&amp;lt;BR&amp;gt;MD5SUM: 60c5aeba1bd6642b05b3a5e6f2dafe83&lt;br /&gt;
** Tested by hrw:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2062.bin&amp;lt;BR&amp;gt;MD5SUM: 716f1eba9b0f2be4a0a3be4a56724935&lt;br /&gt;
* for phase 1 phones, uboot update should not be necessary.&lt;br /&gt;
&lt;br /&gt;
== Preparing the device for DFU mode ==&lt;br /&gt;
&lt;br /&gt;
You'll need to boot your openmoko into uboot menu.  To do this:&lt;br /&gt;
&lt;br /&gt;
* Unplug all usb devices from the host.&lt;br /&gt;
* Hold the phone's [[Neo1973 AUX Button | AUX button]] and then press the phone's [[Neo1973 Power Button | POWER button]].&lt;br /&gt;
** You'll need to hold the POWER button for about 4 seconds before the device will turn on. Otherwise the screen will only flash white for a second and the phone won't power up.&lt;br /&gt;
* The u-boot menu should appear. &lt;br /&gt;
* Plug Neo1973 into host with supplied USB cable. (Plug the phone directly into the host not via a hub.)&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If the bootloader remains inactive for about 30 seconds, that is no keypresses or no use of the serial console, the device will automatically power down.&lt;br /&gt;
You can prevent this by just pressing the AUX button every 30 seconds or so or by telling the bootloader to not exhibit this behaviour.&lt;br /&gt;
To do so, please connect to the bootloader:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cu -l /dev/ttyACM0&lt;br /&gt;
GTA01Bv4 # setenv boot_menu_timeout 65000&lt;br /&gt;
GTA01Bv4 # saveenv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(You may have to install the uucp package to have access to cu.)&lt;br /&gt;
&lt;br /&gt;
No further navigation is needed in u-boot - the device will automatically start flashing the images when told to do so by dfu-util below. After flashing all the files, you can choose the &amp;quot;Boot&amp;quot; option to boot the newly flashed stuff.&lt;br /&gt;
&lt;br /&gt;
== Actually flashing things into the device ==&lt;br /&gt;
&lt;br /&gt;
Double check that u-boot matches your hardware version. You'll probably only want to update u-boot if you have the [[debug board]] for fixing failed u-boot updates. You can also check the current [[partitions]].&lt;br /&gt;
&lt;br /&gt;
Note: It may be necessary to run the application as root (at least in ubuntu).&lt;br /&gt;
&lt;br /&gt;
Note: In case there are more than one available usb devices use -d 0x1457:0x5119 option.&lt;br /&gt;
&lt;br /&gt;
To update u-boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning: Do not update u-boot unless you have [[debug board]] or are really sure about what you are doing. Flashing a wrong u-boot image will brick your device! Note especially that image below is for GTA01B_v03, not GTA01B_v04&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a u-boot -R -D u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&lt;br /&gt;
&lt;br /&gt;
To update the kernel:&lt;br /&gt;
 ./dfu-util -a kernel -R -D ./uImage-2.6.21.1-moko10-r0_0_1883_0-fic-gta01.bin&lt;br /&gt;
Flashing the kernel will probably take less than 1 minute. If you're having trouble, you may want to compare the output that you see to a &amp;quot;known good&amp;quot; [[Flashing openmoko/Known good kernel flash U-Boot output | U-Boot]]/[[Flashing openmoko/Known good kernel flash dmesg output | dmesg]]/[[Flashing openmoko/Known good kernel flash dfu-util output | dfu-util]] output.&lt;br /&gt;
&lt;br /&gt;
To update the root filesystem:&lt;br /&gt;
 ./dfu-util -a rootfs -R -D ./Openmoko-devel-image-fic-gta01-20070501054014.rootfs.jffs2&lt;br /&gt;
&lt;br /&gt;
Flashing the root filesystem will probably take around 13 minutes. Here is some &amp;quot;known good&amp;quot; output from [[Flashing openmoko/Known good rootfs flash U-Boot output | U-Boot]], [[Flashing openmoko/Known good rootfs flash dmesg output | dmesg]], and [[Flashing openmoko/Known good rootfs flash dfu-util output | dfu-util]].&lt;br /&gt;
&lt;br /&gt;
Notice that it's not normally necessary to update the modules anymore. It's just for people with special needs.&lt;br /&gt;
&lt;br /&gt;
...now, you'll end up with system that boots, but does not see audio/SD card. You'll need to download corresponding modules.tgz and copy them over to openmoko.  - UPDATE:  GTA01 phones appear to not need this step, as long as you have installed a kernel that matches the version of the modules contained in the root image ('uname -r' will show the kernel version, and 'ls /lib/modules/' will show the modules that are present).&lt;br /&gt;
&lt;br /&gt;
VERY IMPORTANT NOTE (I would consider that as a design flaw - either dfu-util should do it automatically): If you upload rootfs image that is smaller that previous one it won't work - you need to attach to the u-boot bootloader, erase NAND first and then upload your rootfs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cu -l /dev/ttyACM0&lt;br /&gt;
GTA01Bv3 # nand erase rootfs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old versions of u-boot are buggy: You may have to press the AUX button every 25 seconds or so to prevent the phone from going to sleep while being flashed. It also does not erase rootfs before flashing it... to do that, do minicom /dev/ttyACM0, then nand erase clean rootfs.&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;br /&gt;
&lt;br /&gt;
== Where to go from here ==&lt;br /&gt;
&lt;br /&gt;
So, now you have one of the more recent kernel and rootfs images, or one of the (semi)official ones, whats next?&lt;br /&gt;
&lt;br /&gt;
You probably want to set up [[USB_Networking]] and then configure your Neo1973 some more.&lt;br /&gt;
&lt;br /&gt;
Do not forget to update your Neo1973 using&lt;br /&gt;
&lt;br /&gt;
 ipkg update &amp;amp;&amp;amp; ipkg upgrade&lt;br /&gt;
&lt;br /&gt;
and have a look at additional ipkg [[repositories]].&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting notes ==&lt;br /&gt;
&lt;br /&gt;
If you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.&lt;br /&gt;
&lt;br /&gt;
If dfu-util reports a message like the following, before it starts flashing:&amp;lt;pre&amp;gt;&lt;br /&gt;
Resetting USB...&lt;br /&gt;
not at least 2 device changes found ?!?&lt;br /&gt;
Lost device after RESET?&amp;lt;/pre&amp;gt; just retry the command - it should work on a second run.&lt;br /&gt;
&lt;br /&gt;
This message can also occur if you connect the usb cable before you are in the bootloader menu.  You must carefully follow the sequence described at the beginning of this article and not connect the USB cable too early.&lt;br /&gt;
&lt;br /&gt;
dfu-util does not seem to be able to download files if run from linux running under&lt;br /&gt;
VMWare on a Windows OS host.&lt;br /&gt;
&lt;br /&gt;
See other notes on [[Dfu-util]] page.&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenMoko| ]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee</id>
		<title>Neo1973: GTA01Bv4 versus GTA02 comparison/ee</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee"/>
				<updated>2007-12-08T11:28:06Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Neo1973 GTA01Bv4 ja GTA02 riistvaraline erinevus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Neo1973 GTA01Bv4 ja [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]] riistvaraline erinevus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 !Tunnus&lt;br /&gt;
 !GTA01Bv4&lt;br /&gt;
 !GTA02&lt;br /&gt;
 |-&lt;br /&gt;
 |Müük&lt;br /&gt;
 |Ostetav: https://direct.openmoko.com/&lt;br /&gt;
 |Ei ole veel valmis. Loe siit: http://wiki.openmoko.org/wiki/Community_Updates&lt;br /&gt;
 |-&lt;br /&gt;
 |Mõõtmed&amp;lt;br /&amp;gt;(ei ole erinevusi) &lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |-&lt;br /&gt;
 |Kaal&lt;br /&gt;
 |184 g&lt;br /&gt;
 |184 g (kinnitamata)&lt;br /&gt;
 |-&lt;br /&gt;
 |Ekraan&amp;lt;br /&amp;gt;(ei ole erinevusi)&lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi (pikselit tolli kohta), &lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi, [http://lists.openmoko.org/pipermail/community/2006-December/000576.html hiljem võibolla mitme-puuteline]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#microSD-Card|Andmemahutavus]]&lt;br /&gt;
 |64 MB integreeritud välkmälu (laiendatav [http://lists.openmoko.org/pipermail/community/2007-February/003156.html igas suuruses microSD või MicroSDHC mälukaardiga])&lt;br /&gt;
 | [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html 256 MB] integreeritud välkmälu.&lt;br /&gt;
Laiendatav [http://www.techtree.com/India/News/Samsung_Readies_8GB_microSD_Card/551-81172-581.html igas suuruses microSD või MicroSDHC mälukaardiga]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#Processor|Protsessor (CPU)]]&lt;br /&gt;
 |Samsung s3c2410 SoC @ 266 MHz ([http://lists.openmoko.org/pipermail/announce/2007-January/000000.html Source])&lt;br /&gt;
 |[http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=SC32442&amp;amp;&amp;amp;ppmi= Samsung 2442] @ 400 MHz SoC &lt;br /&gt;
 |-&lt;br /&gt;
 |Graafikakiirendi&lt;br /&gt;
 |&lt;br /&gt;
 |[http://www.smediatech.com/product3362.htm SMedia 3362 2D/3D graafikakiirendi] [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html lists.openmoko.org teadeanne]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#RAM|Operatiivmälu (RAM)]]&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |-&lt;br /&gt;
 |Traadita ühendus&lt;br /&gt;
 |Kolmesageduslik GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (ei ole EDGE), Bluetooth 2.0 EDR&lt;br /&gt;
 |Kolmesageduslik GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (ei ole EDGE), Bluetooth 2.0 EDR; WiFi: [http://lists.openmoko.org/pipermail/announce/2007-April/000012.html Atheros AR6K] (Vaata ka [[AR6K]]) (802.11 b/g)&lt;br /&gt;
 |-&lt;br /&gt;
 |Sisseehitatud seadmed&lt;br /&gt;
 |Assisteeritud GPS, 2 nuppu&lt;br /&gt;
 |Assisteeritud GPS, 2 nuppu; 2x3D [[Accelerometer|kiirendusandurit]]&lt;br /&gt;
 |-&lt;br /&gt;
 |GPSi riistvara&lt;br /&gt;
 |Global Locate (nüüdseks Broadcom) Hammerhead&lt;br /&gt;
 |u-blox/Atmel ATR0635 [http://lists.openmoko.org/pipermail/community/2007-October/011013.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Heli&lt;br /&gt;
 |Sisseehitatud stereokõlarid, stereokuularid&lt;br /&gt;
 |Sisseehitatud monokõlar, stereokuularid&lt;br /&gt;
 |-&lt;br /&gt;
 |WiFi&lt;br /&gt;
 |ei&lt;br /&gt;
 |jah&lt;br /&gt;
 |-&lt;br /&gt;
 |Kiirendusandur&lt;br /&gt;
 |ei&lt;br /&gt;
 |jah&lt;br /&gt;
|-&lt;br /&gt;
 |Tarkvara&lt;br /&gt;
 |Äärmiselt vigane. Enamus tarkvara peab lisama või panema tööle.&lt;br /&gt;
 |Algeline PDA kaasas. Tavalised kasutajad saavad ise teha tarkvara.&lt;br /&gt;
 |-&lt;br /&gt;
 |Aku&lt;br /&gt;
 |Vahetatav [[Neo1973_Battery|1.2 Ah aku]] USB 1.1 kaudu laetav&lt;br /&gt;
 |Vahetatav [[Neo1973_Battery|1.7 Ah aku]] USB 1.1 kaudu laetav, või 1000mA välja andev seinalaadija[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=956]. Omab ka kulonilugejat täpse laengu väljalugemiseks[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=957]&lt;br /&gt;
 |-&lt;br /&gt;
 |USB Hosti tugi&lt;br /&gt;
 |Jah, kuid on vaja välist +5V&lt;br /&gt;
 |Jah, oma toitega ühendus [http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000280.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Kasutuseks valmis&lt;br /&gt;
 |Mitte eriti. [[Developer_preview|Mida ikka oodata arendaja eelvaatega GTA01-st]].&lt;br /&gt;
 |Jah.&lt;br /&gt;
 |-&lt;br /&gt;
 |Hind &amp;lt;br /&amp;gt; (ei sisalda transporti ja sinu riigi makse)&lt;br /&gt;
 |300 dollarit (~3200 krooni, baasmudel), 450 dollarit (~4800 krooni) Sisaldab lisariistvara arenduseks. (Kõik seadmed saadetakse Ameerika Ühendriikidest)&lt;br /&gt;
 |450 dollarit (~4800 krooni, baasmudel), 600 dollarit (~6500 krooni) Sisaldab lisariistvara arenduseks.&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973: GTA01Bv4 versus GTA02 comparison}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 2 related]]&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee</id>
		<title>Neo1973: GTA01Bv4 versus GTA02 comparison/ee</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo1973:_GTA01Bv4_versus_GTA02_comparison/ee"/>
				<updated>2007-12-08T10:56:11Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Neo1973 GTA01Bv4 ja [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]] riistvaraline erinevus ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 !Tunnus&lt;br /&gt;
 !GTA01Bv4&lt;br /&gt;
 !GTA02&lt;br /&gt;
 |-&lt;br /&gt;
 |Müük&lt;br /&gt;
 |Ostetav: https://direct.openmoko.com/&lt;br /&gt;
 |Ei ole veel valmis. Loe siit: http://wiki.openmoko.org/wiki/Community_Updates&lt;br /&gt;
 |-&lt;br /&gt;
 |Mõõtmed&amp;lt;br /&amp;gt;(ei ole erinevusi) &lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |120.7 x 62 x 18.5 mm&lt;br /&gt;
 |-&lt;br /&gt;
 |Kaal&lt;br /&gt;
 |184 g&lt;br /&gt;
 |184 g (kinnitamata)&lt;br /&gt;
 |-&lt;br /&gt;
 |Ekraan&amp;lt;br /&amp;gt;(ei ole erinevusi)&lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi (pikselit tolli kohta), &lt;br /&gt;
 |2.8&amp;quot; 480x640, 285 ppi, [http://lists.openmoko.org/pipermail/community/2006-December/000576.html hiljem võibolla mitme-puuteline]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#microSD-Card|Andmemahutavus]]&lt;br /&gt;
 |64 MB integreeritud välkmälu (laiendatav [http://lists.openmoko.org/pipermail/community/2007-February/003156.html igas suuruses microSD või MicroSDHC mälukaardiga])&lt;br /&gt;
 | [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html 256 MB] integreeritud välkmälu.&lt;br /&gt;
Laiendatav [http://www.techtree.com/India/News/Samsung_Readies_8GB_microSD_Card/551-81172-581.html igas suuruses microSD või MicroSDHC mälukaardiga]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#Processor|CPU]]&lt;br /&gt;
 |Samsung s3c2410 SoC @ 266 MHz ([http://lists.openmoko.org/pipermail/announce/2007-January/000000.html Source])&lt;br /&gt;
 |[http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=SC32442&amp;amp;&amp;amp;ppmi= Samsung 2442] @ 400 MHz SoC &lt;br /&gt;
 |-&lt;br /&gt;
 |Graphics Accelerator&lt;br /&gt;
 |&lt;br /&gt;
 |[http://www.smediatech.com/product3362.htm SMedia 3362 2D/3D Graphics Accelerator] [http://lists.openmoko.org/pipermail/announce/2007-June/000013.html lists.openmoko.org announcement]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[Neo1973_Hardware#RAM|RAM]]&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |128 MB&lt;br /&gt;
 |-&lt;br /&gt;
 |Wireless&lt;br /&gt;
 |Tri-band GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (Not EDGE), Bluetooth 2.0 EDR&lt;br /&gt;
 |Tri-band GSM, GPRS Class12/CS4/[http://lists.openmoko.org/pipermail/community/2007-September/010400.html B] 2.5G (Not EDGE), Bluetooth 2.0 EDR; WiFi: [http://lists.openmoko.org/pipermail/announce/2007-April/000012.html Atheros AR6K] (See also [[AR6K]]) (802.11 b/g)&lt;br /&gt;
 |-&lt;br /&gt;
 |Embedded devices&lt;br /&gt;
 |Assisted GPS, 2 buttons&lt;br /&gt;
 |Assisted GPS, 2 buttons; 2x3D [[Accelerometer]]s&lt;br /&gt;
 |-&lt;br /&gt;
 |GPS Hardware&lt;br /&gt;
 |Global Locate (now Broadcom) Hammerhead&lt;br /&gt;
 |u-blox/Atmel ATR0635 [http://lists.openmoko.org/pipermail/community/2007-October/011013.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Sound&lt;br /&gt;
 |Built-in stereo speakers, stereo handset&lt;br /&gt;
 |Built-in mono speaker, stereo handset&lt;br /&gt;
 |-&lt;br /&gt;
 |WiFi&lt;br /&gt;
 |no&lt;br /&gt;
 |yes&lt;br /&gt;
 |-&lt;br /&gt;
 |Accelerometer&lt;br /&gt;
 |no&lt;br /&gt;
 |yes&lt;br /&gt;
|-&lt;br /&gt;
 |Software&lt;br /&gt;
 |Extremely buggy. Most software needs to be added or made to work.&lt;br /&gt;
 |Basic PDA included. Software can be created by normal users.&lt;br /&gt;
 |-&lt;br /&gt;
 |Battery&lt;br /&gt;
 |Replaceable [[Neo1973_Battery|1.2 Ah battery]] charged via USB 1.1&lt;br /&gt;
 |Replaceable [[Neo1973_Battery|1.7 Ah battery]] charged via USB 1.1, or wall charger supplying 1000mA[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=956]. Also has a coulomb counter for accurate charge reading[http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=957]&lt;br /&gt;
 |-&lt;br /&gt;
 |USB Host Support&lt;br /&gt;
 |Yes, but external +5V is required&lt;br /&gt;
 |Yes, powered port [http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000280.html]&lt;br /&gt;
 |-&lt;br /&gt;
 |Ready for use&lt;br /&gt;
 |Not really. [[Developer_preview|What to expect from the Developer preview GTA01]].&lt;br /&gt;
 |Yes.&lt;br /&gt;
 |-&lt;br /&gt;
 |Price &amp;lt;br /&amp;gt; (not including shipping costs and applicable taxes for your country)&lt;br /&gt;
 |USD 300 (base model), USD 450 including additional development hardware. (All units are shipped from the U.S.)&lt;br /&gt;
 |USD 450 (base model), USD 600 including additional development hardware.&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973: GTA01Bv4 versus GTA02 comparison}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 2 related]]&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_Bluetooth</id>
		<title>Manually using Bluetooth</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_Bluetooth"/>
				<updated>2007-12-08T09:49:01Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Bluetooth networking with a Windows XP system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InProgress}}&lt;br /&gt;
Bluetooth is one of the core functions of the Neo1973, however it is basically unimplemented on the software side at the moment.&lt;br /&gt;
Hardware problems in the P1 phone mean that the CPU has to be active in order to wake on external bluetooth events, which will reduce the battery life to some 2 days at best in standby.&lt;br /&gt;
&lt;br /&gt;
This page details how to use bluetooth from the command line.&lt;br /&gt;
We have quite a lot of plans about what exactly Bluetooth should be used for.&lt;br /&gt;
&lt;br /&gt;
== Power it up ==&lt;br /&gt;
&lt;br /&gt;
Power up the adapter by clicking on the bluetooth icon in the top bar and selecting power on.&lt;br /&gt;
&lt;br /&gt;
The old way to do it is a shell command:&lt;br /&gt;
&lt;br /&gt;
 root@fic-gta01:~$ echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/gta01-pm-bt.0/power_on&lt;br /&gt;
&lt;br /&gt;
At the shell, &amp;quot;hciconfig&amp;quot; should print information about the adapter if it powered up properly:&lt;br /&gt;
&lt;br /&gt;
 hciconfig&lt;br /&gt;
&lt;br /&gt;
The devices should show as UP. If not you can use &lt;br /&gt;
&lt;br /&gt;
 hciconfig &amp;lt;device&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Functions ==&lt;br /&gt;
&lt;br /&gt;
===Configuring Bluetooth on OpenMoko 2007.2 (August 27 snapshot with kernel 2.6.21.6-moko11) ===&lt;br /&gt;
&lt;br /&gt;
In file /etc/bluetooth/hcid.conf you should change the passkey from BlueZ to something numeric. For testing you may use &amp;quot;0000&amp;quot;. Also, you can set the name to &amp;quot;Neo (%d)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Scanning for bluetooth devices ===&lt;br /&gt;
&lt;br /&gt;
 hcitool scan&lt;br /&gt;
&lt;br /&gt;
This will list the addresses of any discoverable bluetooth devices in the vicinity&lt;br /&gt;
&lt;br /&gt;
=== passkey agent example ===&lt;br /&gt;
&lt;br /&gt;
There should be a passkey agent built into openmoko, but for now you can start up the example passkey agent and set the pin code there. This will allow for new pairings to be made when you attempt a connection.&lt;br /&gt;
&lt;br /&gt;
 passkey-agent --default 0000 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Note: the passkey-agent is not required in OpenMoko 2007.2 with kernel 2.6.21.6 as of at least since August 27 (maybe earlier).&lt;br /&gt;
&lt;br /&gt;
=== HID (Human Input Device) ===&lt;br /&gt;
&lt;br /&gt;
==== Being able to use HID devices ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use a bluetooth keyboard to type into the various applications of our Neo1973.&lt;br /&gt;
To use a Bluetooth Keyboard type: (11:22:33:44:55:66 is the Address of your BT-Keyboard)&lt;br /&gt;
&lt;br /&gt;
 hidd --connect 11:22:33:44:55:66&lt;br /&gt;
&lt;br /&gt;
and press &amp;quot;Connect&amp;quot; on your BT-KB.  Alternately, if you know that only one BT-Keyboard is within range, you can just:&lt;br /&gt;
&lt;br /&gt;
 hidd --search&lt;br /&gt;
&lt;br /&gt;
to find and connect to any BT-Keyboard.&lt;br /&gt;
&lt;br /&gt;
Tested on:&lt;br /&gt;
* [http://www.logitech.com/index.cfm/products/details/US/EN,CRID=2166,CONTENTID=10717 Logitech Dinovo Edge]&lt;br /&gt;
* [http://www.nokia.es/A4181580 Nokia SU-8W].  Switched on the BT keyboard, scanned for BT address and ran the connect statement above.  Works fine.&lt;br /&gt;
* [http://blog.russnelson.com/chordite Chordite].  This keyboard uses the Broadcom BCM2042 BT keyboard controller along with a custom driver.&lt;br /&gt;
* The freedom keyboard from freedominput.com and its many rebranded models (they look like this: [http://rabenfrost.net/openmoko/keyboard.jpg]) need 'modprobe uinput' to circumvent the 'Can't open input device: No such file or directory (2)' error of 'hidd --search' but it still not works on openmoko but on my ubuntu box - maybe another kernel module is missing?&lt;br /&gt;
&lt;br /&gt;
==== Acting as HID device ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use the Neo1973 as a HID device, being able to use it as controller for presentations.&lt;br /&gt;
&lt;br /&gt;
=== RFCOMM ===&lt;br /&gt;
&lt;br /&gt;
Here's how to connect to an external Bluetooth GPS and read NMEA data (Tested with a Holux GPSSlim236 and a Nokia LD-3W ).&lt;br /&gt;
&lt;br /&gt;
First, switch on the GPS and identify the BT address:&lt;br /&gt;
&lt;br /&gt;
  hcitool scan&lt;br /&gt;
&lt;br /&gt;
Then, edit /etc/bluetooth/rfcomm.conf, which by default has all settings commented out, to something like this:&lt;br /&gt;
&lt;br /&gt;
  rfcomm0 {&lt;br /&gt;
        # Automatically bind the device at startup&lt;br /&gt;
        bind no;&lt;br /&gt;
        # Bluetooth address of the device&lt;br /&gt;
        device 00:11:22:33:44:55;&lt;br /&gt;
        # RFCOMM channel for the connection (check your GPS docs for details)&lt;br /&gt;
        channel 1;&lt;br /&gt;
        # Description of the connection&lt;br /&gt;
        comment &amp;quot;Bluetooth GPS&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Restart the BT services:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth stop&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
You should now be able to bind the GPS to /dev/rfcomm0, like this:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm bind 0&lt;br /&gt;
&lt;br /&gt;
Confirm the connect:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm&lt;br /&gt;
  rfcomm0: 00:11:22:33:44:55 channel 1 clean &lt;br /&gt;
&lt;br /&gt;
... and watch the NMEA strings coming from your GPS:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ cat /dev/rfcomm0 &lt;br /&gt;
  $GPGGA,111748.000,5907.6964,N,01121.1787,E,1,06,1.2,57.7,M,40.1,M,,0000*6F&lt;br /&gt;
  $GPRMC,111748.000,A,5907.6964,N,01121.1787,E,0.00,94.94,160807,,,A*50&lt;br /&gt;
  $GPVTG,94.94,T,,M,0.00,N,0.0,K,A*3D&lt;br /&gt;
&lt;br /&gt;
If you have nothing better to do, you can now pinpoint my office :-).&lt;br /&gt;
&lt;br /&gt;
=== OBEX ===&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 elara /home/alphaone # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
 elara /home/alphaone # pand -s&lt;br /&gt;
&lt;br /&gt;
* As soon as pand is started on the phone configure your IP address&lt;br /&gt;
 elara /home/alphaone # ip a add 10.0.0.1/24 dev bnep0&lt;br /&gt;
 elara /home/alphaone # ip l set bnep0 up&lt;br /&gt;
&lt;br /&gt;
* Configure IP forwarding and masquerading to your liking (see [[USB_Networking]]). You can even set up Udev rules to do this for you once the bnep0 interface appears.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:0E:6D:C0:0l:6A       Sho&lt;br /&gt;
         00:20:E0:5A:FE:C8       BlueZ (0)&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Windows XP system ===&lt;br /&gt;
&lt;br /&gt;
This was tested with a Windows XP SP2 on a IBM Thinkpad T41 with the Widcomm BT stack&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth on Windows XP&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;quot;Network Access&amp;quot; in the Bluetooth configuration&lt;br /&gt;
&lt;br /&gt;
* Scan for the Neo and pair with the Neo (right click, select pair)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Enable PAN support on the Neo by changing Autostart from false to true in /etc/bluetooth/network.service&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         &amp;lt;laptop_bt_address&amp;gt;     Thinkpad&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 pand -c &amp;lt;laptop_bt_address&amp;gt; -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
For some reason, I was not able to initiate PAN connections from the Neo, I got 'Permission denied (13)' even when I had explicitly allowed the Neo to connect (right click on Neo icon, set properties, on Authorization tab). But initiating 'PAN User' from Windows worked when executing on Neo:&lt;br /&gt;
 pand -l -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address. It should work like when connecting to Linux:&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
If this does not work, the IP stacks may have auto-assigned network addresses to themselves. You can look this up with 'ifconfig' on the Neo and with 'ipconfig' on Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* You should now be able to ssh/putty from Windows to your Neo. Enjoy!&lt;br /&gt;
By setting up the Windows Bluetooth connection properly, it should also be possible to share the Internet Connection of the Windows box with the Neo.&lt;br /&gt;
&lt;br /&gt;
=== PPP Networking ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to use the 'BNEP' method described above, you may be able to use [[PPP]] and a DUN (dialup-networking) emulation mode. On the Neo:&lt;br /&gt;
&lt;br /&gt;
* Edit the /etc/default/bluetooth file and set the following options:&lt;br /&gt;
 RFCOMM_ENABLE=true&lt;br /&gt;
 DUND_ENABLE=true&lt;br /&gt;
 DUND_OPTIONS=&amp;quot;--listen --persist call dun&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Create an /etc/ppp/peers/dun file with options like the following:&lt;br /&gt;
 115200&lt;br /&gt;
 192.168.2.202:192.168.2.200&lt;br /&gt;
 passive&lt;br /&gt;
 local&lt;br /&gt;
 noipdefault&lt;br /&gt;
 noauth&lt;br /&gt;
 nodefaultroute&lt;br /&gt;
 &lt;br /&gt;
* Restart bluetooth (/etc/init.d/bluetooth stop ; /etc/init.d/bluetooth start)&lt;br /&gt;
&lt;br /&gt;
To connect from a MacOS 10.3 client:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;quot;Applications/Utilities/Bluetooth Serial Utility&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Click on &amp;quot;New&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Choose a name, then click &amp;quot;Choose Device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Locate your Neo, then select the &amp;quot;LAN Access Point&amp;quot; service. If your device is not found, or if this service does not show up, then you will need to troubleshoot and fix that before continuing. Bluetooth is designed for short-range communication, so make sure that the devices are physically close to each other. &lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Port type: RS-232&amp;quot; and &amp;quot;Show in Network Preferences&amp;quot;. Click OK.&lt;br /&gt;
&lt;br /&gt;
* Open the Network Preferences page then &amp;quot;Show: Network Port Configurations&amp;quot;. Enable the new device that you defined in the previous step and drag it to the bottom of the device list (so that it will not interfere with your other network connections)&lt;br /&gt;
&lt;br /&gt;
* Choose &amp;quot;Show: &amp;lt;your-device-name&amp;gt;&amp;quot;, then click &amp;quot;Modem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Null Modem 115200&amp;quot; from the list of available devices. Uncheck &amp;quot;Wait for dial tone&amp;quot; and &amp;quot;Enable error correction and compression in modem&amp;quot;. Optionally check &amp;quot;Show modem status in menu bar&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Connect&amp;quot;. If everything worked, you will end up with a 'ppp0' device on your Mac with a local address of 192.168.2.200 and you will be able to access your Neo at 192.168.2.202.&lt;br /&gt;
&lt;br /&gt;
=== A2DP quickie ===&lt;br /&gt;
&lt;br /&gt;
It's now possible (if a little hackish) to stream mp3 to a bluetooth headset. It's a known problem that the playback rate changes (pitch varies). Timing issues are also likely the reason for gaps in playback.&lt;br /&gt;
&lt;br /&gt;
If the bluez packages are recent enough, you can use a shortcut. I'll document it here and leave the longer version below (the long version also demonstrates the API used by the GUI to manage headsets)&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf with your bluetooth headset's address filled in:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
  device &amp;quot;xx:xx:xx:xx:xx:xx&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
then play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
or for smoother results...&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:song.wav&lt;br /&gt;
 aplay song.wav&lt;br /&gt;
&lt;br /&gt;
=== A2DP ===&lt;br /&gt;
&lt;br /&gt;
If that doesn't work... all the more hackish... install required packages:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;src/gz python http://www.angstrom-distribution.org/unstable/feed/armv4t/python/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-python.conf &lt;br /&gt;
 echo &amp;quot;src/gz base http://www.angstrom-distribution.org/unstable/feed/armv4t/base/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-base.conf&lt;br /&gt;
 ipkg update ; ipkg install python-core python-xml python-dbus bluez-utils bluez-utils-alsa&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 pcm.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Run the passkey agent (see above in this page)&lt;br /&gt;
&lt;br /&gt;
Fill in your bluetooth headset address below and execute the python script (with your headset turned on)&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateDevice('00:0D:3C:44:33:22')&lt;br /&gt;
 audio.ChangeDefaultDevice(path)&lt;br /&gt;
 sink = dbus.Interface(bus.get_object(conn, path), 'org.bluez.audio.Sink')&lt;br /&gt;
 sink.Connect()&lt;br /&gt;
&lt;br /&gt;
FINALLY: play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
=== Headset Audio ===&lt;br /&gt;
&lt;br /&gt;
[[Neo1973_Audio_Subsystem]] has detail about alsa settings and a proposal for audio scenario management.&lt;br /&gt;
&lt;br /&gt;
To try this out, follow the instructions in the a2dp section to install software and run the passkey agent.&lt;br /&gt;
&lt;br /&gt;
Remove or disable the stuff you put in asound.conf. When using a voice headset, the application uses the regular system audio device and it gets routed to bluetooth in the codec.&lt;br /&gt;
&lt;br /&gt;
Put the headset in pairing mode. Replace the bluetooth address below with your headset's and run the python script:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateHeadset('00:0B:2E:39:33:22')&lt;br /&gt;
 audio.ChangeDefaultHeadset(path)&lt;br /&gt;
 headset = dbus.Interface (bus.get_object(conn, path), 'org.bluez.audio.Headset')&lt;br /&gt;
 headset.Connect()&lt;br /&gt;
 headset.Play()&lt;br /&gt;
&lt;br /&gt;
Now place a call and try to route it to bluetooth (after it's in progress):&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/gsmbluetooth.state restore&lt;br /&gt;
&lt;br /&gt;
You may also be able to listen to system audio given the right state file:&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/systembluetooth.state restore&lt;br /&gt;
 madplay song.mp3&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system - More secure way ===&lt;br /&gt;
&lt;br /&gt;
''Check this, probably needs some corrections''&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* check these options in /etc/bluetooth/hcid.conf&lt;br /&gt;
 security auto;&lt;br /&gt;
 passkey &amp;quot;your pin&amp;quot;;&lt;br /&gt;
 lm master;&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
  pand --listen --role NAP --encrypt&lt;br /&gt;
&lt;br /&gt;
* Add in /etc/network/interfaces (see [[USB_Networking]])&lt;br /&gt;
 auto bnep0&lt;br /&gt;
 iface bnep0 inet static&lt;br /&gt;
 address 192.168.1.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 network 192.168.1.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.1.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:20:E0:5A:FE:C8       laptop&lt;br /&gt;
&lt;br /&gt;
* Set pin&lt;br /&gt;
 root@fic-gta01:~$ passkey-agent 'your pin' 00:20:E0:5A:FE:C8 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 root@fic-gta01:~$ ifconfig bnep0 192.168.1.2&lt;br /&gt;
 root@fic-gta01:~$ route add default gateway 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
http://www.holtmann.org/papers/bluetooth/ols2006_slides.pdf&lt;br /&gt;
http://wiki.bluez.org/wiki/Audio#org.bluez.Audio&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_Bluetooth}}&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Bluetooth]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_Bluetooth</id>
		<title>Manually using Bluetooth</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_Bluetooth"/>
				<updated>2007-12-08T09:37:12Z</updated>
		
		<summary type="html">&lt;p&gt;Henrikp: /* Bluetooth networking with a Windows XP system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InProgress}}&lt;br /&gt;
Bluetooth is one of the core functions of the Neo1973, however it is basically unimplemented on the software side at the moment.&lt;br /&gt;
Hardware problems in the P1 phone mean that the CPU has to be active in order to wake on external bluetooth events, which will reduce the battery life to some 2 days at best in standby.&lt;br /&gt;
&lt;br /&gt;
This page details how to use bluetooth from the command line.&lt;br /&gt;
We have quite a lot of plans about what exactly Bluetooth should be used for.&lt;br /&gt;
&lt;br /&gt;
== Power it up ==&lt;br /&gt;
&lt;br /&gt;
Power up the adapter by clicking on the bluetooth icon in the top bar and selecting power on.&lt;br /&gt;
&lt;br /&gt;
The old way to do it is a shell command:&lt;br /&gt;
&lt;br /&gt;
 root@fic-gta01:~$ echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/gta01-pm-bt.0/power_on&lt;br /&gt;
&lt;br /&gt;
At the shell, &amp;quot;hciconfig&amp;quot; should print information about the adapter if it powered up properly:&lt;br /&gt;
&lt;br /&gt;
 hciconfig&lt;br /&gt;
&lt;br /&gt;
The devices should show as UP. If not you can use &lt;br /&gt;
&lt;br /&gt;
 hciconfig &amp;lt;device&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Functions ==&lt;br /&gt;
&lt;br /&gt;
===Configuring Bluetooth on OpenMoko 2007.2 (August 27 snapshot with kernel 2.6.21.6-moko11) ===&lt;br /&gt;
&lt;br /&gt;
In file /etc/bluetooth/hcid.conf you should change the passkey from BlueZ to something numeric. For testing you may use &amp;quot;0000&amp;quot;. Also, you can set the name to &amp;quot;Neo (%d)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Scanning for bluetooth devices ===&lt;br /&gt;
&lt;br /&gt;
 hcitool scan&lt;br /&gt;
&lt;br /&gt;
This will list the addresses of any discoverable bluetooth devices in the vicinity&lt;br /&gt;
&lt;br /&gt;
=== passkey agent example ===&lt;br /&gt;
&lt;br /&gt;
There should be a passkey agent built into openmoko, but for now you can start up the example passkey agent and set the pin code there. This will allow for new pairings to be made when you attempt a connection.&lt;br /&gt;
&lt;br /&gt;
 passkey-agent --default 0000 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Note: the passkey-agent is not required in OpenMoko 2007.2 with kernel 2.6.21.6 as of at least since August 27 (maybe earlier).&lt;br /&gt;
&lt;br /&gt;
=== HID (Human Input Device) ===&lt;br /&gt;
&lt;br /&gt;
==== Being able to use HID devices ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use a bluetooth keyboard to type into the various applications of our Neo1973.&lt;br /&gt;
To use a Bluetooth Keyboard type: (11:22:33:44:55:66 is the Address of your BT-Keyboard)&lt;br /&gt;
&lt;br /&gt;
 hidd --connect 11:22:33:44:55:66&lt;br /&gt;
&lt;br /&gt;
and press &amp;quot;Connect&amp;quot; on your BT-KB.  Alternately, if you know that only one BT-Keyboard is within range, you can just:&lt;br /&gt;
&lt;br /&gt;
 hidd --search&lt;br /&gt;
&lt;br /&gt;
to find and connect to any BT-Keyboard.&lt;br /&gt;
&lt;br /&gt;
Tested on:&lt;br /&gt;
* [http://www.logitech.com/index.cfm/products/details/US/EN,CRID=2166,CONTENTID=10717 Logitech Dinovo Edge]&lt;br /&gt;
* [http://www.nokia.es/A4181580 Nokia SU-8W].  Switched on the BT keyboard, scanned for BT address and ran the connect statement above.  Works fine.&lt;br /&gt;
* [http://blog.russnelson.com/chordite Chordite].  This keyboard uses the Broadcom BCM2042 BT keyboard controller along with a custom driver.&lt;br /&gt;
* The freedom keyboard from freedominput.com and its many rebranded models (they look like this: [http://rabenfrost.net/openmoko/keyboard.jpg]) need 'modprobe uinput' to circumvent the 'Can't open input device: No such file or directory (2)' error of 'hidd --search' but it still not works on openmoko but on my ubuntu box - maybe another kernel module is missing?&lt;br /&gt;
&lt;br /&gt;
==== Acting as HID device ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use the Neo1973 as a HID device, being able to use it as controller for presentations.&lt;br /&gt;
&lt;br /&gt;
=== RFCOMM ===&lt;br /&gt;
&lt;br /&gt;
Here's how to connect to an external Bluetooth GPS and read NMEA data (Tested with a Holux GPSSlim236 and a Nokia LD-3W ).&lt;br /&gt;
&lt;br /&gt;
First, switch on the GPS and identify the BT address:&lt;br /&gt;
&lt;br /&gt;
  hcitool scan&lt;br /&gt;
&lt;br /&gt;
Then, edit /etc/bluetooth/rfcomm.conf, which by default has all settings commented out, to something like this:&lt;br /&gt;
&lt;br /&gt;
  rfcomm0 {&lt;br /&gt;
        # Automatically bind the device at startup&lt;br /&gt;
        bind no;&lt;br /&gt;
        # Bluetooth address of the device&lt;br /&gt;
        device 00:11:22:33:44:55;&lt;br /&gt;
        # RFCOMM channel for the connection (check your GPS docs for details)&lt;br /&gt;
        channel 1;&lt;br /&gt;
        # Description of the connection&lt;br /&gt;
        comment &amp;quot;Bluetooth GPS&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Restart the BT services:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth stop&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
You should now be able to bind the GPS to /dev/rfcomm0, like this:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm bind 0&lt;br /&gt;
&lt;br /&gt;
Confirm the connect:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm&lt;br /&gt;
  rfcomm0: 00:11:22:33:44:55 channel 1 clean &lt;br /&gt;
&lt;br /&gt;
... and watch the NMEA strings coming from your GPS:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ cat /dev/rfcomm0 &lt;br /&gt;
  $GPGGA,111748.000,5907.6964,N,01121.1787,E,1,06,1.2,57.7,M,40.1,M,,0000*6F&lt;br /&gt;
  $GPRMC,111748.000,A,5907.6964,N,01121.1787,E,0.00,94.94,160807,,,A*50&lt;br /&gt;
  $GPVTG,94.94,T,,M,0.00,N,0.0,K,A*3D&lt;br /&gt;
&lt;br /&gt;
If you have nothing better to do, you can now pinpoint my office :-).&lt;br /&gt;
&lt;br /&gt;
=== OBEX ===&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 elara /home/alphaone # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
 elara /home/alphaone # pand -s&lt;br /&gt;
&lt;br /&gt;
* As soon as pand is started on the phone configure your IP address&lt;br /&gt;
 elara /home/alphaone # ip a add 10.0.0.1/24 dev bnep0&lt;br /&gt;
 elara /home/alphaone # ip l set bnep0 up&lt;br /&gt;
&lt;br /&gt;
* Configure IP forwarding and masquerading to your liking (see [[USB_Networking]]). You can even set up Udev rules to do this for you once the bnep0 interface appears.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:0E:6D:C0:0l:6A       Sho&lt;br /&gt;
         00:20:E0:5A:FE:C8       BlueZ (0)&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Windows XP system ===&lt;br /&gt;
&lt;br /&gt;
This was tested with a Windows XP SP2 on a IBM Thinkpad T41 with the Widcomm BT stack&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth on Windows XP&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;quot;Network Access&amp;quot; in the Bluetooth configuration&lt;br /&gt;
&lt;br /&gt;
* Scan for the Neo and pair with the Neo (right click, select pair)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Enable PAN support on the Neo by changing Autostart from false to true in /etc/bluetooth/network.service&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         &amp;lt;laptop_bt_address&amp;gt;     Thinkpad&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 pand -c &amp;lt;laptop_bt_address&amp;gt; -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
For some reason, I was not able to initiate PAN connections from the Neo, I got 'Permission denied (13)' even when I had explicitly allowed the Neo to connect (right click on Neo icon, set properties, on Authorization tab). But initiating 'PAN User' from Windows worked when executing on Neo:&lt;br /&gt;
 pand -l -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address. It should work like when connecting to Linux:&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
If this does not work, the IP stacks may have auto-assigned network addresses to themselves. You can look this up with 'ifconfig' on the Neo and with 'ipconfig' on Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* You should now be able to ssh/putty from Windows to your Neo. Enjoy!&lt;br /&gt;
By setting up the Windows Bluetooth connection properly, it should also be possible to share the Internet Connection of the Windows box with the Neo. The most easiest way is to bridge your bluetooth and local area network interface, and if you have a DHCP server on your network, bnep0 will be configured automatically after connecting with pand.&lt;br /&gt;
&lt;br /&gt;
=== PPP Networking ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to use the 'BNEP' method described above, you may be able to use [[PPP]] and a DUN (dialup-networking) emulation mode. On the Neo:&lt;br /&gt;
&lt;br /&gt;
* Edit the /etc/default/bluetooth file and set the following options:&lt;br /&gt;
 RFCOMM_ENABLE=true&lt;br /&gt;
 DUND_ENABLE=true&lt;br /&gt;
 DUND_OPTIONS=&amp;quot;--listen --persist call dun&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Create an /etc/ppp/peers/dun file with options like the following:&lt;br /&gt;
 115200&lt;br /&gt;
 192.168.2.202:192.168.2.200&lt;br /&gt;
 passive&lt;br /&gt;
 local&lt;br /&gt;
 noipdefault&lt;br /&gt;
 noauth&lt;br /&gt;
 nodefaultroute&lt;br /&gt;
 &lt;br /&gt;
* Restart bluetooth (/etc/init.d/bluetooth stop ; /etc/init.d/bluetooth start)&lt;br /&gt;
&lt;br /&gt;
To connect from a MacOS 10.3 client:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;quot;Applications/Utilities/Bluetooth Serial Utility&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Click on &amp;quot;New&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Choose a name, then click &amp;quot;Choose Device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Locate your Neo, then select the &amp;quot;LAN Access Point&amp;quot; service. If your device is not found, or if this service does not show up, then you will need to troubleshoot and fix that before continuing. Bluetooth is designed for short-range communication, so make sure that the devices are physically close to each other. &lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Port type: RS-232&amp;quot; and &amp;quot;Show in Network Preferences&amp;quot;. Click OK.&lt;br /&gt;
&lt;br /&gt;
* Open the Network Preferences page then &amp;quot;Show: Network Port Configurations&amp;quot;. Enable the new device that you defined in the previous step and drag it to the bottom of the device list (so that it will not interfere with your other network connections)&lt;br /&gt;
&lt;br /&gt;
* Choose &amp;quot;Show: &amp;lt;your-device-name&amp;gt;&amp;quot;, then click &amp;quot;Modem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Null Modem 115200&amp;quot; from the list of available devices. Uncheck &amp;quot;Wait for dial tone&amp;quot; and &amp;quot;Enable error correction and compression in modem&amp;quot;. Optionally check &amp;quot;Show modem status in menu bar&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Connect&amp;quot;. If everything worked, you will end up with a 'ppp0' device on your Mac with a local address of 192.168.2.200 and you will be able to access your Neo at 192.168.2.202.&lt;br /&gt;
&lt;br /&gt;
=== A2DP quickie ===&lt;br /&gt;
&lt;br /&gt;
It's now possible (if a little hackish) to stream mp3 to a bluetooth headset. It's a known problem that the playback rate changes (pitch varies). Timing issues are also likely the reason for gaps in playback.&lt;br /&gt;
&lt;br /&gt;
If the bluez packages are recent enough, you can use a shortcut. I'll document it here and leave the longer version below (the long version also demonstrates the API used by the GUI to manage headsets)&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf with your bluetooth headset's address filled in:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
  device &amp;quot;xx:xx:xx:xx:xx:xx&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
then play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
or for smoother results...&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:song.wav&lt;br /&gt;
 aplay song.wav&lt;br /&gt;
&lt;br /&gt;
=== A2DP ===&lt;br /&gt;
&lt;br /&gt;
If that doesn't work... all the more hackish... install required packages:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;src/gz python http://www.angstrom-distribution.org/unstable/feed/armv4t/python/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-python.conf &lt;br /&gt;
 echo &amp;quot;src/gz base http://www.angstrom-distribution.org/unstable/feed/armv4t/base/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-base.conf&lt;br /&gt;
 ipkg update ; ipkg install python-core python-xml python-dbus bluez-utils bluez-utils-alsa&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 pcm.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Run the passkey agent (see above in this page)&lt;br /&gt;
&lt;br /&gt;
Fill in your bluetooth headset address below and execute the python script (with your headset turned on)&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateDevice('00:0D:3C:44:33:22')&lt;br /&gt;
 audio.ChangeDefaultDevice(path)&lt;br /&gt;
 sink = dbus.Interface(bus.get_object(conn, path), 'org.bluez.audio.Sink')&lt;br /&gt;
 sink.Connect()&lt;br /&gt;
&lt;br /&gt;
FINALLY: play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
=== Headset Audio ===&lt;br /&gt;
&lt;br /&gt;
[[Neo1973_Audio_Subsystem]] has detail about alsa settings and a proposal for audio scenario management.&lt;br /&gt;
&lt;br /&gt;
To try this out, follow the instructions in the a2dp section to install software and run the passkey agent.&lt;br /&gt;
&lt;br /&gt;
Remove or disable the stuff you put in asound.conf. When using a voice headset, the application uses the regular system audio device and it gets routed to bluetooth in the codec.&lt;br /&gt;
&lt;br /&gt;
Put the headset in pairing mode. Replace the bluetooth address below with your headset's and run the python script:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateHeadset('00:0B:2E:39:33:22')&lt;br /&gt;
 audio.ChangeDefaultHeadset(path)&lt;br /&gt;
 headset = dbus.Interface (bus.get_object(conn, path), 'org.bluez.audio.Headset')&lt;br /&gt;
 headset.Connect()&lt;br /&gt;
 headset.Play()&lt;br /&gt;
&lt;br /&gt;
Now place a call and try to route it to bluetooth (after it's in progress):&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/gsmbluetooth.state restore&lt;br /&gt;
&lt;br /&gt;
You may also be able to listen to system audio given the right state file:&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/systembluetooth.state restore&lt;br /&gt;
 madplay song.mp3&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system - More secure way ===&lt;br /&gt;
&lt;br /&gt;
''Check this, probably needs some corrections''&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* check these options in /etc/bluetooth/hcid.conf&lt;br /&gt;
 security auto;&lt;br /&gt;
 passkey &amp;quot;your pin&amp;quot;;&lt;br /&gt;
 lm master;&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
  pand --listen --role NAP --encrypt&lt;br /&gt;
&lt;br /&gt;
* Add in /etc/network/interfaces (see [[USB_Networking]])&lt;br /&gt;
 auto bnep0&lt;br /&gt;
 iface bnep0 inet static&lt;br /&gt;
 address 192.168.1.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 network 192.168.1.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.1.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:20:E0:5A:FE:C8       laptop&lt;br /&gt;
&lt;br /&gt;
* Set pin&lt;br /&gt;
 root@fic-gta01:~$ passkey-agent 'your pin' 00:20:E0:5A:FE:C8 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 root@fic-gta01:~$ ifconfig bnep0 192.168.1.2&lt;br /&gt;
 root@fic-gta01:~$ route add default gateway 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
http://www.holtmann.org/papers/bluetooth/ols2006_slides.pdf&lt;br /&gt;
http://wiki.bluez.org/wiki/Audio#org.bluez.Audio&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_Bluetooth}}&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Bluetooth]]&lt;/div&gt;</summary>
		<author><name>Henrikp</name></author>	</entry>

	</feed>