Class: OrigenLink::Server::Pin

Inherits:
Object
  • Object
show all
Defined in:
lib/origen_link/server/pin.rb

Constant Summary collapse

@@pin_setup =
{
  in:  'in',
  out: 'out'
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ionumber, direction = :in) ⇒ Pin

Returns a new instance of Pin.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/origen_link/server/pin.rb', line 50

def initialize(ionumber, direction = :in)
  @ionumber = Integer(ionumber)
  @pin_dir_name = "#{Server.gpio_dir}/gpio#{@ionumber}/direction"
  @pin_val_name = "#{Server.gpio_dir}/gpio#{@ionumber}/value"
  if !File.exist?(@pin_dir_name)
    system("echo #{@ionumber} > #{Server.gpio_dir}/export")
    sleep 0.05
    if $CHILD_STATUS == 0
      @gpio_valid = true
    else
      @gpio_valid = false
    end
  else
    @gpio_valid = true
  end
  if @gpio_valid
    if File.writable?(@pin_dir_name)
      @pin_dir_obj = File.open(@pin_dir_name, 'w')
      update_direction(direction)
    else
      @gpio_valid = false
      puts "#{@pin_dir_name} is not writable. Fix permissions or run as super user."
    end
    @pin_val_obj = File.open(@pin_val_name, 'r+') if @gpio_valid
  end
end

Instance Attribute Details

#gpio_validObject (readonly)

Returns the value of attribute gpio_valid.



48
49
50
# File 'lib/origen_link/server/pin.rb', line 48

def gpio_valid
  @gpio_valid
end

Instance Method Details

#destroyObject



77
78
79
80
81
82
83
84
# File 'lib/origen_link/server/pin.rb', line 77

def destroy
  if @gpio_valid
    @pin_dir_obj.close
    @pin_val_obj.close
    # system("echo #{@ionumber} > /sys/class/gpio/unexport")
    # puts "pin #{@ionumber} is no longer exported"
  end
end

#inObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/origen_link/server/pin.rb', line 96

def in
  if @gpio_valid
    if @direction == :out
      update_direction(:in)
    end
    # below is original read - slow to reopen every time
    # File.open(@pin_val_name, 'r') do |file|
    #  file.read#.chomp
    # end
    # end original read
    @pin_val_obj.pos = 0
    @pin_val_obj.getc
  end
end

#out(value) ⇒ Object



86
87
88
89
90
91
92
93
94
# File 'lib/origen_link/server/pin.rb', line 86

def out(value)
  if @gpio_valid
    if @direction == :in
      update_direction(:out)
    end
    @pin_val_obj.write(value)
    @pin_val_obj.flush
  end
end

#to_sObject



120
121
122
# File 'lib/origen_link/server/pin.rb', line 120

def to_s
  'OrigenLinkPin' + @ionumber.to_s
end

#update_direction(direction) ⇒ Object



111
112
113
114
115
116
117
118
# File 'lib/origen_link/server/pin.rb', line 111

def update_direction(direction)
  if @gpio_valid
    @pin_dir_obj.pos = 0
    @pin_dir_obj.write(@@pin_setup[direction])
    @pin_dir_obj.flush
    @direction = direction
  end
end