BBB 0.0.10 → 0.1.0

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.
Files changed (54) hide show
  1. data/lib/BBB.rb +13 -17
  2. data/lib/BBB/application.rb +4 -21
  3. data/lib/BBB/circuit.rb +18 -33
  4. data/lib/BBB/components/analog_component.rb +29 -6
  5. data/lib/BBB/components/led.rb +39 -9
  6. data/lib/BBB/components/pinnable.rb +90 -4
  7. data/lib/BBB/components/servo.rb +43 -0
  8. data/lib/BBB/pins/analog_pin.rb +39 -0
  9. data/lib/BBB/pins/digital_pin.rb +106 -0
  10. data/lib/BBB/pins/io/ain.rb +58 -0
  11. data/lib/BBB/pins/io/gpio.rb +77 -0
  12. data/lib/BBB/pins/io/mapped.rb +39 -0
  13. data/lib/BBB/pins/io/pin_mapper.rb +224 -0
  14. data/lib/BBB/pins/io/pwm.rb +61 -0
  15. data/lib/BBB/pins/pinnable.rb +78 -0
  16. data/lib/BBB/pins/pwm_pin.rb +43 -0
  17. data/lib/BBB/version.rb +1 -1
  18. data/spec/application_spec.rb +1 -26
  19. data/spec/circuit_spec.rb +0 -1
  20. data/spec/components/analog_component_spec.rb +36 -0
  21. data/spec/components/led_spec.rb +14 -19
  22. data/spec/components/pinnable_spec.rb +73 -8
  23. data/spec/components/servo_spec.rb +6 -0
  24. data/spec/pins/analog_pin_spec.rb +33 -0
  25. data/spec/pins/digital_input_pin_spec.rb +13 -0
  26. data/spec/pins/digital_output_pin_spec.rb +14 -0
  27. data/spec/pins/digital_pin_spec.rb +66 -0
  28. data/spec/pins/io/mapped_spec.rb +41 -0
  29. data/spec/{board → pins/io}/pin_mapper_spec.rb +2 -2
  30. data/spec/pins/pinnable_spec.rb +68 -0
  31. data/spec/pins/pwm_pin_spec.rb +29 -0
  32. metadata +34 -37
  33. data/lib/BBB/adc/analog_pin.rb +0 -42
  34. data/lib/BBB/adc/setup.rb +0 -20
  35. data/lib/BBB/board/base.rb +0 -45
  36. data/lib/BBB/board/json_pin_mapper.rb +0 -203
  37. data/lib/BBB/board/pin_mapper.rb +0 -20
  38. data/lib/BBB/board/test_board.rb +0 -12
  39. data/lib/BBB/gpio/base.rb +0 -56
  40. data/lib/BBB/gpio/digital_pin.rb +0 -69
  41. data/lib/BBB/gpio/pin_converter.rb +0 -28
  42. data/lib/BBB/io/analog_pin.rb +0 -24
  43. data/lib/BBB/io/digital_pin.rb +0 -67
  44. data/lib/BBB/io/mock_pin.rb +0 -8
  45. data/lib/BBB/io/pinnable.rb +0 -12
  46. data/spec/adc/analog_pin_spec.rb +0 -100
  47. data/spec/adc/setup_spec.rb +0 -9
  48. data/spec/board/board_spec.rb +0 -49
  49. data/spec/gpio/base_spec.rb +0 -48
  50. data/spec/gpio/digital_pin_spec.rb +0 -100
  51. data/spec/gpio/pin_converter_spec.rb +0 -19
  52. data/spec/io/digital_pin_spec.rb +0 -14
  53. data/spec/io/mock_pin_spec.rb +0 -13
  54. data/spec/io/pinnable_spec.rb +0 -13
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::AnalogPin do
4
+ let(:pin) { BBB::Pins::AnalogPin.new(:P8_4, mock: true)}
5
+
6
+ it "includes pinnable" do
7
+ pin.pinnable?.should be_true
8
+ end
9
+
10
+ it "#read from io" do
11
+ pin.io.should_receive(:read)
12
+ pin.read
13
+ end
14
+
15
+ it "#scale from io" do
16
+ pin.io.should_receive(:scale)
17
+ pin.scale
18
+ end
19
+
20
+ it "#scale memorizes the scale" do
21
+ pin.io.should_receive(:scale).once.and_return(100)
22
+ pin.scale
23
+ pin.scale.should eql(100)
24
+ end
25
+
26
+ context "private methods: " do
27
+ it "sets default_io" do
28
+ BBB::Pins::IO::AIN.should_receive(:new)
29
+ pin.send(:default_io)
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::DigitalInputPin do
4
+ let(:pin) { BBB::Pins::DigitalInputPin.new(:P8_4, mock: true)}
5
+
6
+ it "initializes with the direction :input" do
7
+ pin.direction.should eql(:input)
8
+ end
9
+
10
+ it "is a kind of digital pin" do
11
+ pin.kind_of?(BBB::Pins::DigitalPin).should be_true
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::DigitalOutputPin do
4
+ let(:pin) { BBB::Pins::DigitalOutputPin.new(:P8_4, mock: true)}
5
+
6
+ it "initializes with the direction :output" do
7
+ pin.direction.should eql(:output)
8
+ end
9
+
10
+ it "is a kind of digital pin" do
11
+ pin.kind_of?(BBB::Pins::DigitalPin).should be_true
12
+ end
13
+ end
14
+
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::DigitalPin do
4
+ let(:input) { BBB::Pins::DigitalPin.new(:P8_4,
5
+ direction: :input,
6
+ mock: true)}
7
+ let(:output) { BBB::Pins::DigitalPin.new(:P8_4,
8
+ direction: :output,
9
+ mock: true)}
10
+
11
+ context "all pins" do
12
+ it "includes pinnable" do
13
+ input.pinnable?.should be_true
14
+ end
15
+
16
+ it "#direction gets memoized" do
17
+ input.opts.should_receive(:fetch).with(:direction).once
18
+ .and_return(:input)
19
+ 2.times do
20
+ input.direction
21
+ end
22
+
23
+ input.direction.should eql(:input)
24
+ end
25
+ end
26
+
27
+ context "input pins" do
28
+
29
+ it "#status forwards to io" do
30
+ input.io.should_receive(:read)
31
+ input.status
32
+ end
33
+
34
+ end
35
+
36
+ context "output pins" do
37
+
38
+ it "#off! #on!" do
39
+ output.off!
40
+ output.off?.should be_true
41
+ output.on?.should be_false
42
+
43
+ output.on!
44
+ output.on?.should be_true
45
+ output.off?.should be_false
46
+ end
47
+
48
+ it "#on! #off!" do
49
+ output.on!
50
+ output.on?.should be_true
51
+ output.off?.should be_false
52
+
53
+ output.off!
54
+ output.off?.should be_true
55
+ output.on?.should be_false
56
+ end
57
+
58
+ end
59
+
60
+ context "private methods: " do
61
+ it "sets default_io" do
62
+ BBB::Pins::IO::GPIO.should_receive(:new)
63
+ input.send(:default_io)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::IO::Mapped do
4
+ class MockIO
5
+ include BBB::Pins::IO::Mapped
6
+ attr_reader :position
7
+
8
+ def initialize(position)
9
+ @position = position
10
+ end
11
+ end
12
+
13
+ it "maps GPIO pins" do
14
+ m = MockIO.new(:P8_3)
15
+ m.should_receive(:pin_map_key).and_return(:gpio)
16
+ m.pin_map
17
+ end
18
+
19
+ it "maps AIN pins" do
20
+ m = MockIO.new(:P9_40)
21
+ m.should_receive(:pin_map_key).and_return(:ain)
22
+ m.pin_map
23
+ end
24
+
25
+
26
+ it "maps PWM pins" do
27
+ m = MockIO.new(:P9_14)
28
+ m.should_receive(:pin_map_key).and_return(:pwm)
29
+ m.pin_map
30
+ end
31
+
32
+ it "raises an argumenterror if a pin doesn't support the io type" do
33
+ m = MockIO.new(:P8_1)
34
+ m.should_receive(:pin_map_key).and_return(:pwm)
35
+ lambda do
36
+ m.pin_map
37
+ end.should raise_error(ArgumentError)
38
+ end
39
+
40
+ end
41
+
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe BBB::Board::PinMapper do
4
- let(:mapper) { BBB::Board::PinMapper }
3
+ describe BBB::Pins::IO::PinMapper do
4
+ let(:mapper) { BBB::Pins::IO::PinMapper }
5
5
 
