cgpio 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0091850b19f944b1602e67b59b074360e035db7
4
- data.tar.gz: 8a679bd1fa1ff4eaecd619dc669cdb92a967f42c
3
+ metadata.gz: 35a8a5032424dc30fda2e8c0eb848e508cb3b9a5
4
+ data.tar.gz: 69606dbcb7728573176b25ef4a130cae028519a3
5
5
  SHA512:
6
- metadata.gz: 24258270b27a4f8ed06642aeb34df899ca03ae400c0ea7ffea8040618973865e03895934e6ecb06598a008d3dd06a90ec12b6df686b9a1f1340e68847b473573
7
- data.tar.gz: 3c36f48dd452387081633547c925a4c508aec663530b8104ce779ec433e37d1dee775e3be5a32a2683f80c23fa0b837176a5c9228a2eac82f9d23481187d696c
6
+ metadata.gz: 1087a17b35e4ec77e22c06db7651060258247a1affe00bae3fa149baf3c23b789a9a6ea93664a98214f45016cb4da30425805ff9383ca5efa69180692b1a1b21
7
+ data.tar.gz: d2c4343dd1ae15c68cf8627ea1b469b3c0ee6547328cdb006c1e4d804709c9a0ac2ee16076538017de26d86ed55ef45f3d33ae554bc129840a73d12daa54b587
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in cgpio.gemspec
4
4
  gemspec
5
-
6
- gem "rake"
7
- gem "rake-compiler"
data/README.md CHANGED
@@ -2,13 +2,29 @@
2
2
 
3
3
  A simple GPIO Wrapper in Ruby (which uses C to access the SYSFS structures)
4
4
 
