gps_pvt 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/gps2ubx +35 -20
- data/exe/gps_get +15 -24
- data/exe/gps_pvt +10 -14
- data/lib/gps_pvt/receiver/rtcm3.rb +1 -1
- data/lib/gps_pvt/receiver.rb +1 -1
- data/lib/gps_pvt/util.rb +20 -10
- data/lib/gps_pvt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a75bed6b9453e7fe5b435eb2c10bd82e7c736654b6d34461368b79274ee223e3
|
4
|
+
data.tar.gz: 55577769f09988ce63809f52b14a82bfa7fd958f68547f36263647b147559831
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01c350f1e321119d0b4693a9b96bc99003b92e37783cdc53f0779e02111ec880d2b26e30e1f1ccec81faaaca16d730b8e17a5d24eb9bacd2934fe0ffaf083284
|
7
|
+
data.tar.gz: 6cab5c290099b0dd7604940822c9399dc93d7656651fe4c38003202745c8b5f561c68cb452ece7c2d9b35740d7621b47e809341cec2228d3551e3238e2648c23
|
data/exe/gps2ubx
CHANGED
@@ -31,7 +31,7 @@ misc_options = {
|
|
31
31
|
files = ARGV.collect{|arg|
|
32
32
|
next [arg, nil] unless arg =~ /^--([^=]+)=?/
|
33
33
|
k, v = [$1.downcase.to_sym, $']
|
34
|
-
next [v, k] if [:rinex_nav, :rinex_obs].include?(k) # file type
|
34
|
+
next [v, k] if [:rinex_nav, :rinex_obs, :ubx, :rtcm3].include?(k) # file type
|
35
35
|
options << [$1.to_sym, $']
|
36
36
|
nil
|
37
37
|
}.compact
|
@@ -43,14 +43,10 @@ files.collect!{|fname, ftype|
|
|
43
43
|
when /\.\d{2}o(?:\.gz)?$/; :rinex_obs
|
44
44
|
when /\.ubx$/; :ubx
|
45
45
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
next uri
|
51
|
-
end
|
52
|
-
raise "File not found: #{fname}"
|
53
|
-
}.call
|
46
|
+
if (!(uri = URI::parse(fname)).instance_of?(URI::Generic) rescue false) then
|
47
|
+
ftype ||= uri.read_format if uri.instance_of?(URI::Ntrip)
|
48
|
+
fname = uri
|
49
|
+
end
|
54
50
|
raise "Format cannot be guessed, use --(format, ex. rinex_obs)=#{fname}" unless ftype
|
55
51
|
[fname, ftype]
|
56
52
|
}
|
@@ -70,7 +66,7 @@ options.reject!{|opt|
|
|
70
66
|
|
71
67
|
rcv = GPS_PVT::Receiver::new(options)
|
72
68
|
|
73
|
-
obs =
|
69
|
+
obs = Queue::new
|
74
70
|
rcv.define_singleton_method(:run){|meas, t_meas, *args|
|
75
71
|
obs << [t_meas, meas]
|
76
72
|
}
|
@@ -98,15 +94,23 @@ files.each{|fname, ftype|
|
|
98
94
|
}
|
99
95
|
|
100
96
|
# other files
|
101
|
-
files.
|
102
|
-
case ftype
|
103
|
-
when :ubx; rcv.parse_ubx(fname){}
|
104
|
-
when :rinex_obs; rcv.parse_rinex_obs(fname){}
|
105
|
-
when :rtcm3; rcv.parse_rtcm3(fname){}
|
97
|
+
threads = files.collect{|fname, ftype|
|
98
|
+
task = case ftype
|
99
|
+
when :ubx; proc{rcv.parse_ubx(fname){}}
|
100
|
+
when :rinex_obs; proc{rcv.parse_rinex_obs(fname){}}
|
101
|
+
when :rtcm3; proc{rcv.parse_rtcm3(fname){}}
|
106
102
|
end
|
107
|
-
|
103
|
+
case fname
|
104
|
+
when URI::Ntrip; Thread::new(&task)
|
105
|
+
else; task.call; nil
|
106
|
+
end
|
107
|
+
}.compact
|
108
108
|
|
109
|
-
obs
|
109
|
+
obs = proc{
|
110
|
+
tmp = []
|
111
|
+
tmp << obs.pop until obs.empty?
|
112
|
+
tmp
|
113
|
+
}.call.sort!{|a, b| b[0] <=> a[0]} if threads.empty? # Sort by measurement time
|
110
114
|
|
111
115
|
# Time packet for solution of leap seconds
|
112
116
|
gen_gpstime = proc{
|
@@ -368,7 +372,18 @@ gen_list << gen_gpstime unless misc_options[:ubx_rawx]
|
|
368
372
|
gen_list << (misc_options[:ubx_rawx] ? gen_sfrbx : gen_sfrb) if misc_options[:broadcast_data]
|
369
373
|
gen_list << (misc_options[:ubx_rawx] ? gen_rawx : gen_raw)
|
370
374
|
STDOUT.binmode
|
371
|
-
|
372
|
-
|
373
|
-
|
375
|
+
|
376
|
+
task_dump = proc{
|
377
|
+
until obs.empty? do
|
378
|
+
t_meas, meas = obs.pop
|
379
|
+
meas2 = meas.to_hash
|
380
|
+
gen_list.each{|gen| print gen.call(t_meas, meas2)}
|
381
|
+
end
|
374
382
|
}
|
383
|
+
if threads.empty? then
|
384
|
+
task_dump.call
|
385
|
+
else
|
386
|
+
(threads << Thread::new{loop{
|
387
|
+
task_dump.call
|
388
|
+
}}).each{|th| th.join}
|
389
|
+
end
|
data/exe/gps_get
CHANGED
@@ -20,30 +20,21 @@ files = ARGV.collect{|arg|
|
|
20
20
|
nil
|
21
21
|
}.compact
|
22
22
|
|
23
|
-
spec2io = proc{
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
next STDIN if spec == '-'
|
39
|
-
next open(GPS_PVT::Util::get_txt(spec), 'r') if File::exist?(spec)
|
40
|
-
raise "File not found: #{spec}"
|
41
|
-
else
|
42
|
-
next STDOUT if spec == '-'
|
43
|
-
open(spec, 'a+')
|
44
|
-
end
|
45
|
-
}
|
46
|
-
}.call
|
23
|
+
spec2io = proc{|spec, mode_r|
|
24
|
+
mode_r = ((nil == mode_r) || mode_r)
|
25
|
+
is_stream = false
|
26
|
+
if (!(uri = URI::parse(spec)).instance_of?(URI::Generic) rescue false) then
|
27
|
+
spec = uri
|
28
|
+
is_stream = true if uri.kind_of?(URI::Ntrip)
|
29
|
+
else
|
30
|
+
is_stream = GPS_PVT::Util::special_stream?(spec)
|
31
|
+
end
|
32
|
+
if is_stream || (!mode_r) then
|
33
|
+
GPS_PVT::Util::open(spec, mode_r ? 'r' : 'a+')
|
34
|
+
else
|
35
|
+
open(GPS_PVT::Util::get_txt(spec), 'r')
|
36
|
+
end
|
37
|
+
}
|
47
38
|
|
48
39
|
STDIN.binmode
|
49
40
|
STDOUT.binmode
|
data/exe/gps_pvt
CHANGED
@@ -77,15 +77,10 @@ files.collect!{|fname, ftype|
|
|
77
77
|
when /\.atx(?:\.Z)?$/; :antex
|
78
78
|
when /\.clk$/; :rinex_clk
|
79
79
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
ftype ||= uri.read_format if uri.instance_of?(URI::Ntrip)
|
85
|
-
next uri
|
86
|
-
end
|
87
|
-
raise "File not found: #{fname}"
|
88
|
-
}.call
|
80
|
+
if (!(uri = URI::parse(fname)).instance_of?(URI::Generic) rescue false) then
|
81
|
+
ftype ||= uri.read_format if uri.instance_of?(URI::Ntrip)
|
82
|
+
fname = uri
|
83
|
+
end
|
89
84
|
raise "Format cannot be guessed, use --(format, ex. rinex_nav)=#{fname}" unless ftype
|
90
85
|
[fname, ftype]
|
91
86
|
}
|
@@ -137,10 +132,11 @@ files.each{|fname, ftype|
|
|
137
132
|
}
|
138
133
|
|
139
134
|
# other files
|
140
|
-
files.
|
135
|
+
files.collect{|fname, ftype|
|
141
136
|
case ftype
|
142
|
-
when :ubx; rcv.parse_ubx(fname)
|
143
|
-
when :rinex_obs; rcv.parse_rinex_obs(fname)
|
144
|
-
when :rtcm3; rcv.parse_rtcm3(fname)
|
137
|
+
when :ubx; Thread::new{rcv.parse_ubx(fname)}
|
138
|
+
when :rinex_obs; Thread::new{rcv.parse_rinex_obs(fname)}
|
139
|
+
when :rtcm3; Thread::new{rcv.parse_rtcm3(fname)}
|
140
|
+
else; nil
|
145
141
|
end
|
146
|
-
}
|
142
|
+
}.compact.each{|th| th.join}
|
@@ -7,7 +7,7 @@ class Receiver
|
|
7
7
|
def parse_rtcm3(src, opt = {}, &b)
|
8
8
|
$stderr.print "Reading RTCM3 stream (%s) "%[src]
|
9
9
|
require_relative '../rtcm3'
|
10
|
-
src_io = open(src)
|
10
|
+
src_io = Util::open(src)
|
11
11
|
rtcm3 = GPS_PVT::RTCM3::new(src_io)
|
12
12
|
ref_time = case (ref_time = opt[:ref_time])
|
13
13
|
when GPS::Time;
|
data/lib/gps_pvt/receiver.rb
CHANGED
@@ -460,7 +460,7 @@ class Receiver
|
|
460
460
|
$stderr.print "Reading UBX file (%s) "%[ubx_fname]
|
461
461
|
require_relative 'ubx'
|
462
462
|
|
463
|
-
ubx = UBX::new(open(ubx_fname))
|
463
|
+
ubx = UBX::new(Util::open(ubx_fname))
|
464
464
|
ubx_kind = Hash::new(0)
|
465
465
|
|
466
466
|
after_run = b || proc{|pvt| puts pvt.to_s if pvt}
|
data/lib/gps_pvt/util.rb
CHANGED
@@ -23,14 +23,6 @@ proc{
|
|
23
23
|
}
|
24
24
|
def eof?; false; end
|
25
25
|
}
|
26
|
-
module Kernel
|
27
|
-
open_orig = instance_method(:open)
|
28
|
-
define_method(:open){|*args, &b|
|
29
|
-
return open_orig.bind(self).call(*args, &b) unless Serial::SPEC =~ args[0]
|
30
|
-
Serial::new($1, $2 ? $2.to_i : 115200)
|
31
|
-
}
|
32
|
-
module_function(:open)
|
33
|
-
end
|
34
26
|
}.call if require 'rubyserial'
|
35
27
|
|
36
28
|
require 'open-uri'
|
@@ -41,7 +33,7 @@ class URI::Ntrip
|
|
41
33
|
pnt_list = self.read_source_table(options).mount_points
|
42
34
|
case pnt_list[self.mount_point][:format]
|
43
35
|
when /u-?b(?:lo)?x/i; :ubx
|
44
|
-
when /RTCM 3/i; :rtcm3
|
36
|
+
when /RTCM ?3/i; :rtcm3
|
45
37
|
else; nil
|
46
38
|
end
|
47
39
|
end
|
@@ -50,6 +42,24 @@ end
|
|
50
42
|
module GPS_PVT
|
51
43
|
module Util
|
52
44
|
class << self
|
45
|
+
def special_stream?(spec)
|
46
|
+
['-', (Serial::SPEC rescue nil)].compact.any?{|v| v === spec}
|
47
|
+
end
|
48
|
+
def open(*args, &b)
|
49
|
+
return args[0].open(*args[1..-1], &b) if args[0].respond_to?(:open)
|
50
|
+
case args[0].to_str
|
51
|
+
when (Serial::SPEC rescue nil)
|
52
|
+
return ((@serial_ports ||= {})[$1] ||= Serial::new($1, $2 ? $2.to_i : 115200))
|
53
|
+
when '-'
|
54
|
+
if (/^[wa]/ === args[1]) \
|
55
|
+
|| (args[1].kind_of?(Integer) && ((File::Constants::WRONLY & args[1]) > 0)) then
|
56
|
+
return STDOUT
|
57
|
+
else
|
58
|
+
return STDIN
|
59
|
+
end
|
60
|
+
end rescue nil
|
61
|
+
super
|
62
|
+
end
|
53
63
|
def inflate(src, type = :gz)
|
54
64
|
case type
|
55
65
|
when :gz
|
@@ -66,7 +76,7 @@ module Util
|
|
66
76
|
end
|
67
77
|
def get_txt(fname_or_uri)
|
68
78
|
is_uri = fname_or_uri.kind_of?(URI)
|
69
|
-
(
|
79
|
+
open(fname_or_uri){|src|
|
70
80
|
compressed = proc{
|
71
81
|
case src.content_type
|
72
82
|
when /gzip/; next :gz
|
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.1
|
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-01-
|
11
|
+
date: 2023-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|