gps_pvt 0.9.4 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -7
- data/Rakefile +18 -1
- data/exe/gps2ubx +12 -5
- data/exe/gps_pvt +7 -2
- data/ext/gps_pvt/GPS/GPS_wrap.cxx +837 -52
- data/ext/ninja-scan-light/tool/navigation/GLONASS_Solver.h +11 -3
- data/ext/ninja-scan-light/tool/navigation/GPS.h +2 -1
- data/ext/ninja-scan-light/tool/navigation/GPS_Solver.h +20 -16
- data/ext/ninja-scan-light/tool/navigation/GPS_Solver_Base.h +84 -46
- data/ext/ninja-scan-light/tool/navigation/GPS_Solver_RAIM.h +2 -1
- data/ext/ninja-scan-light/tool/navigation/SBAS_Solver.h +10 -2
- data/ext/ninja-scan-light/tool/swig/GPS.i +76 -5
- data/ext/ninja-scan-light/tool/swig/spec/GPS_spec.rb +7 -7
- data/gps_pvt.gemspec +3 -2
- data/lib/gps_pvt/asn1/asn1.rb +888 -0
- data/lib/gps_pvt/asn1/asn1.y +903 -0
- data/lib/gps_pvt/asn1/per.rb +182 -0
- data/lib/gps_pvt/receiver/agps.rb +31 -0
- data/lib/gps_pvt/receiver/extension.rb +21 -0
- data/lib/gps_pvt/receiver/rtcm3.rb +2 -1
- data/lib/gps_pvt/receiver.rb +28 -20
- data/lib/gps_pvt/rtcm3.rb +17 -32
- data/lib/gps_pvt/supl.rb +567 -0
- data/lib/gps_pvt/ubx.rb +15 -0
- data/lib/gps_pvt/upl/LPP-V17_5_0-Release17.asn +6441 -0
- data/lib/gps_pvt/upl/RRLP-V17_0_0-Release17.asn +2780 -0
- data/lib/gps_pvt/upl/ULP-V2_0_6-20200720-D.asn +2185 -0
- data/lib/gps_pvt/upl/upl.json.gz +0 -0
- data/lib/gps_pvt/upl/upl.rb +99 -0
- data/lib/gps_pvt/util.rb +1 -0
- data/lib/gps_pvt/version.rb +1 -1
- metadata +26 -2
Binary file
|
@@ -0,0 +1,99 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'zlib'
|
5
|
+
require_relative '../asn1/asn1'
|
6
|
+
|
7
|
+
ASN1 = GPS_PVT::ASN1
|
8
|
+
|
9
|
+
upl = ASN1::resolve_tree(JSON::parse(
|
10
|
+
Zlib::GzipReader::open(File::join(File::dirname(__FILE__), 'upl.json.gz')).read,
|
11
|
+
{:symbolize_names => true}))
|
12
|
+
|
13
|
+
# RRLP payload conversion
|
14
|
+
ASN1::dig(upl, :ULP, :"ULP-PDU", :message, :msSUPLPOS, :posPayLoad, :rrlpPayload)[:type][1].merge!({
|
15
|
+
:hook_encode => proc{|data|
|
16
|
+
next data unless data.kind_of?(Hash)
|
17
|
+
ASN1::encode_per(upl[:"RRLP-Messages"][:PDU], data).scan(/.{1,8}/).tap{|buf|
|
18
|
+
buf[-1] += "0" * (8 - buf[-1].length)
|
19
|
+
}.collect{|str| str.to_i(2)}
|
20
|
+
},
|
21
|
+
:hook_decode => proc{|data|
|
22
|
+
data.define_singleton_method(:decode){
|
23
|
+
ASN1::decode_per(upl[:"RRLP-Messages"][:PDU], self.collect{|v| "%08b" % [v]}.join)
|
24
|
+
}
|
25
|
+
data
|
26
|
+
},
|
27
|
+
})
|
28
|
+
|
29
|
+
# LPP payload conversion
|
30
|
+
ASN1::dig(upl, :ULP, :"ULP-PDU", :message, :msSUPLPOS, :posPayLoad, :"ver2-PosPayLoad-extension", :lPPPayload)[:type][1].merge!({
|
31
|
+
:hook_encode => proc{|data|
|
32
|
+
next data unless data.kind_of?(Hash)
|
33
|
+
ASN1::encode_per(upl[:"LPP-PDU-Definitions"][:"LPP-Message"], data).scan(/.{1,8}/).tap{|buf|
|
34
|
+
buf[-1] += "0" * (8 - buf[-1].length)
|
35
|
+
}.collect{|str| str.to_i(2)}.scan(/.{1,60000}/)
|
36
|
+
},
|
37
|
+
:hook_decode => proc{|data|
|
38
|
+
data.define_singleton_method(:decode){
|
39
|
+
ASN1::decode_per(upl[:"LPP-PDU-Definitions"][:"LPP-Message"], self.flatten.collect{|v| "%08b" % [v]}.join)
|
40
|
+
}
|
41
|
+
data
|
42
|
+
},
|
43
|
+
})
|
44
|
+
|
45
|
+
# BCD String
|
46
|
+
[:msisdn, :mdn, :imsi, :"ver2-imei"].each{|k|
|
47
|
+
elm = ASN1::dig(upl, :ULP, :"ULP-PDU", :sessionID, :setSessionID, :setId, k)
|
48
|
+
next unless elm
|
49
|
+
elm[:type][1].merge!({
|
50
|
+
:hook_encode => proc{|data|
|
51
|
+
next data unless data.kind_of?(String)
|
52
|
+
(("0" * (16 - data.size)) + data).scan(/\d{2}/).collect{|v| v.to_i(16)}
|
53
|
+
},
|
54
|
+
:hook_decode => proc{|data|
|
55
|
+
data.collect{|v| "%02X"%[v]}.join
|
56
|
+
},
|
57
|
+
})
|
58
|
+
}
|
59
|
+
|
60
|
+
=begin
|
61
|
+
UPL: User Plane Location
|
62
|
+
ULP: UserPlane Location Protocol
|
63
|
+
=end
|
64
|
+
|
65
|
+
GPS_PVT::UPL = Module::new{
|
66
|
+
define_method(:generate_skeleton){|k_cmd, *args|
|
67
|
+
opts = args[0] || {}
|
68
|
+
ver = case [2, 0xFF, 0xFF].zip([opts[:version]].flatten || []) \
|
69
|
+
.inject(0){|sum, (v1, v2)| (sum * 0x100) + (v2 || v1)}
|
70
|
+
when 0x020006..0x02FFFF; [2, 0, 6]
|
71
|
+
#when 0x020000..0x02FFFF; [2, 0, 0]
|
72
|
+
else; raise
|
73
|
+
end
|
74
|
+
res = ASN1::generate_skeleton(upl[:ULP][:"ULP-PDU"])
|
75
|
+
[:maj, :min, :servind].zip(ver).each{|k, v|
|
76
|
+
res[:version][k] = v
|
77
|
+
}
|
78
|
+
res[:message].reject!{|k, v|
|
79
|
+
"ms#{k_cmd}".to_sym != k
|
80
|
+
}
|
81
|
+
res.define_singleton_method(:all_keys){
|
82
|
+
(iter = proc{|hash|
|
83
|
+
hash.collect{|k, v|
|
84
|
+
v.kind_of?(Hash) ? {k => iter.call(v)} : k
|
85
|
+
}
|
86
|
+
}).call(self)
|
87
|
+
}
|
88
|
+
res
|
89
|
+
}
|
90
|
+
define_method(:encode){|cmd|
|
91
|
+
buf = ASN1::encode_per(upl[:ULP][:"ULP-PDU"], cmd).scan(/.{1,8}/)
|
92
|
+
buf[-1] += "0" * (8 - buf[-1].length)
|
93
|
+
(buf.length.divmod(1 << 8) + buf[2..-1].collect{|str| str.to_i(2)}).pack("C*")
|
94
|
+
}
|
95
|
+
define_method(:decode){|str|
|
96
|
+
ASN1::decode_per(upl[:ULP][:"ULP-PDU"], str.unpack("C*").collect{|v| "%08b" % [v]}.join)
|
97
|
+
}
|
98
|
+
module_function(:generate_skeleton, :encode, :decode)
|
99
|
+
}
|
data/lib/gps_pvt/util.rb
CHANGED
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.
|
4
|
+
version: 0.10.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:
|
11
|
+
date: 2024-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: racc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: github_changelog_generator
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,12 +162,22 @@ files:
|
|
148
162
|
- gps_pvt.gemspec
|
149
163
|
- gps_pvt.rbs
|
150
164
|
- lib/gps_pvt.rb
|
165
|
+
- lib/gps_pvt/asn1/asn1.rb
|
166
|
+
- lib/gps_pvt/asn1/asn1.y
|
167
|
+
- lib/gps_pvt/asn1/per.rb
|
151
168
|
- lib/gps_pvt/ntrip.rb
|
152
169
|
- lib/gps_pvt/receiver.rb
|
170
|
+
- lib/gps_pvt/receiver/agps.rb
|
153
171
|
- lib/gps_pvt/receiver/extension.rb
|
154
172
|
- lib/gps_pvt/receiver/rtcm3.rb
|
155
173
|
- lib/gps_pvt/rtcm3.rb
|
174
|
+
- lib/gps_pvt/supl.rb
|
156
175
|
- lib/gps_pvt/ubx.rb
|
176
|
+
- lib/gps_pvt/upl/LPP-V17_5_0-Release17.asn
|
177
|
+
- lib/gps_pvt/upl/RRLP-V17_0_0-Release17.asn
|
178
|
+
- lib/gps_pvt/upl/ULP-V2_0_6-20200720-D.asn
|
179
|
+
- lib/gps_pvt/upl/upl.json.gz
|
180
|
+
- lib/gps_pvt/upl/upl.rb
|
157
181
|
- lib/gps_pvt/util.rb
|
158
182
|
- lib/gps_pvt/version.rb
|
159
183
|
homepage: https://github.com/fenrir-naru/gps_pvt
|