2020-01-08 10:18:38 +13:00
|
|
|
defmodule WaferAcceptanceElixirALE.I2CDeviceTest do
|
2019-12-30 20:37:34 +13:00
|
|
|
use ExUnit.Case, async: true
|
|
|
|
|
|
|
|
# Only run acceptance tests if the fake drivers are not loaded.
|
2020-01-08 10:18:38 +13:00
|
|
|
if System.get_env("SENSE_HAT_PRESENT") == "true" do
|
|
|
|
alias Wafer.Driver.ElixirALE.I2C, as: Driver
|
2019-12-30 20:37:34 +13:00
|
|
|
|
|
|
|
defmodule LPS25H do
|
|
|
|
use Wafer.Registers
|
|
|
|
|
|
|
|
@moduledoc """
|
|
|
|
A not very useful driver for the LPS25H pressure senser 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), _::integer-size(7)>>} -> 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: 0x5C)
|
|
|
|
|
|
|
|
assert {:ok, <<0xBD>>} = LPS25H.read_who_am_i(conn)
|
|
|
|
end
|
|
|
|
|
|
|
|
test "reading and writing" do
|
|
|
|
{:ok, conn} = Driver.acquire(bus_name: "i2c-1", address: 0x5C)
|
|
|
|
|
|
|
|
assert {:ok, conn} = LPS25H.turn_on(conn)
|
|
|
|
assert LPS25H.on?(conn) == true
|
|
|
|
assert {:ok, conn} = LPS25H.turn_off(conn)
|
|
|
|
assert LPS25H.on?(conn) == false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|