mwiacek.comColorColor | Mobile  
Komórki (2006)
Submitted by marcin on Wed 06-Dec-2006

Polski
Gammu
GSM
Polski artykuł
Linux+
OS


Artykuł ukazał się wpierw w wersji drukowanej w magazynie Linux + (numer 9/2006)

Wielu użytkowników chciałoby mieć możliwość zgrania ze swoich telefonów komórkowych stworzonych przez siebie zdjęć, zrobienia kopii książki telefonicznej czy zawartości kalendarza. Ponieważ programy dostarczane przez producentów "komórek" działają jednak tylko w Windows lub Mac OS, musimy skorzystać z innych narzędzi. W tym artykule postaramy się je przedstawić, jak również zwrócić uwagę na inne możliwe rozwiązania.

Najprostsze są zabawy karciane...

Wiele współczesnych telefonów ma możliwość zapisu zdjęć stworzonych wewnętrzną kamerą na kartach pamięci. W przypadku telefonów z systemem Symbian można sobie zainstalować jeden z darmowych menadżerów plików i na kartę przegrać wręcz każdy plik.

Po wyjęciu karty z telefonu wystarczy włożyć ją do czytnika kart pamięci (zazwyczaj podłączanego do USB), a po wykryciu go jako kolejny dysk (stanie się tak, o ile mamy wbudowaną w jądro systemu obsługę USB Mass Storage) skopiować pliki na dysk twardy komputera korzystając z dowolnego menadżera plikowego. Uzyskujemy w ten sposób zazwyczaj dużą szybkość kopiowania.

Wymienię kartę na OBEXa

Jeżeli chcemy wymienić pojedyńcze zbiory i nie są one zbyt duże, może nam wystarczyć wbudowana w wiele modeli telefonów obsluga protokołu OBEX. Przewiduje on w urządzeniu obecność "domyślnej" skrzynki odbiorczej i/lub systemu plików.

Jednym z bardziej znanych pakietów, które pozwolą go użyć w połączeniu z telefonem (w obie strony), jest OpenOBEX. Implementacja m.in. wysyłania plików do "domyślnej" skrzynki odbiorczej telefonu jest natomiast zaimplementowana w opisywanym dalej pakiecie Gammu - kilka słów o tym przy okazji przedstawienia komend do obsługi systemu plików.

3G dobre na wszystko ?

Opisane wcześniej metody mogły być wykorzystane jedynie do wymiany plików. Co z innymi zadaniami ?

Jeszcze jakiś czas temu możnaby wskazać 3 główne pakiety do obsługi komórek pod Linuxem o nazwach rozpoczynających się od G: Gammu, Gnokii i GSMLib. Dwa pierwsze właściwie ciągle można zaliczyć do kanonu, natomiast trzeci to już raczej tylko ciekawostka... Oprócz nich obecnie mamy do czynienia z różnymi innymi. Ale nie wyprzedzajmy faktów...

Gammu

Gammu powstał jako przepisana od nowa lepsza wersja pakietu MyGnokii (który to z kolei był rozszerzoną wersją Gnokii, o którym będzie mowa później). Obecnie w ramach tego projektu tworzona jest biblioteka dla innych programów (należy tutaj jednak pamiętać o pewnych cechach wynikających z faktu używania licencji GNU GPL) oraz aplikacja konsolowa. Działają m.in. w Windows, Linuxie, FreeBSD, OpenBSD. Ich rozwojem zajmują się w ramach swoich możliwości finansowych osoby prywatne (głównie Polacy).

Instalacja

W chwili obecnej dostępne są uaktualniane na bieżąco pakiety binarne do wielu dystrybucji takich jak Debian czy Mandrake. Informacje o nich można znaleźć w portalu www.gammu.org (w zakładce Wiki należy wybrać po lewej stronie Downloads i odnaleźć odpowiedni odnośnik).

Można oczywiście również skompilować program samodzielnie. Znalezienie kodu źródłowego ostatniej (stabilnej i testowej) wersji jest łatwe - odnośniki są zawsze podawane na stronie www.gammu.org (są to nazwy projektu z numerami wersji na samej górze po prawej stronie). Możemy również skorzystać z dostępnych na tej stronie kanałów RSS. Po pobraniu pliku tar.gz lub tar.bz2 należy go rozpakować.

