object_oriented_beaglebone_black 0.0.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 +7 -0
- data/.gitignore +23 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +113 -0
- data/Rakefile +7 -0
- data/config/environments/development.yml +3 -0
- data/config/environments/production.yml +3 -0
- data/config/environments/test.yml +3 -0
- data/config/i2c.json +26 -0
- data/config/pin_index.json +1519 -0
- data/config/uarts.json +31 -0
- data/examples/current_measurement.rb +7 -0
- data/examples/current_measurement/current_input.rb +16 -0
- data/examples/voltage_measurement.rb +7 -0
- data/examples/voltage_measurement/voltage_input.rb +16 -0
- data/lib/object_oriented_beaglebone_black.rb +26 -0
- data/lib/object_oriented_beaglebone_black/analog_input.rb +43 -0
- data/lib/object_oriented_beaglebone_black/gpio.rb +40 -0
- data/lib/object_oriented_beaglebone_black/io.rb +34 -0
- data/lib/object_oriented_beaglebone_black/io/direction.rb +10 -0
- data/lib/object_oriented_beaglebone_black/io/value.rb +10 -0
- data/lib/object_oriented_beaglebone_black/led.rb +43 -0
- data/lib/object_oriented_beaglebone_black/pin_mappings.rb +25 -0
- data/lib/object_oriented_beaglebone_black/pwm.rb +58 -0
- data/lib/object_oriented_beaglebone_black/version.rb +3 -0
- data/object_orieted_beaglebone_black.gemspec +27 -0
- data/spec/examples/current_measurement/current_input_spec.rb +46 -0
- data/spec/examples/voltage_measurement/voltage_input_spec.rb +46 -0
- data/spec/object_oriented_beaglebone_black/analog_input_spec.rb +49 -0
- data/spec/object_oriented_beaglebone_black/gpio_spec.rb +66 -0
- data/spec/object_oriented_beaglebone_black/led_spec.rb +29 -0
- data/spec/object_oriented_beaglebone_black/pin_mappings_spec.rb +35 -0
- data/spec/object_oriented_beaglebone_black/pwm_spec.rb +57 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/support/analog_input_file_behavoir_helper.rb +34 -0
- data/spec/support/gpio_file_behavior_helper.rb +36 -0
- data/spec/support/pwm_file_behavior_helper.rb +23 -0
- metadata +138 -0
data/config/uarts.json
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
// Based on https://github.com/jadonk/bonescript/blob/master/src/bone.js
|
2
|
+
// The content is copied from there and key uarts" is added.
|
3
|
+
// The idea of adding that key to make the JSON structure in this file is coming from
|
4
|
+
// https://github.com/Sparkboxx/bbb/blob/master/resources/pin_mappings.json
|
5
|
+
{ "uarts" : {
|
6
|
+
"/dev/ttyO0": {
|
7
|
+
},
|
8
|
+
"/dev/ttyO1": {
|
9
|
+
"devicetree": "BB-UART1",
|
10
|
+
"rx": "P9_26",
|
11
|
+
"tx": "P9_24"
|
12
|
+
},
|
13
|
+
"/dev/ttyO2": {
|
14
|
+
"devicetree": "BB-UART2",
|
15
|
+
"rx": "P9_22",
|
16
|
+
"tx": "P9_21"
|
17
|
+
},
|
18
|
+
"/dev/ttyO3": {
|
19
|
+
},
|
20
|
+
"/dev/ttyO4": {
|
21
|
+
"devicetree": "BB-UART4",
|
22
|
+
"rx": "P9_11",
|
23
|
+
"tx": "P9_13"
|
24
|
+
},
|
25
|
+
"/dev/ttyO5": {
|
26
|
+
"devicetree": "BB-UART5",
|
27
|
+
"rx": "P8_38",
|
28
|
+
"tx": "P8_37"
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
module CurrentMeasurement
|
4
|
+
class CurrentInput
|
5
|
+
|
6
|
+
def initialize(pin_key)
|
7
|
+
@analog_input = ObjectOrientedBeagleboneBlack::AnalogInput.new(pin_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
# Conversion for ACS712 Breakout. If a different current measurement device is used, extract this code to subclass and make this class parent class.
|
12
|
+
(@analog_input.raw_value / BigDecimal("0.185")).to_f
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
module VoltageMeasurement
|
4
|
+
class VoltageInput
|
5
|
+
|
6
|
+
def initialize(pin_key)
|
7
|
+
@analog_input = ObjectOrientedBeagleboneBlack::AnalogInput.new(pin_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
# For voltage divider 11:1, e.g. 51[kΩ] and 5.1[kΩ]. If another voltage divider is added, extract this code to subclass and make this class parent class.
|
12
|
+
(@analog_input.raw_value * BigDecimal("11")).to_f
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "object_oriented_beaglebone_black/version"
|
2
|
+
require "erb"
|
3
|
+
|
4
|
+
OBJECT_ORIENTED_BEAGLEBONE_BLACK_ROOT = File.expand_path('..', __dir__)
|
5
|
+
|
6
|
+
require 'yaml'
|
7
|
+
# require 'active_support/core_ext/hash/keys'
|
8
|
+
|
9
|
+
ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"] ||= 'development'
|
10
|
+
OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG = YAML.load(ERB.new(File.read(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_ROOT, "config", "environments", "#{ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"]}.yml"))).result)
|
11
|
+
# YAML.load_file(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_ROOT, "config", "environments", "#{ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"]}.yml"))
|
12
|
+
# In order not to use activesupport (since Beaglebone Black that is used currently didn't have Internet access to download it), Hash#deep_symbolize_keys! is not used.
|
13
|
+
# OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG.deep_symbolize_keys!
|
14
|
+
|
15
|
+
require 'object_oriented_beaglebone_black/pin_mappings'
|
16
|
+
require 'object_oriented_beaglebone_black/io'
|
17
|
+
require 'object_oriented_beaglebone_black/io/direction'
|
18
|
+
require 'object_oriented_beaglebone_black/io/value'
|
19
|
+
require 'object_oriented_beaglebone_black/gpio'
|
20
|
+
require 'object_oriented_beaglebone_black/led'
|
21
|
+
require 'object_oriented_beaglebone_black/pwm'
|
22
|
+
require 'object_oriented_beaglebone_black/analog_input'
|
23
|
+
|
24
|
+
module ObjectOrientedBeagleboneBlack
|
25
|
+
# Your code goes here...
|
26
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
module ObjectOrientedBeagleboneBlack
|
4
|
+
class AnalogInput
|
5
|
+
include ObjectOrientedBeagleboneBlack::PinMappings
|
6
|
+
|
7
|
+
def initialize(pin_key)
|
8
|
+
@pin_key = pin_key
|
9
|
+
@slots_file_path = File.join(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["slots_directory"], "slots"))
|
10
|
+
|
11
|
+
activate_device_tree_overlays
|
12
|
+
end
|
13
|
+
|
14
|
+
def activate_device_tree_overlays
|
15
|
+
# Note: Since slots file acts as an interface to activate Device Tree Overlay, simply writing to it does what needs to be done.
|
16
|
+
# I'm using appending here so that testing in a local environment becomes straightfoward.
|
17
|
+
File.open(@slots_file_path, "a") { |file| file.write("cape-bone-iio") }
|
18
|
+
end
|
19
|
+
|
20
|
+
def raw_value
|
21
|
+
internal_raw_value = nil
|
22
|
+
File.open(File.join(analog_input_directory, pin_name(@pin_key)), "r") { |file| internal_raw_value = file.read.strip }
|
23
|
+
raw_value = (BigDecimal(internal_raw_value.to_s) / BigDecimal("1000")).to_f
|
24
|
+
raw_value
|
25
|
+
end
|
26
|
+
|
27
|
+
def value
|
28
|
+
# The raw_value is in the range of 0 to 1.8[V].
|
29
|
+
# The value is in the range of 0 to 1.0.
|
30
|
+
(BigDecimal(raw_value.to_s) * (BigDecimal("1.0") / BigDecimal("1.8"))).to_f
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def pin_name(pin_key)
|
35
|
+
property_hash(key: pin_key)["name"]
|
36
|
+
end
|
37
|
+
|
38
|
+
def analog_input_directory
|
39
|
+
Dir["#{File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["device_directory"], "helper.")}*"].first
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ObjectOrientedBeagleboneBlack
|
2
|
+
class Gpio
|
3
|
+
|
4
|
+
def initialize(pin_number)
|
5
|
+
@pin_number = pin_number
|
6
|
+
@gpio_directory = File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["io_root_directory"], "gpio")
|
7
|
+
end
|
8
|
+
|
9
|
+
def export
|
10
|
+
File.open(File.join(@gpio_directory, "export"), "w") { |file| file.write(@pin_number) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def unexport
|
14
|
+
File.open(File.join(@gpio_directory, "unexport"), "w") { |file| file.write(@pin_number) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def direction=(direction)
|
18
|
+
File.open(File.join(@gpio_directory, "gpio#{@pin_number}", "direction"), "w") { |file| file.write(direction) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def direction
|
22
|
+
# Using this instead of simple "File.open(file_path).read" in order to close file after reading.
|
23
|
+
direction = nil
|
24
|
+
File.open(File.join(@gpio_directory, "gpio#{@pin_number}", "direction"), "r") { |file| direction = file.read.strip }
|
25
|
+
direction
|
26
|
+
end
|
27
|
+
|
28
|
+
def value=(value)
|
29
|
+
File.open(File.join(@gpio_directory, "gpio#{@pin_number}", "value"), "w") { |file| file.write(value) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def value
|
33
|
+
# Using this instead of simple "File.open(file_path).read" in order to close file after reading.
|
34
|
+
value = nil
|
35
|
+
File.open(File.join(@gpio_directory, "gpio#{@pin_number}", "value"), "r") { |file| value = file.read.strip.to_i }
|
36
|
+
value
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module ObjectOrientedBeagleboneBlack
|
4
|
+
module IO
|
5
|
+
|
6
|
+
def file_directory_path
|
7
|
+
raise "#{__method__} method must be implemented in the class including this module"
|
8
|
+
end
|
9
|
+
|
10
|
+
def write_to_io_file(filename, value)
|
11
|
+
FileUtils.mkdir_p(file_directory_path, mode: 0700) unless Dir.exists?(file_directory_path)
|
12
|
+
file_path = File.join(file_directory_path, filename)
|
13
|
+
|
14
|
+
File.open(file_path, "w") do |file|
|
15
|
+
file.write(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def read_from_io_file(filename)
|
20
|
+
file_path = File.join(file_directory_path, filename)
|
21
|
+
|
22
|
+
if File.exists?(file_path)
|
23
|
+
file_content = nil
|
24
|
+
# Using this instead of simple "File.open(file_path).read" in order to close file after reading.
|
25
|
+
File.open(file_path) do |file|
|
26
|
+
file_content = file.read.strip
|
27
|
+
end
|
28
|
+
file_content
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module ObjectOrientedBeagleboneBlack
|
2
|
+
class Led
|
3
|
+
include ObjectOrientedBeagleboneBlack::PinMappings
|
4
|
+
include ObjectOrientedBeagleboneBlack::IO
|
5
|
+
|
6
|
+
LED_RELATIVE_DIRECTORY_PATTERN = "leds/beaglebone:green:%s"
|
7
|
+
TRIGGER_FILENAME = "trigger"
|
8
|
+
GPIO_FILENAME = "brightness"
|
9
|
+
|
10
|
+
def initialize(led_name)
|
11
|
+
@led_name = led_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def pin_mode=(pin_mode)
|
15
|
+
case pin_mode
|
16
|
+
when "out"
|
17
|
+
write_to_io_file(TRIGGER_FILENAME, "gpio")
|
18
|
+
else
|
19
|
+
raise "Invalid pin_mode for Led: #{pin_mode}. Must be 'out'"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def digital_write(state)
|
24
|
+
write_to_io_file(GPIO_FILENAME, state)
|
25
|
+
end
|
26
|
+
|
27
|
+
def state
|
28
|
+
state = read_from_io_file(GPIO_FILENAME)
|
29
|
+
begin
|
30
|
+
state.to_i
|
31
|
+
rescue
|
32
|
+
state
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def file_directory_path
|
38
|
+
internal_led_name = property_hash(name: @led_name)["led"]
|
39
|
+
File.expand_path(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["io_root_directory"], sprintf(LED_RELATIVE_DIRECTORY_PATTERN, internal_led_name)))
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'json'
|
2
|
+
# require 'active_support/core_ext/hash/keys'
|
3
|
+
|
4
|
+
module ObjectOrientedBeagleboneBlack
|
5
|
+
module PinMappings
|
6
|
+
|
7
|
+
def load_pin_index_array
|
8
|
+
# In order not to use activesupport (since Beaglebone Black that is used currently doesn't have Internet access to download it), Hash#deep_symbolize_keys! is not used.
|
9
|
+
# ::OBJECT_ORIENTED_BEAGLEBONE_BLACK_PIN_INDEX_ARRAY ||= JSON.load(File.read(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_ROOT, "config", "pin_index.json")))["pinIndex"].each { |property_hash| property_hash.deep_symbolize_keys! }
|
10
|
+
::OBJECT_ORIENTED_BEAGLEBONE_BLACK_PIN_INDEX_ARRAY ||= JSON.load(File.read(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_ROOT, "config", "pin_index.json")))["pinIndex"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def property_hash(name: nil, key: nil)
|
14
|
+
load_pin_index_array
|
15
|
+
|
16
|
+
if !name.nil?
|
17
|
+
::OBJECT_ORIENTED_BEAGLEBONE_BLACK_PIN_INDEX_ARRAY.select { |property_hash| property_hash["name"] == name }.first
|
18
|
+
elsif !key.nil?
|
19
|
+
::OBJECT_ORIENTED_BEAGLEBONE_BLACK_PIN_INDEX_ARRAY.select { |property_hash| property_hash["key"] == key }.first
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'bigdecimal'
|
2
|
+
|
3
|
+
module ObjectOrientedBeagleboneBlack
|
4
|
+
class Pwm
|
5
|
+
|
6
|
+
module Polarity
|
7
|
+
DIRECT = 0
|
8
|
+
INVERSE = 1
|
9
|
+
end
|
10
|
+
|
11
|
+
DUTY_VALUE_PER_ONE_HUNDREDTH = BigDecimal("5000")
|
12
|
+
|
13
|
+
def initialize(pin_key)
|
14
|
+
@pin_key = pin_key
|
15
|
+
@slots_file_path = File.join(File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["slots_directory"], "slots"))
|
16
|
+
|
17
|
+
activate_device_tree_overlays
|
18
|
+
end
|
19
|
+
|
20
|
+
def activate_device_tree_overlays
|
21
|
+
# Note: Since slots file acts as an interface to activate Device Tree Overlay, simply writing to it does what needs to be done.
|
22
|
+
# I'm using appending here so that testing in a local environment becomes straightfoward.
|
23
|
+
File.open(@slots_file_path, "a") { |file| file.write("am33xx_pwm") }
|
24
|
+
File.open(@slots_file_path, "a") { |file| file.write("bone_pwm_#{@pin_key}") }
|
25
|
+
end
|
26
|
+
|
27
|
+
# duty_cycle (value between 0 and 1)
|
28
|
+
def duty_cycle=(duty_cycle)
|
29
|
+
self.polarity = ObjectOrientedBeagleboneBlack::Pwm::Polarity::DIRECT
|
30
|
+
internal_duty_value = (BigDecimal(duty_cycle.to_s) * BigDecimal("100") * DUTY_VALUE_PER_ONE_HUNDREDTH).to_i
|
31
|
+
File.open(File.join(pwm_directory, "duty"), "w") { |file| file.write(internal_duty_value) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def duty_cycle
|
35
|
+
# Using this instead of simple "File.open(file_path).read" in order to close file after reading.
|
36
|
+
internal_duty_value = nil
|
37
|
+
File.open(File.join(pwm_directory, "duty"), "r") { |file| internal_duty_value = file.read.strip }
|
38
|
+
duty_cycle = (BigDecimal(internal_duty_value.to_s) / DUTY_VALUE_PER_ONE_HUNDREDTH / BigDecimal("100")).to_f
|
39
|
+
duty_cycle
|
40
|
+
end
|
41
|
+
|
42
|
+
def polarity=(polarity)
|
43
|
+
File.open(File.join(pwm_directory, "polarity"), "w") { |file| file.write(polarity) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def polarity
|
47
|
+
internal_polarity_value = nil
|
48
|
+
File.open(File.join(pwm_directory, "polarity"), "r") { |file| internal_polarity_value = file.read.strip.to_i }
|
49
|
+
internal_polarity_value
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def pwm_directory
|
54
|
+
Dir["#{File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["device_directory"], "pwm_test_#{@pin_key}.")}*"].first
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'object_oriented_beaglebone_black/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "object_oriented_beaglebone_black"
|
8
|
+
spec.version = ObjectOrientedBeagleboneBlack::VERSION
|
9
|
+
spec.authors = ["Tadatoshi Takahashi"]
|
10
|
+
spec.email = ["tadatoshi@gmail.com"]
|
11
|
+
spec.summary = %q{For using BeagleBone Black in Object-Oriented way through Ruby.}
|
12
|
+
spec.description = %q{Performs accessing GPIO, etc. in Object-Oriented way on BeagleBone Black through Ruby.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = '>= 2.1.2'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib", "examples"]
|
21
|
+
|
22
|
+
# spec.add_dependency "activesupport"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "rspec"
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'current_measurement'
|
3
|
+
require 'bigdecimal'
|
4
|
+
|
5
|
+
describe "Current measurement by ACS712 Breakout", analog_input: true do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
|
9
|
+
@slots_directory = OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["slots_directory"]
|
10
|
+
@device_directory = OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["device_directory"]
|
11
|
+
|
12
|
+
# In order to run this spec example in the real environment, the directories and files that already exist there are not created in that case.
|
13
|
+
if ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"] == 'test'
|
14
|
+
FileUtils.mkdir_p(@slots_directory, mode: 0700) unless Dir.exists?(@slots_directory)
|
15
|
+
FileUtils.touch(File.join(@slots_directory, "slots"))
|
16
|
+
File.chmod(0700, File.join(@slots_directory, "slots"))
|
17
|
+
|
18
|
+
FileUtils.mkdir_p(@device_directory, mode: 0700) unless Dir.exists?(@device_directory)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
after(:each) do
|
23
|
+
if ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"] == 'test'
|
24
|
+
File.open(File.join(@slots_directory, "slots"), 'w') {|file| file.truncate(0) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should calculated the measured current" do
|
29
|
+
|
30
|
+
pin_key = "P9_40"
|
31
|
+
expected_current = BigDecimal("10").to_f
|
32
|
+
expected_raw_value = (BigDecimal(expected_current.to_s) * BigDecimal("0.185")).to_f
|
33
|
+
|
34
|
+
current_input = CurrentMeasurement::CurrentInput.new(pin_key)
|
35
|
+
|
36
|
+
# Since the real "slots" file creates a directory structure when a device tree overlay is written to it,
|
37
|
+
# in the "test" environment with a regular file, it is mimiced here.
|
38
|
+
mimic_internal_analog_input_directory_creation(pin_key, expected_raw_value) if ENV["OBJECT_ORIENTED_BEAGLEBONE_BLACK_ENV"] == 'test'
|
39
|
+
|
40
|
+
expect(Dir.exists?(Dir["#{File.join(OBJECT_ORIENTED_BEAGLEBONE_BLACK_CONFIG["device_directory"], "helper.")}*"].first)).to be true
|
41
|
+
|
42
|
+
expect(current_input.value).to eq(expected_current)
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|