Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

GPS+programove dotazovani na nej

temp_ce4you (23)|8.12.2007 11:00
zdarec,
nezkousel jste nekdo programove dotazovat v PDA (PPC) s WM5 GPS modul aby vratil dane aktualni souradnice?
S tim ze by jste si je pripadne ulozili a potom prenesly treba na www.mapy.cz, nebo jiny mapovy SW?

nejlepe v C#, nebo VisualBasic
RStein (2012)|8.12.2007 11:24
Vw WM5+ je to velmi jednoduchy ukol.
Staci pouzit intermediate driver pomoci API funkci GpsOpen, GpsGetPosition, GpsClose, GpsGetDeviceState.
API funkce do C# dostanete pomoci P/Invoke - metaatribut DllImport.
Haja111 (2)|11.1.2008 20:50
[QUOTE="RStein"]Vw WM5+ je to velmi jednoduchy ukol.
Staci pouzit intermediate driver pomoci API funkci GpsOpen, GpsGetPosition, GpsClose, GpsGetDeviceState.
API funkce do C# dostanete pomoci P/Invoke - metaatribut DllImport.[/QUOTE]

Da se někde najít bližší informace o implementaci těchto funkcí pro práci s GPS? Se C# začínám a na netu se mi nic podrobnějšího najít zatím nepodařilo.

Díky za odpověď
temp_ce4you (23)|12.1.2008 12:21
[QUOTE="Haja111"][QUOTE="RStein"]Vw WM5+ je to velmi jednoduchy ukol.
Staci pouzit intermediate driver pomoci API funkci GpsOpen, GpsGetPosition, GpsClose, GpsGetDeviceState.
API funkce do C# dostanete pomoci P/Invoke - metaatribut DllImport.[/QUOTE]

Da se někde najít bližší informace o implementaci těchto funkcí pro práci s GPS? Se C# začínám a na netu se mi nic podrobnějšího najít zatím nepodařilo.

Díky za odpověď[/QUOTE]

Taktez se pridavam, byla by mozna nejaka mala ukazka ?
Haja111 (2)|12.1.2008 22:21
[QUOTE="temp"][QUOTE="Haja111"][QUOTE="RStein"]Vw WM5+ je to velmi jednoduchy ukol.
Staci pouzit intermediate driver pomoci API funkci GpsOpen, GpsGetPosition, GpsClose, GpsGetDeviceState.
API funkce do C# dostanete pomoci P/Invoke - metaatribut DllImport.[/QUOTE]

Da se někde najít bližší informace o implementaci těchto funkcí pro práci s GPS? Se C# začínám a na netu se mi nic podrobnějšího najít zatím nepodařilo.

Díky za odpověď[/QUOTE]

Taktez se pridavam, byla by mozna nejaka mala ukazka ?[/QUOTE]

Objevil jsem zatím tenhle poměrně kvalitní článek co se týče obsahu zdrojových kódu, ale zatím mu moc nerozumím... kdyby se našel nějaký dobrák a popsal tady jak pracovat s GPS hardwarem, byl bych mu moc vděčný :-*

http://www.codeproject.com/KB/vb/WritingGPSApplications1.aspx
RStein (2012)|13.1.2008 10:45
Pro C# potrebujete tyto deklarace.

[CODE]
public const int LMEM_ZEROINIT = 0x40;
[System.Runtime.InteropServices.DllImport("coredll.dll", EntryPoint = "#33", SetLastError = true)]
public static extern IntPtr LocalAlloc(int flags, int byteCount);

[System.Runtime.InteropServices.DllImport("coredll.dll", EntryPoint = "#36", SetLastError = true)]
public static extern IntPtr LocalFree(IntPtr hMem);

[DllImport("gpsapi.dll")]
static extern IntPtr GPSOpenDevice(IntPtr hNewLocationData, IntPtr hDeviceStateChange, string szDeviceName, int dwFlags);

[DllImport("gpsapi.dll")]
static extern int GPSCloseDevice(IntPtr hGPSDevice);

[DllImport("gpsapi.dll")]
static extern int GPSGetPosition(IntPtr hGPSDevice, IntPtr pGPSPosition, int dwMaximumAge, int dwFlags);

[DllImport("gpsapi.dll")]
static extern int GPSGetDeviceState(IntPtr pGPSDevice);
#endregion

#region PInvokes to coredll.dll
[DllImport("coredll.dll")]
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, int bManualReset, int bInitialState, StringBuilder lpName);

[DllImport("coredll.dll")]
static extern int CloseHandle(IntPtr hObject);

const int waitFailed = -1;
[DllImport("coredll.dll")]
static extern int WaitForMultipleObjects(int nCount, IntPtr lpHandles, int fWaitAll, int dwMilliseconds);