Jeżeli chcielibyśmy mieć włączoną obsługę podczerwieni, musimy teraz pamiętać o udostępnieniu pliku irda.h (np. w Mandrake jest w katalogu /usr/include/linux), do Bluetootha wymagane są pakiety developerskie stosu Bluez. Później wystarczy użyć ./configure i make

Po skompilowaniu w podkatalogu gammu mamy już dostępną wersję konsolową. Możemy ją zainstalować w systemie korzystając z polecenia make install

Konfiguracja

Opcje konfiguracyjne programu są podawane np. w pliku .gammurc umieszczonym w katalogu domowym użytkownika. Możemy tam skopiować zbiór zawierający opisy wszystkich przełączników wraz ze sposobem ich użycia - umieszczony jest on w pakiecie z kodem źródłowym Gammu w katalogu docs/examples/config.

Podamy teraz kilka przykładów konfiguracji:

[gammu]
port = /dev/ircomm0
connection = irdaphonet

Plik o tej zawartości umożliwi w Linuxie komunikację z użyciem protokołu Nokii (oznaczanym jako phonet) poprzez podczerwień udostępnianą przez urządzenie /dev/ircomm0. Z kolei treść

[gammu]
port = /dev/ttyS1
connection = fbus

będzie odpowiednia dla połączenia kablem szeregowym podpiętym pod urządzenie /dev/ttyS1 (tym razem protokół to fbus Nokii). Jeśli chcielibyśmy użyć Bluetootha, wystarczy wpisać

[gammu]
port = 1234567890
connection = bluephonet

gdzie w miejsce 1234567890 należy podać adres naszego telefonu (ewentualnie w ogóle usuńmy tę linijkę i program będzie próbował znaleźć telefon na podstawie jego rozgłaszanej w eterze nazwy), a połączenie odbędzie się z użyciem wersji phonet dla Bluetooth.

To, co przedstawiliśmy to oczywiście tylko przykłady. Wiele zależy od modelu telefonu i konfiguracji naszego systemu operacyjnego. Dlatego polecamy również odwiedzenie adresu http://www.gammu.org/wiki/index.php?title=Gammu:Connecting_to_phone, gdzie tematyka ta została potraktowana szczegółowo. Można tam znaleźć informacje o konfiguracji Bluez, parowaniu telefonu z komputerem, kablach USB, rozwiązywaniu problemów z tym związanych, itp.

Program może przy każdym starcie ustawiać aktualną godzinę w telefonie (wystarczy dodać linijkę synchronizetime = yes), dostępne są też inne opcje związane np. ze stronami kodowymi i debugowaniem.

Z ciekawszych ustawień warto wymienić możliwość sprawdzania przy każdym starcie, czy na www jest dostępna nowsza wersja testowa i/lub stabilna programu (opcja rsslevel = teststable lub rsslevel = stable) albo czy producent telefonu przygotował już dla niego nowszą wersję firmware (opcja usephonedb = yes). Ta ostatnia usługa korzysta z wpisów bazy danych o modelach komórek dostępnej na www.gammu.org.

Jeżeli wszystko zostało ustawione poprawnie, po wydaniu komendy gammu --identify zobaczymy informacje o modelu naszego telefonu.

SMS

Gammu zawiera obsługę różnych formatów SMS. Potrafi działać z obrazkami, dzwonkami, SMS tekstowymi (również łączonymi), notatkami kalendarza, wpisami książki telefonicznej i innymi.

Komenda gammu --getallsms pozwala pobrać i wyświetlić wszystkie pojedyńcze SMS z pamięci telefonu i karty SIM. Jeżeli użyjemy gammu --getachsms, program odczyta wszystkie pojedyńcze SMS, połączy ewentualne sekwencje w całość i następnie pokaże uzyskany wynik.

Do wysyłki używana jest opcja --sendsms. Podamy przykład jej użycia dla SMSów tekstowych:

echo "tekst SMS tekstowego" | gammu --sendsms TEXT +48602602602

spowoduje wysłanie SMS o treści "tekst SMS tekstowego" pod numer +48602602602 z użyciem centrum SMS o numerze zapisanym na pierwszej pozycji na karcie SIM.

