Aphasia Development Tutorial
From Openmoko
(→Configure gpsd and ser2net) |
|||
Line 128: | Line 128: | ||
Screencast [http://www.kvamme.se/Aphasia/Erlang_files/battery.mov here] | Screencast [http://www.kvamme.se/Aphasia/Erlang_files/battery.mov here] | ||
+ | |||
+ | === Install SciTE === | ||
+ | Download from here http://www.scintilla.org/SciTE.html and install. If you have apt-get it can be as easy as | ||
+ | <pre> | ||
+ | sudo apt-get install scite | ||
+ | </pre> | ||
+ | |||
+ | === Seting up SciTE for openmoko development === | ||
+ | Before you start configuring SciTE, make sure ssh, scp and rsh works from a terminal window. | ||
+ | I have to run this script whenever I connect the neo to the host | ||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | ifconfig usb0 192.168.0.200 netmask 255.255.255.0 | ||
+ | /sbin/route add -host 192.168.0.202/32 dev usb0 | ||
+ | echo 1 > /proc/sys/net/ipv4/ip_forward | ||
+ | iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 | ||
+ | iptables -P FORWARD ACCEPT | ||
+ | </pre> | ||
+ | |||
+ | Start SciTE and select menu Options|Open Global Options and uncomment | ||
+ | <pre> | ||
+ | #Erlang|erl||\ | ||
+ | </pre> | ||
+ | and at other lines where erlang is a comment. You may have to start SciTE as root to do this. (To uncomment you just delete the hash at the beginning of the line). | ||
+ | |||
+ | Create a file named SciTE.properties in your erlang source directory. | ||
+ | <pre> | ||
+ | # SciTE.properties is the per directory local options file and can be used to | ||
+ | # override settings made in SciTEGlobal.properties, SciTEUser.properties and | ||
+ | # SciTEDirectory.properties. | ||
+ | command.compile.*.erl=erlc $(FileName).erl | ||
+ | command.go.subsystem.*.erl=0 | ||
+ | command.go.*.erl=erl -noshell -s $(FileName) start | ||
+ | command.subsystem.1.*.erl=0 | ||
+ | command.name.1.*.erl=svn update | ||
+ | command.1.*.erl= svn update $(FileNameExt) | ||
+ | command.name.2.*.erl= svn ci | ||
+ | command.2.*.erl= svn ci -m '$(4)' $(FileNameExt) | ||
+ | command.name.3.*.erl=svn co | ||
+ | command.3.*.erl=*svn co $(1) | ||
+ | command.name.4.*.erl=svn status | ||
+ | command.4.*.erl= svn status | ||
+ | command.name.5.*.erl=hot code loading | ||
+ | command.5.*.erl=erl -noshell -setcookie SFEWRG34AFDSGAFG35235 -name moko2@192.168.0.200 -eval "net_adm:ping('neo@192.168.0.202'), c:nl($(FileName))." -s init stop | ||
+ | command.subsystem.6.*.erl=0 | ||
+ | command.name.6.*.erl=copy to neo1973 | ||
+ | #command.6.*.erl= scp $(FileName).beam phone:/root/erlang/trunk/ #Debian | ||
+ | command.6.*.erl= scp $(FileName).beam phone:/home/root/trunk/ | ||
+ | command.subsystem.7.*.erl=0 | ||
+ | command.name.7.*.erl=add to subversion | ||
+ | command.7.*.erl= svn add $(FileNameExt) | ||
+ | command.subsystem.8.*.erl=0 | ||
+ | command.name.8.*.erl=stop X | ||
+ | command.8.*.erl= rsh root@192.168.0.202 /etc/init.d/xserver-nodm stop | ||
+ | #command.8.*.erl= rsh root@192.168.0.202 /etc/init.d/zhone-session stop #Debian | ||
+ | command.subsystem.9.*.erl=0 | ||
+ | command.name.9.*.erl=start | ||
+ | command.9.*.erl= rsh root@192.168.0.202 /etc/init.d/xserver-nodm start | ||
+ | #command.9.*.erl= rsh root@192.168.0.202 /etc/init.d/zhone-session start #Debian | ||
+ | abbreviations.*.erl=$(SciteUserHome)/erl_abbrev.properties | ||
+ | line.margin.visible=1 | ||
+ | line.margin.width=2+ | ||
+ | style.*.33 | ||
+ | </pre> | ||
[[Category:Application Developer]] | [[Category:Application Developer]] |
Revision as of 10:38, 17 July 2009
Contents |
Installation
OpenWrt
Aphasia sits on the OpenWrt platform. It's very configurable, and light on system resources. There's a great forum at [1]
Go to OpenWrt, section Build custom image and follow the instructions. When you are at the point Configure target and packages you have to do some choises. Here is the minimum installation for Aphasia:
make menuconf OpenWrt Kamikaze (r16871) Configuration Target System (Samsung S3C24xx [2.6]) ---> Samsung S3C24xx [2.6] Target Profile (Openmoko GTA-02 (minimal)) ---> Openmoko GTA-02 (minimal) [*] Image configuration ---> (192.168.0.202) LAN IP Address Xorg ---> app ---> <*> xauth Xorg ---> driver ---> <*> xf86-input-tslib Xorg ---> driver ---> <*> xf86-video-glamo Xorg ---> font ---> <*> dejavu-fonts-ttf Network ---> <*> gpsd Network ---> <*> ser2net Phone ---> <*> freerunner-alsa-scenarios Utilities ---> <*> alsa-utils Utilities ---> <*> bash Extra packages ---> <*> zoneinfo-europe Sound ---> <*> lame Sound ---> <*> madplay Languages ---> <*> erlang
Configure gpsd and ser2net
To autostart ser2net and gpsd insert a line in /etc/init.d/httpd, last line in desktop section:
desktop() { config_foreach system_config system hostname="${hostname:-OpenWrt}" unset args config_load httpd [ "$?" != "0" ] && { uci_set_default httpd <<EOF config 'httpd' option 'port' '80' option 'home' '/www' EOF config_load httpd } config_foreach httpd_config httpd /usr/sbin/ser2net ; /usr/sbin/gpsd /dev/ttySAC1 }
Open /etc/ser2net.conf and replace all port examples at the very end with this single line:
2001:raw:0:/dev/ttySAC0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL RTSCTS
Install the GUI package ex11
Take a look at this example of what you can do with ex11 [2] Take the file at http://projects.openmoko.org/frs/download.php/753/ex11_lib.tgz and unzip it in your source directory.
In file /root/.profile
export DISPLAY=:0
In file /etc/hosts remove . (dot) at the end of line localhost.
127.0.0.1 localhost
In file /root/.erlang
io:format("Running Erlang from root~n"). code:add_patha("/root/trunk").
I keep my erlang source in /root/trunk
Copy Xauthority from host
scp .Xauthority phone:/root
Add localhost to it with xauth
xauth add OpenWrt/unix:0 MIT-MAGIC-COOKIE-1 cfcc5ef98f9718f90154f355c0ae9f62 exit cp .Xauthority /
Runtime Environment
Include erlang VM in the boot process, simply add a line to /etc/init.d/x11 right after Xorg:
start() { export DISPLAY=":0" config_load x11 Xorg $ARGS & erl -setcookie SFEWRG34AFDSGAFG35235 -name neo@192.168.0.202 -noshell -pa /root/trunk -s main start > debug.txt }
Graphics
I'm using vector graphics to produce new widgets. Vector graphics is lightweight and programmable, easy to scale and rotate, and the bytesize is small. Use any vector-capable drawing application. I happen to use AutoCAD LT on Wine, but please suggest an open source alternative and I will be happy to create another small conversion program to translate the new drawing file to erlang source. If you have access to AutoCAD, take dxf2erl.erl from here
Drawing a widget in AutoCAD LT
Screencast here
Convert drawing to erlang source
Screencast here
Install SciTE
Download from here http://www.scintilla.org/SciTE.html and install. If you have apt-get it can be as easy as
sudo apt-get install scite
Seting up SciTE for openmoko development
Before you start configuring SciTE, make sure ssh, scp and rsh works from a terminal window. I have to run this script whenever I connect the neo to the host
#!/bin/bash ifconfig usb0 192.168.0.200 netmask 255.255.255.0 /sbin/route add -host 192.168.0.202/32 dev usb0 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 iptables -P FORWARD ACCEPT
Start SciTE and select menu Options|Open Global Options and uncomment
#Erlang|erl||\
and at other lines where erlang is a comment. You may have to start SciTE as root to do this. (To uncomment you just delete the hash at the beginning of the line).
Create a file named SciTE.properties in your erlang source directory.
# SciTE.properties is the per directory local options file and can be used to # override settings made in SciTEGlobal.properties, SciTEUser.properties and # SciTEDirectory.properties. command.compile.*.erl=erlc $(FileName).erl command.go.subsystem.*.erl=0 command.go.*.erl=erl -noshell -s $(FileName) start command.subsystem.1.*.erl=0 command.name.1.*.erl=svn update command.1.*.erl= svn update $(FileNameExt) command.name.2.*.erl= svn ci command.2.*.erl= svn ci -m '$(4)' $(FileNameExt) command.name.3.*.erl=svn co command.3.*.erl=*svn co $(1) command.name.4.*.erl=svn status command.4.*.erl= svn status command.name.5.*.erl=hot code loading command.5.*.erl=erl -noshell -setcookie SFEWRG34AFDSGAFG35235 -name moko2@192.168.0.200 -eval "net_adm:ping('neo@192.168.0.202'), c:nl($(FileName))." -s init stop command.subsystem.6.*.erl=0 command.name.6.*.erl=copy to neo1973 #command.6.*.erl= scp $(FileName).beam phone:/root/erlang/trunk/ #Debian command.6.*.erl= scp $(FileName).beam phone:/home/root/trunk/ command.subsystem.7.*.erl=0 command.name.7.*.erl=add to subversion command.7.*.erl= svn add $(FileNameExt) command.subsystem.8.*.erl=0 command.name.8.*.erl=stop X command.8.*.erl= rsh root@192.168.0.202 /etc/init.d/xserver-nodm stop #command.8.*.erl= rsh root@192.168.0.202 /etc/init.d/zhone-session stop #Debian command.subsystem.9.*.erl=0 command.name.9.*.erl=start command.9.*.erl= rsh root@192.168.0.202 /etc/init.d/xserver-nodm start #command.9.*.erl= rsh root@192.168.0.202 /etc/init.d/zhone-session start #Debian abbreviations.*.erl=$(SciteUserHome)/erl_abbrev.properties line.margin.visible=1 line.margin.width=2+ style.*.33