const int eventSet = 3;
[DllImport("coredll.dll")]
static extern int EventModify(IntPtr hHandle, int dwFunc);


l[/CODE]

Soucasti WM 5 a 6 SDK v Samples je kompletni priklad na GPS, to se da zjistit rychleji, nez psani zoufaleckych prispevku sem nebo na moji soukromou adresu.. :) :) Rovnou rikam, ze na ne nedostanete odpoved a ze stale plati to, co jsem kdysi napsal.


Chci ale zdůraznit, že v žádném případě už ode mě neobdržíte odpovědi na maily s technickými dotazy zaslané na moje soukromé emailové adresy. Hlavně poté, co jsem zredukoval počet svých příspěvků v odborných konferencích, začaly na moje adresy chodit maily, jejichž pisatelé ode mě chtěli rady z různých oblastí - od psaní severových ovládacích prvků přes webové služby k flashování MDA. Snažil jsem se na dotazy odpovědět a vždy jsem na konec mailu doplnil upozornění, že žádnou další radu takto přímo neposkytnu a žádal jsem každého, aby psal dále jen do konferencí, kde si jeho příspěvku může všimnout více lidí, kteří znají odpověď. Počet mailů ale stále rostl, a proto jsem se je rozhodl ignororovat, protože neznám žádný jiný účinný způsob, jak tazatele odradit. Snad moje rozhodnutí pochopíte, nejsem žádná soukromá poradna, ani nemíním suplovat support jiných firem.

Pobavilo mě, že pár nespokojených individuí mi napsalo, jak si dovoluji neodpovídat na jejich dotazy, když jsem za to placen Microsoftem. Zamyslel jsem se nad sebou, zastyděl za svou roztržitost, kvůli níž jsem zapomněl, že jsem na čestném místě výplatní listiny Microsoftu, a jal jsem se kontrolovat své konto, abych zjistil, kolik jsem si za posledni dobu nahrabal bez práce. Začal jsem také radostně uvažovat nad tím, do jakých nových akcií ten z modrého nebe spadlý balík nacpu. Avšak ani po podrobné prohlídce všech pohybů na účtu jsem nenašel žádnou příchozí platbu od Microsoftu, takže mi ruměnec z tváře zmizel a stud vystřídala nasranost, že si mi někdy dovoluje diktovat na základě svých stupidních a nepodložených domněnek, co pro něj musím udělat. Někteří lidé jsou opravdu zvláštní tvorové a podle mé skromné a ještě neverifikované hypotézy je Bůh stvořil proto, aby zkoušel naši laskavost k bližnímu, kultivovanost v chování a sebeovládání, a tedy nám pomohl dotahovat k dokonalosti vlastnosti, jež nám zabraňují řešit konflikty nadávkami či inzultací dotyčného a činí tak náš svět alespoň občas "nejlepším ze všech možných světů".

Samozřejmě mě soukromě kontaktovat můžete, ale v prvním příspěvku očekávám váš dotaz, kolik si účtuju za hodinu/vyřešený problém. :) Což myslím naprosto vážně.
RStein (2012)|13.1.2008 12:53
Haja111: Ad clanek na CodeProjectu: To je vyborny clanek od autora komercni knihovny pro Compact .Net Framework, ktera vetsinu problemu vyresi za vas.
Nicméně v článku (i v jeho druém dílu) se neřeší komunikace přes GPS, ale parsování a vyhodnocování přijatých NMEA řetězců při již navázané komunikaci s GPS.
K intermediate driveru jeste upozornim, ze ho uzivatel musi mit zapnuty v nastavenich a musite umet resit chyby ruznych vyrobcu (napr. Artemis ocekava jine velikosti struktur apod.). Vlastni komunikace pres serial je jistejsi, ale pro programatora narocnejsi postup.
Takze googliste a podobna programatorska verbez, ktera umi jen kopirovat cizi kody, si vetsinou natluce usta :D
PeterS_ce4you (4)|24.1.2008 09:47
Zdravim.
dříve než jsem si přečetl tudle diskuzi jsem našel spoustu materiálů na kterých bych své mizerné základy mohl rozšířit a pochopit jak to má fungovat.
Kód co nabízí Microsoft ve svých samples jsem prošel a dosti mi pomohl v pochopení, ale problém je ten, že nejsem schopen ho na svém HTC P3300 s WM6 spustit, abych viděl nějaké výsledky, což mě odrazuje od samotného programování, protože jsem po pár dnech nějak nepřišel na příčinu problému. Snažil jsem se to procházet krok po kroku..port mi to otevře,ale dál už je to tak,že jako by nic nepřijímal a tady jsem se dočetl,že artemis počítá s jinými bloky či co.
Kdyby někdo věděl kde je zakopaný pes či byl ochoten poslat nějaký funkční samplík tak bych se určitě nezlobil. Je mi v podstatě jedno co to vypíše..pro mě je hlavní, abych dostal nějaké data z GPS a pak už bych si s tím pohrál.
Díky moc.
[EMAIL=null]Stuchlik.p@seznam.cz[/EMAIL]
používám VS 2005 C#
PeterS_ce4you (4)|25.1.2008 12:10
takže ještě jedna připomínka k předchozímu textu.. podařilo se mi otevřít COM v mém případě COM4 a signalizační dioda mi signalizuje,že zařízení se snaží komunikovat přes GPS..
pokusil jsem se tedy o čtení pomocí
[CODE]
using system.io.ports
public static SerialPort COM = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
COM.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{ Invoke(updateDataHandler);}
private void Form1_Load(object sender, EventArgs e)
{ updateDataHandler = new EventHandler(UpdateData); }
void UpdateData(object sender, System.EventArgs args)
{ if (COM.IsOpen == true)
{ label5.Text = "Getting Data";
label5.Text = label5.Text + " " + COM.ReadExisting();
}
}
[/CODE]