6
6
  it "should be able to map" do
7
7
  mapper.map(:P8_3).gpio.should eql(38)
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::Pinnable do
4
+ class MockPin
5
+ include BBB::Pins::Pinnable
6
+ end
7
+
8
+ let(:pin) { MockPin.new(:P8_13) }
9
+
10
+ it "returns true to pinnable?" do
11
+ pin.pinnable?.should be_true
12
+ end
13
+
14
+ context "initialization" do
15
+ it "sets @position" do
16
+ pin.position.should eql(:P8_13)
17
+ end
18
+
19
+ it "sets @opts" do
20
+ pin = MockPin.new(:P8_13, foo: "bar")
21
+ pin.opts.should eql({foo: "bar"})
22
+ end
23
+ end
24
+
25
+
26
+ context "mocking" do
27
+ it "sets mock when initialized with mock" do
28
+ pin = MockPin.new(:P8_13, mock: true)
29
+ pin.mock?.should be_true
30
+ end
31
+
32
+ it "sets no mock when not initialized with mock" do
33
+ pin = MockPin.new(:P8_13, mock: false)
34
+ pin.mock?.should be_false
35
+
36
+ pin = MockPin.new(:P8_13)
37
+ pin.mock?.should be_false
38
+ end
39
+ end
40
+
41
+ context "io" do
42
+ it "mock_io when mock given" do
43
+ pin = MockPin.new(:P8_13, mock: true)
44
+ pin.io.kind_of?(StringIO).should be_true
45
+ end
46
+
47
+ it "default_io when no mock given" do
48
+ lambda do
49
+ pin = MockPin.new(:P8_13, mock: false)
50
+ pin.io
51
+ end.should raise_error(NotImplementedError)
52
+ end
53
+ end
54
+
55
+ context "private methods" do
56
+ it "raises error on #default_io" do
57
+ lambda do
58
+ pin.send(:default_io)
59
+ end.should raise_error(NotImplementedError)
60
+ end
61
+
62
+ it "returns StringIO on #mock_io" do
63
+ StringIO.should_receive(:new).and_return("foo")
64
+ pin.send(:mock_io).should eql("foo")
65
+ end
66
+ end
67
+
68
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe BBB::Pins::PWMPin do
4
+ let(:pin) { BBB::Pins::PWMPin.new(:P8_14, mock: true) }
5
+
6
+ it "includes pinnable" do
7
+ pin.pinnable?.should be_true
8
+ end
9
+
10
+ %w(duty polarity period run).each do |method|
11
+ it "##{method}=(value) && ##{method}" do
12
+ pin.public_send("#{method}=", 123)
13
+ pin.public_send(method).should eql(123)
14
+ end
15
+
16
+ it "##{method}=(value) converts to ints" do
17
+ pin.public_send("#{method}=", 123.123)
18
+ pin.public_send(method).should eql(123)
19
+ end
20
+ end
21
+
22
+ context "private methods" do
23
+ it "should default to PWM" do
24
+ BBB::Pins::IO::PWM.should_receive(:new)
25
+ pin.send(:default_io)
26
+ end
27
+ end
28
+
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: BBB
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.1.0
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-12-18 00:00:00.000000000 Z
12
+ date: 2013-12-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -93,42 +93,39 @@ files:
93
93
  - examples/light_switch.rb
