@@ -100,7 +100,7 @@ GPIOD_CXX_API edge_event::event_type edge_event::type() const
{
int evtype = ::gpiod_edge_event_get_event_type(this->_m_priv->get_event_ptr());
- return map_int_to_enum(evtype, event_type_mapping);
+ return map_enum_c_to_cxx(evtype, event_type_mapping);
}
GPIOD_CXX_API timestamp edge_event::timestamp_ns() const noexcept
@@ -77,7 +77,7 @@ GPIOD_CXX_API info_event::event_type info_event::type() const
{
int type = ::gpiod_info_event_get_event_type(this->_m_priv->event.get());
- return map_int_to_enum(type, event_type_mapping);
+ return map_enum_c_to_cxx(type, event_type_mapping);
}
GPIOD_CXX_API ::std::uint64_t info_event::timestamp_ns() const noexcept
@@ -18,15 +18,15 @@
namespace gpiod {
-template<class enum_type> enum_type
-map_int_to_enum(int value, const ::std::map<int, enum_type>& mapping)
+template<class cxx_enum_type, class c_enum_type> cxx_enum_type
+map_enum_c_to_cxx(c_enum_type value, const ::std::map<c_enum_type, cxx_enum_type>& mapping)
{
try {
return mapping.at(value);
} catch (const ::std::out_of_range& err) {
/* FIXME Demangle the name. */
throw bad_mapping(::std::string("invalid value for ") +
- typeid(enum_type).name());
+ typeid(cxx_enum_type).name());
}
}
@@ -114,7 +114,7 @@ GPIOD_CXX_API line::direction line_info::direction() const
{
int direction = ::gpiod_line_info_get_direction(this->_m_priv->info.get());
- return map_int_to_enum(direction, direction_mapping);
+ return map_enum_c_to_cxx(direction, direction_mapping);
}
GPIOD_CXX_API bool line_info::active_low() const noexcept
@@ -115,9 +115,10 @@ GPIOD_CXX_API void line_request::get_values(const line::offsets& offsets, line::
this->_m_priv->fill_offset_buf(offsets);
- int ret = ::gpiod_line_request_get_values_subset(this->_m_priv->request.get(),
- offsets.size(), this->_m_priv->offset_buf.data(),
- reinterpret_cast<int*>(values.data()));
+ int ret = ::gpiod_line_request_get_values_subset(
+ this->_m_priv->request.get(),
+ offsets.size(), this->_m_priv->offset_buf.data(),
+ reinterpret_cast<gpiod_line_value*>(values.data()));
if (ret)
throw_from_errno("unable to retrieve line values");
}
@@ -157,9 +158,10 @@ GPIOD_CXX_API line_request& line_request::set_values(const line::offsets& offset
this->_m_priv->fill_offset_buf(offsets);
- int ret = ::gpiod_line_request_set_values_subset(this->_m_priv->request.get(),
- offsets.size(), this->_m_priv->offset_buf.data(),
- reinterpret_cast<const int*>(values.data()));
+ int ret = ::gpiod_line_request_set_values_subset(
+ this->_m_priv->request.get(),
+ offsets.size(), this->_m_priv->offset_buf.data(),
+ reinterpret_cast<const enum gpiod_line_value*>(values.data()));
if (ret)
throw_from_errno("unable to set line values");
@@ -10,10 +10,11 @@ namespace gpiod {
namespace {
-template<class enum_type>
-::std::map<int, enum_type> make_reverse_maping(const ::std::map<enum_type, int>& mapping)
+template<class cxx_enum_type, class c_enum_type>
+::std::map<c_enum_type, cxx_enum_type>
+make_reverse_maping(const ::std::map<cxx_enum_type, c_enum_type>& mapping)
{
- ::std::map<int, enum_type> ret;
+ ::std::map<c_enum_type, cxx_enum_type> ret;
for (const auto &item: mapping)
ret[item.second] = item.first;
@@ -21,54 +22,56 @@ template<class enum_type>
return ret;
}
-const ::std::map<line::direction, int> direction_mapping = {
+const ::std::map<line::direction, gpiod_line_direction> direction_mapping = {
{ line::direction::AS_IS, GPIOD_LINE_DIRECTION_AS_IS },
{ line::direction::INPUT, GPIOD_LINE_DIRECTION_INPUT },
{ line::direction::OUTPUT, GPIOD_LINE_DIRECTION_OUTPUT }
};
-const ::std::map<int, line::direction> reverse_direction_mapping = make_reverse_maping(direction_mapping);
+const ::std::map<gpiod_line_direction, line::direction>
+reverse_direction_mapping = make_reverse_maping(direction_mapping);
-const ::std::map<line::edge, int> edge_mapping = {
+const ::std::map<line::edge, gpiod_line_edge> edge_mapping = {
{ line::edge::NONE, GPIOD_LINE_EDGE_NONE },
{ line::edge::FALLING, GPIOD_LINE_EDGE_FALLING },
{ line::edge::RISING, GPIOD_LINE_EDGE_RISING },
{ line::edge::BOTH, GPIOD_LINE_EDGE_BOTH }
};
-const ::std::map<int, line::edge> reverse_edge_mapping = make_reverse_maping(edge_mapping);
+const ::std::map<gpiod_line_edge, line::edge> reverse_edge_mapping = make_reverse_maping(edge_mapping);
-const ::std::map<line::bias, int> bias_mapping = {
+const ::std::map<line::bias, gpiod_line_bias> bias_mapping = {
{ line::bias::AS_IS, GPIOD_LINE_BIAS_AS_IS },
{ line::bias::DISABLED, GPIOD_LINE_BIAS_DISABLED },
{ line::bias::PULL_UP, GPIOD_LINE_BIAS_PULL_UP },
{ line::bias::PULL_DOWN, GPIOD_LINE_BIAS_PULL_DOWN }
};
-const ::std::map<int, line::bias> reverse_bias_mapping = make_reverse_maping(bias_mapping);
+const ::std::map<gpiod_line_bias, line::bias> reverse_bias_mapping = make_reverse_maping(bias_mapping);
-const ::std::map<line::drive, int> drive_mapping = {
+const ::std::map<line::drive, gpiod_line_drive> drive_mapping = {
{ line::drive::PUSH_PULL, GPIOD_LINE_DRIVE_PUSH_PULL },
{ line::drive::OPEN_DRAIN, GPIOD_LINE_DRIVE_OPEN_DRAIN },
{ line::drive::OPEN_SOURCE, GPIOD_LINE_DRIVE_OPEN_SOURCE }
};
-const ::std::map<int, line::drive> reverse_drive_mapping = make_reverse_maping(drive_mapping);
+const ::std::map<gpiod_line_drive, line::drive> reverse_drive_mapping = make_reverse_maping(drive_mapping);
-const ::std::map<line::clock, int> clock_mapping = {
+const ::std::map<line::clock, gpiod_line_event_clock> clock_mapping = {
{ line::clock::MONOTONIC, GPIOD_LINE_EVENT_CLOCK_MONOTONIC },
{ line::clock::REALTIME, GPIOD_LINE_EVENT_CLOCK_REALTIME },
{ line::clock::HTE, GPIOD_LINE_EVENT_CLOCK_HTE }
};
-const ::std::map<int, line::clock> reverse_clock_mapping = make_reverse_maping(clock_mapping);
+const ::std::map<gpiod_line_event_clock, line::clock>
+reverse_clock_mapping = make_reverse_maping(clock_mapping);
-const ::std::map<line::value, int> value_mapping = {
+const ::std::map<line::value, gpiod_line_value> value_mapping = {
{ line::value::INACTIVE, GPIOD_LINE_VALUE_INACTIVE },
{ line::value::ACTIVE, GPIOD_LINE_VALUE_ACTIVE }
};
-const ::std::map<int, line::value> reverse_value_mapping = make_reverse_maping(value_mapping);
+const ::std::map<gpiod_line_value, line::value> reverse_value_mapping = make_reverse_maping(value_mapping);
line_settings_ptr make_line_settings()
{
@@ -95,30 +98,30 @@ value_type map_setting(const key_type& key, const ::std::map<key_type, value_typ
return ret;
}
-template<class enum_type>
-int do_map_value(enum_type value, const ::std::map<enum_type, int>& mapping)
+template<class cxx_enum_type, class c_enum_type>
+c_enum_type do_map_value(cxx_enum_type value, const ::std::map<cxx_enum_type, c_enum_type>& mapping)
{
- return map_setting<enum_type, int, ::std::invalid_argument>(value, mapping);
+ return map_setting<cxx_enum_type, c_enum_type, ::std::invalid_argument>(value, mapping);
}
-template<class enum_type, int set_func(::gpiod_line_settings*, int)>
-void set_mapped_value(::gpiod_line_settings* settings, enum_type value,
- const ::std::map<enum_type, int>& mapping)
+template<class cxx_enum_type, class c_enum_type, int set_func(::gpiod_line_settings*, c_enum_type)>
+void set_mapped_value(::gpiod_line_settings* settings, cxx_enum_type value,
+ const ::std::map<cxx_enum_type, c_enum_type>& mapping)
{
- auto mapped_val = do_map_value(value, mapping);
+ c_enum_type mapped_val = do_map_value(value, mapping);
auto ret = set_func(settings, mapped_val);
if (ret)
throw_from_errno("unable to set property");
}
-template<class ret_type, int get_func(::gpiod_line_settings*)>
-ret_type get_mapped_value(::gpiod_line_settings* settings,
- const ::std::map<int, ret_type>& mapping)
+template<class cxx_enum_type, class c_enum_type, c_enum_type get_func(::gpiod_line_settings*)>
+cxx_enum_type get_mapped_value(::gpiod_line_settings* settings,
+ const ::std::map<c_enum_type, cxx_enum_type>& mapping)
{
- int mapped_val = get_func(settings);
+ auto mapped_val = get_func(settings);
- return map_int_to_enum(mapped_val, mapping);
+ return map_enum_c_to_cxx(mapped_val, mapping);
}
} /* namespace */
@@ -162,7 +165,7 @@ GPIOD_CXX_API line_settings& line_settings::reset(void) noexcept
GPIOD_CXX_API line_settings& line_settings::set_direction(line::direction direction)
{
- set_mapped_value<line::direction,
+ set_mapped_value<line::direction, gpiod_line_direction,
::gpiod_line_settings_set_direction>(this->_m_priv->settings.get(),
direction, direction_mapping);
@@ -171,7 +174,7 @@ GPIOD_CXX_API line_settings& line_settings::set_direction(line::direction direct
GPIOD_CXX_API line::direction line_settings::direction() const
{
- return get_mapped_value<line::direction,
+ return get_mapped_value<line::direction, gpiod_line_direction,
::gpiod_line_settings_get_direction>(
this->_m_priv->settings.get(),
reverse_direction_mapping);
@@ -179,7 +182,7 @@ GPIOD_CXX_API line::direction line_settings::direction() const
GPIOD_CXX_API line_settings& line_settings::set_edge_detection(line::edge edge)
{
- set_mapped_value<line::edge,
+ set_mapped_value<line::edge, gpiod_line_edge,
::gpiod_line_settings_set_edge_detection>(this->_m_priv->settings.get(),
edge, edge_mapping);
@@ -188,7 +191,7 @@ GPIOD_CXX_API line_settings& line_settings::set_edge_detection(line::edge edge)
GPIOD_CXX_API line::edge line_settings::edge_detection() const
{
- return get_mapped_value<line::edge,
+ return get_mapped_value<line::edge, gpiod_line_edge,
::gpiod_line_settings_get_edge_detection>(
this->_m_priv->settings.get(),
reverse_edge_mapping);
@@ -196,7 +199,7 @@ GPIOD_CXX_API line::edge line_settings::edge_detection() const
GPIOD_CXX_API line_settings& line_settings::set_bias(line::bias bias)
{
- set_mapped_value<line::bias,
+ set_mapped_value<line::bias, gpiod_line_bias,
::gpiod_line_settings_set_bias>(this->_m_priv->settings.get(),
bias, bias_mapping);
@@ -205,14 +208,14 @@ GPIOD_CXX_API line_settings& line_settings::set_bias(line::bias bias)
GPIOD_CXX_API line::bias line_settings::bias() const
{
- return get_mapped_value<line::bias,
+ return get_mapped_value<line::bias, gpiod_line_bias,
::gpiod_line_settings_get_bias>(this->_m_priv->settings.get(),
reverse_bias_mapping);
}
GPIOD_CXX_API line_settings& line_settings::set_drive(line::drive drive)
{
- set_mapped_value<line::drive,
+ set_mapped_value<line::drive, gpiod_line_drive,
::gpiod_line_settings_set_drive>(this->_m_priv->settings.get(),
drive, drive_mapping);
@@ -221,7 +224,7 @@ GPIOD_CXX_API line_settings& line_settings::set_drive(line::drive drive)
GPIOD_CXX_API line::drive line_settings::drive() const
{
- return get_mapped_value<line::drive,
+ return get_mapped_value<line::drive, gpiod_line_drive,
::gpiod_line_settings_get_drive>(this->_m_priv->settings.get(),
reverse_drive_mapping);
}
@@ -254,7 +257,7 @@ GPIOD_CXX_API ::std::chrono::microseconds line_settings::debounce_period() const
GPIOD_CXX_API line_settings& line_settings::set_event_clock(line::clock event_clock)
{
- set_mapped_value<line::clock,
+ set_mapped_value<line::clock, gpiod_line_event_clock,
::gpiod_line_settings_set_event_clock>(this->_m_priv->settings.get(),
event_clock, clock_mapping);
@@ -263,7 +266,7 @@ GPIOD_CXX_API line_settings& line_settings::set_event_clock(line::clock event_cl
GPIOD_CXX_API line::clock line_settings::event_clock() const
{
- return get_mapped_value<line::clock,
+ return get_mapped_value<line::clock, gpiod_line_event_clock,
::gpiod_line_settings_get_event_clock>(
this->_m_priv->settings.get(),
reverse_clock_mapping);
@@ -271,7 +274,7 @@ GPIOD_CXX_API line::clock line_settings::event_clock() const
GPIOD_CXX_API line_settings& line_settings::set_output_value(line::value value)
{
- set_mapped_value<line::value,
+ set_mapped_value<line::value, gpiod_line_value,
::gpiod_line_settings_set_output_value>(this->_m_priv->settings.get(),
value, value_mapping);
@@ -280,7 +283,7 @@ GPIOD_CXX_API line_settings& line_settings::set_output_value(line::value value)
GPIOD_CXX_API line::value line_settings::output_value() const
{
- return get_mapped_value<line::value,
+ return get_mapped_value<line::value, gpiod_line_value,
::gpiod_line_settings_get_output_value>(
this->_m_priv->settings.get(),
reverse_value_mapping);
@@ -12,18 +12,18 @@ namespace gpiosim {
namespace {
-const ::std::map<chip::pull, int> pull_mapping = {
+const ::std::map<chip::pull, gpiosim_pull> pull_mapping = {
{ chip::pull::PULL_UP, GPIOSIM_PULL_UP },
{ chip::pull::PULL_DOWN, GPIOSIM_PULL_DOWN }
};
-const ::std::map<chip_builder::hog_direction, int> hog_dir_mapping = {
+const ::std::map<chip_builder::hog_direction, gpiosim_direction> hog_dir_mapping = {
{ chip_builder::hog_direction::INPUT, GPIOSIM_HOG_DIR_INPUT },
{ chip_builder::hog_direction::OUTPUT_HIGH, GPIOSIM_HOG_DIR_OUTPUT_HIGH },
{ chip_builder::hog_direction::OUTPUT_LOW, GPIOSIM_HOG_DIR_OUTPUT_LOW }
};
-const ::std::map<int, chip::value> value_mapping = {
+const ::std::map<gpiosim_value, chip::value> value_mapping = {
{ GPIOSIM_VALUE_INACTIVE, chip::value::INACTIVE },
{ GPIOSIM_VALUE_ACTIVE, chip::value::ACTIVE }
};
@@ -137,8 +137,8 @@ chip& chip::operator=(chip&& other)
chip::value chip::get_value(unsigned int offset)
{
- int val = ::gpiosim_bank_get_value(this->_m_priv->bank.get(), offset);
- if (val < 0)
+ auto val = ::gpiosim_bank_get_value(this->_m_priv->bank.get(), offset);
+ if (val == GPIOSIM_VALUE_ERROR)
throw ::std::system_error(errno, ::std::system_category(),
"failed to read the simulated GPIO line value");
@@ -147,8 +147,8 @@ chip::value chip::get_value(unsigned int offset)
void chip::set_pull(unsigned int offset, pull pull)
{
- int ret = ::gpiosim_bank_set_pull(this->_m_priv->bank.get(),
- offset, pull_mapping.at(pull));
+ auto ret = ::gpiosim_bank_set_pull(this->_m_priv->bank.get(),
+ offset, pull_mapping.at(pull));
if (ret)
throw ::std::system_error(errno, ::std::system_category(),
"failed to set the pull of simulated GPIO line");
@@ -8,18 +8,10 @@ typedef struct {
struct gpiod_line_settings *settings;
} line_settings_object;
-static int set_int_prop(struct gpiod_line_settings *settings, int val,
- int (*func)(struct gpiod_line_settings *, int))
+static int set_error(void)
{
- int ret;
-
- ret = func(settings, val);
- if (ret) {
- Py_gpiod_SetErrFromErrno();
- return -1;
- }
-
- return 0;
+ Py_gpiod_SetErrFromErrno();
+ return -1;
}
static int
@@ -37,9 +29,14 @@ line_settings_init(line_settings_object *self, PyObject *args, PyObject *kwargs)
NULL
};
- int direction, edge, bias, drive, active_low, event_clock, output_value,
- ret;
+ enum gpiod_line_event_clock event_clock;
+ enum gpiod_line_direction direction;
+ enum gpiod_line_value output_value;
unsigned long debounce_period;
+ enum gpiod_line_drive drive;
+ enum gpiod_line_edge edge;
+ enum gpiod_line_bias bias;
+ int ret, active_low;
ret = PyArg_ParseTupleAndKeywords(args, kwargs, "IIIIpkII", kwlist,
&direction, &edge, &bias, &drive, &active_low,
@@ -53,39 +50,34 @@ line_settings_init(line_settings_object *self, PyObject *args, PyObject *kwargs)
return -1;
}
- ret = set_int_prop(self->settings, direction,
- gpiod_line_settings_set_direction);
+ ret = gpiod_line_settings_set_direction(self->settings, direction);
if (ret)
- return -1;
+ return set_error();
- ret = set_int_prop(self->settings, edge,
- gpiod_line_settings_set_edge_detection);
+ ret = gpiod_line_settings_set_edge_detection(self->settings, edge);
if (ret)
- return -1;
+ return set_error();
- ret = set_int_prop(self->settings, bias,
- gpiod_line_settings_set_bias);
+ ret = gpiod_line_settings_set_bias(self->settings, bias);
if (ret)
- return -1;
+ return set_error();
- ret = set_int_prop(self->settings, drive,
- gpiod_line_settings_set_drive);
+ ret = gpiod_line_settings_set_drive(self->settings, drive);
if (ret)
- return -1;
+ return set_error();
gpiod_line_settings_set_active_low(self->settings, active_low);
gpiod_line_settings_set_debounce_period_us(self->settings,
debounce_period);
- ret = set_int_prop(self->settings, edge,
- gpiod_line_settings_set_edge_detection);
+ ret = gpiod_line_settings_set_edge_detection(self->settings, edge);
if (ret)
- return -1;
+ return set_error();
- ret = set_int_prop(self->settings, output_value,
- gpiod_line_settings_set_output_value);
+ ret = gpiod_line_settings_set_output_value(self->settings,
+ output_value);
if (ret)
- return -1;
+ return set_error();
return 0;
}
@@ -7,7 +7,7 @@ typedef struct {
PyObject_HEAD;
struct gpiod_line_request *request;
unsigned int *offsets;
- int *values;
+ enum gpiod_line_value *values;
size_t num_lines;
struct gpiod_edge_event_buffer *buffer;
} request_object;
@@ -360,10 +360,10 @@ PyObject *Py_gpiod_MakeRequestObject(struct gpiod_line_request *request,
size_t event_buffer_size)
{
struct gpiod_edge_event_buffer *buffer;
+ enum gpiod_line_value *values;
request_object *req_obj;
unsigned int *offsets;
size_t num_lines;
- int *values;
num_lines = gpiod_line_request_get_num_lines(request);
@@ -2,7 +2,7 @@
// SPDX-FileCopyrightText: 2022 Linaro Ltd.
// SPDX-FileCopyrightTest: 2022 Viresh Kumar <viresh.kumar@linaro.org>
-use libgpiod::{Error, Result};
+use libgpiod::{Error, Result, OperationType};
#[allow(non_camel_case_types, non_upper_case_globals)]
#[cfg_attr(test, allow(deref_nullptr, non_snake_case))]
@@ -15,6 +15,17 @@ use bindings_raw::*;
mod sim;
pub use sim::*;
+use crate::{
+ gpiosim_value_GPIOSIM_VALUE_INACTIVE as GPIOSIM_VALUE_INACTIVE,
+ gpiosim_value_GPIOSIM_VALUE_ACTIVE as GPIOSIM_VALUE_ACTIVE,
+ gpiosim_value_GPIOSIM_VALUE_ERROR as GPIOSIM_VALUE_ERROR,
+ gpiosim_direction_GPIOSIM_HOG_DIR_INPUT as GPIOSIM_HOG_DIR_INPUT,
+ gpiosim_direction_GPIOSIM_HOG_DIR_OUTPUT_HIGH as GPIOSIM_HOG_DIR_OUTPUT_HIGH,
+ gpiosim_direction_GPIOSIM_HOG_DIR_OUTPUT_LOW as GPIOSIM_HOG_DIR_OUTPUT_LOW,
+ gpiosim_pull_GPIOSIM_PULL_UP as GPIOSIM_PULL_UP,
+ gpiosim_pull_GPIOSIM_PULL_DOWN as GPIOSIM_PULL_DOWN,
+};
+
/// Value settings.
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Value {
@@ -25,12 +36,17 @@ pub enum Value {
}
impl Value {
- pub(crate) fn new(val: u32) -> Result<Self> {
- match val {
- GPIOSIM_VALUE_INACTIVE => Ok(Value::InActive),
- GPIOSIM_VALUE_ACTIVE => Ok(Value::Active),
- _ => Err(Error::InvalidEnumValue("Value", val as u32)),
- }
+ pub(crate) fn new(val: gpiosim_value) -> Result<Self> {
+ Ok(match val {
+ GPIOSIM_VALUE_INACTIVE => Value::InActive,
+ GPIOSIM_VALUE_ACTIVE => Value::Active,
+ GPIOSIM_VALUE_ERROR => {
+ return Err(Error::OperationFailed(
+ OperationType::SimBankGetVal, errno::errno()
+ ))
+ }
+ _ => return Err(Error::InvalidEnumValue("Value", val as i32)),
+ })
}
}
@@ -46,12 +62,12 @@ pub enum Direction {
}
impl Direction {
- fn val(self) -> i32 {
- (match self {
+ fn val(self) -> gpiosim_direction {
+ match self {
Direction::Input => GPIOSIM_HOG_DIR_INPUT,
Direction::OutputHigh => GPIOSIM_HOG_DIR_OUTPUT_HIGH,
Direction::OutputLow => GPIOSIM_HOG_DIR_OUTPUT_LOW,
- }) as i32
+ }
}
}
@@ -65,10 +81,10 @@ pub enum Pull {
}
impl Pull {
- fn val(self) -> i32 {
- (match self {
+ fn val(self) -> gpiosim_pull {
+ match self {
Pull::Up => GPIOSIM_PULL_UP,
Pull::Down => GPIOSIM_PULL_DOWN,
- }) as i32
+ }
}
}
@@ -164,7 +164,7 @@ impl SimBank {
errno::errno(),
))
} else {
- Value::new(ret as u32)
+ Value::new(ret as i32)
}
}
@@ -24,6 +24,35 @@ use thiserror::Error as ThisError;
use libgpiod_sys as gpiod;
+use gpiod::{
+ gpiod_edge_event_type_GPIOD_EDGE_EVENT_FALLING_EDGE as GPIOD_EDGE_EVENT_FALLING_EDGE,
+ gpiod_edge_event_type_GPIOD_EDGE_EVENT_RISING_EDGE as GPIOD_EDGE_EVENT_RISING_EDGE,
+ gpiod_info_event_type_GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED as GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED,
+ gpiod_info_event_type_GPIOD_INFO_EVENT_LINE_RELEASED as GPIOD_INFO_EVENT_LINE_RELEASED,
+ gpiod_info_event_type_GPIOD_INFO_EVENT_LINE_REQUESTED as GPIOD_INFO_EVENT_LINE_REQUESTED,
+ gpiod_line_bias_GPIOD_LINE_BIAS_AS_IS as GPIOD_LINE_BIAS_AS_IS,
+ gpiod_line_bias_GPIOD_LINE_BIAS_DISABLED as GPIOD_LINE_BIAS_DISABLED,
+ gpiod_line_bias_GPIOD_LINE_BIAS_PULL_DOWN as GPIOD_LINE_BIAS_PULL_DOWN,
+ gpiod_line_bias_GPIOD_LINE_BIAS_PULL_UP as GPIOD_LINE_BIAS_PULL_UP,
+ gpiod_line_bias_GPIOD_LINE_BIAS_UNKNOWN as GPIOD_LINE_BIAS_UNKNOWN,
+ gpiod_line_direction_GPIOD_LINE_DIRECTION_AS_IS as GPIOD_LINE_DIRECTION_AS_IS,
+ gpiod_line_direction_GPIOD_LINE_DIRECTION_INPUT as GPIOD_LINE_DIRECTION_INPUT,
+ gpiod_line_direction_GPIOD_LINE_DIRECTION_OUTPUT as GPIOD_LINE_DIRECTION_OUTPUT,
+ gpiod_line_drive_GPIOD_LINE_DRIVE_OPEN_DRAIN as GPIOD_LINE_DRIVE_OPEN_DRAIN,
+ gpiod_line_drive_GPIOD_LINE_DRIVE_OPEN_SOURCE as GPIOD_LINE_DRIVE_OPEN_SOURCE,
+ gpiod_line_drive_GPIOD_LINE_DRIVE_PUSH_PULL as GPIOD_LINE_DRIVE_PUSH_PULL,
+ gpiod_line_edge_GPIOD_LINE_EDGE_BOTH as GPIOD_LINE_EDGE_BOTH,
+ gpiod_line_edge_GPIOD_LINE_EDGE_FALLING as GPIOD_LINE_EDGE_FALLING,
+ gpiod_line_edge_GPIOD_LINE_EDGE_NONE as GPIOD_LINE_EDGE_NONE,
+ gpiod_line_edge_GPIOD_LINE_EDGE_RISING as GPIOD_LINE_EDGE_RISING,
+ gpiod_line_event_clock_GPIOD_LINE_EVENT_CLOCK_HTE as GPIOD_LINE_EVENT_CLOCK_HTE,
+ gpiod_line_event_clock_GPIOD_LINE_EVENT_CLOCK_MONOTONIC as GPIOD_LINE_EVENT_CLOCK_MONOTONIC,
+ gpiod_line_event_clock_GPIOD_LINE_EVENT_CLOCK_REALTIME as GPIOD_LINE_EVENT_CLOCK_REALTIME,
+ gpiod_line_value_GPIOD_LINE_VALUE_ACTIVE as GPIOD_LINE_VALUE_ACTIVE,
+ gpiod_line_value_GPIOD_LINE_VALUE_INACTIVE as GPIOD_LINE_VALUE_INACTIVE,
+ gpiod_line_value_GPIOD_LINE_VALUE_ERROR as GPIOD_LINE_VALUE_ERROR,
+};
+
/// Operation types, used with OperationFailed() Error.
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum OperationType {
@@ -96,7 +125,7 @@ pub enum Error {
#[error("Invalid String")]
InvalidString,
#[error("Invalid enum {0} value: {1}")]
- InvalidEnumValue(&'static str, u32),
+ InvalidEnumValue(&'static str, i32),
#[error("Operation {0} Failed: {1}")]
OperationFailed(OperationType, errno::Errno),
#[error("Invalid Arguments")]
@@ -150,18 +179,24 @@ pub mod line {
pub type ValueMap = IntMap<Value>;
impl Value {
- pub fn new(val: i32) -> Result<Self> {
+ pub fn new(val: gpiod::gpiod_line_value) -> Result<Self> {
Ok(match val {
- 0 => Value::InActive,
- 1 => Value::Active,
- _ => return Err(Error::InvalidEnumValue("Value", val as u32)),
+ GPIOD_LINE_VALUE_INACTIVE => Value::InActive,
+ GPIOD_LINE_VALUE_ACTIVE => Value::Active,
+ GPIOD_LINE_VALUE_ERROR => {
+ return Err(Error::OperationFailed(
+ OperationType::LineRequestGetVal,
+ errno::errno(),
+ ))
+ }
+ _ => return Err(Error::InvalidEnumValue("Value", val as i32)),
})
}
- pub(crate) fn value(&self) -> i32 {
+ pub(crate) fn value(&self) -> gpiod::gpiod_line_value {
match self {
- Value::Active => 1,
- Value::InActive => 0,
+ Value::Active => GPIOD_LINE_VALUE_ACTIVE,
+ Value::InActive => GPIOD_LINE_VALUE_INACTIVE,
}
}
}
@@ -181,20 +216,20 @@ pub mod line {
}
impl Direction {
- pub(crate) fn new(dir: u32) -> Result<Self> {
+ pub(crate) fn new(dir: gpiod::gpiod_line_direction) -> Result<Self> {
Ok(match dir {
- gpiod::GPIOD_LINE_DIRECTION_AS_IS => Direction::AsIs,
- gpiod::GPIOD_LINE_DIRECTION_INPUT => Direction::Input,
- gpiod::GPIOD_LINE_DIRECTION_OUTPUT => Direction::Output,
- _ => return Err(Error::InvalidEnumValue("Direction", dir)),
+ GPIOD_LINE_DIRECTION_AS_IS => Direction::AsIs,
+ GPIOD_LINE_DIRECTION_INPUT => Direction::Input,
+ GPIOD_LINE_DIRECTION_OUTPUT => Direction::Output,
+ _ => return Err(Error::InvalidEnumValue("Direction", dir as i32)),
})
}
- pub(crate) fn gpiod_direction(&self) -> u32 {
+ pub(crate) fn gpiod_direction(&self) -> gpiod::gpiod_line_direction {
match self {
- Direction::AsIs => gpiod::GPIOD_LINE_DIRECTION_AS_IS,
- Direction::Input => gpiod::GPIOD_LINE_DIRECTION_INPUT,
- Direction::Output => gpiod::GPIOD_LINE_DIRECTION_OUTPUT,
+ Direction::AsIs => GPIOD_LINE_DIRECTION_AS_IS,
+ Direction::Input => GPIOD_LINE_DIRECTION_INPUT,
+ Direction::Output => GPIOD_LINE_DIRECTION_OUTPUT,
}
}
}
@@ -211,24 +246,24 @@ pub mod line {
}
impl Bias {
- pub(crate) fn new(bias: u32) -> Result<Option<Self>> {
+ pub(crate) fn new(bias: gpiod::gpiod_line_bias) -> Result<Option<Self>> {
Ok(match bias {
- gpiod::GPIOD_LINE_BIAS_UNKNOWN => None,
- gpiod::GPIOD_LINE_BIAS_AS_IS => None,
- gpiod::GPIOD_LINE_BIAS_DISABLED => Some(Bias::Disabled),
- gpiod::GPIOD_LINE_BIAS_PULL_UP => Some(Bias::PullUp),
- gpiod::GPIOD_LINE_BIAS_PULL_DOWN => Some(Bias::PullDown),
- _ => return Err(Error::InvalidEnumValue("Bias", bias)),
+ GPIOD_LINE_BIAS_UNKNOWN => None,
+ GPIOD_LINE_BIAS_AS_IS => None,
+ GPIOD_LINE_BIAS_DISABLED => Some(Bias::Disabled),
+ GPIOD_LINE_BIAS_PULL_UP => Some(Bias::PullUp),
+ GPIOD_LINE_BIAS_PULL_DOWN => Some(Bias::PullDown),
+ _ => return Err(Error::InvalidEnumValue("Bias", bias as i32)),
})
}
- pub(crate) fn gpiod_bias(bias: Option<Bias>) -> u32 {
+ pub(crate) fn gpiod_bias(bias: Option<Bias>) -> gpiod::gpiod_line_bias {
match bias {
- None => gpiod::GPIOD_LINE_BIAS_AS_IS,
+ None => GPIOD_LINE_BIAS_AS_IS,
Some(bias) => match bias {
- Bias::Disabled => gpiod::GPIOD_LINE_BIAS_DISABLED,
- Bias::PullUp => gpiod::GPIOD_LINE_BIAS_PULL_UP,
- Bias::PullDown => gpiod::GPIOD_LINE_BIAS_PULL_DOWN,
+ Bias::Disabled => GPIOD_LINE_BIAS_DISABLED,
+ Bias::PullUp => GPIOD_LINE_BIAS_PULL_UP,
+ Bias::PullDown => GPIOD_LINE_BIAS_PULL_DOWN,
},
}
}
@@ -246,20 +281,20 @@ pub mod line {
}
impl Drive {
- pub(crate) fn new(drive: u32) -> Result<Self> {
+ pub(crate) fn new(drive: gpiod::gpiod_line_drive) -> Result<Self> {
Ok(match drive {
- gpiod::GPIOD_LINE_DRIVE_PUSH_PULL => Drive::PushPull,
- gpiod::GPIOD_LINE_DRIVE_OPEN_DRAIN => Drive::OpenDrain,
- gpiod::GPIOD_LINE_DRIVE_OPEN_SOURCE => Drive::OpenSource,
- _ => return Err(Error::InvalidEnumValue("Drive", drive)),
+ GPIOD_LINE_DRIVE_PUSH_PULL => Drive::PushPull,
+ GPIOD_LINE_DRIVE_OPEN_DRAIN => Drive::OpenDrain,
+ GPIOD_LINE_DRIVE_OPEN_SOURCE => Drive::OpenSource,
+ _ => return Err(Error::InvalidEnumValue("Drive", drive as i32)),
})
}
- pub(crate) fn gpiod_drive(&self) -> u32 {
+ pub(crate) fn gpiod_drive(&self) -> gpiod::gpiod_line_drive {
match self {
- Drive::PushPull => gpiod::GPIOD_LINE_DRIVE_PUSH_PULL,
- Drive::OpenDrain => gpiod::GPIOD_LINE_DRIVE_OPEN_DRAIN,
- Drive::OpenSource => gpiod::GPIOD_LINE_DRIVE_OPEN_SOURCE,
+ Drive::PushPull => GPIOD_LINE_DRIVE_PUSH_PULL,
+ Drive::OpenDrain => GPIOD_LINE_DRIVE_OPEN_DRAIN,
+ Drive::OpenSource => GPIOD_LINE_DRIVE_OPEN_SOURCE,
}
}
}
@@ -276,23 +311,23 @@ pub mod line {
}
impl Edge {
- pub(crate) fn new(edge: u32) -> Result<Option<Self>> {
+ pub(crate) fn new(edge: gpiod::gpiod_line_edge) -> Result<Option<Self>> {
Ok(match edge {
- gpiod::GPIOD_LINE_EDGE_NONE => None,
- gpiod::GPIOD_LINE_EDGE_RISING => Some(Edge::Rising),
- gpiod::GPIOD_LINE_EDGE_FALLING => Some(Edge::Falling),
- gpiod::GPIOD_LINE_EDGE_BOTH => Some(Edge::Both),
- _ => return Err(Error::InvalidEnumValue("Edge", edge)),
+ GPIOD_LINE_EDGE_NONE => None,
+ GPIOD_LINE_EDGE_RISING => Some(Edge::Rising),
+ GPIOD_LINE_EDGE_FALLING => Some(Edge::Falling),
+ GPIOD_LINE_EDGE_BOTH => Some(Edge::Both),
+ _ => return Err(Error::InvalidEnumValue("Edge", edge as i32)),
})
}
- pub(crate) fn gpiod_edge(edge: Option<Edge>) -> u32 {
+ pub(crate) fn gpiod_edge(edge: Option<Edge>) -> gpiod::gpiod_line_edge {
match edge {
- None => gpiod::GPIOD_LINE_EDGE_NONE,
+ None => GPIOD_LINE_EDGE_NONE,
Some(edge) => match edge {
- Edge::Rising => gpiod::GPIOD_LINE_EDGE_RISING,
- Edge::Falling => gpiod::GPIOD_LINE_EDGE_FALLING,
- Edge::Both => gpiod::GPIOD_LINE_EDGE_BOTH,
+ Edge::Rising => GPIOD_LINE_EDGE_RISING,
+ Edge::Falling => GPIOD_LINE_EDGE_FALLING,
+ Edge::Both => GPIOD_LINE_EDGE_BOTH,
},
}
}
@@ -358,20 +393,20 @@ pub mod line {
}
impl EventClock {
- pub(crate) fn new(clock: u32) -> Result<Self> {
+ pub(crate) fn new(clock: gpiod::gpiod_line_event_clock) -> Result<Self> {
Ok(match clock {
- gpiod::GPIOD_LINE_EVENT_CLOCK_MONOTONIC => EventClock::Monotonic,
- gpiod::GPIOD_LINE_EVENT_CLOCK_REALTIME => EventClock::Realtime,
- gpiod::GPIOD_LINE_EVENT_CLOCK_HTE => EventClock::HTE,
- _ => return Err(Error::InvalidEnumValue("Eventclock", clock)),
+ GPIOD_LINE_EVENT_CLOCK_MONOTONIC => EventClock::Monotonic,
+ GPIOD_LINE_EVENT_CLOCK_REALTIME => EventClock::Realtime,
+ GPIOD_LINE_EVENT_CLOCK_HTE => EventClock::HTE,
+ _ => return Err(Error::InvalidEnumValue("Eventclock", clock as i32)),
})
}
- pub(crate) fn gpiod_clock(&self) -> u32 {
+ pub(crate) fn gpiod_clock(&self) -> gpiod::gpiod_line_event_clock {
match self {
- EventClock::Monotonic => gpiod::GPIOD_LINE_EVENT_CLOCK_MONOTONIC,
- EventClock::Realtime => gpiod::GPIOD_LINE_EVENT_CLOCK_REALTIME,
- EventClock::HTE => gpiod::GPIOD_LINE_EVENT_CLOCK_HTE,
+ EventClock::Monotonic => GPIOD_LINE_EVENT_CLOCK_MONOTONIC,
+ EventClock::Realtime => GPIOD_LINE_EVENT_CLOCK_REALTIME,
+ EventClock::HTE => GPIOD_LINE_EVENT_CLOCK_HTE,
}
}
}
@@ -388,12 +423,12 @@ pub mod line {
}
impl InfoChangeKind {
- pub(crate) fn new(kind: u32) -> Result<Self> {
+ pub(crate) fn new(kind: gpiod::gpiod_info_event_type) -> Result<Self> {
Ok(match kind {
- gpiod::GPIOD_INFO_EVENT_LINE_REQUESTED => InfoChangeKind::LineRequested,
- gpiod::GPIOD_INFO_EVENT_LINE_RELEASED => InfoChangeKind::LineReleased,
- gpiod::GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED => InfoChangeKind::LineConfigChanged,
- _ => return Err(Error::InvalidEnumValue("InfoChangeKind", kind)),
+ GPIOD_INFO_EVENT_LINE_REQUESTED => InfoChangeKind::LineRequested,
+ GPIOD_INFO_EVENT_LINE_RELEASED => InfoChangeKind::LineReleased,
+ GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED => InfoChangeKind::LineConfigChanged,
+ _ => return Err(Error::InvalidEnumValue("InfoChangeKind", kind as i32)),
})
}
}
@@ -408,11 +443,11 @@ pub mod line {
}
impl EdgeKind {
- pub(crate) fn new(kind: u32) -> Result<Self> {
+ pub(crate) fn new(kind: gpiod::gpiod_edge_event_type) -> Result<Self> {
Ok(match kind {
- gpiod::GPIOD_EDGE_EVENT_RISING_EDGE => EdgeKind::Rising,
- gpiod::GPIOD_EDGE_EVENT_FALLING_EDGE => EdgeKind::Falling,
- _ => return Err(Error::InvalidEnumValue("EdgeEvent", kind)),
+ GPIOD_EDGE_EVENT_RISING_EDGE => EdgeKind::Rising,
+ GPIOD_EDGE_EVENT_FALLING_EDGE => EdgeKind::Falling,
+ _ => return Err(Error::InvalidEnumValue("EdgeEvent", kind as i32)),
})
}
}
@@ -100,7 +100,7 @@ impl Info {
/// Get the GPIO line's direction.
pub fn direction(&self) -> Result<Direction> {
// SAFETY: `gpiod_line_info` is guaranteed to be valid here.
- Direction::new(unsafe { gpiod::gpiod_line_info_get_direction(self.info) } as u32)
+ Direction::new(unsafe { gpiod::gpiod_line_info_get_direction(self.info) })
}
/// Returns true if the line is "active-low", false otherwise.
@@ -112,25 +112,25 @@ impl Info {
/// Get the GPIO line's bias setting.
pub fn bias(&self) -> Result<Option<Bias>> {
// SAFETY: `gpiod_line_info` is guaranteed to be valid here.
- Bias::new(unsafe { gpiod::gpiod_line_info_get_bias(self.info) } as u32)
+ Bias::new(unsafe { gpiod::gpiod_line_info_get_bias(self.info) })
}
/// Get the GPIO line's drive setting.
pub fn drive(&self) -> Result<Drive> {
// SAFETY: `gpiod_line_info` is guaranteed to be valid here.
- Drive::new(unsafe { gpiod::gpiod_line_info_get_drive(self.info) } as u32)
+ Drive::new(unsafe { gpiod::gpiod_line_info_get_drive(self.info) })
}
/// Get the current edge detection setting of the line.
pub fn edge_detection(&self) -> Result<Option<Edge>> {
// SAFETY: `gpiod_line_info` is guaranteed to be valid here.
- Edge::new(unsafe { gpiod::gpiod_line_info_get_edge_detection(self.info) } as u32)
+ Edge::new(unsafe { gpiod::gpiod_line_info_get_edge_detection(self.info) })
}
/// Get the current event clock setting used for edge event timestamps.
pub fn event_clock(&self) -> Result<EventClock> {
// SAFETY: `gpiod_line_info` is guaranteed to be valid here.
- EventClock::new(unsafe { gpiod::gpiod_line_info_get_event_clock(self.info) } as u32)
+ EventClock::new(unsafe { gpiod::gpiod_line_info_get_event_clock(self.info) })
}
/// Returns true if the line is debounced (either by hardware or by the
@@ -102,10 +102,7 @@ impl Settings {
pub fn set_direction(&mut self, direction: Direction) -> Result<&mut Self> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
let ret = unsafe {
- gpiod::gpiod_line_settings_set_direction(
- self.settings,
- direction.gpiod_direction() as i32,
- )
+ gpiod::gpiod_line_settings_set_direction(self.settings, direction.gpiod_direction())
};
if ret == -1 {
@@ -121,17 +118,14 @@ impl Settings {
/// Get the direction setting.
pub fn direction(&self) -> Result<Direction> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- Direction::new(unsafe { gpiod::gpiod_line_settings_get_direction(self.settings) } as u32)
+ Direction::new(unsafe { gpiod::gpiod_line_settings_get_direction(self.settings) })
}
/// Set the edge event detection setting.
pub fn set_edge_detection(&mut self, edge: Option<Edge>) -> Result<&mut Self> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
let ret = unsafe {
- gpiod::gpiod_line_settings_set_edge_detection(
- self.settings,
- Edge::gpiod_edge(edge) as i32,
- )
+ gpiod::gpiod_line_settings_set_edge_detection(self.settings, Edge::gpiod_edge(edge))
};
if ret == -1 {
@@ -147,15 +141,14 @@ impl Settings {
/// Get the edge event detection setting.
pub fn edge_detection(&self) -> Result<Option<Edge>> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- Edge::new(unsafe { gpiod::gpiod_line_settings_get_edge_detection(self.settings) } as u32)
+ Edge::new(unsafe { gpiod::gpiod_line_settings_get_edge_detection(self.settings) })
}
/// Set the bias setting.
pub fn set_bias(&mut self, bias: Option<Bias>) -> Result<&mut Self> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- let ret = unsafe {
- gpiod::gpiod_line_settings_set_bias(self.settings, Bias::gpiod_bias(bias) as i32)
- };
+ let ret =
+ unsafe { gpiod::gpiod_line_settings_set_bias(self.settings, Bias::gpiod_bias(bias)) };
if ret == -1 {
Err(Error::OperationFailed(
@@ -170,15 +163,14 @@ impl Settings {
/// Get the bias setting.
pub fn bias(&self) -> Result<Option<Bias>> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- Bias::new(unsafe { gpiod::gpiod_line_settings_get_bias(self.settings) } as u32)
+ Bias::new(unsafe { gpiod::gpiod_line_settings_get_bias(self.settings) })
}
/// Set the drive setting.
pub fn set_drive(&mut self, drive: Drive) -> Result<&mut Self> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- let ret = unsafe {
- gpiod::gpiod_line_settings_set_drive(self.settings, drive.gpiod_drive() as i32)
- };
+ let ret =
+ unsafe { gpiod::gpiod_line_settings_set_drive(self.settings, drive.gpiod_drive()) };
if ret == -1 {
Err(Error::OperationFailed(
@@ -193,7 +185,7 @@ impl Settings {
/// Get the drive setting.
pub fn drive(&self) -> Result<Drive> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
- Drive::new(unsafe { gpiod::gpiod_line_settings_get_drive(self.settings) } as u32)
+ Drive::new(unsafe { gpiod::gpiod_line_settings_get_drive(self.settings) })
}
/// Set active-low setting.
@@ -236,7 +228,7 @@ impl Settings {
pub fn set_event_clock(&mut self, clock: EventClock) -> Result<&mut Self> {
// SAFETY: `gpiod_line_settings` is guaranteed to be valid here.
let ret = unsafe {
- gpiod::gpiod_line_settings_set_event_clock(self.settings, clock.gpiod_clock() as i32)
+ gpiod::gpiod_line_settings_set_event_clock(self.settings, clock.gpiod_clock())
};
if ret == -1 {
@@ -244,7 +244,9 @@ size_t gpiod_chip_info_get_num_lines(struct gpiod_chip_info *info);
/**
* @brief Logical line state.
*/
-enum {
+enum gpiod_line_value {
+ GPIOD_LINE_VALUE_ERROR = -1,
+ /**< Returned to indicate an error when reading the value. */
GPIOD_LINE_VALUE_INACTIVE = 0,
/**< Line is logically inactive. */
GPIOD_LINE_VALUE_ACTIVE = 1,
@@ -254,7 +256,7 @@ enum {
/**
* @brief Direction settings.
*/
-enum {
+enum gpiod_line_direction {
GPIOD_LINE_DIRECTION_AS_IS = 1,
/**< Request the line(s), but don't change direction. */
GPIOD_LINE_DIRECTION_INPUT,
@@ -266,7 +268,7 @@ enum {
/**
* @brief Edge detection settings.
*/
-enum {
+enum gpiod_line_edge {
GPIOD_LINE_EDGE_NONE = 1,
/**< Line edge detection is disabled. */
GPIOD_LINE_EDGE_RISING,
@@ -280,7 +282,7 @@ enum {
/**
* @brief Internal bias settings.
*/
-enum {
+enum gpiod_line_bias {
GPIOD_LINE_BIAS_AS_IS = 1,
/**< Don't change the bias setting when applying line config. */
GPIOD_LINE_BIAS_UNKNOWN,
@@ -296,7 +298,7 @@ enum {
/**
* @brief Drive settings.
*/
-enum {
+enum gpiod_line_drive {
GPIOD_LINE_DRIVE_PUSH_PULL = 1,
/**< Drive setting is push-pull. */
GPIOD_LINE_DRIVE_OPEN_DRAIN,
@@ -308,7 +310,7 @@ enum {
/**
* @brief Event clock settings.
*/
-enum {
+enum gpiod_line_event_clock {
GPIOD_LINE_EVENT_CLOCK_MONOTONIC = 1,
/**< Line uses the monotonic clock for edge event timestamps. */
GPIOD_LINE_EVENT_CLOCK_REALTIME,
@@ -404,7 +406,8 @@ const char *gpiod_line_info_get_consumer(struct gpiod_line_info *info);
* @return Returns ::GPIOD_LINE_DIRECTION_INPUT or
* ::GPIOD_LINE_DIRECTION_OUTPUT.
*/
-int gpiod_line_info_get_direction(struct gpiod_line_info *info);
+enum gpiod_line_direction
+gpiod_line_info_get_direction(struct gpiod_line_info *info);
/**
* @brief Get the edge detection setting of the line.
@@ -412,7 +415,8 @@ int gpiod_line_info_get_direction(struct gpiod_line_info *info);
* @return Returns ::GPIOD_LINE_EDGE_NONE, ::GPIOD_LINE_EDGE_RISING,
* ::GPIOD_LINE_EDGE_FALLING or ::GPIOD_LINE_EDGE_BOTH.
*/
-int gpiod_line_info_get_edge_detection(struct gpiod_line_info *info);
+enum gpiod_line_edge
+gpiod_line_info_get_edge_detection(struct gpiod_line_info *info);
/**
* @brief Get the bias setting of the line.
@@ -420,7 +424,8 @@ int gpiod_line_info_get_edge_detection(struct gpiod_line_info *info);
* @return Returns ::GPIOD_LINE_BIAS_PULL_UP, ::GPIOD_LINE_BIAS_PULL_DOWN,
* ::GPIOD_LINE_BIAS_DISABLED or ::GPIOD_LINE_BIAS_UNKNOWN.
*/
-int gpiod_line_info_get_bias(struct gpiod_line_info *info);
+enum gpiod_line_bias
+gpiod_line_info_get_bias(struct gpiod_line_info *info);
/**
* @brief Get the drive setting of the line.
@@ -428,7 +433,8 @@ int gpiod_line_info_get_bias(struct gpiod_line_info *info);
* @return Returns ::GPIOD_LINE_DRIVE_PUSH_PULL, ::GPIOD_LINE_DRIVE_OPEN_DRAIN
* or ::GPIOD_LINE_DRIVE_OPEN_SOURCE.
*/
-int gpiod_line_info_get_drive(struct gpiod_line_info *info);
+enum gpiod_line_drive
+gpiod_line_info_get_drive(struct gpiod_line_info *info);
/**
* @brief Check if the logical value of the line is inverted compared to the
@@ -462,7 +468,8 @@ gpiod_line_info_get_debounce_period_us(struct gpiod_line_info *info);
* @return Returns ::GPIOD_LINE_EVENT_CLOCK_MONOTONIC or
* ::GPIOD_LINE_EVENT_CLOCK_REALTIME.
*/
-int gpiod_line_info_get_event_clock(struct gpiod_line_info *info);
+enum gpiod_line_event_clock
+gpiod_line_info_get_event_clock(struct gpiod_line_info *info);
/**
* @}
@@ -482,7 +489,7 @@ int gpiod_line_info_get_event_clock(struct gpiod_line_info *info);
/**
* @brief Line status change event types.
*/
-enum {
+enum gpiod_info_event_type {
GPIOD_INFO_EVENT_LINE_REQUESTED = 1,
/**< Line has been requested. */
GPIOD_INFO_EVENT_LINE_RELEASED,
@@ -504,7 +511,8 @@ void gpiod_info_event_free(struct gpiod_info_event *event);
* ::GPIOD_INFO_EVENT_LINE_RELEASED or
* ::GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED.
*/
-int gpiod_info_event_get_event_type(struct gpiod_info_event *event);
+enum gpiod_info_event_type
+gpiod_info_event_get_event_type(struct gpiod_info_event *event);
/**
* @brief Get the timestamp of the event.
@@ -575,14 +583,15 @@ gpiod_line_settings_copy(struct gpiod_line_settings *settings);
* @return 0 on success, -1 on error.
*/
int gpiod_line_settings_set_direction(struct gpiod_line_settings *settings,
- int direction);
+ enum gpiod_line_direction direction);
/**
* @brief Get direction.
* @param settings Line settings object.
* @return Current direction.
*/
-int gpiod_line_settings_get_direction(struct gpiod_line_settings *settings);
+enum gpiod_line_direction
+gpiod_line_settings_get_direction(struct gpiod_line_settings *settings);
/**
* @brief Set edge detection.
@@ -591,14 +600,14 @@ int gpiod_line_settings_get_direction(struct gpiod_line_settings *settings);
* @return 0 on success, -1 on failure.
*/
int gpiod_line_settings_set_edge_detection(struct gpiod_line_settings *settings,
- int edge);
+ enum gpiod_line_edge edge);
/**
* @brief Get edge detection.
* @param settings Line settings object.
* @return Current edge detection setting.
*/
-int
+enum gpiod_line_edge
gpiod_line_settings_get_edge_detection(struct gpiod_line_settings *settings);
/**
@@ -608,14 +617,15 @@ gpiod_line_settings_get_edge_detection(struct gpiod_line_settings *settings);
* @return 0 on success, -1 on failure.
*/
int gpiod_line_settings_set_bias(struct gpiod_line_settings *settings,
- int bias);
+ enum gpiod_line_bias bias);
/**
* @brief Get bias.
* @param settings Line settings object.
* @return Current bias setting.
*/
-int gpiod_line_settings_get_bias(struct gpiod_line_settings *settings);
+enum gpiod_line_bias
+gpiod_line_settings_get_bias(struct gpiod_line_settings *settings);
/**
* @brief Set drive.
@@ -624,14 +634,15 @@ int gpiod_line_settings_get_bias(struct gpiod_line_settings *settings);
* @return 0 on success, -1 on failure.
*/
int gpiod_line_settings_set_drive(struct gpiod_line_settings *settings,
- int drive);
+ enum gpiod_line_drive drive);
/**
* @brief Get drive.
* @param settings Line settings object.
* @return Current drive setting.
*/
-int gpiod_line_settings_get_drive(struct gpiod_line_settings *settings);
+enum gpiod_line_drive
+gpiod_line_settings_get_drive(struct gpiod_line_settings *settings);
/**
* @brief Set active-low setting.
@@ -673,14 +684,15 @@ gpiod_line_settings_get_debounce_period_us(
* @return 0 on success, -1 on failure.
*/
int gpiod_line_settings_set_event_clock(struct gpiod_line_settings *settings,
- int event_clock);
+ enum gpiod_line_event_clock event_clock);
/**
* @brief Get event clock setting.
* @param settings Line settings object.
* @return Current event clock setting.
*/
-int gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings);
+enum gpiod_line_event_clock
+gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings);
/**
* @brief Set the output value.
@@ -689,14 +701,15 @@ int gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings);
* @return 0 on success, -1 on failure.
*/
int gpiod_line_settings_set_output_value(struct gpiod_line_settings *settings,
- int value);
+ enum gpiod_line_value value);
/**
* @brief Get the output value.
* @param settings Line settings object.
* @return Current output value.
*/
-int gpiod_line_settings_get_output_value(struct gpiod_line_settings *settings);
+enum gpiod_line_value
+gpiod_line_settings_get_output_value(struct gpiod_line_settings *settings);
/*
* @}
@@ -884,8 +897,9 @@ void gpiod_line_request_get_offsets(struct gpiod_line_request *request,
* @param offset The offset of the line of which the value should be read.
* @return Returns 1 or 0 on success and -1 on error.
*/
-int gpiod_line_request_get_value(struct gpiod_line_request *request,
- unsigned int offset);
+enum gpiod_line_value
+gpiod_line_request_get_value(struct gpiod_line_request *request,
+ unsigned int offset);
/**
* @brief Get the values of a subset of requested lines.
@@ -901,7 +915,7 @@ int gpiod_line_request_get_value(struct gpiod_line_request *request,
int gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
size_t num_values,
const unsigned int *offsets,
- int *values);
+ enum gpiod_line_value *values);
/**
* @brief Get the values of all requested lines.
@@ -915,7 +929,7 @@ int gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
* @return 0 on success, -1 on failure.
*/
int gpiod_line_request_get_values(struct gpiod_line_request *request,
- int *values);
+ enum gpiod_line_value *values);
/**
* @brief Set the value of a single requested line.
@@ -924,7 +938,8 @@ int gpiod_line_request_get_values(struct gpiod_line_request *request,
* @param value Value to set.
*/
int gpiod_line_request_set_value(struct gpiod_line_request *request,
- unsigned int offset, int value);
+ unsigned int offset,
+ enum gpiod_line_value value);
/**
* @brief Set the values of a subset of requested lines.
@@ -941,7 +956,7 @@ int gpiod_line_request_set_value(struct gpiod_line_request *request,
int gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
size_t num_values,
const unsigned int *offsets,
- const int *values);
+ const enum gpiod_line_value *values);
/**
* @brief Set the values of all lines associated with a request.
@@ -954,7 +969,7 @@ int gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
* ::gpiod_line_request_get_offsets.
*/
int gpiod_line_request_set_values(struct gpiod_line_request *request,
- const int *values);
+ const enum gpiod_line_value *values);
/**
* @brief Update the configuration of lines associated with a line request.
@@ -1032,7 +1047,7 @@ int gpiod_line_request_read_edge_event(struct gpiod_line_request *request,
/**
* @brief Event types.
*/
-enum {
+enum gpiod_edge_event_type {
GPIOD_EDGE_EVENT_RISING_EDGE = 1,
/**< Rising edge event. */
GPIOD_EDGE_EVENT_FALLING_EDGE
@@ -1059,7 +1074,8 @@ struct gpiod_edge_event *gpiod_edge_event_copy(struct gpiod_edge_event *event);
* @return The event type (::GPIOD_EDGE_EVENT_RISING_EDGE or
* ::GPIOD_EDGE_EVENT_FALLING_EDGE).
*/
-int gpiod_edge_event_get_event_type(struct gpiod_edge_event *event);
+enum gpiod_edge_event_type
+gpiod_edge_event_get_event_type(struct gpiod_edge_event *event);
/**
* @brief Get the timestamp of the event.
@@ -13,7 +13,7 @@
#define EVENT_BUFFER_MAX_CAPACITY (GPIO_V2_LINES_MAX * 16)
struct gpiod_edge_event {
- int event_type;
+ enum gpiod_edge_event_type event_type;
uint64_t timestamp;
unsigned int line_offset;
unsigned long global_seqno;
@@ -49,7 +49,8 @@ gpiod_edge_event_copy(struct gpiod_edge_event *event)
return copy;
}
-GPIOD_API int gpiod_edge_event_get_event_type(struct gpiod_edge_event *event)
+GPIOD_API enum gpiod_edge_event_type
+gpiod_edge_event_get_event_type(struct gpiod_edge_event *event)
{
return event->event_type;
}
@@ -9,7 +9,7 @@
#include "internal.h"
struct gpiod_info_event {
- int event_type;
+ enum gpiod_info_event_type event_type;
uint64_t timestamp;
struct gpiod_line_info *info;
};
@@ -61,7 +61,8 @@ GPIOD_API void gpiod_info_event_free(struct gpiod_info_event *event)
free(event);
}
-GPIOD_API int gpiod_info_event_get_event_type(struct gpiod_info_event *event)
+GPIOD_API enum gpiod_info_event_type
+gpiod_info_event_get_event_type(struct gpiod_info_event *event)
{
return event->event_type;
}
@@ -194,7 +194,7 @@ static void set_kernel_output_values(uint64_t *mask, uint64_t *vals,
struct gpiod_line_config *config)
{
struct per_line_config *per_line;
- int value;
+ enum gpiod_line_value value;
size_t i;
gpiod_line_mask_zero(mask);
@@ -292,6 +292,8 @@ static uint64_t make_kernel_flags(struct gpiod_line_settings *settings)
case GPIOD_LINE_DIRECTION_OUTPUT:
flags |= GPIO_V2_LINE_FLAG_OUTPUT;
break;
+ default:
+ break;
}
switch (gpiod_line_settings_get_edge_detection(settings)) {
@@ -311,6 +313,8 @@ static uint64_t make_kernel_flags(struct gpiod_line_settings *settings)
GPIO_V2_LINE_FLAG_INPUT);
flags &= ~GPIOD_LINE_DIRECTION_OUTPUT;
break;
+ default:
+ break;
}
switch (gpiod_line_settings_get_drive(settings)) {
@@ -320,6 +324,8 @@ static uint64_t make_kernel_flags(struct gpiod_line_settings *settings)
case GPIOD_LINE_DRIVE_OPEN_SOURCE:
flags |= GPIO_V2_LINE_FLAG_OPEN_SOURCE;
break;
+ default:
+ break;
}
switch (gpiod_line_settings_get_bias(settings)) {
@@ -332,6 +338,8 @@ static uint64_t make_kernel_flags(struct gpiod_line_settings *settings)
case GPIOD_LINE_BIAS_PULL_DOWN:
flags |= GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN;
break;
+ default:
+ break;
}
if (gpiod_line_settings_get_active_low(settings))
@@ -344,6 +352,8 @@ static uint64_t make_kernel_flags(struct gpiod_line_settings *settings)
case GPIOD_LINE_EVENT_CLOCK_HTE:
flags |= GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE;
break;
+ default:
+ break;
}
return flags;
@@ -12,12 +12,12 @@ struct gpiod_line_info {
char name[GPIO_MAX_NAME_SIZE];
bool used;
char consumer[GPIO_MAX_NAME_SIZE];
- int direction;
+ enum gpiod_line_direction direction;
bool active_low;
- int bias;
- int drive;
- int edge;
- int event_clock;
+ enum gpiod_line_bias bias;
+ enum gpiod_line_drive drive;
+ enum gpiod_line_edge edge;
+ enum gpiod_line_event_clock event_clock;
bool debounced;
unsigned long debounce_period_us;
};
@@ -64,7 +64,8 @@ GPIOD_API const char *gpiod_line_info_get_consumer(struct gpiod_line_info *info)
return info->consumer[0] == '\0' ? NULL : info->consumer;
}
-GPIOD_API int gpiod_line_info_get_direction(struct gpiod_line_info *info)
+GPIOD_API enum gpiod_line_direction
+gpiod_line_info_get_direction(struct gpiod_line_info *info)
{
return info->direction;
}
@@ -74,22 +75,26 @@ GPIOD_API bool gpiod_line_info_is_active_low(struct gpiod_line_info *info)
return info->active_low;
}
-GPIOD_API int gpiod_line_info_get_bias(struct gpiod_line_info *info)
+GPIOD_API enum gpiod_line_bias
+gpiod_line_info_get_bias(struct gpiod_line_info *info)
{
return info->bias;
}
-GPIOD_API int gpiod_line_info_get_drive(struct gpiod_line_info *info)
+GPIOD_API enum gpiod_line_drive
+gpiod_line_info_get_drive(struct gpiod_line_info *info)
{
return info->drive;
}
-GPIOD_API int gpiod_line_info_get_edge_detection(struct gpiod_line_info *info)
+GPIOD_API enum gpiod_line_edge
+gpiod_line_info_get_edge_detection(struct gpiod_line_info *info)
{
return info->edge;
}
-GPIOD_API int gpiod_line_info_get_event_clock(struct gpiod_line_info *info)
+GPIOD_API enum gpiod_line_event_clock
+gpiod_line_info_get_event_clock(struct gpiod_line_info *info)
{
return info->event_clock;
}
@@ -57,15 +57,16 @@ gpiod_line_request_get_offsets(struct gpiod_line_request *request,
sizeof(*offsets) * request->num_lines);
}
-GPIOD_API int gpiod_line_request_get_value(struct gpiod_line_request *request,
- unsigned int offset)
+GPIOD_API enum gpiod_line_value
+gpiod_line_request_get_value(struct gpiod_line_request *request,
+ unsigned int offset)
{
+ enum gpiod_line_value val;
unsigned int ret;
- int val;
ret = gpiod_line_request_get_values_subset(request, 1, &offset, &val);
if (ret)
- return -1;
+ return GPIOD_LINE_VALUE_ERROR;
return val;
}
@@ -86,7 +87,8 @@ static int offset_to_bit(struct gpiod_line_request *request,
GPIOD_API int
gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
size_t num_values,
- const unsigned int *offsets, int *values)
+ const unsigned int *offsets,
+ enum gpiod_line_value *values)
{
struct gpio_v2_line_values uapi_values;
uint64_t mask = 0, bits = 0;
@@ -123,14 +125,15 @@ gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
}
GPIOD_API int gpiod_line_request_get_values(struct gpiod_line_request *request,
- int *values)
+ enum gpiod_line_value *values)
{
return gpiod_line_request_get_values_subset(request, request->num_lines,
request->offsets, values);
}
GPIOD_API int gpiod_line_request_set_value(struct gpiod_line_request *request,
- unsigned int offset, int value)
+ unsigned int offset,
+ enum gpiod_line_value value)
{
return gpiod_line_request_set_values_subset(request, 1,
&offset, &value);
@@ -140,7 +143,7 @@ GPIOD_API int
gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
size_t num_values,
const unsigned int *offsets,
- const int *values)
+ const enum gpiod_line_value *values)
{
struct gpio_v2_line_values uapi_values;
uint64_t mask = 0, bits = 0;
@@ -166,7 +169,7 @@ gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
}
GPIOD_API int gpiod_line_request_set_values(struct gpiod_line_request *request,
- const int *values)
+ const enum gpiod_line_value *values)
{
return gpiod_line_request_set_values_subset(request, request->num_lines,
request->offsets, values);
@@ -9,14 +9,14 @@
#include "internal.h"
struct gpiod_line_settings {
- int direction;
- int edge_detection;
- int drive;
- int bias;
+ enum gpiod_line_direction direction;
+ enum gpiod_line_edge edge_detection;
+ enum gpiod_line_drive drive;
+ enum gpiod_line_bias bias;
bool active_low;
- int event_clock;
+ enum gpiod_line_event_clock event_clock;
long debounce_period_us;
- int output_value;
+ enum gpiod_line_value output_value;
};
GPIOD_API struct gpiod_line_settings *gpiod_line_settings_new(void)
@@ -65,7 +65,7 @@ gpiod_line_settings_copy(struct gpiod_line_settings *settings)
GPIOD_API int
gpiod_line_settings_set_direction(struct gpiod_line_settings *settings,
- int direction)
+ enum gpiod_line_direction direction)
{
switch (direction) {
case GPIOD_LINE_DIRECTION_INPUT:
@@ -82,7 +82,7 @@ gpiod_line_settings_set_direction(struct gpiod_line_settings *settings,
return 0;
}
-GPIOD_API int
+GPIOD_API enum gpiod_line_direction
gpiod_line_settings_get_direction(struct gpiod_line_settings *settings)
{
return settings->direction;
@@ -90,7 +90,7 @@ gpiod_line_settings_get_direction(struct gpiod_line_settings *settings)
GPIOD_API int
gpiod_line_settings_set_edge_detection(struct gpiod_line_settings *settings,
- int edge)
+ enum gpiod_line_edge edge)
{
switch (edge) {
case GPIOD_LINE_EDGE_NONE:
@@ -108,14 +108,15 @@ gpiod_line_settings_set_edge_detection(struct gpiod_line_settings *settings,
return 0;
}
-GPIOD_API int
+GPIOD_API enum gpiod_line_edge
gpiod_line_settings_get_edge_detection(struct gpiod_line_settings *settings)
{
return settings->edge_detection;
}
GPIOD_API int
-gpiod_line_settings_set_bias(struct gpiod_line_settings *settings, int bias)
+gpiod_line_settings_set_bias(struct gpiod_line_settings *settings,
+ enum gpiod_line_bias bias)
{
switch (bias) {
case GPIOD_LINE_BIAS_AS_IS:
@@ -133,13 +134,15 @@ gpiod_line_settings_set_bias(struct gpiod_line_settings *settings, int bias)
return 0;
}
-GPIOD_API int gpiod_line_settings_get_bias(struct gpiod_line_settings *settings)
+GPIOD_API enum gpiod_line_bias
+gpiod_line_settings_get_bias(struct gpiod_line_settings *settings)
{
return settings->bias;
}
GPIOD_API int
-gpiod_line_settings_set_drive(struct gpiod_line_settings *settings, int drive)
+gpiod_line_settings_set_drive(struct gpiod_line_settings *settings,
+ enum gpiod_line_drive drive)
{
switch (drive) {
case GPIOD_LINE_DRIVE_PUSH_PULL:
@@ -156,7 +159,7 @@ gpiod_line_settings_set_drive(struct gpiod_line_settings *settings, int drive)
return 0;
}
-GPIOD_API int
+GPIOD_API enum gpiod_line_drive
gpiod_line_settings_get_drive(struct gpiod_line_settings *settings)
{
return settings->drive;
@@ -190,7 +193,7 @@ gpiod_line_settings_get_debounce_period_us(struct gpiod_line_settings *settings)
GPIOD_API int
gpiod_line_settings_set_event_clock(struct gpiod_line_settings *settings,
- int event_clock)
+ enum gpiod_line_event_clock event_clock)
{
switch (event_clock) {
case GPIOD_LINE_EVENT_CLOCK_MONOTONIC:
@@ -207,7 +210,7 @@ gpiod_line_settings_set_event_clock(struct gpiod_line_settings *settings,
return 0;
}
-GPIOD_API int
+GPIOD_API enum gpiod_line_event_clock
gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings)
{
return settings->event_clock;
@@ -215,7 +218,7 @@ gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings)
GPIOD_API int
gpiod_line_settings_set_output_value(struct gpiod_line_settings *settings,
- int value)
+ enum gpiod_line_value value)
{
switch (value) {
case GPIOD_LINE_VALUE_INACTIVE:
@@ -231,7 +234,7 @@ gpiod_line_settings_set_output_value(struct gpiod_line_settings *settings,
return 0;
}
-GPIOD_API int
+GPIOD_API enum gpiod_line_value
gpiod_line_settings_get_output_value(struct gpiod_line_settings *settings)
{
return settings->output_value;
@@ -1007,8 +1007,8 @@ GPIOSIM_API int gpiosim_bank_set_line_name(struct gpiosim_bank *bank,
}
GPIOSIM_API int gpiosim_bank_hog_line(struct gpiosim_bank *bank,
- unsigned int offset,
- const char *name, int direction)
+ unsigned int offset, const char *name,
+ enum gpiosim_direction direction)
{
char buf[64], *dir;
int ret, fd;
@@ -1081,15 +1081,16 @@ static int sysfs_read_bank_attr(struct gpiosim_bank *bank, unsigned int offset,
return open_read_close(bank->sysfs_dir_fd, where, buf, bufsize);
}
-GPIOSIM_API int gpiosim_bank_get_value(struct gpiosim_bank *bank,
- unsigned int offset)
+GPIOSIM_API enum
+gpiosim_value gpiosim_bank_get_value(struct gpiosim_bank *bank,
+ unsigned int offset)
{
char what[3];
int ret;
ret = sysfs_read_bank_attr(bank, offset, "value", what, sizeof(what));
if (ret)
- return ret;
+ return GPIOSIM_VALUE_ERROR;
if (what[0] == '0')
return GPIOSIM_VALUE_INACTIVE;
@@ -1097,18 +1098,18 @@ GPIOSIM_API int gpiosim_bank_get_value(struct gpiosim_bank *bank,
return GPIOSIM_VALUE_ACTIVE;
errno = EIO;
- return -1;
+ return GPIOSIM_VALUE_ERROR;
}
-GPIOSIM_API int gpiosim_bank_get_pull(struct gpiosim_bank *bank,
- unsigned int offset)
+GPIOSIM_API enum gpiosim_pull
+gpiosim_bank_get_pull(struct gpiosim_bank *bank, unsigned int offset)
{
char what[16];
int ret;
ret = sysfs_read_bank_attr(bank, offset, "pull", what, sizeof(what));
if (ret)
- return ret;
+ return GPIOSIM_PULL_ERROR;
if (strcmp(what, "pull-down") == 0)
return GPIOSIM_PULL_DOWN;
@@ -1116,11 +1117,12 @@ GPIOSIM_API int gpiosim_bank_get_pull(struct gpiosim_bank *bank,
return GPIOSIM_PULL_UP;
errno = EIO;
- return -1;
+ return GPIOSIM_PULL_ERROR;
}
-GPIOSIM_API int gpiosim_bank_set_pull(struct gpiosim_bank *bank,
- unsigned int offset, int pull)
+GPIOSIM_API int
+gpiosim_bank_set_pull(struct gpiosim_bank *bank,
+ unsigned int offset, enum gpiosim_pull pull)
{
struct gpiosim_dev *dev = bank->dev;
char where[32], what[16];
@@ -15,17 +15,19 @@ struct gpiosim_ctx;
struct gpiosim_dev;
struct gpiosim_bank;
-enum {
+enum gpiosim_value {
+ GPIOSIM_VALUE_ERROR = -1,
GPIOSIM_VALUE_INACTIVE = 0,
GPIOSIM_VALUE_ACTIVE = 1,
};
-enum {
+enum gpiosim_pull {
+ GPIOSIM_PULL_ERROR = -1,
GPIOSIM_PULL_DOWN = 1,
GPIOSIM_PULL_UP,
};
-enum {
+enum gpiosim_direction {
GPIOSIM_HOG_DIR_INPUT = 1,
GPIOSIM_HOG_DIR_OUTPUT_HIGH,
GPIOSIM_HOG_DIR_OUTPUT_LOW,
@@ -59,13 +61,15 @@ int gpiosim_bank_set_num_lines(struct gpiosim_bank *bank, size_t num_lines);
int gpiosim_bank_set_line_name(struct gpiosim_bank *bank,
unsigned int offset, const char *name);
int gpiosim_bank_hog_line(struct gpiosim_bank *bank, unsigned int offset,
- const char *name, int direction);
+ const char *name, enum gpiosim_direction direction);
int gpiosim_bank_clear_hog(struct gpiosim_bank *bank, unsigned int offset);
-int gpiosim_bank_get_value(struct gpiosim_bank *bank, unsigned int offset);
-int gpiosim_bank_get_pull(struct gpiosim_bank *bank, unsigned int offset);
+enum gpiosim_value
+gpiosim_bank_get_value(struct gpiosim_bank *bank, unsigned int offset);
+enum gpiosim_pull
+gpiosim_bank_get_pull(struct gpiosim_bank *bank, unsigned int offset);
int gpiosim_bank_set_pull(struct gpiosim_bank *bank,
- unsigned int offset, int pull);
+ unsigned int offset, enum gpiosim_pull pull);
#ifdef __cplusplus
} /* extern "C" */
@@ -173,7 +173,8 @@ GPIOD_TEST_CASE(read_all_values)
g_autoptr(struct_gpiod_line_settings) settings = NULL;
g_autoptr(struct_gpiod_line_config) line_cfg = NULL;
g_autoptr(struct_gpiod_line_request) request = NULL;
- gint ret, values[5];
+ enum gpiod_line_value values[5];
+ gint ret;
guint i;
chip = gpiod_test_open_chip_or_fail(g_gpiosim_chip_get_dev_path(sim));
@@ -232,11 +233,13 @@ GPIOD_TEST_CASE(request_multiple_values_but_read_one)
GPIOD_TEST_CASE(set_all_values)
{
static const guint offsets[] = { 0, 2, 4, 5, 6 };
- static const gint values[] = { GPIOD_LINE_VALUE_ACTIVE,
- GPIOD_LINE_VALUE_INACTIVE,
- GPIOD_LINE_VALUE_ACTIVE,
- GPIOD_LINE_VALUE_ACTIVE,
- GPIOD_LINE_VALUE_ACTIVE };
+ static const enum gpiod_line_value values[] = {
+ GPIOD_LINE_VALUE_ACTIVE,
+ GPIOD_LINE_VALUE_INACTIVE,
+ GPIOD_LINE_VALUE_ACTIVE,
+ GPIOD_LINE_VALUE_ACTIVE,
+ GPIOD_LINE_VALUE_ACTIVE
+ };
g_autoptr(GPIOSimChip) sim = g_gpiosim_chip_new("num-lines", 8, NULL);
g_autoptr(struct_gpiod_chip) chip = NULL;
@@ -270,9 +273,11 @@ GPIOD_TEST_CASE(set_values_subset_of_lines)
{
static const guint offsets[] = { 0, 1, 2, 3 };
static const guint offsets_to_set[] = { 0, 1, 3 };
- static const gint values[] = { GPIOD_LINE_VALUE_ACTIVE,
- GPIOD_LINE_VALUE_INACTIVE,
- GPIOD_LINE_VALUE_ACTIVE };
+ static const enum gpiod_line_value values[] = {
+ GPIOD_LINE_VALUE_ACTIVE,
+ GPIOD_LINE_VALUE_INACTIVE,
+ GPIOD_LINE_VALUE_ACTIVE
+ };
g_autoptr(GPIOSimChip) sim = g_gpiosim_chip_new("num-lines", 4, NULL);
g_autoptr(struct_gpiod_chip) chip = NULL;
@@ -508,8 +513,8 @@ GPIOD_TEST_CASE(request_lines_with_unordered_offsets)
g_autoptr(struct_gpiod_line_settings) settings = NULL;
g_autoptr(struct_gpiod_line_config) line_cfg = NULL;
g_autoptr(struct_gpiod_line_request) request = NULL;
+ enum gpiod_line_value values[4];
guint set_offsets[4];
- gint values[4];
chip = gpiod_test_open_chip_or_fail(g_gpiosim_chip_get_dev_path(sim));
settings = gpiod_test_create_line_settings_or_fail();
@@ -17,8 +17,8 @@ struct config {
bool numeric;
bool strict;
bool unquoted;
- int bias;
- int direction;
+ enum gpiod_line_bias bias;
+ enum gpiod_line_direction direction;
unsigned int hold_period_us;
const char *chip_id;
const char *consumer;
@@ -137,11 +137,12 @@ int main(int argc, char **argv)
struct gpiod_request_config *req_cfg;
struct gpiod_line_request *request;
struct gpiod_line_config *line_cfg;
- int i, num_lines, ret, *values;
struct line_resolver *resolver;
+ enum gpiod_line_value *values;
struct resolved_line *line;
struct gpiod_chip *chip;
unsigned int *offsets;
+ int i, num_lines, ret;
struct config cfg;
const char *fmt;
@@ -21,14 +21,14 @@ struct config {
bool quiet;
bool strict;
bool unquoted;
- int bias;
- int edges;
+ enum gpiod_line_bias bias;
+ enum gpiod_line_edge edges;
int events_wanted;
unsigned int debounce_period_us;
const char *chip_id;
const char *consumer;
const char *fmt;
- int event_clock;
+ enum gpiod_line_event_clock event_clock;
int timestamp_fmt;
};
@@ -25,8 +25,8 @@ struct config {
bool interactive;
bool strict;
bool unquoted;
- int bias;
- int drive;
+ enum gpiod_line_bias bias;
+ enum gpiod_line_drive drive;
int toggles;
unsigned int *toggle_periods;
unsigned int hold_period_us;
@@ -228,25 +228,26 @@ static int parse_config(int argc, char **argv, struct config *cfg)
return optind;
}
-static int parse_value(const char *option)
+static enum gpiod_line_value parse_value(const char *option)
{
if (strcmp(option, "0") == 0)
- return 0;
+ return GPIOD_LINE_VALUE_INACTIVE;
if (strcmp(option, "1") == 0)
- return 1;
+ return GPIOD_LINE_VALUE_ACTIVE;
if (strcmp(option, "inactive") == 0)
- return 0;
+ return GPIOD_LINE_VALUE_INACTIVE;
if (strcmp(option, "active") == 0)
- return 1;
+ return GPIOD_LINE_VALUE_ACTIVE;
if (strcmp(option, "off") == 0)
- return 0;
+ return GPIOD_LINE_VALUE_INACTIVE;
if (strcmp(option, "on") == 0)
- return 1;
+ return GPIOD_LINE_VALUE_ACTIVE;
if (strcmp(option, "false") == 0)
- return 0;
+ return GPIOD_LINE_VALUE_INACTIVE;
if (strcmp(option, "true") == 0)
- return 1;
- return -1;
+ return GPIOD_LINE_VALUE_ACTIVE;
+
+ return GPIOD_LINE_VALUE_ERROR;
}
/*
@@ -259,7 +260,7 @@ static int parse_value(const char *option)
* If line id is quoted then it is returned unquoted.
*/
static bool parse_line_values(int num_lines, char **lvs, char **lines,
- int *values, bool interactive)
+ enum gpiod_line_value *values, bool interactive)
{
char *value;
char *line;
@@ -293,7 +294,7 @@ static bool parse_line_values(int num_lines, char **lvs, char **lines,
value++;
values[i] = parse_value(value);
- if (values[i] < 0) {
+ if (values[i] == GPIOD_LINE_VALUE_ERROR) {
if (interactive)
printf("invalid line value: '%s'\n", value);
else
@@ -312,7 +313,7 @@ static bool parse_line_values(int num_lines, char **lvs, char **lines,
* Parse line id and values from lvs into lines and values, or die trying.
*/
static void parse_line_values_or_die(int num_lines, char **lvs, char **lines,
- int *values)
+ enum gpiod_line_value *values)
{
if (!parse_line_values(num_lines, lvs, lines, values, false))
exit(EXIT_FAILURE);
@@ -352,7 +353,7 @@ static void wait_fd(int fd)
*/
static void apply_values(struct gpiod_line_request **requests,
struct line_resolver *resolver,
- unsigned int *offsets, int *values)
+ unsigned int *offsets, enum gpiod_line_value *values)
{
int i;
@@ -381,7 +382,7 @@ static void toggle_all_lines(struct line_resolver *resolver)
static void toggle_sequence(int toggles, unsigned int *toggle_periods,
struct gpiod_line_request **requests,
struct line_resolver *resolver,
- unsigned int *offsets, int *values)
+ unsigned int *offsets, enum gpiod_line_value *values)
{
int i = 0;
@@ -436,7 +437,8 @@ static bool parse_line_ids(int num_lines, char **words, char **lines)
* the remaining parameters.
*/
static void set_line_values_subset(struct line_resolver *resolver,
- int num_lines, char **lines, int *values)
+ int num_lines, char **lines,
+ enum gpiod_line_value *values)
{
int l, i;
@@ -739,8 +741,8 @@ static char **tab_completion(const char *text, int start, int end)
static void interact(struct gpiod_line_request **requests,
struct line_resolver *resolver,
- char **lines, unsigned int *offsets, int *values,
- bool unquoted)
+ char **lines, unsigned int *offsets,
+ enum gpiod_line_value *values, bool unquoted)
{
int num_words, num_lines, max_words, period_us, i;
char *line, **words, *line_buf;
@@ -869,8 +871,9 @@ int main(int argc, char **argv)
struct gpiod_request_config *req_cfg;
struct gpiod_line_request **requests;
struct gpiod_line_config *line_cfg;
- int i, j, num_lines, ret, *values;
struct line_resolver *resolver;
+ enum gpiod_line_value *values;
+ int i, j, num_lines, ret;
struct gpiod_chip *chip;
unsigned int *offsets;
struct config cfg;
@@ -336,7 +336,7 @@ static void print_consumer(struct gpiod_line_info *info, bool unquoted)
void print_line_attributes(struct gpiod_line_info *info, bool unquoted_strings)
{
- int direction;
+ enum gpiod_line_direction direction;
direction = gpiod_line_info_get_direction(info);
@@ -714,7 +714,7 @@ void free_line_resolver(struct line_resolver *resolver)
int get_line_offsets_and_values(struct line_resolver *resolver,
int chip_num, unsigned int *offsets,
- int *values)
+ enum gpiod_line_value *values)
{
struct resolved_line *line;
int i, num_lines = 0;
@@ -754,7 +754,8 @@ const char *get_line_name(struct line_resolver *resolver,
return 0;
}
-void set_line_values(struct line_resolver *resolver, int chip_num, int *values)
+void set_line_values(struct line_resolver *resolver, int chip_num,
+ enum gpiod_line_value *values)
{
int i, j;
@@ -110,11 +110,13 @@ bool resolve_lines_by_offset(struct line_resolver *resolver,
bool resolve_done(struct line_resolver *resolver);
void validate_resolution(struct line_resolver *resolver, const char *chip_id);
void free_line_resolver(struct line_resolver *resolver);
-int get_line_offsets_and_values(struct line_resolver *resolver,
- int chip_num, unsigned int *offsets, int *values);
+int get_line_offsets_and_values(struct line_resolver *resolver, int chip_num,
+ unsigned int *offsets,
+ enum gpiod_line_value *values);
const char *get_chip_name(struct line_resolver *resolver, int chip_num);
const char *get_line_name(struct line_resolver *resolver, int chip_num,
unsigned int offset);
-void set_line_values(struct line_resolver *resolver, int chip_num, int *values);
+void set_line_values(struct line_resolver *resolver, int chip_num,
+ enum gpiod_line_value *values);
#endif /* __GPIOD_TOOLS_COMMON_H__ */