Nokia a Linux

V tomto článku bych vám chtěl představit program gnokii, který by se vbudoucnu mohl stát plnohodnotnou náhradou programu Nokia Cellular DataSuite ataké bych Vás chtěl seznámit s problémy, které potkávají na každém krokuvývojáře Open Source programového vybavení a zvláště takového programovéhovybavení, které musí komunikovat s hardwarem.

V tomto článku bych vám chtěl představit program gnokii, který by se v budoucnu mohl stát plnohodnotnou náhradou programu Nokia Cellular DataSuite a také bych Vás chtěl seznámit s problémy, které potkávají na každém kroku vývojáře Open Source programového vybavení a zvláště takového programového vybavení, které musí komunikovat s hardwarem, ale nepředbíhejme.

Mobilní telefony jsou již normální věcí, šetří svým majitelů čas a zároveň jim umožňují být stále v kontaktu s potřebnými lidmi. A protože jsou stále se svými majiteli, pokouší se jim i jinak zpříjemňovat a zjednodušovat jejich život - moderní telefony (jako např. Nokia 6110 a podobné) umožňují např. zaznamenávat schůzky do připraveného kalendáře, ukládat či posílat krátké zprávy (SMS) apod. A to vše z klávesnice mobilního telefonu. Někdy je ovšem takové zadávání nepraktické a v případě, že máte napsat text zprávy, která má délku kolem sta znaků dokonce i zničující (už jste to někdy zkusili?). A proto opět nastává čas počítačů. Totéž si uvědomila společnost Nokia (a některé další) a vyvinula pro své mobilní telefony programové vybavení s názvem Cellular DataSuite (CDS), které umožňuje většinu věcí spravovat i pomocí počítače a sériového nebo infračerveného připojení.

Ovšem má to jeden háček - Cellular DataSuite je k dispozici pouze pro komerčně distribuované operační systémy (Microsoft Windows). Uživatelé jiných operačních systémů (jako např. Solaris, AIX, SCO Unix, OS/2 nebo třeba Linux) prostě mají smůlu a pokud chtějí svého miláčka spojit se svým druhým miláčkem, musí jednoho z nich přebootovat do Windows (u telefonů to zatím nejde, takže to odnese počítač :-).

Jak z toho kola ven? Existuje několik možností a žádná není komplexní náhradou zmiňovaného programového vybavení. Uživatel, který potřebuje pouze datová volání a nepotřebuje editovat seznam kontaktů (tedy telefonní seznam) nebo posílat či přijímat krátké textové zprávy, si může zakoupit např. PCMCIA kartu s přívlastkem GSM ready nebo only (druhá je pouze pro GSM sítě, první můžete použít i jako obyčejný faxmodem). Naproti tomu uživatel, který potřebuje zmiňované služby, již tak velký výběr nemá. Prostě Cellular DataSuite používat musí. Ale je to opravdu nutné? Proč ještě není Cellular DataSuite pro jiné operační systémy? Napadá mne pouze jediné vysvětlení - společnost Nokia nechce podporovat jiné systémy, protože by pak měla přiliš mnoho zákazníků a měla by moc velký zisk. Nic jiného mne v tuto chvíli nenapadá. Pokud o něčem víte, napište mi.

Ale vraťme se zpět k programu gnokii. Tento program vznikl z čisté touhy neopouštět ten svůj operační systém kvůli komunikaci s mobilním telefonem a tento v něm přímo využívat. Vše začal Hugh Blemings, australský programátor a hrdý majitel telefonu Nokia 3810. Začal se zajímat o to, jakým způsobem komunikuje jeho telefon s programem CDS a své poznatky se nebál zveřejnit a veškeré programové vybavení, které původně psal pouze pro své potešení, zveřejnil ve zdrojové podobě. To mu umožnilo plně koordinovat své zkoumání i s ostatními programátory na celém světě a proto je nyní podporována drtivá většina vlastností telefonů 3810, 3110 a 8110(i). Pokud máte jeden z těchto mobilních telefonů, můžete pomocí programu gnokii (a samozřejmě originálního či podomácku vyrobeného sériového kabelu) posílat či přijímat SMS zprávy, přenášet či zaznamenávat zprávy z telefonního seznamu případné monitorovat stav telefonu (úroveň signálu, stav baterie a další). To vše bez pomoci společnosti Nokia, která ani neodpověděla na žádost Hugh Blemingse o pomoc či případnou spolupráci při vývoji.