Jeżeli na końcu dodamy -report, do naszego telefonu trafi również raport doręczenia. Dodanie -flash spowoduje, iż SMS będzie klasy 0 i odbiorca zobaczy go na ekranie bezpośrednio po odebraniu (bez wchodzenia do skrzynki odbiorczej).

Bardzo rozbudowane jest wsparcie standardu EMS rozpoznawanego przez wyroby producentów innych niż Nokia. Można wysyłać obrazki, dźwięki w tym formacie, ustalać parametry tekstu, itp. Opis tych możliwości zająłby dużo miejsca. Zmuszeni jesteśmy odesłać do dokumentacji.

Pakiet potrafi robić kopie SMS (gammu --backupsms plik) i je odtwarzyć (gammu --restoresms plik). Możliwe jest dodawanie SMS do pamięci telefonu/na kartę SIM (przykładowo echo "tekst SMS tekstowego" | gammu --savesms TEXT zapisze SMS o znanej już treści do pierwszego folderu, którym w większości modeli jest skrzynka odbiorcza), ich kasowanie (opcja --deletesms) i inne.

Warta opisania jest jeszcze współpraca z bazą MySQL. Gammu po użyciu opcji --smsd działa w trybie demona. Może wtedy wykorzystywać telefon do masowej wysyłki SMSów (pobierając je z odpowiedniej tabeli bazy) i masowego odbioru SMS (wtedy kopiuje do bazy wszystko co odebrał telefon). Dostępna funkcjonalność jest tutaj dosyć duża - przygotowano nawet przypisywanie raportów doręczenia do wysłanych SMS...

W pakiecie z kodem źródłowym udostępniono kilka przykładów aplikacji współdziałających z bazą w tym standardzie (np. interfejs administracyjny napisany w PHP), a użytkownik może dodawać tam SMS do wysłania w każdym obsługiwanym formacie korzystając z opcji analogicznych do --sendsms. Nie jest więc wymagana specjalistyczna wiedza, aby wysłać np. SMS z dzwonkiem...

Rozwiązanie jest elastyczne - baza MySQL może się przecież znajdować fizycznie w innym komputerze niż nasz, a telefon (czy też wręcz wiele telefonów) wysyłający/odbierający SMS może być podłączony jeszcze gdzieś indziej...

Książka telefonicza, kalendarz, todo, notatki, zakładki WAP

W momencie, gdy Gammu było projektowane i pewne standardy nie były jeszcze powszechnie używane, przygotowano własny format plików do przechowywania różnego rodzaju informacji takich jak książka telefoniczna czy kalendarz. Format ten zorganizowany jest podobnie jak wiele plików konfiguracyjnych - zawiera sekcje, klucze i wartości. Jeżeli zdecydujemy się na używanie wersji z Unicode, cały plik zostanie zakodowany w tym standardzie (w przeciwnym razie każdy wpis podany będzie podwójnie - w postaci zakodowanej i tekstowej). Szerzej o edycji plików nie używających Unicode można poczytać w dokumentacji.

Jeżeli użyjemy plików z określonymi rozszerzeniami, program przyjmie, iż są zapisane w innych formatach niż własny. I tak m.in. zbiory vcf mają według niego format VCard, vcs to VCalendar, ics to Mozilla Calendar, a lmb to format Logo Managera.

Dalej wszystkie te pliki będziemy nazywać po prostu zbiorami z danymi (niezależnie od ich formatu).

Aby skopiować dane z telefonu, używamy komendy gammu --backup nazwa_pliku. W zależności od formatu pliku z danymi, modelu telefonu i użytego połączenia (co innego może pozwolić odczytać nasz telefon, gdy użyjemy protokołu producenta, co innego uzyskamy działając z komendami AT) zostaniemy zapytani, co należy zachować, a następnie program zapisze wszystko do podanego pliku.

Do odtworzenia danych wykorzystujemy komendę gammu --restore nazwa_pliku, jeżeli chcemy dodać informacje z pliku z danymi do już zapisanych w pamięci telefonu, używamy gammu --addnew nazwa_pliku

