Oops
This commit is contained in:
parent
4ed354aa1a
commit
bc04167643
|
@ -432,8 +432,8 @@ defmodule PCA9641.Commands do
|
|||
@doc """
|
||||
Indicates the reasons for which an interrupt was generated (if any).
|
||||
"""
|
||||
@spec interrupt_name(pid) :: [interrupt_name()]
|
||||
def interrupt_name(pid) do
|
||||
@spec interrupt_reason(pid) :: [interrupt_name()]
|
||||
def interrupt_reason(pid) do
|
||||
value = Registers.interrupt_status(pid)
|
||||
|
||||
@interrupts
|
||||
|
@ -456,16 +456,16 @@ defmodule PCA9641.Commands do
|
|||
Enable the specified interrupts.
|
||||
"""
|
||||
@spec interrupt_enable(pid, :all | [interrupt_name()]) :: :ok | {:error, term}
|
||||
def interrupt_enable(pid, :all) do
|
||||
Registers.interrupt_mask(pid, 0x7F)
|
||||
end
|
||||
def interrupt_enable(pid, :all), do: Registers.interrupt_mask(pid, 0)
|
||||
|
||||
def interrupt_enable(pid, interrupts \\ []) do
|
||||
def interrupt_enable(pid, :none), do: Registers.interrupt_mask(pid, 0x7F)
|
||||
|
||||
def interrupt_enable(pid, interrupts) when is_list(interrupts) do
|
||||
mask =
|
||||
@interrupts
|
||||
|> Enum.reduce(0, fn {name, idx}, result ->
|
||||
if Enum.contain?(interrupts, name),
|
||||
do: set_bit(result, idx),
|
||||
|> Enum.reduce(0x7F, fn {name, idx}, result ->
|
||||
if Enum.member?(interrupts, name),
|
||||
do: clear_bit(result, idx),
|
||||
else: result
|
||||
end)
|
||||
|
||||
|
@ -852,8 +852,11 @@ defmodule PCA9641.Commands do
|
|||
end
|
||||
|
||||
defp get_bit(<<byte>>, bit), do: byte >>> bit &&& 1
|
||||
defp set_bit(<<byte>>, bit), do: set_bit(byte, bit, 1)
|
||||
defp set_bit(byte, bit), do: set_bit(byte, bit, 1)
|
||||
defp set_bit(<<byte>>, bit, 1), do: byte ||| 1 <<< bit
|
||||
defp set_bit(<<byte>>, bit, 1), do: set_bit(byte, bit, 1)
|
||||
defp set_bit(<<byte>>, bit, 0), do: set_bit(byte, bit, 0)
|
||||
defp set_bit(byte, bit, 1), do: byte ||| 1 <<< bit
|
||||
defp set_bit(byte, bit, 0), do: clear_bit(byte, bit)
|
||||
defp clear_bit(<<byte>>, bit), do: byte ||| ~~~(1 <<< bit)
|
||||
end
|
||||
|
|
|
@ -51,15 +51,19 @@ defmodule PCA9641.Registers do
|
|||
def mailbox(pid) do
|
||||
lsb = read_register(pid, 6)
|
||||
msb = read_register(pid, 7)
|
||||
(msb <<< 8) + lsb
|
||||
<<msb, lsb>>
|
||||
end
|
||||
|
||||
def mailbox(pid, message) do
|
||||
def mailbox(pid, message) when is_integer(message) do
|
||||
msb = message >>> 8 &&& 0xFF
|
||||
lsb = message &&& 0xFF
|
||||
with :ok <- write_register(pid, 6, lsb), :ok <- write_register(pid, 7, msb), do: :ok
|
||||
end
|
||||
|
||||
def mailbox(pid, <<msb::integer-size(8), lsb::integer-size(8)>>) do
|
||||
with :ok <- write_register(pid, 6, lsb), :ok <- write_register(pid, 7, msb), do: :ok
|
||||
end
|
||||
|
||||
defp read_register(pid, register, bytes \\ 1), do: I2C.write_read(pid, <<register>>, bytes)
|
||||
|
||||
defp write_register(pid, register, byte) when is_integer(byte),
|
||||
|
|
Loading…
Reference in a new issue