diff --git a/Examples/testLED.jl b/Examples/testLED.jl index d61d0e74027429ad9bd3d9d7d2e13ca0aaa34cbc..116f15bd3eeefcd7fa5b675cce8710e6dc6f780c 100644 --- a/Examples/testLED.jl +++ b/Examples/testLED.jl @@ -27,24 +27,25 @@ for i = 1:100 get(led1) get(led2) get(led3) - #sleep(0.1) - v1,v2,v3 = read(stream) #Sends request to read, reads all inputs for which get! was called - v1 == !v2 == v3 == ledon ? nothing : println("ledon is $ledon, but read v1, v2, v3 = $v1, $v2, $v3") + sleep(0.1) + v1,v2,v3 = .==(read(stream), "1") #Sends request to read, reads all inputs for which get! was called + v1 == !v2 == v3 == ledon ? nothing : println("ledon is $ledon, but read v1, v2, v3 = $v1, $v2, $v3") ledon = !ledon end for i = 1:40 + global ledon send(led1, ledon) #sleep(0.03) - v1 = read(led1) + v1 = read(led1) == "1" send(led2, ledon) #sleep(0.03) - v2 = read(led2) + v2 = read(led2) == "1" send(led3, ledon) #sleep(0.03) - v3 = read(led3) + v3 = read(led3) == "1" send(led4, ledon) #sleep(0.03) - v4 = read(led4) + v4 = read(led4) == "1" v1 == v2 == v3 == v4 == ledon ? nothing : println("ledon is $ledon, but read v1, v2, v3, v4 = $v1, $v2, $v3, $v4") ledon = !ledon end diff --git a/src/BeagleBone/BeagleBone.jl b/src/BeagleBone/BeagleBone.jl index aca8a1cbace4c45d3fa292bdc8487f0d4e205b49..1d888ac94f3ff6e3e2aa530fbd16680cac59c906 100644 --- a/src/BeagleBone/BeagleBone.jl +++ b/src/BeagleBone/BeagleBone.jl @@ -106,24 +106,26 @@ end """ bbparse(l::Tuple, sock) -Parse input on the form `l=(iswrite, ndev, cmd1, cmd2, ..., cmdn)` -where if `iswrite` +Parse input on the form `l=(operation, ndev, cmd1, cmd2, ..., cmdn)` +where if `operation==1` (write) `cmdi = (devname, id, val)` - and if not `iswrite` + and if `operation==0` (read) + `cmdi = (devname, id)` + and if `operation==2` (initialize) `cmdi = (devname, id)` and send back on socket (vals, timestamps). """ function bbparse(l::Tuple, sock) - iswrite = l[1]::Bool #True if write command, false if read + operation = l[1]::Int32 #1 if write command, 0 if read, 2 if init ndev = l[2]::Int32 #Number of devices/commands - if iswrite + if operation == 1 for i = 1:ndev command = l[2+i]::Tuple dev = getdev(command[1], command[2]) write!(dev, command[3]) end return - else + elseif operation == 0 #TODO fix to have at least partial type stability vals = Array{Any,1}(undef,ndev) timestamps = Array{UInt64,1}(undef,ndev) @@ -135,6 +137,14 @@ function bbparse(l::Tuple, sock) end bbsend(sock, (vals, timestamps)) return + elseif operation == 2 + for i = 1:ndev + command = l[2+i]::Tuple + dev = initdev(command[1], command[2]) + end + return + else + error("Unknown operation $operation, cmd: $l") end end @@ -173,7 +183,8 @@ function run_server(port=2001; debug=false) println("Connection to server closed") else println("error: $(typeof(err))") - rethrow() + println("err: $err") + rethrow(err) end end end diff --git a/src/BeagleBone/SysLED.jl b/src/BeagleBone/SysLED.jl index 71680bc8c802d6f0d41f4735832377477410ed17..5f06999b086470418f0c75ba9f9e66b86b2f2f61 100644 --- a/src/BeagleBone/SysLED.jl +++ b/src/BeagleBone/SysLED.jl @@ -31,6 +31,11 @@ function write!(led::SysLED, entry::String, debug::Bool=false) flush(led.filestream) end +# Catch Boolean writes +write!(led::SysLED, entry::Bool, debug::Bool=false) = + write!(led::SysLED, entry ? "1" : "0", debug) + + """ l = read(led::SysLED, debug::Bool=false) Reads the current brightness value from the LED 'SysLED'. diff --git a/src/Computer/BeagleBoneStream.jl b/src/Computer/BeagleBoneStream.jl index d04600067554843ab993c20adaaee7a0157cdd61..844d721e0d8c3168b8031fec1572d16fc31589ee 100644 --- a/src/Computer/BeagleBoneStream.jl +++ b/src/Computer/BeagleBoneStream.jl @@ -21,6 +21,12 @@ function init_devices!(bbstream::BeagleBoneStream, devs::AbstractDevice...) setstream!(dev, bbstream) push!(bbstream.devices, dev) initialize(dev) + # Send to beaglebone 2: initialize, 1 device, (name, index) + # TODO create proper functionality to initialize + readcmd = getreadcommand(bbstream, dev) + name = readcmd[1]::String + idx = readcmd[2]::Integer + serialize(bbstream.stream, (Int32(2), Int32(1), (name, Int32(idx)))) else warn("Device $dev already added to a stream") end @@ -30,14 +36,14 @@ end function send(bbstream::BeagleBoneStream) ncmds = length(bbstream.sendbuffer) - serialize(bbstream.stream, (true, Int32(ncmds), bbstream.sendbuffer...)) + serialize(bbstream.stream, (Int32(1), Int32(ncmds), bbstream.sendbuffer...)) empty!(bbstream.sendbuffer) return end #TODO know the types of outputs some way function read(bbstream::BeagleBoneStream) ncmds = length(bbstream.readbuffer) - serialize(bbstream.stream, (false, Int32(ncmds), bbstream.readbuffer...)) + serialize(bbstream.stream, (Int32(0), Int32(ncmds), bbstream.readbuffer...)) empty!(bbstream.readbuffer) vals, timestamps = deserialize(bbstream.stream) length(vals) == ncmds || error("Wrong number of return values in $vals on request $(bbstream.readbuffer)") @@ -47,13 +53,13 @@ end #The following are for interal use only function send(bbstream::BeagleBoneStream, cmd) - allcmds = (true, Int32(1), cmd) + allcmds = (Int32(1), Int32(1), cmd) println("Sending single command: $allcmds") serialize(bbstream.stream, allcmds) return end function read(bbstream::BeagleBoneStream, cmd) - allcmds = (false, Int32(1), cmd) + allcmds = (Int32(0), Int32(1), cmd) println("Sending single command: $allcmds") serialize(bbstream.stream, allcmds) vals, timestamps = deserialize(bbstream.stream)