From 8912ea2a7c4ee7f12bf7741ece8b93ef5ede6f62 Mon Sep 17 00:00:00 2001
From: Martin Karlsson <cont-mkr@ulund.org>
Date: Mon, 28 Aug 2017 21:34:33 +0200
Subject: [PATCH] update ETHheli to LabConnections

---
 src/LabProcesses.jl                           |  3 ++-
 .../eth_helicopter.jl                         | 24 ++++++++++---------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl
index c77a735..9eb3ff6 100644
--- a/src/LabProcesses.jl
+++ b/src/LabProcesses.jl
@@ -2,13 +2,14 @@
 
 module LabProcesses
 
-using ControlSystems
+using ControlSystems, LabConnection.Computer
 
 include("utilities.jl")
 
 include("interface.jl")
 include("interface_documentation.jl")
 include("interface_implementations/ballandbeam.jl")
+include("interface_implementations/eth_helicopter.jl")
 
 include("reference_generators.jl")
 include("controllers.jl")
diff --git a/src/interface_implementations/eth_helicopter.jl b/src/interface_implementations/eth_helicopter.jl
index 7e78568..f13bb0f 100644
--- a/src/interface_implementations/eth_helicopter.jl
+++ b/src/interface_implementations/eth_helicopter.jl
@@ -8,10 +8,15 @@
 export ETHHelicopter, ETHHelicopterSimulator, AbstractETHHelicopter
 
 struct ETHHelicopter <: PhysicalProcess
-    h::Float64
+	h::Float64
     bias::Float64
+    stream::LabStream
+    measure1::AnalogInput10V
+    measure2::AnalogInput10V
+    control1::AnalogOutput10V
+    control2::AnalogOutput10V
 end
-ETHHelicopter() = ETHHelicopter(0.050, 0.)
+ETHHelicopter() = ETHHelicopter(0.050, 0., ComediStream(), AnalogInput10V(0), AnalogInput10V(1), AnalogOutput10V(0), AnalogOutput10V(1))
 
 struct ETHHelicopterSimulator <: SimulatedProcess
     h::Float64
@@ -32,22 +37,19 @@ bias(p::AbstractETHHelicopter)        = p.bias
 
 
 function control(p::ETHHelicopter, u)
-	ccall((:comedi_write, comedipath),Int32,(Int32,Int32,Int32,Int32), 0,1,0,num2io(u[1]))
-	ccall((:comedi_write, comedipath),Int32,(Int32,Int32,Int32,Int32), 0,1,1,num2io(u[2]))
+    send(p.control1,u[1])
+    send(p.control2,u[2])
 end
 
-measure(p::ETHHelicopter) = [io2num(ccall((:comedi_read, comedipath),Int32,(Int32,Int32,Int32), 0,0,i)) for i = 0:1] #i=0 for pitch, i=1 for yaw
+measure(p::ETHHelicopter) = [read(p.measure1), read(p.measure2)] #i=0 for pitch, i=1 for yaw
 
 
 control(p::ETHHelicopterSimulator, u)  = error("Not yet implemented")
 measure(p::ETHHelicopterSimulator)     = error("Not yet implemented")
 
-const comedipath = Pkg.dir("LabProcesses","c","comedi_bridge.so")
-const conversion = 65535/20
-io2num(x) = x/conversion -10            # Converts from io to float
-num2io(x) = round(Int32,(x + 10)*conversion)   # Converts from regular number to io
 
-initialize(p::ETHHelicopter) = ccall((:comedi_start, comedipath),Int32,(Int32,), 0)
-finalize(p::ETHHelicopter)   = (control(p,0);ccall((:comedi_stop, comedipath),Int32,(Int32,), 0))
+
+initialize(p::ETHHelicopter) = init_devices!(p.stream, p.measure1, p.measure2, p.control1, p.control2)
+finalize(p::ETHHelicopter)   = close(p.stream)
 initialize(p::ETHHelicopterSimulator) = nothing
 finalize(p::ETHHelicopterSimulator)   = nothing
-- 
GitLab