Sha256: 5b19bce37b052002e44d2fa53671d42d9af3c6640b78dd615f64bd6874b2980f

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

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
      Lxi.init_session

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

      true
    end
    alias open connect

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

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

      bytes_sent
    end
    alias scpi write
    alias send write

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

      message.read_string
    end
    alias gets read

    def query(message)
      write(message)
      read(10_000)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lxi_rb-0.10.1 lib/lxi/device.rb
lxi_rb-0.10.0 lib/lxi/device.rb
lxi_rb-0.9.0 lib/lxi/device.rb