Premium

Získejte všechny články
jen za 89 Kč/měsíc

Programování pro PalmOS počítače krok za krokem (5)

Povíme si o tom, jak operační systém PalmOS spouští programy, a pak zkusíme dát všechno, co jsme doteď probrali, dohromady a vytvoříme první program, který sice nebude dělat vůbec nic, ale zato to bude dělat správně :-)

1.9 Spuštění programu na Palm Pilotovi

Na počítačích vybavených operačním systémem PalmOS může být v každém okamžiku spuštěna jen jedna aplikace. Při používání Palm Pilota to sice vypadá, jako bychom se mohli mezi jednotlivými aplikacemi přepínat, ale to je jen zdání vyvolané tím, že si aplikace ukládá do paměti stav, ve kterém jsme ji opustili. Pokud tedy máte spuštěný MemoPad a stisknete tlačítko spouštějící aplikaci DateBook, dojde k následující posloupnosti akcí:

  1. Aplikace MemoPad dostane příkaz skončit,
  2. takže uloží rozdělaný text, pozici kursoru a kategorii
  3. a skončí.
  4. Je spuštěna aplikace DateBook,
  5. proto nahraje datum a aktuální pohled na něj, aby měl uživatel pocit rozdělané práce
  6. a zobrazí jej.

O tom, jak PalmOS sdělí aplikaci, že má skončit, si povíme později; teď je pro nás zajímavější se dozvědět, jak jsou aplikace spuštěny a co je k tomu zapotřebí.

Funkce PilotMain()

Vstupním bodem vašeho programu (podobně jako je v jazyce C/C++ funkce main()) je při psaní aplikací pro PalmOS funkce PilotMain(). Operační systém volá tuto funkci, když uživatel spustí aplikaci dotekem pera na ikoně nebo hardwarovým tlačítkem. Funkce PilotMain() je však volána i v řadě jiných případů: například když si uživatel přeje najít nějaká data pomocí globálního vyhledávání, jsou postupně spuštěny všechny aplikace (jsou volány všechny funkce PilotMain() všech aplikací) a dostanou možnost přidat do seznamu nalezených záznamů svá data. Podobně když uživatel změní čas nebo datum, tak jsou volány všechny aplikace (funkce PilotMain() všech aplikací) a dostanou možnost na tuto změnu zareagovat. Prototyp funkce PilotMain() je:

UInt32 PilotMain(UInt16 cmd, void *cmdPBP, UInt16 launchFlags);
ParametrVýznam
cmd Kód spuštění programu, kterým operační systém informuje naši aplikaci o důvodu, proč byla její funkce PilotMain() zavolána. Kódy spuštění jsou uvedeny hned v následující tabulce.
cmdPBP Ukazatel na blok parametrů předaný programu. Při normálním spuštění aplikace uživatelem můžete tento parametr bezpečně ignorovat.
launchFlags Doplňující informace předaná programu, která jej -- v situaci, kdy je funkce PilotMain() volána přímo operačním systémem bez vědomí uživatele -- informuje o tom, zda jsou dostupné a inicializované globální proměnné, zda může program komunikovat s uživatelem prostřednictvím grafického rozhraní apod. Při normálním spuštění aplikace uživatelem můžete tento parametr bezpečně ignorovat.
návratová hodnota Funkce PilotMain() vrací následující hodnoty:
  • 0 - volání funkce PilotMain() skončilo bez chyb
  • != 0 - číslo chyby (čísla chyb budou probrána v některé z následujících kapitol)

Prototyp funkce PilotMain()a kódy spuštění jsou definovány v souboru SystemMgr.h.

Nejdůležitější věcí, kterou musíte v jakékoliv aplikaci ve funkci PilotMain() udělat, je zkontrolovat parametr cmd. Pokud zjistíte, že je funkce PilotMain() volána na přání uživatele (hodnota parametru cmd je sysAppLaunchCmdNormalLaunch), můžete spustit program. Dokud parametr cmd neotestujete, nemůžete vědět, za jakých okolností a proč volá systém funkci PilotMain(), ani zda můžete používat uživatelské rozhraní nebo globální proměnné. Časem začneme různé nestandardní kódy spuštění aplikace využívat; pro prvních několik aplikací, které napíšeme, nás ale bude zajímat jen ten první z následující tabulky kódů spuštění programu:

