GPIO Examples (Blocking API)
============================

Overview
~~~~~~~~

The blocking GPIO examples are available for both C and C++:

- C: ``examples/blocking_api/gpio/c/``
- C++: ``examples/blocking_api/gpio/cpp/``

These examples are intended for both **Supernova** and **Pulsar** USB host adapters.

Hardware Setup
~~~~~~~~~~~~~~

Required hardware:

1. One Binho **Supernova** or **Pulsar**
2. One Binho **Breakout Board**

Required wiring:

- Short **GPIO 1** and **GPIO 3** together on the breakout board.
- This loopback connection is required for digital readback and interrupt validation.

What The GPIO Examples Do
~~~~~~~~~~~~~~~~~~~~~~~~~

The C and C++ examples implement the same workflow:

1. Connect to the adapter and read device information.
2. Configure multiple GPIO pins as input/output and validate interrupt configuration behavior.
3. Verify digital write/read by driving ``GPIO 3`` and reading ``GPIO 1``.
4. Set GPIO target voltage to ``1800 mV``.
5. Register a GPIO notification callback.
6. Enable ``GPIO 1`` interrupt on both edges.
7. Toggle ``GPIO 3`` and verify interrupts are received on ``GPIO 1``.

Notification Callback Requirement
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GPIO interrupt events are consumed through notifications.
For this reason, the client must register a callback before starting the interrupt test:

- C API: ``CosmicSDK_onNotification`` and ``CosmicSDK_notificationAsGpio``.
- C++ API: ``CosmicSDK::onNotification`` and ``notification.gpio()``.

Build and Run (GPIO C/C++)
~~~~~~~~~~~~~~~~~~~~~~~~~~

GPIO example directories build binaries with the following names:

- C (``examples/blocking_api/gpio/c/``):
    - ``example_c_dynamic``
    - ``example_c_static``
- C++ (``examples/blocking_api/gpio/cpp/``):
    - ``example_cpp_dynamic``
    - ``example_cpp_static``

See also:

- C API GPIO reference: :doc:`../../api/c/gpio`
- C++ blocking GPIO reference: :doc:`../../api/cpp_blocking/gpio`
