oveRTOS C++ API
C++20 RAII wrappers for the oveRTOS C API
Loading...
Searching...
No Matches
gpio.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2026 Kamil Lulko <kamil.lulko@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 *
6 * This file is part of oveRTOS.
7 */
8
14#pragma once
15
16#include <ove/gpio.h>
17#include <ove/types.hpp>
18#include <ove/error.hpp>
19
20#ifdef CONFIG_OVE_GPIO
21
22namespace ove::gpio
23{
24
41[[nodiscard]] inline Result<void> configure(unsigned int port, unsigned int pin,
42 ove_gpio_mode_t mode) noexcept
43{
44 return from_rc(ove_gpio_configure(port, pin, mode));
45}
46
55[[nodiscard]] inline Result<void> set(unsigned int port, unsigned int pin, int value) noexcept
56{
57 return from_rc(ove_gpio_set(port, pin, value));
58}
59
67[[nodiscard]] inline Result<int> get(unsigned int port, unsigned int pin) noexcept
68{
69 const int rc = ove_gpio_get(port, pin);
70 if (rc >= 0)
71 return rc;
72 return std::unexpected{static_cast<Error>(rc)};
73}
74
85[[nodiscard]] inline Result<void> irq_register(unsigned int port, unsigned int pin,
86 ove_gpio_irq_mode_t mode, ove_gpio_irq_cb callback,
87 void *user_data) noexcept
88{
89 return from_rc(ove_gpio_irq_register(port, pin, mode, callback, user_data));
90}
91
92// Undef RTOS macros that collide with our function names
93#ifdef irq_enable
94#undef irq_enable
95#endif
96#ifdef irq_disable
97#undef irq_disable
98#endif
99
107[[nodiscard]] inline Result<void> irq_enable(unsigned int port, unsigned int pin) noexcept
108{
109 return from_rc(ove_gpio_irq_enable(port, pin));
110}
111
119[[nodiscard]] inline Result<void> irq_disable(unsigned int port, unsigned int pin) noexcept
120{
121 return from_rc(ove_gpio_irq_disable(port, pin));
122}
123
124} /* namespace ove::gpio */
125
126#endif /* CONFIG_OVE_GPIO */
Strong ove::Error type, Result<T> alias, and std::error_code interop for the oveRTOS C++ binding.
Thin C++ wrappers around the oveRTOS GPIO API.
Definition gpio.hpp:23
Result< void > set(unsigned int port, unsigned int pin, int value) noexcept
Drives a GPIO output pin to the specified logic level.
Definition gpio.hpp:55
Result< void > configure(unsigned int port, unsigned int pin, ove_gpio_mode_t mode) noexcept
Configures a GPIO pin with the specified mode.
Definition gpio.hpp:41
Result< void > irq_enable(unsigned int port, unsigned int pin) noexcept
Enables the interrupt for a GPIO pin (must be registered first).
Definition gpio.hpp:107
Result< int > get(unsigned int port, unsigned int pin) noexcept
Reads the current logic level of a GPIO pin.
Definition gpio.hpp:67
Result< void > irq_disable(unsigned int port, unsigned int pin) noexcept
Disables the interrupt for a GPIO pin.
Definition gpio.hpp:119
Result< void > irq_register(unsigned int port, unsigned int pin, ove_gpio_irq_mode_t mode, ove_gpio_irq_cb callback, void *user_data) noexcept
Registers an interrupt callback for a GPIO pin.
Definition gpio.hpp:85
Result< void > from_rc(int rc) noexcept
Lifts a substrate rc-code into a Result<void>.
Definition error.hpp:254
Error
Strong-typed mirror of substrate OVE_ERR_* codes.
Definition error.hpp:64
std::expected< T, Error > Result
std::expected-based result alias.
Definition error.hpp:139
Common type definitions and concepts for the C++ wrapper layer.