a tady se mi taky nic nedostává (nevypisuju,že tam na formu jsou tlačítka, které mi ten port otevřou)

vyzkoušen výpis COM.BytesToRead.ToString() a vrácí to pořád 0
toto jsem našel jako možné řešení komunikace,al mě to nijak nepomohlo
COM.DtrEnable = true;

výpis se zdaří pomoci
COM.ReadLine;
ale nastane tady problém s bufferem..
RStein (2012)|1.2.2008 16:01
PeterS: Ano, tohle je chyba na P3300 - negeneruje EV_RXCHAR signal. :(
Zkuste v intervalech cist primo pres API ReadFile z COM portu:

hFile je handle COM portu
[CODE]
DllImport("coredll.dll", EntryPoint="ReadFile")]


public static extern bool ReadFile(


int hFile,


byte[] lpBuffer,


int nNumberOfBytesToRead,


ref int lpNumberOfBytesRead,


int lpOverlapped);


[/CODE]
PeterS_ce4you (4)|6.2.2008 10:30
[QUOTE="RStein"]PeterS: Ano, tohle je chyba na P3300 - negeneruje EV_RXCHAR signal. :(
Zkuste v intervalech cist primo pres API ReadFile z COM portu:

hFile je handle COM portu
[CODE]
DllImport("coredll.dll", EntryPoint="ReadFile")]


public static extern bool ReadFile(


int hFile,


byte[] lpBuffer,


int nNumberOfBytesToRead,


ref int lpNumberOfBytesRead,


int lpOverlapped);


[/CODE][/QUOTE]

čau, dík určitě by mi to mohlo pomoct,ale mohl by jsi být trošku konkrétnější..
prostě to nějak trošku víc rozepsat..jestli to jde. Jinak jsem četl něco,že pomocí toho co je v SDK samples se to dá taky rozjet,ale chce to změnit 2 věci,ale nějak se mi to nepodařilo i po mém zásahu, ale jak jsem naznačil jsem "začátečník".. takže bych tipl,že jsem někde udělal chybu :oops: :sarcastic:
Kdyby jsi třeba věděl věděl jak na to a napsal bys to tady byl bych ti vděčný. A myslím,že nejen já. Předem děkuji.
PeterS_ce4you (4)|6.2.2008 11:55
tak nakonec jsem to teda vymyslel takhle:
[CODE]
namespace testp3300
{
class hlavni
{
static void Main(string[] args)
{
DateTime endDT = DateTime.Now.AddSeconds(80);

string data;
StreamWriter sw = new StreamWriter("dataGPS.txt", true);
ASCIIEncoding encoding = new ASCIIEncoding();
int count = 0;
byte[] buffer = new byte[1000];
GPS Gps = new GPS();
try
{
Gps.openPort();

while (DateTime.Now < endDT)
{
buffer[count] = (byte)GPS.COM.ReadByte();
count++;

if (count == 1000)
{

sw.WriteLine(encoding.GetString(buffer,0,1000));


count = 0;
}

//System.Threading.Thread.Sleep(10);
}

}
catch (Exception ex)
{
sw.WriteLine(ex.ToString());
}

sw.Close();
Gps.closePort();

}

}
}l[/CODE]
snad to někomu pomůže :) ale můžu potvrdit,že to funguje a vypisuje to co má. Je to jen "test"..určitě finální verze bude vypadat jinak, ale kdyby měl někdo obdobný problém tak na HTC P3300 s WM6 to funguje. Tak je alspoň čeho se chytit.