Erlang Userland for OpenMoko

The following is text from my user page on the OpenMoko wiki, which is now sadly read-only and largely defunct. In 2007, I bought a phase-1 Neo1973; I gave it away in 2010 or 2011.

Tony Garnock-Jones, tonygarnockjones@gmail.com.

I own a phase-1 Neo1973.

Erlang Userland

I’m running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).

  • “git clone git://github.com/tonyg/erlang-oe.git” for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages
  • “git clone git://github.com/tonyg/erlang-serial.git” to track the serial-port erlang interface program
  • “git clone git://github.com/tonyg/erlang-openmoko.git” to track my userland (gsmd/dialer etc) code

A screenshot, not that the GUI is worth anything - the value of the approach is in the lower-level “model”/business-logic part (the gsmd/neod equivalent): Screenshot of Erlang OpenMoko GUI


See the README for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.

Core (non-UI):

  • Clean(ish) API for scripting phone functionality (in Erlang)
  • Takes calls, makes calls, reliably enough for me to use as an everyday phone
  • Sends, receives, archives SMSes
  • DTMF send support during a call
  • Battery and charge-state monitoring
  • Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)
  • Powers GSM modem off when the phone is shut down
  • About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves

Non-GUI user interface:

  • Plays an mp3/ogg file and vibrates when ringing
  • Vibrates on SMS receive
  • Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)
  • Press “power” to activate screen lock; press “aux” to release screen lock

GUI user interface:

  • Really, really, really ugly.
  • Dims screen on user inactivity
  • Blanks screen and locks touchscreen on further inactivity
  • Very basic addressbook
  • Very basic SMS compose/display facility (no T9 yet)
  • Very basic dialer

gsmhandset.state echoes your own voice

I’ve a tentative fix for this - here’s the patch against gsmhandset.state. The alsamixer setting is labelled “Bypass” in the UI, and it’s way over to the right, just after the “Amp …” settings and just before “DAI Mode”.

--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000
@@ -55,8 +55,8 @@
        comment.range '0 - 7'
        iface MIXER
        name 'Bypass Playback Volume'
-		value.0 5
-		value.1 5
+		value.0 0
+		value.1 0
    control.7 {
        comment.access 'read write'