MENU

Jak jednoduše a efektivně programovat pro Neo FreeRunner

Díky systému postavenému na Linuxu, GNU a dalších svobodných projektech, se dá programovat v mnoha jazycích a použít mnoho knihoven pro výsledný program a při využití moderních mobilních komponent je to hračka.
Programovat se dá samozřejmě v jazyce C/C++, který je hojně rozšířený a pro zařízení jako je Neo FreeRunner je vhodný, protože výsledný program bývá rychlejší.
Zajímavou možností je nový jazyk Vala, který v mnohém usnadňuje práci oproti C++ a přitom výsledný program je skoro stejně rychlí jako v C++, protože je také kompilován do nativního kódu procesoru.

Vzhledem k tomu, že chceme rychle a jednoduše začít programovat, bez získaní a nastavení nějakých vývojových prostředků, které jsou specifické pro naše zařízení, jakou jsou například knihovny a kompilátor, tak zvolíme programovací jazyk Python. Tento programovací jazyk je skriptovací a tudíž překládán až za běhu, tudíž je možné programovat i v tom nejobyčejnějším editoru a v libovolném OS (třeba i na Windows v Notepadu :-D) . Zároveň se v něm dá vyvíjet jednodušeji než třeba v C.

Ovládání periferií a dalšího HW se dá jednoduše pomocí DBUSu.
Pro grafické programy je v SHR preferován toolkit Elementary (OpenMoko wiki Elementary) ,který je přizpůsobený pro mobilní zařízení s malým dotykovým displejem.
Program v Pythonu se dá bez úprav rovnou testovat na FreeRunneru. Jak jednoduše přesunout upravené soubory? Nakonec jsem dospět k řešení, kdy pomocí NFS přimountuji adresář z desktopu, který obsahuje vyvíjený projekt, tak vlastně není potřeba nic kopírovat ;-) .

Uživatelka slečna Neo:
slecna Neo

Ovládat FreeRunner se dá úplně jednoduše např i z konzole pomocí Bashe a za pomoci programu mdbus (nebo mdbus2)
Služby poskytované naším systémem můžeme zjistit příkazem:

mdbus -s
Jaké objekty poskytuje konkrétní služba zjistíme příkazem:
mdbus -s org.freesmartphone.odeviced
A pak už můžeme volat metody jednotlivých objektů dané služby. Například rozblikat červené AUX tlačítko, můžeme úplně jednoduše tímto jedním příkazem:
mdbus -s org.freesmartphone.odeviced     \
  /org/freesmartphone/Device/LED/gta02_aux_red \
  org.freesmartphone.Device.LED.SetBlinking  100 100
Blikání pak vypneme:
mdbus -s org.freesmartphone.odeviced   \
  /org/freesmartphone/Device/LED/gta02_aux_red   \
  org.freesmartphone.Device.LED.SetBrightness 0


V Pythonu se pak LEDky dají ovládat např takto:

#!/usr/bin/env python
#! coding:utf8
'''
Created on 11.3.2010
@author: Josef 'multi' Jebavý
mail: josef dot jebavy at gmail.com
web: http://multi.xeres.cz
'''

import   dbus

def getDbusObject (bus, busname , objectpath , interface):
        dbusObject = bus.get_object(busname, objectpath)
        return dbus.Interface(dbusObject, dbus_interface=interface)
    
    
led = getDbusObject (dbus.SystemBus(),
                          "org.freesmartphone.odeviced", 
                          "/org/freesmartphone/Device/LED/gta02_aux_red",
                           "org.freesmartphone.Device.LED") 
#led.SetBrightness(200)
led.SetBlinking(200,400)
#    * SetBrightness
#    * SetBlinking
#    * BlinkSeconds
#    * SetNetworking

Další jednoduché programy, které mohou sloužit jako vzor:
Vzorový grafický program v Pythonu s použitím Elementary.
Program pro ovládání diod.
Program pro ovládání USB módu.
Program, který detekuje příchozí/odchozí/.. volání, verze jak pro Elementary tak pro GTK.

Více viz dokumentace k FSO frameworku, který zprostředkovává tuto komunikaci s HW, voláním, kontakty a provádí další věci.

Debugboard pro OpenMoko Neo Freerunner

Konečně se mě dostal do rukou debugboard pro OpenMoko Neo Freerunner. Takže se těším na zimu, období dlouhých večerů, kdy člověku nemůže tolik ven a tak má více času na hackovaní. Pomocí této speciální desky, se dá absolutně perfektně hackovat FreeRunner na nejnižší úrovni. Já plánují zatím pouze využít SPI výstupy a propojit FreeRunner přímo s IQRF modulem. Nakonec proč připojovat zařízení pomocí USB, když se dá modulek připojit přímo? Neboť USB není u IQRF nativní rozhraní, tak je navíc potřeba na obou stranách další USB hardware. Ve výsledku se tak ušetří dva kusy USB řadiče a navíc nebude potřeba USB ovladač. Pro každodenní použití by se pak modulek dal zadělat přímo do mobilu.
Samozřejmě toto řešení pak půjde portovat i na tablet TouchBook, který má též SPI linku a rozhodně dostatek místa uvnitř.
Prostě čistší řešení, než když se k FreeRunneru připojí IQRF modul pomocí IQRF develop boardu nebo simple low cost comunication boardu.
openmokodebugboard




Flattr this



Ověřit CSS!