nmea_gps 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 07cb0192771b8e1e90ea379ecb8ae3493ec37788
4
- data.tar.gz: 020a505200c28173a4614717dcbac765ff9311a8
3
+ metadata.gz: 186f2e292efec893a3cfb3790f00b763261cba01
4
+ data.tar.gz: a37fea6191d105c65f2087b5dac5ec4feaa3b585
5
5
  SHA512:
6
- metadata.gz: 553f60e8a1047a338ddadae3cb042c0909b144f6ea836451690b4d34f78c7393b6a7040e612e6ec6541fcc9776a05494589874fa26c9817fd182b656414ede4c
7
- data.tar.gz: 7d544a2e0931dfd50e5435cdc914b00a025ad5a01fa287d957e0f90172c03b193cf301f9045da87c1350784a024d59874371390118d07539953209faf523c9b5
6
+ metadata.gz: 380861b8c6f53ae3fa3ab3a10e56d24bc915af6e0b55ce3fb7f0114330b105832c34a2b8c8347d5fc688ee19acfd6f5d44def03f8e166227f032e72a75723a24
7
+ data.tar.gz: 7b4e698131dc1a5b609dfa1be074e0a83c743f7f79e5a236c00265046a9196de30b025b1a2b755c21406ddd43f504f9b7d4e2c007e3334fa1410b831ed36faf4
data/README.md CHANGED
@@ -37,6 +37,7 @@ gps = Nmea::Gps.new serialport update_hz: 10
37
37
  gps.rmc do |rmc|
38
38
  # you will get a sentence object as a parameter
39
39
  # for gsv callback, it will be an array containing multiple gsv objects [gsv, gsv, gsv]
40
+ p rmc.raw_sentence_line
40
41
  p rmc.time
41
42
  p rmc.latitude
42
43
  p rmc.longitude
@@ -52,6 +53,12 @@ gps.error do |exception|
52
53
  puts exception.backtrace.join "\n"
53
54
  end
54
55
 
56
+ # if you want to receive all ...
57
+ gps.all do |sentence, sentence_object|
58
+ p sentence # such as :gga, :rmc
59
+ p sentence_object # such as Nmea::Gps::Rmc, [Nmea::Gps::Gsv, Nmea::Gps::Gsv, ...]
60
+ end
61
+
55
62
  # start the tracking
56
63
  gps.track!
57
64
 
@@ -83,6 +90,16 @@ gps.track!
83
90
  # ..
84
91
  # ..
85
92
 
93
+
94
+ # you can clear callbacks on the run
95
+ gps.clear_rmc # this will stop the call instantly
96
+
97
+
98
+ # you can even start a callback on the run
99
+ gps.gga do |gga|
100
+ p [gga.latitude, gga.longitude]
101
+ end
102
+
86
103
  # when you want to stop callbacks, you can call this
87
104
  # gps.stop!
88
105
  # then close the connection
@@ -92,6 +109,16 @@ gps.track!
92
109
  ## sentences
