From cb48ab8724e76aa502fe4d3fdf869c76613100ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mattias=20F=C3=A4lt?= <mattiasf@control.lth.se>
Date: Mon, 15 Apr 2019 18:34:07 +0200
Subject: [PATCH] updates startupscript and precompile

---
 src/BeagleBone/BeagleBone.jl               | 21 ++++++++++---
 src/BeagleBone/GPIO.jl                     |  2 +-
 src/BeagleBone/precompile.jl               | 36 +++++++++++++++-------
 src/BeagleBone/startup/juliaserver.service |  2 +-
 4 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/src/BeagleBone/BeagleBone.jl b/src/BeagleBone/BeagleBone.jl
index db415c9..95e7aca 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 f71d78f..662f761 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 77862a6..3dac1e7 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 27861b3..aa7d285 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
-- 
GitLab