Do wysłania SMSem notatki kalendarza może służyć polecenie gammu --sendsms CALENDAR +48602602602 nazwa_pliku numer_pozycji (gdzie nazwa_pliku to nazwa pliku z danymi, a numer_pozycji numer wpisu z informacją o kalendarzu z pliku z danymi). Podobnie można postąpić z wpisami książki telefonicznej (komenda gammu --sendsms VCARD21 +48602602602 nazwa_pliku numer_pozycji), ToDo (komenda gammu --sendsms TODO +48602602602 nazwa_pliku numer_pozycji), zakładkami WAP (komenda gammu --sendsms BOOKMARK +48602602602 nazwa_pliku numer_pozycji).

Do wykasowania całości informacji danego typu możemy użyć gammu --clearall. Należy tu jednak pamiętać, iż telefon działa podobnie jak komputer i chociaż informacje będą niedostępne z jego menu, często można je odczytać z jego pamięci np. z użyciem odpowiedniego programatora (a czasem wręcz kabla za kilkanaście PLN).

Oddzielnego wyjaśnienia wymagają listy połączeń wybieranych/odebranych/nieodebranych. Do ich pobrania należy użyć opcji --getmemory pamięć start stop, gdzie zamiast pamięć wstawiamy oznaczenie  połączeń wybieranych (DC), odebranych (RC) lub nieodebranych (MC), zamiast start i stop numery zakresu komórek pamięci. Przykładowo gammu --getmemory RC 1 5 pobierze wpisy połączeń odebranych od 1 do 5. Należy tutaj zastrzec, iż w przypadku nowszych modeli można odczytać nawet godzinę połączenia, a czasem również jego długość.

Warto wspomnieć, że opcja --getmemory ma ogólniejsze zastosowanie i pozwala wziąć wpisy również z innych pamięci, do których można wpisywać numery telefonów (zmieniamy tylko oznaczenie pamięci - ME to książka telefoniczna telefonu, SM książka karty SIM, ON to lista numerów własnych, itd.).

System plików

W produktach wielu producentów daje się zauważyć dążenie do tego, żeby coraz więcej danych umieszczać w pamięci telefonu w postaci plików (graficznych, dźwiękowych, itp.). Stosowana jest znana z Unixa zasada "wszystko jest plikiem".

W chwili obecnej Gammu może się poszczycić m.in. praktycznie pełną obsługą systemów plików zaimplementowanych w Nokiach Serii 40.

I tak gammu --getfilesystem pokaże nam w postaci drzewa zbudowanego z użyciem znaków pseudo ASCII informację o wszystkich dyskach, katalogach i plikach. Każdy z nich ma swój niepowtarzalny identyfikatoror. Jest nim najczęściej pełna ścieżka dostępu wraz z nazwą, jednak nie zawsze. Aby obejrzeć identyfikatory, należy użyć komendy gammu --getfilesystem -flatall

Jeżeli już je znamy, możemy wykorzystać gammu --getfiles identyfikator (do pobrania pliku o podanym identyfikatorze) lub gammu --getfilefolder identyfikator (do pobrania wszystkich plików z folderu o podanym identyfikatorze)

W celu stworzenia folderu wystarczy wywołać gammu --addfolder identyfikator nazwa (nazwa to nazwa nowego folderu, a identyfikator to identyfikator katalogu nadrzędnego), do dodania pliku potrzebna jest komenda gammu --addfile identyfikator nazwa (w przypadku starszych Nokii z Serii 40 1.0 konieczne będzie użycie dodatkowego przełącznika -type z dodaną informacją o formacie pliku).

Można też wysyłać pliki do domyślnej skrzynki odbiorczej telefonu (zgodnie ze standardem OBEX). Należy w tym włączyć odpowiednie połączenie w pliku konfiguracyjnym (poniżej przykład dla Bluetooth, zamiast 1234567890 należy wpisać adres telefonu):

[gammu]
port = 1234567890
model = obex
connection = blueobex

i użyć gammu --addfile "" nazwa_pliku

Java

Dla wygody program potrafi w łatwy sposób dodawać do pamięci telefonu gry i aplikacje Java. Jeżeli mamy zapisane je w postaci plików aplikacja.jad i aplikacja.jar, wystarczy użyć komendy gammu --nokiaaddfile GAME aplikacja albo gammu --nokiaaddfile APPLICATION aplikacja

MMS

Program potrafi pobrać zawartość MMSów. Wystarczy użyć polecenia gammu --getallmms. Jeżeli chcielibyśmy móc zapisać dane przesłane w MMS (takie jak obrazki czy dźwięki) do plików, należy użyć komendy gammu --getallmms -save.

Dzwonki

Gammu umożliwia zmianę i odczytanie dzwonków ze starszych modeli telefonów z użyciem --getringtone i --setringtone: --setringtone plik -location 1 ustawi dzwonek z pliku (np. w formacie RTTL) na pierwszej pozycji. W przypadku Nokii z generacji DCT4 (np. popularnej do niedawna Nokii 6310i) można zobaczyć listę dzwonków po użyciu --getringtoneslist i nakazać odegrać go telefonowi komendą --playsavedringtone numer (numer powinien być wzięty z --getringtoneslist). Wyobraźmy sobie zdziwienie np. w biurze, gdy pozostawimy nasz telefon na biurku, połączymy się z nim przez Bluetooth z komputera z drugiej strony pokoju i nakażemy odegrać np. "Nokia Tune". A jakie stwarza to możliwości, gdy chcemy zasymulować ważny telefon...

W nowszych modelach (np. Nokiach z galerią w menu telefonu jak 6230) należy wpisać plik z dzwonkiem z użyciem --addfile.

Dzwonek do starszych telefonów można również wysłać SMSem (w przypadku Nokii należy użyć --sendsms RINGTONE +48602602602 plik, dla telefonów obsługujących tylko EMS np. --sendsms EMS +48602602602 -tone12long file).

Loga i obrazki

Z logami jest podobnie jak z dzwonkami - w najnowszych modelach są one zapisywane jako pliki w standardowych formatach (np. jpg lub gif). Wykorzystujemy wtedy znane już komendy związane z systemem plików. Częściowo (m.in. z uwagi na małe zainteresowanie) zaimplementowano też dodatkowe opcje znane z programów komercyjnych - np. po wpisaniu pliku do pamięci z użyciem --addfile można nakazać telefonowi użyć go jako loga startowego (opcja --setbitmap COLOURSTARTUP identyfikator_pliku). Zadziała to np. z Nokią 6230.

Jeżeli chodzi o starsze telefony (np. 3310 lub 6310i), w Gammu należy z nimi użyć komend --getbitmap i --setbitmap. Kilka przykładów ich użycia:

--setbitmap STARTUP nazwa_pliku ustawi w telefonie logo startowe wczytane z podanego pliku (obsługiwane są np. formaty nlm, nol, ngg, nsl). Jeżeli mamy Nokię 3310 i jeden z ostatnich firmware, namiast nazwy pliku możemy wpisać cyfrę 1 i ustawiona zostanie pierwsza predefiniowana aminacja startowa przygotowana przed producenta.

--setbitmap OPERATOR 26002 ustawi w telefonie logo operatora dla sieci 260-02 (polska Era)

Inne

Oprócz opisanych wcześniej komend Gammu potrafi znacznie więcej. Podamy kilka przykładów: aktualny czas w telefonie ustawi --setdatetime, w wielu modelach Nokii można np. włączyć tzw. netmonitor (opcja --nokianetmonitor) i inne "ukryte" menu (opcja --nokiasetphonemenus) albo ustawić siłę wibracji (opcja --nokiasetvibralevel). Aplikacja potrafi również ustawić wyszukać i ustawić wszystkie stacje radiowe w Nokiach Serii 40 (opcja --nokiatuneradio).

Listę wszystkich opcji można uzyskać po wybraniu komendy gammu --help, są one opisane na stronie www.gammu.org.

Dodatkowo w pakiecie z kodem źródłowym można znaleźć np. skrypty automatyzujące połączenia typu data ("zwykłe", HSCDS, GPRS) z użyciem pppd.

Nakładki na Gammu

Jak wspomniano wcześniej, Gammu jest również biblioteką. Na stronie www.gammu.org można przeczytać o różnych sposobach jej wykorzystania.

Najbardziej znane projekty z nią związane to chyba Python-gammu (nakładka pozwalająca korzystać z usług z programów napisanych w Pythonie) oraz Wammu (program w Pythonie będący GUI). Ten ostatni pozwala wykonać w prosty sposób operacje na książce telefonicznej czy SMS.

Gammu+

