PDAclub.pl - Forum użytkowników technologii mobilnych
Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: tzok w Marzec 26, 2009, 21:40:23
-
GPS Intermediate Driver poza dostarczaniem wyników parsowania zdań NMEA umożliwia również współdzielony dostęp do surowych danych z GPS, niestety nie mogę sobie poradzić z dostępem do nich. Są one dostępne przez wirtualny port COM ale nie można go tak zwyczajnie otworzyć, a bardzo mi na tym zależy... mam działający program i dla fizycznego portu COM na którym jest GPS wszystko działa, a dla tego wirtualnego - nie. Natomiast w programie AutoMapa czy wybiorę port fizyczny czy wirtualny - wszystko działa poprawnie.
Zaletą wirtualnego portu jest to, że może z niego korzystać równocześnie wiele aplikacji... tylko jak?
-
Grzebałeś tutaj: http://msdn.microsoft.com/en-us/library/ms894898.aspx (http://msdn.microsoft.com/en-us/library/ms894898.aspx)
tutaj jeszcze masz dyskusję:
http://social.msdn.microsoft.com/Forums/en-US/windowsmobiledev/thread/f0a362e8-d24c-4acf-802c-48a2ba36254c/
wynika stąd, że trzeba załadować urządzenie tego virtualnego gps wcześnej.
Przykład z portem szeregowym poprzedzonym otwarciem urządzenia jest w sekcji odnośnie programowania BT na msdn.
-
Na MSDNie wygrzebałem tylko to - http://msdn.microsoft.com/en-us/library/ms889504.aspx ale nie wiem jak miałbym z tego skorzystać w C#, to o czym tam mowa to natywne funkcje z coredll.dll ale jak i kiedy je wywoływać, komponent portu szeregowego z .NET generuje zdarzenia, a ta funkcja...
W tym poście którym podałeś koleś pisze, że jemu Intermediate Driver nie chce "wstać" a po wirtualnym porcie działa, ale obawiam się że on myli wirtualny port z fizycznym... próbowałem otworzyć ten port tak przed aktywowaniem jak i po aktywowaniu GPSa.
-
Możesz przesłać kawałek kodu w którym otwierasz ten port i kawałek w którym czytasz dane? Ciężko mi coś konkretnego powiedzieć jak nie mam czarno na białym co nie działa. W netcf chyba też można podłączać sie do natywnego kodu więc nie powinno być tragedii. Byle rozgryźć czy samo otwarcie portu wystarczy. Mi sie wydaje że nie - piszą coś że trzeba ustawić dane w rejestrze i wywołać funkcję kontrolną z komendą odświerz. Są też jakieś funkcje do włączania i wyłączania drivera. Ja to widzę tak piszesz krótki kod w C włączający/incjalizujący driver. Łączysz kod z C# i dalej używasz już portów szeregowych w net po swojemu.
-
Driver działa i odbieram z niego dane, chciałem też wyświetlać "RAW Data" ale w ogóle nie mogę otworzyć wirtualnego portu tworzonego przez driver. GPS mam zintegrowany, do jego portu fizycznego mogę się podłączyć i odczyt RAW data działa, tylko że otwarcie portu fizycznego blokuje inne aplikacje w tym driver.
Nie znam C i nie potrafię w nim nic napisać.
Problem jest do powtórzenia na Device Emulator, wystarczy zainstalować Fake GPS z SDK Windows Mobile 6 (działa z WM 5) i włączyć intermediate driver.
Tak ustalam identyfikator wirtualnego portu obsługiwanego przez Intermediate Driver:
// BEGIN: Ustalenie ID wirtualnego portu COM
bool success = true;
try
{
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\GPS Intermediate Driver\Multiplexer", false);
gps_com = ((string)reg.GetValue("DriverInterface")).Substring(0, 4);
}
catch
{
MessageBox.Show("Błąd dostępu do rejestru");
success = false;
}
if (success)
{
try
{
comport = new SerialPort(gps_com);
}
catch
{
MessageBox.Show("Błąd podczas otwierania portu " + gps_com);
success = false;
}
}
if (!success)
this.Close();
// END: Ustalenie ID wirtualnego portu COM
Tak go otwieram:
comport.Open();
i dostaję taki wyjątek:
(http://obrazki.elektroda.net/56_1238261711_thumb.gif) (http://obrazki.elektroda.net/56_1238261711.gif) << -- KLIK
Oczywiście sprawdzałem z portem ustawionym na sztywno jako "COM4" (bo taki jest ustawiony w sterowniku) i ten sam efekt.
Automapa działa zarówno jeśli wybiorę COM4 (wirtualny) jak i COM2 (fizyczny).
-
Sprawdzę co i jak z tym wirtualnym GPS na swoim PDA ale mi tu jakby trochę brakuje ustawień fizycznych parametrów portu. Niby wirtualny ale normalnie programy przed rozpoczęciem odczytu ustawiają te parametry i może MS chciał zachować kompatybilność w tym zakresie.
-
Mogę podawać parametry, niczego to nie zmienia... testowane zarówno na fizycznym urządzeniu (Mio P550m) jak i na emulatorze.
-
Coś te porty seryjne w netcf są pokićkane. Faktycznie mam takie sam jaja jak Ty. Jak podłącze GPS przez BT to ok, otwiera. Jak ten od drivera to klapa. Ale udało mi się coś takiego:
System.IO.FileStream fs = System.IO.File.Create("COM5:");
na COM5 jest u mnie wirtualny driver. Nie wywaliło wyjątku. Poszło też z GPD1: ( ekwiwalent tego portu ) oraz GPD0:
Może spróbuj czy odczyty dają sensowne wyniki surowych danych.
Jest może jakiś sposób żeby ten deployment aplikacji skrócić dla projektu C#? Ew. żeby nie ładował wszystkich dodatków.
-
Jak sobie zrobisz Save State na Device Emulatorze to nie będzie musiał za każdym razem instalować .NET CF 2.0/3.5 (WM ma preinstalowany tylko 1.0).
Niestety nie wiem od czego to zależy ale sam Deploy, bez kompilacji czasem trwa mi 3-4s a czasem koło 30s... sam emulator też nie powala szybkością działania.
-
Ładowałem app na prawdziwego pocketa. Mam na nim netcf3.5 zainstalowany przypadkiem i mimo to mi ładował wsparcie dla net-a 2.0 Trochę to chore. Aplikacje w c++ pisane szybko szły.
Daj znać co z tego strumienia wyciągasz. Niestety nie mam czasu wczytywać się w spec protokołu a dobrze byłoby wiedzieć czy przez plik da się dobrać do tego virtualnego GPS-u. Niby powinno być ok, bo na najniższym poziomie zdaje się jest wywoływana CreateFile a to jest to, o co chodzi.
-
Nie potrafię nic z tego odczytać przy próbie wywołania fs.Read(...) dostaję wyjątek "NotSupportedException".
Powinienem otrzymać ciąg sentencji NMEA, wyglądający mniej więcej tak:
$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E
$GPRMC,191940.767,A,4738.0173,N,12211.1869,W,0.096214,42.86,291004,,*27
$GPGGA,191941.767,4738.0174,N,12211.1868,W,1,06,1.4,33.1,M,-17.2,M,0.0,0000*74
$GPGLL,4738.0174,N,12211.1868,W,191941.767,A*29
$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E
$GPRMC,191941.767,A,4738.0174,N,12211.1868,W,0.085352,51.04,291004,,*29
$GPGGA,191942.767,4738.0175,N,12211.1868,W,1,06,1.4,32.9,M,-17.2,M,0.0,0000*7F
$GPGLL,4738.0175,N,12211.1868,W,191942.767,A*2B
$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E
$GPRMC,191942.767,A,4738.0175,N,12211.1868,W,0.127249,18.18,291004,,*29
$GPGGA,191943.766,4738.0176,N,12211.1868,W,1,06,1.4,32.7,M,-17.2,M,0.0,0000*72
$GPGLL,4738.0176,N,12211.1868,W,191943.766,A*28
$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E
$GPRMC,191943.766,A,4738.0176,N,12211.1868,W,0.066870,57.51,291004,,*28
$GPGGA,191944.766,4738.0177,N,12211.1868,W,1,06,1.4,32.6,M,-17.2,M,0.0,0000*75
$GPGLL,4738.0177,N,12211.1868,W,191944.766,A*2E
$GPGSA,A,3,08,27,10,28,13,19,,,,,,,2.6,1.4,2.3*3E
$GPGSV,3,1,9,8,71,307,42,27,78,59,42,3,21,47,0,10,26,283,34*76
$GPGSV,3,2,9,29,13,317,0,28,37,226,39,13,32,155,35,19,37,79,41*4C
$GPGSV,3,3,9,134,0,0,0*46
-
A jak w ten sposób otworzysz com-a sprzętowego gps-u też nic nie odczytuje? Niestety nie mogę w teraz przetestować. :(
-
tak wiem, że to będzie lamerskie rozwiązanie, ale nie prościej włączyć w sterowniku gpsid logowanie info do pliku i odczytywać go na bieżąco?
-
Ja tu widzę taki problem, że nie wiedziałbyś z jakich momentów te próbki pochodzą ( chyba że jest to w nich zapisane ). No i dodatkowo troche się wkurzyłem, że ten serial nie działa, a nie lubie nierozwiązanych problemów :S
-
Jeśli GPSID w WM5 ma możliwość logowania do pliku to ostatecznie mogło by to być, ale zdecydowanie wolałbym jakoś z portu to czytać, bo tak przynajmniej mam zdarzenie które obsługuję, a w przypadku pliku, skąd mam wiedzieć kiedy go czytać? Potrafię czytać pliki których rozmiar znam, a to jest niekończący się strumień danych, które na dodatek pojawiają się "porcjami".
P.S.
FakeGPS z SDK WM6 działa pod WM5 ale podaje jakieś bzdury (tzn. dokładnie to podaje zamiast 144d 25m 18s - 14425d 18m 1s) jako współrzędne i na początku po włączeniu wywala przykładową aplikację błędem dzielenia przez zero... (nawet tę z SDK WM6 przerobiona na WM5). Tak więc lepiej testować pod WM6.
-
Proponowałbym jednak rozwalić ten problem. Jakoś się da na pewno. Jak nie robi Ci to problrmu to zmień w kodzie com na ten od sprzętowego gps i sprawdź czy wyjątek wywala Dopiero wieczorkiem będe przy swoim kompie.
-
Proponowałbym jednak rozwalić ten problem. Jakoś się da na pewno. Jak nie robi Ci to problrmu to zmień w kodzie com na ten od sprzętowego gps i sprawdź czy wyjątek wywala Dopiero wieczorkiem będe przy swoim kompie.
Jeśli wskażę fizyczny port wywala IOException już przy próbie utworzenia strumienia...
-
Sprawdź może czy przypadkiem port nie jest już otwarty i jeśli nie jest to dopiero go spróbuj otworzyć.
if(comport.IsOpen == false)
{
try
{
comport.Open();
}
catch
{
MessageBox.Show("Nie można otworzyć portu GPS");
}
}