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

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-08-18T19:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components it introduces additional complexity.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the method call is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_method.png]]&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* number: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system or user default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work&lt;br /&gt;
# The first relevant extension returns the following values:&lt;br /&gt;
#* number: a string that contains the new number to dial (which may be the same as the input number to dial)&lt;br /&gt;
#* sendid: whether or not to send caller ID&lt;br /&gt;
#* status: a numeric result of the extension's work, which may be one of the following generic types:&lt;br /&gt;
#** Continue: continue with the existing operation&lt;br /&gt;
#** Handoff: the existing operation has been handed off to another application so no further action required&lt;br /&gt;
#** Error: an error has occurred with this item so further processing should be aborted&lt;br /&gt;
#* statusreason: additional text that can be displayed to explain the status result if required&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated number and sendid from the first relevant extension&lt;br /&gt;
# The second relevant extension returns the values as per the first extension&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should use the parameters returned rather than those it had prior to the call for the purposes of dialing a number and sending/not sending caller ID.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately&lt;br /&gt;
&lt;br /&gt;
=== Example of an Extension Registration ===&lt;br /&gt;
&lt;br /&gt;
Extensions must be registered with the extension manager so that the extension handler is aware of them and can incorporate them in to extension requests.  A pictorial representation of the registration process is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_registration.png]]&lt;br /&gt;
&lt;br /&gt;
# An extension sends a registration method to the extension manager.  The method contains the following information:&lt;br /&gt;
#* extension.  This is the full name of the method we wish to extend, for example org.openmoko.extension.Gsmd.OutgoingCall&lt;br /&gt;
#* name.  This is the name of the object that is carrying out the extension, for example net.devzero.SampleExtension&lt;br /&gt;
#* path.  This is the path to the object that is carrying out the extension, for example /net/devzero/SampleExtension&lt;br /&gt;
#* interface.  This is the interface for the object that is carrying out the extension, for example net.devzero.SampleExtension&lt;br /&gt;
#* method.  This is the method on the object that is carrying out the extension, for example GsmdOutgoingCall&lt;br /&gt;
# The extension manager logs the information in a central configuration store where it can be accesed by the extension handler&lt;br /&gt;
# The extension manager returns the call&lt;br /&gt;
&lt;br /&gt;
Once an extension has registered a method then it will be called by the extension handler whenever required.&lt;br /&gt;
&lt;br /&gt;
Unregistering an extension uses exactly the same methodology except that the method is Unregister rather than Register, all parameters stay the same.&lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
&lt;br /&gt;
There are a number of [[Wish List]] entries for which the extension framework could be used, these are as follows:&lt;br /&gt;
#[[Wish List#Mask ID based on dialed numbers|Mask outgoing caller ID based in dialed number]]&lt;br /&gt;
#[[Wish List#Use calling cards and similar routing techniques for lower-cost calling|Use calling cards and similar routing techniques for lower-cost calling]]&lt;br /&gt;
#[[Wish List#Outgoing black/white lists|Outgoing black/white lists]]&lt;br /&gt;
#[[Wish List#Time-based blocking/unblocking of calls|Time-based blocking/unblocking of calls]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-08-18T16:18:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: /* Developing with MokoMakefile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 12 GB of available disk space for MokoMakefile to succeed. Please check that your RAM + swap partition space is greater than 512 MB (around 1GB?).&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
There is an alpha version of the MokoMakefile available at http://svn.nslu2-linux.org/svnroot/mokomakefile/branches/OM-2007.2/Makefile which builds OM-2007.2 images.  You should only try this if you are an experienced MokoMakefile user.  If not, then please wait for the official OM-2007.2 release to be announced.&lt;br /&gt;
You have to install help2man to run make openmoko-devel-image.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
Note: on  http://www.openembedded.org/wiki/OEandYourDistro are better instructions for Ubuntu to make sh be bash.&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string'.  Another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps.  Here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
You need to get mtn and svn for make.&lt;br /&gt;
 sudo apt-get install subversion monotone&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory (note that you can change ~/moko to any directory you like):&lt;br /&gt;
   mkdir ~/moko ; cd ~/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
&lt;br /&gt;
If that doesn't work, try &lt;br /&gt;
&lt;br /&gt;
   wget http://svn.nslu2-linux.org/svnroot/mokomakefile/trunk/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lengthy make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) environment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducible after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile &amp;amp;&amp;amp; make update &amp;amp;&amp;amp; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands (including the update and setup steps) three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. ~/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/''username''/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in ~/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies: &lt;br /&gt;
&lt;br /&gt;
*gcc 3.4 or 3.3 ('apt-get install gcc-3.4' in Ubuntu 7.04)&lt;br /&gt;
*lynx ('apt-get install lynx' in Ubuntu 7.04)&lt;br /&gt;
*netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
*sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')&lt;br /&gt;
*mkdosfs ('apt-get install dosfstools' in Debian 4.0)&lt;br /&gt;
&lt;br /&gt;
“'''make qemu'''” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, create an empty virtual SD card, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “'''make download-images'''” (to download the latest official images), “'''make flash-qemu-official'''” (to flash those images) and “'''make flash-qemu-local'''” (which will flash your latest locally built images), which can then be followed by “''''make run-qemu'''” or “'''make run-qemu-snapshot'''” to run the emulator with the most recently flashed images. You can also use “''''make qemu-copy-package-''foo'''''” to copy the &amp;lt;code&amp;gt;.ipk&amp;lt;/code&amp;gt; file for package ''foo'' to the virtual SD card, and later use “''''ipkg install /media/mmcblk0/''file'''''” from within the emulated Neo1973 to install the package.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
{{note|If using MokoMakefile with OM2007.2 then references to $OMDIR/openmoko should be replaced with $OMDIR/openembedded.  Also references to tmp/work/armv4t-linux should be replaced with tmp/work/fic-gta01-angstrom-linux-gnueabi}}&lt;br /&gt;
&lt;br /&gt;
For the following explanations $OMDIR is the directory where there Makefile puts all the stuff.&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in $OMDIR/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/build&lt;br /&gt;
  . ../setup-env&lt;br /&gt;
  bitbake -c unpack openmoko-messages&lt;br /&gt;
  cd ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  cd -&lt;br /&gt;
  bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  cd $OMDIR/openmoko/&lt;br /&gt;
  quilt new mycoolpackage.patch&lt;br /&gt;
  mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  $OMDIR/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  quilt refresh&lt;br /&gt;
  cd ..&lt;br /&gt;
  make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
=== Hello World application ===&lt;br /&gt;
&lt;br /&gt;
There is a [http://wiki.openmoko.org/wiki/Building_a_hello_world_application Hello World!] tutorial available too.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, &amp;quot;MokoMakefile rocks!&amp;quot;, and &amp;quot;Wow this build system is nice - it just seems more polished than my gumstix toolchain buildroot system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-08-18T11:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 12 GB of available disk space for MokoMakefile to succeed. Please check that your RAM + swap partition space is greater than 512 MB (around 1GB?).&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
There is an alpha version of the MokoMakefile available at http://svn.nslu2-linux.org/svnroot/mokomakefile/branches/OM-2007.2/Makefile which builds OM-2007.2 images.  You should only try this if you are an experienced MokoMakefile user.  If not, then please wait for the official OM-2007.2 release to be announced.&lt;br /&gt;
You have to install help2man to run make openmoko-devel-image.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
Note: on  http://www.openembedded.org/wiki/OEandYourDistro are better instructions for Ubuntu to make sh be bash.&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string'.  Another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps.  Here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
You need to get mtn and svn for make.&lt;br /&gt;
 sudo apt-get install subversion monotone&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory (note that you can change ~/moko to any directory you like):&lt;br /&gt;
   mkdir ~/moko ; cd ~/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
&lt;br /&gt;
If that doesn't work, try &lt;br /&gt;
&lt;br /&gt;
   wget http://svn.nslu2-linux.org/svnroot/mokomakefile/trunk/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lengthy make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) environment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducible after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile &amp;amp;&amp;amp; make update &amp;amp;&amp;amp; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands (including the update and setup steps) three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. ~/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/''username''/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in ~/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies: &lt;br /&gt;
&lt;br /&gt;
*gcc 3.4 or 3.3 ('apt-get install gcc-3.4' in Ubuntu 7.04)&lt;br /&gt;
*lynx ('apt-get install lynx' in Ubuntu 7.04)&lt;br /&gt;
*netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
*sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')&lt;br /&gt;
*mkdosfs ('apt-get install dosfstools' in Debian 4.0)&lt;br /&gt;
&lt;br /&gt;
“'''make qemu'''” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, create an empty virtual SD card, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “'''make download-images'''” (to download the latest official images), “'''make flash-qemu-official'''” (to flash those images) and “'''make flash-qemu-local'''” (which will flash your latest locally built images), which can then be followed by “''''make run-qemu'''” or “'''make run-qemu-snapshot'''” to run the emulator with the most recently flashed images. You can also use “''''make qemu-copy-package-''foo'''''” to copy the &amp;lt;code&amp;gt;.ipk&amp;lt;/code&amp;gt; file for package ''foo'' to the virtual SD card, and later use “''''ipkg install /media/mmcblk0/''file'''''” from within the emulated Neo1973 to install the package.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
{{note|If using MokoMakefile with OM2007.2 then references to $OMDIR/openmoko should be replaced with $OMDIR/openembedded}}&lt;br /&gt;
&lt;br /&gt;
For the following explanations $OMDIR is the directory where there Makefile puts all the stuff.&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in $OMDIR/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/build&lt;br /&gt;
  . ../setup-env&lt;br /&gt;
  bitbake -c unpack openmoko-messages&lt;br /&gt;
  cd ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  cd -&lt;br /&gt;
  bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  cd $OMDIR/openmoko/&lt;br /&gt;
  quilt new mycoolpackage.patch&lt;br /&gt;
  mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  $OMDIR/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  quilt refresh&lt;br /&gt;
  cd ..&lt;br /&gt;
  make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
=== Hello World application ===&lt;br /&gt;
&lt;br /&gt;
There is a [http://wiki.openmoko.org/wiki/Building_a_hello_world_application Hello World!] tutorial available too.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, &amp;quot;MokoMakefile rocks!&amp;quot;, and &amp;quot;Wow this build system is nice - it just seems more polished than my gumstix toolchain buildroot system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-07-27T00:06:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components it introduces additional complexity.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the method call is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_method.png]]&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* number: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system or user default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work&lt;br /&gt;
# The first relevant extension returns the following values:&lt;br /&gt;
#* number: a string that contains the new number to dial (which may be the same as the input number to dial)&lt;br /&gt;
#* sendid: whether or not to send caller ID&lt;br /&gt;
#* authorized: if the action of making the call is authorized&lt;br /&gt;
#* authreason: if the action of making the call is not authorized then a reason why not&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated number and sendid from the first relevant extension&lt;br /&gt;
# The second relevant extension returns the values as per the first extension&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should use the parameters returned rather than those it had prior to the call for the purposes of dialing a number and sending/not sending caller ID.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately&lt;br /&gt;
&lt;br /&gt;
=== Example of an Extension Registration ===&lt;br /&gt;
&lt;br /&gt;
Extensions must be registered with the extension manager so that the extension handler is aware of them and can incorporate them in to extension requests.  A pictorial representation of the registration process is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_registration.png]]&lt;br /&gt;
&lt;br /&gt;
# An extension sends a registration method to the extension manager.  The method contains the following information:&lt;br /&gt;
#* extension.  This is the full name of the method we wish to extend, for example org.openmoko.ExtensionHandler.Gsmd.OutgoingCall&lt;br /&gt;
#* name.  This is the name of the object that is carrying out the extension, for example net.devzero.SampleExtension&lt;br /&gt;
#* path.  This is the path to the object that is carrying out the extension, for example /net/devzero/SampleExtension&lt;br /&gt;
#* interface.  This is the interface for the object that is carrying out the extension, for example net.devzero.SampleExtension&lt;br /&gt;
#* method.  This is the method on the object that is carrying out the extension, for example GsmdOutgoingCall&lt;br /&gt;
# The extension manager logs the information in a central configuration store where it can be accesed by the extension handler&lt;br /&gt;
# The extension manager returns the call&lt;br /&gt;
&lt;br /&gt;
Once an extension has registered a method then it will be called by the extension handler whenever required.&lt;br /&gt;
&lt;br /&gt;
Unregistering an extension uses exactly the same methodology except that the method is Unregister rather than Register, all parameters stay the same.&lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
&lt;br /&gt;
There are a number of [[Wish List]] entries for which the extension framework could be used, these are as follows:&lt;br /&gt;
#[[Wish List#Mask ID based on dialed numbers|Mask outgoing caller ID based in dialed number]]&lt;br /&gt;
#[[Wish List#Use calling cards and similar routing techniques for lower-cost calling|Use calling cards and similar routing techniques for lower-cost calling]]&lt;br /&gt;
#[[Wish List#Outgoing black/white lists|Outgoing black/white lists]]&lt;br /&gt;
#[[Wish List#Time-based blocking/unblocking of calls|Time-based blocking/unblocking of calls]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Extensionframework_registration.png</id>
		<title>File:Extensionframework registration.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Extensionframework_registration.png"/>
				<updated>2007-07-27T00:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-07-25T11:04:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the framework is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_method.png]]&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* number: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system or user default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work&lt;br /&gt;
