Skip to content

GPIO

Methods for handling digital input/output pins.

Enums

mira_gpio_dir_t

Name Value Description
MIRA_GPIO_DIR_IN
MIRA_GPIO_DIR_OUT

Variables

Type Name Description
process_event_t mira_gpio_edge_event

Functions

mira_gpio_set_dir

mira_status_t mira_gpio_set_dir(
    mira_gpio_pin_t  pin,
    mira_gpio_dir_t  dir);

Set direction of a GPIO pin.

Parameters

Parameter Description
pin GPIO pin reference.
dir Direction of pin.

Return

MIRA_SUCCESS if successful.

mira_gpio_set_pull

mira_status_t mira_gpio_set_pull(
    mira_gpio_pin_t   pin,
    mira_gpio_pull_t  pull);

Configure an input pin's pull resistor.

Parameters

Parameter Description
pin GPIO pin reference.
pull See type mira_gpio_pull_t.

Return

See enum definition.

Value Description
MIRA_SUCCESS Pull up/down config set successfully.
MIRA_ERROR_INVALID_VALUE Value of pull is invalid.

mira_gpio_set_value

mira_status_t mira_gpio_set_value(
    mira_gpio_pin_t  pin,
    mira_bool_t      value);

Set value of a GPIO output pin.

Parameters

Parameter Description
pin GPIO pin reference.
value Value of the pin. MIRA_TRUE for high, MIRA_FALSE for low.

Return

MIRA_SUCCESS if successful.

mira_gpio_get_value

mira_status_t mira_gpio_get_value(
    mira_gpio_pin_t  pin,
    mira_bool_t*     value);

Get value of a GPIO input pin.

Parameters

Parameter Description
pin GPIO pin reference.
value Pointer to where to store the pin value. MIRA_TRUE for high, MIRA_FALSE for low.

Return

MIRA_SUCCESS if successful.

mira_gpio_enable_edge_event

mira_status_t mira_gpio_enable_edge_event(
    mira_gpio_pin_t  pin,
    mira_edge_t      edge);

Enable

To change the edge for an already enabled pin, first call mira_gpio_disable_edge_event for that specific pin.

Parameters

Parameter Description
pin GPIO pin reference.
edge Which edge(s) to generate an event for.

Return

See enum definition.

Value Description
MIRA_SUCCESS Edge event successfully enabled.
MIRA_ERROR_UNKNOWN An unknown error occurred.
MIRA_ERROR_INVALID_VALUE Value out of range.
MIRA_GPIO_ERROR_INVALID_PORT Pin not a GPIO pin.
MIRA_ERROR_ALREADY_INITIALIZED Edge event already initialized.
MIRA_GPIO_ERROR_EDGE_NO_RESOURCE_AVAILABLE No resource available.
MIRA_WARNING_PARTIAL_FUNCTIONALITY Full functionality not guaranteed.
MIRA_ERROR_NOT_IMPLEMENTED Function not implemented.

mira_gpio_disable_edge_event

mira_status_t mira_gpio_disable_edge_event(
    mira_gpio_pin_t  pin);

Disable the generation of

Parameters

Parameter Description
pin GPIO pin reference.

Return

See enum definition.

Value Description
MIRA_SUCCESS Edge event successfully disabled.
MIRA_ERROR_UNKNOWN An unknown error occurred.
MIRA_ERROR_INVALID_VALUE Value out of range.
MIRA_GPIO_ERROR_INVALID_PORT Pin not a GPIO pin.
MIRA_ERROR_ALREADY_INITIALIZED Edge event already initialized.
MIRA_GPIO_ERROR_EDGE_NO_RESOURCE_AVAILABLE No resource available.
MIRA_WARNING_PARTIAL_FUNCTIONALITY Full functionality not guaranteed.
MIRA_ERROR_NOT_IMPLEMENTED Function not implemented.

mira_gpio_has_triggered_edge_event

mira_bool_t mira_gpio_has_triggered_edge_event(
    mira_gpio_pin_t  pin);

Check if GPIO pin has triggered an edge event.

Get the edge status of a pin, and reset it to MIRA_FALSE.

Use this in combination with PROCESS_WAIT_UNTIL(c):

mira_gpio_set_dir(BUTTON_PIN, MIRA_GPIO_DIR_IN);
mira_gpio_enable_edge_event(BUTTON_PIN, MIRA_EDGE_RISING);

while (1) {
    PROCESS_WAIT_UNTIL(mira_gpio_has_triggered_edge_event(BUTTON_PIN));

    do_processing();
}

Return

Value Description
MIRA_TRUE The pin has triggered a mira_gpio_edge_event since the last call to this function.
MIRA_FALSE The pin has not triggered a mira_gpio_edge_event since the last call to this function.