5
- Tested only with Beaglebone Black.
5
+ ```ruby
6
+ require 'cgpio'
7
+
8
+ # switch on a led on port 48
9
+ led = Cgpio::Gpio.new(48)
10
+ led.on
11
+ ```
12
+
13
+ Tested with Linux-Kernel Version "4.1.6" on
14
+ * [Beaglebone Black](http://beagleboard.org/black)
15
+ * [Raspberry Pi Model B+](https://www.raspberrypi.org/products/model-b-plus/)
6
16
 
7
17
  WARN: the gem is not stable yet!
8
18
 
9
19
  ## Features
10
20
  * set/get value
11
21
  * set/get direction
22
+ * virtual GPIO
23
+
24
+ ## Installation
25
+ ```
26
+ gem install cgpio
27
+ ```
12
28
 
13
29
  ## Usage
14
30
  ### Example
@@ -64,7 +80,6 @@ led.on
64
80
  led.value = false
65
81
  # or
66
82
  led.off
67
-
68
83
  ```
69
84
 
70
85
  ### Read value of port
@@ -74,6 +89,25 @@ val = switch.on?
74
89
  val = switch.off?
75
90
  ```
76
91
 
92
+ ### Get static info about port
93
+ ```ruby
94
+ # get port number
95
+ nr = port.nr
96
+ ```
97
+
98
+ ### Virtual GPIO
99
+ When you want to run your program on a hardware which don't have GPIO, you can
100
+ use virtual GPIOs.
101
+
102
+ For this you have to configure the Cgpio before you use it:
103
+ ```ruby
104
+ # put this at the beginning of your program
105
+ Cgpio.configure do |config|
106
+ # use virtual gpio instead of real gpio
107
+ config.virtual = true
108
+ end
109
+ ```
110
+
77
111
  ## License
78
112
 
79
113
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/cgpio.gemspec CHANGED
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
  spec.extensions = %w[ext/cgpio/extconf.rb]
22
+ spec.required_ruby_version = '~> 2.2'
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.10"
24
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rake-compiler", "~> 0.9"
25
27
  end
data/ext/cgpio/cgpio.c CHANGED
@@ -126,18 +126,18 @@ void
126
126
  Init_cgpio()
127
127
  {
128
128
  VALUE module_Cgpio;
129
- VALUE class_Gpio;
129
+ VALUE class_RealGpio;
130
130
 
131
131
  // get module
132
132
  module_Cgpio = rb_const_get(rb_cObject, rb_intern("Cgpio"));
133
133
 
134
134
  // get class
135
- class_Gpio = rb_const_get(module_Cgpio, rb_intern("Gpio"));
136
-
137
- rb_define_alloc_func(class_Gpio, cgpio_alloc);
138
- rb_define_private_method(class_Gpio, "setup", cgpio_setup, 1);
139
- rb_define_private_method(class_Gpio, "set_direction", cgpio_set_direction, 1);
140
- rb_define_private_method(class_Gpio, "get_direction", cgpio_get_direction, 0);
141
- rb_define_method(class_Gpio, "value=", cgpio_set_value, 1);
142
- rb_define_method(class_Gpio, "value", cgpio_get_value, 0);
135
+ class_RealGpio = rb_const_get(module_Cgpio, rb_intern("RealGpio"));
136
+
137
+ rb_define_alloc_func(class_RealGpio, cgpio_alloc);
138
+ rb_define_private_method(class_RealGpio, "setup", cgpio_setup, 1);
139
+ rb_define_private_method(class_RealGpio, "set_direction", cgpio_set_direction, 1);
140
+ rb_define_private_method(class_RealGpio, "get_direction", cgpio_get_direction, 0);
141
+ rb_define_method(class_RealGpio, "value=", cgpio_set_value, 1);
142
+ rb_define_method(class_RealGpio, "value", cgpio_get_value, 0);
143
143
  }
data/ext/cgpio/extconf.rb CHANGED
@@ -1,3 +1,6 @@
1
- require "mkmf"
1
+ require 'mkmf'
2
2
 
3
- create_makefile "cgpio/cgpio"
3
+ find_executable('make') or abort "can't find make. please install it."
4
+ find_executable('gcc') or abort "can't find gcc. please install it."
5
+
6
+ create_makefile 'cgpio/cgpio'
data/lib/cgpio.rb CHANGED
@@ -1,61 +1,24 @@
1
- require "cgpio/version"
1
+ require 'cgpio/version'
2
+ require 'cgpio/gpio'
3
+ require 'cgpio/configuration'
2
4
 
3
- module Cgpio
4
- class Gpio
5
-
6
- attr_reader :pin
7
-
8
- def initialize(pin, options={})
9
- options = {
10
- direction: :out
11
- }.merge(options)
12
-
13
- @pin = pin
14
-
15
- # this will export the pin
16
- setup @pin
17
-
18
- # set the initial direction
19
- self.direction = options[:direction]
20
- end
21
-
22
- def direction=(direction)
23
- if direction == :out
24
- # direction values defined in ext/cgpio/gpio.h
25
- set_direction(0x01)
26
- elsif direction == :in
27
- set_direction(0x02)
28
- else
29
- raise "unsupported gpio direction. use :out or :in"
30
- end
31
- end
32
-
33
- def direction
34
- if (get_direction == 0x01)
35
- :out
36
- elsif (get_direction == 0x02)
37
- :in
38
- else
39
- raise "unknown gpio direction"
40
- end
41
- end
5
+ # include c extensions
6
+ require 'cgpio/cgpio'
42
7
 
43
- def on
44
- self.value = true
45
- end
8
+ module Cgpio
9
+ class << self
10
+ attr_accessor :configuration
11
+ end
46
12
 
47
- def off
48
- self.value = false
49
- end
13
+ def self.configuration
14
+ @configuration ||= Configuration.new
15
+ end
50
16
 
51
- def on?
52
- self.value
53
- end
17
+ def self.reset
18
+ @configuration = Configuration.new
19
+ end
54
20
 
55
- def off?
56
- !self.value
57
- end
21
+ def self.configure
22
+ yield configuration
58
23
  end
59
24
  end
60
-
61
- require 'cgpio/cgpio'
@@ -0,0 +1,7 @@
1
+ class Cgpio::Configuration
2
+ attr_accessor :virtual
3
+
4
+ def initialize()
5
+ @virtual = false
6
+ end
7
+ end
data/lib/cgpio/gpio.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'cgpio/real_gpio'
2
+ require 'cgpio/virtual_gpio'
3
+
4
+ class Cgpio::Gpio
5
+ def self.new(nr, options={})
6
+ if Cgpio.configuration.virtual
7
+ Cgpio::VirtualGpio.new(nr, options)
8
+ else
9
+ Cgpio::RealGpio.new(nr, options)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,55 @@
1
+ class Cgpio::RealGpio
2
+
3
+ attr_reader :nr
4
+
5
+ def initialize(nr, options={})
6
+ options = {
7
+ direction: :out
8
+ }.merge(options)
9
+
10
+ @nr = nr
11
+
12
+ # this will export the pin
13
+ setup @nr
14
+
15
+ # set the initial direction
16
+ self.direction = options[:direction]
17
+ end
18
+
19
+ def direction=(direction)
20
+ if direction == :out
21
+ # direction values defined in ext/cgpio/gpio.h
22
+ set_direction(0x01)
23
+ elsif direction == :in
24
+ set_direction(0x02)
25
+ else
26
+ raise "unsupported gpio direction. use :out or :in"
27
+ end
28
+ end
29
+
30
+ def direction
31
+ if (get_direction == 0x01)
32
+ :out
33
+ elsif (get_direction == 0x02)
34
+ :in
35
+ else
36
+ raise "unknown gpio direction"
37
+ end
38
+ end
39
+
40
+ def on
41
+ self.value = true
42
+ end
43
+
44
+ def off
45
+ self.value = false
46
+ end
47
+
48
+ def on?
49
+ self.value
50
+ end
51
+
52
+ def off?
53
+ !self.value
54
+ end
55
+ end
data/lib/cgpio/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cgpio
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,53 @@
1
+ class Cgpio::VirtualGpio
2
+ attr_reader :nr
3
+
4
+ def initialize(nr, options={})
5
+ options = {
6
+ direction: :out
7
+ }.merge(options)
8
+
9
+ @nr = nr
10
+ @value = false
11
+
12
+ # set the initial direction
13
+ self.direction = options[:direction]
14
+ end
15
+
16
+ def direction=(direction)
17
+ if direction == :out
18
+ @direction = 0x01
19
+ elsif direction == :in
20
+ @direction = 0x02
21
+ else
22
+ raise "unsupported gpio direction. use :out or :in"
23
+ end
24
+ end
25
+
26
+ def value
27
+ @value
28
+ end
29
+
30
+ def value=(val)
31
+ @value = val
32
+ end
33
+
34
+ def direction
35
+ @direction
36
+ end
37
+
38
+ def on
39
+ self.value = true
40
+ end
41
+
42
+ def off
43
+ self.value = false
44
+ end
45
+
46
+ def on?
47
+ value
48
+ end
49
+
50
+ def off?
51
+ !value
52
+ end
53
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cgpio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maximilian Etti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-29 00:00:00.000000000 Z
11
+ date: 2015-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
41
55
  description: A simple GPIO C Wrapper for Beaglebone Black.
42
56
  email:
43
57
  - maximilian_etti@yahoo.de
@@ -60,7 +74,11 @@ files:
60
74
  - ext/cgpio/gpio.c
61
75
  - ext/cgpio/gpio.h
62
76
  - lib/cgpio.rb
77
+ - lib/cgpio/configuration.rb
78
+ - lib/cgpio/gpio.rb
79
+ - lib/cgpio/real_gpio.rb
63
80
  - lib/cgpio/version.rb
81
+ - lib/cgpio/virtual_gpio.rb
64
82
  homepage: http://github.com/metix/cgpio
65
83
  licenses:
66
84
  - MIT
@@ -71,9 +89,9 @@ require_paths:
71
89
  - lib
72
90
  required_ruby_version: !ruby/object:Gem::Requirement
73
91
  requirements:
74
- - - ">="
92
+ - - "~>"
75
93
  - !ruby/object:Gem::Version
76
- version: '0'
94
+ version: '2.2'
77
95
  required_rubygems_version: !ruby/object:Gem::Requirement
78
96
  requirements:
79
97
  - - ">="