# The first relevant extension returns the following values:&lt;br /&gt;
#* number: a string that contains the new number to dial (which may be the same as the input number to dial)&lt;br /&gt;
#* sendid: whether or not to send caller ID&lt;br /&gt;
#* authorized: if the action of making the call is authorized&lt;br /&gt;
#* authreason: if the action of making the call is not authorized then a reason why not&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated number and sendid from the first relevant extension&lt;br /&gt;
# The second relevant extension returns the values as per the first extension&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should use the parameters returned rather than those it had prior to the call for the purposes of dialing a number and sending/not sending caller ID.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately&lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
&lt;br /&gt;
There are a number of [[Wish List]] entries for which the extension framework could be used, these are as follows:&lt;br /&gt;
#[[Wish List#Mask ID based on dialed numbers|Mask outgoing caller ID based in dialed number]]&lt;br /&gt;
#[[Wish List#Use calling cards and similar routing techniques for lower-cost calling|Use calling cards and similar routing techniques for lower-cost calling]]&lt;br /&gt;
#[[Wish List#Outgoing black/white lists|Outgoing black/white lists]]&lt;br /&gt;
#[[Wish List#Time-based blocking/unblocking of calls|Time-based blocking/unblocking of calls]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wish_List</id>
		<title>Wish List</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wish_List"/>
				<updated>2007-07-25T11:02:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is a place to collect various thoughts about the future of the [[OpenMoko]] software platform.  Most wish list ideas have been linked from this page, but you may also wish to check all pages [http://wiki.openmoko.org/wiki/Category:Ideas that have a category of 'Ideas'].&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
=== Painless SDK installation &amp;amp; Setup ===&lt;br /&gt;
Our goal should be a completely painless setup for somebody wanting to develop using [[OpenMoko]]&lt;br /&gt;
&lt;br /&gt;
* one command for installation (apt-get install openmoko)&lt;br /&gt;
* one command to start Xnest (openmoko-xephyr?)&lt;br /&gt;
* one command to start an i386 shell (openmoko-386-shell)&lt;br /&gt;
* one command to start an armel shell (openmoko-armel-shell)&lt;br /&gt;
&lt;br /&gt;
No extra configuration required.&lt;br /&gt;
&lt;br /&gt;
==== IDE Plugins ====&lt;br /&gt;
People like to see plugins for&lt;br /&gt;
* [http://anjuta.sourceforge.net Anjuta]&lt;br /&gt;
* [http://www.eclipse.org Eclipse]&lt;br /&gt;
* Game engine - Game Creation plugins&lt;br /&gt;
evaluate eclipse project [http://www.eclipse.org/dsdp/index.php Device Software Development Platform Project from eclipse] and subproject [http://www.eclipse.org/proposals/tml/ Tool for Mobile Linux]&lt;br /&gt;
* [http://www.kdevelop.org KDevelop]&lt;br /&gt;
* [http://developer.apple.com/tools/xcode/ XCode]&lt;br /&gt;
* [http://msdn.microsoft.com/vstudio/ Microsoft Visual Studio 2005]&lt;br /&gt;
&lt;br /&gt;
==== UI Designer ====&lt;br /&gt;
Glade code generation is deprecated, so we don't want to use it. The Gtk+ powers told me that the plan is to have gtk 2.12 (out early 2007) with support for GtkBuilder, a libglade derivative which breaks a bit the XML definition in order to support all the new widgets and properties; as soon as it's in the other ui builders will add support for this format. See also [http://bugzilla.gnome.org/show_bug.cgi?id=172535 the relevant bug entry]&lt;br /&gt;
* Possibly a Landscape (rotated) view for the screen (480x640 *or* 640x480)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Built-in Scripting Language ====&lt;br /&gt;
&lt;br /&gt;
There was a [http://lists.openmoko.org/pipermail/community/2007-January/001909.html fruitful discussion about a built-in scripting language on the mailing list in January.]  Many people feel that it is very important for OpenMoko to choose a scripting language to ship as default in the standard OpenMoko firmware.  [[Wishlist:BuiltInScriptingLanguage]]&lt;br /&gt;
===Foreign Widget Set Bindings ===&lt;br /&gt;
==== Qt Integration ====&lt;br /&gt;
The Trolltech folks have a great widget library. I'd like to interface OpenMoko with Qt4, so that we can write Qt4 applications for the phone which don't look alienated.&lt;br /&gt;
&lt;br /&gt;
==== Maemo Integration ====&lt;br /&gt;
The Maemo folks have created a successful standard for Webpad applications. I'd like to have a set of MaemoMoko and MokoMaemo wrapper classes that allow me add support for running OpenMoko applications on Maemo and vice versa. Perhaps we can get help from the Nokia OSS folks for that.&lt;br /&gt;
&lt;br /&gt;
==== wxWidgets Integration ====&lt;br /&gt;
wxWidgets is a cross-platform application framework that's very popular (I'd say, #3 after Qt and Gtk+). On Linux, wxWidgets uses Gtk+ to implement the widgets. It shouldn't be hard to add support for the additional OpenMoko classes to wxWidgets hence supporting the native OpenMoko look and feel for wxWidgets applications.&lt;br /&gt;
&lt;br /&gt;
wxWidgets team wants OpenMoko classes too and we (wxWidgets) plan to include this project as one of our ideas for  [http://google-code-updates.blogspot.com/2007/02/speaking-of-summer.html GSoC 2007]&lt;br /&gt;
&lt;br /&gt;
==== SDL Integration ====&lt;br /&gt;
SDL is ''the'' game developer library. There are tons of SDL games out there. We should add OpenMoko support into SDL.&lt;br /&gt;
&lt;br /&gt;
=== Software: Language bindings ===&lt;br /&gt;
==== Python bindings ====&lt;br /&gt;
Python bindings seem to be a commonly requested feature.  &lt;br /&gt;
&lt;br /&gt;
[[User:Mickey]] says, &amp;quot;They are kind of usable on the [http://www.maemo.org Nokia 770], but it's at the lower end of being bearable. We should keep this in mind -- Gtk+ already comes with Python Bindings, so we &amp;quot;just&amp;quot; would need to wrap libmoko*. I would prefer to leave this to the community do though, since it doesn't make sense to start wrapping the API until we have a stable API -- and I can imagine it will take us a couple of months after going open until we can start with stabilizing the libmoko API.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C++ bindings ====&lt;br /&gt;
There is a whole skilled C++ community coming from the [http://qtopia.net Qtopia] and [http://opie.handhelds.org Opie] projects. If we would consider basing OpenMoko C++ Bindings on [http://www.gtkmm.org/ Gtkmm], then we could drag these guys in.&lt;br /&gt;
&lt;br /&gt;
==== Other bindings ====&lt;br /&gt;
* Perl&lt;br /&gt;
* Ruby&lt;br /&gt;
* C#&lt;br /&gt;
* I think you could skip a bunch of these by binding to Dbus; most languages already have Dbus bindings&lt;br /&gt;
&lt;br /&gt;
== Community Support ==&lt;br /&gt;
&lt;br /&gt;
=== [http://projects.openmoko.org projects.openmoko.org] ===&lt;br /&gt;
Infrastructure for developers with&lt;br /&gt;
* One bugzilla for all projects (makes moving bugs forth and backwards between projects ''very'' easy)&lt;br /&gt;
* One mailing list for project&lt;br /&gt;
&lt;br /&gt;
== Platform ==&lt;br /&gt;
=== Community Images ===&lt;br /&gt;
In the future there could be complete, unofficial &amp;quot;product images&amp;quot; that are created by the community, for example maybe one that incorporates only free software (in the GNU or OSI sense). Or images build with a particular niche market in mind -- a student for example.&lt;br /&gt;
&lt;br /&gt;
=== Wishlist voting ===&lt;br /&gt;
There could be a kind of voting system like they have at one of those big computer manufacturers homepage. Then the community could vote for the ideas that are most important to them. This would especially make sense for the hardware wishlist, because the hardware is still the part which can't be done by the community that easily.&lt;br /&gt;
&lt;br /&gt;
== Software: Additional features ==&lt;br /&gt;
===Calling===&lt;br /&gt;
&lt;br /&gt;
==== Mask ID based on dialed numbers ====&lt;br /&gt;
It would be nice if my number only showed up when I call people in my address book and was otherwise masked. The phone I have now either always shows my number or never or can be set on a per call basis. Having it done automatically based on the number dialed would be good.&lt;br /&gt;
&lt;br /&gt;
==== Use calling cards and similar routing techniques for lower-cost calling ====&lt;br /&gt;
Many people use calling cards, low-cost numbers and similar ways of reducing the costs of their calls.  It would be nice to have a single panel that would allow you to configure the rules of dialing a number taking in to account such systems.&lt;br /&gt;
&lt;br /&gt;
==== Outgoing black/white lists ====&lt;br /&gt;
The ability to allow or deny outoging calls to certain numbers can be useful in a number of situations (e.g. the holder of the 'phone is a child, untrusted, etc.).  This could be related to entries in the contact list, for example a user is only allowed to call people who are in their contact list.&lt;br /&gt;
&lt;br /&gt;
==== Time-based blocking/unblocking of calls ====&lt;br /&gt;
Allowing or disallowing outgoing calls at certain times of the day could be useful, e.g. blocking a business phone from making calls outside of business hours.&lt;br /&gt;
&lt;br /&gt;
====Speaker-phone====&lt;br /&gt;
* A speaker-phone is more than simply connecting the speakers to GSM audio, it's also echo cancellation, and eliminating the feedback that will otherwise happen between the speakers and the mic. This software has not been written.&lt;br /&gt;
====Advanced Airtime Tracking====&lt;br /&gt;
Many phone users have complicated plans, things like unlimited incoming, 100 anytime minutes, 1000 evening minutes, etc.  It would be nice if a user could input the various monthly airtime chunks their plan gives them, and then the phone could track how much is left in each chunk, i.e. How much anytime minutes are left this month? Optionally, the software could warn when someone is close to the monthly limit, to help avoid bigger bills.&lt;br /&gt;
&lt;br /&gt;
==== Anti-stutter software ====&lt;br /&gt;
Delayed Auditory Feedback (DAF) has shown to reduce stuttering in individuals by 70%. By using the microphone, it should be pretty simple to implement this on the OpenMoko. The DAF functionality should also be present during phone calls. See http://en.wikipedia.org/wiki/Delayed_auditory_feedback for more information.&lt;br /&gt;
&lt;br /&gt;
====Minimize In-Call mode (check address book while in call)====&lt;br /&gt;
On my locked phones I always find it annoying that one can not use other features while a call is in progress. In particular, I'd like to access the address book so that we can (1) give a caller someone else's phone number (or other info) and (2) lookup a phone number when using a calling card or some other proxy.&lt;br /&gt;
&lt;br /&gt;
Similar request when using the browser (lookup passwords, todo list, etc).&lt;br /&gt;
&lt;br /&gt;
====Hold Music (Ringback Tone)====&lt;br /&gt;
On some cellphone networks you can pay to change the normal [http://en.wikipedia.org/wiki/Ringback_tone Ringback Tone] that the caller hears when ringing, to a customised sound.&lt;br /&gt;
This can partially be implemented on the phone.&lt;br /&gt;
Issues are:&lt;br /&gt;
*In countries where callers pay, this will make you unpopular.&lt;br /&gt;
*In countries where the called party pays, it will use your minutes, or cost you money.&lt;br /&gt;
**A list of people to activate this function for would alleviate this.&lt;br /&gt;
*[[GPRS]] internet connection will stall while the hold music is being played.&lt;br /&gt;
*Extra battery used when playing music.&lt;br /&gt;
&lt;br /&gt;
Also see [[Answering Machine]].&lt;br /&gt;
&lt;br /&gt;
====Play sound clips over the air====&lt;br /&gt;
Dialer could have a tab with big buttons which, when push, send sound clips over GSM to the person on the other end of the call.  This feature is included in GizmoProject and is called sound blasts: http://support.gizmoproject.com/index.php?_a=knowledgebase&amp;amp;_j=questiondetails&amp;amp;_i=104&lt;br /&gt;
The buttons can have default sounds, but also have the ability to be customized.&lt;br /&gt;
&lt;br /&gt;
==== Conversation Recorder ====&lt;br /&gt;
&lt;br /&gt;
An option to record phone conversations.  Would be helpful to have the device always recording for every call, with the sound data encoded to low quality Ogg Vorbis or SPEEX and stored in RAM.  At the end of the conversation the user would have the option to save to flash or discard the conversation.  This idea could also be applied to voicemail so you could save voicemails locally.&lt;br /&gt;
&lt;br /&gt;
====Unlicensed Mobile Access (UMA)====&lt;br /&gt;
T-Mobile recently rolled out a UMA service that hands off calls between the GSM network and WiFi access points. Only a few phones support it right now, this could be a rather unique feature if OpenMoko can implement it.&lt;br /&gt;
&lt;br /&gt;
==== Ignore-Call Button ====&lt;br /&gt;
&lt;br /&gt;
[[Wishlist:Ignore Call Button|Shut up a ringing phone]], without accepting or rejecting the call.&lt;br /&gt;
&lt;br /&gt;
Another alternative might be to use microphone to recognize when the user gives an audible &amp;quot;Shhh!&amp;quot; command.  This could prove difficult to determine with the simultaneous ringing, and possible in-pocket shuffling noises.&lt;br /&gt;
&lt;br /&gt;
==== [[Voice Mailbox]] ====&lt;br /&gt;
&lt;br /&gt;
On-Phone voice mailbox that records calls on the phone and retrieves voice messages from your mobile service provider's voice mailbox and saves them locally.&lt;br /&gt;
Can act profile-dependent.&lt;br /&gt;
&lt;br /&gt;
==== Hold Button ====&lt;br /&gt;
&lt;br /&gt;
Similar to mute, but plays a sound file for the user on the other end while they wait.  The sound file could be chosen in some setup beforehand.&lt;br /&gt;
&lt;br /&gt;
==== Unanswered Call, Fast Call ====&lt;br /&gt;
&lt;br /&gt;
In Greece because of the various bill programs some people call a mobile phone, rings one time and then hangup.&lt;br /&gt;
Then the user of the mobile phone calls the other user(using the CallerID recognition).&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
==== Ambient Noise Detection ====&lt;br /&gt;
&lt;br /&gt;
Using the microphone to [[Wishlist:Ambient Noise Detection|detect ambient noise]] the ringtone volume could be adjusted automatically.&lt;br /&gt;
&lt;br /&gt;
Detection of ambient noise could also be used to subtract the noise from the audio signal. However this approach is best performed using two Microphones, one for the voice and the other to detect the noise.&lt;br /&gt;
&lt;br /&gt;
==== Active noise control ====&lt;br /&gt;
&lt;br /&gt;
Using the microphone to do [http://en.wikipedia.org/wiki/Anti-noise active noise control] on media player playback or telephone calls. This should be an independent module/library which can be used by any application which might require this feature. also provide a way to easily alter the parameters of the active noise control.&lt;br /&gt;
&lt;br /&gt;
==== Hear Impaired Mode ====&lt;br /&gt;
&lt;br /&gt;
Hearing impaired people need louder speaker(but with less volume than hands free) and equalized sound, based on their hearing problems(example 20dB hearing loss from 2KHz to 4KHz).&lt;br /&gt;
Older people 50+ years old need slower speech rate(time stretch, cut the big speech gups) and cleaner voice.&lt;br /&gt;
&lt;br /&gt;
Please note also the Hearing Aid Compatibility regulations in the US. I have tried to summarize and clarify them [http://quux.wiki.zoho.com/WhereAreHACphones.html here]. I haven't yet discovered whether the FIC device is M or T rated. For many hearing impaired users, a tcoil coupling to their hearing aid (t3/T4 rating) would be preferable to manipulating sound output in other ways.&lt;br /&gt;
&lt;br /&gt;
==== Mute Button ====&lt;br /&gt;
&lt;br /&gt;
Button to temporarily disable microphone while talking for applications such as telephone, audio recording and (when available) movie recording.&lt;br /&gt;
&lt;br /&gt;
===Media===&lt;br /&gt;
====Music/Video Software====&lt;br /&gt;
A real good programming area for competition with the iPhone, a singular video/music player would be great for multimedia. A seamless integration system, a la iTunes and iPod, would be extremely popular. &lt;br /&gt;
&lt;br /&gt;
Using the Wi-Fi connectivity, a separate music program that supports wireless music sharing/ streaming (similar to what can be done when two computer running iTunes that are both on the same network) and that also supports internet radio.&lt;br /&gt;
&lt;br /&gt;
==== Reading Support ====&lt;br /&gt;
It would be really great to be able to read :&lt;br /&gt;
&lt;br /&gt;
*PDF&lt;br /&gt;
*Open Document files&lt;br /&gt;
*Text / RTF files&lt;br /&gt;
*MS Office files&lt;br /&gt;
*Aportis Doc (pdb)&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
In both landscape and portrait&lt;br /&gt;
&lt;br /&gt;
==== Wikipedia Mirror ====&lt;br /&gt;
&lt;br /&gt;
See [[Wishlist:Wikipedia_Mirror|Wikipedia Mirror]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Blog ScribblePad ====&lt;br /&gt;
&lt;br /&gt;
Draw an image (and maybe add some text), then post to your blog.&lt;br /&gt;
&lt;br /&gt;
==== E-Book Reader ====&lt;br /&gt;
* Neos brilliant ultra-sharp screen makes for a very good e-book reading device. All it takes is a good e-book reader with touch-screen page turning / scrolling. FBReader could probably be adjusted easily by an experienced GTK hacker. Note that e-book reading is different to pure text/pdf displaying as it requires at least auto-bookmarking of the last read page, proper text and image scaling and text formatting.&lt;br /&gt;
&lt;br /&gt;
==== Personal Wiki ====&lt;br /&gt;
&lt;br /&gt;
Display the notes database as a Wiki.  Inspiration:  [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki].  [[Wishlist:PersonalWiki]]&lt;br /&gt;
&lt;br /&gt;
[http://www.didiwiki.org/ Didiwiki]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Dictionary, thesaurus, translator and flashcards ====&lt;br /&gt;
Native lookup dictionary and thesaurus and foreign translation dictionaries, also with support for Asian languages. Optional custom configurable (though preconfigured) interface with on-line versions of dictionaries, thesaurus and translation services.&lt;br /&gt;
&lt;br /&gt;
Support for vocabulary training with flashcard system (also usable for other content than foreign language words!)&lt;br /&gt;
&lt;br /&gt;
===PIM (Personal Information Managment)===&lt;br /&gt;
====Context Sensitivity====&lt;br /&gt;
Any email or sms message or application that contains a telephone number should be click to dial, eg [http://123567890 1234567890]. Addresses link to mapping software too?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Address Book ====&lt;br /&gt;
&lt;br /&gt;
* Option to search not just the stored list of addresses, but one or more of the online phonebooks. Probably should be modular to make adding/changing phonebook sites easy.  Also allows for future integration with LDAP&lt;br /&gt;
servers or whatever.&lt;br /&gt;
* Also the possibility to search all info on the contact, like number, email, postal address and so on, in case someone asks you to identify a known number.&lt;br /&gt;
* Web-based map-lookup. 'How do I get there from here? (here = current GPS location)'  This could also be done&lt;br /&gt;
by integrating with whatever on-phone GPS mapping software the Neo ends up using.&lt;br /&gt;
* Random text input 'notes' about a contact&lt;br /&gt;
* Overall, this should more resemble a Palm-pilot's address-book than your average cellphone's&lt;br /&gt;
* Automated Daily backup of phone book to a website archive (similar to Verizon's Back-up Assistant&lt;br /&gt;
*Ability to integrate address book with web-based email (such as gmail) account, for those who use web based email as their primary account&lt;br /&gt;
* '''[[Wishlist:Tagging|Tagging]]''' Place tags for contacts. Enhance message application to send messages to all contacts tagged with ... . Enhance other application(GPS, ...) with tags.&lt;br /&gt;
* Support for:&lt;br /&gt;
**[http://en.wikipedia.org/wiki/SyncML SyncML]&lt;br /&gt;
**[http://en.wikipedia.org/wiki/Ldap LDAP] address book&lt;br /&gt;
**[http://en.wikipedia.org/wiki/LDIF LDIF], [http://en.wikipedia.org/wiki/Xml XML] and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export and import (when possible).&lt;br /&gt;
*Store Bluetooth IDs of friends and notify (configurable only on this device or on both devices) when a one of these Bluetooth ID has been detected (this is more a separate application but has requirements on the address book.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Database/List Display/Edit ====&lt;br /&gt;
&lt;br /&gt;
One of the most useful apps on my Palm Pilot for me is [http://pilot-db.sourceforge.net/ pilot-db].  It's GPL'd.  [[Wishlist:PilotDB]]&lt;br /&gt;
&lt;br /&gt;
==== Joe's Goals ====&lt;br /&gt;
&lt;br /&gt;
It'd be nice to have something like [http://www.joesgoals.com Joe's Goals] always available, like my phone is, even when I'm disconnected from the net.&lt;br /&gt;
&lt;br /&gt;
==== Workout ====&lt;br /&gt;
&lt;br /&gt;
Use your phone instead of your notebook while at the gym, and get pretty graphs to admire after you're done.&lt;br /&gt;
&lt;br /&gt;
==== Shopping List ====&lt;br /&gt;
keep Track of Prices in different shops and the products you have/don't have. Ideally using a barcode reader and gps.&lt;br /&gt;
If it was made aware of recipes it could even tell you what to buy without entering a shoppinglist manually.&lt;br /&gt;
==== Fuel Log ====&lt;br /&gt;
File data about fueling your car (date/time, liters, price, mileage, ...) and display some information (costs per month, average consumption, ...).&lt;br /&gt;
Advanced features could include:&lt;br /&gt;
* Automatically storing the GPS coordinates of the place where the car has been fueled (can be deactivated)&lt;br /&gt;
* Sending the data to a central server which collects the information&lt;br /&gt;
* Let the OpenMoko receive fuel logs per SMS (e.g. if my wife with a non-openmoko mobile fuels the car and wants to file the data using her mobile phone)&lt;br /&gt;
* Let the OpenMoko device act as SMS gateway for non-openmoko devices to easily send the data to the central server&lt;br /&gt;
* Also support for air log for divers. Not that you will take this device under water but for the crew at the surface.&lt;br /&gt;
&lt;br /&gt;
==== Keep in touch reminder ====&lt;br /&gt;
A background application which keeps track of your friends and reminds you when you have not talked, SMS, IM or mailed a person for more than # days.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Menstruation period timer ====&lt;br /&gt;
Fill in statistics and compute probabilities for menstruation, fertility, mood.&lt;br /&gt;
See http://www.getjar.com/products/48/MyGirls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== [[Wishlist:Tagging|Tagging]] ====&lt;br /&gt;
Tags can be used by various applications. Requirement is interoperability for further enhancement.&lt;br /&gt;
Tags should be applied to calendar events, mail/sms, calls, places(GPS) and files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Context based TO-DO list ====&lt;br /&gt;
&lt;br /&gt;
If I arrive home and there are &amp;quot;@home&amp;quot; things in the to-do list, the [[Wishlist:context based to-do list|Context based to-do list]] reminds me of that.&lt;br /&gt;
&lt;br /&gt;
==== Exchange Integration ====&lt;br /&gt;
&lt;br /&gt;
Once there is good TCP/IP connectivity on this phone, integration with corporate email/calendar/to do/etc servers would be a big advantage... near-real-time automatic email downloads and automatic bi-directional syncing are productivity boosters that you have to experience to appreciate. It turns your phone from a 'nice gadget to fiddle with' to a natural-feeling extension of your day-to-day life.&lt;br /&gt;
&lt;br /&gt;
* Is the time right to name names ? Add as your liking...&lt;br /&gt;
** Plugin/integration to &amp;amp; from Kontact&lt;br /&gt;
** Same with Evolution - Thunderbird - Seamonkey&lt;br /&gt;
** ?? Google Calendars ?? (this one is tough)&lt;br /&gt;
&lt;br /&gt;
==== An electronic wallet ====&lt;br /&gt;
&lt;br /&gt;
A database which stores securely PIN codes, login data, bank and email accounts, membership informations, and other valuable and private data. Entries can be ordered in a folder-like manner. Access to the database is given by a master password. The database as well as the master password are stored with strong encryption. For security reasons, the program asks again for entry of the master password after a certain period of inactivity. The database can be synchronized with a PC application (ideally written in Java for cross platform compatibility).&lt;br /&gt;
&lt;br /&gt;
Examples: KWallet [http://docs.kde.org/stable/en/kdeutils/kwallet/index.html], Viskeeper [http://www.sfr-software.de/cms/EN/pocketpc/viskeeperpro/index.html]&lt;br /&gt;
&lt;br /&gt;
===Profiles===&lt;br /&gt;
&lt;br /&gt;
The [[Wishlist:Profiles]] page documents many possible profiles - ways to configure the phone. Including ways to respond to calls, wifi and GPS events.&lt;br /&gt;
And how to automatically switch between them.&lt;br /&gt;
&lt;br /&gt;
===Text Messaging===&lt;br /&gt;
For '''Text Input related ideas''' see [[Wishlist:Text_Input]]. Bear in mind that T9 can not be included&lt;br /&gt;
For current development status of the messaging-app see: [[Messages]]&lt;br /&gt;
&lt;br /&gt;
There are many useful options that now can be used to full capacity:&lt;br /&gt;
* '''Acknowledge/status SMS'''&lt;br /&gt;
In GSM networks so-called acknowledge-SMS are sent back to the SMS's dispatcher in order to indicate that the primal sms was received (as message delivery is only best effort and is not guaranteed). So in the SMS dialog there could be equal sized buttons with captions as 'send only', 'send and receive delivery status message' and 'send and notify (e.g. ring) when delivery succeeded'.&lt;br /&gt;
** '''Special handling of status-SMS''' &lt;br /&gt;
Related to the previous entry, these acknowledgment-sms' should be handled in a different way than normal SMS'. Most Motorola do this, while Samsung SGH series don't &amp;amp; clog the inbox, warn of a &amp;quot;new&amp;quot; message upon Status notification: Delivery Status Messages should be stored in a separate menu so they don't bloat the received-folder and you are able to quickly review the status of the messages you had sent.&lt;br /&gt;
* '''SMS at time/date''' You could be able to set up messages that are sent at a certain time/date&lt;br /&gt;
* '''Binary SMS''' Send binary SMS. Could be used to feign WAP pushes. [http://en.wikipedia.org/wiki/Multimedia_Messaging_Service] See: &lt;br /&gt;
** Resource for SMS encoding: [http://web.archive.org/web/20021016104345/www.dreamfabric.com/sms/] [http://web.archive.org/web/20060411222332/] [http://home.student.utwente.nl/s.p.ekkebus/portfolio/resource/sms_pdu.html] [http://www.ihub.com/Binary%20Messages.htm]&lt;br /&gt;
** [http://www.gammu.org www.gammu.org] - you can use Gammu/Gammu+ source for this software and/or understanding various SMS formats including EMS, WAP, Nokia Smart Messaging, Siemens &amp;amp; Alcatel encoding ([[User:Marcin|I could]] eventually help)&lt;br /&gt;
** Resource for SMS encoding (German): http://de.wikipedia.org/wiki/SMS-Kodierung&lt;br /&gt;
** The infamous pocketpc-attack: http://www.mulliner.org/pocketpc/&lt;br /&gt;
* '''Profile-override-SMS''' SMS that start with a certain code word override the silent profile and have the phone ring. So someone could alert you in case of some emergency.&lt;br /&gt;
* '''Codeword-SMS''' An expansion of the above: check for code words and allow selectable tones for matches. E.g. &amp;quot;Server Down!&amp;quot; has a loud klaxon, &amp;quot;Disk Warning&amp;quot; has a quiet chirp.&lt;br /&gt;
* '''(De-)Abreviation-script''' Implement a script that de-abbreviates: &amp;quot;hi m8 u k?-sry i 4gt 2 cal u lst nyt-y dnt we go c film 2moz&amp;quot; becomes &amp;quot;Hi mate. Are you okay? I am sorry that I forgot to call you last night. Why don't we go and see a film tomorrow?&amp;quot; (taken from: [http://en.wikipedia.org/wiki/SMS_language])&lt;br /&gt;
** Implement a script that abbreviates :-)&lt;br /&gt;
* '''Anti-Spam''' ...feature for SMS. May be it's possible to port some Bayesian based application like bogofilter.&lt;br /&gt;
* '''Rule based authorizations''' ...for received messages. For example, delete messages from one source between 9h00 and 18h00 (workday) allow them otherwise (to get alerting messages).&lt;br /&gt;
* '''Enable chat-like SMS-viewing''' SMS-Email-like: retain SMS app, but store 'conversations' rather than pile-up. Group/archive conversations by Caller Group (Work / Friends / Home / any user-defined Caller Group). Show appropriate icon from either Caller Group or Caller ID at the source of conversations panel&lt;br /&gt;
* '''Searching''' allow full-text search or string search.&lt;br /&gt;
* '''Massive SMS Deletion''' based on Conversation, author, before-date-xx.xx.xxxx, caller group, [[Wishlist:Tagging|tags]]...&lt;br /&gt;
* '''Call Back''' Prompt 'Call Back' alongside other first-line options (Delete, Save number,.. this kind of options) that appear when reading an SMS.&lt;br /&gt;
* '''Non-destructive deletion''', deleted messages goes to trash, and are recoverable.&lt;br /&gt;
* '''SMS-EMail-Gateway'''&lt;br /&gt;
SMS comes in, gets forward to your inbox, like any other piece of mail.  Appropriate alerts and etc occur - again, just like for email. A simple SMTPD running on 127.0.0.1 that is hooked to an email-to-SMS translator that will send email addressed to 'SMS@localhost' (or whatever special address) out via SMS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Wishlist:Text Input| Text input]] ===&lt;br /&gt;
There are many good suggestions for text input on the specific [[Wishlist:Text Input| text input ideas]] page.&lt;br /&gt;
&lt;br /&gt;
=== More/Custom Input Method Widgets ===&lt;br /&gt;
Additional and customizable Input Method Widgets (similar to virtual keyboard).  &lt;br /&gt;
This could add soft-key functionality to games or other applications such as:&lt;br /&gt;
*D-Pads&lt;br /&gt;
*buttons&lt;br /&gt;
*virtual trackballs&lt;br /&gt;
*...&lt;br /&gt;
Personalized layouts could be associated with each application.&lt;br /&gt;
See [http://wiki.openmoko.org/wiki/Wishlist:More/Custom_Input_Method_Widgets Input Method Wishlist] for more.&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
&lt;br /&gt;
Please see [[Wishlist:Games|the games page]].&lt;br /&gt;
&lt;br /&gt;
=== Mesh Networking ===&lt;br /&gt;
&lt;br /&gt;
Please see [[Wishlist:Mesh Networking|Mesh Networking]].&lt;br /&gt;
&lt;br /&gt;
=== Printing Support ===&lt;br /&gt;
It would be really neat to be able to print over either bluetooth or USB. I can imagine wanting to print:&lt;br /&gt;
&lt;br /&gt;
* Notes&lt;br /&gt;
* Maps&lt;br /&gt;
* Email&lt;br /&gt;
* Calendars&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Cups contains a bluetooth printing backend, so (in theory) once you have your data in postscript format, you could hand it to cups and it'll do the rest. In practice, it depends on&lt;br /&gt;
&lt;br /&gt;
# GTK+'s printing support&lt;br /&gt;
# Making cups run on a really small system&lt;br /&gt;
&lt;br /&gt;
{{note| GTK+'s printing support seems to be very immature in 2.6 (which we need to use for some time). Gtk+ 2.10 contains much better printing support -- once we can use this, it should be more easy.}}&lt;br /&gt;
&lt;br /&gt;
There's always the possibility to render postscript ourselves, but this is not a piece of cake -- in general, printing is much harder than one would imagine.&lt;br /&gt;
&lt;br /&gt;
Further details:&lt;br /&gt;
* [http://groups.osdl.org/apps/group_public/download.php/2205/print-summit-gtk.pdf#search=%22gtk%2B%20printing%20API%22 osdl.org]&lt;br /&gt;
* [http://www.gnome.org/~alexl/presentations/guadec2006-printing.pdf#search=%22gtk%2B%20printing%20API%22 gnome.org]&lt;br /&gt;
* [http://www.j5live.com/?p=204 j5live.com]&lt;br /&gt;
&lt;br /&gt;
===Misc Software===&lt;br /&gt;
====Clocks/timers/Activity meters====&lt;br /&gt;
===== Sport tracker =====&lt;br /&gt;
[[Wishlist:Sport_tracker|Sport tracker]] can be used to measure the distance/velocity from point A to point B (or it could have several intermediate stopping points) using GPS.  This would be extremely useful for running, biking, hiking, etc.&lt;br /&gt;
&lt;br /&gt;
===== Standby clock =====&lt;br /&gt;
A quick way to see what [[Wishlist:Standby_clock|time]] it is.&lt;br /&gt;
&lt;br /&gt;
===== Egg Timer =====&lt;br /&gt;
&lt;br /&gt;
Very simple (one click) count up / count down timers are very useful.  [[Wishlist:EggTimer]]&lt;br /&gt;
&lt;br /&gt;
===== Cycle Computer =====&lt;br /&gt;
As already mentioned by [http://wiki.openmoko.org/wiki/User_talk:Technil Technil], a cycle computer could be created using gps. The sensor at the bike's wheel could transmit data via bluetooth or some cable that would be attached to an openmoko device. In order to save power, one could switch off the gps and only use the bike's sensor.&lt;br /&gt;
* Just another idea that came to me: Why don't have sensor's transmit cable plug into the headphone/microphone plug? A tool reads the signals created by the induction of the passing magnet, then gives them to the cycle-computer-app :) --[[User:Minime|Minime]] 19:50, 12 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
====Calculators====&lt;br /&gt;
===== A Universal Unit Converter Tool =====&lt;br /&gt;
&lt;br /&gt;
One never knows when one may have to convert acre-feet into deciliters.  A unit conversion tool makes all engineers and engineer wannabes much happier. And not only the engineers. &lt;br /&gt;
&lt;br /&gt;
Ideas what kind of conversions a converter tool could do:&lt;br /&gt;
&lt;br /&gt;
Lenght&lt;br /&gt;
- Acceleration&lt;br /&gt;
- Angle&lt;br /&gt;
- Angular Velocity&lt;br /&gt;
- Area&lt;br /&gt;
- Capacitance&lt;br /&gt;
- Radioactivity&lt;br /&gt;
- Currency &lt;br /&gt;
- Charge&lt;br /&gt;
- Computer Memory&lt;br /&gt;
- Conductance&lt;br /&gt;
- Density&lt;br /&gt;
- Energy&lt;br /&gt;
- Illumination&lt;br /&gt;
- Power&lt;br /&gt;
- Force &lt;br /&gt;
- Flow&lt;br /&gt;
- Pressure&lt;br /&gt;
- Speed&lt;br /&gt;
- Temperature&lt;br /&gt;
- Time&lt;br /&gt;
- Torque&lt;br /&gt;
- Viscosity&lt;br /&gt;
- Volume&lt;br /&gt;
- Weight&lt;br /&gt;
&lt;br /&gt;
Roman Numerals&lt;br /&gt;
- ASCII, Hex&lt;br /&gt;
- Cooking&lt;br /&gt;
- BMI&lt;br /&gt;
- Clothing Sizes&lt;br /&gt;
&lt;br /&gt;
Physical and Mathematical Constants&lt;br /&gt;
GPS conversions &lt;br /&gt;
&lt;br /&gt;
- link to or integration of a scientific calculator&lt;br /&gt;
- link to or integration of a simple calculator&lt;br /&gt;
&lt;br /&gt;
A good basis for such a converter tool could be the Palm program &amp;quot;units&amp;quot; from &lt;br /&gt;
François Pessaux [http://francois.pessaux.neuf.fr/files/units1_11.tgz]. The GPL'd program comes with full documentation.&lt;br /&gt;
&lt;br /&gt;
For GPS conversions see gpsbabel [http://www.gpsbabel.org]&lt;br /&gt;
&lt;br /&gt;
===== An Postfix Notation (RPN) calculator =====&lt;br /&gt;
&lt;br /&gt;
Many engineers, computer scientists and other groups who have grown to enjoy the simplicity and ease of an postfix notation calculator will miss them when give up other platforms to move to OpenMoko.  A RPN calculator will increase adoption by providing one of the tools that other platforms have provided for many years.&lt;br /&gt;
&lt;br /&gt;
==== Web-browser Plugins ====&lt;br /&gt;
&lt;br /&gt;
* While an extensive browser plugin system would be costly to the efficacy of the platform three particular browser plugins as poplularized by Mozilla firefox should be adapted to the web-browser, namely: [http://noscript.net/ noscript], [http://adblockplus.org/en/ adblock plus], [http://www.greasespot.net/ greasemonkey] and [http://www.foxmarks.com/ foxmarks].&lt;br /&gt;
* Careful use of these can dramatically reduce bandwidth, page space, and rendering costs even if it comes at the risk of some hard drive space in the form of block lists.&lt;br /&gt;
* Greasemonkey, in particular, gives users control to set up scripts for commonly traveled pages to further reduce unnecessary or unwanted content.&lt;br /&gt;
&lt;br /&gt;
==== PalmOS Emulator ====&lt;br /&gt;
&lt;br /&gt;
The Access group is probably coming out with their Linux platform any time soon. One of the components is a PalmOS emulator which I'd like to see working on OpenMoko as well. There are literally thousands of PalmOS apps.&lt;br /&gt;
&lt;br /&gt;
Win CE emulator&lt;br /&gt;
I'd like to see a Windows CE Emulator with active sync support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== TV Guide/Remote Control ====&lt;br /&gt;
&lt;br /&gt;
Use your Phone to easily program your VCR using EPGs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Alcohol meter ====&lt;br /&gt;
Give the phone some info about your body (gender, size, weigth) and when/what you drink and it will compute an approximation of the amount of alcohol in your blood. Updates automatically, could have an alarm, when you are probably sober again.&lt;br /&gt;
See, for example (German text) http://www.misterio-online.de/promille.htm&lt;br /&gt;
&lt;br /&gt;
==== Interaction with LEGO Mindstorm ====&lt;br /&gt;
With the accelerometers, GPS and good CPU, the phone could be used to control/serve as input with robots built with LEGO Mindstorm, which can be accessed by USB and Bluetooth.&lt;br /&gt;
&lt;br /&gt;
==== Flashlight ====&lt;br /&gt;
Simple finger application that makes every pixel on the entire screen white to be as bright as possible until you tap the screen again to turn it off.  This way, you can use your Neo as a (short term) flashlight!&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
Accessibility features for the visually impaired.&lt;br /&gt;
* High Contrast Themes.&lt;br /&gt;
* Screen Magnifier. Features should include automatic cursor tracking when navigating menus and entereing text and provide manual controls to zoom in on other section of the screen.&lt;br /&gt;
* Text to speech. The software should read out menu item ,contact lists ,text messages etc. Would also be useful for operating the phone while driving.&lt;br /&gt;
&lt;br /&gt;
==== VOIP ====&lt;br /&gt;
Ability to use the phone for VOIP over wi-fi such as Vonage. They currently have 2 different pieces of software for pc . Basically software creates a mac address which is paired with your Vonage account. Skype could also be implemented but I prefer Vonage. Only available when connected to wi-fi with a good connection. Phone treats calls the same as a cellular call, could keep a separate log of minutes, ability to record conversations, etc. Option to use VOIP if connection is available automaticly or manually. Small icon to show when call is using VOIP.&lt;br /&gt;
* A standard SIP client would probably fit better into the &amp;quot;free and open&amp;quot; philosophy.&lt;br /&gt;
&lt;br /&gt;
==== Power Meter ====&lt;br /&gt;
If the power bar is clicked on it will show time left on charge and if charging it will show time until full.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer wishes ===&lt;br /&gt;
==== Flick interface ====&lt;br /&gt;
Ability to &amp;quot;flick&amp;quot; the phone for page up/down by simply and rapidly tilting the phone back-and-forth for up and forth-and-back for down. The same motion can be implemented for sideways motion. This will take advantage of the 2 3d accelerators.&lt;br /&gt;
&lt;br /&gt;
==== Reading navigation of documents enhanced by accelerometers ====&lt;br /&gt;
If the two accelerometers in Neo1973 allows it, it will be nice if when you're reading, give a newspaper, you can move up, down, left and to the right the viewing of the document just moving the phones to the corresponding direction.&lt;br /&gt;
&lt;br /&gt;
I don't know if this is possible (haven't seen the project in detail yet) but this feature could be very attractive for final users (and this is good). (sorry for my english but i'm italian)&lt;br /&gt;
&lt;br /&gt;
==== Wand UI ====&lt;br /&gt;
In keeping with the requests to think outside of the box... the dual 3d accelerometers should enable a 'magic wand'-style UI for certain uses. Macros could be recorded and edited, or presets could be used. For example, flipping the device playfully could initiate a game mode or could signal the end of the work day.&lt;br /&gt;
  &lt;br /&gt;
==== Shake-to-Wake ====&lt;br /&gt;
Giving the phone a shake enables voice commands for a few seconds.&lt;br /&gt;
Usage Examples: &lt;br /&gt;
&lt;br /&gt;
{Shake} &amp;quot;Call&amp;quot; ''ContactName'' ''PhoneType'' --- {Shake} &amp;quot;Call John Mobile&amp;quot;  (Calls John's mobile)&lt;br /&gt;
&lt;br /&gt;
{Shake} ''ApplicationName'' --- {Shake} &amp;quot;Reader&amp;quot; (Opens the e-book application)&lt;br /&gt;
&lt;br /&gt;
Would require a method of inputting voice tags for applications and contacts and obviously will only work for P2 (accelerometers)&lt;br /&gt;
But lets get voice command functionality working before P2 (just by pressing a button on the screen instead of shaking)&lt;br /&gt;
&lt;br /&gt;
I think that is possibly to replace &amp;quot;Shake&amp;quot; with double hit with finger in the side of phone. Proper algorithms(with accelerometers) should recognize any similar activities.&lt;br /&gt;
&lt;br /&gt;
==== Emergency call ====&lt;br /&gt;
When the accelerometer detects a great acceleration (i.e. 5G) start a countdown sequence, if it is not stopped make a call to a preconfigured emergency number. If the data from the GPS is accurate give it.&lt;br /&gt;
&lt;br /&gt;
A first version could use a recorded message (an audio file). In next version it could use a synthesizer, so it can give more information (add GPS information when it is ready).&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
==== VNC client ====&lt;br /&gt;
A good, stylus friendly VNC client/host combo would be easy to add and terribly useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Networked X-Windows ====&lt;br /&gt;
&lt;br /&gt;
Whether it's running true X-Windowing over the network, or your bog-standard VNC connection as mentioned above, the ability to have your phone's screen available on your laptop or palmtop would be most desirable.&lt;br /&gt;
&lt;br /&gt;
==== NX client ====&lt;br /&gt;
&lt;br /&gt;
A form of X-windows forwarding optimized for performance over slow, or high-latency links, which could prove extremely useful. Capable of streaming a good quality, full desktop session over modem speeds. The protocol and at least one implementation is gpl'd. [http://en.wikipedia.org/wiki/NX_technology wikipedia]&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
==== My Account ====&lt;br /&gt;
A way to securely store information about the phone, and ensure that a phone you may be considering purchasing is not stolen.&lt;br /&gt;
&lt;br /&gt;
[[My Account]]&lt;br /&gt;
==== [http://zfoneproject.com/ Zfone] or similar ====&lt;br /&gt;
&lt;br /&gt;
Something that allows the user to speak with another person securely.&lt;br /&gt;
&lt;br /&gt;
==== GSM Encryption ====&lt;br /&gt;
&lt;br /&gt;
This software application would allow GSM encrypted calls to be made using the GSM Data Call Channel. &lt;br /&gt;
&lt;br /&gt;
[[OSvS]]&lt;br /&gt;
&lt;br /&gt;
==== My Voice is my Passport ====&lt;br /&gt;
Use voice recognition to unlock the phone.  &amp;quot;Hi. My name is ... My voice is my passport.  Verify me.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Firewall ====&lt;br /&gt;
A network firewall&lt;br /&gt;
&lt;br /&gt;
==== Anti Theft Application ====&lt;br /&gt;
&lt;br /&gt;
This application would enter the phone into an [[Anti-Theft Mode]] which activates particular security features to reduce the risk of theft and also to ensure a higher probability of recovery of a stolen handset.&lt;br /&gt;
&lt;br /&gt;
==Bluetooth==&lt;br /&gt;
&lt;br /&gt;
=== Voice Dialing ===&lt;br /&gt;
&lt;br /&gt;
Dial by voice commands.&amp;lt;br&amp;gt;&lt;br /&gt;
Dial by dictating phone number. This way we can voice dial any number even if not in our contact list.&lt;br /&gt;
&lt;br /&gt;
=== Music through Bluetooth Headset ===&lt;br /&gt;
&lt;br /&gt;
Music can be played through a Bluetooth headset, but would stop playing when a call comes in.&lt;br /&gt;
&lt;br /&gt;
=== Walkie Talkie ===&lt;br /&gt;
&lt;br /&gt;
Let OpenMoko devices connect to one another via bluetooth or another connection method (GPRS for long distance but high latency, probably Wifi on P2), and hold a conversation.&lt;br /&gt;
&lt;br /&gt;
Features for this applications can be:&lt;br /&gt;
* Push To Talk (PTT) button&lt;br /&gt;
* Voice Activated Control (VAC) which will set it in transmit mode when input has is detected above a certain predefined level.&lt;br /&gt;
* Optionally a full duplex mode&lt;br /&gt;
* Different channels to choose from&lt;br /&gt;
* Monitor different (preselected or all) channels for traffic.&lt;br /&gt;
* Content encryption&lt;br /&gt;
* Active noise control&lt;br /&gt;
&lt;br /&gt;
Local (non-GPRS) use cases include chatting while biking&lt;br /&gt;
or motorcycling in a group; perhaps also in a car caravan.&lt;br /&gt;
This application could also be used as a baby-phone to monitor your siblings.&lt;br /&gt;
&lt;br /&gt;
This would be more useful if the Neo had Class 1 bluetooth, though probable Wifi on P2 will also offer more range.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Sync ===&lt;br /&gt;
&lt;br /&gt;
Automatically synchronize with desktop computer when within range based on user profile.  This may require the use of a secure data transfer.&lt;br /&gt;
&lt;br /&gt;
=== GPS Assisted Bluetooth Management ===&lt;br /&gt;
&lt;br /&gt;
Allow Bluetooth to automatically turn off after loosing connectivity and to automatically turn back on based upon GPS location.&lt;br /&gt;
&lt;br /&gt;
A Bluetooth device is configured for automatic reacquisition based on the following profiles:&lt;br /&gt;
* Manual - only when Bluetooth is on&lt;br /&gt;
* Non-mobile - the target device is not mobile, periodically attempt reacquisition when in the general area of the device.&lt;br /&gt;
* Mobile - the target device is mobile, periodically attempt reacquisition when in the general area of the device.&lt;br /&gt;
&lt;br /&gt;
Each target device is configured as follows:&lt;br /&gt;
* Automatic acquisition at last known location: enable/disable&lt;br /&gt;
* Automatic acquisition at these locations: list of nickname + coordinates + range&lt;br /&gt;
&lt;br /&gt;
==== Non-mobile devices ====&lt;br /&gt;
&lt;br /&gt;
Examples devices include: computers&lt;br /&gt;
&lt;br /&gt;
The location and range of the target device is determined via training.  Periodically, the current GPS coordinates and Bluetooth signal strength are logged. Additionally, connectivity loss events are logged.  An algorithm uses these logs to determine the device location and range.&lt;br /&gt;
&lt;br /&gt;
Connection attempts are made when in a configurable proximity to the device.  The first attempt when entering the proximity and further attempts at a configurable interval.&lt;br /&gt;
&lt;br /&gt;
==== Mobile devices ====&lt;br /&gt;
&lt;br /&gt;
Example devices include: automobiles&lt;br /&gt;
&lt;br /&gt;
Mobile devices are configured to have two types of locations:&lt;br /&gt;
# Last known location&lt;br /&gt;
# Non-mobile locations (homes)&lt;br /&gt;
&lt;br /&gt;
===== Last known location =====&lt;br /&gt;
&lt;br /&gt;
A car is mobile, ideally, when you leave your car, the phone should note the car's location when connectivity is lost and then attempt to reacquire the car when you return to the location of the car.&lt;br /&gt;
&lt;br /&gt;
===== Non-mobile locations (homes) =====&lt;br /&gt;
&lt;br /&gt;
As mobile devices may have multiple users, it is not sufficient to always use the last known location.  In this case, the device may additionally have multiple homes.  For example, a car might have as its homes: home garage and work parking lot.&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth neighbor detection and multiuser apps  ===&lt;br /&gt;
&lt;br /&gt;
Like the [http://en.wikipedia.org/wiki/One_laptop_per_child one laptop per child] (OLPC) interface, keep a number in the status bar that represents a count of other openmoko or compatible bluetooth devices in the area. Allow for the spontaneous initiation of a chatroom or multiplayer game or file trading with any moko in the area.&lt;br /&gt;
&lt;br /&gt;
=== Remote control ===&lt;br /&gt;
&lt;br /&gt;
==== Wireless presenter ====&lt;br /&gt;
Use the phone to run your OpenOffice.org Impress presentation remotely using Bluetooth. Cool features: &lt;br /&gt;
* Display the text notes for the presenter on the phone's display and update it whenever the slide is changing.&lt;br /&gt;
** OO.org has implemented support for [http://www.openoffice.org/issues/show_bug.cgi?id=12719 dual monitor]/[http://www.openoffice.org/issues/show_bug.cgi?id=18486 presenter mode] that can be used as a starting point&lt;br /&gt;
* A small timer showing the time passed (and perhaps remaining if the presentation app supports such a feature). &lt;br /&gt;
* If you want to be super-cool, you give a preview of the notes of the next slide in the show. &lt;br /&gt;
* At the end of a presentation, a &amp;quot;navigator&amp;quot; could allow to easily jump to any slide in the presentation by clicking on it on the phone.&lt;br /&gt;
** When you right-click in a running OO.org Impress presentation, you can choose &amp;quot;got o slide...&amp;quot; and select any slide to jump to.&lt;br /&gt;
&lt;br /&gt;
==== Initiated from another device ====&lt;br /&gt;
Remote control over Bluetooth from other devices to control media player (play, pause, next, previous, volume control),  camera (capture image), etc.&lt;br /&gt;
==== Directed at another device ====&lt;br /&gt;
Remote control over Bluetooth to other devices to control media player, lights in your house, etc.&lt;br /&gt;
&lt;br /&gt;
Z-wave uses web-browser control of devices that is said to be compatible with mobile phone browsers so should work with openmoko browser. [http://www.z-wave.com www.z-wave.com]&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth Car Connection ===&lt;br /&gt;
&lt;br /&gt;
Have a deeper connection to the car than just handsfree speakerphone.  For instance a transceiver with challenge/response systems to open, possibly even start the car.  Possibly go as far as OBD connection to monitor car status on screen/log for later.&lt;br /&gt;
&lt;br /&gt;
==== Dude, Where's My Car? ====&lt;br /&gt;
&lt;br /&gt;
When in range of the car navigation system, remember the position (perhaps check with the car GPS). When not in range, assumme that you are not in the car, and offer the opportunity to navigate to the car's last known position. That way, you can find your car e.g. on a large parking lot.&lt;br /&gt;
&lt;br /&gt;
=== [[Bluetooth powered Multi-SIM support]] ===&lt;br /&gt;
&lt;br /&gt;
As the Neo1971 does not come with dual-SIM support this could be solved by joining your old bluetooth-enabled mobile to your OpenMoko-phone.&lt;br /&gt;
&lt;br /&gt;
Let SIM card A be in your OpenMoko-phone and SIM card B in your old mobile:&lt;br /&gt;
* Incoming call on SIM card B - the OpenMoko-phone acts as a headset(Bluetooth Headset profile)&lt;br /&gt;
* Calling out via SIM card B - the OpenMoko-phone acts again as a headset&lt;br /&gt;
* Same for Short Messages/MMS/Internet&lt;br /&gt;
This way you'd have your old phone switched silent and connected to your OpenMoko-phone that handles all the calls and one can select which SIM card to use.&lt;br /&gt;
Advantage: No 'switching' between cards&lt;br /&gt;
Disadvantage: Second mobile needs to be in range(e.g. handbag) and charged every once in a while.&lt;br /&gt;
&lt;br /&gt;
===Internet Gateway===&lt;br /&gt;
&lt;br /&gt;
If the device could function as a Bluetooth router/gateway to the internet via the GPRS/data connector, then you could use it to get network connectivity from your laptop and other devices while on the road.  Many smartphones can be configured as modems via Bluetooth for use as Dial-Up Networking connectors, and that should be the minimum target.  Ideally, if the WiFi functionality was used so the OpenMoko could be an 802.11 router or peer to peer gateway for a laptop, this would be even better.  The full bandwidth of GPRS or whatever network is available would then be available.&lt;br /&gt;
&lt;br /&gt;
=== Social Networking ===&lt;br /&gt;
&lt;br /&gt;
Anybody running the social networking app will be broadcasting a profile, and when certain keywords are matched with other users who are also running the application, an alert is sounded. Each mokoid can be added as a hexstring to a profile page, and xml filters can be developed for each social service to convert various keywords and interests to moko-friendly format.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Vibrate Pattern Recorder ===&lt;br /&gt;
&lt;br /&gt;
An application that would allow the user to define their own vibration patterns, and possibly link them to audio files.  Recording would be done in real time initiated with a &amp;quot;Record&amp;quot; button, optionally playing the associated sound file in sync with recording).  While recording, the user would press and hold a button to define the timing and duration of vibration.  The user would press &amp;quot;Stop&amp;quot; when finished.  Vibration patterns would have the option of being looped(would terminate at some global ringtone length maximum).&lt;br /&gt;
&lt;br /&gt;
One simple suggested vibration file format would be a sort of run-length encoding: First byte defines the length of a &amp;quot;time-slice&amp;quot; in milliseconds, which would determine the overall tempo(actually the inverse of tempo).  The next byte would define the number of time-slices to leave the vibration on, and then another byte for how long to pause after.  Continue alternating these on/off bytes until the entire pattern is defined.&lt;br /&gt;
&lt;br /&gt;
- or just use MIDI, using a separate channel for the vibrator.&lt;br /&gt;
&lt;br /&gt;
An implementation of RTTL could also be used to define vibration patterns.&lt;br /&gt;
&lt;br /&gt;
=== PC Input Device ===&lt;br /&gt;
&lt;br /&gt;
Provide a method to use the touchscreen as input device for a nearby desktop machine.  Could connect over USB or bluetooth.&lt;br /&gt;
&lt;br /&gt;
=== Advanced Notification And Ringtone Manager ===&lt;br /&gt;
&lt;br /&gt;
[[Wishlist-ANARM|ANARM]] would be an application for handling all event-based audible notifications from an OpenMoko device.&lt;br /&gt;
&lt;br /&gt;
=== Location based reminders ===&lt;br /&gt;
[[Wishlist:Location_based_reminders|Location based reminders]] can be used to notify users of various events or reminders that are location based.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Synergy Client ===&lt;br /&gt;
A synergy client would enable the user to place the device next to a desktop PC and share the desktop`s mouse, keyboard and clipboard over a TCP/IP network. [http://synergy2.sourceforge.net/ Synergy]&lt;br /&gt;
&lt;br /&gt;
== GPS Software ==&lt;br /&gt;
*Providing GPS Support also for outdoor users in addition to ordinary street navigation features&lt;br /&gt;
** Overlay of satellite images with existing streetmaps&lt;br /&gt;
** Incorporating SRTM digital elevation model: for example using the VRML/X3D as data format (see http://www.ai.sri.com/geovrml/) which is interesting for e.g. mountaineering: using a 3d  browser rendering VRML/X3D Model, displaying the current position and track (possibly also other gps-tracks of the different routes to a summit downloaded before could be mapped onto the 3d model), (what about 3d hardware support? there is nothing written in the hardware specs about graphics: thinking of OpenGL for embedded systems (see http://www.khronos.org/opengles/)&lt;br /&gt;
** Using sth like a tracking mode to allow certain people to determine the current position and track (for rescue missions - like they have for example at http://www.steiger-stiftung.de (a German beneficence for rescue issues) There you can register your mobile phone so the rescue service is able to track you immediately if necessary. The interesting thing: It seams like some mobile phones with GPS have special support for this issue. If your phone is registered, the rescue service is able to get your GPS coordinates directly from the phone without any user assistance. Openmoko should also support this! )&lt;br /&gt;
* Implementation of 3dTracking's (http://free.3dtracking.net/) tracking software or equivalent.&lt;br /&gt;
[[Community Based Traffic Information]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
See [[Wish List - Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ideas]]&lt;br /&gt;
It could be use for beepway Online service too &lt;br /&gt;
[http://www.beepway.com]&lt;br /&gt;
&lt;br /&gt;
=== Tactile feedback via buzzer ===&lt;br /&gt;
Assuming the hardware has a vibrator/buzzer for silent calls, use a lightly pulsed version of that to simulate tactile feedback when dragging finger across buttons on-screen.  Implemented properly, it would almost feel as if the buttons were real.&lt;br /&gt;
&lt;br /&gt;
[[Category:User]]&lt;br /&gt;
[[Category:Ideas]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-07-25T10:51:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the framework is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_method.png]]&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* number: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system or user default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work&lt;br /&gt;
# The first relevant extension returns the following values:&lt;br /&gt;
#* number: a string that contains the new number to dial (which may be the same as the input number to dial)&lt;br /&gt;
#* sendid: whether or not to send caller ID&lt;br /&gt;
#* authorized: if the action of making the call is authorized&lt;br /&gt;
#* authreason: if the action of making the call is not authorized then a reason why not&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated number and sendid from the first relevant extension&lt;br /&gt;
# The second relevant extension returns the values as per the first extension&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should use the parameters returned rather than those it had prior to the call for the purposes of dialing a number and sending/not sending caller ID.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-07-21T13:38:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the framework is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Extensionframework_method.png]]&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* originalnumber: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* dialnumber: a string that contains the number that gsmd will dial on return (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work.&lt;br /&gt;
# The first relevant extension returns the parameters that it could change (dialnumber and sendid) and also two additional parameters: authorized and authreason.  These two parameters allow for any operation to be blocked by a suitable extension if required.  If the extension handler ever sees a return parameter stating that an operation is not authorized then it will immediately send a suitable reply to the calling method informing it of the lack of authorization along with a text string containing a message suitable to be displayed to an end user explaining why it was not authorized.&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated dialnumber and sendid from the first relevant extension.&lt;br /&gt;
# The second relevant extension returns the parameters that it could change (dialnumber and sendid) and also the authorization parameters as above.&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should update its parameters and carry on with the process of making the call, possibly with different parameters than when it started.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately.&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Extensionframework_method.png</id>
		<title>File:Extensionframework method.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Extensionframework_method.png"/>
				<updated>2007-07-21T13:34:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: Sample method call for extension framework&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample method call for extension framework&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework</id>
		<title>Wishlist/Extension Framework</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Extension_Framework"/>
				<updated>2007-07-21T13:33:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
The extension framework is an application for handling extensions to the core OpenMoko functionality.  It is designed to allow developers to build extensions that can affect the core functionality of the device without requiring extensive knowledge of, or even access to, the code that exists to carry out core functionality.  It also allows for multiple extensions to affect the same core functionality, handling ordering and chaining of the extensions to ensure consistent results.&lt;br /&gt;
&lt;br /&gt;
The rationale behind such a framework is to allow developers to create piecemeal functionality rather than having to alter or extend a large existing piece of code.  Taking an outgoing call as an example there are a number of things that may be required around it, such as:&lt;br /&gt;
&lt;br /&gt;
* only allow certain numbers to be dialed at certain times of the day&lt;br /&gt;
* only allow numbers in the addressbook to be dialed at certain times of the day, or a maximum number of times per day&lt;br /&gt;
* reroute calls using calling cards, low-cost numbers or similar methods&lt;br /&gt;
* reroute calls through a VOIP gateway&lt;br /&gt;
* mask caller ID depending on if the number called is in the addressbook&lt;br /&gt;
* update twitter with the fact that you are attempting to call someone, perhaps with details of the number (or name if they are in the addressbook)&lt;br /&gt;
&lt;br /&gt;
Some of the above features are generally useful and would be expected to be made available in any complete 'phone implementation.  Others are very unlikely to make it in to a core codebase.  But all of them may be useful in a given situation, so for openmoko to be as flexible as possible these all need to be possible.  As such, an extension framework that puts each user in control of what the 'phone will do in any given situation is the only way of providing both the required functionality as well as the core stability and speed that is required.&lt;br /&gt;
&lt;br /&gt;
The extension framework consists of a number of entities, namely the extension manager, the extension configuration GUI and the extension handler.  Each of these are discussed in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
The extension framework is initially aimed at providing a way of extending the core functionality of an OpenMoko device, and even more specifically of extending the abilities of the device in the area of making and receiving 'phone calls.  However, there will be nothing in the design that limits it to handling just this area and indeed the design will allow for any type of extension given the correct method calls within the core code.&lt;br /&gt;
&lt;br /&gt;
Note that the extension framework is not designed to manage GUI updating and interaction, although it is possible it could be used for this it is not designed to be a UI event bus and no consideration is given to this type of fucntionality.&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
&lt;br /&gt;
The extension framework will consist of three main components which will manage various aspects of managing and using the extensions.  These components may or may not be separate processes, although there is a reliability advantage to having the handler separate from the other components.  The names and functions of the three components are:&lt;br /&gt;
&lt;br /&gt;
* The extension manager handles registration and activation of extensions as well as providing them a clean interface to store preference and configuration information.&lt;br /&gt;
* The extension handler carries out the work of receiving method calls to the extension manager, passing them to the relevant extensions and providing a final reply back to the calling method.&lt;br /&gt;
* The extension configuration GUI provides end users with the ability to configure each extension along with altering preferences and enabling/disabling specific features of each extension.&lt;br /&gt;
&lt;br /&gt;
A final component of the extension framework will be a C library will provide extension developers with helper functions to achieve common tasks.  This should allow extensions to be developed as quickly and efficiently as possible.&lt;br /&gt;
&lt;br /&gt;
=== Example of a Method Call with the Framework Handler ===&lt;br /&gt;
&lt;br /&gt;
For the following advantage we assume that gsmd is enabled for the extension framework.  A pictorial representation of the framework is shown in .&lt;br /&gt;
&lt;br /&gt;
#As gsmd gets ready to make a 'phone call it reaches the stage where it has set up all of its parameters and is about to start the process of making a call.  It is at this point that the method call to the extension framework is made, by calling outgoingcall() with the following parameters:&lt;br /&gt;
#* originalnumber: a string that contains the number that gsmd was planning to dial (populated with the number passed in to the function)&lt;br /&gt;
#* dialnumber: a string that contains the number that gsmd will dial on return (populated with the number passed in to the function)&lt;br /&gt;
#* sendid: whether or not to send caller ID (as per system default)&lt;br /&gt;
# When the extension handler receives this method it carries out a lookup of the extensions that are currently registered and active and puts together a list of which extensions should be contacted in which order.  In this case two extensions are returned as being interested in the information, along with the order in which they should be approached.&lt;br /&gt;
# The first relevant extension is contacted and carries out its work.&lt;br /&gt;
# The first relevant extension returns the parameters that it could change (dialnumber and sendid) and also two additional parameters: authorized and authreason.  These two parameters allow for any operation to be blocked by a suitable extension if required.  If the extension handler ever sees a return parameter stating that an operation is not authorized then it will immediately send a suitable reply to the calling method informing it of the lack of authorization along with a text string containing a message suitable to be displayed to an end user explaining why it was not authorized.&lt;br /&gt;
# The second relevant extension is contacted and carries out its work.  Note that the parameters sent to this module include the updated dialnumber and sendid from the first relevant extension.&lt;br /&gt;
# The second relevant extension returns the parameters that it could change (dialnumber and sendid) and also the authorization parameters as above.&lt;br /&gt;
# The extension handler returns the final results in the reply to the calling method.  At this stage gsmd should update its parameters and carry on with the process of making the call, possibly with different parameters than when it started.  It should also confirm that it is authorized to continue with the operation, and if not abort appropriately.&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/External_Feeds</id>
		<title>External Feeds</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/External_Feeds"/>
				<updated>2007-07-21T13:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of blogs written by people in the [[OpenMoko]] community that are not part of the official feed, however can be accessed individually with the URLs below:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Blog Name !! Author !! Description !! Feed&lt;br /&gt;
|-&lt;br /&gt;
|devzero.net          || [[User:Jgm|Jim McDonald]] || Application development (focused on messaging) || http://beta.blogger.com/feeds/6353086131724697255/posts/summary/-/openmoko&lt;br /&gt;
|-&lt;br /&gt;
|unethicalblogger.com || R. Tyler Ballance          || Porting Mono to OpenMoko                       || http://unethicalblogger.com/blog_categories/openmoko/feed&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Jgm</id>
		<title>User:Jgm</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Jgm"/>
				<updated>2007-07-21T13:01:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jim McDonald&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/External_Feeds</id>
		<title>External Feeds</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/External_Feeds"/>
				<updated>2007-07-21T13:01:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of blogs written by people in the [[OpenMoko]] community that are not part of the official feed, however can be accessed individually with the URLs below:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Blog Name !! Author !! Description !! Feed&lt;br /&gt;
|-&lt;br /&gt;
|devzero.net        || [[:User:Jgm|Jim McDonald]]       || Application development (focused on messaging) || http://beta.blogger.com/feeds/6353086131724697255/posts/summary/-/openmoko&lt;br /&gt;
|-&lt;br /&gt;
|unethicalblogger.com        ||                ||  || http://unethicalblogger.com/blog_categories/openmoko/feed&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/External_Feeds</id>
		<title>External Feeds</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/External_Feeds"/>
				<updated>2007-07-21T12:59:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of blogs written by people in the [[OpenMoko]] community that are not part of the official feed, however can be accessed individually with the URLs below:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Blog Name !! Author !! Description !! Feed&lt;br /&gt;
|-&lt;br /&gt;
|devzero.net        || [[User:jgm|Jim McDonald]]       || Application development (focused on messaging) || http://beta.blogger.com/feeds/6353086131724697255/posts/summary/-/openmoko&lt;br /&gt;
|-&lt;br /&gt;
|unethicalblogger.com        ||                ||  || http://unethicalblogger.com/blog_categories/openmoko/feed&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Main_Page"/>
				<updated>2007-07-16T12:46:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: /* Misc. Development Related */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''Welcome to the [[OpenMoko]] public Wiki'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;For other languages see the &amp;lt;/small&amp;gt;[[#bottom|bottom]]&amp;lt;small&amp;gt; of this page.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:FIC-neo1973_small.jpg|200px|right|frontside]]&lt;br /&gt;
[[OpenMoko]] is an [http://en.wikipedia.org/wiki/Open_source Open Source] project to create the world's first free mobile phone operating system.&lt;br /&gt;
&lt;br /&gt;
The [[OpenMoko]] project is a community that anyone can join, to help design their ideal phone.&lt;br /&gt;
&lt;br /&gt;
The long term goal is that phone software won't be tied to any particular phone. You can install any OpenMoko software over the whole range of phones, and if you upgrade your phone, you don't lose the software. Bugs fixed on one phone are fixed on all. To show that OpenMoko the phone stack is not tied to the Neo1973 phone hardware, here is a report from somebody who seems to have OpenMoko [http://blog.mikeasoft.com/2007/07/01/openmoko-on-a-treo-650/ up and limping on the Palm Treo650]!&lt;br /&gt;
&lt;br /&gt;
'''Currently it is not suitable for users.''' The state of the software at the moment is pre-alpha. If you order a Neo1973, DO NOT expect to be able to use it as an everyday phone for several months.&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973]] from [[FIC]] is the first of many phones that [[OpenMoko]] will run on; indeed, some people erroneously use the terms Neo1973 and OpenMoko as interchangeable. If you are willing to have the alpha test experience, you can order Neo1973 hardware now from the [https://direct.openmoko.com/ Openmoko Online Shop]. You may wish to see the [[SH1 FAQ|Shipment 1 FAQ]].&lt;br /&gt;
&lt;br /&gt;
Please join us in collaborating on the [[OpenMoko]] project through any of the [[Development resources | project resources]] including this OpenMoko wiki. Please see the [[Help:Contents | wiki editing help page]] for information on making contributions to this wiki. A [[Meet the Core Team | core team of developers funded by FIC, Inc.]] leads the project.&lt;br /&gt;
&lt;br /&gt;
An [[introduction]] page is available, with [[Introduction#Photos|photos]] and [[Introduction#Videos|videos]].  Moreover, the usual [[FAQ | Frequently Asked Questions, FAQ, page]] might be helpful. Developers may find the [[ChangeLog | daily software change log]] an important resource.&lt;br /&gt;
&lt;br /&gt;
The members of the [[OpenMoko]] community would like to thank [[FIC|FIC Inc.]] for showing leadership and initiating the [[OpenMoko]] project.&lt;br /&gt;
&lt;br /&gt;
== [[OpenMoko]] Areas of Interest ==&lt;br /&gt;
* [[Basic End-user]] - Information for end users that want basic functionality and no surprises&lt;br /&gt;
* [[Advanced End-user]] - Information for advanced end-users that want advanced and experimental functionality but who are not programmers&lt;br /&gt;
* [[Development resources | Project Resources]] page provides a centralized location of all resources such as [[Development resources#Mailing_Lists|mailing lists]], [[Development resources#IRC | communication tools]], and other software development oriented resources.&lt;br /&gt;
* [[Application Developer]] - Information for application developers, including ideas and specifications for applications, and tools to build them&lt;br /&gt;
* [[System Developer]] - Information for system developers, including bootloader, kernel, and libraries&lt;br /&gt;
* [[Hardware Developer]] - Information for hardware developers, including hardware specs and debug board&lt;br /&gt;
* [[Community Events]] - Information on both [[Community Events#Past Events | past ]] and [[Community Events#Past Events#FIC / OpenMoko at Events | future]] events where FIC or [[OpenMoko]] had or will have a presence.&lt;br /&gt;
&lt;br /&gt;
== Developer's Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Hands-on Guides ===&lt;br /&gt;
* [[Getting Started with your Neo1973]]&lt;br /&gt;
* [[MokoMakefile|Building OpenMoko using the MokoMakefile]] &lt;br /&gt;
* [[Building OpenMoko from scratch]]&lt;br /&gt;
** Old [[Building OpenMoko from scratch (pre-BBT)]]&lt;br /&gt;
* [[Migration to bad block tolerant builds]]&lt;br /&gt;
* [[Running OpenMoko on PC]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xoo]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xephyr]]&lt;br /&gt;
** [[How to run OpenMoko Apps on PC]]&lt;br /&gt;
** [[OpenMoko under QEMU]]&lt;br /&gt;
* [[Booting from SD]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Reference Documentation ===&lt;br /&gt;
* All [[:Category:Hardware|Hardware]] related documentation and specifications are found on the [[:Category:Hardware|Hardware page]].&lt;br /&gt;
* The [[:Category:Neo1973 Hardware|Neo1973 Hardware page]] provides an overview of the hardware components used by the [[:Category:Neo1973 Hardware|Neo1973 hardware platform]]. PCB Photographs are also included. A [[Disassembling Neo1973 | photo disassemble story]] may be an interesting starting place.&lt;br /&gt;
* [[:Category:Neo1973 Hardware Debugging | Neo1973 Hardware Debugging]] is assisted with the [[Debug Board | Neo1973 debug board]].   A page discussing [[Connecting Neo1973 with Debug Board v2 | debug board and Neo1973 configurations]] are also provided.&lt;br /&gt;
&lt;br /&gt;
=== Software Reference Documentation ===&lt;br /&gt;
* Architectural&lt;br /&gt;
** [[OpenMokoFramework]] - The OpenMoko Application Framework&lt;br /&gt;
* [[neo1973 host software]]&lt;br /&gt;
* Device Software&lt;br /&gt;
** Low-Level&lt;br /&gt;
*** [[u-boot]] - The bootloader we use, including documentation for our modifications&lt;br /&gt;
*** [[kernel]] - The Linux kernel we use, including documentation for our modifications&lt;br /&gt;
** Userspace&lt;br /&gt;
*** [[binary compatibility]]&lt;br /&gt;
*** [[gsmd]] - the GSM daemon managing the GSM Modem&lt;br /&gt;
*** [[gpsd]] - the AGPS (Assisted GPS) daemon&lt;br /&gt;
&lt;br /&gt;
=== OpenMoko===&lt;br /&gt;
* [[OpenEmbedded]] - The distribution-building framework&lt;br /&gt;
* [[Toolchain]] - The toolchain we use for compilation&lt;br /&gt;
* [[OpenMoko]] - The OpenMoko distribution&lt;br /&gt;
** [[OpenMoko2007]] - The first intended release of it&lt;br /&gt;
** [[Userspace root image]]&lt;br /&gt;
&lt;br /&gt;
==== User Interface Related ====&lt;br /&gt;
* [[Look &amp;amp; Feel]]&lt;br /&gt;
* [[Applications]]&lt;br /&gt;
* [[Widgets]]&lt;br /&gt;
** [[Widget Inheritance Graph]]&lt;br /&gt;
* [[Application UI Design Recommendations]]&lt;br /&gt;
&lt;br /&gt;
=== Misc. Development Related ===&lt;br /&gt;
* [[Freshman todo]]&lt;br /&gt;
* [[Templates]]&lt;br /&gt;
* [[PIM Storage]]&lt;br /&gt;
* [[Coding Guidelines]]&lt;br /&gt;
* [[OpenMoko#Setting_up_an_OpenMoko_SDK|How to setup the OpenMoko SDK]]&lt;br /&gt;
* [[License]] - How we license our code&lt;br /&gt;
* [[Development resources]] - Describes resources for developers (lists, svn, ...)&lt;br /&gt;
* [[Neo1973 Phase 0]] -- Information for Phase 0 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P0 Review]] -- Impressions of the Phase 0 hardware device, also the Phase 0 FAQ&lt;br /&gt;
* [[Neo1973 Phase 1]] -- Information for Phase 1 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P1 Review]] -- Impressions of the Phase 1 hardware device&lt;br /&gt;
* [[External Feeds]] -- List of feeds from people blogging about OpenMoko&lt;br /&gt;
&lt;br /&gt;
== Administrative / Organizational ==&lt;br /&gt;
&lt;br /&gt;
* [[Shipping Notes]] - Information to help FIC figure out how to ship products to you, and how much it might cost.&lt;br /&gt;
* [[My Account]] - Ideas for what sort of account-based services FIC should provide with the phone.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
* [[WiFi support in OpenMoko]]&lt;br /&gt;
* [[Neo1973 and Windows]] - If you want to commit that offence ;)  (does not work, help!)&lt;br /&gt;
* [[Press Coverage]] - What the press says about the OpenMoko project&lt;br /&gt;
* [[mFAQ]] - The OpenMoko Misinformation FAQ ('''mFAQ''') - What the press '''''incorrectly''''' says about the OpenMoko project&lt;br /&gt;
* [[Wish List]] - A collection of ideas and ideals we'd like to see implemented some day&lt;br /&gt;
* [[Wish List - Hardware]] - A collection of ideas we'd like to see in the next Neo release&lt;br /&gt;
* [[Wishlist:BuiltInScriptingLanguage|Wish List - Built-in Scripting Language]] - Discussion on a suitable scripting language to be included&lt;br /&gt;
* [[Media Content]] - What types of media on the device can we use (that is non-software)?&lt;br /&gt;
* [[Testimonials]] - How did you get to OpenMoko?&lt;br /&gt;
* [[Buying Interest List]] - (Not official and not a pre-order page) Have you have put money aside for Neo1973? Put your nick here.&lt;br /&gt;
* [[iPhone]] -  Comparison between Apple iPhone and FIC Neo1973&lt;br /&gt;
* [[Translation]] -  Translation of OpenMoko&lt;br /&gt;
* [[Summer of code]] - Our page with project applications for Googles Summer of Code&lt;br /&gt;
* [[SWAG]] - Where to purchase openmoko swag (T-Shirts!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{Languages|Main_Page}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:Categories| ]]&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/External_Feeds</id>
		<title>External Feeds</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/External_Feeds"/>
				<updated>2007-07-16T12:37:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jgm: External blog feeds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of blogs written by people in the [[OpenMoko]] community that are not part of the official feed, however can be accessed individually with the URLs below:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Blog Name !! Author !! Description !! Feed&lt;br /&gt;
|-&lt;br /&gt;
|devzero.net        || Jim McDonald               || Application development (focused on messaging) || http://beta.blogger.com/feeds/6353086131724697255/posts/summary/-/openmoko&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jgm</name></author>	</entry>

	</feed>