Podobná situace nastala i při podpoře novějších telefonů (Nokia 6110 a 5110). Jejich podpora byla započata teprve před necelým měsícem, ale již dnes můžete s pomocí programu gnokii udělat spoustu zajímavých věcí. Ale než si je ukážeme, musíme si program gnokii nainstalovat. Stáhneme si jej ze serveru ftp://multivac.fatburen.org/pub/gnokii buď ve zdrojové podobě nebo již přímo zabalený ve formátu RPM vhodném pro distribuce Red Hat Linux. Instalace je velmi jednoduchá. Stačí zdrojové texty rozbalit pomocí příkazu

tar xvfz gnokii-0.2.4.tar.gz

Zdrojové texty se nám rozbalí do adresáře s názvem gnokii-0.2.4. Nyní je na čase si přečíst soubor s názvem README (ale kdo by četl dokumentaci, že). Takže zde jen stručný návod - program gnokii potřebuje vědět, jaký typ mobilního telefonu máte a na jakém sériovém portu jej máte připojen (infračervené připojení zatím není podporováno). Podle Vaší konfigurace nastavíte v souboru Makefile některé proměnné. Já mám například mobilní telefon Nokia 6110 připojený originálním kabelem na port COM1 (tedy /dev/ttyS0) a tak musím odkomentovat řádek

MODEL=-DMODEL="\"6110\""

Totéž musíte udělat, pokud máte telefon Nokia 5110. Nyní je vše připraveno pro překlad. Stačí napsat make a podle rychlosti Vašeho počítače si buď odskočit na kávu nebo něco jiného... Po překladu je finální program uložen pod názvem gnokii.

Pokud budete instalovat program gnokii pouze z RPM balíku, stačí pouhé zadání

rpm -Uvh gnokii*rpm

a měli byste mít vše připraveno. Při instalaci z RPM se nainstalují dva programy - jeden s názvem gnokii3810 a druhý s názvem gnokii6110. Význam a funkce obou je zřejmá.

Nyní tedy máme program připraven a můžeme začít zkoušet, kam až se vývojáři dostali v podpoře komunikačního protokolu (vše ukážeme na typu Nokia 6110, podpora telefonů 3810 a spol. je ale podstatně dále).

Dokumentace je poměrně strohá a tak vyzkoušíme program gnokii pouze spustit - vypíše nám podrobnější informace o své činnosti a podporované argumenty. Začneme je tedy postupně zkoušet.

Prvně se ale ujistíme, zda jsme program gnokii přeložili správně - zadáme následující příkaz a podíváme se, jestli je program gnokii opravdu přeložen s podporou pro náš mobilní telefon:


SnowWhite:~/gnokii-0.2.4$ ./gnokii --version
GNOKII Version 0.2.4 Copyright (C) Hugh Blemings 1999.
Built 01:06:10 Apr 2 1999 for 6110 on /dev/ttyS0
SnowWhite:~/gnokii-0.2.4$

Ano, je tomu tak. Ale nyní již k jednotlivým funkcím. Není jich sice mnoho, ale některé již jsou vcelku užitečné.

Vždy když zapínáme telefon (pokud to tak máme nastaveno), musíme zadat PIN. Zkusíme tedy náš připojený telefon vypnout a zapnout tak, aby čekal na zadání našeho čísla PIN a spustíme příkaz

gnokii --enterpin

Program gnokii není jasnovidec a tak se nás na PIN zeptá:

Enter your PIN:

Při zadávání na klávesnici se PIN stejně jako při zadávání na telefonu nevypisuje a tak je naše bezpečí chráněno. Pokud jsme naše čtyři číslice zadali, můžeme stisknout Enter a uvidíme, co gnokii udělá. Já jsem köd zadal dobře a tak mi můj mobilní telefon na displeji vypsal zprávu "Code Accepted!" a zaregistroval se do sítě mého GSM operátora. Po zadání chybného kódu telefon nepříjemně pípne, vypíše zprávu "Code error!" a opět čeká na nové zadání PINu. Gnokii přitom vypíše:


