| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Net::GPSD3::Return::TPV; |
|
2
|
4
|
|
|
4
|
|
962
|
use strict; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
144
|
|
|
3
|
4
|
|
|
4
|
|
23
|
use warnings; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
132
|
|
|
4
|
4
|
|
|
4
|
|
21
|
use base qw{Net::GPSD3::Return::Unknown::Timestamp}; |
|
|
4
|
|
|
|
|
8
|
|
|
|
4
|
|
|
|
|
1015
|
|
|
5
|
4
|
|
|
4
|
|
3489
|
use GPS::Point; |
|
|
4
|
|
|
|
|
10921
|
|
|
|
4
|
|
|
|
|
2013
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION='0.12'; |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
=head1 NAME |
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
Net::GPSD3::Return::TPV - Net::GPSD3 Return TPV Object |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
printf "Time: %s, Lat: %s, Lon: %s\n", $object->time, $object->lat, $object->lon; |
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
18
|
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
Provides a Perl object interface to the Time-Velocity-Position (TVP) object returned by the GPSD daemon. |
|
20
|
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
Example JSON objects: |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
=head3 Protocol 3.1 Versions |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
{ |
|
26
|
|
|
|
|
|
|
"class":"TPV", |
|
27
|
|
|
|
|
|
|
"tag":"MID2", |
|
28
|
|
|
|
|
|
|
"device":"/dev/ttyUSB0", |
|
29
|
|
|
|
|
|
|
"time":1253593085.470, |
|
30
|
|
|
|
|
|
|
"ept":0.005, |
|
31
|
|
|
|
|
|
|
"lat":38.88945123, |
|
32
|
|
|
|
|
|
|
"lon":-77.03522143, |
|
33
|
|
|
|
|
|
|
"track":171.7249, |
|
34
|
|
|
|
|
|
|
"speed":0.467, |
|
35
|
|
|
|
|
|
|
"mode":2 |
|
36
|
|
|
|
|
|
|
} |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
{ |
|
39
|
|
|
|
|
|
|
"class":"TPV", |
|
40
|
|
|
|
|
|
|
"tag":"MID2", |
|
41
|
|
|
|
|
|
|
"device":"/dev/ttyUSB0", |
|
42
|
|
|
|
|
|
|
"time":1253593667.430, |
|
43
|
|
|
|
|
|
|
"ept":0.005, |
|
44
|
|
|
|
|
|
|
"lat":38.88945123, |
|
45
|
|
|
|
|
|
|
"lon":-77.03522143, |
|
46
|
|
|
|
|
|
|
"alt":146.911, |
|
47
|
|
|
|
|
|
|
"track":180.0000, |
|
48
|
|
|
|
|
|
|
"speed":0.194, |
|
49
|
|
|
|
|
|
|
"climb":-0.157, |
|
50
|
|
|
|
|
|
|
"mode":3 |
|
51
|
|
|
|
|
|
|
} |
|
52
|
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
=head3 Protocol 3.4 Version |
|
54
|
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
{ |
|
56
|
|
|
|
|
|
|
"class":"TPV", |
|
57
|
|
|
|
|
|
|
"tag":"0x0106", |
|
58
|
|
|
|
|
|
|
"device":"/dev/cuaU0", |
|
59
|
|
|
|
|
|
|
"time":"2011-03-20T06:51:59.12Z", |
|
60
|
|
|
|
|
|
|
"ept":0.005, |
|
61
|
|
|
|
|
|
|
"lat":37.371427205, |
|
62
|
|
|
|
|
|
|
"lon":-122.015179890, |
|
63
|
|
|
|
|
|
|
"alt":25.789, |
|
64
|
|
|
|
|
|
|
"epx":1.926, |
|
65
|
|
|
|
|
|
|
"epy":1.808, |
|
66
|
|
|
|
|
|
|
"epv":6.497, |
|
67
|
|
|
|
|
|
|
"track":0.0000, |
|
68
|
|
|
|
|
|
|
"speed":0.000, |
|
69
|
|
|
|
|
|
|
"climb":0.000, |
|
70
|
|
|
|
|
|
|
"eps":3.85, |
|
71
|
|
|
|
|
|
|
"mode":3 |
|
72
|
|
|
|
|
|
|
} |
|
73
|
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
=head1 METHODS PROPERTIES |
|
75
|
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=head2 class |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
Returns the object class |
|
79
|
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
=head2 string |
|
81
|
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
Returns the JSON string |
|
83
|
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
=head2 parent |
|
85
|
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
Return the parent Net::GPSD object |
|
87
|
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
=head2 device |
|
89
|
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
Name of originating device. |
|
91
|
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
=cut |
|
93
|
|
|
|
|
|
|
|
|
94
|
1
|
|
|
1
|
1
|
6
|
sub device {shift->{"device"}}; |
|
95
|
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
=head2 tag |
|
97
|
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
Type tag associated with this GPS sentence; from an NMEA device this is just the NMEA sentence type. |
|
99
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
=cut |
|
101
|
|
|
|
|
|
|
|
|
102
|
2
|
|
|
2
|
1
|
12
|
sub tag {shift->{"tag"}}; |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
=head2 mode |
|
105
|
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
NMEA mode: %d, 0=no mode value yet seen, 1=no fix, 2=2D, 3=3D. |
|
107
|
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
=cut |
|
109
|
|
|
|
|
|
|
|
|
110
|
2
|
|
|
2
|
1
|
10
|
sub mode {shift->{"mode"}}; |
|
111
|
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
=head2 time |
|
113
|
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
Seconds since the Unix epoch, UTC. The value may have a fractional part of up to .01sec precision. |
|
115
|
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
Note: In 2.96 (protocol 3.4) the TPV->time format changed from unix epoch to W3C, but this method hides that from the user. |
|
117
|
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
=head2 timestamp |
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
W3C formated timestamp value either directly from the protocol >= 3.4 or calculated < 3.4. The value may have a fractional part of up to .01sec precision. |
|
121
|
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
Note: I expect that in protocol 3.5 the value will be passed directly as TPV->timestamp |
|
123
|
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
=head2 datetime |
|
125
|
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
Returns a L object |
|
127
|
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
=head2 lat |
|
129
|
|
|
|
|
|
|
|
|
130
|
|
|
|
|
|
|
Latitude in degrees: +/- signifies West/East |
|
131
|
|
|
|
|
|
|
|
|
132
|
|
|
|
|
|
|
=cut |
|
133
|
|
|
|
|
|
|
|
|
134
|
2
|
|
|
2
|
1
|
8
|
sub lat {shift->{"lat"}}; |
|
135
|
|
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
=head2 lon |
|
137
|
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
Longitude in degrees: +/- signifies North/South. |
|
139
|
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
=cut |
|
141
|
|
|
|
|
|
|
|
|
142
|
2
|
|
|
2
|
1
|
10
|
sub lon {shift->{"lon"}}; |
|
143
|
|
|
|
|
|
|
|
|
144
|
|
|
|
|
|
|
=head2 alt |
|
145
|
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
Altitude in meters. |
|
147
|
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
=cut |
|
149
|
|
|
|
|
|
|
|
|
150
|
1
|
|
|
1
|
1
|
5
|
sub alt {shift->{"alt"}}; |
|
151
|
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
=head2 speed |
|
153
|
|
|
|
|
|
|
|
|
154
|
|
|
|
|
|
|
Speed over ground, meters per second. |
|
155
|
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
=cut |
|
157
|
|
|
|
|
|
|
|
|
158
|
2
|
|
|
2
|
1
|
10
|
sub speed {shift->{"speed"}}; |
|
159
|
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
=head2 track |
|
161
|
|
|
|
|
|
|
|
|
162
|
|
|
|
|
|
|
Course over ground, degrees from true north. |
|
163
|
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
=cut |
|
165
|
|
|
|
|
|
|
|
|
166
|
2
|
|
|
2
|
1
|
11
|
sub track {shift->{"track"}}; |
|
167
|
|
|
|
|
|
|
|
|
168
|
|
|
|
|
|
|
=head2 climb |
|
169
|
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
Climb (postive) or sink (negative) rate, meters per second. |
|
171
|
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
=cut |
|
173
|
|
|
|
|
|
|
|
|
174
|
2
|
|
|
2
|
1
|
9
|
sub climb {shift->{"climb"}}; |
|
175
|
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
=head2 ept |
|
177
|
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
Estimated timestamp error (%f, seconds, 95% confidence). |
|
179
|
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
=cut |
|
181
|
|
|
|
|
|
|
|
|
182
|
2
|
|
|
2
|
1
|
370
|
sub ept {shift->{"ept"}}; |
|
183
|
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
=head2 epx |
|
185
|
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
=cut |
|
187
|
|
|
|
|
|
|
|
|
188
|
2
|
|
|
2
|
1
|
9
|
sub epx {shift->{"epx"}}; |
|
189
|
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
=head2 epy |
|
191
|
|
|
|
|
|
|
|
|
192
|
|
|
|
|
|
|
Latitude error estimate in meters, 95% confidence. |
|
193
|
|
|
|
|
|
|
|
|
194
|
|
|
|
|
|
|
=cut |
|
195
|
|
|
|
|
|
|
|
|
196
|
1
|
|
|
1
|
1
|
7
|
sub epy {shift->{"epy"}}; |
|
197
|
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
=head2 epv |
|
199
|
|
|
|
|
|
|
|
|
200
|
|
|
|
|
|
|
Estimated vertical error in meters, 95% confidence. |
|
201
|
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
=cut |
|
203
|
|
|
|
|
|
|
|
|
204
|
2
|
|
|
2
|
1
|
9
|
sub epv {shift->{"epv"}}; |
|
205
|
|
|
|
|
|
|
|
|
206
|
|
|
|
|
|
|
=head2 eps |
|
207
|
|
|
|
|
|
|
|
|
208
|
|
|
|
|
|
|
Speed error estimate in meters/sec, 95% confifdence. |
|
209
|
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
=cut |
|
211
|
|
|
|
|
|
|
|
|
212
|
2
|
|
|
2
|
1
|
10
|
sub eps {shift->{"eps"}}; |
|
213
|
|
|
|
|
|
|
|
|
214
|
|
|
|
|
|
|
=head2 epd |
|
215
|
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
Direction error estinmate in degrees, 95% confifdence. |
|
217
|
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
=cut |
|
219
|
|
|
|
|
|
|
|
|
220
|
1
|
|
|
1
|
1
|
3
|
sub epd {shift->{"epd"}}; |
|
221
|
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
=head2 epc |
|
223
|
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
Climb/sink error estinmate in meters/sec, 95% confifdence. |
|
225
|
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
=cut |
|
227
|
|
|
|
|
|
|
|
|
228
|
1
|
|
|
1
|
1
|
5
|
sub epc {shift->{"epc"}}; |
|
229
|
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
=head1 METHODS VALUE ADDED |
|
231
|
|
|
|
|
|
|
|
|
232
|
|
|
|
|
|
|
=head2 point |
|
233
|
|
|
|
|
|
|
|
|
234
|
|
|
|
|
|
|
Returns a L Object |
|
235
|
|
|
|
|
|
|
|
|
236
|
|
|
|
|
|
|
=cut |
|
237
|
|
|
|
|
|
|
|
|
238
|
|
|
|
|
|
|
sub point { |
|
239
|
6
|
|
|
6
|
1
|
1993
|
my $self=shift; |
|
240
|
6
|
100
|
|
|
|
17
|
unless (defined($self->{"point"})) { |
|
241
|
1
|
|
|
|
|
6
|
$self->{"point"}=GPS::Point->new( |
|
242
|
|
|
|
|
|
|
time => $self->datetime->hires_epoch, #float seconds from the unix epoch |
|
243
|
|
|
|
|
|
|
timestamp => $self->timestamp, #not yet supported but I'm planning it |
|
244
|
|
|
|
|
|
|
datetime => $self->datetime, #not yet supported but I'm planning it |
|
245
|
|
|
|
|
|
|
lat => $self->lat, #signed degrees |
|
246
|
|
|
|
|
|
|
lon => $self->lon, #signed degrees |
|
247
|
|
|
|
|
|
|
alt => $self->alt, #meters above the WGS-84 ellipsoid |
|
248
|
|
|
|
|
|
|
speed => $self->speed, #meters/second (over ground) |
|
249
|
|
|
|
|
|
|
heading => $self->track, #degrees clockwise from North |
|
250
|
|
|
|
|
|
|
climb => $self->climb, #meters/second |
|
251
|
|
|
|
|
|
|
etime => $self->ept, #float seconds |
|
252
|
|
|
|
|
|
|
ehorizontal => $self->epx, #float meters |
|
253
|
|
|
|
|
|
|
evertical => $self->epv, #float meters |
|
254
|
|
|
|
|
|
|
espeed => $self->eps, #meters/second |
|
255
|
|
|
|
|
|
|
eheading => $self->epd, #degrees |
|
256
|
|
|
|
|
|
|
eclimb => $self->epc, #meters/second |
|
257
|
|
|
|
|
|
|
mode => $self->mode, #GPS mode [?=>undef,None=>1,2D=>2,3D=>3] |
|
258
|
|
|
|
|
|
|
tag => $self->tag, #Name of the GPS message for data |
|
259
|
|
|
|
|
|
|
); |
|
260
|
|
|
|
|
|
|
} |
|
261
|
6
|
|
|
|
|
69
|
return $self->{"point"}; |
|
262
|
|
|
|
|
|
|
} |
|
263
|
|
|
|
|
|
|
|
|
264
|
|
|
|
|
|
|
=head1 BUGS |
|
265
|
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
Log on RT and Send to gpsd-dev email list |
|
267
|
|
|
|
|
|
|
|
|
268
|
|
|
|
|
|
|
=head1 SUPPORT |
|
269
|
|
|
|
|
|
|
|
|
270
|
|
|
|
|
|
|
DavisNetworks.com supports all Perl applications including this package. |
|
271
|
|
|
|
|
|
|
|
|
272
|
|
|
|
|
|
|
Try gpsd-dev email list |
|
273
|
|
|
|
|
|
|
|
|
274
|
|
|
|
|
|
|
=head1 AUTHOR |
|
275
|
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
Michael R. Davis |
|
277
|
|
|
|
|
|
|
CPAN ID: MRDVT |
|
278
|
|
|
|
|
|
|
STOP, LLC |
|
279
|
|
|
|
|
|
|
domain=>michaelrdavis,tld=>com,account=>perl |
|
280
|
|
|
|
|
|
|
http://www.stopllc.com/ |
|
281
|
|
|
|
|
|
|
|
|
282
|
|
|
|
|
|
|
=head1 COPYRIGHT |
|
283
|
|
|
|
|
|
|
|
|
284
|
|
|
|
|
|
|
This program is free software licensed under the... |
|
285
|
|
|
|
|
|
|
|
|
286
|
|
|
|
|
|
|
The BSD License |
|
287
|
|
|
|
|
|
|
|
|
288
|
|
|
|
|
|
|
The full text of the license can be found in the LICENSE file included with this module. |
|
289
|
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
291
|
|
|
|
|
|
|
|
|
292
|
|
|
|
|
|
|
L, L, L |
|
293
|
|
|
|
|
|
|
|
|
294
|
|
|
|
|
|
|
=cut |
|
295
|
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
1; |