defmodule ExVisa do @moduledoc """ This module provides some simple functions to communicate with instruments via VISA (Virtual Instrument Software Architecture). You can talk to devices using the `ExVisa` functions, while assuring concurrent accesses to the same port don't conflict. If you don't need such functionality, you can also directly talk to them through `ExVisa.Direct` functions. """ alias ExVisa.Listener alias ExVisa.ListenerRegistry @doc """ Currently, just an alias to `ExVisa.Direct.list_resources/1`. """ def list_resources(message \\ "?*::INSTR") do {:ok, pid} = ListenerRegistry.get_listener_pid(:no_address) Listener.list_resources(pid, message) end def exists?(address) do [address] == list_resources(address) end @doc """ Writes the message to the given VISA address. """ def write(address, message, read_term \\ "\n", write_term \\ "\n") do {:ok, pid} = ListenerRegistry.get_listener_pid(address) Listener.write(pid, {address, message, read_term, write_term}) end @doc """ Queries the message to the given VISA address. """ def query(address, message, read_term \\ "\n", write_term \\ "\n") do {:ok, pid} = ListenerRegistry.get_listener_pid(address) Listener.query(pid, {address, message, read_term, write_term}) end @doc """ Queries device identifier. """ def idn(address), do: query(address, "*IDN?") end