class Gps::Device
Attributes
callbacks[R]
last_datetime[RW]
Public Class Methods
new(filename, track_datetime=true)
click to toggle source
# File lib/gps/device.rb, line 5 def initialize(filename, track_datetime=true) @callbacks = {} @track_datetime = track_datetime @filename = filename @file = File.open(filename, 'rb') end
open(filename, &block)
click to toggle source
# File lib/gps/device.rb, line 12 def self.open(filename, &block) device = Device.new filename block.call device device.close end
Public Instance Methods
close()
click to toggle source
# File lib/gps/device.rb, line 18 def close @file.close if @file end
each_coordinates(&block)
click to toggle source
# File lib/gps/device.rb, line 39 def each_coordinates(&block) each_sentence do |sentence| block.call sentence.lat_long_dec if sentence.has_coordinates? end end
each_line(&block)
click to toggle source
# File lib/gps/device.rb, line 22 def each_line(&block) @file.each_line do |line| line.strip! next if line.empty? block.call line end end
each_sentence(&block)
click to toggle source
# File lib/gps/device.rb, line 30 def each_sentence(&block) each_line do |line| s = Nmea::Sentence.parse line next if s.nil? update_datetime s if @track_datetime block.call s end end
on_altitude(&block)
click to toggle source
# File lib/gps/device.rb, line 133 def on_altitude(&block) callbacks[:altitude] ||= [] callbacks[:altitude] << block end
on_complete(&block)
click to toggle source
# File lib/gps/device.rb, line 138 def on_complete(&block) callbacks[:complete] ||= [] callbacks[:complete] << block end
on_coordinates(&block)
click to toggle source
# File lib/gps/device.rb, line 113 def on_coordinates(&block) callbacks[:coordinates] ||= [] callbacks[:coordinates] << block end
on_datetime(&block)
click to toggle source
# File lib/gps/device.rb, line 118 def on_datetime(&block) callbacks[:datetime] ||= [] callbacks[:datetime] << block end
on_magnetic_track(&block)
click to toggle source
# File lib/gps/device.rb, line 148 def on_magnetic_track(&block) callbacks[:magnetic_track] ||= [] callbacks[:magnetic_track] << block end
on_speed_kmh(&block)
click to toggle source
# File lib/gps/device.rb, line 128 def on_speed_kmh(&block) callbacks[:speed_kmh] ||= [] callbacks[:speed_kmh] << block end
on_speed_knots(&block)
click to toggle source
# File lib/gps/device.rb, line 123 def on_speed_knots(&block) callbacks[:speed_knots] ||= [] callbacks[:speed_knots] << block end
on_true_track(&block)
click to toggle source
# File lib/gps/device.rb, line 143 def on_true_track(&block) callbacks[:true_track] ||= [] callbacks[:true_track] << block end
rewind()
click to toggle source
Rewind file if not a character device
# File lib/gps/device.rb, line 46 def rewind @file.rewind unless File.chardev?(@file.path) end
start()
click to toggle source
Begin fetch process with callbacks
# File lib/gps/device.rb, line 51 def start @stopped = false each_sentence do |sentence| break if @stopped if @callbacks[:coordinates] && sentence.has_coordinates? @callbacks[:coordinates].each do |block| block.call sentence.lat_long_dec end end if @callbacks[:datetime] && sentence.has_datetime? @callbacks[:datetime].each do |block| block.call sentence.datetime end end if @callbacks[:speed_knots] && sentence.respond_to?(:speed_knots) @callbacks[:speed_knots].each do |block| block.call sentence.speed_knots if sentence.speed_knots end end if @callbacks[:speed_kmh] && sentence.respond_to?(:speed_kmh) @callbacks[:speed_kmh].each do |block| block.call sentence.speed_kmh if sentence.speed_kmh end end if @callbacks[:altitude] && sentence.respond_to?(:altitude) @callbacks[:altitude].each do |block| block.call sentence.altitude if sentence.altitude end end if @callbacks[:true_track] && sentence.respond_to?(:true_track) @callbacks[:true_track].each do |block| block.call sentence.true_track if sentence.true_track end end if @callbacks[:magnetic_track] && sentence.respond_to?(:magnetic_track) @callbacks[:magnetic_track].each do |block| block.call sentence.magnetic_track if sentence.magnetic_track end end end if @callbacks[:complete] @callbacks[:complete].each(&:call) end end
start_async()
click to toggle source
# File lib/gps/device.rb, line 105 def start_async Thread.new(&method(:start)) end
stop()
click to toggle source
# File lib/gps/device.rb, line 109 def stop @stopped = true end
Private Instance Methods
update_datetime(sentence)
click to toggle source
# File lib/gps/device.rb, line 157 def update_datetime(sentence) if sentence.respond_to? :datetime @last_datetime = sentence.datetime end end