lib/spi/backend.ex

# SPDX-FileCopyrightText: 2023 Frank Hunleth
#
# SPDX-License-Identifier: Apache-2.0

defmodule Circuits.SPI.Backend do
  @moduledoc """
  Backends provide the connection to the real or virtual SPI controller
  """
  alias Circuits.SPI
  alias Circuits.SPI.Bus

  @doc """
  Return SPI bus names on this system

  No supported options
  """
  @callback bus_names(options :: keyword()) :: [String.t()]

  @doc """
  Open a SPI bus device

  On success, `open/2` returns a reference that may be passed to
  with `transfer/2`. The device will be closed automatically when
  the reference goes out of scope.

  SPI is not a standardized interface so appropriate options will
  different from device-to-device. The defaults use here work on
  many devices.

  Parameters:
  * `bus_name` is the name of the bus (e.g., "spidev0.0"). See `bus_names/0`
  * `opts` is a keyword list to configure the bus
  """
  @callback open(bus_name :: String.t(), [SPI.spi_option()]) ::
              {:ok, Bus.t()} | {:error, term()}

  @doc """
  Return information about this backend
  """
  @callback info() :: map()
end