Template:LIBGPIOD V2 C EXAMPLE: Difference between revisions
From Variscite Wiki
No edit summary |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== libgpiod C Application == | == libgpiod C++ Application == | ||
[{{#var:LIBGPIOD_URL}} libgpiod] provides bindings for | [{{#var:LIBGPIOD_URL}} libgpiod] provides bindings for C++, Python and Rust applications. C++ examples are available in the libgpiod [{{#var:LIBGPIOD_URL}}/tree/bindings/cxx/examples /tree/bindings/cxx/examples ] directory. | ||
Below is a simple C application demonstrating how to use the bindings with | Below is a simple C application demonstrating how to use the bindings with GPIO0_IO05: | ||
'''Makefile:''' | '''Makefile:''' | ||
<pre> | <pre> | ||
LDFLAGS = -lgpiod | LDFLAGS = -lgpiodcxx -lgpiod | ||
# Nome do executável e arquivos fonte | |||
TARGET = main | TARGET = main | ||
SRCS = main. | SRCS = main.cpp | ||
all: $(TARGET) | all: $(TARGET) | ||
Line 21: | Line 22: | ||
</pre> | </pre> | ||
'''main. | '''main.cpp''' | ||
<pre> | <pre> | ||
// SPDX-License-Identifier: GPL-2.0-or-later | // SPDX-License-Identifier: GPL-2.0-or-later | ||
Line 28: | Line 29: | ||
/* Minimal example of reading a single line. */ | /* Minimal example of reading a single line. */ | ||
#include < | #include <cstdlib> | ||
#include < | #include <filesystem> | ||
#include < | #include <gpiod.hpp> | ||
#include < | #include <iostream> | ||
namespace { | |||
{ | |||
/* Example configuration - customize to suit your situation */ | |||
const ::std::filesystem::path chip_path("/dev/gpiochip0"); | |||
const ::gpiod::line::offset line_offset = 5; | |||
} /* namespace */ | |||
int main() | |||
{ | |||
auto request = ::gpiod::chip(chip_path) | |||
.prepare_request() | |||
.set_consumer("get-line-value") | |||
.add_line_settings( | |||
line_offset, | |||
::gpiod::line_settings().set_direction( | |||
::gpiod::line::direction::INPUT)) | |||
.do_request(); | |||
::std::cout << line_offset << "=" | |||
<< (request.get_value(line_offset) == | |||
::gpiod::line::value::ACTIVE ? | |||
"Active" : | |||
"Inactive") | |||
<< ::std::endl; | |||
return EXIT_SUCCESS; | return EXIT_SUCCESS; | ||
} | } | ||
</pre> | </pre> |
Latest revision as of 19:52, 10 March 2025
libgpiod C++ Application
[ libgpiod] provides bindings for C++, Python and Rust applications. C++ examples are available in the libgpiod [/tree/bindings/cxx/examples /tree/bindings/cxx/examples ] directory.
Below is a simple C application demonstrating how to use the bindings with GPIO0_IO05:
Makefile:
LDFLAGS = -lgpiodcxx -lgpiod # Nome do executável e arquivos fonte TARGET = main SRCS = main.cpp all: $(TARGET) $(TARGET): $(SRCS) $(CXX) $(SRCS) $(LDFLAGS) -o $(TARGET) clean: rm -f $(TARGET)
main.cpp
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-FileCopyrightText: 2023 Kent Gibson <warthog618@gmail.com> /* Minimal example of reading a single line. */ #include <cstdlib> #include <filesystem> #include <gpiod.hpp> #include <iostream> namespace { /* Example configuration - customize to suit your situation */ const ::std::filesystem::path chip_path("/dev/gpiochip0"); const ::gpiod::line::offset line_offset = 5; } /* namespace */ int main() { auto request = ::gpiod::chip(chip_path) .prepare_request() .set_consumer("get-line-value") .add_line_settings( line_offset, ::gpiod::line_settings().set_direction( ::gpiod::line::direction::INPUT)) .do_request(); ::std::cout << line_offset << "=" << (request.get_value(line_offset) == ::gpiod::line::value::ACTIVE ? "Active" : "Inactive") << ::std::endl; return EXIT_SUCCESS; }