Current section
Files
Jump to
Current section
Files
lib/circuits_sim.ex
defmodule CircuitsSim do
@moduledoc """
Circuits Simulator
"""
alias CircuitsSim.DeviceRegistry
alias CircuitsSim.GPIO.GPIOServer
alias CircuitsSim.I2C.I2CServer
alias CircuitsSim.SPI.SPIServer
@doc """
Show information about all simulated devices
"""
@spec info() :: :ok
def info() do
[i2c_info(), ?\n, spi_info(), ?\n, gpio_info()]
|> IO.ANSI.format()
|> IO.puts()
end
defp i2c_info() do
DeviceRegistry.bus_names(:i2c)
|> Enum.map(&i2c_bus_info/1)
end
defp i2c_bus_info(bus_name) do
result =
for address <- 0..127 do
info = I2CServer.render(bus_name, address)
hex_addr = CircuitsSim.Tools.hex_byte(address)
if info != [], do: ["Device 0x#{hex_addr}: \n", info, "\n"], else: []
end
["=== ", bus_name, " ===\n", result]
end
defp spi_info() do
DeviceRegistry.bus_names(:spi)
|> Enum.map(&spi_bus_info/1)
end
defp spi_bus_info(bus_name) do
result = SPIServer.render(bus_name)
["=== ", bus_name, " ===\n", result]
end
defp gpio_info() do
DeviceRegistry.bus_names(:gpio)
|> Enum.map(&gpio_spec_info/1)
end
defp gpio_spec_info(gpio_spec) do
result = GPIOServer.render(gpio_spec)
["=== GPIO ", inspect(gpio_spec), " ===\n", result]
end
end