gps_pvt 0.9.1 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/gps_pvt/Coordinate/Coordinate_wrap.cxx +31 -19
- data/ext/gps_pvt/GPS/GPS_wrap.cxx +640 -4176
- data/ext/gps_pvt/SylphideMath/SylphideMath_wrap.cxx +829 -2574
- data/ext/ninja-scan-light/tool/swig/Coordinate.i +12 -12
- data/ext/ninja-scan-light/tool/swig/GPS.i +93 -85
- data/ext/ninja-scan-light/tool/swig/SylphideMath.i +52 -32
- data/ext/ninja-scan-light/tool/swig/spec/GPS_spec.rb +1 -1
- data/ext/ninja-scan-light/tool/swig/spec/SylphideMath_spec.rb +8 -8
- data/lib/gps_pvt/receiver/rtcm3.rb +215 -37
- data/lib/gps_pvt/receiver.rb +1 -0
- data/lib/gps_pvt/rtcm3.rb +263 -32
- data/lib/gps_pvt/version.rb +1 -1
- metadata +2 -2
data/lib/gps_pvt/rtcm3.rb
CHANGED
@@ -13,6 +13,7 @@ class RTCM3
|
|
13
13
|
end
|
14
14
|
module Packet
|
15
15
|
def decode(bits_list, offset = nil)
|
16
|
+
# 24 is offset of header in transport layer
|
16
17
|
Util::BitOp::extract(self, bits_list, offset || 24)
|
17
18
|
end
|
18
19
|
def message_number
|
@@ -56,15 +57,51 @@ class RTCM3
|
|
56
57
|
2 => 12,
|
57
58
|
3 => 12,
|
58
59
|
4 => unum_gen.call(30, Rational(1, 1000)), # [sec]
|
60
|
+
5 => 1,
|
61
|
+
6 => 5,
|
62
|
+
7 => 1,
|
63
|
+
8 => 3,
|
59
64
|
9 => 6,
|
65
|
+
10 => 1,
|
66
|
+
11 => invalidate.call(unum_gen.call(24, Rational(2, 100)), 0x800000), # [m]
|
67
|
+
12 => invalidate.call(num_gen.call(20, Rational(5, 10000)), 0x80000), # [m]
|
68
|
+
13 => 7,
|
69
|
+
14 => unum_gen.call(8, 299_792.458), # [m]
|
70
|
+
15 => invalidate.call(unum_gen.call(8, Rational(1, 4)), 0), # [db-Hz],
|
71
|
+
16 => 2,
|
72
|
+
17 => invalidate.call(num_gen.call(14, Rational(2, 100)), 0x2000), # [m]
|
73
|
+
18 => num_gen.call(20, Rational(5, 10000)), # [m]
|
74
|
+
19 => 7,
|
75
|
+
20 => invalidate.call(unum_gen.call(8, Rational(1, 4)), 0), # [db-Hz]
|
60
76
|
21 => 6,
|
61
77
|
22 => 1,
|
62
78
|
23 => 1,
|
63
79
|
24 => 1,
|
64
80
|
25 => num_gen.call(38, Rational(1, 10000)), # [m]
|
65
81
|
34 => unum_gen.call(27, Rational(1, 1000)), # [sec]
|
82
|
+
35 => 5,
|
83
|
+
36 => 1,
|
84
|
+
37 => 3,
|
66
85
|
38 => 6,
|
67
|
-
|
86
|
+
39 => 1,
|
87
|
+
40 => [5, proc{|v| v - 7}],
|
88
|
+
41 => invalidate.call(unum_gen.call(25, Rational(2, 100)), 0x1000000), # [m]
|
89
|
+
42 => invalidate.call(num_gen.call(20, Rational(5, 10000)), 0x80000), # [m]
|
90
|
+
43 => 7,
|
91
|
+
44 => unum_gen.call(7, 599_584.916), # [m]
|
92
|
+
45 => invalidate.call(unum_gen.call(8, Rational(1, 4)), 0), # [db-Hz],
|
93
|
+
46 => 2,
|
94
|
+
47 => invalidate.call(num_gen.call(14, Rational(2, 100)), 0x2000), # [m]
|
95
|
+
48 => invalidate.call(num_gen.call(20, Rational(5, 10000)), 0x80000), # [m]
|
96
|
+
49 => 7,
|
97
|
+
50 => invalidate.call(unum_gen.call(8, Rational(1, 4)), 0), # [db-Hz]
|
98
|
+
51 => 16,
|
99
|
+
52 => 17,
|
100
|
+
53 => 5,
|
101
|
+
54 => 8,
|
102
|
+
55 => 12,
|
103
|
+
56 => 1,
|
104
|
+
57 => 16,
|
68
105
|
71 => 8,
|
69
106
|
76 => 10,
|
70
107
|
77 => proc{
|
@@ -146,11 +183,15 @@ class RTCM3
|
|
146
183
|
397 => invalidate.call(unum_gen.call(8, Rational(1, 1000)), 0xFF), # [sec]
|
147
184
|
398 => unum_gen.call(10, Rational(1, 1000 << 10)), # [sec]
|
148
185
|
399 => invalidate.call(num_gen.call(14), 0x2000), # [m/s]
|
186
|
+
400 => invalidate.call(num_gen.call(15, Rational(1, 1000 << 24)), 0x4000), # [sec],
|
187
|
+
401 => invalidate.call(num_gen.call(22, Rational(1, 1000 << 29)), 0x200000), # [sec],
|
188
|
+
402 => 4,
|
189
|
+
403 => invalidate.call(unum_gen.call(6), 0), # [dB-Hz],
|
149
190
|
404 => invalidate.call(num_gen.call(15, Rational(1, 10000)), 0x4000), # [m/s]
|
150
191
|
405 => invalidate.call(num_gen.call(20, Rational(1, 1000 << 29)), 0x80000), # [sec]
|
151
192
|
406 => invalidate.call(num_gen.call(24, Rational(1, 1000 << 31)), 0x800000), # [sec]
|
152
193
|
407 => 10,
|
153
|
-
408 => unum_gen.call(10, Rational(1, 1 << 4)), # [dB-Hz]
|
194
|
+
408 => invalidate.call(unum_gen.call(10, Rational(1, 1 << 4)), 0), # [dB-Hz]
|
154
195
|
409 => 3,
|
155
196
|
411 => 2,
|
156
197
|
412 => 2,
|
@@ -171,6 +212,20 @@ class RTCM3
|
|
171
212
|
src = (src.to_a rescue [src]).flatten
|
172
213
|
(dst.to_a rescue ([dst] * src.size)).flatten.zip(src).each{|i, j| df[i] = df[j]}
|
173
214
|
}
|
215
|
+
df.merge!({
|
216
|
+
:SBAS_prn => [6, proc{|v| v + 120}],
|
217
|
+
:SBAS_iodn => 8,
|
218
|
+
:SBAS_tod => num_gen.call(13, 1 << 4),
|
219
|
+
:SBAS_ura => df[77],
|
220
|
+
:SBAS_xy => num_gen.call(30, Rational(8, 100)),
|
221
|
+
:SBAS_z => num_gen.call(25, Rational(4, 10)),
|
222
|
+
:SBAS_dxy => num_gen.call(17, Rational(1, 1600)),
|
223
|
+
:SBAS_dz => num_gen.call(18, Rational(1, 250)),
|
224
|
+
:SBAS_ddxy => num_gen.call(10, Rational(1, 80000)),
|
225
|
+
:SBAS_ddz => num_gen.call(10, Rational(1, 16000)),
|
226
|
+
:SBAS_agf0 => num_gen.call(12, Rational(1, 1 << 31)),
|
227
|
+
:SBAS_agf1 => num_gen.call(8, Rational(1, 1 << 40)),
|
228
|
+
})
|
174
229
|
df.define_singleton_method(:generate_prop){|idx_list|
|
175
230
|
hash = Hash[*([:bits, :op].collect.with_index{|k, i|
|
176
231
|
[k, idx_list.collect{|idx, *args|
|
@@ -180,21 +235,81 @@ class RTCM3
|
|
180
235
|
[prop].flatten(1)[i]
|
181
236
|
}]
|
182
237
|
}.flatten(1))].merge({:df => idx_list})
|
183
|
-
hash[:bits_total] = hash[:bits].inject{|a, b| a + b}
|
238
|
+
hash[:bits_total] = hash[:bits].inject{|a, b| a + b} || 0
|
184
239
|
hash
|
185
240
|
}
|
186
241
|
df
|
187
242
|
}.call
|
188
243
|
MessageType = Hash[*({
|
244
|
+
1001..1004 => (2..8).to_a,
|
189
245
|
1005 => [2, 3, 21, 22, 23, 24, 141, 25, 142, [1, 1], 26, 364, 27],
|
246
|
+
1009..1012 => [2, 3, 34, 5, 35, 36, 37],
|
247
|
+
1013 => [2, 3, 51, 52, 53, 54],
|
190
248
|
1019 => [2, 9, (76..79).to_a, 71, (81..103).to_a, 137].flatten, # 488 bits @see Table 3.5-21
|
191
249
|
1020 => [2, 38, 40, (104..136).to_a].flatten, # 360 bits @see Table 3.5-21
|
250
|
+
1043 => [2] + [:prn, :iodn, :tod, :ura,
|
251
|
+
[:xy] * 2, :z, [:dxy] * 2, :dz, [:ddxy] * 2, :ddz,
|
252
|
+
:agf0, :agf1].flatten.collect{|k| "SBAS_#{k}".to_sym}, # @see BNC Ntrip client RTCM3Decorder.cpp
|
192
253
|
1044 => [2, (429..457).to_a].flatten, # 485 bits
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
254
|
+
1070..1229 => [2, [:uint, 12], [:uint, 30], 393], # 55 bits part of messages will be overwritten
|
255
|
+
1071..1077 => [2, 3, 4, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits @see Table 3.5-78
|
256
|
+
1081..1087 => [2, 3, 416, 34, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits @see Table 3.5-93
|
257
|
+
1091..1097 => [2, 3, 248, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits @see Table 3.5-98
|
258
|
+
1101..1107 => [2, 3, 4, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits
|
259
|
+
1111..1117 => [2, 3, 4, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits
|
260
|
+
1121..1127 => [2, 3, 4, 393, 409, [1, 7], 411, 412, 417, 418, 394, 395], # 169 bits
|
261
|
+
}.collect{|mt_list, df_list|
|
262
|
+
(mt_list.to_a rescue [mt_list]).collect{|mt|
|
263
|
+
[mt, DataFrame.generate_prop(df_list)]
|
264
|
+
}
|
265
|
+
}.flatten(2))]
|
266
|
+
module GPS_Observation
|
267
|
+
def ranges
|
268
|
+
res = {
|
269
|
+
:sat => select{|v, df| df == 9}.transpose[0],
|
270
|
+
:pseudo_range_rem => select{|v, df| df == 11}.transpose[0],
|
271
|
+
}
|
272
|
+
add_proc = proc{|k, df, base|
|
273
|
+
values = select{|v, df_| df_ == df}
|
274
|
+
next if values.empty?
|
275
|
+
res[k] = values.transpose[0]
|
276
|
+
res[k] = res[k].zip(res[base]).collect{|a, b| (a + b) rescue nil} if base
|
277
|
+
}
|
278
|
+
add_proc.call(:pseudo_range, 14, :pseudo_range_rem)
|
279
|
+
suffix = res[:pseudo_range] ? "" : "_rem"
|
280
|
+
base = "pseudo_range#{suffix}".to_sym
|
281
|
+
add_proc.call("phase_range#{suffix}".to_sym, 12, base)
|
282
|
+
add_proc.call(:cn, 15)
|
283
|
+
add_proc.call("pseudo_range_L2#{suffix}".to_sym, 17, base)
|
284
|
+
add_proc.call("phase_range_L2#{suffix}".to_sym, 18, base)
|
285
|
+
add_proc.call(:cn_L2, 20)
|
286
|
+
res
|
287
|
+
end
|
288
|
+
end
|
289
|
+
module GLONASS_Observation
|
290
|
+
def ranges
|
291
|
+
res = {
|
292
|
+
:sat => select{|v, df| df == 38}.transpose[0],
|
293
|
+
:freq_ch => select{|v, df| df == 40}.transpose[0],
|
294
|
+
:pseudo_range_rem => select{|v, df| df == 41}.transpose[0],
|
295
|
+
}
|
296
|
+
add_proc = proc{|k, df, base|
|
297
|
+
values = select{|v, df_| df_ == df}
|
298
|
+
next if values.empty?
|
299
|
+
res[k] = values.transpose[0]
|
300
|
+
res[k] = res[k].zip(res[base]).collect{|a, b| (a + b) rescue nil} if base
|
301
|
+
}
|
302
|
+
add_proc.call(:pseudo_range, 44, :pseudo_range_rem)
|
303
|
+
suffix = res[:pseudo_range] ? "" : "_rem"
|
304
|
+
base = "pseudo_range#{suffix}".to_sym
|
305
|
+
add_proc.call("phase_range#{suffix}".to_sym, 42, base)
|
306
|
+
add_proc.call(:cn, 45)
|
307
|
+
add_proc.call("pseudo_range_L2#{suffix}".to_sym, 47, base)
|
308
|
+
add_proc.call("phase_range_L2#{suffix}".to_sym, 48, base)
|
309
|
+
add_proc.call(:cn_L2, 50)
|
310
|
+
res
|
311
|
+
end
|
312
|
+
end
|
198
313
|
module GPS_Ephemeris
|
199
314
|
KEY2IDX = {:svid => 1, :WN => 2, :URA => 3, :dot_i0 => 5, :iode => 6, :t_oc => 7,
|
200
315
|
:a_f2 => 8, :a_f1 => 9, :a_f0 => 10, :iodc => 11, :c_rs => 12, :delta_n => 13,
|
@@ -218,6 +333,17 @@ class RTCM3
|
|
218
333
|
res
|
219
334
|
end
|
220
335
|
end
|
336
|
+
module SBAS_Ephemeris
|
337
|
+
KEY2IDX = {:svid => 1, :iodn => 2, :tod => 3, :URA => 4,
|
338
|
+
:x => 5, :y => 6, :z => 7,
|
339
|
+
:dx => 8, :dy => 9, :dz => 10,
|
340
|
+
:ddx => 11, :ddy => 12, :ddz => 13,
|
341
|
+
:a_Gf0 => 14, :a_Gf1 => 15}
|
342
|
+
def params
|
343
|
+
# TODO WN is required to provide
|
344
|
+
Hash[*(KEY2IDX.collect{|k, i| [k, self[i][0]]}.flatten(1))]
|
345
|
+
end
|
346
|
+
end
|
221
347
|
module GLONASS_Ephemeris
|
222
348
|
def params
|
223
349
|
# TODO insufficient: :n => ?(String4); extra: :P3
|
@@ -259,30 +385,86 @@ class RTCM3
|
|
259
385
|
def more_data?
|
260
386
|
self.find{|v| v[1] == 393}[0] == 1
|
261
387
|
end
|
388
|
+
def property
|
389
|
+
idx_sat = self.find_index{|v| v[1] == 394}
|
390
|
+
{
|
391
|
+
:sats => self[idx_sat][0],
|
392
|
+
:cells => self[idx_sat + 2][0], # DF396
|
393
|
+
:header_items => idx_sat + 3,
|
394
|
+
}
|
395
|
+
end
|
262
396
|
end
|
263
|
-
module
|
397
|
+
module MSM
|
398
|
+
include MSM_Header
|
399
|
+
def ranges
|
400
|
+
{:sat_sig => property[:cells]} # expect to be overriden
|
401
|
+
end
|
264
402
|
SPEED_OF_LIGHT = 299_792_458
|
403
|
+
end
|
404
|
+
module MSM1_2_3
|
405
|
+
include MSM
|
265
406
|
def ranges
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
407
|
+
sats, cells, offset = property.values_at(:sats, :cells, :header_items)
|
408
|
+
nsat, ncell = [sats.size, cells.size]
|
409
|
+
res = {:sat_sig => cells}
|
410
|
+
range_rough = cells.collect{|sat, sig| # DF398
|
411
|
+
self[offset + sats.find_index(sat)][0]
|
412
|
+
}
|
413
|
+
add_proc = proc{|idx_cell|
|
414
|
+
values = self[offset + (nsat * 1) + (ncell * idx_cell), ncell]
|
415
|
+
next if values.empty?
|
416
|
+
k = {400 => :pseudo_range_rem, 401 => :phase_range_rem}[values[0][1]]
|
417
|
+
next unless k
|
418
|
+
res[k] = values.zip(range_rough).collect{|(v, df), v_base|
|
419
|
+
((v_base + v) * SPEED_OF_LIGHT) rescue nil
|
420
|
+
}
|
421
|
+
}
|
422
|
+
add_proc.call(0)
|
423
|
+
add_proc.call(1)
|
424
|
+
res
|
425
|
+
end
|
426
|
+
end
|
427
|
+
module MSM4_6
|
428
|
+
include MSM
|
429
|
+
def ranges
|
430
|
+
sats, cells, offset = property.values_at(:sats, :cells, :header_items)
|
431
|
+
nsat, ncell = [sats.size, cells.size]
|
432
|
+
range_rough = self[offset, nsat] # DF397
|
433
|
+
range_rough2 = self[offset + (nsat * 1), nsat] # DF398
|
434
|
+
range_fine = self[offset + (nsat * 2), ncell] # DF400/405
|
435
|
+
phase_fine = self[offset + (nsat * 2) + (ncell * 1), ncell] # DF401/406
|
436
|
+
cn = self[offset + (nsat * 2) + (ncell * 4), ncell] # DF403/408
|
437
|
+
Hash[*([:sat_sig, :pseudo_range, :phase_range, :cn].zip(
|
438
|
+
[cells] + cells.collect.with_index{|(sat, sig), i|
|
439
|
+
i2 = sats.find_index(sat)
|
440
|
+
rough_ms = (range_rough2[i2][0] + range_rough[i2][0]) rescue nil
|
441
|
+
[(((range_fine[i][0] + rough_ms) * SPEED_OF_LIGHT) rescue nil),
|
442
|
+
(((phase_fine[i][0] + rough_ms) * SPEED_OF_LIGHT) rescue nil),
|
443
|
+
cn[i][0]]
|
444
|
+
}.transpose).flatten(1))]
|
445
|
+
end
|
446
|
+
end
|
447
|
+
module MSM5_7
|
448
|
+
include MSM
|
449
|
+
def ranges
|
450
|
+
sats, cells, offset = property.values_at(:sats, :cells, :header_items)
|
451
|
+
nsat, ncell = [sats.size, cells.size]
|
272
452
|
range_rough = self[offset, nsat] # DF397
|
273
453
|
range_rough2 = self[offset + (nsat * 2), nsat] # DF398
|
274
454
|
delta_rough = self[offset + (nsat * 3), nsat] # DF399
|
275
|
-
range_fine = self[offset + (nsat * 4), ncell] #
|
276
|
-
phase_fine = self[offset + (nsat * 4) + (ncell * 1), ncell] #
|
455
|
+
range_fine = self[offset + (nsat * 4), ncell] # DF400/405
|
456
|
+
phase_fine = self[offset + (nsat * 4) + (ncell * 1), ncell] # DF401/406
|
457
|
+
cn = self[offset + (nsat * 4) + (ncell * 4), ncell] # DF403/408
|
277
458
|
delta_fine = self[offset + (nsat * 4) + (ncell * 5), ncell] # DF404
|
278
|
-
Hash[*([:pseudo_range, :phase_range, :phase_range_rate, :
|
279
|
-
cells.collect.with_index{|(sat, sig), i|
|
459
|
+
Hash[*([:sat_sig, :pseudo_range, :phase_range, :phase_range_rate, :cn].zip(
|
460
|
+
[cells] + cells.collect.with_index{|(sat, sig), i|
|
280
461
|
i2 = sats.find_index(sat)
|
281
|
-
|
462
|
+
rough_ms = (range_rough2[i2][0] + range_rough[i2][0]) rescue nil
|
282
463
|
[(((range_fine[i][0] + rough_ms) * SPEED_OF_LIGHT) rescue nil),
|
283
464
|
(((phase_fine[i][0] + rough_ms) * SPEED_OF_LIGHT) rescue nil),
|
284
|
-
((delta_fine[i][0] + delta_rough[i2][0]) rescue nil)
|
285
|
-
|
465
|
+
((delta_fine[i][0] + delta_rough[i2][0]) rescue nil),
|
466
|
+
cn[i][0]]
|
467
|
+
}.transpose).flatten(1))]
|
286
468
|
end
|
287
469
|
end
|
288
470
|
def parse
|
@@ -298,28 +480,77 @@ class RTCM3
|
|
298
480
|
}
|
299
481
|
add_proc.call(mt)
|
300
482
|
case msg_num
|
483
|
+
when 1001..1004
|
484
|
+
nsat = values[4]
|
485
|
+
offset = 24 + mt[:bits_total]
|
486
|
+
add_proc.call(DataFrame.generate_prop(([{
|
487
|
+
1001 => (9..13).to_a,
|
488
|
+
1002 => (9..15).to_a,
|
489
|
+
1003 => (9..13).to_a + (16..19).to_a,
|
490
|
+
1004 => (9..20).to_a,
|
491
|
+
}[msg_num]] * nsat).flatten), offset)
|
492
|
+
attributes << GPS_Observation
|
493
|
+
when 1009..1012
|
494
|
+
nsat = values[4]
|
495
|
+
offset = 24 + mt[:bits_total]
|
496
|
+
add_proc.call(DataFrame.generate_prop(([{
|
497
|
+
1009 => (38..43).to_a,
|
498
|
+
1010 => (38..45).to_a,
|
499
|
+
1011 => (38..43).to_a + (46..49).to_a,
|
500
|
+
1012 => (38..50).to_a,
|
501
|
+
}[msg_num]] * nsat).flatten), offset)
|
502
|
+
attributes << GLONASS_Observation
|
503
|
+
when 1013
|
504
|
+
add_proc.call(DataFrame.generate_prop(
|
505
|
+
((55..57).to_a * values[4]).flatten), 24 + mt[:bits_total])
|
301
506
|
when 1019
|
302
507
|
attributes << GPS_Ephemeris
|
303
508
|
when 1020
|
304
509
|
attributes << GLONASS_Ephemeris
|
510
|
+
when 1043
|
511
|
+
attributes << SBAS_Ephemeris
|
305
512
|
when 1044
|
306
513
|
attributes << QZSS_Ephemeris
|
307
|
-
when 1077, 1087, 1097, 1117
|
308
|
-
#
|
309
|
-
attributes << MSM7
|
514
|
+
when 1071..1077, 1081..1087, 1091..1097, 1101..1107, 1111..1117, 1121..1127
|
515
|
+
# 107X(GPS), 108X(GLONASS), 109X(GALILEO), 110X(SBAS), 111X(QZSS), 112X(Beidou)
|
310
516
|
nsat, nsig = [-2, -1].collect{|i| values[i].size}
|
311
517
|
offset = 24 + mt[:bits_total]
|
312
518
|
df396 = DataFrame.generate_prop([[396, values[-2], values[-1]]])
|
313
519
|
add_proc.call(df396, offset)
|
314
520
|
ncell = values[-1].size
|
315
521
|
offset += df396[:bits_total]
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
522
|
+
msm_proc = proc{|sat_data, signal_data|
|
523
|
+
msm_sat = DataFrame.generate_prop(([sat_data] * nsat).transpose.flatten(1))
|
524
|
+
add_proc.call(msm_sat, offset)
|
525
|
+
offset += msm_sat[:bits_total]
|
526
|
+
msm_sig = DataFrame.generate_prop(([signal_data] * ncell).transpose.flatten(1))
|
527
|
+
add_proc.call(msm_sig, offset)
|
528
|
+
}
|
529
|
+
case msg_num % 10
|
530
|
+
when 1
|
531
|
+
attributes << MSM1_2_3
|
532
|
+
msm_proc.call([398], [400])
|
533
|
+
when 2
|
534
|
+
attributes << MSM1_2_3
|
535
|
+
msm_proc.call([398], [401, 402, 420])
|
536
|
+
when 3
|
537
|
+
attributes << MSM1_2_3
|
538
|
+
msm_proc.call([398], [400, 401, 402, 420])
|
539
|
+
when 4
|
540
|
+
attributes << MSM4_6
|
541
|
+
msm_proc.call([397, 398], [400, 401, 402, 420, 403])
|
542
|
+
when 5
|
543
|
+
attributes << MSM5_7
|
544
|
+
msm_proc.call([397, [:uint, 4], 398, 399], [400, 401, 402, 420, 403, 404])
|
545
|
+
when 6
|
546
|
+
attributes << MSM4_6
|
547
|
+
msm_proc.call([397, 398], [405, 406, 407, 420, 408])
|
548
|
+
when 7
|
549
|
+
attributes << MSM5_7
|
550
|
+
msm_proc.call([397, [:uint, 4], 398, 399], [405, 406, 407, 420, 408, 404])
|
551
|
+
else
|
552
|
+
attributes << MSM # for #range
|
553
|
+
end
|
323
554
|
end
|
324
555
|
attributes << MSM_Header if (1070..1229).include?(msg_num)
|
325
556
|
res = values.zip(df_list)
|
data/lib/gps_pvt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gps_pvt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fenrir(M.Naruoka)
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|