94
94
  - examples/sketches.rb
95
95
  - lib/BBB.rb
96
- - lib/BBB/adc/analog_pin.rb
97
- - lib/BBB/adc/setup.rb
98
96
  - lib/BBB/application.rb
99
- - lib/BBB/board/base.rb
100
- - lib/BBB/board/json_pin_mapper.rb
101
- - lib/BBB/board/pin_mapper.rb
102
- - lib/BBB/board/test_board.rb
103
97
  - lib/BBB/circuit.rb
104
98
  - lib/BBB/components/analog_component.rb
105
99
  - lib/BBB/components/led.rb
106
100
  - lib/BBB/components/pinnable.rb
101
+ - lib/BBB/components/servo.rb
107
102
  - lib/BBB/exceptions.rb
108
- - lib/BBB/gpio/base.rb
109
- - lib/BBB/gpio/digital_pin.rb
110
- - lib/BBB/gpio/pin_converter.rb
111
- - lib/BBB/io/analog_pin.rb
112
- - lib/BBB/io/digital_pin.rb
113
- - lib/BBB/io/mock_pin.rb
114
- - lib/BBB/io/pinnable.rb
103
+ - lib/BBB/pins/analog_pin.rb
104
+ - lib/BBB/pins/digital_pin.rb
105
+ - lib/BBB/pins/io/ain.rb
106
+ - lib/BBB/pins/io/gpio.rb
107
+ - lib/BBB/pins/io/mapped.rb
108
+ - lib/BBB/pins/io/pin_mapper.rb
109
+ - lib/BBB/pins/io/pwm.rb
110
+ - lib/BBB/pins/pinnable.rb
111
+ - lib/BBB/pins/pwm_pin.rb
115
112
  - lib/BBB/version.rb
116
113
  - resources/pin_mappings.json
117
114
  - resources/pin_mappings.json.comment