Kód spuštěníVýznam
sysAppLaunchCmdNormalLaunch Normální start programu způsobený tím, že uživatel spustil program ukázáním na jeho ikonu, přes klávesovou zkratku nebo hardwarové tlačítko. Parametry cmdPBP a launchFlags je možné bezpečně ignorovat.
sysAppLaunchCmdAlarmTriggered Funkce PilotMain() je spuštěna s tímto kódem spuštění několik málo vteřin před vypršením času, na který má aplikace nastavený čas spuštění (probuzení). Při tomto volání se aplikace nesmí příliš dlouho zdržovat - může udělat jen něco velmi rychlého a stejně rychle skončit. Například aplikace DateBook využívá toto volání ke krátkému pípnutí.
sysAppLaunchCmdDisplayAlarm Aplikace je s tímto kódem spuštění aktivována v čase, který si předem nastavila (třeba jako budík), a může zobrazit okno s upozorněním pro uživatele. Na rozdíl od volání s předchozím kódem spuštění se můžeme nyní ve funkci PilotMain() zdržet delší dobu - přehrát melodii, počkat na potvrzení uživatelem apod.
sysAppLaunchCmdCountryChange Uživatel změnil v nastavení Palm Pilota jméno a údaje o zemi. Všechny aplikace dostanou pomocí tohoto volání možnost na tuto změnu zareagovat.
sysAppLaunchCmdExgAskUser Takto je aplikace spuštěna, když prostřednictvím infračerveného spojení přijdou data (beaming). Podle hodnoty, kterou funkce PilotMain() vrátí, jsou pak data buď přijata, nebo odmítnuta.
sysAppLaunchCmdExgReceiveData Funkce PilotMain() je spuštěna, protože jsou prostřednictvím infračerveného spojení přijata data určená pro příslušnou aplikaci.
sysAppLaunchCmdFind Aplikace je po stisknutí hardwarového tlačítka pro globální vyhledávání volána s požadavkem na vyhledání textového řetězce, který uživatel zadal, a může přidat do seznamu nalezených záznamů odkazy na svá data.
sysAppLaunchCmdGoto Aplikace je spuštěna s požadavkem na zobrazení příslušného záznamu, jehož index je funkci PilotMain() předán. Takto je funkce PilotMain() volána například tehdy, pokud uživatel ukáže při globálním vyhledávání na záznam, který patří příslušné aplikaci.
sysAppLaunchCmdInitDatabase Příkaz pro inicializaci databáze během procedury HotSync.
sysAppLaunchCmdLookup Aplikace je spuštěna s požadavkem na vyhledání některého záznamu. Na rozdíl od sysAppLaunchCmdFind může vyhledávat interaktivně.
sysAppLaunchCmdNotify Aplikace si může vyžádat upozornění na některé systémové události. Upozornění je jí zasláno voláním funkce PilotMain() s tímto parametrem. Funguje pouze tehdy, je-li tato funkce v systému implementována.
sysAppLaunchCmdSaveData Požadavek na uložení dat (často rozesílaný všem aplikacím před požadavkem na vyhledání řetězce).
sysAppLaunchCmdSyncNotify Aplikace je volána po skončení procedury HotSync, protože byla změněna její data.
sysAppLaunchCmdSystemReset S tímto kódem jsou volány všechny aplikace před restartem systému.
sysAppLaunchCmdTimeChange Aplikace je volána při změně systémového data a času.
sysAppLaunchCmdSystemLock Toto je kód, se kterým je volána aplikace zabezpečující soukromá data při požadavku na zamknutí systému. Naše aplikace by měla zpracovat tenhle kód jen tehdy, pokud nahrazuje vestavěnou aplikaci Security.

Struktura funkce PilotMain() programu, který reaguje pouze na spuštění uživatelem (a to budou v prvních pěti kapitolách všechny naše programy), je v následujícím rámečku:

Program NIC

