blob: c603d5db708c55d4da55a74e79d70fdd600a37cc [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
/*
* This file is part of libgpiod.
*
* Copyright (C) 2017-2018 Bartosz Golaszewski <bartekgola@gmail.com>
*/
/* Simplified C++ reimplementation of the gpiomon tool. */
#include <gpiod.hpp>
#include <cstdlib>
#include <iostream>
namespace {
void print_event(const ::gpiod::line_event& event)
{
if (event.event_type == ::gpiod::line_event::RISING_EDGE)
::std::cout << " RISING EDGE";
else if (event.event_type == ::gpiod::line_event::FALLING_EDGE)
::std::cout << "FALLING EDGE";
else
throw ::std::logic_error("invalid event type");
::std::cout << " ";
::std::cout << ::std::chrono::duration_cast<::std::chrono::seconds>(event.timestamp).count();
::std::cout << ".";
::std::cout << event.timestamp.count() % 1000000000;
::std::cout << " line: " << event.source.offset();
::std::cout << ::std::endl;
}
} /* namespace */
int main(int argc, char **argv)
{
if (argc < 3) {
::std::cout << "usage: " << argv[0] << " <chip> <offset0> ..." << ::std::endl;
return EXIT_FAILURE;
}
::std::vector<unsigned int> offsets;
offsets.reserve(argc);
for (int i = 2; i < argc; i++)
offsets.push_back(::std::stoul(argv[i]));
::gpiod::chip chip(argv[1]);
auto lines = chip.get_lines(offsets);
lines.request({
argv[0],
::gpiod::line_request::EVENT_BOTH_EDGES,
0,
});
for (;;) {
auto events = lines.event_wait(::std::chrono::nanoseconds(1000000000));
if (events) {
for (auto& it: events)
print_event(it.event_read());
}
}
return EXIT_SUCCESS;
}