GPS4Palm

Source Code Documentation


gpslib.h

Go to the documentation of this file.
00001 /*
00002    gpslib.h : include file for gpslib
00003    Copyright (C) 1999,2000,2001 Christian Claveleira (Christian.Claveleira@cru.fr)
00004 
00005    This program is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU General Public License
00007    as published by the Free Software Foundation; either version 2
00008    of the License, or (at your option) any later version.
00009    
00010    This program is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013    GNU General Public License for more details.
00014    
00015    You should have received a copy of the GNU General Public License
00016    along with this program; if not, write to the Free Software
00017    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018  */
00019 
00020 /* $Id: gpslib_8h-source.html,v 1.7.2.1 2007-10-08 20:40:33 mp Exp $ */
00021 
00022 /* Types Garmin : */
00023 
00024 /* typedef unsigned short word; */
00025 /* typedef unsigned long longword; */
00026 /* typedef short Symbol_Type; */
00027 
00028 #include "Garmin.h"
00029 
00030 #define min(a, b) (((a) < (b)) ? (a) : (b))
00031 #define max(a, b) (((a) > (b)) ? (a) : (b))
00032 
00033 /* Debugging : */
00034 #define GPSLDBG_INFOS 128                                  // informational
00035 #define GPSLDBG_PKTS  64                                   // packets
00036 #define GPSLDBG_CALLS 32                                   // procedures calls/exits
00037 #define GPSLDBG_UNEXP 8                                    // unexpected things
00038 
00039 
00040 #define ETX '\003'
00041 #define DLE '\020'
00042 // #define GPS_ONLY 1
00043 #define Pid_Async_Event 0x1C
00044 #define REPLYTIMEOUT 1000                                  /* timeout de reponse du GPS en ms */
00045 #define MAXREPEAT 3                                        // nombre de reemissions max avant abandon
00046 #define MAXCOMMERRORS 10                                   /* nombre max d'erreurs de comm avant abandon */
00047 // #define Rte_Hdr 1
00048 #define Palm2GarminTimeDiff 2713910400UL                   // epoch(Garmin) - epoch (Palm)
00049 // conversion "Garmin time" to "Palm secondes"
00050 #define GarminTime2PalmSeconds(t) (t+Palm2GarminTimeDiff)
00051 #define NmeaMaxFields 32                                   /* max number of fields in a NMEA sentence */
00052 
00053 typedef struct
00054 {
00055     int entries_used;
00056     char *field[NmeaMaxFields];
00057 }
00058 NmeaFields;
00059 
00060 #define MAXDEVS 16
00061 typedef struct
00062 {
00063   union{
00064     UInt32 serDevCreator;
00065     char serDevCreatorString[5];
00066   } u[MAXDEVS];
00067   Char *serDevPortInfoStr[MAXDEVS];
00068 }
00069 SerialDevInfo;
00070 
00071 /// Type of GPS emulated
00072 enum Personality
00073 {
00074     GIIPlus, G12CX, GII, MAP175, GIII, eTrex, GPS76
00075 };
00076 typedef enum Personality Personality;
00077 
00078 // Codes d'erreur renvoyés par gpslib :
00079 #define gpslibErrParamErr                        (appErrorClass | 1)
00080 #define gpslibErrBadMode                         (appErrorClass | 2)
00081 #define gpslibErrBusy                            (appErrorClass | 3)
00082 #define gpslibErrCommError                       (appErrorClass | 4)
00083 #define gpslibErrNoData                         (appErrorClass | 5)
00084 #define gpslibErrNothingToDo                    (appErrorClass | 6)
00085 
00086 
00087 enum ProtocolFamily
00088 { ProdProto, ProtoProto, DevProto, WptProto, RteProto, TrkProto, ProxyProto, AlmanProto, TimeProto,
00089         PosProto, PVTProto };
00090 typedef enum ProtocolFamily ProtocolFamily;
00091 
00092 typedef struct                         /* enchainement des type de donnees suivant protocoles */
00093 {
00094     LocalFormatID datatype;            /*  type (format) de donnee */
00095     byte next;                         /* index prochain type de donnee */
00096 }
00097 ProtoDesc;
00098 
00099 /// Controls accepted by GpslibControl
00100 enum GpslibCtrl
00101   {GpslibCtrl_NoOp, GpslibCtrl_LooseProto };
00102 typedef enum GpslibCtrl GpslibCtrl;
00103 
00104 
00105 /*  Callbacks declarations passed to gpslib : */
00106 
00107 /** callback proc called when a waypoint is received
00108  @param wpt pointer on a GarminObject received from gps
00109  @param total total count of items sent as indicated by gps
00110  @param current current item number
00111  @param format format of waypoint
00112  @param size size of waypoint
00113  @return error code
00114 */
00115 typedef Err StoreWptCallbackProc (GarminObject * wpt, UInt16 total, UInt16 current,
00116                                   LocalFormatID format, byte size);
00117 
00118 /** Callback proc called when a trackpoint is received
00119 
00120  @param trk pointer on a raw track point or track header received from gps
00121  @param  total total count of items sent as indicated by gps
00122  @param  current current item number
00123  @param  format format of the object received
00124  @param  size size of object
00125  @return error code (0 if no error)
00126 */
00127 typedef Err StoreTrkCallbackProc (GarminObject * trk, UInt16 total, UInt16 current,
00128                                   LocalFormatID format, byte size);
00129 
00130 /** Callback proc called when a route element is received
00131 
00132  @param  rte pointer on the raw object from the gps
00133  @param  total total count of items sent as indicated by gps
00134  @param  current current item number (first=1)
00135  @param  format format of the object received (route header or waypoint)
00136  @param  size size of object
00137  @return error code (0 if no error)
00138 */
00139 typedef Err StoreRteCallbackProc (GarminObject * rte, UInt16 total, UInt16 current,
00140                                   LocalFormatID format, byte size);
00141 
00142 typedef StoreWptCallbackProc * StoreWptCallbackProcPtr;
00143 typedef StoreTrkCallbackProc * StoreTrkCallbackProcPtr;
00144 typedef StoreRteCallbackProc * StoreRteCallbackProcPtr;
00145 
00146 /** Callback proc called to fetch a waypoint to send to the gps
00147 
00148  @param  current current item number (first=0)
00149  @param  format wanted format of waypoint
00150  @param size pointer on a byte to write returned object size
00151  @return pointer on waypoint ready to send
00152 */
00153 typedef GarminObject * GetNextWptCallbackProc (UInt16 current, LocalFormatID format,
00154                                               byte *size);
00155 
00156 /** Callback proc called to fetch a track element to send to the gps
00157 
00158  @param  current index of current element (first=0)
00159  @param  format format of element requested
00160  @param size pointer to store size of element returned
00161  @param eot true if the current item is the last element of current track
00162  @return pointer on element returned (Garmin format)
00163 */
00164 typedef GarminObject * GetNextTrkCallbackProc (UInt16 current, LocalFormatID format,
00165                                               byte *size, Boolean * eot);
00166 ///
00167 
00168 
00169 /** Callback proc called to fetch a route element to send to the gps
00170 
00171  @param current current item number (header or waypoint, first=0)
00172  @param format wanted format of element
00173  @param size pointer to store size of element returned
00174  @param h pointer on a boolean to set if item is a header
00175  @param eor pointer on a boolean to set if it's the last element
00176  @return pointer on element returned (Garmin format)
00177 */
00178 typedef GarminObject * GetNextRteCallbackProc (UInt16 current, LocalFormatID format,
00179                                               byte *size, Boolean * h, Boolean * eor);
00180 
00181 /** Callback proc called to fetch a full route to send to a Furuno gps
00182 
00183  @param  current  current item number
00184  @return pointer on string to send to gps
00185 */
00186 typedef char * GetNextFullRteCallbackProc (UInt16 current);
00187 
00188 typedef GetNextWptCallbackProc * GetNextWptCallbackProcPtr;
00189 typedef GetNextTrkCallbackProc * GetNextTrkCallbackProcPtr;
00190 typedef GetNextRteCallbackProc * GetNextRteCallbackProcPtr;
00191 typedef GetNextFullRteCallbackProc * GetNextFullRteCallbackProcPtr;
00192 
00193 
00194 /** Callback proc called to fetch a waypoint to send to a Furuno gps
00195 
00196  @param  current item number to fetch (first=0)
00197  @return pointer on string in Furuno format
00198 */
00199 typedef char * GetNextCharWptCallbackProc (UInt16 current);
00200 
00201 typedef GetNextCharWptCallbackProc * GetNextCharWptCallbackProcPtr;
00202 
00203 
00204 /** Callback proc called when a raw packet is received (in asynchronous events mode)
00205 
00206  @param  p pointer on raw packet
00207  @param  current packet number
00208  @return error code (0 if ok)
00209 */
00210 typedef Err StorePacketCallbackProc (Garmin_Packet * p, UInt16 current);
00211 
00212 typedef StorePacketCallbackProc * StorePacketCallbackProcPtr;
00213 
00214 
00215 /** Callback proc called to fetch a raw packet
00216 
00217  @param current packet number
00218  @return pointer on the retrieved packet
00219 */
00220 typedef Garmin_Packet * GetNextPacketCallbackProc (UInt16 current);
00221 typedef GetNextPacketCallbackProc * GetNextPacketCallbackProcPtr;
00222 
00223 
00224 /** Callback proc called to log strings (typicaly for debugging)
00225 
00226 @param p string to log
00227 @return nothing
00228 */
00229 typedef void LogProc (char *p);
00230 typedef LogProc *LogProcPtr;
00231 
00232 
00233 /* prototypes gpslib.c */
00234 extern void GpslibTicks (void);
00235 extern Err GarminGetWpts (StoreWptCallbackProcPtr p, FieldPtr FPtr);
00236 extern Err GarminGetTrks (StoreTrkCallbackProcPtr p, FieldPtr FPtr);
00237 extern Err GarminGetRtes (StoreRteCallbackProcPtr p, FieldPtr FPtr);
00238 extern Err GarminPutWpts (GetNextWptCallbackProcPtr p, FieldPtr FPtr, UInt16 count);
00239 extern Err FurunoPutWpts (GetNextCharWptCallbackProcPtr, FieldPtr FPtr, UInt16 count);
00240 extern Err GarminPutRtes (GetNextRteCallbackProcPtr p, FieldPtr FPtr, UInt16 count);
00241 extern Err FurunoPutRtes (GetNextFullRteCallbackProcPtr p, FieldPtr FPtr, UInt16 count);
00242 extern Err GarminPutTrks (GetNextTrkCallbackProcPtr p, FieldPtr FPtr, UInt16 count);
00243 extern void GPSEndOfOperation (void);
00244 extern Err GarminGetTime (FieldPtr FPtr);
00245 extern UInt32 D600ToSeconds (Raw_D600_Date_Time_Type * d600p);
00246 extern char *D600ToAscii (D600_Date_Time_Type * d600p);
00247 extern Err GarminSetHostMode (FieldPtr FPtr, Personality Perso);
00248 extern Err GarminGetPosition (FieldPtr FPtr);
00249 extern Err GarminEnableAsyncEvents (StorePacketCallbackProcPtr p, FieldPtr FPtr, UInt16 mask);
00250 extern Err GarminPutPacket (GetNextPacketCallbackProcPtr p, FieldPtr FPtr, UInt16 count);
00251 extern Err GarminGetRemoteInfos (FieldPtr FPtr);
00252 extern void GpslibSetDebugLevel (UInt16 debuglevel, LogProcPtr logprocp);
00253 extern Err GarminStartPVT (void);
00254 extern Err GarminStopPVT (void);
00255 extern Err GarminGetPVT (D800_Pvt_Data_Type * pvtp);
00256 extern void NMEAParse (byte *p, NmeaFields * fp);
00257 extern UInt16 NMEAGetSentence (byte *p);
00258 extern void NMEASendSentence (char *sentencep, int timeout);
00259 extern GarminProtoID GarminGetProtocol (ProtocolFamily p);
00260 extern UInt16 GetSerialDevsInfos (SerialDevInfo Infos[]);
00261 extern void GpslibSetSerialPort (UInt32 port);
00262 extern Err GpslibControl (GpslibCtrl op, void * datas);
00263 
00264 // Evenements generes par gpslib :
00265 /// Posted when a complete NMEA sentence is available
00266 #define SentenceAvailableEvent firstUserEvent
00267 /// Posted when the library is closed (*EndOfOperation called or end of transfer)
00268 #define EndOfOperationEvent (firstUserEvent +2)
00269 /// Posted when a transfer waypoints request (Cmnd_Transfer_Wpt) is received (host mode)
00270 #define TransferWptReqEvent (firstUserEvent +3)
00271 /// Posted when a transfer routes request (Cmnd_Transfer_Rte) is received (host mode)
00272 #define TransferRteReqEvent (firstUserEvent +4)
00273 /// Posted when a transfer tracks request (Cmnd_Transfer_Trk) is received (host mode)
00274 #define TransferTrkReqEvent (firstUserEvent +5)
00275 /// Posted when a GPS time packet (Pid_Date_Time_Data) is received (after calling GarminGetTime), data.sclRepeat.time contains PalmOS time in seconds
00276 #define TimeReceivedEvent   (firstUserEvent +6)
00277 /// Posted when a power off request (Cmnd_Turn_Off_Pwr) is received (host mode)
00278 #define PowerOffEvent       (firstUserEvent +7)
00279 /// Posted when a Pid_Position_Data packet is received (after calling GarminGetPosition)
00280 #define PositionReceivedEvent (firstUserEvent +8)
00281 /// Posted when a Pid_Async_Event request  is received
00282 #define AsyncEventReqEvent  (firstUserEvent +9)
00283 /// Posted when a PVT paquet is received
00284 #define PvtReceivedEvent (firstUserEvent +10)

Created: Mon, 08 Oct 2007 22:33:16 +0200
Copyright ©2004 M. Prinke