blob: fb093cbcee2f9737424c92ba8711e11e896b7674 [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
// SPDX-FileCopyrightText: 2017-2021 Bartosz Golaszewski <bartekgola@gmail.com>
/* Simplified C++ reimplementation of the gpioset tool. */
#include <gpiod.hpp>
#include <cstdlib>
#include <iostream>
int main(int argc, char **argv)
{
if (argc < 3) {
::std::cerr << "usage: " << argv[0] << " <chip> <line_offset0>=<value0> ..." << ::std::endl;
return EXIT_FAILURE;
}
::std::vector<unsigned int> offsets;
::std::vector<int> values;
for (int i = 2; i < argc; i++) {
::std::string arg(argv[i]);
size_t pos = arg.find('=');
::std::string offset(arg.substr(0, pos));
::std::string value(arg.substr(pos + 1, ::std::string::npos));
if (offset.empty() || value.empty())
throw ::std::invalid_argument("invalid argument: " + ::std::string(argv[i]));
offsets.push_back(::std::stoul(offset));
values.push_back(::std::stoul(value));
}
::gpiod::chip chip(argv[1]);
auto lines = chip.get_lines(offsets);
lines.request({
argv[0],
::gpiod::line_request::DIRECTION_OUTPUT,
0
}, values);
::std::cin.get();
return EXIT_SUCCESS;
}