gps_pvt 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|