Packages

Wrap an I2C device in a separate process per I2C bus

Retired package: Release invalid - I2C operations are not synchronized

Current section

Files

Jump to
i2c_server lib i2c_server.ex
Raw

lib/i2c_server.ex

defmodule I2cServer do
@moduledoc """
`I2cServer` creates a separate process for each I2C device. A server process
is identified with a composite key of bus name and address.
"""
@spec server_process(binary, 0..127) :: pid
def server_process(bus_name, bus_address) do
I2cServer.DeviceSupervisor.server_process(bus_name, bus_address)
end
@spec read(GenServer.server(), integer) :: any
def read(server, bytes_to_read) when is_integer(bytes_to_read) do
I2cServer.DeviceWorker.read(server, bytes_to_read)
end
@spec write(GenServer.server(), iodata) :: any
def write(server, data) when is_binary(data) or is_list(data) do
I2cServer.DeviceWorker.write(server, data)
end
@spec write(GenServer.server(), integer, binary | integer) :: any
def write(server, register, data)
when is_integer(register) and (is_binary(data) or is_integer(data)) do
I2cServer.DeviceWorker.write(server, register, data)
end
@spec write_read(GenServer.server(), binary | integer, integer) :: any
def write_read(server, write_data, bytes_to_read)
when is_binary(write_data) and is_integer(bytes_to_read) do
I2cServer.DeviceWorker.write_read(server, write_data, bytes_to_read)
end
def write_read(server, register, bytes_to_read)
when is_integer(register) and is_integer(bytes_to_read) do
I2cServer.DeviceWorker.write_read(server, <<register>>, bytes_to_read)
end
end