nmea 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: nmea
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.2"
7
- date: 2007-05-09 00:00:00 +04:00
6
+ version: "0.3"
7
+ date: 2007-11-03 00:00:00 +03:00
8
8
  summary: NMEA (GPS protocol) parser
9
9
  require_paths:
10
10
  - lib
@@ -34,24 +34,22 @@ files:
34
34
  - setup.rb
35
35
  - init.rb
36
36
  - test/fixtures
37
+ - test/fixtures/rmc.txt
37
38
  - test/helper.rb
38
39
  - test/mocks.rb
40
+ - test/nmea.txt
39
41
  - test/parse.log
40
42
  - test/points.wpt
41
43
  - test/reader.rb
42
44
  - test/speed.txt
43
- - test/test_filters.rb
44
- - test/test_scan.rb
45
- - test/fixtures/rmc.txt
46
45
  - ext/nmea.h
47
46
  - ext/nmea.cpp
48
47
  - ext/ruby_nmea.cpp
49
48
  - ext/extconf.rb
50
49
  - ext/test.rb
51
50
  - lib/nmea.rb
52
- test_files:
53
- - test/test_filters.rb
54
- - test/test_scan.rb
51
+ test_files: []
52
+
55
53
  rdoc_options:
56
54
  - --main=README
57
55
  - --line-numbers