Nyní je tedy čas vytvořit náš první nicnedělající program. Potřebujeme k tomu následujících několik souborů:

  1. ikonu - zatím jsme o formátu ikon nemluvili, ale napravíme to v dalši kapitole - ikona je černé kolečko 24 × 24 bodů uložené v černobílém obrázku velikosti 32 × 32 bodů:
  2. registrovaný kód pro jednoznačnou identifikaci aplikace (použijeme kód 'NECO, který již je registrován pro aplikace z této knihy)
  3. musíme napsat základní část souboru prostředků aplikace (o jehož formátu a obsahu bude velká část příští kapitoly), která definuje ikonu a jméno aplikace, a její verzi
  4. napsat vlastní zdrojový text programu, ve kterém uvedeme funkci PilotMain() a ohlídáme kód spuštění programu
  5. vytvořit soubor Makefile podle návodu, který byl uveden v této kapitole
  6. nakonec pomocí příkazu make zahájit překlad aplikace
  7. pokud překlad proběhne bez chyby, můžeme aplikaci nainstalovat do Palm Pilota nebo emulátoru POSE a podívat se, že nedělá skutečně vůbec nic.

POZOR: Před instalací jakékoliv vaší právě napsané aplikace na Palm Pilota zazálohujte všechna data i tehdy, pokud jste ji předtím desetkrát zkoušeli v emulátoru a pokaždé fungovala bez chyb.

Soubor prostředků aplikace

Z úvodu této kapitoly plyne, že v souboru prostředků aplikace musí být uvedeny alespoň:

  • ikona
  • jméno aplikace
  • číslo verze
  • jednoznačná identifikace aplikace

Příště si řekneme o souboru prostředků aplikace něco víc; nyní jej tu jen uvedu v plném znění:

Zdrojový text programu

Komentovaný zdrojový text programu, který uvádíme, využívá doporučení vývojářů společnosti Palm, Inc. ohledně členění na pomocné funkce. Kromě funkce PilotMain() tedy definujeme ještě tři následující funkce, které budou (ať už budou nebo nebudou využity) součástí každého našeho programu:

  1. ZacatekProgramu() - do této funkce později soustředíme všechny příkazy pro inicializaci programu: otevření databází, nahrání dynamických knihoven, kontrola verze systému, výběr prvního zobrazeného formuláře. Pokud tato funkce vrátí hodnotu různou od nuly, budeme ji považovat za chybový kód a skončíme program.
  2. KonecProgramu() - tato funkce bude protipól funkce předchozí. Bude volána těsně před ukončením programu. Součástí této funkce bude zavření databází, uvolnění dynamických knihoven apod..
  3. ZpracovaniUdalosti() - bude základní funkce programu. Jejím obsahem bude smyčka pro obsluhu systémových událostí a jejich využití pro ovládání našeho programu. Podrobnosti o této funkci si uvedeme v následující kapitole; zatím tato funkce zůstane prázdná.

Zdrojový text hlavního souboru zdrojového textu je uveden v následujícím rámečku:

soubor Makefile

S trochou fantazie a po přečtení této kapitoly byste už měli být schopni napsat soubor Makefile sami. Zkuste to. Připomenu jen následující:

  • Zdrojový text programu je v souboru nic.c, soubor prostředků aplikace se jmenuje nic.rcp.
  • Výstupem překladače bude objektový soubor nic.o, po spojení s knihovnami vznikne soubor nic (bez přípony).
  • Pro vytvoření aplikace ze souborů *.grc (kód programu) a *.bin (prostředky) použijte buď popsaný trik se soubory bin.hotovo a grc.hotovo (nebo zkuste vymyslet, jak to udělat jinak - napovím vám: program m68k-palmos-obj-res vždy vytváří soubor code000.jméno_aplikace.grc).
  • nakonec doporučuji uvést "falešný cíl" pro vymazání všech souborů příkazem make uklid

Popsaný soubor Makefile v celé své kráse je v následujícím rámečku:

Přeložíme naši první aplikaci

Teď už zbývá se jen přesunout do adresáře, kde máme soubory ikona.bmp, nic.c, nic.rcp a Makefile, a napsat příkaz:

        make

a po několika vteřinách se -- pokud jsme neudělali chybu -- vytvoří soubor nic.prc, ve kterém bude náš první program. Tento soubor můžete vyzkoušet v emulátoru POSE - zjistíte, že skutečně při svém spuštění neudělá nic.

Pokud si budete přát vymazat všechny dočasné soubory z adresáře, ve kterém proběhl překlad, napište

        make uklid

a všechny pomocné soubory (objektové - *.o, součásti souboru aplikace - *.grc a *.bin, naše pomocné soubory *.hotovo a soubor bez přípony (nic), ve kterém je kód programu spojený s knihovnami) budou smazány.


Příště si uvedeme, jak PalmOS komunikuje s naší aplikací - metodu "zpracování událostí", popíšeme si některé funkce pro zpracování událostí, a dozvíme se, jak udělat první program, který dělá alespoň něco - zobrazí vaši fotku na displeji Palm Pilota.

Autor:

Nejčtenější

Legendární hodinky se vracejí. Vydrží 30 dní a displej bude stále vidět

Před lety to byl velký hit, ale pak značku pohltili giganti a Pebble zaniklo. Nyní se její zakladatel vrací s dvojicí modelů pod novou značkou Core. Vydrží dlouho na příjmu, mají stále viditelný...

Revoluční véčko může změnit celý trh. Huawei zase předběhl konkurenci

Huawei představil nové véčko Pura X. Zavřené se používá na šířku, otevřené na výšku. Především však má jiný poměr stran, který zásadně mění celou koncepci moderních véček. Místo dlouhé nudle je zde...

Vábničky operátorů klesly hluboko pod pětistovku. U jedné se musíte hlídat

Ani v současnosti není problém pořídit si tarif za méně než pět set korun, byť jde v případě standardních nabídek mobilních operátorů o ojedinělý případ. Nicméně aktuálně lze měsíční náklady za...

Postavili jsme iPhone 16e proti nečekanému soupeři. Má cenu připlácet?

Jsou to smartphony, které mimo jiné cílí na mladší zákazníky. Každý na to jde ale úplně jinak a iPhone díky svému přístupu má vlastně širší záběr. Nothing dovede být zajímavou cool alternativou s...

Pixely nechali jezdit měsíce metrem. Měly tam důležité poslání

Smartphony v sobě skrývají řadu užitečných senzorů. Právě díky nim vybrané top modely umějí třeba i detekovat dopravní nehodu a následně přivolat pomoc. Google, který je průkopníkem této funkce, nyní...

Zachyťte pohyb či emoci ve svém životě a vyhrajte smartphone vivo

Soutěž

Zachyťte styl a energii ve svém životě a vyhrajte smartphonové novinky vivo. Nejlepší snímky vyberou čtenáři iDNES.cz v hlasování. Autor toho nejlepšího získá prémiový smartphone vivo V50, na autora...

27. března 2025

Postavili jsme iPhone 16e proti nečekanému soupeři. Má cenu připlácet?

Jsou to smartphony, které mimo jiné cílí na mladší zákazníky. Každý na to jde ale úplně jinak a iPhone díky svému přístupu má vlastně širší záběr. Nothing dovede být zajímavou cool alternativou s...

27. března 2025

Levný fotomobil zatopí mnohanásobně dražším kouskům. Tecno překvapuje

Barcelona (Od zpravodaje Mobil.iDNES.cz) Značka Tecno pro nás byla jednou z hvězd veletrhu MWC v Barceloně. Firma ukazovala nejen odvážné koncepty telefonů, ale také si hraje s materiály a designem svých přístrojů.Navíc patří mezi cenově...

26. března 2025  7:02

Vábničky operátorů klesly hluboko pod pětistovku. U jedné se musíte hlídat

Ani v současnosti není problém pořídit si tarif za méně než pět set korun, byť jde v případě standardních nabídek mobilních operátorů o ojedinělý případ. Nicméně aktuálně lze měsíční náklady za...

26. března 2025

Nový iPhone měl být přelomový, ale Apple se zalekl evropských regulací

Příští sestava iPhonů má mít mezi sebou úplně nový model. Bude jím iPhone 17 Air, který se bude chlubit extrémně tenkým tělem. Apple dále plánoval, že finální produkt nebude mít žádný fyzický port....

25. března 2025  7:02

Parádní smartphone překvapuje svojí koncepcí. Jenže je to ještě véčko?

Jedna trojskládačka se už prodává, jedna se nedávno ukázala na veletrhu MWC v Barceloně. Ta další má také tři části, ale jinou koncepci. Vychází z véčka, ale jestli se mu ještě dá říkat véčko, je...

25. března 2025

Zákaz mobilů na školách nic neřeší. Duševní pohodu nezlepší, tvrdí studie

Mnohé školy napříč Evropou bijí na poplach, ve snaze chránit duševní zdraví žáků či studentů a zlepšit jejich školní výsledky zakazují používání mobilů na své půdě. Vědci University of Birmingham...

24. března 2025  7:02

Zásadní změna. Postavili jsme dostupný iPhone 16e proti předchůdci

Nový iPhone 16e sice není tak cenově dostupný, jako byly předchozí modely SE, ovšem o to je to dospělejší smartphone. Vynikne to zejména v porovnání s jedním z předchůdců, který tváří v tvář novince...

24. března 2025

Teleobjektiv a ulítlý design. Konkurenti střední třídy lákají i na cenu

Letošní nadílka smartphonů ve vyšší střední třídě je velmi bohatá. Smartphony této kategorie se navíc svými schopnostmi čím dál víc blíží špičkovým modelům. To ukazuje i dvojice modelů od značek mimo...

23. března 2025

Pokrok ve stylu a výdrži baterie. Za nové vivo si však připlatíte

Vivo představilo svůj nový smartphone vyšší střední třídy V50. Model navazuje na loňský typ V40, oproti kterému přináší především modernější displej a vyspělejší technologii baterie s vyšší výdrží i...

22. března 2025

Test fitness aplikací: Trenéři do kapsy radí, hecují a měří. Někdy však podle plotu

Premium

Včera se to nepovedlo, ale dnes to dáš. Skvělý začátek. Teď se nezastavuj! Změř si tep... Fitness aplikace v telefonu během dne motivují někdy až moc, ale díky nim se třeba budete více hýbat. Co...

22. března 2025

Pixely nechali jezdit měsíce metrem. Měly tam důležité poslání

Smartphony v sobě skrývají řadu užitečných senzorů. Právě díky nim vybrané top modely umějí třeba i detekovat dopravní nehodu a následně přivolat pomoc. Google, který je průkopníkem této funkce, nyní...

21. března 2025  7:02