93
110
  [click here](https://github.com/github0013/nmea_gps/tree/master/lib/nmea_gps/sentences) for details
94
111
 
112
+ | sentence | callback | parameter to be passed |
113
+ |:----|:----|:---------------|
114
+ | GGA | gga | Nmea::Gps::Gga |
115
+ | GLL | gll | Nmea::Gps::Gll |
116
+ | GSA | gsa | Nmea::Gps::Gsa |
117
+ | GSV | gsv | [Nmea::Gps::Gsv, Nmea::Gps::Gsv, ...] |
118
+ | RMC | rmc | Nmea::Gps::Rmc |
119
+ | VTG | vtg | Nmea::Gps::Vtg |
120
+ | ZDA | zda | Nmea::Gps::Zda |
121
+
95
122
  ## Contributing
96
123
 
97
124
  1. Fork it ( https://github.com/[my-github-username]/nmea_gps/fork )
data/lib/nmea_gps/gps.rb CHANGED
@@ -11,10 +11,14 @@ module Nmea
11
11
 
12
12
  Dir[Pathname(__FILE__).join("../sentences/*.rb")].collect do |path|
13
13
  Pathname(path).basename(".rb").to_s
14
- end.tap{|array| array << "error" }.each do |sentence|
14
+ end.tap{|array| array << "error" << "all" }.each do |sentence|
15
15
  define_method(sentence) do |&block|
16
16
  self.callbacks[__callee__] = block
17
17
  end
18
+
19
+ define_method("clear_#{sentence}") do
20
+ self.callbacks.delete(sentence.to_sym)
21
+ end
18
22
  end
19
23
 
20
24
  def track!
@@ -43,8 +47,8 @@ module Nmea
43
47
  Hash.new{|hash, key| hash[key] = [] }.tap do |set|
44
48
  catch(:done_one_cycle) do
45
49
  loop do
46
- ensure_sentence do |sentence, line|
47
- set[sentence] << line
50
+ ensure_sentence do |sentence, raw_sentence_line|
51
+ set[sentence] << raw_sentence_line
48
52
  end
49
53
  end
50
54
  end
@@ -54,46 +58,43 @@ module Nmea
54
58
  def ensure_sentence
55
59
  yield *@buffer if @buffer
56
60
 
57
- line = self.gps_serial_port.gets("\r\n").strip
61
+ raw_sentence_line = self.gps_serial_port.gets("\r\n").strip
58
62
  # %w[ GLL RMC VTG GGA GSA GSV ZDA].join.chars.uniq.sort.join
59
- return unless match = line.match(/\A\$#{TALKER_ID}([ACDGLMRSTVZ]{3})/)
63
+ return unless match = raw_sentence_line.match(/\A\$#{TALKER_ID}([ACDGLMRSTVZ]{3})/)
60
64
 
61
65
  sentence = match[1].downcase.to_sym
62
66
  if sentence == self.initial_sentence
63
- @buffer = [sentence, line]
67
+ @buffer = [sentence, raw_sentence_line]
64
68
  throw :done_one_cycle
65
69
  end
66
70
 
67
- yield sentence, line
71
+ yield sentence, raw_sentence_line
68
72
 
69
73
  self.initial_sentence ||= sentence unless sentence == :gsv
70
74
  end
71
75
 
72
76
  def callback!
73
- this_set = sentences_in_a_cycle
74
- this_set.keys.each do |sentence|
77
+ sentences_in_a_cycle.each do |sentence, raw_sentence_lines_in_array|
75
78
  begin
76
- this_callback = self.callbacks[sentence]
77
- next unless this_callback
78
-
79
79
  target_class = "Nmea::Gps::#{sentence.to_s.camelcase}".constantize
80
80
 
81
81
  object = if sentence == :gsv
82
- this_set[sentence].sort.collect do |line|
83
- target_class.new line
82
+ raw_sentence_lines_in_array.sort.collect do |raw_sentence|
83
+ target_class.new raw_sentence
84
84
  end
85
85
  else
86
- target_class.new(this_set[sentence].first)
86
+ target_class.new(raw_sentence_lines_in_array.first)
87
87
  end
88
88
 
89
- this_callback.call object
89
+ self.callbacks[sentence].call object if self.callbacks[sentence]
90
+ self.callbacks[:all].call [sentence, object] if self.callbacks[:all]
90
91
  rescue => ex
91
- self.callbacks[:error].call ex
92
+ self.callbacks[:error].call ex if self.callbacks[:error]
92
93
  end
93
94
  end
94
95
 
95
96
  rescue => ex
96
- self.callbacks[:error].call ex
97
+ self.callbacks[:error].call ex if self.callbacks[:error]
97
98
  end
98
99
 
99
100
 
@@ -15,9 +15,10 @@ module Nmea
15
15
  "E" => :dr,
16
16
  }
17
17
 
18
+ attr_reader :raw_sentence_line
18
19
 
19
- def initialize(line)
20
- @line = line
20
+ def initialize(raw_sentence_line)
21
+ @raw_sentence_line = raw_sentence_line
21
22
  end
22
23
 
23
24
  def name
@@ -25,13 +26,10 @@ module Nmea
25
26
  end
26
27
 
27
28
  def raw_data
28
- _, *data = self.line.split("*").first.split(",")
29
+ _, *data = self.raw_sentence_line.split("*").first.split(",")
29
30
  data
30
31
  end
31
32
 
32
- protected
33
- attr_reader :line
34
-
35
33
  end
36
34
  end
37
35
  end
@@ -1,3 +1,3 @@
1
1
  module NmeaGps
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -2,12 +2,12 @@ require 'spec_helper'
2
2
  require 'nmea_gps/sentence_base'
3
3
 
4
4
  describe Nmea::Gps::SentenceBase do
5
- let(:line){ "" }
6
- subject{ Nmea::Gps::SentenceBase.new line }
5
+ let(:raw_sentence_line){ "" }
6
+ subject{ Nmea::Gps::SentenceBase.new raw_sentence_line }
7
7
 
8
8
  describe "initialize" do
9
- let(:line){ "line" }
10
- it{ expect(subject.instance_eval{@line}).to eq line }
9
+ let(:raw_sentence_line){ "raw_sentence_line" }
10
+ it{ expect(subject.raw_sentence_line).to eq raw_sentence_line }
11
11
  end
12
12
 
13
13
  describe "name" do
@@ -15,7 +15,7 @@ describe Nmea::Gps::SentenceBase do
15
15
  end
16
16
 
17
17
  describe "raw_data" do
18
- let(:line){ "$GPNAME,#{(0..9).to_a.join(",")}*sum" }
18
+ let(:raw_sentence_line){ "$GPNAME,#{(0..9).to_a.join(",")}*sum" }
19
19
 
20
20
  it{ expect(subject.raw_data.first).to eq "0" }
21
21
  it{ expect(subject.raw_data.last).to eq "9" }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nmea_gps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-18 00:00:00.000000000 Z
11
+ date: 2014-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler