pi_piper 1.0.2 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('pi_piper', '1.0.2') do |p|
5
+ Echoe.new('pi_piper', '1.1') do |p|
6
6
  p.description = "Event driven Raspberry Pi GPIO library"
7
7
  p.url = "http://github.com/jwhitehorn/pi_piper"
8
8
  p.author = "Jason Whitehorn"
@@ -4,10 +4,9 @@ module PiPiper
4
4
 
5
5
  def PiPiper.watch(options)
6
6
  Thread.new do
7
+ pin = PiPiper::Pin.new(options)
7
8
  loop do
8
- sleep_time = options[:poll] || 0.1
9
- pin = PiPiper::Pin.new(:pin => options[:pin])
10
- until pin.changed? do sleep sleep_time end
9
+ pin.wait_for_change
11
10
  yield pin
12
11
  end
13
12
  end.abort_on_exception = true
@@ -1,20 +1,20 @@
1
1
  module PiPiper
2
2
  class Pin
3
- attr_reader :pin, :last_value, :direction, :invert
3
+ attr_reader :pin, :last_value, :value, :direction, :invert
4
4
 
5
5
  def initialize(options)
6
6
  @pin = options[:pin]
7
7
  @direction = options[:direction].nil? ? :in : options[:direction]
8
8
  @invert = options[:invert].nil? ? false : options[:invert]
9
-
9
+
10
10
  File.open("/sys/class/gpio/export", "w") { |f| f.write("#{@pin}") }
11
- File.open("/sys/class/gpio/gpio#{pin}/direction", "w") { |f| f.write(@direction == :out ? "out" : "in") }
11
+ File.open(direction_file, "w") { |f| f.write(@direction == :out ? "out" : "in") }
12
12
 
13
- @last_value = value
13
+ read
14
14
  end
15
15
 
16
16
  def on
17
- File.open(filename, 'w') {|f| f.write("1") } if direction == :out
17
+ File.open(value_file, 'w') {|f| f.write("1") } if direction == :out
18
18
  end
19
19
 
20
20
  def on?
@@ -22,7 +22,7 @@ module PiPiper
22
22
  end
23
23
 
24
24
  def off
25
- File.open(filename, 'w') {|f| f.write("0") } if direction == :out
25
+ File.open(value_file, 'w') {|f| f.write("0") } if direction == :out
26
26
  end
27
27
 
28
28
  def off?
@@ -32,16 +32,36 @@ module PiPiper
32
32
  def changed?
33
33
  last_value != value
34
34
  end
35
+
36
+ def wait_for_change
37
+ fd = File.open(value_file, "r")
38
+ File.open(edge_file, "w") { |f| f.write("both") }
39
+ loop do
40
+ fd.read
41
+ IO.select(nil, nil, [fd], nil)
42
+ read
43
+ break if changed?
44
+ end
45
+ end
35
46
 
36
- def value
37
- val = File.read(filename).to_i
38
- invert ? (val ^ 1) : val
47
+ def read
48
+ @last_value = @value
49
+ val = File.read(value_file).to_i
50
+ @value = invert ? (val ^ 1) : val
39
51
  end
40
52
 
41
53
  private
42
- def filename
54
+ def value_file
43
55
  "/sys/class/gpio/gpio#{pin}/value"
44
56
  end
57
+
58
+ def edge_file
59
+ "/sys/class/gpio/gpio#{pin}/edge"
60
+ end
61
+
62
+ def direction_file
63
+ "/sys/class/gpio/gpio#{pin}/direction"
64
+ end
45
65
 
46
66
  end
47
67
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "pi_piper"
5
- s.version = "1.0.2"
5
+ s.version = "1.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jason Whitehorn"]
9
- s.date = "2013-01-11"
9
+ s.date = "2013-01-12"
10
10
  s.description = "Event driven Raspberry Pi GPIO library"
11
11
  s.email = "jason.whitehorn@gmail.com"
12
12
  s.extra_rdoc_files = ["README.md", "lib/pi_piper.rb", "lib/pi_piper/pin.rb"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pi_piper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: '1.1'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-01-12 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Event driven Raspberry Pi GPIO library
15
15
  email: jason.whitehorn@gmail.com