Circuits.GPIO.Diagnostics (circuits_gpio v2.3.0)

Copy Markdown View Source

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.

Summary

Functions

Reminder for how to use report/1

Run GPIO diagnostics and print a report

Run diagnostics and print a report for a single pair of GPIOs

Run GPIO tests and return a list of the results

Run GPIO API performance tests

Types

gpio_pair()

@type gpio_pair() :: {Circuits.GPIO.gpio_spec(), Circuits.GPIO.gpio_spec()}

Functions

report()

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

Reminder for how to use report/1

report(gpio_pairs)

@spec report([gpio_pair()]) :: boolean()

Run GPIO diagnostics and print a report

Connect each output GPIO to the corresponding input GPIO. When using the cdev stub implementation, any connected pairs can be used. For example, run:

Circuits.GPIO.Diagnostics.report([
  {{"gpiochip0", 0}, {"gpiochip0", 1}},
  {{"gpiochip0", 2}, {"gpiochip0", 3}}
])

Pass more than one pair to also run multi-GPIO group diagnostics. This function is intended for IEx prompt usage. See run/1 for programmatic use.

report(out_gpio_spec, in_gpio_spec)

Run diagnostics and print a report for a single pair of GPIOs

This calls report/1.

run(gpio_pairs)

@spec run([gpio_pair()]) :: list()

Run GPIO tests and return a list of the results

run(out_gpio_spec, in_gpio_spec)

speed_test(gpio_spec)

@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.