Sha256: 04734302c34b13a1f6e4b79018118d82fc123c5ba5bb566bb70f88d7ecf10ed0

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

module Lxi
  class Device
    include FFI
    attr_accessor :id, :address, :port, :name, :timeout, :protocol

    def initialize(address, protocol)
      @address = address
      @port = 0
      @name = nil
      @timeout = 1000
      @protocol = protocol
      @id = -1

      connect

      yield self if block_given?
    end

    def connect
      raise Error, 'LXI Library Initialisation Error' unless Lxi.lxi_init == LXI_OK

      @id = Lxi.lxi_connect(@address, @port, @name, @timeout, @protocol)
      raise Error, 'LXI Connection Error' if @id == LXI_ERROR

      true
    end
    alias open connect

    def disconnect
      Lxi.lxi_disconnect(@id)
    end
    alias close disconnect

    def send(message)
      bytes_sent = Lxi.lxi_send(@id, message, message.length, @timeout)
      raise Error, 'LXI communications error' unless bytes_sent.positive?

      bytes_sent
    end
    alias scpi send
    alias write send

    def read(length)
      message = FFI::MemoryPointer.new(:char, length)
      bytes_received = Lxi.lxi_receive(@id, message, length, @timeout)
      raise Error, 'LXI communications error' unless bytes_received.positive?

      message.read_string
    end
    alias gets read
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lxi_rb-0.2.3 lib/lxi/device.rb
lxi_rb-0.2.1 lib/lxi/device.rb
lxi_rb-0.2.0 lib/lxi/device.rb