Skip to content
Snippets Groups Projects
Commit 34d2a4b5 authored by Marcus Greiff's avatar Marcus Greiff
Browse files

Added text based setting of GPIO allowing in/out configuration and refactor code

parent a083ea7d
No related branches found
No related tags found
No related merge requests found
"""
Lowest form of communication woth the GPIO pins. The available pins are
listed in the "channel" parameter, and appear as directories in /sys/class.
Any of these GPIOs can be run in various ways, with any operation specified
by a sequence of three entries
(channel, operation, entry) = (int32, int32, String)
For instance, if the GPIO "gpio30" is to be configured as a output pin and set
to high, the following two writes aould be done.
write!(GPIO, 14, 2, "out")
write!(GPIO, 14, 1, "1")
"""
struct GPIO
end
writeOperations = [
Dict("dir" => "value", "entries"=>["1", "0"])
Dict("dir" => "direction", "entries"=>["in", "out"])
]
readOperations = [
"value"
"direction"
"edge"
]
channels =[
"gpio112"
"gpio114"
"gpio115"
"gpio116"
"gpio14"
"gpio15"
"gpio2"
"gpio20"
"gpio22"
"gpio23"
"gpio26"
"gpio27"
"gpio3"
"gpio30"
"gpio31"
"gpio4"
"gpio44"
"gpio45"
"gpio46"
"gpio47"
"gpio48"
"gpio49"
"gpio5"
"gpio50"
"gpio51"
"gpio60"
"gpio61"
"gpio65"
"gpio66"
"gpio67"
"gpio68"
"gpio69"
"gpio7"
]
function write!(::GPIO, index::Int32, operation::Int32, entry::Bool)
(index <= 0 || index > length(channels)) && error("Invalid GPIO index: $index")
(operation <= 0 || operation > length(writeOperations)) && error("Invalid GPIO operation: $operation")
filename = "/sys/class/gpio/$(channels[index])/$(writeOperations[operation]["dir"])"
value = writeOperations[operation]["entries"][entry ? 1 : 2]
file = open(filename, "r+")
write(file, "$(value)")
close(file)
return
end
#function Base.read(::SysLED, ind::Int32)
# (ind < 0 || ind > length(channels)) && error("Invalid SysLEND ind: $ind")
# println("not yet supported")
# l = 0
# return l == "1"
#end
include("../../src/BeagleBone/BeagleBone.jl")
using Base.Test
#Fixture
device = getdev("gpio")
gpio_state = true
@testset "GPIO Tests" begin
@testset "Error Handling" begin
# Attempt to initialize faulty device
@test_throws ErrorException getdev("wrong_device_name")
# Test that an exception is thrown when a faulty ID is given
@test_throws ErrorException write!(device, 100, 1, gpio_state)
# Test that an exception is thrown when a faulty ID is given
@test_throws ErrorException write!(device, 0, 1, gpio_state)
end
@testset "IO Communication" begin
# Instanciate all possible leds and perform 10 read/write commands
# with the set high/low operation (1)
operation = 1
for i = 1:10
for index = 1:length(channels)
write!(device, index, operation, gpio_state)
end
sleep(0.01)
#for j = 1:4
#val = read(device, j)
#@test val == gpio_state
#end
gpio_state = !gpio_state
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment