Class: OrigenLink::Server::Pin
- Inherits:
-
Object
- Object
- OrigenLink::Server::Pin
- Defined in:
- lib/origen_link/server/pin.rb
Constant Summary collapse
- @@pin_setup =
{ in: 'in', out: 'out' }
Instance Attribute Summary collapse
-
#gpio_valid ⇒ Object
readonly
Returns the value of attribute gpio_valid.
Instance Method Summary collapse
- #destroy ⇒ Object
- #in ⇒ Object
-
#initialize(ionumber, direction = :in) ⇒ Pin
constructor
A new instance of Pin.
- #out(value) ⇒ Object
- #to_s ⇒ Object
- #update_direction(direction) ⇒ Object
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_valid ⇒ Object (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
#destroy ⇒ Object
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 |
#in ⇒ Object
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_s ⇒ Object
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 |