Leer GPS

Leer GPS

Postby Andrés González » Wed Jul 18, 2007 11:43 am

Tengo una HP6515 la cual consta de un GPS interno, he intentado leer el puerto de comunicaciones y me ocurre que en todos los puertos que me da comunicacion me sale el mensaje con unos cuadrados sin ninguna informacion (puertos 1 y 3) y los puertos que no existe ya me dice que no tiene comunicacion.
He cogido el ejemplo del foro ingles:
Code: Select all  Expand view
#include "FWCE.ch"

#define GENERIC_READ 0x80000000
#define GENERIC_WRITE 0x40000000
#define GENERIC_REWRITE 0xC0000000
#define OPEN_EXISTING 3
#define FILE_ATTRIBUTE_NORMAL 0x00000080

function Main()

local oWnd, oTimer, oChk
local hPort
local nPollTime := 1000
local lOnOff := .T.

hPort := CreateFile( "COM4:",GENERIC_REWRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )

if hPort == -1
   MSGALERT("No Puedo abrir el puerto...")
   return -1
else
    MSGALERT(hPort)
endif


DEFINE WINDOW oWnd TITLE "BlueTime"

@ 2, 2 BUTTON "GPS On/Off" SIZE 80, 30 ACTION (lOnOff := OnOff( hPort, oTimer, lOnOff ), oChk:refresh)

@ 10, 2 CHECKBOX oChk VAR lOnOff PROMPT "On/Off" OF oWnd SIZE 80, 20

if hPort != -1
   DEFINE TIMER oTimer OF oWnd;
          INTERVAL nPollTime;
          ACTION ReadGPS(hPort, oTimer)
endif

ACTIVATE WINDOW oWnd

CloseHandle( hPort )

return nil

function ReadGPS( hPort, oTimer )

local nChr := 1
local cText := ""
local n := 1

oTimer:DeActivate() // stops timer - waits for data

do while nChr > 0 .and. n < 21
         nChr := ReadByte( hPort )
         cText := cText + Chr( nChr )
         n++
end do

msginfo( cText )

oTimer:Activate() // restarts timer

return nil

function OnOff( hPort, oTimer, lOnOff )
if hPort != -1
   if lOnOff
      oTimer:DeActivate() // stops timer
   else
      oTimer:Activate() // starts timer
   endif
endif
return !(lOnOff)


Preguntas:
1) Tengo que hacer algo en la pda para que me lea la informacion del gps, por ejemplo hay que iniciarlo. He leido que si otra aplicacion utiliza el puerto ya no puedo leer la informacion. Pero lo raro es que veo que con el TomTom tarda en leer la informacion del GPS, y con el programa me la da inmediatamente pero mal por lo que se ve.
2) Existe en la pda algo similar a los dispositivos de hardware de windows donde te informa que puertos de comunicaciones tienes.
3) Alguien ha hecho algo similar, solo quiero obtener las coordenadas del GPS, para integrarlas en mi aplicacion.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 628
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby luis.santeliz » Tue Jul 24, 2007 8:09 pm

yo creo q tu problema es la conversion ascii -> unicode, yo tuve un problema asi con una impresora irda y hacia lo mismo.. puros cuadritos y basura en general. lo resolvi utilizando la funcion del api de windows MultiByteToWideChar()

un ejemplo de su utilizacion es:

Code: Select all  Expand view
   
const int tamano = 20;
const int arraysize  = sizeof(TCHAR)*tamano;
   const int arraysizeW = sizeof(WCHAR)*tamano;
   TCHAR szOrigen[arraysize];
   WCHAR szCadena[arraysizeW];

   memset(szOrigen, 0, arraysize);
   memset(szCadena, 0, arraysizeW);

   StringCbCopyA((LPSTR)szOrigen, arraysize,(LPSTR) hb_parc(1)  );

   MultiByteToWideChar(CP_ACP,0,(LPCSTR)szOrigen,arraysize,szCadena,arraysizeW );


donde

hb_parc(1): es el parametro de la cadena ascii a convertir
szCadena: es un puntero a una cadena de WCHAR osea char unicode
tamano: es el tamaño que tu quieres que tenga el buffer, es importante destacar que en este ejemplo se utiliza la funcion StringCbCopy() cuyo uso es ampliamente recomendado ya q protege el buffer de cualquier desbordamiento dandole a nuestra aplicacion seguridad y estabilidad. Esta funcion es de la libreria strsafe.lib
Luis Santeliz
Móvil SoftWare, C.A.
---------------------------------------------
MySQL DBA,
MySQL Server Performance Tunning,
DPxBase, FiveWin, Java,
Linux Redhat, Windows

Caracas Venezuela
luissanteliz@cantv.net
User avatar
luis.santeliz
 
Posts: 47
Joined: Mon May 29, 2006 9:04 pm

Postby Antonio Linares » Wed Jul 25, 2007 11:19 am

Luis,

FWPPC proporciona AnsiToWide() y WideToAnsi() que hacen ese trabajo automaticamente
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 20 guests