00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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
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
00043 #define Pid_Async_Event 0x1C
00044 #define REPLYTIMEOUT 1000
00045 #define MAXREPEAT 3 // nombre de reemissions max avant abandon
00046 #define MAXCOMMERRORS 10
00047
00048 #define Palm2GarminTimeDiff 2713910400UL // epoch(Garmin) - epoch (Palm)
00049
00050 #define GarminTime2PalmSeconds(t) (t+Palm2GarminTimeDiff)
00051 #define NmeaMaxFields 32
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
00072 enum Personality
00073 {
00074 GIIPlus, G12CX, GII, MAP175, GIII, eTrex, GPS76
00075 };
00076 typedef enum Personality Personality;
00077
00078
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
00093 {
00094 LocalFormatID datatype;
00095 byte next;
00096 }
00097 ProtoDesc;
00098
00099
00100 enum GpslibCtrl
00101 {GpslibCtrl_NoOp, GpslibCtrl_LooseProto };
00102 typedef enum GpslibCtrl GpslibCtrl;
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 typedef Err StoreWptCallbackProc (GarminObject * wpt, UInt16 total, UInt16 current,
00116 LocalFormatID format, byte size);
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 typedef Err StoreTrkCallbackProc (GarminObject * trk, UInt16 total, UInt16 current,
00128 LocalFormatID format, byte size);
00129
00130
00131
00132
00133
00134
00135
00136
00137
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
00147
00148
00149
00150
00151
00152
00153 typedef GarminObject * GetNextWptCallbackProc (UInt16 current, LocalFormatID format,
00154 byte *size);
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 typedef GarminObject * GetNextTrkCallbackProc (UInt16 current, LocalFormatID format,
00165 byte *size, Boolean * eot);
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 typedef GarminObject * GetNextRteCallbackProc (UInt16 current, LocalFormatID format,
00179 byte *size, Boolean * h, Boolean * eor);
00180
00181
00182
00183
00184
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
00195
00196
00197
00198
00199 typedef char * GetNextCharWptCallbackProc (UInt16 current);
00200
00201 typedef GetNextCharWptCallbackProc * GetNextCharWptCallbackProcPtr;
00202
00203
00204
00205
00206
00207
00208
00209
00210 typedef Err StorePacketCallbackProc (Garmin_Packet * p, UInt16 current);
00211
00212 typedef StorePacketCallbackProc * StorePacketCallbackProcPtr;
00213
00214
00215
00216
00217
00218
00219
00220 typedef Garmin_Packet * GetNextPacketCallbackProc (UInt16 current);
00221 typedef GetNextPacketCallbackProc * GetNextPacketCallbackProcPtr;
00222
00223
00224
00225
00226
00227
00228
00229 typedef void LogProc (char *p);
00230 typedef LogProc *LogProcPtr;
00231
00232
00233
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
00265
00266 #define SentenceAvailableEvent firstUserEvent
00267
00268 #define EndOfOperationEvent (firstUserEvent +2)
00269
00270 #define TransferWptReqEvent (firstUserEvent +3)
00271
00272 #define TransferRteReqEvent (firstUserEvent +4)
00273
00274 #define TransferTrkReqEvent (firstUserEvent +5)
00275
00276 #define TimeReceivedEvent (firstUserEvent +6)
00277
00278 #define PowerOffEvent (firstUserEvent +7)
00279
00280 #define PositionReceivedEvent (firstUserEvent +8)
00281
00282 #define AsyncEventReqEvent (firstUserEvent +9)
00283
00284 #define PvtReceivedEvent (firstUserEvent +10)