gps_pvt 0.1.1 → 0.1.2

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.
data/lib/gps_pvt/ubx.rb CHANGED
@@ -1,148 +1,148 @@
1
- # U-blox file utilities
2
- # The origin is ninja-scan-light/tool/misc/ubx.rb
3
-
4
- # Copyright (c) 2016, M.Naruoka (fenrir)
5
- # All rights reserved.
6
- #
7
- # Redistribution and use in source and binary forms, with or without modification,
8
- # are permitted provided that the following conditions are met:
9
- #
10
- # - Redistributions of source code must retain the above copyright notice,
11
- # this list of conditions and the following disclaimer.
12
- # - Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
15
- # - Neither the name of the naruoka.org nor the names of its contributors
16
- # may be used to endorse or promote products derived from this software
17
- # without specific prior written permission.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
- # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
23
- # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
- # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
- # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
- # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
- # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30
- # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
-
32
- module GPS_PVT
33
- class UBX
34
- def initialize(io)
35
- @io = io
36
- @buf = []
37
- end
38
- def UBX.checksum(packet, range = 2..-3)
39
- ck_a, ck_b = [0, 0]
40
- packet[range].each{|b|
41
- ck_a += b
42
- ck_b += ck_a
43
- }
44
- ck_a &= 0xFF
45
- ck_b &= 0xFF
46
- [ck_a, ck_b]
47
- end
48
- def UBX.update_checksum(packet)
49
- packet[-2..-1] = checksum(packet)
50
- packet
51
- end
52
- def UBX.update_size(packet, size = nil)
53
- size ||= packet.size - 8
54
- size = size.divmod(0x100)
55
- packet[4] = size[1]
56
- packet[5] = size[0]
57
- packet
58
- end
59
- def UBX.update(packet)
60
- [:update_size, :update_checksum].inject(packet){|arg, f|
61
- UBX.send(f, arg)
62
- }
63
- end
64
- def read_packet
65
- while !@io.eof?
66
- if @buf.size < 8 then
67
- @buf += @io.read(8 - @buf.size).unpack('C*')
68
- return nil if @buf.size < 8
69
- end
70
-
71
- if @buf[0] != 0xB5 then
72
- @buf.shift
73
- next
74
- elsif @buf[1] != 0x62 then
75
- @buf = @buf[2..-1]
76
- next
77
- end
78
-
79
- len = (@buf[5] << 8) + @buf[4]
80
- if @buf.size < len + 8 then
81
- @buf += @io.read(len + 8 - @buf.size).unpack('C*')
82
- return nil if @buf.size < len + 8
83
- end
84
-
85
- ck_a, ck_b = UBX::checksum(@buf, 2..(len + 5))
86
- if (@buf[len + 6] != ck_a) || (@buf[len + 7] != ck_b) then
87
- @buf = @buf[2..-1]
88
- next
89
- end
90
-
91
- packet = @buf[0..(len + 7)]
92
- @buf = @buf[(len + 8)..-1]
93
-
94
- return packet
95
- end
96
- return nil
97
- end
98
-
99
- def each_packet(&b)
100
- res = Enumerator::new{|y|
101
- while packet = read_packet
102
- y << packet
103
- end
104
- }
105
- b ? res.each(&b) : res
106
- end
107
-
108
- def read_packets
109
- each_packet.to_a
110
- end
111
-
112
- GNSS_ID = {
113
- :GPS => 0,
114
- :SBAS => 1,
115
- :Galileo => 2,
116
- :BeiDou => 3,
117
- :QZSS => 5,
118
- :GLONASS => 6,
119
- }
120
-
121
- SIGNAL_ID = {
122
- :GPS => {:L1CA => 0, :L2CL => 3, :L2CM => 4},
123
- :SBAS => {:L1CA => 0},
124
- :Galileo => {:E1C => 0, :E1B => 1, :E5_bI => 5, :E5_bQ => 6},
125
- :BeiDou => {:B1I_D1 => 0, :B1I_D2 => 1, :B2I_D1 => 2, :B2I_D2 => 3},
126
- :QZSS => {:L1CA => 0, :L2CL => 4, :L2CM => 5},
127
- :GLONASS => {:L1OF => 0, :L2OF => 2},
128
- }
129
-
130
- def UBX.svid(id, gnss = :GPS)
131
- gnss = GNSS_ID[gnss] if gnss.kind_of?(Symbol)
132
- case gnss
133
- when GNSS_ID[:GPS], GNSS_ID[:SBAS]
134
- id
135
- when GNSS_ID[:Galileo]
136
- id + 210
137
- when GNSS_ID[:Beido]
138
- (id < 6) ? (id + 158) : (id + 27)
139
- when GNSS_ID[:QZSS]
140
- id + 192
141
- when GNSS_ID[:GLONASS]
142
- id + 64
143
- else
144
- nil
145
- end
146
- end
147
- end
1
+ # U-blox file utilities
2
+ # The origin is ninja-scan-light/tool/misc/ubx.rb
3
+
4
+ # Copyright (c) 2016, M.Naruoka (fenrir)
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without modification,
8
+ # are permitted provided that the following conditions are met:
9
+ #
10
+ # - Redistributions of source code must retain the above copyright notice,
11
+ # this list of conditions and the following disclaimer.
12
+ # - Redistributions in binary form must reproduce the above copyright notice,
13
+ # this list of conditions and the following disclaimer in the documentation
14
+ # and/or other materials provided with the distribution.
15
+ # - Neither the name of the naruoka.org nor the names of its contributors
16
+ # may be used to endorse or promote products derived from this software
17
+ # without specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
23
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
+ # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ module GPS_PVT
33
+ class UBX
34
+ def initialize(io)
35
+ @io = io
36
+ @buf = []
37
+ end
38
+ def UBX.checksum(packet, range = 2..-3)
39
+ ck_a, ck_b = [0, 0]
40
+ packet[range].each{|b|
41
+ ck_a += b
42
+ ck_b += ck_a
43
+ }
44
+ ck_a &= 0xFF
45
+ ck_b &= 0xFF
46
+ [ck_a, ck_b]
47
+ end
48
+ def UBX.update_checksum(packet)
49
+ packet[-2..-1] = checksum(packet)
50
+ packet
51
+ end
52
+ def UBX.update_size(packet, size = nil)
53
+ size ||= packet.size - 8
54
+ size = size.divmod(0x100)
55
+ packet[4] = size[1]
56
+ packet[5] = size[0]
57
+ packet
58
+ end
59
+ def UBX.update(packet)
60
+ [:update_size, :update_checksum].inject(packet){|arg, f|
61
+ UBX.send(f, arg)
62
+ }
63
+ end
64
+ def read_packet
65
+ while !@io.eof?
66
+ if @buf.size < 8 then
67
+ @buf += @io.read(8 - @buf.size).unpack('C*')
68
+ return nil if @buf.size < 8
69
+ end
70
+
71
+ if @buf[0] != 0xB5 then
72
+ @buf.shift
73
+ next
74
+ elsif @buf[1] != 0x62 then
75
+ @buf = @buf[2..-1]
76
+ next
77
+ end
78
+
79
+ len = (@buf[5] << 8) + @buf[4]
80
+ if @buf.size < len + 8 then
81
+ @buf += @io.read(len + 8 - @buf.size).unpack('C*')
82
+ return nil if @buf.size < len + 8
83
+ end
84
+
85
+ ck_a, ck_b = UBX::checksum(@buf, 2..(len + 5))
86
+ if (@buf[len + 6] != ck_a) || (@buf[len + 7] != ck_b) then
87
+ @buf = @buf[2..-1]
88
+ next
89
+ end
90
+
91
+ packet = @buf[0..(len + 7)]
92
+ @buf = @buf[(len + 8)..-1]
93
+
94
+ return packet
95
+ end
96
+ return nil
97
+ end
98
+
99
+ def each_packet(&b)
100
+ res = Enumerator::new{|y|
101
+ while packet = read_packet
102
+ y << packet
103
+ end
104
+ }
105
+ b ? res.each(&b) : res
106
+ end
107
+
108
+ def read_packets
109
+ each_packet.to_a
110
+ end
111
+
112
+ GNSS_ID = {
113
+ :GPS => 0,
114
+ :SBAS => 1,
115
+ :Galileo => 2,
116
+ :BeiDou => 3,
117
+ :QZSS => 5,
118
+ :GLONASS => 6,
119
+ }
120
+
121
+ SIGNAL_ID = {
122
+ :GPS => {:L1CA => 0, :L2CL => 3, :L2CM => 4},
123
+ :SBAS => {:L1CA => 0},
124
+ :Galileo => {:E1C => 0, :E1B => 1, :E5_bI => 5, :E5_bQ => 6},
125
+ :BeiDou => {:B1I_D1 => 0, :B1I_D2 => 1, :B2I_D1 => 2, :B2I_D2 => 3},
126
+ :QZSS => {:L1CA => 0, :L2CL => 4, :L2CM => 5},
127
+ :GLONASS => {:L1OF => 0, :L2OF => 2},
128
+ }
129
+
130
+ def UBX.svid(id, gnss = :GPS)
131
+ gnss = GNSS_ID[gnss] if gnss.kind_of?(Symbol)
132
+ case gnss
133
+ when GNSS_ID[:GPS], GNSS_ID[:SBAS]
134
+ id
135
+ when GNSS_ID[:Galileo]
136
+ id + 210
137
+ when GNSS_ID[:Beido]
138
+ (id < 6) ? (id + 158) : (id + 27)
139
+ when GNSS_ID[:QZSS]
140
+ id + 192
141
+ when GNSS_ID[:GLONASS]
142
+ id + 64
143
+ else
144
+ nil
145
+ end
146
+ end
147
+ end
148
148
  end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module GPS_PVT
4
- VERSION = "0.1.1"
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module GPS_PVT
4
+ VERSION = "0.1.2"
5
+ end
data/lib/gps_pvt.rb CHANGED
@@ -1,9 +1,9 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "gps_pvt/version"
4
- require_relative "gps_pvt/receiver"
5
-
6
- module GPS_PVT
7
- class Error < StandardError; end
8
- # Your code goes here...
9
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "gps_pvt/version"
4
+ require_relative "gps_pvt/receiver"
5
+
6
+ module GPS_PVT
7
+ class Error < StandardError; end
8
+ # Your code goes here...
9
+ end
data/sig/gps_pvt.rbs CHANGED
@@ -1,4 +1,4 @@
1
- module GpsPvt
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end
1
+ module GpsPvt
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
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.1.1
4
+ version: 0.1.2
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: 2021-12-20 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: 2.6.0
106
+ version: 2.3.0
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - ">="