Class: GpsdBaudRate

Inherits:
Object
  • Object
show all
Defined in:
lib/gpsd_baud_rate.rb,
lib/gpsd_baud_rate/version.rb

Constant Summary collapse

VERSION =
"0.1.32"
@@version =
GpsdBaudRate::VERSION.to_s
@@device =
'/dev/ttyAMA0'
@@service =
'gpsd.service'
@@socket =
'gpsd.socket'
@@baud_rates =
%w[115200 57600 38400 19200 14400 9600 4800]
@@NMEA_sentences =
%w[$GPGGA $GPGSA $GPGSV $GPRMC $GPZDA]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(goal_rate = @@baud_rates[0]) ⇒ GpsdBaudRate

Returns a new instance of GpsdBaudRate.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/gpsd_baud_rate.rb', line 18

def initialize goal_rate = @@baud_rates[0]

  @logger = new_logger path: "log/GpsdBaudRate.log", progname: "GpsdBaudRate", time_format: "'%Y-%m-%d %T.%N %z %Z'", level: Logger::DEBUG
  @logger.info "GpsdBaudRate Gem - Version: #{@@version}"

  unless self.class.check_device?
    msg = "Device: #{@@device} not found"
    @logger.error msg
    raise StandardError.new msg
  else
    @logger.info "Device: #{@@device} Okay"
  end
#    pid= %x|pgrep -f "ruby /home/deploy/bin/set_baud.rb"|
#    @logger.debug "Pid:  #{pid}, $$: #{$$}, $BASHPID: #{$BASHPID}"

  @goal_rate = goal_rate.to_i
  @logger.debug  "Goal_rate: #{@goal_rate}"
end

Instance Attribute Details

#versionObject (readonly)

Returns the value of attribute version.



7
8
9
# File 'lib/gpsd_baud_rate.rb', line 7

def version
  @version
end

Class Method Details

.baud_rateObject

~~~~~~~~~~~~~~~~~~~~~~~~ baud rate ~~~~~~~~~~~~~~~~~~~



104
105
106
# File 'lib/gpsd_baud_rate.rb', line 104

def self.baud_rate
  %x| sudo stty -F "#{@@device}"|.split('; ')[0].split(/\W+/)[1].to_i
end

.baud_rate?(b_rate) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/gpsd_baud_rate.rb', line 108

def self.baud_rate?(b_rate)
  b_rate==baud_rate
end

.check_device?Boolean

returns true if device exists

Returns:

  • (Boolean)


75
76
77
78
79
80
# File 'lib/gpsd_baud_rate.rb', line 75

def self.check_device?
  # Does the @@device exist and is it a character device
  # [[ ]] returns true (0) if 'file' exists
  "0\n" == %x| [ -c "#{@@device}" ] ; echo $?|

end

.gpsd_active?Boolean

Returns:

  • (Boolean)


82
83
84
85
86
# File 'lib/gpsd_baud_rate.rb', line 82

def self.gpsd_active?
  arry = %x|sudo systemctl status "#{@@socket}"|.split(/\n/)
  s = arry.select!{ |e| e.include? "Active:"}[0].split(/\W+/)[2]
  s == 'active'
end

.gpsd_startObject



95
96
97
98
99
100
# File 'lib/gpsd_baud_rate.rb', line 95

def self.gpsd_start
  %x|sudo systemctl start "#{@@service}"|
  %x|sudo systemctl start "#{@@socket}"|
  sleep 1
  %x|sudo systemctl daemon-reload|
end

.gpsd_stopObject



88
89
90
91
92
93
# File 'lib/gpsd_baud_rate.rb', line 88

def self.gpsd_stop
  %x|sudo systemctl stop "#{@@socket}"|
  %x|sudo systemctl stop "#{@@service}"|
  sleep 1
  %x|sudo systemctl daemon-reload|
end

Instance Method Details

#baud_rate=(b_rate) ⇒ Object

returns original baud_rate



113
114
115
116
# File 'lib/gpsd_baud_rate.rb', line 113

def baud_rate=( b_rate)
  msg= %x| sudo stty #{b_rate} -F "#{@@device}"|
  msg.each {|m| @logger.debug m}
end

#set_baud_rate(b_rate = @goal_rate) ⇒ Object

initiallize



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/gpsd_baud_rate.rb', line 37

def set_baud_rate b_rate = @goal_rate
  @logger.debug "In set_baud_rate"
  GpsdBaudRate::gpsd_start unless GpsdBaudRate::gpsd_active?   #make sure it's running

  @logger.debug "Service Status: #{GpsdBaudRate::gpsd_active?}"
  @logger.debug "Baud Rate: #{active_rate = GpsdBaudRate::baud_rate}"
  GpsdBaudRate::gpsd_stop
  @logger.debug "Service Status: #{GpsdBaudRate::gpsd_active?}"
  @logger.debug "Baud Rate: #{inactive_rate = GpsdBaudRate::baud_rate}"

  if active_rate == b_rate.to_i
    @logger.debug "Already at Goal Baud Rate"
  else
    @logger.debug "~~~~~~~~~~~~ Read at #{active_rate} baud ~~~~~~~~~~~~~~"
    unless (read_from_device active_rate)
      @logger.debug "Read at #{active_rate} baud Failed"
    else
      @logger.debug "Setting Goal Rate (#{b_rate})"
      set_PMTK_baud_rate active_rate, b_rate
      @logger.debug "Attempting Read at #{b_rate}"
      if read_from_device b_rate
        @logger.debug "Baud Rate Modification Successful"
        @logger.debug "Goal Baud Rate (#{b_rate}) has been set"
      else
        @logger.debug "Setting Baud Rate Failed"
      end
    end
  end
#
#   Cleanup
  GpsdBaudRate::gpsd_start
  @logger.debug "Service Status: #{GpsdBaudRate::gpsd_active?}"

end

#test_baud_rate(b_rate) ⇒ Object

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



120
121
122
# File 'lib/gpsd_baud_rate.rb', line 120

def test_baud_rate b_rate
  read_from_device b_rate
end