118
- - spec/adc/analog_pin_spec.rb
119
- - spec/adc/setup_spec.rb
120
115
  - spec/application_spec.rb
121
- - spec/board/board_spec.rb
122
- - spec/board/pin_mapper_spec.rb
123
116
  - spec/circuit_spec.rb
117
+ - spec/components/analog_component_spec.rb
124
118
  - spec/components/led_spec.rb
125
119
  - spec/components/pinnable_spec.rb
126
- - spec/gpio/base_spec.rb
127
- - spec/gpio/digital_pin_spec.rb
128
- - spec/gpio/pin_converter_spec.rb
129
- - spec/io/digital_pin_spec.rb
130
- - spec/io/mock_pin_spec.rb
131
- - spec/io/pinnable_spec.rb
120
+ - spec/components/servo_spec.rb
121
+ - spec/pins/analog_pin_spec.rb
122
+ - spec/pins/digital_input_pin_spec.rb
123
+ - spec/pins/digital_output_pin_spec.rb
124
+ - spec/pins/digital_pin_spec.rb
125
+ - spec/pins/io/mapped_spec.rb
126
+ - spec/pins/io/pin_mapper_spec.rb
127
+ - spec/pins/pinnable_spec.rb
128
+ - spec/pins/pwm_pin_spec.rb
132
129
  - spec/spec_helper.rb
133
130
  homepage:
134
131
  licenses:
@@ -145,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
142
  version: '0'
146
143
  segments:
147
144
  - 0
148
- hash: -1458336021692175408
145
+ hash: -2248503626551464727
149
146
  required_rubygems_version: !ruby/object:Gem::Requirement
150
147
  none: false
151
148
  requirements:
@@ -154,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
151
  version: '0'
155
152
  segments:
156
153
  - 0
157
- hash: -1458336021692175408
154
+ hash: -2248503626551464727
158
155
  requirements: []
159
156
  rubyforge_project:
160
157
  rubygems_version: 1.8.25
@@ -162,18 +159,18 @@ signing_key:
162
159
  specification_version: 3
163
160
  summary: Helper functions to ruby around on the BeagleBone Black
164
161
  test_files:
165
- - spec/adc/analog_pin_spec.rb
166
- - spec/adc/setup_spec.rb
167
162
  - spec/application_spec.rb
168
- - spec/board/board_spec.rb
169
- - spec/board/pin_mapper_spec.rb
170
163
  - spec/circuit_spec.rb
164
+ - spec/components/analog_component_spec.rb
171
165
  - spec/components/led_spec.rb
172
166
  - spec/components/pinnable_spec.rb
173
- - spec/gpio/base_spec.rb
174
- - spec/gpio/digital_pin_spec.rb
175
- - spec/gpio/pin_converter_spec.rb
176
- - spec/io/digital_pin_spec.rb
177
- - spec/io/mock_pin_spec.rb
178
- - spec/io/pinnable_spec.rb
167
+ - spec/components/servo_spec.rb
168
+ - spec/pins/analog_pin_spec.rb
169
+ - spec/pins/digital_input_pin_spec.rb
170
+ - spec/pins/digital_output_pin_spec.rb
171
+ - spec/pins/digital_pin_spec.rb
172
+ - spec/pins/io/mapped_spec.rb
173
+ - spec/pins/io/pin_mapper_spec.rb
174
+ - spec/pins/pinnable_spec.rb
175
+ - spec/pins/pwm_pin_spec.rb
179
176
  - spec/spec_helper.rb
@@ -1,42 +0,0 @@
1
- module BBB
2
- module ADC
3
- class AnalogPin
4
- attr_reader :position, :pin_map, :mock
5
- attr_reader :file_handle
6
-
7
- def initialize(position, opts={})
8
- self.position = position
9
- @mock = opts.fetch(:mock, false)
10
- @file_handle = get_file_handle(mock)
11
- end
12
-
13
- def position=(position)
14
- map = Board::PinMapper.map(position, :ain)
15
- unless map.respond_to?(:ain) && !map.ain.nil?
16
- raise ArgumentError, "#{position} is not a valid AIN pin position"
17
- end
18
-
19
- @pin_map = map
20
- @position = position
21
- end
22
-
23
- def ain_path
24
- "/sys/devices/ocp.3/helper.15/AIN#{pin_map.ain}"
25
- end
26
-
27
- def read
28
- file_handle.rewind
29
- file_handle.read.to_i
30
- end
31
-
32
- def scale
33
- pin_map.scale
34
- end
35
-
36
- def get_file_handle(mock=false)
37
- mock ? StringIO.new : File.open(ain_path, "r")
38
- end
39
-
40
- end
41
- end
42
- end