wafer/test/acceptance/circuits_i2c_device_test.exs
James Harton 4b27f5441f Code gardening.
* Rename and extract a bunch of modules into their own files to make it easier to navigate the repository.
* Remove fake versions of `ElixirALE` and `Circuits` from `test/support`.
* Create wrapper modules for `ElixirALE` and `Circuits` modules using `defdelegate` instead.
* Use Elixir 1.10's new `@compile {:no_warn_undefined ...}` directive to inhibit compiler warnings for our optional dependencies.
2020-01-08 10:18:38 +13:00

46 lines
1.3 KiB
Elixir

defmodule WaferAcceptanceCircuits.I2CDeviceTest do
use ExUnit.Case, async: true
# Only run acceptance tests if the fake drivers are not loaded.
if System.get_env("SENSE_HAT_PRESENT") == "true" do
alias Wafer.Driver.Circuits.I2C, as: Driver
defmodule HTS221 do
use Wafer.Registers
@moduledoc """
A not very useful driver for the HTS221 humidity sensor on the Pi Sense Hat.
"""
defregister(:who_am_i, 0x0F, :ro, 1)
defregister(:ctrl_reg1, 0x20, :rw, 1)
def on?(conn) do
case read_ctrl_reg1(conn) do
{:ok, <<1::integer-size(1), _::bits>>} -> true
_ -> false
end
end
def turn_on(conn), do: write_ctrl_reg1(conn, <<1::integer-size(1), 0::integer-size(7)>>)
def turn_off(conn), do: write_ctrl_reg1(conn, <<0>>)
end
describe "generated registers" do
test "reading" do
{:ok, conn} = Driver.acquire(bus_name: "i2c-1", address: 0x5F)
assert {:ok, <<0xBC>>} = HTS221.read_who_am_i(conn)
end
test "reading and writing" do
{:ok, conn} = Driver.acquire(bus_name: "i2c-1", address: 0x5F)
assert {:ok, conn} = HTS221.turn_on(conn)
assert HTS221.on?(conn) == true
assert {:ok, conn} = HTS221.turn_off(conn)
assert HTS221.on?(conn) == false
end
end
end
end