GPS una din cele mai sexy aplicatii pe Windows Mobile.
Hai sa aflam cum se face asa ceva, in stilul crash course.
Sa incepem cu informatii minime de background. Da sistemul GPS are treaba cu sateliti in numar de, cu ora etc si o tona de matematica 3D, dar pentru povestea noastra nu e relavant prea mult si in plus de asta exista si Wikipedia (http://en.wikipedia.org/wiki/GPS). Un detaliu ar trebui totusi notat ora GPS e corecta dar nu corectata, adica sistemul GPS a ramas la ora anilor 80, intre timp pamintul s-a grabit/lenevit putin si pe pamint noi am corectat ora cu ceva secunde. Deci nu va bazati orbeste pe ora GPS...
OK aveam o cutie neagra care va sti pozitia, cum si ce protocol folosesc pentru comunicare. Normal un standard deja existent pentru aparatura de navigatie (NMEA 0183) care conform Wikipedia (http://en.wikipedia.org/wiki/NMEA_0183) este:
NMEA 0183 (NMEA for short) is a combined electrical and data specification for communication between marine electronic devices such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other. It has been defined by, and is controlled by, the U.S.-based National Marine Electronics Association. The standard uses a simple ASCII, serial communications protocol that defines how data is transmitted in a "sentence" from one "talker" to one "listener" at a time.
Nota: inca vorbim de NMEA 0183 nu de NMEA 2000 (exista dar inca nu e asa de raspindit).
O chestie sare in ochi este comunicatie seriala. O mare problema la Windows Mobile e ca nu permite acces shared la porturi => doar o plicatie poate folosi GPS la un moment dat. Si in plus hard GPS e divers si poate ar fi bine sa fie putin "abstractizat" . Si Microsoft a venit cu o solutie, GPS Intermediate Driver (http://msdn.microsoft.com/en-us/library/ms850332.aspx). Beneficiu direct e ca acuma oricte aplicatii pot lua date GPS, GPS Intermediate Driver e conectat la portul fizic si ceilalti la el. Mai aduce si alte beneficii interesante dar vorbim de ele mai tirziu.
Nota: este posibil dar nerecomandat sa nu se foloseasca acest driver, principalul motiv ca nu ma port frumos cu alte aplicatii potential interesate in date GPS (si acuma pina si aplicatiile de IM vor date GPS).
Sa facem o aplicatie GPS aware. E foarte simplu avem un sample folosibil (care cred ca e baza a a buna parte din aplicatiile GPS existente
).
Deci out of the box and ready to use: C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS.
In folderul GPSSample se afla aplicatia ce afiseaza datele citite, destul de simpla si clara.
Clasele care fac treaba sint prezentate mai jos, normal ele trebuie incluse in aplicatia noastra .
GPS Sample Classes (http://msdn.microsoft.com/en-us/library/ms881362.aspx) :
- Gps: The interface to the managed GPS API. Use this class to open, close, and query the device state, and to query the position data from your GPS hardware.
- GpsPosition: Contains the GPS position data received from the GPS hardware.
- GpsDevice: Contains the GPS device state data received from the GPS hardware.
- Utils: Native memory allocation utilities.
Toate aceste clase pot fi modificate dupa cum vrem noi, refactorizate combinate si asa cu exceptia lui GPSPosition care e mai speciala. Mai speciala in sensul ca nu va permite adaugarea de membrii (adica se compileaza dar nu va mai vedea datele GPS). Si pentru cod sample Microsoft respecta surpinzator de mult standardele lor de codare
.
OK am sample se compileaza, il rulez si nu arata nimic... Solutii ma mut in gradina si imi iau un device fizic pe care fac debug. Sau o antena GPS cu un cablu de 10 metri. Bune idei nu? 
Din fericire se pare ca la Redmond nu e gradina si deci avem si o solutie de debug pentru emulator. GPS Intermediate Driver permite citirea unui fisier in loc de un port. Da deja va ginditi la aplicatii la care ati putea folosi asta si nu la debug. Si deci si in emulator si in lumea reala puteti folosi un fisier NMEA inregistrat de altceva alcineva sau chiar facut de mina (e ASCII) sau chiar folosind o aplicatie (vezi FakeGps Helper http://www.codeplex.com/fakegpshelper).
Ca fie folosit ar trebui modificate setarile in registry a GPS Intermediate Driver http://msdn.microsoft.com/en-us/library/ms889974.aspx. E help de la Microsoft totul clar nu? Aici e o versiune mai mura in gura a setarilor http://www.bbits.co.uk/blog/archive/2006/07/14/12027.aspx.
Dupa cum se vede setarile astea in registry sint destul de imbirligat de facut, si Microsoft a venit cu tool (in SDK WM 6 dar cred ca merge si pe WM 5) numit FakeGPS care sa le faca (si mai mura in gura
), ce poate fi instalat pe emulator sau pe device. Aici sint instructiunile de instalare http://msdn.microsoft.com/en-us/library/bb158722.aspx. Da vedeti ca nu e specificat path complet la fisierele NMEA, le cauta in urmatoarea locatie pe device \Program Files\FakeGPS\GPSFiles.
Eu zic ca am acoperit subiectul, cred ca atita informatie e suficienta pentru a dezvolta aplicatiile voastre GPS aware si care sa fie si de calitate.
Bine matematica nu am acoperit-o dar dpv practic cred ca nici nu conteaza.
Si un ultim pont (il intelegeti numa dupa ce ati aruncat un ochi in clasele GPS), in Romania solutia de 7 sateliti e cea mai mica care da date acceptabile. Parerea mea
.
Posted
Wed, Nov 11 2009 1:44 AM
by
MrSmersh