nmea_plus 1.0.24 → 1.1.0
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 +5 -5
- data/README.md +2 -2
- data/lib/nmea_plus/ais_message_factory.rb +3 -4
- data/lib/nmea_plus/generated_parser/parser.rb +7 -5
- data/lib/nmea_plus/generated_parser/tokenizer.rb +76 -75
- data/lib/nmea_plus/message/ais/base_ais.rb +1 -2
- data/lib/nmea_plus/message/ais/vdm.rb +30 -27
- data/lib/nmea_plus/message/ais/vdm_payload/mmsi_info.rb +9 -3
- data/lib/nmea_plus/message/ais/vdm_payload/payload.rb +8 -2
- data/lib/nmea_plus/message/ais/vdm_payload/sub_area.rb +2 -3
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg.rb +3 -2
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg1.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg10.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg11.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg12.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg13.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg14.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg15.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg16.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg17.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg18.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg19.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg2.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg20.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg21.rb +3 -3
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg24.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg27.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg3.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg4.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg5.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6.rb +8 -8
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6_dynamic_payload.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1022f61.rb +7 -2
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f0.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f2.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f3.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f4.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d1f5.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg6d235f10.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg7.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8.rb +6 -6
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8_dynamic_payload.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f0.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f22.rb +5 -2
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d1f31.rb +7 -3
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d200f10.rb +2 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg8d366f56.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg9.rb +3 -3
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_binary_acknowledgement.rb +1 -1
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_class_b_cs_position.rb +3 -3
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_cnb.rb +5 -4
- data/lib/nmea_plus/message/ais/vdm_payload/vdm_msg_station_report.rb +4 -4
- data/lib/nmea_plus/message/ais/vdo.rb +1 -1
- data/lib/nmea_plus/message/base.rb +14 -6
- data/lib/nmea_plus/message/nmea/aam.rb +1 -2
- data/lib/nmea_plus/message/nmea/alm.rb +1 -1
- data/lib/nmea_plus/message/nmea/apa.rb +1 -1
- data/lib/nmea_plus/message/nmea/apb.rb +1 -1
- data/lib/nmea_plus/message/nmea/base_nmea.rb +5 -6
- data/lib/nmea_plus/message/nmea/bec.rb +1 -1
- data/lib/nmea_plus/message/nmea/ber.rb +1 -1
- data/lib/nmea_plus/message/nmea/bod.rb +1 -1
- data/lib/nmea_plus/message/nmea/bpi.rb +1 -1
- data/lib/nmea_plus/message/nmea/bwc.rb +2 -2
- data/lib/nmea_plus/message/nmea/bwr.rb +1 -1
- data/lib/nmea_plus/message/nmea/bww.rb +2 -2
- data/lib/nmea_plus/message/nmea/dbk.rb +1 -1
- data/lib/nmea_plus/message/nmea/dbs.rb +2 -2
- data/lib/nmea_plus/message/nmea/dbt.rb +2 -2
- data/lib/nmea_plus/message/nmea/dcn.rb +1 -1
- data/lib/nmea_plus/message/nmea/dpt.rb +1 -1
- data/lib/nmea_plus/message/nmea/dru.rb +1 -1
- data/lib/nmea_plus/message/nmea/dtm.rb +1 -1
- data/lib/nmea_plus/message/nmea/fsi.rb +1 -1
- data/lib/nmea_plus/message/nmea/gbs.rb +1 -1
- data/lib/nmea_plus/message/nmea/gda.rb +1 -1
- data/lib/nmea_plus/message/nmea/gdf.rb +1 -1
- data/lib/nmea_plus/message/nmea/gdp.rb +1 -1
- data/lib/nmea_plus/message/nmea/gga.rb +1 -2
- data/lib/nmea_plus/message/nmea/gla.rb +1 -1
- data/lib/nmea_plus/message/nmea/glc.rb +1 -1
- data/lib/nmea_plus/message/nmea/glf.rb +1 -1
- data/lib/nmea_plus/message/nmea/gll.rb +1 -1
- data/lib/nmea_plus/message/nmea/glp.rb +1 -1
- data/lib/nmea_plus/message/nmea/gns.rb +1 -2
- data/lib/nmea_plus/message/nmea/goa.rb +1 -1
- data/lib/nmea_plus/message/nmea/gof.rb +1 -1
- data/lib/nmea_plus/message/nmea/gop.rb +1 -1
- data/lib/nmea_plus/message/nmea/grs.rb +4 -1
- data/lib/nmea_plus/message/nmea/gsa.rb +1 -1
- data/lib/nmea_plus/message/nmea/gst.rb +1 -1
- data/lib/nmea_plus/message/nmea/gsv.rb +1 -1
- data/lib/nmea_plus/message/nmea/gtd.rb +1 -1
- data/lib/nmea_plus/message/nmea/gxa.rb +1 -1
- data/lib/nmea_plus/message/nmea/gxf.rb +1 -1
- data/lib/nmea_plus/message/nmea/gxp.rb +1 -1
- data/lib/nmea_plus/message/nmea/hcc.rb +1 -1
- data/lib/nmea_plus/message/nmea/hcd.rb +1 -1
- data/lib/nmea_plus/message/nmea/hdg.rb +1 -1
- data/lib/nmea_plus/message/nmea/hdm.rb +1 -1
- data/lib/nmea_plus/message/nmea/hdt.rb +1 -1
- data/lib/nmea_plus/message/nmea/hfb.rb +1 -1
- data/lib/nmea_plus/message/nmea/hsc.rb +1 -1
- data/lib/nmea_plus/message/nmea/htc.rb +1 -1
- data/lib/nmea_plus/message/nmea/hvd.rb +1 -1
- data/lib/nmea_plus/message/nmea/hvm.rb +1 -1
- data/lib/nmea_plus/message/nmea/ima.rb +1 -1
- data/lib/nmea_plus/message/nmea/its.rb +1 -1
- data/lib/nmea_plus/message/nmea/lcd.rb +1 -1
- data/lib/nmea_plus/message/nmea/mda.rb +1 -1
- data/lib/nmea_plus/message/nmea/mhu.rb +1 -1
- data/lib/nmea_plus/message/nmea/mmb.rb +1 -1
- data/lib/nmea_plus/message/nmea/msk.rb +1 -1
- data/lib/nmea_plus/message/nmea/mss.rb +1 -1
- data/lib/nmea_plus/message/nmea/mta.rb +1 -1
- data/lib/nmea_plus/message/nmea/mtw.rb +1 -1
- data/lib/nmea_plus/message/nmea/mwh.rb +1 -1
- data/lib/nmea_plus/message/nmea/mws.rb +1 -1
- data/lib/nmea_plus/message/nmea/mwv.rb +1 -1
- data/lib/nmea_plus/message/nmea/oln.rb +1 -1
- data/lib/nmea_plus/message/nmea/olw.rb +1 -1
- data/lib/nmea_plus/message/nmea/omp.rb +1 -1
- data/lib/nmea_plus/message/nmea/onz.rb +1 -1
- data/lib/nmea_plus/message/nmea/osd.rb +1 -1
- data/lib/nmea_plus/message/nmea/proprietary/pashr.rb +1 -1
- data/lib/nmea_plus/message/nmea/r00.rb +1 -1
- data/lib/nmea_plus/message/nmea/rma.rb +1 -1
- data/lib/nmea_plus/message/nmea/rmb.rb +1 -1
- data/lib/nmea_plus/message/nmea/rmc.rb +1 -1
- data/lib/nmea_plus/message/nmea/rnn.rb +1 -1
- data/lib/nmea_plus/message/nmea/rot.rb +1 -1
- data/lib/nmea_plus/message/nmea/rpm.rb +1 -1
- data/lib/nmea_plus/message/nmea/rsa.rb +1 -1
- data/lib/nmea_plus/message/nmea/rsd.rb +1 -1
- data/lib/nmea_plus/message/nmea/rte.rb +1 -1
- data/lib/nmea_plus/message/nmea/sbk.rb +1 -1
- data/lib/nmea_plus/message/nmea/scd.rb +2 -2
- data/lib/nmea_plus/message/nmea/scy.rb +1 -1
- data/lib/nmea_plus/message/nmea/sdb.rb +1 -1
- data/lib/nmea_plus/message/nmea/sfi.rb +1 -1
- data/lib/nmea_plus/message/nmea/sgd.rb +1 -1
- data/lib/nmea_plus/message/nmea/sgr.rb +2 -1
- data/lib/nmea_plus/message/nmea/siu.rb +1 -1
- data/lib/nmea_plus/message/nmea/slc.rb +2 -2
- data/lib/nmea_plus/message/nmea/snc.rb +3 -3
- data/lib/nmea_plus/message/nmea/snu.rb +1 -1
- data/lib/nmea_plus/message/nmea/sps.rb +1 -1
- data/lib/nmea_plus/message/nmea/ssf.rb +1 -1
- data/lib/nmea_plus/message/nmea/stc.rb +1 -1
- data/lib/nmea_plus/message/nmea/stn.rb +1 -1
- data/lib/nmea_plus/message/nmea/str.rb +1 -1
- data/lib/nmea_plus/message/nmea/sys.rb +6 -6
- data/lib/nmea_plus/message/nmea/tds.rb +1 -1
- data/lib/nmea_plus/message/nmea/tec.rb +1 -1
- data/lib/nmea_plus/message/nmea/tep.rb +1 -1
- data/lib/nmea_plus/message/nmea/tfi.rb +1 -1
- data/lib/nmea_plus/message/nmea/tga.rb +1 -1
- data/lib/nmea_plus/message/nmea/tif.rb +14 -11
- data/lib/nmea_plus/message/nmea/tpc.rb +1 -1
- data/lib/nmea_plus/message/nmea/tpr.rb +1 -1
- data/lib/nmea_plus/message/nmea/tpt.rb +1 -1
- data/lib/nmea_plus/message/nmea/trf.rb +1 -1
- data/lib/nmea_plus/message/nmea/trp.rb +1 -1
- data/lib/nmea_plus/message/nmea/trs.rb +20 -17
- data/lib/nmea_plus/message/nmea/ttm.rb +1 -1
- data/lib/nmea_plus/message/nmea/vbw.rb +1 -1
- data/lib/nmea_plus/message/nmea/vcd.rb +1 -1
- data/lib/nmea_plus/message/nmea/vdr.rb +1 -1
- data/lib/nmea_plus/message/nmea/vhw.rb +1 -1
- data/lib/nmea_plus/message/nmea/vlw.rb +1 -1
- data/lib/nmea_plus/message/nmea/vpe.rb +1 -1
- data/lib/nmea_plus/message/nmea/vpw.rb +1 -1
- data/lib/nmea_plus/message/nmea/vta.rb +1 -1
- data/lib/nmea_plus/message/nmea/vtg.rb +6 -2
- data/lib/nmea_plus/message/nmea/vti.rb +1 -1
- data/lib/nmea_plus/message/nmea/vwe.rb +1 -1
- data/lib/nmea_plus/message/nmea/vwr.rb +1 -1
- data/lib/nmea_plus/message/nmea/vwt.rb +1 -1
- data/lib/nmea_plus/message/nmea/wcv.rb +1 -1
- data/lib/nmea_plus/message/nmea/wdc.rb +1 -1
- data/lib/nmea_plus/message/nmea/wdr.rb +1 -1
- data/lib/nmea_plus/message/nmea/wfm.rb +1 -1
- data/lib/nmea_plus/message/nmea/wnc.rb +1 -1
- data/lib/nmea_plus/message/nmea/wnr.rb +1 -1
- data/lib/nmea_plus/message/nmea/wpl.rb +1 -1
- data/lib/nmea_plus/message/nmea/xdr.rb +1 -1
- data/lib/nmea_plus/message/nmea/xte.rb +1 -1
- data/lib/nmea_plus/message/nmea/xtr.rb +1 -1
- data/lib/nmea_plus/message/nmea/ywp.rb +1 -1
- data/lib/nmea_plus/message/nmea/yws.rb +1 -1
- data/lib/nmea_plus/message/nmea/zaa.rb +1 -1
- data/lib/nmea_plus/message/nmea/zcd.rb +8 -6
- data/lib/nmea_plus/message/nmea/zda.rb +5 -3
- data/lib/nmea_plus/message/nmea/zev.rb +8 -6
- data/lib/nmea_plus/message/nmea/zfi.rb +1 -1
- data/lib/nmea_plus/message/nmea/zfo.rb +1 -1
- data/lib/nmea_plus/message/nmea/zlz.rb +1 -1
- data/lib/nmea_plus/message/nmea/zpi.rb +1 -1
- data/lib/nmea_plus/message/nmea/zta.rb +1 -1
- data/lib/nmea_plus/message/nmea/zte.rb +1 -1
- data/lib/nmea_plus/message/nmea/ztg.rb +1 -1
- data/lib/nmea_plus/message/nmea/zti.rb +1 -1
- data/lib/nmea_plus/message/nmea/zwp.rb +1 -1
- data/lib/nmea_plus/message/nmea/zzu.rb +1 -1
- data/lib/nmea_plus/message_factory.rb +4 -4
- data/lib/nmea_plus/nmea_message_factory.rb +152 -153
- data/lib/nmea_plus/version.rb +1 -1
- data/lib/nmea_plus.rb +6 -4
- metadata +13 -167
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1f0"
|
3
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1f2"
|
4
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1f3"
|
5
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1f4"
|
6
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1f5"
|
7
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d235f10"
|
8
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6d1022f61"
|
9
9
|
|
10
10
|
module NMEAPlus
|
11
11
|
module Message
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg6_dynamic_payload"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -29,6 +29,7 @@ module NMEAPlus
|
|
29
29
|
# @return [bool]
|
30
30
|
def _field0_bit(position)
|
31
31
|
return nil if @fields[1].nil?
|
32
|
+
|
32
33
|
mask = 1 << (7 - position)
|
33
34
|
@fields[0].hex & mask == mask
|
34
35
|
end
|
@@ -59,6 +60,7 @@ module NMEAPlus
|
|
59
60
|
# @return [Integer]
|
60
61
|
def operation_mode
|
61
62
|
return nil if @fields[1].nil?
|
63
|
+
|
62
64
|
@fields[1].hex >> 6
|
63
65
|
end
|
64
66
|
|
@@ -81,7 +83,8 @@ module NMEAPlus
|
|
81
83
|
# @return [Float]
|
82
84
|
def intensity_percent
|
83
85
|
return nil if @fields[1].nil?
|
84
|
-
|
86
|
+
|
87
|
+
(1 + (@fields[1].hex & "3F".hex)) * (100.0 / (2**6))
|
85
88
|
end
|
86
89
|
|
87
90
|
# A vendor-specific code
|
@@ -104,6 +107,7 @@ module NMEAPlus
|
|
104
107
|
def latitude
|
105
108
|
parts = @fields[4]
|
106
109
|
return nil if parts.nil?
|
110
|
+
|
107
111
|
NMEAPlus::Message::Base.degrees_minutes_to_decimal(parts[0..-1], parts[-1])
|
108
112
|
end
|
109
113
|
|
@@ -113,6 +117,7 @@ module NMEAPlus
|
|
113
117
|
def longitude
|
114
118
|
parts = @fields[5]
|
115
119
|
return nil if parts.nil?
|
120
|
+
|
116
121
|
NMEAPlus::Message::Base.degrees_minutes_to_decimal(parts[0..-1], parts[-1])
|
117
122
|
end
|
118
123
|
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8d1f0"
|
3
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8d1f22"
|
4
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8d1f31"
|
5
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8d200f10"
|
6
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8d366f56"
|
7
7
|
|
8
8
|
module NMEAPlus
|
9
9
|
module Message
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8_dynamic_payload"
|
2
|
+
require "nmea_plus/message/ais/vdm_payload/sub_area"
|
3
3
|
|
4
4
|
module NMEAPlus
|
5
5
|
module Message
|
@@ -43,6 +43,7 @@ module NMEAPlus
|
|
43
43
|
# @!parse attr_reader :notice_description
|
44
44
|
# @return [String] Area notice description
|
45
45
|
def notice_description
|
46
|
+
# rubocop:disable Lint/DuplicateBranch
|
46
47
|
case notice_id
|
47
48
|
when 0 then "Caution Area: Marine mammals habitat"
|
48
49
|
when 1 then "Caution Area: Marine mammals in area - reduce speed"
|
@@ -173,6 +174,7 @@ module NMEAPlus
|
|
173
174
|
when 126 then "Cancellation - cancel area as identified by Message Linkage ID"
|
174
175
|
when 127 then "Undefined (default)"
|
175
176
|
end
|
177
|
+
# rubocop:enable Lint/DuplicateBranch
|
176
178
|
end
|
177
179
|
|
178
180
|
# @!parse attr_reader :utc_time
|
@@ -196,6 +198,7 @@ module NMEAPlus
|
|
196
198
|
def sub_area_text
|
197
199
|
texts = sub_areas.select { |a| a.shape_id == 5 }
|
198
200
|
return nil if texts.empty?
|
201
|
+
|
199
202
|
texts.collect(&:text).join
|
200
203
|
end
|
201
204
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8_dynamic_payload"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -7,8 +7,8 @@ module NMEAPlus
|
|
7
7
|
# Type 8: Binary Broadcast Message Subtype: Meteorological and Hydrological Data (IMO289)
|
8
8
|
class VDMMsg8d1f31 < NMEAPlus::Message::AIS::VDMPayload::VDMMsg8DynamicPayload
|
9
9
|
|
10
|
-
payload_reader :longitude, 56, 25, :_I, 60 * 10**3, 181
|
11
|
-
payload_reader :latitude, 81, 24, :_I, 60 * 10**3, 91
|
10
|
+
payload_reader :longitude, 56, 25, :_I, 60 * (10**3), 181
|
11
|
+
payload_reader :latitude, 81, 24, :_I, 60 * (10**3), 91
|
12
12
|
payload_reader :position_10m_accuracy?, 105, 1, :_b
|
13
13
|
|
14
14
|
# @!parse attr_reader :current_time
|
@@ -80,6 +80,7 @@ module NMEAPlus
|
|
80
80
|
# @param [Integer] code The code for precipitation
|
81
81
|
# @return [String] the description
|
82
82
|
def precipitation_description
|
83
|
+
# rubocop:disable Lint/DuplicateBranch
|
83
84
|
case precipitation_type
|
84
85
|
when 0 then return "Reserved"
|
85
86
|
when 1 then return "Rain"
|
@@ -90,6 +91,7 @@ module NMEAPlus
|
|
90
91
|
when 6 then return "Reserved"
|
91
92
|
# 7 is nil
|
92
93
|
end
|
94
|
+
# rubocop:enable Lint/DuplicateBranch
|
93
95
|
nil
|
94
96
|
end
|
95
97
|
|
@@ -98,6 +100,8 @@ module NMEAPlus
|
|
98
100
|
def salinity
|
99
101
|
ret = _U(339, 9, 10)
|
100
102
|
return nil if ret > 51.0 # 51.1 for sensor not available, otherwise n/a
|
103
|
+
|
104
|
+
ret
|
101
105
|
end
|
102
106
|
|
103
107
|
# @!parse attr_reader :salinity_sensor_unavailable?
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg8_dynamic_payload"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -55,6 +55,7 @@ module NMEAPlus
|
|
55
55
|
def get_eri_solas_description(code)
|
56
56
|
return nil if code < 1
|
57
57
|
return nil if 99 < code
|
58
|
+
|
58
59
|
i = code.to_i
|
59
60
|
major = case i / 10
|
60
61
|
when 3 then "Vessel"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -11,8 +11,8 @@ module NMEAPlus
|
|
11
11
|
|
12
12
|
payload_reader :speed_over_ground, 50, 10, :_U, 1, 1023
|
13
13
|
payload_reader :position_10m_accuracy?, 60, 1, :_b
|
14
|
-
payload_reader :longitude, 61, 28, :_I, 60 * 10**4, 181
|
15
|
-
payload_reader :latitude, 89, 27, :_I, 60 * 10**4, 91
|
14
|
+
payload_reader :longitude, 61, 28, :_I, 60 * (10**4), 181
|
15
|
+
payload_reader :latitude, 89, 27, :_I, 60 * (10**4), 91
|
16
16
|
payload_reader :course_over_ground, 116, 12, :_U, 10
|
17
17
|
payload_reader :time_stamp, 128, 6, :_u
|
18
18
|
payload_reader :dte_ready?, 142, 1, :_nb
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -11,8 +11,8 @@ module NMEAPlus
|
|
11
11
|
class VDMMsgClassBCSPosition < NMEAPlus::Message::AIS::VDMPayload::VDMMsg
|
12
12
|
payload_reader :speed_over_ground, 46, 10, :_U, 10
|
13
13
|
payload_reader :position_10m_accuracy?, 56, 1, :_b
|
14
|
-
payload_reader :longitude, 57, 28, :_I, 60 * 10**4, 181
|
15
|
-
payload_reader :latitude, 85, 27, :_I, 60 * 10**4, 91
|
14
|
+
payload_reader :longitude, 57, 28, :_I, 60 * (10**4), 181
|
15
|
+
payload_reader :latitude, 85, 27, :_I, 60 * (10**4), 91
|
16
16
|
payload_reader :course_over_ground, 112, 12, :_U, 10
|
17
17
|
payload_reader :true_heading, 124, 9, :_u, 511
|
18
18
|
payload_reader :time_stamp, 133, 6, :_u
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -21,14 +21,15 @@ module NMEAPlus
|
|
21
21
|
def rate_of_turn
|
22
22
|
ret = _i(42, 8) # spec is wrong, we don't use I3
|
23
23
|
return nil if ret == -128
|
24
|
+
|
24
25
|
negative = ret < 0
|
25
|
-
(ret / 4.733)**2 * (negative ? -1 : 1)
|
26
|
+
((ret / 4.733)**2) * (negative ? -1 : 1)
|
26
27
|
end
|
27
28
|
|
28
29
|
payload_reader :speed_over_ground, 50, 10, :_U, 10
|
29
30
|
payload_reader :position_10m_accuracy?, 60, 1, :_b
|
30
|
-
payload_reader :longitude, 61, 28, :_I, 60 * 10**4, 181
|
31
|
-
payload_reader :latitude, 89, 27, :_I, 60 * 10**4, 91
|
31
|
+
payload_reader :longitude, 61, 28, :_I, 60 * (10**4), 181
|
32
|
+
payload_reader :latitude, 89, 27, :_I, 60 * (10**4), 91
|
32
33
|
payload_reader :course_over_ground, 116, 12, :_U, 10, 3600
|
33
34
|
payload_reader :true_heading, 128, 9, :_u, 511
|
34
35
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "nmea_plus/message/ais/vdm_payload/vdm_msg"
|
2
2
|
|
3
3
|
module NMEAPlus
|
4
4
|
module Message
|
@@ -19,12 +19,12 @@ module NMEAPlus
|
|
19
19
|
_u(61, 5),
|
20
20
|
_u(66, 6),
|
21
21
|
_u(72, 6),
|
22
|
-
|
22
|
+
"+00:00")
|
23
23
|
end
|
24
24
|
|
25
25
|
payload_reader :position_10m_accuracy?, 78, 1, :_b
|
26
|
-
payload_reader :longitude, 79, 28, :_I, 60 * 10**4, 181
|
27
|
-
payload_reader :latitude, 107, 27, :_I, 60 * 10**4, 91
|
26
|
+
payload_reader :longitude, 79, 28, :_I, 60 * (10**4), 181
|
27
|
+
payload_reader :latitude, 107, 27, :_I, 60 * (10**4), 91
|
28
28
|
payload_reader :epfd_type, 134, 4, :_e
|
29
29
|
payload_reader :raim?, 148, 1, :_b
|
30
30
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module NMEAPlus
|
3
2
|
|
4
3
|
# This module contains all parsed NMEA message types, and their subtypes.
|
@@ -66,7 +65,7 @@ module NMEAPlus
|
|
66
65
|
# @!parse attr_accessor :payload
|
67
66
|
def payload=(val)
|
68
67
|
@payload = val
|
69
|
-
@fields = val.split(
|
68
|
+
@fields = val.split(",", -1)
|
70
69
|
end
|
71
70
|
|
72
71
|
# @return [bool] Whether the checksum calculated from the payload matches the checksum given in the message
|
@@ -78,12 +77,13 @@ module NMEAPlus
|
|
78
77
|
def all_checksums_ok?
|
79
78
|
return false unless checksum_ok?
|
80
79
|
return true if @next_part.nil?
|
80
|
+
|
81
81
|
@next_part.all_checksums_ok?
|
82
82
|
end
|
83
83
|
|
84
84
|
# return [String] The calculated checksum for this payload as a two-character string
|
85
85
|
def calculated_checksum
|
86
|
-
"%02x"
|
86
|
+
format("%02x", @payload.each_byte.map(&:ord).reduce(:^))
|
87
87
|
end
|
88
88
|
|
89
89
|
# @!parse attr_reader :total_messages
|
@@ -134,6 +134,7 @@ module NMEAPlus
|
|
134
134
|
mn = message_number # just in case this is expensive to compute
|
135
135
|
return last_index if mn - last_index != 1 # indicating a skip or restart
|
136
136
|
return mn if @next_part.nil? # indicating we're the last message
|
137
|
+
|
137
138
|
@next_part._highest_contiguous_index(mn) # recurse down
|
138
139
|
end
|
139
140
|
|
@@ -145,6 +146,7 @@ module NMEAPlus
|
|
145
146
|
# @return [Float] A signed latitude or longitude
|
146
147
|
def self.degrees_minutes_to_decimal(dm_string, sign_letter = "")
|
147
148
|
return nil if dm_string.nil? || dm_string.empty?
|
149
|
+
|
148
150
|
r = /(\d+)(\d{2}\.\d+)/ # (some number of digits) (2 digits for minutes).(decimal minutes)
|
149
151
|
m = r.match(dm_string)
|
150
152
|
raw = m.values_at(1)[0].to_f + (m.values_at(2)[0].to_f / 60)
|
@@ -168,6 +170,7 @@ module NMEAPlus
|
|
168
170
|
# @return [Integer] The value in the field or nil
|
169
171
|
def self._integer(field)
|
170
172
|
return nil if field.nil? || field.empty?
|
173
|
+
|
171
174
|
field.to_i
|
172
175
|
end
|
173
176
|
|
@@ -177,6 +180,7 @@ module NMEAPlus
|
|
177
180
|
# @return [Float] The value in the field or nil
|
178
181
|
def self._float(field)
|
179
182
|
return nil if field.nil? || field.empty?
|
183
|
+
|
180
184
|
field.to_f
|
181
185
|
end
|
182
186
|
|
@@ -186,6 +190,7 @@ module NMEAPlus
|
|
186
190
|
# @return [String] The value in the field or nil
|
187
191
|
def self._string(field)
|
188
192
|
return nil if field.nil? || field.empty?
|
193
|
+
|
189
194
|
field
|
190
195
|
end
|
191
196
|
|
@@ -195,6 +200,7 @@ module NMEAPlus
|
|
195
200
|
# @return [Integer] The value in the field or nil
|
196
201
|
def self._hex_to_integer(field)
|
197
202
|
return nil if field.nil? || field.empty?
|
203
|
+
|
198
204
|
field.hex
|
199
205
|
end
|
200
206
|
|
@@ -204,11 +210,12 @@ module NMEAPlus
|
|
204
210
|
# @return [Time] The value in the field or nil
|
205
211
|
def self._utctime_hms(field)
|
206
212
|
return nil if field.nil? || field.empty?
|
213
|
+
|
207
214
|
re_format = /(\d{2})(\d{2})(\d{2}(\.\d+)?)/
|
208
215
|
now = Time.now
|
209
216
|
begin
|
210
217
|
hms = re_format.match(field)
|
211
|
-
Time.new(now.year, now.month, now.day, hms[1].to_i, hms[2].to_i, hms[3].to_f,
|
218
|
+
Time.new(now.year, now.month, now.day, hms[1].to_i, hms[2].to_i, hms[3].to_f, "+00:00")
|
212
219
|
rescue
|
213
220
|
nil
|
214
221
|
end
|
@@ -220,10 +227,11 @@ module NMEAPlus
|
|
220
227
|
# @return [Time] The value in the field or nil
|
221
228
|
def self._interval_hms(field)
|
222
229
|
return nil if field.nil? || field.empty?
|
230
|
+
|
223
231
|
re_format = /(\d{2})(\d{2})(\d{2}(\.\d+)?)/
|
224
232
|
begin
|
225
233
|
hms = re_format.match(field)
|
226
|
-
Time.new(0, 1, 1, hms[1].to_i, hms[2].to_i, hms[3].to_f,
|
234
|
+
Time.new(0, 1, 1, hms[1].to_i, hms[2].to_i, hms[3].to_f, "+00:00")
|
227
235
|
rescue
|
228
236
|
nil
|
229
237
|
end
|
@@ -245,7 +253,7 @@ module NMEAPlus
|
|
245
253
|
begin
|
246
254
|
dmy = date_format.match(d_field)
|
247
255
|
hms = time_format.match(t_field)
|
248
|
-
Time.new(2000 + dmy[3].to_i, dmy[2].to_i, dmy[1].to_i, hms[1].to_i, hms[2].to_i, hms[3].to_f,
|
256
|
+
Time.new(2000 + dmy[3].to_i, dmy[2].to_i, dmy[1].to_i, hms[1].to_i, hms[2].to_i, hms[3].to_f, "+00:00")
|
249
257
|
rescue
|
250
258
|
nil
|
251
259
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'nmea_plus/message/base'
|
1
|
+
require "nmea_plus/message/base"
|
3
2
|
|
4
3
|
module NMEAPlus
|
5
4
|
module Message
|
@@ -33,8 +32,8 @@ module NMEAPlus
|
|
33
32
|
# @return [bool] The value in the field or nil
|
34
33
|
def self._av_boolean(field)
|
35
34
|
case field
|
36
|
-
when
|
37
|
-
when
|
35
|
+
when "A" then return true
|
36
|
+
when "V" then return false
|
38
37
|
end
|
39
38
|
nil
|
40
39
|
end
|
@@ -45,8 +44,8 @@ module NMEAPlus
|
|
45
44
|
# @return [bool] The value in the field or nil
|
46
45
|
def self._10_boolean(field)
|
47
46
|
case field
|
48
|
-
when
|
49
|
-
when
|
47
|
+
when "1" then return true
|
48
|
+
when "0" then return false
|
50
49
|
end
|
51
50
|
nil
|
52
51
|
end
|