User | Revision | Line number | New contents of line |
joosttromp |
0:62fa44dd600b
|
1
|
/*
|
joosttromp |
0:62fa44dd600b
|
2
|
Copyright (c) 2010 Andy Kirkham
|
joosttromp |
0:62fa44dd600b
|
3
|
|
joosttromp |
0:62fa44dd600b
|
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
joosttromp |
0:62fa44dd600b
|
5
|
of this software and associated documentation files (the "Software"), to deal
|
joosttromp |
0:62fa44dd600b
|
6
|
in the Software without restriction, including without limitation the rights
|
joosttromp |
0:62fa44dd600b
|
7
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
joosttromp |
0:62fa44dd600b
|
8
|
copies of the Software, and to permit persons to whom the Software is
|
joosttromp |
0:62fa44dd600b
|
9
|
furnished to do so, subject to the following conditions:
|
joosttromp |
0:62fa44dd600b
|
10
|
|
joosttromp |
0:62fa44dd600b
|
11
|
The above copyright notice and this permission notice shall be included in
|
joosttromp |
0:62fa44dd600b
|
12
|
all copies or substantial portions of the Software.
|
joosttromp |
0:62fa44dd600b
|
13
|
|
joosttromp |
0:62fa44dd600b
|
14
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
joosttromp |
0:62fa44dd600b
|
15
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
joosttromp |
0:62fa44dd600b
|
16
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
joosttromp |
0:62fa44dd600b
|
17
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
joosttromp |
0:62fa44dd600b
|
18
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
joosttromp |
0:62fa44dd600b
|
19
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
joosttromp |
0:62fa44dd600b
|
20
|
THE SOFTWARE.
|
joosttromp |
0:62fa44dd600b
|
21
|
*/
|
joosttromp |
0:62fa44dd600b
|
22
|
|
joosttromp |
0:62fa44dd600b
|
23
|
#ifndef GPS_H
|
joosttromp |
0:62fa44dd600b
|
24
|
#define GPS_H
|
joosttromp |
0:62fa44dd600b
|
25
|
|
joosttromp |
0:62fa44dd600b
|
26
|
#include "mbed.h"
|
joosttromp |
0:62fa44dd600b
|
27
|
#include "GPS_VTG.h"
|
joosttromp |
0:62fa44dd600b
|
28
|
#include "GPS_Time.h"
|
joosttromp |
0:62fa44dd600b
|
29
|
#include "GPS_Geodetic.h"
|
joosttromp |
0:62fa44dd600b
|
30
|
|
joosttromp |
0:62fa44dd600b
|
31
|
#define GPS_RBR 0x00
|
joosttromp |
0:62fa44dd600b
|
32
|
#define GPS_THR 0x00
|
joosttromp |
0:62fa44dd600b
|
33
|
#define GPS_DLL 0x00
|
joosttromp |
0:62fa44dd600b
|
34
|
#define GPS_IER 0x04
|
joosttromp |
0:62fa44dd600b
|
35
|
#define GPS_DML 0x04
|
joosttromp |
0:62fa44dd600b
|
36
|
#define GPS_IIR 0x08
|
joosttromp |
0:62fa44dd600b
|
37
|
#define GPS_FCR 0x08
|
joosttromp |
0:62fa44dd600b
|
38
|
#define GPS_LCR 0x0C
|
joosttromp |
0:62fa44dd600b
|
39
|
#define GPS_LSR 0x14
|
joosttromp |
0:62fa44dd600b
|
40
|
#define GPS_SCR 0x1C
|
joosttromp |
0:62fa44dd600b
|
41
|
#define GPS_ACR 0x20
|
joosttromp |
0:62fa44dd600b
|
42
|
#define GPS_ICR 0x24
|
joosttromp |
0:62fa44dd600b
|
43
|
#define GPS_FDR 0x28
|
joosttromp |
0:62fa44dd600b
|
44
|
#define GPS_TER 0x30
|
joosttromp |
0:62fa44dd600b
|
45
|
|
joosttromp |
0:62fa44dd600b
|
46
|
#define GPS_BUFFER_LEN 128
|
joosttromp |
0:62fa44dd600b
|
47
|
#define GPS_TICKTOCK 2500
|
joosttromp |
0:62fa44dd600b
|
48
|
|
joosttromp |
0:62fa44dd600b
|
49
|
/** @defgroup API The MODGPS API */
|
joosttromp |
0:62fa44dd600b
|
50
|
|
joosttromp |
0:62fa44dd600b
|
51
|
/** GPS module
|
joosttromp |
0:62fa44dd600b
|
52
|
* @author Andy Kirkham
|
joosttromp |
0:62fa44dd600b
|
53
|
* @see http://mbed.org/cookbook/MODGPS
|
joosttromp |
0:62fa44dd600b
|
54
|
* @see example1.cpp
|
joosttromp |
0:62fa44dd600b
|
55
|
* @see example2.cpp
|
joosttromp |
0:62fa44dd600b
|
56
|
* @see API
|
joosttromp |
0:62fa44dd600b
|
57
|
*
|
joosttromp |
0:62fa44dd600b
|
58
|
* @image html /media/uploads/AjK/gps_interfaces.png "Wiring up the GPS module"
|
joosttromp |
0:62fa44dd600b
|
59
|
*
|
joosttromp |
0:62fa44dd600b
|
60
|
* Example:
|
joosttromp |
0:62fa44dd600b
|
61
|
* @code
|
joosttromp |
0:62fa44dd600b
|
62
|
* #include "mbed.h"
|
joosttromp |
0:62fa44dd600b
|
63
|
* #include "GPS.h"
|
joosttromp |
0:62fa44dd600b
|
64
|
*
|
joosttromp |
0:62fa44dd600b
|
65
|
* DigitalOut led1(LED1);
|
joosttromp |
0:62fa44dd600b
|
66
|
* Serial pc(USBTX, USBRX);
|
joosttromp |
0:62fa44dd600b
|
67
|
* GPS gps(NC, p10);
|
joosttromp |
0:62fa44dd600b
|
68
|
*
|
joosttromp |
0:62fa44dd600b
|
69
|
* int main() {
|
joosttromp |
0:62fa44dd600b
|
70
|
* GPS_Time t;
|
joosttromp |
0:62fa44dd600b
|
71
|
*
|
joosttromp |
0:62fa44dd600b
|
72
|
* // Wait for the GPS NMEA data to become valid.
|
joosttromp |
0:62fa44dd600b
|
73
|
* while (!gps.isTimeValid()) {
|
joosttromp |
0:62fa44dd600b
|
74
|
* led1 = !led1;
|
joosttromp |
0:62fa44dd600b
|
75
|
* wait(1);
|
joosttromp |
0:62fa44dd600b
|
76
|
* }
|
joosttromp |
0:62fa44dd600b
|
77
|
*
|
joosttromp |
0:62fa44dd600b
|
78
|
* gps.timeNow(&t);
|
joosttromp |
0:62fa44dd600b
|
79
|
*
|
joosttromp |
0:62fa44dd600b
|
80
|
* pc.printf("The time/date is %02d:%02d:%02d %02d/%02d/%04d\r\n",
|
joosttromp |
0:62fa44dd600b
|
81
|
* t.hour, t.minute, t.second, t.day, t.month, t.year);
|
joosttromp |
0:62fa44dd600b
|
82
|
*
|
joosttromp |
0:62fa44dd600b
|
83
|
* // Wait until at least four satellites produce a position fix and a valid quality.
|
joosttromp |
0:62fa44dd600b
|
84
|
* while (gps.numOfSats() < 4 && gps.getGPSquality != 0) {
|
joosttromp |
0:62fa44dd600b
|
85
|
* led1 = !led1;
|
joosttromp |
0:62fa44dd600b
|
86
|
* wait(1);
|
joosttromp |
0:62fa44dd600b
|
87
|
* }
|
joosttromp |
0:62fa44dd600b
|
88
|
*
|
joosttromp |
0:62fa44dd600b
|
89
|
* pc.printf("Lat = %.4f Lon = %.4f Alt = %.1fkm\r\n",
|
joosttromp |
0:62fa44dd600b
|
90
|
* gps.latitude(), gps.longitude, gps.altitude());
|
joosttromp |
0:62fa44dd600b
|
91
|
*
|
joosttromp |
0:62fa44dd600b
|
92
|
* // Make the LED go steady to indicate we have finished.
|
joosttromp |
0:62fa44dd600b
|
93
|
* led1 = 1;
|
joosttromp |
0:62fa44dd600b
|
94
|
*
|
joosttromp |
0:62fa44dd600b
|
95
|
* while(1) {}
|
joosttromp |
0:62fa44dd600b
|
96
|
* }
|
joosttromp |
0:62fa44dd600b
|
97
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
98
|
*/
|
joosttromp |
0:62fa44dd600b
|
99
|
|
joosttromp |
0:62fa44dd600b
|
100
|
class GPS : Serial {
|
joosttromp |
0:62fa44dd600b
|
101
|
public:
|
joosttromp |
0:62fa44dd600b
|
102
|
|
joosttromp |
0:62fa44dd600b
|
103
|
//! The PPS edge type to interrupt on.
|
joosttromp |
0:62fa44dd600b
|
104
|
enum ppsEdgeType {
|
joosttromp |
0:62fa44dd600b
|
105
|
ppsRise = 0, /*!< Use the rising edge (default). */
|
joosttromp |
0:62fa44dd600b
|
106
|
ppsFall /*!< Use the falling edge. */
|
joosttromp |
0:62fa44dd600b
|
107
|
};
|
joosttromp |
0:62fa44dd600b
|
108
|
|
joosttromp |
0:62fa44dd600b
|
109
|
//! A copy of the Serial parity enum
|
joosttromp |
0:62fa44dd600b
|
110
|
enum Parity {
|
joosttromp |
0:62fa44dd600b
|
111
|
None = 0
|
joosttromp |
0:62fa44dd600b
|
112
|
, Odd
|
joosttromp |
0:62fa44dd600b
|
113
|
, Even
|
joosttromp |
0:62fa44dd600b
|
114
|
, Forced1
|
joosttromp |
0:62fa44dd600b
|
115
|
, Forced0
|
joosttromp |
0:62fa44dd600b
|
116
|
};
|
joosttromp |
0:62fa44dd600b
|
117
|
|
joosttromp |
0:62fa44dd600b
|
118
|
//! GPS constructor.
|
joosttromp |
0:62fa44dd600b
|
119
|
/**
|
joosttromp |
0:62fa44dd600b
|
120
|
* The GPS constructor is used to initialise the GPS object.
|
joosttromp |
0:62fa44dd600b
|
121
|
*
|
joosttromp |
0:62fa44dd600b
|
122
|
* @param tx Usually unused and set to NC
|
joosttromp |
0:62fa44dd600b
|
123
|
* @param rx The RX pin the GPS is connected to, p10, p14( OR p25), p27.
|
joosttromp |
0:62fa44dd600b
|
124
|
* @param name An option name for RPC usage.
|
joosttromp |
0:62fa44dd600b
|
125
|
*/
|
joosttromp |
0:62fa44dd600b
|
126
|
GPS(PinName tx, PinName rx, const char *name = NULL);
|
joosttromp |
0:62fa44dd600b
|
127
|
|
joosttromp |
0:62fa44dd600b
|
128
|
//! Is the time reported by the GPS valid.
|
joosttromp |
0:62fa44dd600b
|
129
|
/**
|
joosttromp |
0:62fa44dd600b
|
130
|
* Method used to check the validity of the time the GPS module is reporting.
|
joosttromp |
0:62fa44dd600b
|
131
|
*
|
joosttromp |
0:62fa44dd600b
|
132
|
* @code
|
joosttromp |
0:62fa44dd600b
|
133
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
134
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
135
|
*
|
joosttromp |
0:62fa44dd600b
|
136
|
* if (gps.isTimeValid()) {
|
joosttromp |
0:62fa44dd600b
|
137
|
* // Time is valid :)
|
joosttromp |
0:62fa44dd600b
|
138
|
* }
|
joosttromp |
0:62fa44dd600b
|
139
|
* else {
|
joosttromp |
0:62fa44dd600b
|
140
|
* // Doh, time is not valid :(
|
joosttromp |
0:62fa44dd600b
|
141
|
* )
|
joosttromp |
0:62fa44dd600b
|
142
|
*
|
joosttromp |
0:62fa44dd600b
|
143
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
144
|
*
|
joosttromp |
0:62fa44dd600b
|
145
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
146
|
* @return bool true if valid, false otherwise
|
joosttromp |
0:62fa44dd600b
|
147
|
*/
|
joosttromp |
0:62fa44dd600b
|
148
|
bool isTimeValid(void) { return theTime.status == 'V' ? false : true; }
|
joosttromp |
0:62fa44dd600b
|
149
|
|
joosttromp |
0:62fa44dd600b
|
150
|
//! Is the positional fix reported by the GPS valid.
|
joosttromp |
0:62fa44dd600b
|
151
|
/**
|
joosttromp |
0:62fa44dd600b
|
152
|
* Method used to check the validity of the positional data. This method
|
joosttromp |
0:62fa44dd600b
|
153
|
* returns the GGA field, 0 is "bad, 1 is "ok", etc. See the NMEA GGA
|
joosttromp |
0:62fa44dd600b
|
154
|
* description for more details.
|
joosttromp |
0:62fa44dd600b
|
155
|
*
|
joosttromp |
0:62fa44dd600b
|
156
|
* @code
|
joosttromp |
0:62fa44dd600b
|
157
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
158
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
159
|
*
|
joosttromp |
0:62fa44dd600b
|
160
|
* if (gps.getGPSquality() == 0) {
|
joosttromp |
0:62fa44dd600b
|
161
|
* // The location fix is no good/not accurate :(
|
joosttromp |
0:62fa44dd600b
|
162
|
* }
|
joosttromp |
0:62fa44dd600b
|
163
|
* else {
|
joosttromp |
0:62fa44dd600b
|
164
|
* // All good, can use last fix data.
|
joosttromp |
0:62fa44dd600b
|
165
|
* )
|
joosttromp |
0:62fa44dd600b
|
166
|
*
|
joosttromp |
0:62fa44dd600b
|
167
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
168
|
*
|
joosttromp |
0:62fa44dd600b
|
169
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
170
|
* @return int 0 on no fix, 1... (see NMEA GGA for more details).
|
joosttromp |
0:62fa44dd600b
|
171
|
*/
|
joosttromp |
0:62fa44dd600b
|
172
|
int getGPSquality(void) { return thePlace.getGPSquality(); }
|
joosttromp |
0:62fa44dd600b
|
173
|
|
joosttromp |
0:62fa44dd600b
|
174
|
//! How many satellites were used in the last fix.
|
joosttromp |
0:62fa44dd600b
|
175
|
/**
|
joosttromp |
0:62fa44dd600b
|
176
|
* Method returns the number of GPS satellites used on the last fix.
|
joosttromp |
0:62fa44dd600b
|
177
|
*
|
joosttromp |
0:62fa44dd600b
|
178
|
* @code
|
joosttromp |
0:62fa44dd600b
|
179
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
180
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
181
|
*
|
joosttromp |
0:62fa44dd600b
|
182
|
* int sats = gps.numOfSats();
|
joosttromp |
0:62fa44dd600b
|
183
|
*
|
joosttromp |
0:62fa44dd600b
|
184
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
185
|
*
|
joosttromp |
0:62fa44dd600b
|
186
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
187
|
* @return int The number of satellites.
|
joosttromp |
0:62fa44dd600b
|
188
|
*/
|
joosttromp |
0:62fa44dd600b
|
189
|
int numOfSats(void) { return thePlace.numOfSats(); }
|
joosttromp |
0:62fa44dd600b
|
190
|
|
joosttromp |
0:62fa44dd600b
|
191
|
//! What was the last reported latitude (in degrees)
|
joosttromp |
0:62fa44dd600b
|
192
|
/**
|
joosttromp |
0:62fa44dd600b
|
193
|
* Method returns a double in degrees, positive being North, negative being South.
|
joosttromp |
0:62fa44dd600b
|
194
|
*
|
joosttromp |
0:62fa44dd600b
|
195
|
* @code
|
joosttromp |
0:62fa44dd600b
|
196
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
197
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
198
|
*
|
joosttromp |
0:62fa44dd600b
|
199
|
* double latitude = gps.latitude();
|
joosttromp |
0:62fa44dd600b
|
200
|
*
|
joosttromp |
0:62fa44dd600b
|
201
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
202
|
*
|
joosttromp |
0:62fa44dd600b
|
203
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
204
|
* @return double Degrees
|
joosttromp |
0:62fa44dd600b
|
205
|
*/
|
joosttromp |
0:62fa44dd600b
|
206
|
double latitude(void);
|
joosttromp |
0:62fa44dd600b
|
207
|
|
joosttromp |
0:62fa44dd600b
|
208
|
//! What was the last reported longitude (in degrees)
|
joosttromp |
0:62fa44dd600b
|
209
|
/**
|
joosttromp |
0:62fa44dd600b
|
210
|
* Method returns a double in degrees, positive being East, negative being West.
|
joosttromp |
0:62fa44dd600b
|
211
|
*
|
joosttromp |
0:62fa44dd600b
|
212
|
* @code
|
joosttromp |
0:62fa44dd600b
|
213
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
214
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
215
|
*
|
joosttromp |
0:62fa44dd600b
|
216
|
* double logitude = gps.logitude();
|
joosttromp |
0:62fa44dd600b
|
217
|
*
|
joosttromp |
0:62fa44dd600b
|
218
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
219
|
*
|
joosttromp |
0:62fa44dd600b
|
220
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
221
|
* @return double Degrees
|
joosttromp |
0:62fa44dd600b
|
222
|
*/
|
joosttromp |
0:62fa44dd600b
|
223
|
double longitude(void);
|
joosttromp |
0:62fa44dd600b
|
224
|
|
joosttromp |
0:62fa44dd600b
|
225
|
//! What was the last reported altitude (in kilometers)
|
joosttromp |
0:62fa44dd600b
|
226
|
/**
|
joosttromp |
0:62fa44dd600b
|
227
|
* Method returns a double in kilometers.
|
joosttromp |
0:62fa44dd600b
|
228
|
*
|
joosttromp |
0:62fa44dd600b
|
229
|
* @code
|
joosttromp |
0:62fa44dd600b
|
230
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
231
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
232
|
*
|
joosttromp |
0:62fa44dd600b
|
233
|
* double altitude = gps.altitude();
|
joosttromp |
0:62fa44dd600b
|
234
|
*
|
joosttromp |
0:62fa44dd600b
|
235
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
236
|
*
|
joosttromp |
0:62fa44dd600b
|
237
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
238
|
* @return double Kilometers
|
joosttromp |
0:62fa44dd600b
|
239
|
*/
|
joosttromp |
0:62fa44dd600b
|
240
|
double altitude(void);
|
joosttromp |
0:62fa44dd600b
|
241
|
|
joosttromp |
0:62fa44dd600b
|
242
|
//! What was the last reported altitude/height (in kilometers)
|
joosttromp |
0:62fa44dd600b
|
243
|
/**
|
joosttromp |
0:62fa44dd600b
|
244
|
* @see altitude()
|
joosttromp |
0:62fa44dd600b
|
245
|
*
|
joosttromp |
0:62fa44dd600b
|
246
|
* @code
|
joosttromp |
0:62fa44dd600b
|
247
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
248
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
249
|
*
|
joosttromp |
0:62fa44dd600b
|
250
|
* double height = gps.height();
|
joosttromp |
0:62fa44dd600b
|
251
|
*
|
joosttromp |
0:62fa44dd600b
|
252
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
253
|
*
|
joosttromp |
0:62fa44dd600b
|
254
|
* Note, this is identical to altitude()
|
joosttromp |
0:62fa44dd600b
|
255
|
* @see altitude()
|
joosttromp |
0:62fa44dd600b
|
256
|
*
|
joosttromp |
0:62fa44dd600b
|
257
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
258
|
* @return double Kilometers
|
joosttromp |
0:62fa44dd600b
|
259
|
*/
|
joosttromp |
0:62fa44dd600b
|
260
|
double height(void) { return altitude(); }
|
joosttromp |
0:62fa44dd600b
|
261
|
|
joosttromp |
0:62fa44dd600b
|
262
|
//! Get all vector parameters together.
|
joosttromp |
0:62fa44dd600b
|
263
|
/**
|
joosttromp |
0:62fa44dd600b
|
264
|
* Pass a pointer to a GPS_VTG object and the current
|
joosttromp |
0:62fa44dd600b
|
265
|
* GPS data will be copied into it.
|
joosttromp |
0:62fa44dd600b
|
266
|
*
|
joosttromp |
0:62fa44dd600b
|
267
|
* @code
|
joosttromp |
0:62fa44dd600b
|
268
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
269
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
270
|
*
|
joosttromp |
0:62fa44dd600b
|
271
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
272
|
* GPS_VTG p;
|
joosttromp |
0:62fa44dd600b
|
273
|
* gps.vtg(&p);
|
joosttromp |
0:62fa44dd600b
|
274
|
* printf("Speed (knots) = %.4f", p.velocity_knots);
|
joosttromp |
0:62fa44dd600b
|
275
|
* printf("Speed (kps) = %.4f", p.velocity_kps);
|
joosttromp |
0:62fa44dd600b
|
276
|
* printf("Track (true) = %.4f", p.track_true);
|
joosttromp |
0:62fa44dd600b
|
277
|
* printf("Track (mag) = %.4f", p.track_mag);
|
joosttromp |
0:62fa44dd600b
|
278
|
*
|
joosttromp |
0:62fa44dd600b
|
279
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
280
|
*
|
joosttromp |
0:62fa44dd600b
|
281
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
282
|
* @param g A GSP_VTG pointer to an existing GPS_VTG object.
|
joosttromp |
0:62fa44dd600b
|
283
|
* @return GPS_VTG * The pointer passed in.
|
joosttromp |
0:62fa44dd600b
|
284
|
*/
|
joosttromp |
0:62fa44dd600b
|
285
|
GPS_VTG *vtg(GPS_VTG *g);
|
joosttromp |
0:62fa44dd600b
|
286
|
|
joosttromp |
0:62fa44dd600b
|
287
|
//! Get all vector parameters together.
|
joosttromp |
0:62fa44dd600b
|
288
|
/**
|
joosttromp |
0:62fa44dd600b
|
289
|
* Get all the vector data at once. For example:-
|
joosttromp |
0:62fa44dd600b
|
290
|
*
|
joosttromp |
0:62fa44dd600b
|
291
|
* @code
|
joosttromp |
0:62fa44dd600b
|
292
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
293
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
294
|
*
|
joosttromp |
0:62fa44dd600b
|
295
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
296
|
* GPS_VTG *p = gps.vtg();
|
joosttromp |
0:62fa44dd600b
|
297
|
* printf("Speed (knots) = %.4f", p->velocity_knots);
|
joosttromp |
0:62fa44dd600b
|
298
|
* printf("Speed (kps) = %.4f", p->velocity_kps);
|
joosttromp |
0:62fa44dd600b
|
299
|
* printf("Track (true) = %.4f", p->track_true);
|
joosttromp |
0:62fa44dd600b
|
300
|
* printf("Track (mag) = %.4f", p->track_mag);
|
joosttromp |
0:62fa44dd600b
|
301
|
* delete(p); // then remember to delete the object to prevent memory leaks.
|
joosttromp |
0:62fa44dd600b
|
302
|
*
|
joosttromp |
0:62fa44dd600b
|
303
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
304
|
*
|
joosttromp |
0:62fa44dd600b
|
305
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
306
|
* @return GPS_Geodetic * A pointer to the data.
|
joosttromp |
0:62fa44dd600b
|
307
|
*/
|
joosttromp |
0:62fa44dd600b
|
308
|
GPS_VTG *vtg(void) { return vtg(NULL); }
|
joosttromp |
0:62fa44dd600b
|
309
|
|
joosttromp |
0:62fa44dd600b
|
310
|
//! Get all three geodetic parameters together.
|
joosttromp |
0:62fa44dd600b
|
311
|
/**
|
joosttromp |
0:62fa44dd600b
|
312
|
* Pass a pointer to a GPS_Geodetic object and the current
|
joosttromp |
0:62fa44dd600b
|
313
|
* GPS data will be copied into it.
|
joosttromp |
0:62fa44dd600b
|
314
|
*
|
joosttromp |
0:62fa44dd600b
|
315
|
* @code
|
joosttromp |
0:62fa44dd600b
|
316
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
317
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
318
|
*
|
joosttromp |
0:62fa44dd600b
|
319
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
320
|
* GPS_Geodetic p;
|
joosttromp |
0:62fa44dd600b
|
321
|
* gps.geodetic(&p);
|
joosttromp |
0:62fa44dd600b
|
322
|
* printf("Latitude = %.4f", p.lat);
|
joosttromp |
0:62fa44dd600b
|
323
|
* printf("Longitude = %.4f", p.lon);
|
joosttromp |
0:62fa44dd600b
|
324
|
* printf("Altitude = %.4f", p.alt);
|
joosttromp |
0:62fa44dd600b
|
325
|
*
|
joosttromp |
0:62fa44dd600b
|
326
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
327
|
*
|
joosttromp |
0:62fa44dd600b
|
328
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
329
|
* @param g A GSP_Geodetic pointer to an existing GPS_Geodetic object.
|
joosttromp |
0:62fa44dd600b
|
330
|
* @return GPS_Geodetic * The pointer passed in.
|
joosttromp |
0:62fa44dd600b
|
331
|
*/
|
joosttromp |
0:62fa44dd600b
|
332
|
GPS_Geodetic *geodetic(GPS_Geodetic *g);
|
joosttromp |
0:62fa44dd600b
|
333
|
|
joosttromp |
0:62fa44dd600b
|
334
|
//! Get all three geodetic parameters together.
|
joosttromp |
0:62fa44dd600b
|
335
|
/**
|
joosttromp |
0:62fa44dd600b
|
336
|
* Get all the geodetic data at once. For example:-
|
joosttromp |
0:62fa44dd600b
|
337
|
*
|
joosttromp |
0:62fa44dd600b
|
338
|
* @code
|
joosttromp |
0:62fa44dd600b
|
339
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
340
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
341
|
*
|
joosttromp |
0:62fa44dd600b
|
342
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
343
|
* GPS_Geodetic *p = gps.geodetic();
|
joosttromp |
0:62fa44dd600b
|
344
|
* printf("Latitude = %.4f", p->lat);
|
joosttromp |
0:62fa44dd600b
|
345
|
* delete(p); // then remember to delete the object to prevent memory leaks.
|
joosttromp |
0:62fa44dd600b
|
346
|
*
|
joosttromp |
0:62fa44dd600b
|
347
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
348
|
*
|
joosttromp |
0:62fa44dd600b
|
349
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
350
|
* @return GPS_Geodetic * A pointer to the data.
|
joosttromp |
0:62fa44dd600b
|
351
|
*/
|
joosttromp |
0:62fa44dd600b
|
352
|
GPS_Geodetic *geodetic(void) { return geodetic(NULL); }
|
joosttromp |
0:62fa44dd600b
|
353
|
|
joosttromp |
0:62fa44dd600b
|
354
|
//! Take a snap shot of the current time.
|
joosttromp |
0:62fa44dd600b
|
355
|
/**
|
joosttromp |
0:62fa44dd600b
|
356
|
* Pass a pointer to a GPS_Time object to get a copy of the current
|
joosttromp |
0:62fa44dd600b
|
357
|
* time and date as reported by the GPS.
|
joosttromp |
0:62fa44dd600b
|
358
|
*
|
joosttromp |
0:62fa44dd600b
|
359
|
* @code
|
joosttromp |
0:62fa44dd600b
|
360
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
361
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
362
|
*
|
joosttromp |
0:62fa44dd600b
|
363
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
364
|
* GPS_Time t;
|
joosttromp |
0:62fa44dd600b
|
365
|
* gps.timeNow(&t);
|
joosttromp |
0:62fa44dd600b
|
366
|
* printf("Year = %d", t.year);
|
joosttromp |
0:62fa44dd600b
|
367
|
*
|
joosttromp |
0:62fa44dd600b
|
368
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
369
|
*
|
joosttromp |
0:62fa44dd600b
|
370
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
371
|
* @param n A GPS_Time * pointer to an existing GPS_Time object.
|
joosttromp |
0:62fa44dd600b
|
372
|
* @return GPS_Time * The pointer passed in.
|
joosttromp |
0:62fa44dd600b
|
373
|
*/
|
joosttromp |
0:62fa44dd600b
|
374
|
GPS_Time * timeNow(GPS_Time *n) { return theTime.timeNow(n); }
|
joosttromp |
0:62fa44dd600b
|
375
|
|
joosttromp |
0:62fa44dd600b
|
376
|
//! Take a snap shot of the current time.
|
joosttromp |
0:62fa44dd600b
|
377
|
/**
|
joosttromp |
0:62fa44dd600b
|
378
|
* Pass a pointer to a GPS_Time object to get a copy of the current
|
joosttromp |
0:62fa44dd600b
|
379
|
* time and date as reported by the GPS.
|
joosttromp |
0:62fa44dd600b
|
380
|
*
|
joosttromp |
0:62fa44dd600b
|
381
|
* @code
|
joosttromp |
0:62fa44dd600b
|
382
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
383
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
384
|
*
|
joosttromp |
0:62fa44dd600b
|
385
|
* // Then get the data...
|
joosttromp |
0:62fa44dd600b
|
386
|
* GPS_Time *t = gps.timeNow();
|
joosttromp |
0:62fa44dd600b
|
387
|
* printf("Year = %d", t->year);
|
joosttromp |
0:62fa44dd600b
|
388
|
* delete(t); // Avoid memory leaks.
|
joosttromp |
0:62fa44dd600b
|
389
|
*
|
joosttromp |
0:62fa44dd600b
|
390
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
391
|
*
|
joosttromp |
0:62fa44dd600b
|
392
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
393
|
* @return GPS_Time * The pointer passed in.
|
joosttromp |
0:62fa44dd600b
|
394
|
*/
|
joosttromp |
0:62fa44dd600b
|
395
|
GPS_Time * timeNow(void) { GPS_Time *n = new GPS_Time; return theTime.timeNow(n); }
|
joosttromp |
0:62fa44dd600b
|
396
|
|
joosttromp |
0:62fa44dd600b
|
397
|
//! Return the curent day.
|
joosttromp |
0:62fa44dd600b
|
398
|
/**
|
joosttromp |
0:62fa44dd600b
|
399
|
* @code
|
joosttromp |
0:62fa44dd600b
|
400
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
401
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
402
|
*
|
joosttromp |
0:62fa44dd600b
|
403
|
* // Then get the Julain Day Number.
|
joosttromp |
0:62fa44dd600b
|
404
|
* double julianDayNumber = gps.julianDayNumber();
|
joosttromp |
0:62fa44dd600b
|
405
|
*
|
joosttromp |
0:62fa44dd600b
|
406
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
407
|
*
|
joosttromp |
0:62fa44dd600b
|
408
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
409
|
* @return double The Julian Date as a double.
|
joosttromp |
0:62fa44dd600b
|
410
|
*/
|
joosttromp |
0:62fa44dd600b
|
411
|
double julianDayNumber(void) { return theTime.julian_day_number(); }
|
joosttromp |
0:62fa44dd600b
|
412
|
|
joosttromp |
0:62fa44dd600b
|
413
|
//! Return the curent date/time as a Julian date
|
joosttromp |
0:62fa44dd600b
|
414
|
/**
|
joosttromp |
0:62fa44dd600b
|
415
|
* @code
|
joosttromp |
0:62fa44dd600b
|
416
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
417
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
418
|
*
|
joosttromp |
0:62fa44dd600b
|
419
|
* // Then get the Julian Date.
|
joosttromp |
0:62fa44dd600b
|
420
|
* double julianDate = gps.julianDate();
|
joosttromp |
0:62fa44dd600b
|
421
|
*
|
joosttromp |
0:62fa44dd600b
|
422
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
423
|
*
|
joosttromp |
0:62fa44dd600b
|
424
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
425
|
* @return double The Julian Date as a double.
|
joosttromp |
0:62fa44dd600b
|
426
|
*/
|
joosttromp |
0:62fa44dd600b
|
427
|
double julianDate(void) { return theTime.julian_date(); }
|
joosttromp |
0:62fa44dd600b
|
428
|
|
joosttromp |
0:62fa44dd600b
|
429
|
//! Get the current sidereal degree angle.
|
joosttromp |
0:62fa44dd600b
|
430
|
/**
|
joosttromp |
0:62fa44dd600b
|
431
|
* @code
|
joosttromp |
0:62fa44dd600b
|
432
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
433
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
434
|
* double sidereal = gps.siderealDegrees();
|
joosttromp |
0:62fa44dd600b
|
435
|
*
|
joosttromp |
0:62fa44dd600b
|
436
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
437
|
*
|
joosttromp |
0:62fa44dd600b
|
438
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
439
|
* @return double Sidereal degree angle..
|
joosttromp |
0:62fa44dd600b
|
440
|
*/
|
joosttromp |
0:62fa44dd600b
|
441
|
double siderealDegrees(void) { return theTime.siderealDegrees(&theTime, longitude()); }
|
joosttromp |
0:62fa44dd600b
|
442
|
|
joosttromp |
0:62fa44dd600b
|
443
|
//! Get the current sidereal hour angle.
|
joosttromp |
0:62fa44dd600b
|
444
|
/**
|
joosttromp |
0:62fa44dd600b
|
445
|
* @code
|
joosttromp |
0:62fa44dd600b
|
446
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
447
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
448
|
* double sidereal = gps.siderealHA();
|
joosttromp |
0:62fa44dd600b
|
449
|
*
|
joosttromp |
0:62fa44dd600b
|
450
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
451
|
*
|
joosttromp |
0:62fa44dd600b
|
452
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
453
|
* @return double Sidereal degree angle..
|
joosttromp |
0:62fa44dd600b
|
454
|
*/
|
joosttromp |
0:62fa44dd600b
|
455
|
double siderealHA(void) { return theTime.siderealHA(&theTime, longitude()); }
|
joosttromp |
0:62fa44dd600b
|
456
|
|
joosttromp |
0:62fa44dd600b
|
457
|
//! Optionally, connect a 1PPS single to an Mbed pin.
|
joosttromp |
0:62fa44dd600b
|
458
|
/**
|
joosttromp |
0:62fa44dd600b
|
459
|
* Optional: If the GPS unit has a 1PPS output, use this to
|
joosttromp |
0:62fa44dd600b
|
460
|
* connect that to our internal ISR. Using the 1PPS increases
|
joosttromp |
0:62fa44dd600b
|
461
|
* the GPS_Time time accuracy from +/-0.25s to +/-0.001s
|
joosttromp |
0:62fa44dd600b
|
462
|
*
|
joosttromp |
0:62fa44dd600b
|
463
|
* @code
|
joosttromp |
0:62fa44dd600b
|
464
|
* // Assuming we have a GPS object previously created...
|
joosttromp |
0:62fa44dd600b
|
465
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
466
|
*
|
joosttromp |
0:62fa44dd600b
|
467
|
* gps.ppsAttach(p29); // default to GPS::ppsRise, rising edge.
|
joosttromp |
0:62fa44dd600b
|
468
|
*
|
joosttromp |
0:62fa44dd600b
|
469
|
* // Or...
|
joosttromp |
0:62fa44dd600b
|
470
|
* gps.ppsAttach(p29, GPS::ppsRise); // The default.
|
joosttromp |
0:62fa44dd600b
|
471
|
*
|
joosttromp |
0:62fa44dd600b
|
472
|
* // Or...
|
joosttromp |
0:62fa44dd600b
|
473
|
* gps.ppsAttach(p29, GPS::ppsFall); // If a falling edge.
|
joosttromp |
0:62fa44dd600b
|
474
|
*
|
joosttromp |
0:62fa44dd600b
|
475
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
476
|
*
|
joosttromp |
0:62fa44dd600b
|
477
|
* <b>Note</b>, before using this function you should attach an actual
|
joosttromp |
0:62fa44dd600b
|
478
|
* callback function using attach_pps()
|
joosttromp |
0:62fa44dd600b
|
479
|
*
|
joosttromp |
0:62fa44dd600b
|
480
|
* @see attach_pps()
|
joosttromp |
0:62fa44dd600b
|
481
|
*
|
joosttromp |
0:62fa44dd600b
|
482
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
483
|
* @param irq A PinName to attach
|
joosttromp |
0:62fa44dd600b
|
484
|
* @param type The type of edge, MAX7456::ppsRise OR MAX7456::ppsFall
|
joosttromp |
0:62fa44dd600b
|
485
|
*/
|
joosttromp |
0:62fa44dd600b
|
486
|
void ppsAttach(PinName irq, ppsEdgeType type = ppsRise);
|
joosttromp |
0:62fa44dd600b
|
487
|
|
joosttromp |
0:62fa44dd600b
|
488
|
//! Remove any 1PPS signal previously attached.
|
joosttromp |
0:62fa44dd600b
|
489
|
void ppsUnattach(void);
|
joosttromp |
0:62fa44dd600b
|
490
|
|
joosttromp |
0:62fa44dd600b
|
491
|
//! GPS serial receive interrupt handler.
|
joosttromp |
0:62fa44dd600b
|
492
|
void rx_irq(void);
|
joosttromp |
0:62fa44dd600b
|
493
|
|
joosttromp |
0:62fa44dd600b
|
494
|
//! GPS pps interrupt handler.
|
joosttromp |
0:62fa44dd600b
|
495
|
void pps_irq(void);
|
joosttromp |
0:62fa44dd600b
|
496
|
|
joosttromp |
0:62fa44dd600b
|
497
|
//! A pointer to the UART peripheral base address being used.
|
joosttromp |
0:62fa44dd600b
|
498
|
void *_base;
|
joosttromp |
0:62fa44dd600b
|
499
|
|
joosttromp |
0:62fa44dd600b
|
500
|
//! The RX serial buffer.
|
joosttromp |
0:62fa44dd600b
|
501
|
char buffer[2][GPS_BUFFER_LEN];
|
joosttromp |
0:62fa44dd600b
|
502
|
|
joosttromp |
0:62fa44dd600b
|
503
|
//! The current "active" buffer, i.e. the buffer the ISR is writing to.
|
joosttromp |
0:62fa44dd600b
|
504
|
int active_buffer;
|
joosttromp |
0:62fa44dd600b
|
505
|
|
joosttromp |
0:62fa44dd600b
|
506
|
//! The active buffer "in" pointer.
|
joosttromp |
0:62fa44dd600b
|
507
|
int rx_buffer_in;
|
joosttromp |
0:62fa44dd600b
|
508
|
|
joosttromp |
0:62fa44dd600b
|
509
|
//! Boolean flag set when the "passive" buffer is full and needs processing.
|
joosttromp |
0:62fa44dd600b
|
510
|
bool process_required;
|
joosttromp |
0:62fa44dd600b
|
511
|
|
joosttromp |
0:62fa44dd600b
|
512
|
//! 10ms Ticker callback.
|
joosttromp |
0:62fa44dd600b
|
513
|
void ticktock(void);
|
joosttromp |
0:62fa44dd600b
|
514
|
|
joosttromp |
0:62fa44dd600b
|
515
|
//! Attach a user object/method callback function to the PPS signal
|
joosttromp |
0:62fa44dd600b
|
516
|
/**
|
joosttromp |
0:62fa44dd600b
|
517
|
* Attach a user callback object/method to call when the 1PPS signal activates.
|
joosttromp |
0:62fa44dd600b
|
518
|
*
|
joosttromp |
0:62fa44dd600b
|
519
|
* @code
|
joosttromp |
0:62fa44dd600b
|
520
|
* class FOO {
|
joosttromp |
0:62fa44dd600b
|
521
|
* public:
|
joosttromp |
0:62fa44dd600b
|
522
|
* void myCallback(void);
|
joosttromp |
0:62fa44dd600b
|
523
|
* };
|
joosttromp |
0:62fa44dd600b
|
524
|
*
|
joosttromp |
0:62fa44dd600b
|
525
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
526
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
527
|
*
|
joosttromp |
0:62fa44dd600b
|
528
|
* gps.attach_pps(foo, &FOO::myCallback);
|
joosttromp |
0:62fa44dd600b
|
529
|
*
|
joosttromp |
0:62fa44dd600b
|
530
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
531
|
*
|
joosttromp |
0:62fa44dd600b
|
532
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
533
|
* @param tptr pointer to the object to call the member function on
|
joosttromp |
0:62fa44dd600b
|
534
|
* @param mptr pointer to the member function to be called
|
joosttromp |
0:62fa44dd600b
|
535
|
*/
|
joosttromp |
0:62fa44dd600b
|
536
|
template<typename T>
|
joosttromp |
0:62fa44dd600b
|
537
|
void attach_pps(T* tptr, void (T::*mptr)(void)) { cb_pps.attach(tptr, mptr); }
|
joosttromp |
0:62fa44dd600b
|
538
|
|
joosttromp |
0:62fa44dd600b
|
539
|
//! Attach a user callback function to the PPS signal
|
joosttromp |
0:62fa44dd600b
|
540
|
/**
|
joosttromp |
0:62fa44dd600b
|
541
|
* Attach a user callback function pointer to call when the 1PPS signal activates.
|
joosttromp |
0:62fa44dd600b
|
542
|
*
|
joosttromp |
0:62fa44dd600b
|
543
|
* @code
|
joosttromp |
0:62fa44dd600b
|
544
|
* void myCallback(void) { ... }
|
joosttromp |
0:62fa44dd600b
|
545
|
*
|
joosttromp |
0:62fa44dd600b
|
546
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
547
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
548
|
*
|
joosttromp |
0:62fa44dd600b
|
549
|
* gps.attach_pps(&myCallback);
|
joosttromp |
0:62fa44dd600b
|
550
|
*
|
joosttromp |
0:62fa44dd600b
|
551
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
552
|
*
|
joosttromp |
0:62fa44dd600b
|
553
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
554
|
* @param fptr Callback function pointer
|
joosttromp |
0:62fa44dd600b
|
555
|
*/
|
joosttromp |
0:62fa44dd600b
|
556
|
void attach_pps(void (*fptr)(void)) { cb_pps.attach(fptr); }
|
joosttromp |
0:62fa44dd600b
|
557
|
|
joosttromp |
0:62fa44dd600b
|
558
|
//! A callback object for the 1PPS user API.
|
joosttromp |
0:62fa44dd600b
|
559
|
FunctionPointer cb_pps;
|
joosttromp |
0:62fa44dd600b
|
560
|
|
joosttromp |
0:62fa44dd600b
|
561
|
//! Attach a user callback function to the NMEA RMC message processed signal.
|
joosttromp |
0:62fa44dd600b
|
562
|
/**
|
joosttromp |
0:62fa44dd600b
|
563
|
* Attach a user callback object/method to call when an NMEA RMC packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
564
|
*
|
joosttromp |
0:62fa44dd600b
|
565
|
* @code
|
joosttromp |
0:62fa44dd600b
|
566
|
* class FOO {
|
joosttromp |
0:62fa44dd600b
|
567
|
* public:
|
joosttromp |
0:62fa44dd600b
|
568
|
* void myCallback(void);
|
joosttromp |
0:62fa44dd600b
|
569
|
* };
|
joosttromp |
0:62fa44dd600b
|
570
|
*
|
joosttromp |
0:62fa44dd600b
|
571
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
572
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
573
|
*
|
joosttromp |
0:62fa44dd600b
|
574
|
* gps.attach_rmc(foo, &FOO::myCallback);
|
joosttromp |
0:62fa44dd600b
|
575
|
*
|
joosttromp |
0:62fa44dd600b
|
576
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
577
|
*
|
joosttromp |
0:62fa44dd600b
|
578
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
579
|
* @param tptr pointer to the object to call the member function on
|
joosttromp |
0:62fa44dd600b
|
580
|
* @param mptr pointer to the member function to be called
|
joosttromp |
0:62fa44dd600b
|
581
|
*/
|
joosttromp |
0:62fa44dd600b
|
582
|
template<typename T>
|
joosttromp |
0:62fa44dd600b
|
583
|
void attach_rmc(T* tptr, void (T::*mptr)(void)) { cb_rmc.attach(tptr, mptr); }
|
joosttromp |
0:62fa44dd600b
|
584
|
|
joosttromp |
0:62fa44dd600b
|
585
|
//! Attach a user callback function to the NMEA RMC message processed signal.
|
joosttromp |
0:62fa44dd600b
|
586
|
/**
|
joosttromp |
0:62fa44dd600b
|
587
|
* Attach a user callback function pointer to call when an NMEA RMC packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
588
|
*
|
joosttromp |
0:62fa44dd600b
|
589
|
* @code
|
joosttromp |
0:62fa44dd600b
|
590
|
* void myCallback(void) { ... }
|
joosttromp |
0:62fa44dd600b
|
591
|
*
|
joosttromp |
0:62fa44dd600b
|
592
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
593
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
594
|
*
|
joosttromp |
0:62fa44dd600b
|
595
|
* gps.attach_rmc(&myCallback);
|
joosttromp |
0:62fa44dd600b
|
596
|
*
|
joosttromp |
0:62fa44dd600b
|
597
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
598
|
*
|
joosttromp |
0:62fa44dd600b
|
599
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
600
|
* @param fptr Callback function pointer.
|
joosttromp |
0:62fa44dd600b
|
601
|
*/
|
joosttromp |
0:62fa44dd600b
|
602
|
void attach_rmc(void (*fptr)(void)) { cb_rmc.attach(fptr); }
|
joosttromp |
0:62fa44dd600b
|
603
|
|
joosttromp |
0:62fa44dd600b
|
604
|
//! A callback object for the NMEA RMS message processed signal user API.
|
joosttromp |
0:62fa44dd600b
|
605
|
FunctionPointer cb_rmc;
|
joosttromp |
0:62fa44dd600b
|
606
|
|
joosttromp |
0:62fa44dd600b
|
607
|
//! Attach a user callback function to the NMEA GGA message processed signal.
|
joosttromp |
0:62fa44dd600b
|
608
|
/**
|
joosttromp |
0:62fa44dd600b
|
609
|
* Attach a user callback object/method to call when an NMEA GGA packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
610
|
*
|
joosttromp |
0:62fa44dd600b
|
611
|
* @code
|
joosttromp |
0:62fa44dd600b
|
612
|
* class FOO {
|
joosttromp |
0:62fa44dd600b
|
613
|
* public:
|
joosttromp |
0:62fa44dd600b
|
614
|
* void myCallback(void);
|
joosttromp |
0:62fa44dd600b
|
615
|
* };
|
joosttromp |
0:62fa44dd600b
|
616
|
*
|
joosttromp |
0:62fa44dd600b
|
617
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
618
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
619
|
*
|
joosttromp |
0:62fa44dd600b
|
620
|
* gps.attach_gga(foo, &FOO::myCallback);
|
joosttromp |
0:62fa44dd600b
|
621
|
*
|
joosttromp |
0:62fa44dd600b
|
622
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
623
|
*
|
joosttromp |
0:62fa44dd600b
|
624
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
625
|
* @param tptr pointer to the object to call the member function on
|
joosttromp |
0:62fa44dd600b
|
626
|
* @param mptr pointer to the member function to be called
|
joosttromp |
0:62fa44dd600b
|
627
|
*/
|
joosttromp |
0:62fa44dd600b
|
628
|
template<typename T>
|
joosttromp |
0:62fa44dd600b
|
629
|
void attach_gga(T* tptr, void (T::*mptr)(void)) { cb_gga.attach(tptr, mptr); }
|
joosttromp |
0:62fa44dd600b
|
630
|
|
joosttromp |
0:62fa44dd600b
|
631
|
//! Attach a user callback function to the NMEA GGA message processed signal.
|
joosttromp |
0:62fa44dd600b
|
632
|
/**
|
joosttromp |
0:62fa44dd600b
|
633
|
* Attach a user callback function pointer to call when an NMEA GGA packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
634
|
*
|
joosttromp |
0:62fa44dd600b
|
635
|
* @code
|
joosttromp |
0:62fa44dd600b
|
636
|
* void myCallback(void) { ... }
|
joosttromp |
0:62fa44dd600b
|
637
|
*
|
joosttromp |
0:62fa44dd600b
|
638
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
639
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
640
|
*
|
joosttromp |
0:62fa44dd600b
|
641
|
* gps.attach_gga(&myCallback);
|
joosttromp |
0:62fa44dd600b
|
642
|
*
|
joosttromp |
0:62fa44dd600b
|
643
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
644
|
*
|
joosttromp |
0:62fa44dd600b
|
645
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
646
|
* @param fptr Callback function pointer.
|
joosttromp |
0:62fa44dd600b
|
647
|
*/
|
joosttromp |
0:62fa44dd600b
|
648
|
void attach_gga(void (*fptr)(void)) { cb_gga.attach(fptr); }
|
joosttromp |
0:62fa44dd600b
|
649
|
|
joosttromp |
0:62fa44dd600b
|
650
|
//! A callback object for the NMEA GGA message processed signal user API.
|
joosttromp |
0:62fa44dd600b
|
651
|
FunctionPointer cb_gga;
|
joosttromp |
0:62fa44dd600b
|
652
|
|
joosttromp |
0:62fa44dd600b
|
653
|
|
joosttromp |
0:62fa44dd600b
|
654
|
//! Attach a user callback function to the NMEA VTG message processed signal.
|
joosttromp |
0:62fa44dd600b
|
655
|
/**
|
joosttromp |
0:62fa44dd600b
|
656
|
* Attach a user callback object/method to call when an NMEA VTG packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
657
|
*
|
joosttromp |
0:62fa44dd600b
|
658
|
* @code
|
joosttromp |
0:62fa44dd600b
|
659
|
* class FOO {
|
joosttromp |
0:62fa44dd600b
|
660
|
* public:
|
joosttromp |
0:62fa44dd600b
|
661
|
* void myCallback(void);
|
joosttromp |
0:62fa44dd600b
|
662
|
* };
|
joosttromp |
0:62fa44dd600b
|
663
|
*
|
joosttromp |
0:62fa44dd600b
|
664
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
665
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
666
|
*
|
joosttromp |
0:62fa44dd600b
|
667
|
* gps.attach_vtg(foo, &FOO::myCallback);
|
joosttromp |
0:62fa44dd600b
|
668
|
*
|
joosttromp |
0:62fa44dd600b
|
669
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
670
|
*
|
joosttromp |
0:62fa44dd600b
|
671
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
672
|
* @param tptr pointer to the object to call the member function on
|
joosttromp |
0:62fa44dd600b
|
673
|
* @param mptr pointer to the member function to be called
|
joosttromp |
0:62fa44dd600b
|
674
|
*/
|
joosttromp |
0:62fa44dd600b
|
675
|
template<typename T>
|
joosttromp |
0:62fa44dd600b
|
676
|
void attach_vtg(T* tptr, void (T::*mptr)(void)) { cb_vtg.attach(tptr, mptr); }
|
joosttromp |
0:62fa44dd600b
|
677
|
|
joosttromp |
0:62fa44dd600b
|
678
|
//! Attach a user callback function to the NMEA VTG message processed signal.
|
joosttromp |
0:62fa44dd600b
|
679
|
/**
|
joosttromp |
0:62fa44dd600b
|
680
|
* Attach a user callback function pointer to call when an NMEA VTG packet has been processed.
|
joosttromp |
0:62fa44dd600b
|
681
|
*
|
joosttromp |
0:62fa44dd600b
|
682
|
* @code
|
joosttromp |
0:62fa44dd600b
|
683
|
* void myCallback(void) { ... }
|
joosttromp |
0:62fa44dd600b
|
684
|
*
|
joosttromp |
0:62fa44dd600b
|
685
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
686
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
687
|
*
|
joosttromp |
0:62fa44dd600b
|
688
|
* gps.attach_vtg(&myCallback);
|
joosttromp |
0:62fa44dd600b
|
689
|
*
|
joosttromp |
0:62fa44dd600b
|
690
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
691
|
*
|
joosttromp |
0:62fa44dd600b
|
692
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
693
|
* @param fptr Callback function pointer.
|
joosttromp |
0:62fa44dd600b
|
694
|
*/
|
joosttromp |
0:62fa44dd600b
|
695
|
void attach_vtg(void (*fptr)(void)) { cb_vtg.attach(fptr); }
|
joosttromp |
0:62fa44dd600b
|
696
|
|
joosttromp |
0:62fa44dd600b
|
697
|
//! A callback object for the NMEA RMS message processed signal user API.
|
joosttromp |
0:62fa44dd600b
|
698
|
FunctionPointer cb_vtg;
|
joosttromp |
0:62fa44dd600b
|
699
|
|
joosttromp |
0:62fa44dd600b
|
700
|
//! Attach a user callback function to the unknown NMEA message.
|
joosttromp |
0:62fa44dd600b
|
701
|
/**
|
joosttromp |
0:62fa44dd600b
|
702
|
* Attach a user callback object/method to call when an unknown NMEA packet.
|
joosttromp |
0:62fa44dd600b
|
703
|
*
|
joosttromp |
0:62fa44dd600b
|
704
|
* @code
|
joosttromp |
0:62fa44dd600b
|
705
|
* class FOO {
|
joosttromp |
0:62fa44dd600b
|
706
|
* public:
|
joosttromp |
0:62fa44dd600b
|
707
|
* void myCallback(void);
|
joosttromp |
0:62fa44dd600b
|
708
|
* };
|
joosttromp |
0:62fa44dd600b
|
709
|
*
|
joosttromp |
0:62fa44dd600b
|
710
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
711
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
712
|
*
|
joosttromp |
0:62fa44dd600b
|
713
|
* gps.attach_ukn(foo, &FOO::myCallback);
|
joosttromp |
0:62fa44dd600b
|
714
|
*
|
joosttromp |
0:62fa44dd600b
|
715
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
716
|
*
|
joosttromp |
0:62fa44dd600b
|
717
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
718
|
* @param tptr pointer to the object to call the member function on
|
joosttromp |
0:62fa44dd600b
|
719
|
* @param mptr pointer to the member function to be called
|
joosttromp |
0:62fa44dd600b
|
720
|
*/
|
joosttromp |
0:62fa44dd600b
|
721
|
template<typename T>
|
joosttromp |
0:62fa44dd600b
|
722
|
void attach_ukn(T* tptr, void (T::*mptr)(void)) { cb_ukn.attach(tptr, mptr); }
|
joosttromp |
0:62fa44dd600b
|
723
|
|
joosttromp |
0:62fa44dd600b
|
724
|
//! Attach a user callback function to the unknown NMEA message.
|
joosttromp |
0:62fa44dd600b
|
725
|
/**
|
joosttromp |
0:62fa44dd600b
|
726
|
* Attach a user callback function pointer to call when an unknown NMEA.
|
joosttromp |
0:62fa44dd600b
|
727
|
*
|
joosttromp |
0:62fa44dd600b
|
728
|
* @code
|
joosttromp |
0:62fa44dd600b
|
729
|
* void myCallback(void) { ... }
|
joosttromp |
0:62fa44dd600b
|
730
|
*
|
joosttromp |
0:62fa44dd600b
|
731
|
* GPS gps(NC, p9);
|
joosttromp |
0:62fa44dd600b
|
732
|
* Foo foo;
|
joosttromp |
0:62fa44dd600b
|
733
|
*
|
joosttromp |
0:62fa44dd600b
|
734
|
* gps.attach_ukn(&myCallback);
|
joosttromp |
0:62fa44dd600b
|
735
|
*
|
joosttromp |
0:62fa44dd600b
|
736
|
* @endcode
|
joosttromp |
0:62fa44dd600b
|
737
|
*
|
joosttromp |
0:62fa44dd600b
|
738
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
739
|
* @param fptr Callback function pointer.
|
joosttromp |
0:62fa44dd600b
|
740
|
*/
|
joosttromp |
0:62fa44dd600b
|
741
|
void attach_ukn(void (*fptr)(void)) { cb_ukn.attach(fptr); }
|
joosttromp |
0:62fa44dd600b
|
742
|
|
joosttromp |
0:62fa44dd600b
|
743
|
//! A callback object for the NMEA RMS message processed signal user API.
|
joosttromp |
0:62fa44dd600b
|
744
|
FunctionPointer cb_ukn;
|
joosttromp |
0:62fa44dd600b
|
745
|
|
joosttromp |
0:62fa44dd600b
|
746
|
/**
|
joosttromp |
0:62fa44dd600b
|
747
|
* Set's the GGA string memory pointer.
|
joosttromp |
0:62fa44dd600b
|
748
|
* @param s char pointer ti string.
|
joosttromp |
0:62fa44dd600b
|
749
|
* @return char s passed in.
|
joosttromp |
0:62fa44dd600b
|
750
|
*/
|
joosttromp |
0:62fa44dd600b
|
751
|
char * setGga(char *s) { _gga = s; return s; }
|
joosttromp |
0:62fa44dd600b
|
752
|
|
joosttromp |
0:62fa44dd600b
|
753
|
/**
|
joosttromp |
0:62fa44dd600b
|
754
|
* Set's the RMC string memory pointer.
|
joosttromp |
0:62fa44dd600b
|
755
|
* @param s char pointer ti string.
|
joosttromp |
0:62fa44dd600b
|
756
|
* @return char s passed in.
|
joosttromp |
0:62fa44dd600b
|
757
|
*/
|
joosttromp |
0:62fa44dd600b
|
758
|
char * setRmc(char *s) { _rmc = s; return s; };
|
joosttromp |
0:62fa44dd600b
|
759
|
|
joosttromp |
0:62fa44dd600b
|
760
|
/**
|
joosttromp |
0:62fa44dd600b
|
761
|
* Set's the VTG string memory pointer.
|
joosttromp |
0:62fa44dd600b
|
762
|
* @param s char pointer ti string.
|
joosttromp |
0:62fa44dd600b
|
763
|
* @return char s passed in.
|
joosttromp |
0:62fa44dd600b
|
764
|
*/
|
joosttromp |
0:62fa44dd600b
|
765
|
char * setVtg(char *s) { _vtg = s; return s; };
|
joosttromp |
0:62fa44dd600b
|
766
|
|
joosttromp |
0:62fa44dd600b
|
767
|
/**
|
joosttromp |
0:62fa44dd600b
|
768
|
* Set's the UKN string memory pointer.
|
joosttromp |
0:62fa44dd600b
|
769
|
* @param s char pointer ti string.
|
joosttromp |
0:62fa44dd600b
|
770
|
* @return char s passed in.
|
joosttromp |
0:62fa44dd600b
|
771
|
*/
|
joosttromp |
0:62fa44dd600b
|
772
|
char * setUkn(char *s) { _ukn = s; return s; };
|
joosttromp |
0:62fa44dd600b
|
773
|
|
joosttromp |
0:62fa44dd600b
|
774
|
//! Set the baud rate the GPS module is using.
|
joosttromp |
0:62fa44dd600b
|
775
|
/**
|
joosttromp |
0:62fa44dd600b
|
776
|
* Set the baud rate of the serial port
|
joosttromp |
0:62fa44dd600b
|
777
|
*
|
joosttromp |
0:62fa44dd600b
|
778
|
* @see http://mbed.org/projects/libraries/api/mbed/trunk/Serial#Serial.baud
|
joosttromp |
0:62fa44dd600b
|
779
|
*
|
joosttromp |
0:62fa44dd600b
|
780
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
781
|
* @param baudrate The baudrate to set.
|
joosttromp |
0:62fa44dd600b
|
782
|
*/
|
joosttromp |
0:62fa44dd600b
|
783
|
void baud(int baudrate) { Serial::baud(baudrate); }
|
joosttromp |
0:62fa44dd600b
|
784
|
|
joosttromp |
0:62fa44dd600b
|
785
|
//! Set the serial port format the GPS module is using.
|
joosttromp |
0:62fa44dd600b
|
786
|
/**
|
joosttromp |
0:62fa44dd600b
|
787
|
* Set the transmission format used by the Serial port
|
joosttromp |
0:62fa44dd600b
|
788
|
*
|
joosttromp |
0:62fa44dd600b
|
789
|
* @see http://mbed.org/projects/libraries/api/mbed/trunk/Serial#Serial.format
|
joosttromp |
0:62fa44dd600b
|
790
|
*
|
joosttromp |
0:62fa44dd600b
|
791
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
792
|
* @param bits - The number of bits in a word (5-8; default = 8)
|
joosttromp |
0:62fa44dd600b
|
793
|
* @param parity - The parity used (GPS::None, GPS::Odd, GPS::Even, GPS::Forced1, GPS::Forced0; default = GPS::None)
|
joosttromp |
0:62fa44dd600b
|
794
|
* @param stop_bits - The number of stop bits (1 or 2; default = 1)
|
joosttromp |
0:62fa44dd600b
|
795
|
*/
|
joosttromp |
0:62fa44dd600b
|
796
|
void format(int bits, Parity parity, int stop_bits) { Serial::format(bits, (Serial::Parity)parity, stop_bits); }
|
joosttromp |
0:62fa44dd600b
|
797
|
|
joosttromp |
0:62fa44dd600b
|
798
|
//! Send incoming GPS bytes to Uart0
|
joosttromp |
0:62fa44dd600b
|
799
|
/**
|
joosttromp |
0:62fa44dd600b
|
800
|
* Send incoming GPS bytes to Uart0
|
joosttromp |
0:62fa44dd600b
|
801
|
*
|
joosttromp |
0:62fa44dd600b
|
802
|
* This can be useful for printing out the bytes from the GPS onto
|
joosttromp |
0:62fa44dd600b
|
803
|
* a the common debug port Uart0. Note, Uart0 should have been setup
|
joosttromp |
0:62fa44dd600b
|
804
|
* and initialised before switching this on. Also, realistically,
|
joosttromp |
0:62fa44dd600b
|
805
|
* you should ensure Uart0 has a higher baud rate than that being
|
joosttromp |
0:62fa44dd600b
|
806
|
* used by the GPS. Sending of bytes to Uart0 is "raw" and should
|
joosttromp |
0:62fa44dd600b
|
807
|
* only be used to initially gather data and should NOT be used as
|
joosttromp |
0:62fa44dd600b
|
808
|
* part of the application design. If you need to forward on the
|
joosttromp |
0:62fa44dd600b
|
809
|
* data you should come up with a proper strategy.
|
joosttromp |
0:62fa44dd600b
|
810
|
*
|
joosttromp |
0:62fa44dd600b
|
811
|
* @ingroup API
|
joosttromp |
0:62fa44dd600b
|
812
|
* @param b - True to send to Uart0, false otherwise
|
joosttromp |
0:62fa44dd600b
|
813
|
*/
|
joosttromp |
0:62fa44dd600b
|
814
|
void NmeaOnUart0(bool b) { _nmeaOnUart0 = b; }
|
joosttromp |
0:62fa44dd600b
|
815
|
|
joosttromp |
0:62fa44dd600b
|
816
|
protected:
|
joosttromp |
0:62fa44dd600b
|
817
|
|
joosttromp |
0:62fa44dd600b
|
818
|
//! Flag set true when a GPS PPS has been attached to a pin.
|
joosttromp |
0:62fa44dd600b
|
819
|
bool _ppsInUse;
|
joosttromp |
0:62fa44dd600b
|
820
|
|
joosttromp |
0:62fa44dd600b
|
821
|
//! An InterruptIn object to "trigger" on the PPS edge.
|
joosttromp |
0:62fa44dd600b
|
822
|
InterruptIn *_pps;
|
joosttromp |
0:62fa44dd600b
|
823
|
|
joosttromp |
0:62fa44dd600b
|
824
|
//! A Ticker object called every 10ms.
|
joosttromp |
0:62fa44dd600b
|
825
|
Ticker *_second100;
|
joosttromp |
0:62fa44dd600b
|
826
|
|
joosttromp |
0:62fa44dd600b
|
827
|
//! A GPS_Time object used to hold the last parsed time/date data.
|
joosttromp |
0:62fa44dd600b
|
828
|
GPS_Time theTime;
|
joosttromp |
0:62fa44dd600b
|
829
|
|
joosttromp |
0:62fa44dd600b
|
830
|
//! A GPS_Geodetic object used to hold the last parsed positional data.
|
joosttromp |
0:62fa44dd600b
|
831
|
GPS_Geodetic thePlace;
|
joosttromp |
0:62fa44dd600b
|
832
|
|
joosttromp |
0:62fa44dd600b
|
833
|
//! A GPS_VTG object used to hold vector data.
|
joosttromp |
0:62fa44dd600b
|
834
|
GPS_VTG theVTG;
|
joosttromp |
0:62fa44dd600b
|
835
|
|
joosttromp |
0:62fa44dd600b
|
836
|
//! Used to record the previous byte received.
|
joosttromp |
0:62fa44dd600b
|
837
|
char _lastByte;
|
joosttromp |
0:62fa44dd600b
|
838
|
|
joosttromp |
0:62fa44dd600b
|
839
|
char *_gga;
|
joosttromp |
0:62fa44dd600b
|
840
|
char *_rmc;
|
joosttromp |
0:62fa44dd600b
|
841
|
char *_vtg;
|
joosttromp |
0:62fa44dd600b
|
842
|
char *_ukn;
|
joosttromp |
0:62fa44dd600b
|
843
|
|
joosttromp |
0:62fa44dd600b
|
844
|
//! Used for debugging.
|
joosttromp |
0:62fa44dd600b
|
845
|
bool _nmeaOnUart0;
|
joosttromp |
0:62fa44dd600b
|
846
|
};
|
joosttromp |
0:62fa44dd600b
|
847
|
|
joosttromp |
0:62fa44dd600b
|
848
|
#endif
|
joosttromp |
0:62fa44dd600b
|
849
|
|