Message: PIN:
Code Error
You're not my big owner :-)

Vývojáři jsou opravdu veselé kopy... Ale nezkoušejte to více než dvakrát, nemuseli byste potom najít svůj bezpečnostní kód...

Nyní tedy máme zadaný PIN a chceme zjistit, do jaké že to sítě jsme vlastně zaregistrováni, jaké je zde pokrytí a další informace. Ke zjištění těchto informací slouží tzv. monitorovací mód:


./gnokii --monitor
...
Message: Mobile phone identification received:
Serial No. NOKIA4905261xxxxxxxx
NSE-3
0501505
4200
Firmware: 4.73
Magic byte1: 8e
Magic byte2: 12
Magic byte3: 82
Magic byte4: 86

Jak vidíme, program gnokii nám vypíše velice zajímavé informace - kromě našeho sériového čísla i typ telefonu a číslo firmware (ano, nechám si jej už upgradovat ;-). Magické byty jsou velká můra vývojářů, protože netuší, jak se zjišťují resp. neznají jejich přesný význam.

Ale to není vše. V těsném závěsu nám gnokii zahlásí aktuální stav hodin, data a budíku:

Message: Clock
Time: 01:14:51
Date: 1999/04/02
[Sending Ack of type 11, seq: 3]
Message: Alarm
Alarm: 08:30
Alarm is off

Pokud to ovšem Váš telefon nepodporuje (jako např. 5110 a datum), můžete obdržet přinejmenším zmatené výsledky (např. datum 1991/10/31 apod.)

Za datem a časem ihned následuje zpráva o registraci v síti operátora:

Message: Phone status received:
Mode: registered within the network
Power source: battery
Battery Level: 3
Signal strength: 4

Pro testování jsem použil kartu sítě Paegas, protože její BTSka je "co by kamenem dohodil" (ostatně je to i vidět na maximálním pokrytí). Telefon je v tuto chvíli opravdu napájen baterií a opravdu na indikátoru svítí pouze tři proužky. Skvělé.

Význam následující zprávy snad ani není třeba komentovat - programátoři implementovali funkci, která umožňuje zjistit primární SMS centrum a jeho číslo:
Message: SMS Center received:
1. SMS Center name is Paegas SMS
1. SMS Center number is +420603052000

A to je ze zatím uvolněné verze vše. Ale co bychom to byli za zpravodajství, kdybychom nepřinesli něco ze zákulisí - na autorově disku již leží i verze, která má následující vylepšení.

Message: Network registration:
CellID: 0c15
LAC: 6046
Network: 230-01

Dokáže nám sdělit, do které sítě (230-01 je první operátor v zemi s kódem 230, což je Radiomobil v ČR) jsme přihlášeni.

Message: Keyboard lock
Keyboard is locked

Dokáže nám sdělit, že jsme zamknuli případně odemknuli klávesnici nebo že se nám někdo pokouší dovolat:

Message: Incoming call alert:
Number: +420546xxxxxx
Name: Domov

(Zkoušel jsem volat z normální pevné linky na mobil). Dokáže nás také informovat o příchozí SMS zprávě (v brzké době snad i o jejím obsahu, jenom to napsat :-):

Message: SMS Message Received
Remote number: +420603052000
Date: 99-04-02 01:36:41

Právě jsem dostal SMSku.
Message: SMS Status Received
The number of messages: 1
Unread messages: 1

Opravdu a je jediná, zkusím si ji přečíst:

Message: SMS Status Received
The number of messages: 1
Unread messages: 0

A smazat:

Message: SMS Status Received
The number of messages: 0
Unread messages: 0

A už tam žádná není... Jak jednoduché.

V příštích verzích by se měla objevit plná podpora pro SMS zprávy a telefonní seznam, následovat bude také podpora kalendáře.

Jak vidíte, mají to vývojáři těžké, nemají k dispozici specifikaci komunikačního protokolu mezi CDS a mobilním telefonem, ale i přesto se jim daří komunikovat. Pojďme jim pomoci a vyzkoušejme své miláčky i s programem gnokii.