Chybny prenos dat, com port, CreateFile, ReadFile
Dobry den,
snazim se nacitat data z gps modulu do me aplikace (vyvijene v eMbedded Visual C++ 4.0
) pro pda (HP,ipaq - 114, WM6) pres bluetooth. Nekdy data nactu bez problemu, jindy nacitam prazdna data. Ac jsou zarizeni sparovana, spojeni je aktivni, com port vytvoreny, data odesilana. Prodleva mezi uspesnym a neuspesnym nacitanim je rozdilna (napr. 1hod-3dny).
V aplikaci klasicky vyuzivam fce win api: handle=CreateFile(L"COM6:"...,, dale fce na nastaveni parametru serioveho prenosu, a fci ReadFile, vystupem je retezec do MessegeBoxu z ReadFile.
Nikdy nenastane nejaka sys. chyba, handle na soubor (port) se uspesne vytvori, readfile uspesne nacte data (nekdy bohuzel ale prazdna). Samozrejme jsem testoval i jine aplikace pracujici s nacitanim dat z GPS a problem nemaji (napr. miniGPSviewer). Port (COM6) volim spravny, testoval jsem ruzne modifikace nazvu portu ("COM6:","COM6","\\\\.\\COM6","\\\\.\\COM6:","\\.\COM6", apod.), uspel pouze "COM6:". Samozrejme ze pokud gps modul vypnu, com port se aplikaci nepovede vytvorit, tudiz predpokladam, ze propojeni je spravne. Otazkou je tedy proc ReadFile nekdy nacita prazdna data. Mam nejak adresovat zarizeni bloutooth, nebo mam vyuzivat nejake BT knihovny? Mozna by bylo nejake reseni pres sockety? Ale teto variante bych se radeji vyhnul.
S timto problemem se "morim" uz pomerne dlouho, zkousel preinstalovat ROM, sehnat lepsi, popr. jine ovladace na bluetooth, ale uz si opravdu nevim rady.
Budu velice vdecny za jakoukoliv radu. Dekuji.
snazim se nacitat data z gps modulu do me aplikace (vyvijene v eMbedded Visual C++ 4.0
) pro pda (HP,ipaq - 114, WM6) pres bluetooth. Nekdy data nactu bez problemu, jindy nacitam prazdna data. Ac jsou zarizeni sparovana, spojeni je aktivni, com port vytvoreny, data odesilana. Prodleva mezi uspesnym a neuspesnym nacitanim je rozdilna (napr. 1hod-3dny).
V aplikaci klasicky vyuzivam fce win api: handle=CreateFile(L"COM6:"...,, dale fce na nastaveni parametru serioveho prenosu, a fci ReadFile, vystupem je retezec do MessegeBoxu z ReadFile.
Nikdy nenastane nejaka sys. chyba, handle na soubor (port) se uspesne vytvori, readfile uspesne nacte data (nekdy bohuzel ale prazdna). Samozrejme jsem testoval i jine aplikace pracujici s nacitanim dat z GPS a problem nemaji (napr. miniGPSviewer). Port (COM6) volim spravny, testoval jsem ruzne modifikace nazvu portu ("COM6:","COM6","\\\\.\\COM6","\\\\.\\COM6:","\\.\COM6", apod.), uspel pouze "COM6:". Samozrejme ze pokud gps modul vypnu, com port se aplikaci nepovede vytvorit, tudiz predpokladam, ze propojeni je spravne. Otazkou je tedy proc ReadFile nekdy nacita prazdna data. Mam nejak adresovat zarizeni bloutooth, nebo mam vyuzivat nejake BT knihovny? Mozna by bylo nejake reseni pres sockety? Ale teto variante bych se radeji vyhnul.
S timto problemem se "morim" uz pomerne dlouho, zkousel preinstalovat ROM, sehnat lepsi, popr. jine ovladace na bluetooth, ale uz si opravdu nevim rady.
Budu velice vdecny za jakoukoliv radu. Dekuji.
Dobry den,
Nevim, jestli pochopil zcela, s cim mate problem.
1) Jestlize je vasim jedinym problemem to, ze obcas GPS vraci prazdna data, tak je jednoduse ignorujte - pokued vracene bajty nepredstavuji NMEA retezec (nezacinaji $GPRMC apod.)
2) Vite, ze od Windows Mobile 5 existuje intermediate driver pro GPS? To znamena, ze nemusite sam otvirat port pres CreateFile, ale pouzijete API GPSOpenDevice, GPSCloseDevice, GPSGetPosition a GPSGetDeviceState. Nevim, ale jak je to nyni u HP, HP drive pouzival pro BT Widcomm, coz vse trochu komplikuje.
Ani GPS API ale neni bez problemu - viz moje prednaska http://jdem.cz/ajah6
3) Mluvite o nastaveni COM portu - nekoliduje vase nastavani s nastavenim intermediate driveru? Zkusil jste jen otevrit port a nesnazit se zarizeni vnutit nejake nesmyslna a odhadovana nastaveni COM portu?
4) HP zarizeni s Widcomm stackem mely drive problemy se stabilitou driveru - napr. pri odstreleni nastaveni bluetooth (pouze UI), prestal chodit i driver pro bluetooth a GPS se odppojila.
Pres winsock komunikovat lze, ale je to o neco slozitejsi, nez jednoduche otevreni COM portu.
Nevim, jestli pochopil zcela, s cim mate problem.
1) Jestlize je vasim jedinym problemem to, ze obcas GPS vraci prazdna data, tak je jednoduse ignorujte - pokued vracene bajty nepredstavuji NMEA retezec (nezacinaji $GPRMC apod.)
2) Vite, ze od Windows Mobile 5 existuje intermediate driver pro GPS? To znamena, ze nemusite sam otvirat port pres CreateFile, ale pouzijete API GPSOpenDevice, GPSCloseDevice, GPSGetPosition a GPSGetDeviceState. Nevim, ale jak je to nyni u HP, HP drive pouzival pro BT Widcomm, coz vse trochu komplikuje.
Ani GPS API ale neni bez problemu - viz moje prednaska http://jdem.cz/ajah6
3) Mluvite o nastaveni COM portu - nekoliduje vase nastavani s nastavenim intermediate driveru? Zkusil jste jen otevrit port a nesnazit se zarizeni vnutit nejake nesmyslna a odhadovana nastaveni COM portu?
4) HP zarizeni s Widcomm stackem mely drive problemy se stabilitou driveru - napr. pri odstreleni nastaveni bluetooth (pouze UI), prestal chodit i driver pro bluetooth a GPS se odppojila.
Pres winsock komunikovat lze, ale je to o neco slozitejsi, nez jednoduche otevreni COM portu.
Dekuji za odpoved (paralelne na foru builder.cz)
1)GPS nevraci obcas prazdna data (tedy mezi hodnotnymi retezci reps. vetemi dle protokolu NMEA, tak jak jste me pochopil). GPS nebo spis readfile vraci treba hodinu testovaní SOUSTAVNE prazdny retezec a potom se neco stane (bez meho vlivu) a nejednou zacne vse chodit dle predpokladu (chodi mi plnohodnotna data urcena k "parsovani") a o neco pozdeji zase nastane doba, kdy chodi zase soustavne pouze prazdna data...
2)API GPS fce jsem neznal, sice by mela ma mini aplikace fungovat i pod WM2003, ale urcite vyzkousim.
3)Toto by mohl byt zdroj problemu. Nastavuji prenosovou rychlost, paritu, stopbit, velikost jednoho bytu, ostatni standardne. Mnou zadavane paremetry jsem testoval resp. zjistoval prvne na pc aplikaci hyperterminal a nasledne v uvedenem mini gps vieweru pro ppc. Je tedy pravda, ze aplikaci mini gps viewer se take chova ponekud zvlastne, po nejake dobe se sama ukonci (uplne ukonci). Ze strany vyrobce gps modulu nejsou poskytovany zadne informce pro doporucene nastaveni prenosu (EVOLVE). Tedy pokud neni nutne parametry prenosu nastavovat, vyzkousim bez...
4)O podobnych problemech jsem se take docetl. V mem pripade je dale gps pripojena, spojeni je aktivni.
Ano winsock bych se rad z tohoto duvodu vyhnul.
Dekuji
1)GPS nevraci obcas prazdna data (tedy mezi hodnotnymi retezci reps. vetemi dle protokolu NMEA, tak jak jste me pochopil). GPS nebo spis readfile vraci treba hodinu testovaní SOUSTAVNE prazdny retezec a potom se neco stane (bez meho vlivu) a nejednou zacne vse chodit dle predpokladu (chodi mi plnohodnotna data urcena k "parsovani") a o neco pozdeji zase nastane doba, kdy chodi zase soustavne pouze prazdna data...
2)API GPS fce jsem neznal, sice by mela ma mini aplikace fungovat i pod WM2003, ale urcite vyzkousim.
3)Toto by mohl byt zdroj problemu. Nastavuji prenosovou rychlost, paritu, stopbit, velikost jednoho bytu, ostatni standardne. Mnou zadavane paremetry jsem testoval resp. zjistoval prvne na pc aplikaci hyperterminal a nasledne v uvedenem mini gps vieweru pro ppc. Je tedy pravda, ze aplikaci mini gps viewer se take chova ponekud zvlastne, po nejake dobe se sama ukonci (uplne ukonci). Ze strany vyrobce gps modulu nejsou poskytovany zadne informce pro doporucene nastaveni prenosu (EVOLVE). Tedy pokud neni nutne parametry prenosu nastavovat, vyzkousim bez...
4)O podobnych problemech jsem se take docetl. V mem pripade je dale gps pripojena, spojeni je aktivni.
Ano winsock bych se rad z tohoto duvodu vyhnul.
Dekuji
Zustaneme jen na ce4you? :)
Jeste k bodu 3) U GPS intermediate driveru zalezi na tom, za pristupujete na fyzicky (HW) nebo SW port. U SW portu na nastaveni nesejde - intermediate driver pouze simuluje dalsi COM port. Pokud se ale bijete s intermediate driverem o GPS, tak vysledky volani mohou byt opravdu nedefinovatelne. I kdyz spis by HW port mel jiz byt obsazen a Vy byste mel dostat chybu pri pokusu o pristup.
Jeste k bodu 3) U GPS intermediate driveru zalezi na tom, za pristupujete na fyzicky (HW) nebo SW port. U SW portu na nastaveni nesejde - intermediate driver pouze simuluje dalsi COM port. Pokud se ale bijete s intermediate driverem o GPS, tak vysledky volani mohou byt opravdu nedefinovatelne. I kdyz spis by HW port mel jiz byt obsazen a Vy byste mel dostat chybu pri pokusu o pristup.
Zustaneme u ce4you:)
Zkousel jsem spustit opraveny kod bez nastaveni parametru prenosu a stale se nedari, budu tedy muset opravdu asi volit cestu gps api fci. Mimochodem k GPS intermidiate driveru je pridelena utilita "Externi GPS" v nabidce nastaveni, zalozce system?
V tomto jsem zkousel take ruzne prednastavovat COM port (tedy hlavne ten hardwarovy) a take bez uspechu. Jeste jsem take resil, ze v nastaveni serioveho portu Bluetooth ve volbe Nastaveni Bluetooth je prichozi COM port 5 a odchozi COM 6. Kazdopadne mini GPS viewer cte data jen z COM 6 a dalsi obdobna aplikace take. Kdyz v me aplikaci nastavim, ze chci cist z portu 5, vraci se INVALID_HANDLE_VALUE, tudiz jsem celou dobu usuzoval, ze spravny COM port je 6. Nemuze byt problem nekde v tomto? Dekuji.
Zkousel jsem spustit opraveny kod bez nastaveni parametru prenosu a stale se nedari, budu tedy muset opravdu asi volit cestu gps api fci. Mimochodem k GPS intermidiate driveru je pridelena utilita "Externi GPS" v nabidce nastaveni, zalozce system?
V tomto jsem zkousel take ruzne prednastavovat COM port (tedy hlavne ten hardwarovy) a take bez uspechu. Jeste jsem take resil, ze v nastaveni serioveho portu Bluetooth ve volbe Nastaveni Bluetooth je prichozi COM port 5 a odchozi COM 6. Kazdopadne mini GPS viewer cte data jen z COM 6 a dalsi obdobna aplikace take. Kdyz v me aplikaci nastavim, ze chci cist z portu 5, vraci se INVALID_HANDLE_VALUE, tudiz jsem celou dobu usuzoval, ze spravny COM port je 6. Nemuze byt problem nekde v tomto? Dekuji.
Ano, ten an applet se vetsinou jmenuje externi GPS. HW port by mel byt COM6 (pres nej asi fyzicky na BT komunikujete - v tom bych problem nevidel, terminologie Ingoing a Outgoing port je matouci :) ).
Zkusil jste z aplikace otevrit ten nastaveny SW port?
Zkusil jste z aplikace otevrit ten nastaveny SW port?
Ano, mam HW port nastaven na COM6 a ve sve aplikaci v CreateFile take COM6, data stale neprichazeji. Pokud je gps modul zapnut ReadFile vrati prazdny retezec (spojeni je aktivni), pokud je modul vypnut, CreateFile vrati INVALID_HANDLE_VALUE a ReadFile false (spojeni neni aktivni). Dekuji.
Asi jsme si nerozumeli - v appletu je hned prvni zalozka Programy, kde vyberete VOLNY COM port , na ktery se pripojite (uz se nebudete pripojovat na "FYZICKY-BT emulaci" HW portu, ale pripojite se na sdileny COM port). V appletu na posledni zalozce Pristup musi byt take zatrzeno Spravovat zarizeni GPS automaticky.
Pokud Vam to nepujde, zkuste take Intermediate driver vypnout - zruste zaskrtnuti u Spravovat zarieni GPS automaticky a pripojte se na fyzicky port COM6 (ted uz o nej nebudete souperit s driverem).
Pokud Vam to nepujde, zkuste take Intermediate driver vypnout - zruste zaskrtnuti u Spravovat zarieni GPS automaticky a pripojte se na fyzicky port COM6 (ted uz o nej nebudete souperit s driverem).
A jeste pro jistotu - nazev SW portu si zkontrolujte v registrech HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer:DriverInterface.
Nektera zarizeni, se kterymi jsem pracoval, pouzivala prefix GPD a ne COM.
Nektera zarizeni, se kterymi jsem pracoval, pouzivala prefix GPD a ne COM.
Registr jsem zkontroloval HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer:ActiveDevice je nastaven prefix na COM (posledni sekce neni DriverIterface tak jak u Vas ale ActiveDevice.
Vyse uvedene jsem take otestoval. Nevim, jestli Vam rozumim, co myslite pojmem vybrat VOLNY COM port, bud muzu vybrat zadny nebo 0-9 COm (takze spise to,ze?), vyzkousel jsem kazdopadne vsechny varianty a zadna nebyla uspesna. Program reaguje stale stejne. Handle se vytvori pouze na port COM6: a nic jineho, volba v appletu nijak vysledek neovlivnuje.
Zatim se mi vubec nezadarilo alespon na nejekou dobu data nacitat, tak jak v minulosti.
Dekuji za venovany cas.
Vyse uvedene jsem take otestoval. Nevim, jestli Vam rozumim, co myslite pojmem vybrat VOLNY COM port, bud muzu vybrat zadny nebo 0-9 COm (takze spise to,ze?), vyzkousel jsem kazdopadne vsechny varianty a zadna nebyla uspesna. Program reaguje stale stejne. Handle se vytvori pouze na port COM6: a nic jineho, volba v appletu nijak vysledek neovlivnuje.
Zatim se mi vubec nezadarilo alespon na nejekou dobu data nacitat, tak jak v minulosti.
Dekuji za venovany cas.
K nastaveni: ActiveDevice je dalsi klic
Pod HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer musite mit hodnotu DriverInterface. COM4 apod.
Volnym COM portem myslim COM port, ktery nekoliduje s dalsimi COM porty v zarizeni. Muze se Vam stat, ze treba COM2 je jiz obsazen, ale vy ho vvyberete ze seznamu.
Zkousel jste po zmene hodnot soft reset (vypnuti zarizeni pres tlacitko On/Off, aby se ulozily zmeny v registrech), abyste donutil driver hodnoty znovu nacist - i kdyz by GPS driver na kazdem zarizeni mel dostat proikaz IOCTL_REFRESH?
Kdyz rikate, ze jste nenacetl zadna data? Co presne se vam tedy vraci? ReadFile nevraci "nic" nebo nejaky nesmysl? Zkusil jste cist data, kdyz GPS mela fix?
Zkusil jste i tu variantu s uplnym vyrazenim Intermediate driveru? Nebo se zkusit dostat k datum pres GPSOpen?
Pod HKEY_LOCAL_MACHINE\System\CurrentControlSet\GPS Intermediate Driver\Multiplexer musite mit hodnotu DriverInterface. COM4 apod.
Volnym COM portem myslim COM port, ktery nekoliduje s dalsimi COM porty v zarizeni. Muze se Vam stat, ze treba COM2 je jiz obsazen, ale vy ho vvyberete ze seznamu.
Zkousel jste po zmene hodnot soft reset (vypnuti zarizeni pres tlacitko On/Off, aby se ulozily zmeny v registrech), abyste donutil driver hodnoty znovu nacist - i kdyz by GPS driver na kazdem zarizeni mel dostat proikaz IOCTL_REFRESH?
Kdyz rikate, ze jste nenacetl zadna data? Co presne se vam tedy vraci? ReadFile nevraci "nic" nebo nejaky nesmysl? Zkusil jste cist data, kdyz GPS mela fix?
Zkusil jste i tu variantu s uplnym vyrazenim Intermediate driveru? Nebo se zkusit dostat k datum pres GPSOpen?
Nyni je hodnota DriverInterface COM6. Prenastavovani jsem zkousel i se soft resetem. I variantu s vyrazenim Intermediate driveru jsem testoval .
ReadFile vrati true, retezec do ktereho ReadFile nacita je stejny jako pri definici tj.
WCHAR str[83]=L"STR:Žádná data k dispozici!"; a z MessageBoxu vyleze neprepsany retezec tj."STR:Žádná data k dispozici!" Ale jak jsem uvadel, nekdy to funguje a normalne z toho dostavam plnohodnotne vety k parsovani, ktere jsem uz i vyparsoval a v realu vyzkousel.:-/
Pustim se tedy do varianty GPSOpen...
ReadFile vrati true, retezec do ktereho ReadFile nacita je stejny jako pri definici tj.
WCHAR str[83]=L"STR:Žádná data k dispozici!"; a z MessageBoxu vyleze neprepsany retezec tj."STR:Žádná data k dispozici!" Ale jak jsem uvadel, nekdy to funguje a normalne z toho dostavam plnohodnotne vety k parsovani, ktere jsem uz i vyparsoval a v realu vyzkousel.:-/
Pustim se tedy do varianty GPSOpen...
No pokud dostavate smysluplne hlasky, tak vam GSPS intermediate driver funguje ne? Pouze nemate FIX a intermediate driver Vam prozatim nema, co vratit? Tezko by Vam GPS samotna vracela "zadna data k dispozici".
Update: Uz rozumim, ten retezec jste naplnil Vy? Ja myslel, ze jde o nejakou lokalizovanou hlasku. Muzete sem dat, jak pouzivate ReadFile? Zkontroloval jste lpNumberOfBytesRead, zda vubec bylo neco precteno?
Update: Uz rozumim, ten retezec jste naplnil Vy? Ja myslel, ze jde o nejakou lokalizovanou hlasku. Muzete sem dat, jak pouzivate ReadFile? Zkontroloval jste lpNumberOfBytesRead, zda vubec bylo neco precteno?
To jsme si ted nerozumeli. Byla to ilustrace. Definuji si retezec do ktereho behem inicializace zapisu nejaky text, prave to: "zadna data k dispozici" a ten stejny nezmeny retezec je na vystupu, readfile vrati true, handle se vytvori, spojeni mezi pda a gps modulem je aktivni. Tudiz se nacetla prazdna data. Stejne tak kdyz si vytvorim prazdny retezec, tak po "projiti" readfile je navystupu porad prazdny retezec. Jinak necham gps treba 5min nabihat a potom testuji, takze bych fix uz v te chvili urcite mel mit. Diky.
1) Napsal jsem pot k prechozimu prispevku, ze uz rozumim tomu, ze retezec je vas.
2_)Fix by mela GPS signalizovat zmenou nejake ledky, takze pak nemusite hadat, zda fix mate.
3) Protoze jsem trochiu deformovan svymi knihovnami, ktere jsem si napsal, tak jsem si ted udelal jednoduchy program, ktery cte data z COM portu
Tohle dostanu ihned po spusteni (nemam fix, castecne cachovana data).
[code]
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,
[/code]
Rutina pro cteni:
[code]
void CheckGPS()
{
HANDLE hFile = ::CreateFile(_T("COM4:"),
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
CHAR buffer[BUFFER_SIZE];
ZeroMemory(buffer, BUFFER_SIZE);
BOOL result = false;
DWORD count = 0;
do
{
result = ReadFile(hFile,
buffer,
BUFFER_SIZE - 1,
&count,
NULL);
if (result && count > 0)
{
buffer[count] = '\0';
}
//Prevest na WCHAR, Zpracovat, pokracovat
}while(result && count > 0);
CloseHandle(hFile);
}
[/code]
2_)Fix by mela GPS signalizovat zmenou nejake ledky, takze pak nemusite hadat, zda fix mate.
3) Protoze jsem trochiu deformovan svymi knihovnami, ktere jsem si napsal, tak jsem si ted udelal jednoduchy program, ktery cte data z COM portu
Tohle dostanu ihned po spusteni (nemam fix, castecne cachovana data).
[code]
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,178,,12,,,*42
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,63,270,,23,26,201,,28,,,,31,23,091,*49
$GPGSV,4,4,13,32,82,021,*43
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$PSTIS,*61
$GPGSV,4,1,13,04,,,,05,,,,11,66,177,,12,,,*4D
$GPGSV,4,2,13,13,02,206,,14,21,043,,17,33,299,,19,04,175,*73
$GPGSV,4,3,13,20,64,271,,23,26,201,,28,,,,31,24,091,*48
$GPGSV,4,4,13,32,82,025,*47
$GPGGA,,,,,,0,,,,,,,,*66
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N*53
$GPGSA,A,1,,,,,,,,,,,,
[/code]
Rutina pro cteni:
[code]
void CheckGPS()
{
HANDLE hFile = ::CreateFile(_T("COM4:"),
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
CHAR buffer[BUFFER_SIZE];
ZeroMemory(buffer, BUFFER_SIZE);
BOOL result = false;
DWORD count = 0;
do
{
result = ReadFile(hFile,
buffer,
BUFFER_SIZE - 1,
&count,
NULL);
if (result && count > 0)
{
buffer[count] = '\0';
}
//Prevest na WCHAR, Zpracovat, pokracovat
}while(result && count > 0);
CloseHandle(hFile);
}
[/code]
A tady je jeste upraveny cyklus s "dirty" prevodem na wchar, mensim bufferem a s ukoncenim cyklu pouze pri chybe. Ted jsem si na HTC Touch Pro overil, ze bez problemu ziskavam z $GPRMC sentence informaci o fixu pozice a bez problemu koexistuju s TomTomem.
[code]
void CheckGPS()
{
HANDLE hFile = ::CreateFile(_T("COM4:"),
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
CHAR buffer[BUFFER_SIZE];
WCHAR wbuffer[BUFFER_SIZE];
ZeroMemory(buffer, BUFFER_SIZE);
ZeroMemory(wbuffer, BUFFER_SIZE * sizeof(WCHAR));
BOOL result = FALSE;
DWORD count = 0;
do
{
result = ReadFile(hFile,
buffer,
BUFFER_SIZE - 1,
&count,
NULL);
if (result && count > 0)
{
buffer[count] = '\0';
//Prevest na WCHAR, Zpracovat, pokracovat
MultiByteToWideChar(CP_OEMCP, 0, buffer, count + 1, wbuffer, BUFFER_SIZE);
MessageBox(m_instance, wbuffer, _T(""), MB_OK);
}
}while(result);
CloseHandle(hFile);
}
[/code]
[code]
void CheckGPS()
{
HANDLE hFile = ::CreateFile(_T("COM4:"),
GENERIC_READ,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return;
}
CHAR buffer[BUFFER_SIZE];
WCHAR wbuffer[BUFFER_SIZE];
ZeroMemory(buffer, BUFFER_SIZE);
ZeroMemory(wbuffer, BUFFER_SIZE * sizeof(WCHAR));
BOOL result = FALSE;
DWORD count = 0;
do
{
result = ReadFile(hFile,
buffer,
BUFFER_SIZE - 1,
&count,
NULL);
if (result && count > 0)
{
buffer[count] = '\0';
//Prevest na WCHAR, Zpracovat, pokracovat
MultiByteToWideChar(CP_OEMCP, 0, buffer, count + 1, wbuffer, BUFFER_SIZE);
MessageBox(m_instance, wbuffer, _T(""), MB_OK);
}
}while(result);
CloseHandle(hFile);
}
[/code]
Problem odhalen!
Svuj kod jsem mel temer stejny jako ten Vas (aby taky ne, zas tolik cest neni:), az na jednu "malickost" a to cyklus. Nacetl jsem pouze jednou data a ty vypsal v MessageBoxu, nekdy to vyslo a nekdy ne. Prvni co prijde, tak je prazdny retezec a pak dalsi retezce chodi uz s daty (ty jsem uz logicky nemohl videt), jeste se musim zamyslet, proc to tak je. Kazdopadne se omlouvam za reseni dost zbytecneho problem, za to ze jsem Vas mystifikoval a snazil se zmanipulovat, ze problem je mimo muj kod:) Mockrat dekuji za Vas vynalozeny cas.
Svuj kod jsem mel temer stejny jako ten Vas (aby taky ne, zas tolik cest neni:), az na jednu "malickost" a to cyklus. Nacetl jsem pouze jednou data a ty vypsal v MessageBoxu, nekdy to vyslo a nekdy ne. Prvni co prijde, tak je prazdny retezec a pak dalsi retezce chodi uz s daty (ty jsem uz logicky nemohl videt), jeste se musim zamyslet, proc to tak je. Kazdopadne se omlouvam za reseni dost zbytecneho problem, za to ze jsem Vas mystifikoval a snazil se zmanipulovat, ze problem je mimo muj kod:) Mockrat dekuji za Vas vynalozeny cas.