Otevřený chytrý telefon s Linuxem - Openmoko Neo FreeRunner

13. ledna 2010

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: 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í, 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

Články na podobné téma

Nette security bug CVE-2020-15227
Jak porovnat dvě stejné databáze?
REST API: API platform
Vlastní web a mail hosting se softwarem ISP Config
Programovní v SQL: PostgreSQL, MySQL/MariaDB
HTTPS: zabezpečený web
NoSQL databáze Mongo DB
Linux a MS SQL server
Co je pracovní náplň programátora
Lokalizace aplikací v jazyce Python
Jaký mail a web hosting vybrat
How to make wireless low power Arduino
Digispark - Programujte mikrokontrolér Atmel ATtiny pomocí Arduino IDE
Program Roulette
Vývoj pro procesory ARM s Arduino IDE
Wireless low power Arduino
Pyradio - Python program for receive Internet radio with text user inteface
UPS monitor pro Android
Bezdrátový bateriově napájený WiFi teploměr
Jak programovat WiFi procesor ESP8266
Comparison IQRF vs Wireless Arduino
Jakou platformu zvolit pro eshop? Například Prestashop
Development kits and gateways for wireless platform IQRF

OpenStreetMap a GPS trasy v mapě na webu
Quickplay
Java program pro přehledné monitorování záložních zdrojů
Čipové kontaktní a bezkontaktní karty Java Card OpenPlatform
Vývoj pro bezdrátové moduly s procesorem PIC pod GNU/Linux - IQRF
Grafický program pro embeded/mobilní zařízení na vyhledávání dopravního spoje.
O programování a ruzné programy v jazyce Java, Python a dalších
Java program a applet Kalkulačka
Java program na výpočet kvadratické rovnice