diff --git a/src/BeagleBone/BeagleBone.jl b/src/BeagleBone/BeagleBone.jl index db415c95304114cb39a9c48525846264ff60e334..95e7acaeac008043d582696c7d30485368a09f54 100644 --- a/src/BeagleBone/BeagleBone.jl +++ b/src/BeagleBone/BeagleBone.jl @@ -152,6 +152,18 @@ function bbparse(l::Tuple, sock) end end +function close_all_devices() + # When connection fails or closes, close devices + for key in keys(DEVICES) + for (devkey, active_device) in active_devices[key] + println("teardown $active_device") + teardown(active_device) + #Remove the device from the dict of active devices + delete!(active_devices[key], devkey) + end + end +end + global __waiting_first_connection__ = false """ run_server(port=2001; debug=false) @@ -181,8 +193,8 @@ function run_server(port=2001; debug=false) @async while isopen(sock) try l = deserialize(sock); - println("deserialized:") - println(l) + # println("deserialized:") + # println(l) try bbparse(l, sock) catch err @@ -192,7 +204,7 @@ function run_server(port=2001; debug=false) catch err if !isopen(sock) && (isa(err, Base.EOFError) || isa(err, Base.UVError)) println("Connection to server closed") - # TODO teardown and remove all devices + close_all_devices() else println("error: $(typeof(err))") println("err: $err") @@ -201,10 +213,11 @@ function run_server(port=2001; debug=false) end end catch err + close_all_devices() if isa(err,Base.UVError) && err.prefix == "accept" println("Server closed successfully") else - rethrow() + rethrow(err) end end end diff --git a/src/BeagleBone/GPIO.jl b/src/BeagleBone/GPIO.jl index f71d78ff2fff8400a64f17c4b5277d61ca4dea89..662f7610c6b847447853d046a4b58250af84aea7 100644 --- a/src/BeagleBone/GPIO.jl +++ b/src/BeagleBone/GPIO.jl @@ -64,7 +64,7 @@ end # Default to reading "value" function read(gpio::GPIO, debug::Bool=false) - read(gpio, GPIO_VALUE, debug=debug) + read(gpio, GPIO_VALUE, debug) end """ l = read(gpio::GPIO, operation::Int32, debug::Bool=false) diff --git a/src/BeagleBone/precompile.jl b/src/BeagleBone/precompile.jl index 77862a61335bf4b9ac1351118e7a6a1eec38a1c5..3dac1e719b565ccb8f4cce9030a17bb1e9ae52c3 100644 --- a/src/BeagleBone/precompile.jl +++ b/src/BeagleBone/precompile.jl @@ -8,26 +8,38 @@ function precompile_bb() #Precompile serialize initdev("debug", Int32(1)) - serialize(clientside, (true, Int32(2), ("debug", Int32(1), true), ("debug", Int32(1), (1,2.0,"asd")))) - serialize(clientside, (true, Int32(2), ("debug", Int32(1), Int32(1)), ("debug", Int32(1), 1.0))) - serialize(clientside, (false, Int32(2), ("debug", Int32(1)), ("debug", Int32(1)))) - - serialize(clientside, (true, Int32(1), ("debug", Int32(1), true))) - serialize(clientside, (false, Int32(1), ("debug", Int32(1)))) - serialize(clientside, (true, Int32(4), ("debug", Int32(1), true), ("debug", Int32(2), false), ("debug", Int32(3), true), ("debug", Int32(4), false))) - + serialize(clientside, (WRITE, Int32(2), ("debug", Int32(1), true), ("debug", Int32(1), (1,2.0,"asd")))) + serialize(clientside, (WRITE, Int32(2), ("debug", Int32(1), Int32(1)), ("debug", Int32(1), 1.0))) + serialize(clientside, (READ, Int32(2), ("debug", Int32(1)), ("debug", Int32(1)))) + + serialize(clientside, (WRITE, Int32(1), ("debug", Int32(1), true))) + serialize(clientside, (READ, Int32(1), ("debug", Int32(1)))) + initdev("debug", Int32(2)) + initdev("debug", Int32(3)) + initdev("debug", Int32(4)) + serialize(clientside, (WRITE, Int32(4), ("debug", Int32(1), true), ("debug", Int32(2), false), ("debug", Int32(3), true), ("debug", Int32(4), false))) + + closedev("debug", Int32(1)) + closedev("debug", Int32(2)) + closedev("debug", Int32(3)) + closedev("debug", Int32(4)) + + println("closing clientside") # Close the client side close(clientside) + println("closing server") #Close server close(server) debug = true - + println("initdev") #Precompile SysLED led = initdev("sysled",Int32(1)) write!(led, "1", debug) read(led, debug) + println("closedev") + closedev("sysled", Int32(1)) ind = 1 println("False: $(ind ∉ [1,2,3,4])") @@ -36,11 +48,13 @@ function precompile_bb() gpio = initdev("gpio",Int32(1)) write!(gpio, (Int32(1), "1"), debug) + closedev("gpio", Int32(1)) #read(gpio, ind, args, debug) + # TODO activate when pwn is working # Precompile PWM - pwm = initdev("pwm", Int32(1)) - write!(pwm, (Int32(1),"1"), debug) + #pwm = initdev("pwm", Int32(1)) + #write!(pwm, (Int32(1),"1"), debug) #Do read/write to file val = true diff --git a/src/BeagleBone/startup/juliaserver.service b/src/BeagleBone/startup/juliaserver.service index 27861b30df00eb22a86f4666d266e10e35414456..aa7d285331827ab9cd07a7fc8c74ddd146f65a6e 100644 --- a/src/BeagleBone/startup/juliaserver.service +++ b/src/BeagleBone/startup/juliaserver.service @@ -2,7 +2,7 @@ Description=JuliaServer service [Service] -ExecStart=/home/debian/julia/bin/julia -i -e 'include("/home/debian/juliapackages/LabConnections/src/BeagleBone/startup/startup.jl")' & +ExecStart=/usr/bin/screen -Dm /home/debian/julia/bin/julia -i -e 'include("/home/debian/juliapackages/LabConnections/src/BeagleBone/startup/startup.jl")' & [Install] WantedBy=multi-user.target