blob: 8e390f3928c5ffabd82c3a27e29340fb618e011b [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause
// SPDX-FileCopyrightText: 2022 Linaro Ltd.
// SPDX-FileCopyrightText: 2022 Viresh Kumar <viresh.kumar@linaro.org>
//
// Simplified Rust implementation of gpioget tool.
use std::env;
use libgpiod::{
chip::Chip,
line::{self, Direction, Offset},
request, Error, Result,
};
fn main() -> Result<()> {
let args: Vec<String> = env::args().collect();
if args.len() < 3 {
println!("Usage: {} <chip> <line_offset0> ...", args[0]);
return Err(Error::InvalidArguments);
}
let mut lsettings = line::Settings::new()?;
let mut lconfig = line::Config::new()?;
let mut offsets = Vec::<Offset>::new();
for arg in &args[2..] {
let offset = arg.parse::<Offset>().map_err(|_| Error::InvalidArguments)?;
offsets.push(offset);
}
lsettings.set_direction(Direction::Input)?;
lconfig.add_line_settings(&offsets, lsettings)?;
let path = format!("/dev/gpiochip{}", args[1]);
let chip = Chip::open(&path)?;
let mut rconfig = request::Config::new()?;
rconfig.set_consumer(&args[0])?;
let request = chip.request_lines(Some(&rconfig), &lconfig)?;
let map = request.values()?;
println!("{:?}", map);
Ok(())
}