# `Circuits.GPIO.Diagnostics`
[🔗](https://github.com/elixir-circuits/circuits_gpio/blob/v2.1.3/lib/gpio/diagnostics.ex#L6)

Runtime diagnostics

This module provides simple diagnostics to verify GPIO controller and
implementation differences. Along with the device that you're using, this is
super helpful for diagnosing issues since some GPIO features aren't supposed
to work on some devices.

# `report`

```elixir
@spec report() :: String.t()
```

Reminder for how to use report/2

# `report`

```elixir
@spec report(Circuits.GPIO.gpio_spec(), Circuits.GPIO.gpio_spec()) :: boolean()
```

Print a summary of the GPIO diagnostics

Connect the pins referred to by `out_gpio_spec` and `in_gpio_spec` together.
When using the cdev stub implementation, any pair of GPIOs can be used. For
example, run:

```elixir
Circuits.GPIO.Diagnostics.report({"gpiochip0", 0}, {"gpiochip0", 1})
```

This function is intended for IEx prompt usage. See `run/2` for programmatic
use.

# `run`

```elixir
@spec run(Circuits.GPIO.gpio_spec(), Circuits.GPIO.gpio_spec()) :: list()
```

Run GPIO tests and return a list of the results

# `speed_test`

```elixir
@spec speed_test(Circuits.GPIO.gpio_spec()) :: %{
  write_cps: float(),
  read_cps: float(),
  write_one_cps: float(),
  read_one_cps: float()
}
```

Run GPIO API performance tests

Disclaimer: There should be a better way than relying on the Circuits.GPIO
write performance on nearly every device. Write performance shouldn't be
terrible, though.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