Pakiet Gammu pisano z użyciem języka programowania C, który ma swoje czasem dosyć istotne ograniczenia. Dla niektórych użytkowników pewne ograniczenia sprawiać może również użyta licencja GNU GPL.

Niedogodności te są eliminowane w kolejnym projekcie nazwanym Gammu+. Pisany jest w C++, a licencja to LGPL i/lub własna komercyjna.

W chwili obecnej prace nad nim są prowadzone powoli (m.in. ze względów finansowych), ale daje się zauważyć systematyczny postęp. Możliwy jest już dostęp do książki telefonicznej, kalendarza i SMS w wielu modelach Nokii z generacji DCT3, DCT4 i wielu modelach Serii 40. Docelowo znajdzie się tam przynajmniej cała funkcjonalność Gammu.

Więcej na ten temat można przeczytać pod adresem www.gammu.org.

Gnokii, GSMLib i inne

Gnokii w wielu szczegółach jest podobny do Gammu. Może działać jako biblioteka, jest publikowany również na licencji GNU GPL, zawiera wersję konsolową. Z ciekawostek można w nim wymienić działający emulator modemu AT do Nokii 5110 i 6110. Różnice są widoczne w komendach, obsługiwanych telefonach, sposobie prowadzenia samego projektu. Oprogramowanie to jest również tworzone przez osoby prywatne (co ciekawe jednym z głównych twórców jest też Polak). Należy wspomnieć, iż to tutaj został stworzony gnapplet - program do zainstalowania w telefonach z systemem Symbian 6.x - 8.x pozwalający na łatwe udostępnianie ich zasobów (obecnie obsługa protokołu gnapplet jest dodawana również do Gammu).

GSMLib był jedną z pierwszych bibliotek udostępniających obsługę komend AT. Obecnie duża część/całość jego funkcjonalności znajduje się w pakietach opisanych wcześniej.

Oprócz pakietów określonych przez nas jako 3G pojawiają się ciągle nowe. Jest KMobileTools i inne, jest oprogramowanie pozwalające na zrobione kopii książki telefonicznej i kalendarza z użyciem SyncML. Nie są one niestety doskonałe.

Daje się niestety cały czas odczuć brak współpracy producentów telefonów z twórcami tego typu programów. Zamykają standardy, nie są zainteresowani użyczaniem swoich wyrobów (choćby w zamian za reklamę). Drugim utrudnieniem jest fakt, iż część ludzi woli pisać oprogramowanie tego rodzaju jako własny projekt do obsługi pojedyńczego modelu niż element większej całości. Później wiele z tych perełek "przepada" niedługo po tym, jak ich autor zmienia telefon.

Nasi programiści nie mają się na szczęście czego powstydzić w tej dziedzinie. Miejmy nadzieję, że będą znajdować środki i siły tak długo, aby któregoś dnia móc powiedzieć - jeśli soft do komórek, to tylko z Polski... Jest po prostu jedyny i najlepszy...

Kompatybilność

Tabelkę poniżej należy traktować tylko orientacyjnie, dokładne dane można znaleźć na stronach projektów

Rodzaj protokołów Modele telefonów Gammu Gammu+ Gnokii
Własne protokoły producentów Alcatel z generacji BH4, BE5, BF5 - np. OT511
SMS, książka telefoniczna, kalendarz nie
Nokia z generacji DCT2 - np. 3110
nie SMS, książka telefoniczna
Nokia z generacji DCT3 - np. 3310, 8210
SMS, książka telefoniczna, kalendarz
Nokia z generacji DCT4 - np. 6310i SMS, książka telefoniczna, kalendarz, todo, notatki, system plików SMS, książka telefoniczna, kalendarz SMS, książka telefoniczna, kalendarz, system plików
Nokia Seria 40 1.0 i 2.0 - np. 5100, 6230
Nokia Seria 40 3.0 - np. 6111
SMS, książka telefoniczna, kalendarz, todo, notatki, system plików wysyłka SMS, książka telefoniczna, kalendarz
Nokia Seria 60 i inne (Symbian 6.x - 8.x) - np. 7610
częściowo kalendarz, todo
nie SMS, książka telefoniczna, kalendarz, todo
Standardy komendy AT (Nokia, Siemens, Alcatel, etc.) tak nie tak
OBEX tak nie
SyncML nie
 

W Internecie