<?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=PH5&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=PH5&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/PH5"/>
		<updated>2013-05-25T07:58:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/PulseAudio</id>
		<title>PulseAudio</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/PulseAudio"/>
				<updated>2008-04-12T13:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: how to make pulseaudio available on the network&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''PulseAudio''' ([http://www.pulseaudio.org/ homepage]) is the sound server used by OpenMoko to mix output from several applications as needed.&lt;br /&gt;
&lt;br /&gt;
[[neod]] uses PulseAudio to play the samples &amp;quot;startup&amp;quot; and &amp;quot;touchscreen&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The samples are loaded from files and can be changed or disabled at the configuration file /etc/pulse/session.&lt;br /&gt;
&lt;br /&gt;
== Turning the Neo1973 into a USB sound card ==&lt;br /&gt;
&lt;br /&gt;
The sound server can easily be made available (and discoverable, thanks to [http://www.avahi.org Avahi]) in the local network, effectively turning the Neo1973 into an overqualified USB sound card (see also: http://www.pulseaudio.org/wiki/PerfectSetup):&lt;br /&gt;
&lt;br /&gt;
 ipkg install pulseaudio-module-zeroconf-publish pulseaudio-module-native-protocol-tcp&lt;br /&gt;
 echo &amp;quot;load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16&amp;quot; &amp;gt;&amp;gt; /etc/pulse/session&lt;br /&gt;
 echo &amp;quot;load-module module-zeroconf-publish&amp;quot; &amp;gt;&amp;gt; /etc/pulse/session&lt;br /&gt;
 /etc/init.d/pulseaudio restart&lt;br /&gt;
&lt;br /&gt;
Now on a Desktop with PulseAudio properly set up, the padevchooser applet lists the Neo's hostname as audio sink as soon as it is connected via USB.&lt;br /&gt;
&lt;br /&gt;
[[Category:Software ]]&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin</id>
		<title>Openmoko Local Groups: Berlin</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin"/>
				<updated>2007-09-09T10:39:19Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: pH5-&amp;gt;neo++&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; See [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
&lt;br /&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;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
!Has Device&lt;br /&gt;
!Has Debug Board&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Minime|tim]]&lt;br /&gt;
|mostly web related&lt;br /&gt;
|No GTA01Bv4, waiting for GTA02. &lt;br /&gt;
|berlin.nord&lt;br /&gt;
|willing to organize stuff i.e. meeting location/whatever. [http://wiki.openmoko.org/index.php?title=User_talk:Minime&amp;amp;action=edit&amp;amp;section=new talk to me], or e-mail: OM DOT 5 DOT minime@xoxy.net&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:spag|spag]]&lt;br /&gt;
|too lazy&lt;br /&gt;
|patiently waiting for GTA02 with WLAN&lt;br /&gt;
|Marzahn&lt;br /&gt;
|I'm interested in VoIP applications on OpenMoko.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PH5|pH5]]&lt;br /&gt;
|Coding, RE, Uni&lt;br /&gt;
|OpenMoko, gsmd, GTA01, Magician&lt;br /&gt;
|Zehlendorf&lt;br /&gt;
|[http://projects.linuxtogo.org/projects/sphyrna Sphyrna]&lt;br /&gt;
|[[Image:Moko.jpg|center]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Barmeier|barmeier]]&lt;br /&gt;
|Coding in C and Java&lt;br /&gt;
|GTA01, Magician&lt;br /&gt;
|Steglitz&lt;br /&gt;
|I'am interested in Sync, application integration and usability improvements&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kriss|kriss]]&lt;br /&gt;
|Coding&lt;br /&gt;
|&lt;br /&gt;
|Wedding&lt;br /&gt;
|&lt;br /&gt;
|[[Image:Moko.jpg|center]]&lt;br /&gt;
|[[Image:MokoBox.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Roh|roh]]&lt;br /&gt;
|developer support&lt;br /&gt;
|just working here ;)&lt;br /&gt;
|mitte&lt;br /&gt;
|&lt;br /&gt;
|[[Image:Moko.jpg|center]]&lt;br /&gt;
|[[Image:MokoBox.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Meetings, Events ===&lt;br /&gt;
Meeting language is German ;-)&lt;br /&gt;
{|border=1&lt;br /&gt;
!Date&lt;br /&gt;
!Location&lt;br /&gt;
!Topic&lt;br /&gt;
!Who&lt;br /&gt;
|-&lt;br /&gt;
|8.-12. August 2007&lt;br /&gt;
|Flugplatz Finowfurt&lt;br /&gt;
|[https://events.ccc.de/camp/2007/Intro/ Chaos Communication Camp 2007] und [http://events.ccc.de/camp/2007/GSM_Village GSM Village]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
|23.08.2007 / 18:00&lt;br /&gt;
|[https://berlin.ccc.de/wiki/CCC_Berlin CCCB] / [https://berlin.ccc.de/wiki/Club_Discordia Club Diskordia]&lt;br /&gt;
|First meeting. bring your hardware&lt;br /&gt;
|Roh, pH5, [[User:Minime|tim]](+ 2?), ? (please add yourself)&lt;br /&gt;
|-&lt;br /&gt;
|no definite date yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|no location yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|First GTA01Bv4 impressions for P1 owners and those who have no Neo yet. Giving each other a helping hand getting started.&lt;br /&gt;
|[[User:Minime|tim]], ...&lt;br /&gt;
|}&lt;br /&gt;
[[Category:OpenMoko_Local_Groups:_Berlin]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin</id>
		<title>Openmoko Local Groups: Berlin</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin"/>
				<updated>2007-08-20T17:26:04Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: /* Meetings, Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; See [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
&lt;br /&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;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Minime|tim]]&lt;br /&gt;
|mostly web related&lt;br /&gt;
|No GTA01Bv4, waiting for GTA02. &lt;br /&gt;
|berlin.nord&lt;br /&gt;
|willing to organize stuff i.e. meeting location/whatever. [http://wiki.openmoko.org/index.php?title=User_talk:Minime&amp;amp;action=edit&amp;amp;section=new talk to me], or e-mail: OM DOT 5 DOT minime@xoxy.net&lt;br /&gt;
|-&lt;br /&gt;
|[[User:spag|spag]]&lt;br /&gt;
|too lazy&lt;br /&gt;
|patiently waiting for GTA02 with WLAN&lt;br /&gt;
|Marzahn&lt;br /&gt;
|I'm interested in VoIP applications on OpenMoko.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PH5|pH5]]&lt;br /&gt;
|Coding, RE, Uni&lt;br /&gt;
|OpenMoko, gsmd, GTA01, Magician&lt;br /&gt;
|Zehlendorf&lt;br /&gt;
|[http://projects.linuxtogo.org/projects/sphyrna Sphyrna]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Barmeier|barmeier]]&lt;br /&gt;
|Coding in C and Java&lt;br /&gt;
|GTA01, Magician&lt;br /&gt;
|Steglitz&lt;br /&gt;
|I'am interested in Sync, application integration and usability improvements&lt;br /&gt;
|-&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Meetings, Events ===&lt;br /&gt;
Meeting language is German ;-)&lt;br /&gt;
{|border=1&lt;br /&gt;
!Date&lt;br /&gt;
!Location&lt;br /&gt;
!Topic&lt;br /&gt;
!Who&lt;br /&gt;
|-&lt;br /&gt;
|8.-12. August 2007&lt;br /&gt;
|Flugplatz Finowfurt&lt;br /&gt;
|[https://events.ccc.de/camp/2007/Intro/ Chaos Communication Camp 2007] und [http://events.ccc.de/camp/2007/GSM_Village GSM Village]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
|23.08.2007 / 18:00&lt;br /&gt;
|[https://berlin.ccc.de/wiki/CCC_Berlin CCCB] / [https://berlin.ccc.de/wiki/Club_Discordia Club Diskordia]&lt;br /&gt;
|First meeting. bring your hardware&lt;br /&gt;
|Roh, pH5, ? (please add yourself)&lt;br /&gt;
|-&lt;br /&gt;
|no definite date yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|no location yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|First GTA01Bv4 impressions for P1 owners and those who have no Neo yet. Giving each other a helping hand getting started.&lt;br /&gt;
|[[User:Minime|tim]], ...&lt;br /&gt;
|}&lt;br /&gt;
[[Category:OpenMoko_Local_Groups:_Berlin]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin</id>
		<title>Openmoko Local Groups: Berlin</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Berlin"/>
				<updated>2007-08-16T22:26:42Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: /* Possible Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; See [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
&lt;br /&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;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Minime|tim]]&lt;br /&gt;
|mostly web related&lt;br /&gt;
|No GTA01Bv4, waiting for GTA02. &lt;br /&gt;
|berlin.nord&lt;br /&gt;
|willing to organize stuff i.e. meeting location/whatever. [http://wiki.openmoko.org/index.php?title=User_talk:Minime&amp;amp;action=edit&amp;amp;section=new talk to me], or e-mail: OM DOT 5 DOT minime@xoxy.net&lt;br /&gt;
|-&lt;br /&gt;
|[[User:spag|spag]]&lt;br /&gt;
|too lazy&lt;br /&gt;
|patiently waiting for GTA02 with WLAN&lt;br /&gt;
|Marzahn&lt;br /&gt;
|I'm interested in VoIP applications on OpenMoko.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PH5|pH5]]&lt;br /&gt;
|Coding, RE, Uni&lt;br /&gt;
|OpenMoko, gsmd, GTA01, Magician&lt;br /&gt;
|Zehlendorf&lt;br /&gt;
|[http://projects.linuxtogo.org/projects/sphyrna Sphyrna]&lt;br /&gt;
|-&lt;br /&gt;
|...&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Meetings, Events ===&lt;br /&gt;
Meeting language is German ;-)&lt;br /&gt;
{|border=1&lt;br /&gt;
!Date&lt;br /&gt;
!Location&lt;br /&gt;
!Topic&lt;br /&gt;
!Who&lt;br /&gt;
|-&lt;br /&gt;
|8.-12. August 2007&lt;br /&gt;
|Flugplatz Finowfurt&lt;br /&gt;
|[https://events.ccc.de/camp/2007/Intro/ Chaos Communication Camp 2007] und [http://events.ccc.de/camp/2007/GSM_Village GSM Village]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
|no definite date yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|no location yet - please use [[Talk:OpenMoko_Local_Groups:_Berlin|discussion]]&lt;br /&gt;
|First GTA01Bv4 impressions for P1 owners and those who have no Neo yet. Giving each other a helping hand getting started.&lt;br /&gt;
|[[User:Minime|tim]], ...&lt;br /&gt;
|}&lt;br /&gt;
[[Category:OpenMoko_Local_Groups:_Berlin]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2007-08-13T18:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: suggest ext2 file system on SD cards&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps described to boot your system from an SD card.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Build your kernel ===&lt;br /&gt;
&lt;br /&gt;
Kernel building is supposed to be done through OpenEmbedded. If you use the MokoMakefile open up $OMDIR/openmoko/trunk/oe/packages/linux/linux-gta01/defconfig-2.6.21.6-fic-gta01. If you are building OM-2007.2 open $OEDIR/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01. (''Note that the kernel version may change in future versions.'')&lt;br /&gt;
&lt;br /&gt;
Now find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=y&lt;br /&gt;
&lt;br /&gt;
If you want to use an ext2 file system on the SD, also find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=y&lt;br /&gt;
&lt;br /&gt;
Thats it. Now rebuild the kernel.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Populate SD card ===&lt;br /&gt;
&lt;br /&gt;
Format partition 1 as ext3 (or better ext2 if enabled, see above). Mount your SD card somewhere and put your image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/sda1 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xvzf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
Now we also want the kernel on there&lt;br /&gt;
&lt;br /&gt;
 cp uImage /mnt/moko/boot/&lt;br /&gt;
&lt;br /&gt;
If you are building OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After building a new image by issuing ''bitbake openmoko-devel-image'' there will be a ''OpenMoko-....tar'' in the deploy directory. Copy it on the SD card by doing&lt;br /&gt;
&lt;br /&gt;
 mount /dev/sda1 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar&lt;br /&gt;
&lt;br /&gt;
In OM-2007.2 the last built kernel gets a special soft-link. Therefore you can copy it by doing:&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/moko/boot/uImage&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Add uboot boot entry ===&lt;br /&gt;
&lt;br /&gt;
On my Phase-1 Neo the boot menu entry existed already. If yours is missing it follow those instructions: Start uboot in bootmenu mode (= hold AUX while powering on) and add the following entry via serial console: (See  [[Bootloader]] section on how to access an bootloader).&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_4 Boot from SD: setenv bootargs root=/dev/mmcblk0p1 rootdelay=5 console=ttySAC0,115200 console=tty0 loglevel=8 \${mtdparts}\; mmcinit\; ext2load mmc 0 0x32000000 /boot/\${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # setenv sd_image_name uImage&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
You can now easily boot a different kernel by changing the variable sd_image_name to the new name.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Boot into the new system ===&lt;br /&gt;
&lt;br /&gt;
Power off your device, insert the SD card and boot into the boot menu. You should have an entry called &amp;quot;Boot from SD&amp;quot; which does exactly that. :-)&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2007-08-13T18:42:31Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: add instructions to compile in ext2 fs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps described to boot your system from an SD card.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Build your kernel ===&lt;br /&gt;
&lt;br /&gt;
Kernel building is supposed to be done through OpenEmbedded. If you use the MokoMakefile open up $OMDIR/openmoko/trunk/oe/packages/linux/linux-gta01/defconfig-2.6.21.6-fic-gta01. If you are building OM-2007.2 open $OEDIR/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01. (''Note that the kernel version may change in future versions.'')&lt;br /&gt;
&lt;br /&gt;
Now find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=y&lt;br /&gt;
&lt;br /&gt;
If you want to use an ext2 file system on the SD, also find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=y&lt;br /&gt;
&lt;br /&gt;
Thats it. Now rebuild the kernel.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Populate SD card ===&lt;br /&gt;
&lt;br /&gt;
Format partition 1 as ext3 (ext2 will not boot). Mount your SD card somewhere and put your image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/sda1 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xvzf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
Now we also want the kernel on there&lt;br /&gt;
&lt;br /&gt;
 cp uImage /mnt/moko/boot/&lt;br /&gt;
&lt;br /&gt;
If you are building OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After building a new image by issuing ''bitbake openmoko-devel-image'' there will be a ''OpenMoko-....tar'' in the deploy directory. Copy it on the SD card by doing&lt;br /&gt;
&lt;br /&gt;
 mount /dev/sda1 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar&lt;br /&gt;
&lt;br /&gt;
In OM-2007.2 the last built kernel gets a special soft-link. Therefore you can copy it by doing:&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/moko/boot/uImage&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Add uboot boot entry ===&lt;br /&gt;
&lt;br /&gt;
On my Phase-1 Neo the boot menu entry existed already. If yours is missing it follow those instructions: Start uboot in bootmenu mode (= hold AUX while powering on) and add the following entry via serial console: (See  [[Bootloader]] section on how to access an bootloader).&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_4 Boot from SD: setenv bootargs root=/dev/mmcblk0p1 rootdelay=5 console=ttySAC0,115200 console=tty0 loglevel=8 \${mtdparts}\; mmcinit\; ext2load mmc 0 0x32000000 /boot/\${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # setenv sd_image_name uImage&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
You can now easily boot a different kernel by changing the variable sd_image_name to the new name.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Boot into the new system ===&lt;br /&gt;
&lt;br /&gt;
Power off your device, insert the SD card and boot into the boot menu. You should have an entry called &amp;quot;Boot from SD&amp;quot; which does exactly that. :-)&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Hammerhead/Protocol</id>
		<title>Talk:Hammerhead/Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Hammerhead/Protocol"/>
				<updated>2007-06-22T19:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um... Pavel, maybe I'm missing something here, but I think what you're calling &amp;quot;received packet 00&amp;quot; is what I'm calling packet 10.  Are you saying that the high nibble of the packet type doesn't matter?  Because I can't see any particular connection between these packets and the type 00 packets that gltt sends.  Likewise what you're calling packet 03 has a type byte of 23, and 0D has a type byte of 9D.  (I'm pretty sure that the high nibble is important.  For another example, look at packet type 0E versus 9E.) [[User:FloppusMaximus|FM]] 23:24, 6 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Since you never answered, I fixed the headings.  I don't have much time to work on this at the moment, so that's basically all I did.  Also I'm not sure what you're talking about w.r.t packet 06 (/16?) so I left that alone.  If you disagree with my analysis, that's fine, and please say so. [[User:FloppusMaximus|FM]] 13:32, 17 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
I also think the high nibble of the packet type is important. 0E seems to be an answer to the 00 packet when a satellite is locked, whereas 9E is one of the possible answers (9D,9E,9F) to the 05 packet. I have started to analyze the cold start trace at [http://linuxtogo.org/~ph5/tmp/gllin/cold2.log.gz], there are some statistics about the 00 packet at [http://linuxtogo.org/~ph5/tmp/gllin/cold2-cmd00-stat.txt] and a closer look on the sequence of events on a single channel (ch 1) [http://linuxtogo.org/~ph5/tmp/gllin/cold2-ch01.txt]. I used a shell script [http://linuxtogo.org/~ph5/tmp/gllin/decode.sh] to filter the serial communication out of the strace output. [[User:PH5|PH5]] 16:19, 17 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Except for the flags, the packet format is now mostly understood [http://projects.linuxtogo.org/plugins/scmsvn/viewcvs.php/doc/?root=sphyrna]. The 'packet type' is really an initial register offset, every channel has its own set of registers, and the 0x2 flag seems to switch to a completely different register bank. [[User:PH5|PH5]] 20:58, 22 June 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hammerhead/Protocol</id>
		<title>Hammerhead/Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hammerhead/Protocol"/>
				<updated>2007-06-22T18:57:23Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: add link to sphyrna&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We have set up a SCM repository for experimental code and documentation at http://projects.linuxtogo.org/projects/sphyrna.&lt;br /&gt;
&lt;br /&gt;
Christian did some stracing on TomTom device, and result is great logs at http://www.maintech.de/download/hammerhead-strace.log . 'pH5' on IRC has put up some traces at http://linuxtogo.org/~ph5/tmp/gllin (a cold start, a hot start and a somewhat longer trace). He even has a software that can init and send command to phase-1 openmoko device in http://linuxtogo.org/~ph5/tmp/hhtest.c . (Please use strace -s9999 -x to produce traces).&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/GPS_signals GPS signals at wikipedia] seems to be required reading for very basics, along with  [http://www.colorado.edu/geography/gcraft/notes/gps/gps.html this page from University of Colorado] for more in depth stuff.&lt;br /&gt;
&lt;br /&gt;
http://home.earthlink.net/~cwkelley/ has sources for open-source GPS receiver, and &lt;br /&gt;
http://home.earthlink.net/~cwkelley/documentation.htm is its documentation.&lt;br /&gt;
&lt;br /&gt;
GP2021 is &amp;quot;dumb&amp;quot; GPS receiver, similar to hammerhead. (But I think it communicates over ISA bus, not over serial). However, its data sheets are freely available. Well, hammerhead marketing tells us that their GPS chip is something special, http://www.gpsworld.com/gpsworld/article/articleDetail.jsp?id=3053 . It seems to differ from &amp;quot;dumb&amp;quot; receivers by doing code phase search in hardware, directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible lock scheme that it may use ==&lt;br /&gt;
&lt;br /&gt;
From reading the published brief information sheets on global locates products, not the patents.&lt;br /&gt;
The global locate chip has massively parallel correlators, and configurable integrators to integrate over a given time.&lt;br /&gt;
I would expect it to do something like - in this case.&lt;br /&gt;
*Load orbit data from file.&lt;br /&gt;
*Look at time.&lt;br /&gt;
*Compute which satellites are up.&lt;br /&gt;
*Init the GPS.&lt;br /&gt;
*Set the hardware to expect to receive from the  set of visible satellites (the hardware is unlikely to be designed to receive them all at once, as you'll never see more than around 12 of the nominal 24).&lt;br /&gt;
*Set the integration time at 10ms-20ms or so - around, or a bit under a data bit.&lt;br /&gt;
*Now, read back the outputs of the integrators, to see if we've got possible data.&lt;br /&gt;
*If we do have data, spend a bit of time working out the exact relative phase of the PRN with regard to the carrier - each 'chip' of the PRN is around a thousand cycles of the carrier - you need to work this out exactly to get psuedoranges with a resolution of under a meter.&lt;br /&gt;
**it's possible this is done in hardware&lt;br /&gt;
*Now that we've got all the satellites locked in the hardware, simply interrogate the hardware regularly, so that we can read out the 50bps datastream from each satellite.&lt;br /&gt;
**It seems this step takes 19s or so. From the first timestamp in the file, to the first GPGSV line - satellites in view, and their actual signal strengths.&lt;br /&gt;
*Read the navigation messages from each satellite, which cycles every 6 seconds.&lt;br /&gt;
*Compute a position.&lt;br /&gt;
*Output it to NMEA&lt;br /&gt;
** It seems this takes 22 seconds.&lt;br /&gt;
&lt;br /&gt;
== Enhancements ==&lt;br /&gt;
&lt;br /&gt;
To keep to the datasheet of 1s position times, it cannot read the whole navigation message, but significantly under 50 bits of it.&lt;br /&gt;
It must:&lt;br /&gt;
*Use 'AGPS' data to initialise the hardware to a condition where it can get a rapid lock - perhaps telling it the Doppler - then compute what the navigation message from each satellite may be, based on the internal clock.&lt;br /&gt;
*Work out at what point in this navigation message the 20-30 bits that it's received come. &lt;br /&gt;
*Compute the time that was in the navigation message, though it may not have picked it up (from the internal clock) and add it to the information on where the bit edges are from the hardware.&lt;br /&gt;
**If the uncertainty in relative time - due to local clock drift and movement of the GPS device - is under 10ms, then you know immediately as you detect the satellite signal the current satellite time - you simply snap the time to the nearest bit-edge, letting you immediately compute a position, without waiting for more data.&lt;br /&gt;
***With typical crystal accuracy, this implies you need to take a position every 3 minutes or so in order to keep the clock set correctly enough for this to work.&lt;br /&gt;
**This gives you a psuedorange to the satellite to within several meters. &lt;br /&gt;
*Compute a position.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
Looks like there were 8 satellites overhead at the time that log was made.&lt;br /&gt;
&lt;br /&gt;
The protocol appears to be oriented around 32-bit words (the single-byte markers notwithstanding.) LSB-first, as can be seen on negative numbers.&lt;br /&gt;
&lt;br /&gt;
The first stream of 0x80's to the GPS is simply to synch up the UART in the GPS to the correct baudrate.&lt;br /&gt;
&lt;br /&gt;
=== Packet format ===&lt;br /&gt;
Packet format (same format in both directions):&lt;br /&gt;
* The start of a packet is marked by FF or FE.&lt;br /&gt;
** FF in packets that do not carry data, but rather explicitly request a response.  (This isn't used very often.  More often we receive data without explicitly requesting it.)  The response will be an FE-packet with the same length and type as the FF-packet.  The GPS does not send any FF packets, only gltt does.&lt;br /&gt;
** FE in packets that carry data sections.&lt;br /&gt;
* The first word (32 bits) following the start-of-packet marker is the header.&lt;br /&gt;
** The first byte (if it's indeed little-endian, the least significant byte) gives the data length, measured as ''the number of data words minus 1.''  For FE-packets, this is the length of the data section of this packet.  For FF-packets, it's the length of the data section in the expected response.&lt;br /&gt;
** The second byte of the header is always FD.&lt;br /&gt;
** MS nibble of the third byte might be flags for the packet.&lt;br /&gt;
*** 0x4 set: The words are for increasing register numbers&lt;br /&gt;
*** 0x4 not set: The words are for/from the same register. The register is probably something like a FIFO&lt;br /&gt;
** LS nibble of the third byte is an identifying number of the channel (1-8), 0 in case this is not channel-specific&lt;br /&gt;
** The fourth byte is the packet type. It seems to be more like a register (start) number.&lt;br /&gt;
* In FE-packets only, the data section (''n'' 32-bit words) follows.&lt;br /&gt;
* Finally, FC is sent to mark the end of the packet.&lt;br /&gt;
* After the FC in an FF-packet, gltt sends a bunch of zeros.  In some cases it sends a number of zeros equal to the number of bytes in the response packet; in some cases it sends more.  I would guess that these have no effect.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 ff 04fdc00c fc&lt;br /&gt;
(possibly followed by zeros), is a request for a packet of type 0C, with length 20d ((4 + 1) * 4), and flags C0.&lt;br /&gt;
&lt;br /&gt;
 fe 04fdc00c 0025102a 45dbdd4e 36030000 4b260000 16010000 fc&lt;br /&gt;
would be an appropriate response.&lt;br /&gt;
&lt;br /&gt;
=== Packet statistics ===&lt;br /&gt;
Packet types:&lt;br /&gt;
&lt;br /&gt;
(Ugh, I do not understand this. Is it SEND or RECEIVED packets? [[User:Pavel|Pavel]] 22:26, 6 May 2007 (CEST))&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Frequency || Type || Max length || Min length&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 16 || 73 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 86 || 08 || 19 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 8 || e2 || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 23 || 133 || 101&lt;br /&gt;
|-&lt;br /&gt;
| 63 || 0a || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 24 || 71 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 52 || 0b || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 01 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 263 || 05 || 19 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 9d || 315 || 19&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 06 || 25 || 19&lt;br /&gt;
|-&lt;br /&gt;
| 16 || e0 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 20 || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 10 || 577 || 59&lt;br /&gt;
|-&lt;br /&gt;
| 128 || 18 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 9e || 303 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 117 || 00 || 65 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0c || 33 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 9f || 477 || 61&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0e || 541 || 31&lt;br /&gt;
|-&lt;br /&gt;
| 1 || e5 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 80 || 17 || 17&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 04 || 23 || 23&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 02 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Global packets ===&lt;br /&gt;
&lt;br /&gt;
All packets in this category have the &amp;quot;channel&amp;quot; (or &amp;quot;ID&amp;quot;) field set to 0.&lt;br /&gt;
&lt;br /&gt;
==== SEND Packet 04 ====&lt;br /&gt;
&lt;br /&gt;
Flags = 4&lt;br /&gt;
&lt;br /&gt;
In cold2.log this packet comes only once at the start.&lt;br /&gt;
Part of this packet seems to setup the timestamp clock (see packet 16).&lt;br /&gt;
&lt;br /&gt;
Usual layout&lt;br /&gt;
 92 24 11 02  7b 39 8e 23  00 00 00 00  7b 39 8e 23&lt;br /&gt;
&lt;br /&gt;
Word 2 and 4 (both are 0x238e397b = 596523387) seem to control the timestamp clock. Multipliying this value by say 0.99 makes the timestamp clock run at 0.99 its normal speed. So this value is some sort of &amp;quot;frequency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== SEND Register/Packet 08 ====&lt;br /&gt;
&lt;br /&gt;
One 32 bit word bitmask&lt;br /&gt;
&lt;br /&gt;
* 0x4 resets the timestamp clock to 0. (putting a 0x4 will reset the clock. The bit is self-resetting to 0. This only works, if 0x2000 is set at the same time.&lt;br /&gt;
* 0x40: Unknown&lt;br /&gt;
* 0x2000 lets the timstamp clock (See 16) run. One can start and stop it using this bit.&lt;br /&gt;
* 0x4000 triggers a measurement on channels, that have been setup. This needs an edge, so you have to unset and then set this bit.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 0c ====&lt;br /&gt;
&lt;br /&gt;
Flags = 0&lt;br /&gt;
&lt;br /&gt;
Is global -- not about particular sattelite, probably fixed length and rare.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 16 ====&lt;br /&gt;
&lt;br /&gt;
Flags = 8;&lt;br /&gt;
Comes only after request for it.&lt;br /&gt;
&lt;br /&gt;
The chip seems to have an internal 1ms clock. This returns the counter for this clock.&lt;br /&gt;
&lt;br /&gt;
It seems, that the clock can be widely tuned (probably using divider or so): At least I saw 1000 ticks and 2000 ticks per second.&lt;br /&gt;
&lt;br /&gt;
CMD-04 and CMd-08 seem to be needed to init and start it.&lt;br /&gt;
&lt;br /&gt;
=== Satelite / channel specific packets ===&lt;br /&gt;
&lt;br /&gt;
==== SEND Packet 00 ====&lt;br /&gt;
&lt;br /&gt;
Packet type 00 (with the exception of the very first FE-packet in the log) appears to specify a particular satellite to track.  It also seems that this specifies the &amp;quot;ID&amp;quot; field (LS nibble of the third header byte) that will be used for future packets concerning this satellite.  (Non-satellite-specific packets have ID=0.)&lt;br /&gt;
&lt;br /&gt;
Bits 3-7 of the 11th byte of the packet -- third byte of the third data word -- are the satellite PRN number.  In this log only 8 satellites appear to be tracked (2, 4, 8, 10, 13, 23, 27, 29).  If I'm reading the GPGSV messages correctly, 24 should also be visible, but it doesn't appear gltt even attempts to track it.&lt;br /&gt;
&lt;br /&gt;
As for the rest of the packet... There's a lot that gets repeated, information common to all the satellites, at least initially.  When a batch of 8 of these packets gets sent, usually only the PRN and two other words differ among the 8.  So those two words contain whatever satellite-specific info is needed, it seems.  They both appear to be little-endian integers, one around -10^8 and one around 10^8.&lt;br /&gt;
&lt;br /&gt;
(Info needed to search for sattelite... doppler frequency range and phase range is useful).&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 10 ====&lt;br /&gt;
&lt;br /&gt;
Last four bytes are the little endian timestamp, in miliseconds. (Ok, it may actually be number of frames or something on that particular channel).&lt;br /&gt;
&lt;br /&gt;
Packet length is constant (always 16 bytes.)&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 23 ====&lt;br /&gt;
&lt;br /&gt;
It carries variable-length array of  16-bit integers... 6 to 32 entries were seen.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 06, 08 ====&lt;br /&gt;
&lt;br /&gt;
short packets, 06 has varying length, and both are rare.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9d ====&lt;br /&gt;
&lt;br /&gt;
Okay, so packets 10, 23 and 9d come in groups, for each sattelite, and they seem to contain enough info to compute position.  (9d seems to come later than the other two, perhaps only after sending a packet 08?)&lt;br /&gt;
&lt;br /&gt;
Packet 9d seems to contain 2 32-bit integers (second one is  signed), then 3, 0, 0 and flags (?) -- so the packet length is constant.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 0e ====&lt;br /&gt;
&lt;br /&gt;
Always appears to be 24 bytes.  Satellite-specific.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9e ====&lt;br /&gt;
&lt;br /&gt;
Always appears to be 8 bytes.  Satellite-specific.  First 4 bytes are a signed 32-bit integer.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9f ====&lt;br /&gt;
&lt;br /&gt;
Comes in variants of differing lengths: 20, 36, and 84-byte packets were seen.  Satellite-specific.&lt;br /&gt;
&lt;br /&gt;
== NMEA ==&lt;br /&gt;
&lt;br /&gt;
It is possible to translate NMEA messages into something readable using script from http://atrey.karlin.mff.cuni.cz/~pavel/outgoing/hhdecode , and using c decoder http://atrey.karlin.mff.cuni.cz/~pavel/outgoing/hh.c .&lt;br /&gt;
&lt;br /&gt;
NMEA description is available at http://www.gpsinformation.org/dale/nmea.htm .&lt;br /&gt;
&lt;br /&gt;
At this point:&lt;br /&gt;
&lt;br /&gt;
256   write(GPS, &amp;quot;\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc&amp;quot;, 10) = 10&lt;br /&gt;
256   write(GPS, &amp;quot;\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc&amp;quot;, 10) = 10&lt;br /&gt;
256 write(NMEA, &amp;quot;\x24\x47\x50\x47\x47\x41\x2c\x31\x35\x34\x31\x30\x34\x2e\x39\x35\x2c\x34\x39\x34\x38\x2e\x39\x35\x30\x33\x33\x39\x2c\x4e\x2c\x30\x30\x39\x35\x37\x2e\x39\x35\x35\x39\x37\x39\x2c\x45\x2c\x31\x2c\x30\x36\x2c\x35\x2e\x30\x2c\x32\x32\x30\x2e\x30\x2c\x4d\x2c\x2d\x30\x2e\x35\x38\x31\x30\x31\x34\x2c\x4d\x2c\x2d\x30\x2e\x31\x39\x30\x30\x31\x39\x30\x2c\x2a\x34\x30\x0d\x0a&amp;quot;, 91) = 91&lt;br /&gt;
256 write(NMEA, &amp;quot;$GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40&lt;br /&gt;
&amp;quot;, 91) = 91&lt;br /&gt;
&lt;br /&gt;
...6 satelitte GPS fix was obtained. (And yes, there's big read few lines before that in the log). &lt;br /&gt;
&lt;br /&gt;
GSA sentence looks interesting, too. It tells us satellites #02, #04, #08, #10, #13 and #27 were used at this point.&lt;br /&gt;
&lt;br /&gt;
256 write(NMEA, &amp;quot;\x24\x47\x50\x47\x53\x41\x2c\x41\x2c\x33\x2c\x30\x32\x2c\x30\x34\x2c\x30\x38\x2c\x31\x30\x2c\x31\x33\x2c\x32\x37\x2c\x2c\x2c\x2c\x2c\x2c\x2c\x36\x2e\x37\x2c\x33\x2e\x30\x2c\x36\x2e\x30\x2a\x33\x45\x0d\x0a&amp;quot;, 51) = 51&lt;br /&gt;
256 write(NMEA, &amp;quot;$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The whole log is&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GPGGA,154035.21,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6A&lt;br /&gt;
$GPRMC,154035.24,V,,,,,,,240407,,*1A&lt;br /&gt;
$GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36&lt;br /&gt;
$GPGGA,154035.61,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6E&lt;br /&gt;
$GPRMC,154035.63,V,,,,,,,240407,,*19&lt;br /&gt;
$GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36&lt;br /&gt;
$GPGGA,154038.24,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4B&lt;br /&gt;
$GPRMC,154038.29,V,,,,,,,240407,,*1A&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154038.54,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4C&lt;br /&gt;
$GPRMC,154038.56,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154042.72,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*46&lt;br /&gt;
$GPRMC,154042.74,V,,,,,,,240407,,*1F&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,24,08,59,192,33,10,46,302,33,02,33,244,34*7E&lt;br /&gt;
$GPGSV,3,2,09,04,18,206,33,13,42,076,25,29,11,271,29,24,243,352,*49&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36&lt;br /&gt;
$GPGGA,154043.67,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*43&lt;br /&gt;
$GPRMC,154043.69,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36&lt;br /&gt;
$GPGGA,154046.89,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*47&lt;br /&gt;
$GPRMC,154046.93,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154047.14,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*42&lt;br /&gt;
$GPRMC,154047.19,V,,,,,,,240407,,*11&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154050.07,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*47&lt;br /&gt;
$GPRMC,154050.10,V,,,,,,,240407,,*1E&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154050.45,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*41&lt;br /&gt;
$GPRMC,154050.47,V,,,,,,,240407,,*1C&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,24,08,59,192,26,10,46,302,25,13,42,076,16*78&lt;br /&gt;
$GPGSV,3,2,09,02,33,244,26,04,18,206,25,29,11,271,25,24,243,352,*44&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154053.35,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*45&lt;br /&gt;
$GPRMC,154053.37,V,,,,,,,240407,,*18&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154058.70,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*49&lt;br /&gt;
$GPRMC,154058.72,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E&lt;br /&gt;
$GPGGA,154058.97,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*40&lt;br /&gt;
$GPRMC,154058.98,V,,,,,,,240407,,*16&lt;br /&gt;
$GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E&lt;br /&gt;
$GPGGA,154059.38,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*44&lt;br /&gt;
$GPRMC,154059.40,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,13,,,,,,,,,,,669.0,300.0,600.0*3C&lt;br /&gt;
$GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40&lt;br /&gt;
$GPRMC,154104.95,A,4948.950339,N,00957.955979,E,000.0,000.0,240407,,*3E&lt;br /&gt;
$GPGSV,3,1,09,08,59,192,42,10,46,302,42,04,18,206,41,27,77,114,16*74&lt;br /&gt;
$GPGSV,3,2,09,13,42,076,18,02,33,244,18,29,11,271,40,24,243,352,*48&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,3,04,08,10,,,,,,,,,,11.2,5.0,10.0*39&lt;br /&gt;
$GPGGA,154106.52,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.581025,M,-0.1900190,*4A&lt;br /&gt;
$GPRMC,154111.60,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154122.94,,,,,00,06,3.0,,M,-0.581010,M,-0.1900190,*62&lt;br /&gt;
$GPRMC,154122.96,V,,,,,,,240407,,*14&lt;br /&gt;
$GPGSA,A,1,13,,,,,,,,,,,,6.7,3.0,6.0*36&lt;br /&gt;
$GPGGA,154119.10,4948.936977,N,00957.930742,E,1,05,3.0,245.0,M,-0.576004,M,-0.1870190,*4D&lt;br /&gt;
$GPRMC,154119.10,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3A&lt;br /&gt;
$GPGSA,A,3,04,08,10,27,,,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154128.15,4948.936977,N,00957.930742,E,1,06,5.0,245.0,M,-0.587003,M,-0.1860190,*47&lt;br /&gt;
$GPRMC,154128.15,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3D&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,22,08,59,192,39,10,46,302,39,02,33,244,40*7B&lt;br /&gt;
$GPGSV,3,2,09,04,18,206,38,13,42,076,11,24,243,352,,23,14,085,*48&lt;br /&gt;
$GPGSV,3,3,09,29,11,271,*4F&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,11.2,5.0,10.0*3E&lt;br /&gt;
$GPGGA,154131.86,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578004,M,-0.1860190,*44&lt;br /&gt;
$GPRMC,154131.86,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3F&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154138.55,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578000,M,-0.1860190,*47&lt;br /&gt;
$GPRMC,154138.55,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*38&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154141.69,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.583002,M,-0.1840190,*42&lt;br /&gt;
$GPRMC,154141.69,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*39&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154146.16,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.595000,M,-0.1830190,*4F&lt;br /&gt;
$GPRMC,154146.16,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*36&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154151.34,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*4D&lt;br /&gt;
$GPRMC,154151.34,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*30&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,26,08,59,192,42,10,46,302,41,13,42,076,25*7A&lt;br /&gt;
$GPGSV,3,2,09,02,33,244,42,04,18,206,37,29,11,271,37,24,243,352,*46&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154200.05,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*48&lt;br /&gt;
$GPRMC,154200.05,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35&lt;br /&gt;
$GPGSA,A,3,,,,,,,,,,,,,6.7,3.0,6.0*36&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hammerhead/Protocol</id>
		<title>Hammerhead/Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hammerhead/Protocol"/>
				<updated>2007-06-21T13:30:37Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: /* SEND Register/Packet 08 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Christian did some stracing on TomTom device, and result is great logs at http://www.maintech.de/download/hammerhead-strace.log . 'pH5' on IRC has put up some traces at http://linuxtogo.org/~ph5/tmp/gllin (a cold start, a hot start and a somewhat longer trace). He even has a software that can init and send command to phase-1 openmoko device in http://linuxtogo.org/~ph5/tmp/hhtest.c . (Plesae use strace -s9999 -x to produce traces).&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/GPS_signals GPS signals at wikipedia] seems to be required reading for very basics, along with  [http://www.colorado.edu/geography/gcraft/notes/gps/gps.html this page from University of Colorado] for more in depth stuff.&lt;br /&gt;
&lt;br /&gt;
http://home.earthlink.net/~cwkelley/ has sources for open-source GPS receiver, and &lt;br /&gt;
http://home.earthlink.net/~cwkelley/documentation.htm is its documentation.&lt;br /&gt;
&lt;br /&gt;
GP2021 is &amp;quot;dumb&amp;quot; GPS receiver, similar to hammerhead. (But I think it communicates over ISA bus, not over serial). However, its data sheets are freely available. Well, hammerhead marketing tells us that their GPS chip is something special, http://www.gpsworld.com/gpsworld/article/articleDetail.jsp?id=3053 . It seems to differ from &amp;quot;dumb&amp;quot; receivers by doing code phase search in hardware, directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible lock scheme that it may use ==&lt;br /&gt;
&lt;br /&gt;
From reading the published brief information sheets on global locates products, not the patents.&lt;br /&gt;
The global locate chip has massively parallel correlators, and configurable integrators to integrate over a given time.&lt;br /&gt;
I would expect it to do something like - in this case.&lt;br /&gt;
*Load orbit data from file.&lt;br /&gt;
*Look at time.&lt;br /&gt;
*Compute which satellites are up.&lt;br /&gt;
*Init the GPS.&lt;br /&gt;
*Set the hardware to expect to receive from the  set of visible satellites (the hardware is unlikely to be designed to receive them all at once, as you'll never see more than around 12 of the nominal 24).&lt;br /&gt;
*Set the integration time at 10ms-20ms or so - around, or a bit under a data bit.&lt;br /&gt;
*Now, read back the outputs of the integrators, to see if we've got possible data.&lt;br /&gt;
*If we do have data, spend a bit of time working out the exact relative phase of the PRN with regard to the carrier - each 'chip' of the PRN is around a thousand cycles of the carrier - you need to work this out exactly to get psuedoranges with a resolution of under a meter.&lt;br /&gt;
**it's possible this is done in hardware&lt;br /&gt;
*Now that we've got all the satellites locked in the hardware, simply interrogate the hardware regularly, so that we can read out the 50bps datastream from each satellite.&lt;br /&gt;
**It seems this step takes 19s or so. From the first timestamp in the file, to the first GPGSV line - satellites in view, and their actual signal strengths.&lt;br /&gt;
*Read the navigation messages from each satellite, which cycles every 6 seconds.&lt;br /&gt;
*Compute a position.&lt;br /&gt;
*Output it to NMEA&lt;br /&gt;
** It seems this takes 22 seconds.&lt;br /&gt;
&lt;br /&gt;
== Enhancements ==&lt;br /&gt;
&lt;br /&gt;
To keep to the datasheet of 1s position times, it cannot read the whole navigation message, but significantly under 50 bits of it.&lt;br /&gt;
It must:&lt;br /&gt;
*Use 'AGPS' data to initialise the hardware to a condition where it can get a rapid lock - perhaps telling it the Doppler - then compute what the navigation message from each satellite may be, based on the internal clock.&lt;br /&gt;
*Work out at what point in this navigation message the 20-30 bits that it's received come. &lt;br /&gt;
*Compute the time that was in the navigation message, though it may not have picked it up (from the internal clock) and add it to the information on where the bit edges are from the hardware.&lt;br /&gt;
**If the uncertainty in relative time - due to local clock drift and movement of the GPS device - is under 10ms, then you know immediately as you detect the satellite signal the current satellite time - you simply snap the time to the nearest bit-edge, letting you immediately compute a position, without waiting for more data.&lt;br /&gt;
***With typical crystal accuracy, this implies you need to take a position every 3 minutes or so in order to keep the clock set correctly enough for this to work.&lt;br /&gt;
**This gives you a psuedorange to the satellite to within several meters. &lt;br /&gt;
*Compute a position.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
Looks like there were 8 satellites overhead at the time that log was made.&lt;br /&gt;
&lt;br /&gt;
The protocol appears to be oriented around 32-bit words (the single-byte markers notwithstanding.) LSB-first, as can be seen on negative numbers.&lt;br /&gt;
&lt;br /&gt;
The first stream of 0x80's to the GPS is simply to synch up the UART in the GPS to the correct baudrate.&lt;br /&gt;
&lt;br /&gt;
=== Packet format ===&lt;br /&gt;
Packet format (same format in both directions):&lt;br /&gt;
* The start of a packet is marked by FF or FE.&lt;br /&gt;
** FF in packets that do not carry data, but rather explicitly request a response.  (This isn't used very often.  More often we receive data without explicitly requesting it.)  The response will be an FE-packet with the same length and type as the FF-packet.  The GPS does not send any FF packets, only gltt does.&lt;br /&gt;
** FE in packets that carry data sections.&lt;br /&gt;
* The first word (32 bits) following the start-of-packet marker is the header.&lt;br /&gt;
** The first byte (if it's indeed little-endian, the least significant byte) gives the data length, measured as ''the number of data words minus 1.''  For FE-packets, this is the length of the data section of this packet.  For FF-packets, it's the length of the data section in the expected response.&lt;br /&gt;
** The second byte of the header is always FD.&lt;br /&gt;
** MS nibble of the third byte might be flags for the packet.&lt;br /&gt;
*** 0x4 set: The words are for increasing register numbers&lt;br /&gt;
*** 0x4 not set: The words are for/from the same register. The register is probably something like a FIFO&lt;br /&gt;
** LS nibble of the third byte is an identifying number of the channel (1-8), 0 in case this is not channel-specific&lt;br /&gt;
** The fourth byte is the packet type. It seems to be more like a register (start) number.&lt;br /&gt;
* In FE-packets only, the data section (''n'' 32-bit words) follows.&lt;br /&gt;
* Finally, FC is sent to mark the end of the packet.&lt;br /&gt;
* After the FC in an FF-packet, gltt sends a bunch of zeros.  In some cases it sends a number of zeros equal to the number of bytes in the response packet; in some cases it sends more.  I would guess that these have no effect.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 ff 04fdc00c fc&lt;br /&gt;
(possibly followed by zeros), is a request for a packet of type 0C, with length 20d ((4 + 1) * 4), and flags C0.&lt;br /&gt;
&lt;br /&gt;
 fe 04fdc00c 0025102a 45dbdd4e 36030000 4b260000 16010000 fc&lt;br /&gt;
would be an appropriate response.&lt;br /&gt;
&lt;br /&gt;
=== Packet statistics ===&lt;br /&gt;
Packet types:&lt;br /&gt;
&lt;br /&gt;
(Ugh, I do not understand this. Is it SEND or RECEIVED packets? [[User:Pavel|Pavel]] 22:26, 6 May 2007 (CEST))&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Frequency || Type || Max length || Min length&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 16 || 73 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 86 || 08 || 19 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 8 || e2 || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 23 || 133 || 101&lt;br /&gt;
|-&lt;br /&gt;
| 63 || 0a || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 24 || 71 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 52 || 0b || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 01 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 263 || 05 || 19 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 9d || 315 || 19&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 06 || 25 || 19&lt;br /&gt;
|-&lt;br /&gt;
| 16 || e0 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 20 || 15 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 10 || 577 || 59&lt;br /&gt;
|-&lt;br /&gt;
| 128 || 18 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 9e || 303 || 15&lt;br /&gt;
|-&lt;br /&gt;
| 117 || 00 || 65 || 39&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0c || 33 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 9f || 477 || 61&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0e || 541 || 31&lt;br /&gt;
|-&lt;br /&gt;
| 1 || e5 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 80 || 17 || 17&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 04 || 23 || 23&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 02 || 11 || 11&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Global packets ===&lt;br /&gt;
&lt;br /&gt;
All packets in this category have the &amp;quot;channel&amp;quot; (or &amp;quot;ID&amp;quot;) field set to 0.&lt;br /&gt;
&lt;br /&gt;
==== SEND Packet 04 ====&lt;br /&gt;
&lt;br /&gt;
Flags = 4&lt;br /&gt;
&lt;br /&gt;
In cold2.log this packet comes only once at the start.&lt;br /&gt;
Part of this packet seems to setup the timestamp clock (see packet 16).&lt;br /&gt;
&lt;br /&gt;
Usual layout&lt;br /&gt;
 92 24 11 02  7b 39 8e 23  00 00 00 00  7b 39 8e 23&lt;br /&gt;
&lt;br /&gt;
Word 2 and 4 (both are 0x238e397b = 596523387) seem to control the timestamp clock. Multipliying this value by say 0.99 makes the timestamp clock run at 0.99 its normal speed. So this value is some sort of &amp;quot;frequency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== SEND Register/Packet 08 ====&lt;br /&gt;
&lt;br /&gt;
One 32 bit word bitmask&lt;br /&gt;
&lt;br /&gt;
* 0x2000 lets the timstamp clock (See 16) run. One can start and stop it using this bit.&lt;br /&gt;
* 0x4 resets the timestamp clock to 0. (putting a 0x4 will reset the clock. The bit is self-resetting to 0. This only works, if 0x2000 is set at the same time.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 0c ====&lt;br /&gt;
&lt;br /&gt;
Flags = 0&lt;br /&gt;
&lt;br /&gt;
Is global -- not about particular sattelite, probably fixed length and rare.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 16 ====&lt;br /&gt;
&lt;br /&gt;
Flags = 8;&lt;br /&gt;
Comes only after request for it.&lt;br /&gt;
&lt;br /&gt;
The chip seems to have an internal 1ms clock. This returns the counter for this clock.&lt;br /&gt;
&lt;br /&gt;
It seems, that the clock can be widely tuned (probably using divider or so): At least I saw 1000 ticks and 2000 ticks per second.&lt;br /&gt;
&lt;br /&gt;
CMD-04 and CMd-08 seem to be needed to init and start it.&lt;br /&gt;
&lt;br /&gt;
=== Satelite / channel specific packets ===&lt;br /&gt;
&lt;br /&gt;
==== SEND Packet 00 ====&lt;br /&gt;
&lt;br /&gt;
Packet type 00 (with the exception of the very first FE-packet in the log) appears to specify a particular satellite to track.  It also seems that this specifies the &amp;quot;ID&amp;quot; field (LS nibble of the third header byte) that will be used for future packets concerning this satellite.  (Non-satellite-specific packets have ID=0.)&lt;br /&gt;
&lt;br /&gt;
Bits 3-7 of the 11th byte of the packet -- third byte of the third data word -- are the satellite PRN number.  In this log only 8 satellites appear to be tracked (2, 4, 8, 10, 13, 23, 27, 29).  If I'm reading the GPGSV messages correctly, 24 should also be visible, but it doesn't appear gltt even attempts to track it.&lt;br /&gt;
&lt;br /&gt;
As for the rest of the packet... There's a lot that gets repeated, information common to all the satellites, at least initially.  When a batch of 8 of these packets gets sent, usually only the PRN and two other words differ among the 8.  So those two words contain whatever satellite-specific info is needed, it seems.  They both appear to be little-endian integers, one around -10^8 and one around 10^8.&lt;br /&gt;
&lt;br /&gt;
(Info needed to search for sattelite... doppler frequency range and phase range is useful).&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 10 ====&lt;br /&gt;
&lt;br /&gt;
Last four bytes are the little endian timestamp, in miliseconds. (Ok, it may actually be number of frames or something on that particular channel).&lt;br /&gt;
&lt;br /&gt;
Packet length is constant (always 16 bytes.)&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 23 ====&lt;br /&gt;
&lt;br /&gt;
It carries variable-length array of  16-bit integers... 6 to 32 entries were seen.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 06, 08 ====&lt;br /&gt;
&lt;br /&gt;
short packets, 06 has varying length, and both are rare.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9d ====&lt;br /&gt;
&lt;br /&gt;
Okay, so packets 10, 23 and 9d come in groups, for each sattelite, and they seem to contain enough info to compute position.  (9d seems to come later than the other two, perhaps only after sending a packet 08?)&lt;br /&gt;
&lt;br /&gt;
Packet 9d seems to contain 2 32-bit integers (second one is  signed), then 3, 0, 0 and flags (?) -- so the packet length is constant.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 0e ====&lt;br /&gt;
&lt;br /&gt;
Always appears to be 24 bytes.  Satellite-specific.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9e ====&lt;br /&gt;
&lt;br /&gt;
Always appears to be 8 bytes.  Satellite-specific.  First 4 bytes are a signed 32-bit integer.&lt;br /&gt;
&lt;br /&gt;
==== RECEIVED Packet 9f ====&lt;br /&gt;
&lt;br /&gt;
Comes in variants of differing lengths: 20, 36, and 84-byte packets were seen.  Satellite-specific.&lt;br /&gt;
&lt;br /&gt;
== NMEA ==&lt;br /&gt;
&lt;br /&gt;
It is possible to translate NMEA messages into something readable using script from http://atrey.karlin.mff.cuni.cz/~pavel/outgoing/hhdecode , and using c decoder http://atrey.karlin.mff.cuni.cz/~pavel/outgoing/hh.c .&lt;br /&gt;
&lt;br /&gt;
NMEA description is available at http://www.gpsinformation.org/dale/nmea.htm .&lt;br /&gt;
&lt;br /&gt;
At this point:&lt;br /&gt;
&lt;br /&gt;
256   write(GPS, &amp;quot;\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc&amp;quot;, 10) = 10&lt;br /&gt;
256   write(GPS, &amp;quot;\xfe\x00\xfd\x40\x08\x40\x60\x00\x00\xfc&amp;quot;, 10) = 10&lt;br /&gt;
256 write(NMEA, &amp;quot;\x24\x47\x50\x47\x47\x41\x2c\x31\x35\x34\x31\x30\x34\x2e\x39\x35\x2c\x34\x39\x34\x38\x2e\x39\x35\x30\x33\x33\x39\x2c\x4e\x2c\x30\x30\x39\x35\x37\x2e\x39\x35\x35\x39\x37\x39\x2c\x45\x2c\x31\x2c\x30\x36\x2c\x35\x2e\x30\x2c\x32\x32\x30\x2e\x30\x2c\x4d\x2c\x2d\x30\x2e\x35\x38\x31\x30\x31\x34\x2c\x4d\x2c\x2d\x30\x2e\x31\x39\x30\x30\x31\x39\x30\x2c\x2a\x34\x30\x0d\x0a&amp;quot;, 91) = 91&lt;br /&gt;
256 write(NMEA, &amp;quot;$GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40&lt;br /&gt;
&amp;quot;, 91) = 91&lt;br /&gt;
&lt;br /&gt;
...6 satelitte GPS fix was obtained. (And yes, there's big read few lines before that in the log). &lt;br /&gt;
&lt;br /&gt;
GSA sentence looks interesting, too. It tells us satellites #02, #04, #08, #10, #13 and #27 were used at this point.&lt;br /&gt;
&lt;br /&gt;
256 write(NMEA, &amp;quot;\x24\x47\x50\x47\x53\x41\x2c\x41\x2c\x33\x2c\x30\x32\x2c\x30\x34\x2c\x30\x38\x2c\x31\x30\x2c\x31\x33\x2c\x32\x37\x2c\x2c\x2c\x2c\x2c\x2c\x2c\x36\x2e\x37\x2c\x33\x2e\x30\x2c\x36\x2e\x30\x2a\x33\x45\x0d\x0a&amp;quot;, 51) = 51&lt;br /&gt;
256 write(NMEA, &amp;quot;$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The whole log is&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GPGGA,154035.21,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6A&lt;br /&gt;
$GPRMC,154035.24,V,,,,,,,240407,,*1A&lt;br /&gt;
$GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36&lt;br /&gt;
$GPGGA,154035.61,,,,,00,00,5.0,,M,-0.586099,M,-0.1700199,*6E&lt;br /&gt;
$GPRMC,154035.63,V,,,,,,,240407,,*19&lt;br /&gt;
$GPGSA,A,1,,,,,,,,,,,,,11.2,5.0,10.0*36&lt;br /&gt;
$GPGGA,154038.24,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4B&lt;br /&gt;
$GPRMC,154038.29,V,,,,,,,240407,,*1A&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154038.54,,,,,00,04,300.0,,M,-0.586099,M,0.0000199,*4C&lt;br /&gt;
$GPRMC,154038.56,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154042.72,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*46&lt;br /&gt;
$GPRMC,154042.74,V,,,,,,,240407,,*1F&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,24,08,59,192,33,10,46,302,33,02,33,244,34*7E&lt;br /&gt;
$GPGSV,3,2,09,04,18,206,33,13,42,076,25,29,11,271,29,24,243,352,*49&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36&lt;br /&gt;
$GPGGA,154043.67,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*43&lt;br /&gt;
$GPRMC,154043.69,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,27,,,,,,,,669.0,300.0,600.0*36&lt;br /&gt;
$GPGGA,154046.89,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*47&lt;br /&gt;
$GPRMC,154046.93,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154047.14,,,,,00,06,300.0,,M,-0.587100,M,0.0000199,*42&lt;br /&gt;
$GPRMC,154047.19,V,,,,,,,240407,,*11&lt;br /&gt;
$GPGSA,A,1,02,04,08,10,,,,,,,,,669.0,300.0,600.0*33&lt;br /&gt;
$GPGGA,154050.07,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*47&lt;br /&gt;
$GPRMC,154050.10,V,,,,,,,240407,,*1E&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154050.45,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*41&lt;br /&gt;
$GPRMC,154050.47,V,,,,,,,240407,,*1C&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,24,08,59,192,26,10,46,302,25,13,42,076,16*78&lt;br /&gt;
$GPGSV,3,2,09,02,33,244,26,04,18,206,25,29,11,271,25,24,243,352,*44&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154053.35,,,,,00,06,300.0,,M,-0.586100,M,0.0000199,*45&lt;br /&gt;
$GPRMC,154053.37,V,,,,,,,240407,,*18&lt;br /&gt;
$GPGSA,A,1,27,,,,,,,,,,,,669.0,300.0,600.0*39&lt;br /&gt;
$GPGGA,154058.70,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*49&lt;br /&gt;
$GPRMC,154058.72,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E&lt;br /&gt;
$GPGGA,154058.97,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*40&lt;br /&gt;
$GPRMC,154058.98,V,,,,,,,240407,,*16&lt;br /&gt;
$GPGSA,A,1,02,,,,,,,,,,,,669.0,300.0,600.0*3E&lt;br /&gt;
$GPGGA,154059.38,,,,,00,03,300.0,,M,-0.581014,M,0.0000199,*44&lt;br /&gt;
$GPRMC,154059.40,V,,,,,,,240407,,*12&lt;br /&gt;
$GPGSA,A,1,02,13,,,,,,,,,,,669.0,300.0,600.0*3C&lt;br /&gt;
$GPGGA,154104.95,4948.950339,N,00957.955979,E,1,06,5.0,220.0,M,-0.581014,M,-0.1900190,*40&lt;br /&gt;
$GPRMC,154104.95,A,4948.950339,N,00957.955979,E,000.0,000.0,240407,,*3E&lt;br /&gt;
$GPGSV,3,1,09,08,59,192,42,10,46,302,42,04,18,206,41,27,77,114,16*74&lt;br /&gt;
$GPGSV,3,2,09,13,42,076,18,02,33,244,18,29,11,271,40,24,243,352,*48&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,3,04,08,10,,,,,,,,,,11.2,5.0,10.0*39&lt;br /&gt;
$GPGGA,154106.52,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.581025,M,-0.1900190,*4A&lt;br /&gt;
$GPRMC,154111.60,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154122.94,,,,,00,06,3.0,,M,-0.581010,M,-0.1900190,*62&lt;br /&gt;
$GPRMC,154122.96,V,,,,,,,240407,,*14&lt;br /&gt;
$GPGSA,A,1,13,,,,,,,,,,,,6.7,3.0,6.0*36&lt;br /&gt;
$GPGGA,154119.10,4948.936977,N,00957.930742,E,1,05,3.0,245.0,M,-0.576004,M,-0.1870190,*4D&lt;br /&gt;
$GPRMC,154119.10,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3A&lt;br /&gt;
$GPGSA,A,3,04,08,10,27,,,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154128.15,4948.936977,N,00957.930742,E,1,06,5.0,245.0,M,-0.587003,M,-0.1860190,*47&lt;br /&gt;
$GPRMC,154128.15,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3D&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,22,08,59,192,39,10,46,302,39,02,33,244,40*7B&lt;br /&gt;
$GPGSV,3,2,09,04,18,206,38,13,42,076,11,24,243,352,,23,14,085,*48&lt;br /&gt;
$GPGSV,3,3,09,29,11,271,*4F&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,11.2,5.0,10.0*3E&lt;br /&gt;
$GPGGA,154131.86,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578004,M,-0.1860190,*44&lt;br /&gt;
$GPRMC,154131.86,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*3F&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154138.55,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.578000,M,-0.1860190,*47&lt;br /&gt;
$GPRMC,154138.55,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*38&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154141.69,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.583002,M,-0.1840190,*42&lt;br /&gt;
$GPRMC,154141.69,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*39&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154146.16,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.595000,M,-0.1830190,*4F&lt;br /&gt;
$GPRMC,154146.16,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*36&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,27,,,,,,,,6.7,3.0,6.0*3C&lt;br /&gt;
$GPGGA,154151.34,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*4D&lt;br /&gt;
$GPRMC,154151.34,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*30&lt;br /&gt;
$GPGSV,3,1,09,27,77,114,26,08,59,192,42,10,46,302,41,13,42,076,25*7A&lt;br /&gt;
$GPGSV,3,2,09,02,33,244,42,04,18,206,37,29,11,271,37,24,243,352,*46&lt;br /&gt;
$GPGSV,3,3,09,23,14,085,*49&lt;br /&gt;
$GPGSA,A,3,02,04,08,10,13,27,,,,,,,6.7,3.0,6.0*3E&lt;br /&gt;
$GPGGA,154200.05,4948.936977,N,00957.930742,E,1,06,3.0,245.0,M,-0.587002,M,-0.1860190,*48&lt;br /&gt;
$GPRMC,154200.05,A,4948.936977,N,00957.930742,E,000.0,000.0,240407,,*35&lt;br /&gt;
$GPGSA,A,3,,,,,,,,,,,,,6.7,3.0,6.0*36&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Hammerhead/Protocol</id>
		<title>Talk:Hammerhead/Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Hammerhead/Protocol"/>
				<updated>2007-05-17T14:19:36Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Um... Pavel, maybe I'm missing something here, but I think what you're calling &amp;quot;received packet 00&amp;quot; is what I'm calling packet 10.  Are you saying that the high nibble of the packet type doesn't matter?  Because I can't see any particular connection between these packets and the type 00 packets that gltt sends.  Likewise what you're calling packet 03 has a type byte of 23, and 0D has a type byte of 9D.  (I'm pretty sure that the high nibble is important.  For another example, look at packet type 0E versus 9E.) [[User:FloppusMaximus|FM]] 23:24, 6 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Since you never answered, I fixed the headings.  I don't have much time to work on this at the moment, so that's basically all I did.  Also I'm not sure what you're talking about w.r.t packet 06 (/16?) so I left that alone.  If you disagree with my analysis, that's fine, and please say so. [[User:FloppusMaximus|FM]] 13:32, 17 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
I also think the high nibble of the packet type is important. 0E seems to be an answer to the 00 packet when a satellite is locked, whereas 9E is one of the possible answers (9D,9E,9F) to the 05 packet. I have started to analyze the cold start trace at [http://linuxtogo.org/~ph5/tmp/gllin/cold2.log.gz], there are some statistics about the 00 packet at [http://linuxtogo.org/~ph5/tmp/gllin/cold2-cmd00-stat.txt] and a closer look on the sequence of events on a single channel (ch 1) [http://linuxtogo.org/~ph5/tmp/gllin/cold2-ch01.txt]. I used a shell script [http://linuxtogo.org/~ph5/tmp/gllin/decode.sh] to filter the serial communication out of the strace output. [[User:PH5|PH5]] 16:19, 17 May 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/UI_Improvements</id>
		<title>UI Improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/UI_Improvements"/>
				<updated>2007-04-02T13:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: multitouch on resistive touchscreen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
  Obviously the tools are in the wild to build interfaces that could rival&lt;br /&gt;
  (or better IMO) anything Apple comes up with. We just need to organize&lt;br /&gt;
  this stuff. This would need hardware that can support dynamic&lt;br /&gt;
  interfaces. I can help here, too.&lt;br /&gt;
  sean@openmoko.com&lt;br /&gt;
&lt;br /&gt;
==Finding inspiration ...==&lt;br /&gt;
&lt;br /&gt;
===Seen Live===&lt;br /&gt;
&lt;br /&gt;
*[http://www.youtube.com/watch?v=89sz8ExZndc Multi-Touchscreen experiments video @youtube]&lt;br /&gt;
*[http://www.youtube.com/watch?v=nPqqfVLQ_qY iPhone UI features demo @youtube]&lt;br /&gt;
&lt;br /&gt;
===Ergonomy - Human/Machine papers ===&lt;br /&gt;
&lt;br /&gt;
===Our weapons===&lt;br /&gt;
&lt;br /&gt;
====The touchscreen====&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What exactly does the touchscreen see when  you touch the screen with 2 fingers at the same time,&lt;br /&gt;
  when you move them, when you move only one of the 2, etc. I'm also interested in knowing how precise&lt;br /&gt;
  the touchscreen is (ex: refresh rate, possible pressure indication, ...)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* The output is the center of the bounding box of the touched area&lt;br /&gt;
* The touch point skips instantly on double touch&lt;br /&gt;
* Pressure has almost no effect on a single touch, but not so on a double touch. The relative pressures will cause a significant skewing effect towards the harder touch. You can easily move the pointer along the line between your two fingers by changing the relative pressure.&lt;br /&gt;
&lt;br /&gt;
Conclusions:&lt;br /&gt;
* we can detect double touch as jumps, and that's all&lt;br /&gt;
* no pressure&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What does one see when sliding two fingers in parallel up(L,R)-&amp;gt;down(L,R)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* In theory you see a slide along the center line between your two fingers. In practice, you can't keep the pressure equal, so you will see some kind of zig-zag line somewhere between the two pressure points in the direction of your slide.&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What does one see when narrowing two fingers in slide (=zoom effect on iphone)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* In theory you see the pointer stay at the center of the zoom movement. In practice, you can't keep the pressure equal for both fingers, so the pointer will move towards one of the two pressure points.&lt;br /&gt;
&lt;br /&gt;
====Graphics and computational capabilities====&lt;br /&gt;
&lt;br /&gt;
It would be good to report what performance the current hardware allows.&lt;br /&gt;
&lt;br /&gt;
==Areas of improvement==&lt;br /&gt;
&lt;br /&gt;
* OpenGL for fuild zooming interfaces (2D: the infinite sphere model, 1D: the infinite wheel of fortune/ribbon model, exposé)&lt;br /&gt;
* HandGestures&lt;br /&gt;
* Physics-model based improvements: inertia and friction&lt;br /&gt;
* multi touch screen for natural handgestures &lt;br /&gt;
&lt;br /&gt;
===Physics-inspired animation===&lt;br /&gt;
&lt;br /&gt;
If we want to add eye candy &amp;amp; useability to the UI (such as smooth realistic list scrolling, as seen in apple's&lt;br /&gt;
iphone demo on contacts lists), we'll need a physics engine, so that moves &amp;amp; animations aren't all linear.&lt;br /&gt;
&lt;br /&gt;
The most used technique for calculating trajectories and systems of related geometrical objects seems to be [http://en.wikipedia.org/wiki/Verlet_integration verlet integration] implementation; it is an alternative to Euler's integration method, using fast approximation. &lt;br /&gt;
&lt;br /&gt;
We may have no need for such a mathematical method at first, but perhaps there are other use cases. For instance, it may be useful to gesture recognition (i'm not aware if existing gesture recognition engines measure speed, acceleration...).&lt;br /&gt;
&lt;br /&gt;
====Libakamaru====&lt;br /&gt;
&lt;br /&gt;
The [http://people.freedesktop.org/~krh/akamaru.git/ akamaru library] is the code behind [http://www.youtube.com/watch?v=VekgyKQoTeM kiba dock]'s fun and dynamic behaviour. It's dependencies are light (needs just GLib). It takes elasticity, friction, gravity into account.&lt;br /&gt;
&lt;br /&gt;
If you want to take a quick look at the code:&lt;br /&gt;
svn co http://svn.kiba-dock.org/akamaru/ akamaru&lt;br /&gt;
&lt;br /&gt;
The only (AFAIK) application using this library is kiba-dock, a *fun* app launcher, but we may find another use to it in the future.&lt;br /&gt;
&lt;br /&gt;
As suggested on the mailing list, it is mostly overkill for the uses we intend to have, but this library may be optimized already, the API can spare some time for too. Furthermore, ''Qui peut le plus, peut le moins''.&lt;br /&gt;
&lt;br /&gt;
====Verlet integration implementation from e17====&lt;br /&gt;
&lt;br /&gt;
There's an undergoing verlet integration implementation into the e17 project (by rephorm) see http://rephorm.com/news/tag/physics , so we may see some UI physics integration into e17 someday.&lt;br /&gt;
&lt;br /&gt;
===OpenGL compositing===&lt;br /&gt;
&lt;br /&gt;
Compositing seems to give zooming interfaces reality (at last!).&lt;br /&gt;
&lt;br /&gt;
Well, considering recent changes in destkop applications, opengl has a&lt;br /&gt;
definite future. For instance, the expose (be it apple's or beryl's)&lt;br /&gt;
is a very interesting and usable feature. Using compositing allows the&lt;br /&gt;
physics metaphore: the human brain doesn't like &amp;quot;gaps&amp;quot;/jumps (for&lt;br /&gt;
instance while scrolling a text), it needs continuity. When you look&lt;br /&gt;
at apple's iphone prototype, it's not just eye candy, it's maybe the&lt;br /&gt;
most natural/human way of navigating, because it's sufficiently&lt;br /&gt;
realistic for the brain to forget the non-physical nature of what's&lt;br /&gt;
inside.&lt;br /&gt;
&lt;br /&gt;
So, opengl hardware will be needed in a more or less distant hardware,&lt;br /&gt;
for 100% fluid operation.&lt;br /&gt;
&lt;br /&gt;
And, if we really want deep changes, multi touch screen if essential&lt;br /&gt;
too :(  (example: zooming with fingers)...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Clutter Toolkit====&lt;br /&gt;
&lt;br /&gt;
Clutter, an openedhand project, is an open source software library for creating fast, visually rich graphical user interfaces. The most obvious example of potential usage is in media center type applications. We hope however it can be used for a lot more.&lt;br /&gt;
&lt;br /&gt;
http://clutter-project.org/&lt;br /&gt;
&lt;br /&gt;
Clutter uses OpenGL (and soon optionally '''OpenGL ES''') for rendering but with an API which hides the underlying GL complexity from the developer. The Clutter API is intended to be easy to use, efficient and flexible.&lt;br /&gt;
&lt;br /&gt;
From the [http://en.wikipedia.org/wiki/OpenGL_ES wikipedia article], OpenGL ES (OpenGL for Embedded Systems) is a subset of the OpenGL 3D graphics API designed for embedded devices such as mobile phones, PDAs, and video game consoles.&lt;br /&gt;
&lt;br /&gt;
==Improvement ideas==&lt;br /&gt;
&lt;br /&gt;
Please add here any idea that seems of relevance.&lt;br /&gt;
&lt;br /&gt;
===1D Scrolling: [http://en.wikipedia.org/wiki/Uniform_prism n-sided uniform prism]===&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
Take an item list (ex: adress book), print it on a ribbon of paper, and glue it on a wheel (on the tire). You're looking in the front of it, so when you want to go from the A to Z, you touch the wheel and drag it up. When you let the wheel go, it goes furter, taken by it's inertia. Stop the wheel when you got your contact. Got the idea? That's why we may speak of an &amp;quot;infinite wheel&amp;quot;, so that the surface is flat. For our case here, we always want to display square content, so the [http://en.wikipedia.org/wiki/Uniform_prism n-sided uniform prism] analogy is mathematically more exact.&lt;br /&gt;
&lt;br /&gt;
Why this wheel model? Because if the modelisation is coherent:&lt;br /&gt;
- '''weight''': the more heavy, the fastest it goes = the biggest the item list, the faster it scrolls; that way, you don't have to wait too long for big lists, and you don't miss your item on shorter lists&lt;br /&gt;
- '''friction''': there is friction where the wheel is fixed, so that the wheel doesn't turn infinitely&lt;br /&gt;
- the initial speed and acceleration vector you give it determines it's futher rotation&lt;br /&gt;
- it's &amp;quot;round&amp;quot;/cyclic, so you can browse the list in two directions&lt;br /&gt;
 &lt;br /&gt;
We can add &amp;quot;parallel wheels&amp;quot;, symbolizing different sorting methods. Slide long to the left / right to look at a different wheel = items organization.&lt;br /&gt;
&lt;br /&gt;
====Controls====&lt;br /&gt;
&lt;br /&gt;
* Sliding up/down = Single click + maintained for a minimal distance&lt;br /&gt;
Effect: scroll in an inverted/negated fashion (slide down = scroll up,&lt;br /&gt;
slide up = scroll down)&lt;br /&gt;
&lt;br /&gt;
When finger is released (i.e. touchscreen doesn't detect any press):&lt;br /&gt;
  if (last_speed_seen &amp;gt; value ) then keep this speed and&lt;br /&gt;
acceleration, with friction (so that it slows down)&lt;br /&gt;
  else stop scrolling&lt;br /&gt;
&lt;br /&gt;
Scrolling here is seen as unidimensional, but can apply to&lt;br /&gt;
bidimensional situations (ex: zoomed image) too&lt;br /&gt;
&lt;br /&gt;
* Action = quick double tap&lt;br /&gt;
&lt;br /&gt;
* Details/select = short single tap&lt;br /&gt;
&lt;br /&gt;
* Right click = long tap&lt;br /&gt;
&lt;br /&gt;
* Sliding left/right: switch sorting method&lt;br /&gt;
&lt;br /&gt;
====Parts to &amp;quot;hack&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
''Having a scroll that isn't a 1:1 map to the user's action isn't hard. It's just an extra calculation in the scroll code.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;---- Where is the scroll code? :)&lt;br /&gt;
&lt;br /&gt;
* libmokoui&lt;br /&gt;
* gtk&lt;br /&gt;
&lt;br /&gt;
I'm wondering what layer of openmoko has to be hacked, i.e. if working at openmoko layer allows enough possibilities for this; if i'm not mistaken, this is part of libmokoui, but i'm pretty afraid that patching gtk itself woud be needed. Working on the lower level would&lt;br /&gt;
apply changes to every application, not only openmoko's.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* remove the scrolling slider on finger mode&lt;br /&gt;
* make the entire list a &amp;quot;scrolling zone&amp;quot;, i.e. an overlay transparent scrolling slider&lt;br /&gt;
* define controls&lt;br /&gt;
&lt;br /&gt;
===1D Scrolling: inertia friction integration into openmoko's finger wheel=== &lt;br /&gt;
&lt;br /&gt;
The same, but for the wheel. It can be very short to do: you don't have 1:1 anymore, but, for example, 1/4 wheel turn = 1 item. It's demultiplicated, but has inertia.&lt;br /&gt;
&lt;br /&gt;
===2D Scrolling: the infinite sphere model / non-infinite polyhedron===&lt;br /&gt;
&lt;br /&gt;
The same model as the infinite wheel can apply to 2D navigation, except that your wheel becomes an infinite &amp;quot;floating sphere&amp;quot; for image/webpage navigation. &lt;br /&gt;
&lt;br /&gt;
Usages are:&lt;br /&gt;
* zoomed image&lt;br /&gt;
* zoomed internet webpage&lt;br /&gt;
* browsing maps&lt;br /&gt;
&lt;br /&gt;
===n-D navigation: the polyhedra inspiration===&lt;br /&gt;
&lt;br /&gt;
When we want to navigate files, mp3s in an mp3 player, etc... Every control that the application needs is a button. What about looking at the polyhedrons ?&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Polyhedra&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_uniform_polyhedra&lt;br /&gt;
&lt;br /&gt;
===Advanced/Natural handgesture recognition===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Gestures can be interesting, especially for &amp;quot;jumps&amp;quot; (when the cursor jumps from upper left corner to down right). Jump is different of sliding, and appears only with touchpads and touchscreeds; it can be detected as different from a button press if done fast enough (so you don't have to &amp;quot;aim&amp;quot; precisely).&lt;br /&gt;
&lt;br /&gt;
The interesting jumps are: &lt;br /&gt;
&lt;br /&gt;
* left &amp;lt;-&amp;gt; right&lt;br /&gt;
* middle up &amp;lt;-&amp;gt; middle down&lt;br /&gt;
* top left &amp;lt;-&amp;gt; down right&lt;br /&gt;
* down left &amp;lt;-&amp;gt; top right&lt;br /&gt;
&lt;br /&gt;
==Open questions==&lt;br /&gt;
&lt;br /&gt;
* will the neo/openmoko graphics system be powerful enough for such uses? I suspect apple to do opengl acceleration on this device,&lt;br /&gt;
which is waaaaay impossible for us for now&lt;br /&gt;
* how does the touchscreen behave? We need a detailed touchscreen wiki information page, with visual traces. How hardware-specific is it?&lt;br /&gt;
* without multitouch, is there really room for improvement?&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Parag0n</id>
		<title>User talk:Parag0n</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Parag0n"/>
				<updated>2007-03-18T08:29:04Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Parag0n, [http://www.flickr.com/photos/ph5/424014896/ this] is for you ;)&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Games</id>
		<title>Wishlist/Games</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Games"/>
				<updated>2007-03-18T08:25:37Z</updated>
		
		<summary type="html">&lt;p&gt;PH5: /* Candidates for porting/cross compiling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
=== Games on OpenMoko ===&lt;br /&gt;
&lt;br /&gt;
This is the page to centralize the suggestions for creating games on the OpenMoko device.&lt;br /&gt;
&lt;br /&gt;
===== Existing game concepts that could be realized =====&lt;br /&gt;
* Simple Flash games like [http://www.albinoblacksheep.com/flash/squares2.php  Squares2] are often very addicting and good for short playing sessions. Other examples: Bejewelled, Zoo Keeper, [http://novelconcepts.co.uk/FlashElementTD/ Flash Element TD ],  ... &lt;br /&gt;
* A classic shooter can work well with continous fire and touchscreen controls. An example is Kenta Cho's Java version of [http://www.asahi-net.or.jp/~cs8k-cyu/java/noiz2_e.html Noiz2]   &lt;br /&gt;
* Same is true for a 3D shooter with no/seldom used additional controls. For example a combat flying game like Hunt for the [http://www.smallrockets.com/pc/baron/ Red Baron]. You can control the speed with a slider, shoot rockets and drop bombs with special buttons but those are things you only need from time to time. Most of the time you are shooting continously and aiming which can be done in the corner of the touchscreen (so it doesn't obstruct your view). &lt;br /&gt;
* Osu! Tatakae! Ouendan/Elite Beat Agents - Rhythm-based touching of circles and paths on the screen is a great concept and shouldn't be that difficult to pull off if you leave out some of the great presentation.&lt;br /&gt;
* Pac Pix - The necessary shape-recognition would probably be difficult to manage with a small budget but the general idea is quite cool.&lt;br /&gt;
* Kirby Canvas Curse - Again, not easy to do with a small budget.&lt;br /&gt;
&lt;br /&gt;
===== Candidates for porting/cross compiling =====&lt;br /&gt;
* [http://www.openttd.com Transport Tycoon Deluxe]. Very possible, in fact the author of the Palm &amp;amp; GP2X ports of the game is already interested in OpenMoko.&lt;br /&gt;
* [http://www.aeonflame.com/ Gloop Zero] - A little like physics-based Lemmings. Get the liquid from one part of the level to another with tools like path-drawing, bombs, anti-gravity...&lt;br /&gt;
* [http://www.clickgamer.com/moreinfo.htm?pid=4188&amp;amp;section=PALM Plazmoids!] - A space game with screen-size levels. Move your ship around by touching where it should go. Collect the plazmoids (asteroids) by catching them in your elastic tractor beam (lots of simple physics again), shoot enemies with a button or double tap.&lt;br /&gt;
* [http://redshift.hu/ Legacy] (and successor The Quest) - Classic first person turn based RPG. Movement and menus can completely be controlled with the touchscreen.&lt;br /&gt;
* [http://www.warfareincorporated.com/ Warfare Inc.] - A full real time strategy game is no problem with a touchscreen. In fact, it's a lot of fun!&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Heroes_of_Might_and_Magic Heroes of Might and Magic] maybe can be port this [http://www.pocketheroes.net/ Pocket Heroes] for PocketPC&lt;br /&gt;
* Command &amp;amp; Conquer and Red Alert - [http://sourceforge.net/projects/freera/ FreeRA] or [http://freecnc.org/ FreeCNC]&lt;br /&gt;
* [http://www.fade-team.com/acedior.htm Acedior] - A classic graphic adventure game.&lt;br /&gt;
* Frozen Bubble&lt;br /&gt;
* GJeweled&lt;br /&gt;
* [http://www.bridgebuilder-game.com Bridge Builder]&lt;br /&gt;
* Pipe Dreams&lt;br /&gt;
* ScummVM&lt;br /&gt;
* [http://www.tucows.com/preview/9259 Gem Drop]&lt;br /&gt;
* that addictive Photo game where you have to spot the 5 differences in x seconds&lt;br /&gt;
* Checkers, Chess, Minesweeper (interesting touchscreen variation: [http://toyspring.com/3dm/ 3D Mines] by Toyspring, Solitaire, Mahjong, Connect Four, Tic-tac-toe, Black Jack&lt;br /&gt;
* Creating a Nethack port could be done. Tony said on the list: &amp;quot;I'm not entirely sure yet. I imagine I'll first do a text port with a &amp;quot;portal&amp;quot; view (in which you only see a part of the screen at a time), and a user-selected font size. Then I'd try a tiles-based port. It all depends on how readable the text is on the small screen.&amp;quot;&lt;br /&gt;
* [http://www.mame.net/ MAME] - Multiple Arcade Machine Emulator.  This versatile emulator turns a given platform into a powerful gaming system.  It has been ported to WinCE and many UNIX flavors as well.  It would be wonderul to have this on the OpenMoko.&lt;br /&gt;
* [http://gnome-sudoku.sourceforge.net/ Gnome Sudoku]&lt;br /&gt;
* [http://web.mit.edu/xiphmont/Public/gPlanarity.html gPlanarity] would be a nice stylus game.&lt;br /&gt;
* [http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ Simon Tatham's Portable Puzzle Collection] is GTK based and includes, among others, both Sudoku and Planarity style games called Solo and Untangle.&lt;br /&gt;
&lt;br /&gt;
===== General ideas about games on OpenMoko =====&lt;br /&gt;
* A easy network library for Bluetooth and/or GPRS connectivity.&lt;br /&gt;
* Every turn-based game should be possible with on screen buttons. &lt;br /&gt;
* Action games should need only one main control action most of the time such as moving somewhere on a 2D plane, aiming in 3D, drawing a path. Special items and actions are possible but should only be needed from time to time. There is no solution for first person shooter type games where you move and aim independently. &lt;br /&gt;
* The finger getting into the way of seeing what's going on is a problem. Most games would probably need a stylus. Games with first person aiming can be controlled with a thumb in one corner of the screen, however you'd probably need one of them thumbstraps they make for the DS so that your thumb glides over the screen with ease.&lt;br /&gt;
* GPS can be used for location based games. An example is [http://codeninja.de/tron/ Tron]. Links to location-based/Alternate Reality games in these [http://del.icio.us/tallpaul/games+street del.icio.us pages]&lt;br /&gt;
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.&lt;br /&gt;
* If version 2 of the hardware has an accelerometer a [http://www.rubylane.com/shops/molotov/item/SUN1769 tilt maze ball game] is possible.&lt;br /&gt;
&lt;br /&gt;
What is not possible without magic tricks / an external controller:&lt;br /&gt;
* Classic first person shooters, action adventures, jump 'n' runs&lt;br /&gt;
* Emulators for classic systems&lt;br /&gt;
* Network lip for easy Bluetooth and/or GPRS connections.&lt;br /&gt;
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.&lt;br /&gt;
* If version 2 of the hardware has an accelerometer a [http://www.rubylane.com/shops/molotov/item/SUN1769 tilt maze ball game] is possible.&lt;br /&gt;
&lt;br /&gt;
[[Category:Ideas]]&lt;/div&gt;</summary>
		<author><name>PH5</name></author>	</entry>

	</feed>