Skip to content
Snippets Groups Projects
Select Git revision
9 results Searching

labcomm_time.c

Blame
  • Forked from Anders Blomdell / LabComm
    Source project has a limited visibility.
    eth_helicopter.jl NaN GiB
    # Interface implementation Ball And Beam ====================================================
    
    # There is a union type defined for convenience:
    # AbstractETHHelicopter = Union{ETHHelicopter, ETHHelicopterSimulator}
    # Although not Abstract per se, the names AbstractETHHelicopter etc. were chosen since this
    # reflects the usage in dispatch.
    
    export ETHHelicopter, ETHHelicopterSimulator, AbstractETHHelicopter
    
    struct ETHHelicopter <: PhysicalProcess
        h::Float64
        bias::Float64
    end
    ETHHelicopter() = ETHHelicopter(0.050, 0.)
    
    struct ETHHelicopterSimulator <: SimulatedProcess
        h::Float64
        bias::Float64
        state::Vector{Float64}
    end
    ETHHelicopterSimulator() = ETHHelicopterSimulator(0.01, zeros(4))
    
    const AbstractETHHelicopter = Union{ETHHelicopter, ETHHelicopterSimulator}
    num_outputs(p::AbstractETHHelicopter) = 2
    num_inputs(p::AbstractETHHelicopter)  = 2
    outputrange(p::AbstractETHHelicopter) = [(-10,10),(-10,10)]
    inputrange(p::AbstractETHHelicopter)  = [(-10,10),(-10,10)]
    isstable(p::AbstractETHHelicopter)    = false
    isasstable(p::AbstractETHHelicopter)  = false
    sampletime(p::AbstractETHHelicopter)  = p.h
    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]))
    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
    
    
    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::ETHHelicopterSimulator) = nothing
    finalize(p::ETHHelicopterSimulator)   = nothing