@@ -1,7 +0,0 @@
1
- require File.dirname(__FILE__)+"/helper"
2
-
3
- class TestFilters < Test::Unit::TestCase
4
- def test_smoothing
5
-
6
- end
7
- end
@@ -1,298 +0,0 @@
1
- require File.dirname(__FILE__)+"/helper"
2
-
3
- class TestScanLines < Test::Unit::TestCase
4
- def self.handler(name, *params)
5
- class_eval <<-EOF
6
- def #{name}(#{params.join(", ")})
7
- @#{name}_called = (@#{name}_called || 0) + 1
8
- #{params.map{|param| "@"+param.to_s+" = "+param.to_s}.join("\n")}
9
- end
10
- EOF
11
- end
12
- handler :rmc, :utc, :latitude, :longitude, :speed, :course, :magnetic_variation
13
-
14
- def test_rmc
15
- invalid_rmc = "$GPRMC,072458.748,V,,,,,,,080407,,*23"
16
- NMEA.scan(invalid_rmc, self)
17
- assert_equal 1, @rmc_called, "RMC handler should be called"
18
- assert_equal Time.gm(2007, 4, 8, 7, 24, 58, 748), @utc
19
- assert_equal nil, @latitude
20
- assert_equal nil, @longitude
21
- assert_equal nil, @speed
22
- assert_equal nil, @course
23
- assert_equal nil, @magnetic_variation
24
-
25
- valid_rmc = "$GPRMC,072640.711,A,5546.5537,N,03741.2054,E,0.00,,080407,,*12"
26
- NMEA.scan(valid_rmc, self)
27
- assert_equal 2, @rmc_called, "RMC handler should be called"
28
- assert_equal Time.gm(2007, 4, 8, 7, 26, 40, 711), @utc
29
- assert_equal GPS::Latitude.new(55, 46.5537), @latitude
30
- assert_equal GPS::Longitude.new(37, 41.2054), @longitude
31
- assert_equal 0, @speed
32
- assert_equal nil, @course
33
- assert_equal nil, @magnetic_variation
34
-
35
- strange_rmc = "$GPRMC,135444,A,3815.4477,N,02349.5804,E,10412.9,243.3,090507,5,E,A*B"
36
- NMEA.scan(strange_rmc, self)
37
- assert_equal 3, @rmc_called, "RMC handled should be called"
38
- assert_equal Time.gm(2007, 5, 9, 13, 54, 44), @utc
39
- assert_equal GPS::Latitude.new(38, 15.4477), @latitude
40
- assert_equal GPS::Longitude.new(23, 49.5804), @longitude
41
- assert_equal 10412.9, @speed
42
- assert_equal 243.3, @course
43
- assert_equal 5, @magnetic_variation
44
- end
45
-
46
- def gsv(flag, satellites)
47
- @gsv_called = (@gsv_called || 0) + 1
48
- @flag = flag
49
- @satellites = [] if flag == :start
50
- @satellites ||= []
51
- @satellites += satellites
52
- end
53
-
54
- def test_gsv
55
- empty_gsv = ["$GPGSV,3,1,12,20,00,000,,10,00,000,,25,00,000,,27,00,000,*79",
56
- "$GPGSV,3,2,12,22,00,000,,07,00,000,,21,00,000,,24,00,000,*79",
57
- "$GPGSV,3,3,12,16,00,000,,28,00,000,,26,00,000,,29,00,000,*78"]
58
- empty_gsv.each do |gsv|
59
- NMEA.scan(gsv, self)
60
- end
61
- assert_equal 3, @gsv_called
62
- assert_equal 12, @satellites.size
63
- assert_equal 20, @satellites.first.number
64
-
65
- good_gsv = ["$GPGSV,3,1,11,19,38,300,33,26,20,035,36,29,13,026,36,18,69,100,*71",
66
- "$GPGSV,3,2,11,22,60,191,,03,59,264,31,21,38,095,,16,11,216,*7C",
67
- "$GPGSV,3,3,11,08,05,337,,24,02,092,,14,01,167,*48"]
68
- good_gsv.each do |gsv|
69
- NMEA.scan(gsv, self)
70
- end
71
- assert_equal 6, @gsv_called
72
- assert_equal 11, @satellites.size
73
- assert_equal 19, @satellites.first.number
74
- assert_equal 38, @satellites.first.elevation
75
- assert_equal 300, @satellites.first.azimuth
76
- assert_equal 33, @satellites.first.signal_level
77
-
78
- @satellites = []
79
- strange_gsv = "$GPGSV,3,3,09,20,04,037,*42"
80
- NMEA.scan(strange_gsv, self)
81
- assert_equal 7, @gsv_called
82
- assert_equal 1, @satellites.size
83
- assert_equal 20, @satellites.first.number
84
- assert_equal 4, @satellites.first.elevation
85
- assert_equal 37, @satellites.first.azimuth
86
- assert_equal nil, @satellites.first.signal_level
87
- end
88
-
89
-
90
- handler :gsa, :mode_state, :mode, :satellites, :pdop, :hdop, :vdop
91
-
92
- def test_gsa
93
- empty_gsa = "$GPGSA,A,1,,,,,,,,,,,,,,,*1E"
94
- NMEA.scan(empty_gsa, self)
95
- assert_equal 1, @gsa_called
96
- assert_equal :automatic, @mode_state
97
- assert_equal :no_fix, @mode
98
- assert_equal [nil, nil, nil,nil,nil,nil,nil,nil,nil,nil,nil,nil], @satellites
99
- assert_equal nil, @pdop
100
- assert_equal nil, @hdop
101
- assert_equal nil, @vdop
102
-
103
- good_gsa = "$GPGSA,A,2,26,29,19,,,,,,,,,,10.6,10.6,1.0*35"
104
- NMEA.scan(good_gsa, self)
105
- assert_equal 2, @gsa_called
106
- assert_equal :automatic, @mode_state
107
- assert_equal :gps_2d, @mode
108
- assert_equal [26, 29, 19,nil,nil,nil,nil,nil,nil,nil,nil,nil], @satellites
109
- assert_equal 10.6, @pdop
110
- assert_equal 10.6, @hdop
111
- assert_equal 1.0, @vdop
112
- end
113
-
114
- handler :gga, :time, :latitude, :longitude, :gps_quality, :active_satellite_count, :hdop, :altitude, :geoidal_height, :dgps_data_age, :dgps_station_id
115
-
116
- def test_gga
117
- empty_gga = "$GPGGA,072459.739,,,,,0,00,,,M,0.0,M,,0000*56"
118
- NMEA.scan(empty_gga, self)
119
- assert_equal 1, @gga_called
120
- assert_equal Time.utc(1970, 1, 1, 07, 24, 59, 739), @time
121
- assert_equal nil, @latitude
122
- assert_equal nil, @longitude
123
- assert_equal :invalid, @gps_quality
124
- assert_equal 0, @active_satellite_count
125
- assert_equal nil, @hdop
126
- assert_equal nil, @altitude
127
- assert_equal 0, @geoidal_height
128
- assert_equal nil, @dgps_data_age
129
- assert_equal 0, @dgps_station_id
130
-
131
- good_gga = "$GPGGA,072642.711,5546.5395,N,03741.2180,E,1,03,10.6,174.3,M,14.4,M,,0000*68"
132
- NMEA.scan(good_gga, self)
133
- assert_equal 2, @gga_called
134
- assert_equal Time.utc(1970, 1, 1, 07, 26, 42, 711), @time
135
- assert_equal GPS::Latitude.new(55, 46.5395), @latitude
136
- assert_equal GPS::Longitude.new(37, 41.2180), @longitude
137
- assert_equal :gps, @gps_quality
138
- assert_equal 3, @active_satellite_count
139
- assert_equal 10.6, @hdop
140
- assert_equal 174.3, @altitude
141
- assert_equal 14.4, @geoidal_height
142
- assert_equal nil, @dgps_data_age
143
- assert_equal 0, @dgps_station_id
144
- end
145
-
146
- def psrftxt(key, value)
147
- @psrftxt_called = (@psrftxt_called || 0) + 1
148
- @psrf[key] = (value || true)
149
- end
150
-
151
- def test_psrftxt
152
- @psrf = {}
153
- data = [
154
- "$PSRFTXT,Version:GSW3.2.2_3.1.00.12-SDK003P1.01a",
155
- "$PSRFTXT,Version2:F-GPS-03-0607211",
156
- "$PSRFTXT,WAAS Disable",
157
- "$PSRFTXT,TOW: 26833",
158
- "$PSRFTXT,WK: 1422",
159
- "$PSRFTXT,POS: 2845429 2198159 5250582",
160
- "$PSRFTXT,CLK: 96413",
161
- "$PSRFTXT,CHNL: 12",
162
- "$PSRFTXT,Baud rate: 4800"]
163
- data.each do |sentence|
164
- NMEA.scan(sentence, self)
165
- end
166
- assert_equal 9, @psrftxt_called
167
- assert_equal "GSW3.2.2_3.1.00.12-SDK003P1.01a", @psrf["Version"]
168
- assert_equal "F-GPS-03-0607211", @psrf["Version2"]
169
- assert_equal true, @psrf["WAAS Disable"]
170
- assert_equal "26833", @psrf["TOW"]
171
- assert_equal "1422", @psrf["WK"]
172
- assert_equal "2845429 2198159 5250582", @psrf["POS"]
173
- assert_equal "96413", @psrf["CLK"]
174
- assert_equal "12", @psrf["CHNL"]
175
- assert_equal "4800", @psrf["Baud rate"]
176
- end
177
-
178
- handler :vtg, :true_course, :magnetic_course, :knot_speed, :kmph_speed, :mode
179
- def test_vtg
180
- good_vtg = "$GPVTG,225.29,T,,M,2.86,N,5.3,K*64"
181
- NMEA.scan(good_vtg, self)
182
- assert_equal 1, @vtg_called
183
- assert_equal 225.29, @true_course
184
- assert_equal nil, @magnetic_course
185
- assert_equal 2.86, @knot_speed
186
- assert_equal 5.3, @kmph_speed
187
- assert_equal nil, @mode
188
- end
189
-
190
- handler :gll, :time, :latitude, :longitude
191
- def test_gll
192
- empty_gll = "$GPGLL,,,,,192642.609,V*1D"
193
- NMEA.scan(empty_gll, self)
194
- assert_equal 1, @gll_called
195
- assert_equal nil, @latitude
196
- assert_equal nil, @longitude
197
- assert_equal Time.utc(1970, 1, 1, 19, 26, 42, 609), @time
198
-
199
- good_gll = "$GPGLL,5546.5059,N,03741.1635,E,193703.532,A*34"
200
- NMEA.scan(good_gll, self)
201
- assert_equal 2, @gll_called
202
- assert_equal GPS::Latitude.new(55, 46.5059), @latitude
203
- assert_equal GPS::Longitude.new(37, 41.1635), @longitude
204
- end
205
-
206
- handler :bod, :true_course, :magnetic, :to, :from
207
- def test_bod
208
- bod1 = "$GPBOD,099.3,T,105.6,M,POINTB,*48"
209
- NMEA.scan(bod1, self)
210
- assert_equal 1, @bod_called
211
- assert_equal 99.3, @true_course
212
- assert_equal 105.6, @magnetic
213
- assert_equal "POINTB", @to
214
- assert_equal nil, @from
215
-
216
- bod2 = "$GPBOD,097.0,T,103.2,M,POINTB,POINTA*4A"
217
- NMEA.scan(bod2, self)
218
- assert_equal 2, @bod_called
219
- assert_equal 97, @true_course
220
- assert_equal 103.2, @magnetic
221
- assert_equal "POINTB", @to
222
- assert_equal "POINTA", @from
223
- end
224
-
225
- # TODO
226
- # $GPAAM,A,A,0.10,N,WPTNME*43
227
- # handler :aam,
228
- #
229
- # $GPALM,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,*CC
230
- # $GPALM,1,1,15,1159,00,441d,4e,16be,fd5e,a10c9f,4a2da4,686e81,58cbe1,0a4,001*5B
231
- #
232
- # $GPAPB,A,A,0.10,R,N,V,V,011,M,DEST,011,M,011,M*82
233
- #
234
- # $GPBWC,081837,,,,,,T,,M,,N,*13
235
- # $GPBWC,220516,5130.02,N,00046.34,W,213.8,T,218.0,M,0004.6,N,EGLM*11
236
- #
237
- # $GPGRS,024603.00,1,-1.8,-2.7,0.3,,,,,,,,,*6C
238
- #
239
- # $GPGST,024603.00,3.2,6.6,4.7,47.3,5.8,5.6,22.0*58
240
- #
241
- # $GPHDT,x.x,T
242
- #
243
- # $GPMSK,318.0,A,100,M,2*45
244
- #
245
- # $GPMSS,55,27,318.0,100,*66
246
- # $GPMSS,0.0,0.0,0.0,25,2*6D
247
- #
248
- # $GPR00,EGLL,EGLM,EGTB,EGUB,EGTK,MBOT,EGTB,,,,,,,*58
249
- # $GPR00,MINST,CHATN,CHAT1,CHATW,CHATM,CHATE,003,004,005,006,007,,,*05
250
- #
251
- # $GPRMA,A,lll,N,lll,W,x,y,ss.s,ccc,vv.v,W*hh
252
- #
253
- # $GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*0B
254
- # $GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D
255
- # $GPRMB,A,x.x,a,c--c,d--d,llll.ll,e,yyyyy.yy,f,g.g,h.h,i.i,j*kk
256
- #
257
- # $GPRTE,2,1,c,0,PBRCPK,PBRTO,PTELGR,PPLAND,PYAMBU,PPFAIR,PWARRN,PMORTL,PLISMR*73
258
- # $GPRTE,2,2,c,0,PCRESY,GRYRIE,GCORIO,GWERR,GWESTG,7FED*34
259
- #
260
- # $GPTRF,hhmmss.ss,xxxxxx,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,x.x,xxx
261
- #
262
- # $GPSTN,xx
263
- #
264
- # $--VBW,x.x,x.x,A,x.x,x.x,A
265
- #
266
- # $GPWPL,4917.16,N,12310.64,W,003*65
267
- # $GPWPL,5128.62,N,00027.58,W,EGLL*59
268
- #
269
- # $GPXTE,A,A,0.67,L,N
270
- # $GPXTE,A,A,4.07,L,N*6D
271
- #
272
- # $GPZDA,hhmmss.ss,xx,xx,xxxx,xx,xx
273
- # $GPZDA,024611.08,25,03,2002,00,00*6A
274
- #
275
- # ====== GARMIN ========
276
- #
277
- # $HCHDG,101.1,,,7.1,W*3C
278
- #
279
- # $PGRMB,1,2,3,4,5,6,7,8,9*HH
280
- #
281
- # $PGRME,15.0,M,45.0,M,25.0,M*22
282
- #
283
- # $PGRMF,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15*HH
284
- #
285
- # $PGRMM,Astrln Geod '66*51
286
- # $PGRMM,NAD27 Canada*2F
287
- #
288
- # $PGRMT,1,2,3,4,5,6,7,8,9*HH
289
- #
290
- # $PGRMV,1,2,3*HH
291
- #
292
- # $PGRMZ,246,f,3*1B
293
- #
294
- # $PGRMZ,93,f,3*21
295
- # $PGRMZ,201,f,3*18
296
- #
297
- #
298
- end