blob: 26a2ed88d6d836571ccc8d6484c39c482f7b7aea [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 the gpiowatch tool.
use std::env;
use libgpiod::{chip::Chip, line::Offset, Error, Result};
fn usage(name: &str) {
println!("Usage: {} <chip> <offset0> ...", name);
}
fn main() -> Result<()> {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
usage(&args[0]);
return Err(Error::InvalidArguments);
}
let path = format!("/dev/gpiochip{}", args[1]);
let offset = args[2]
.parse::<Offset>()
.map_err(|_| Error::InvalidArguments)?;
let chip = Chip::open(&path)?;
let _info = chip.watch_line_info(offset)?;
match chip.wait_info_event(None) {
Err(x) => {
println!("{:?}", x);
return Err(Error::InvalidArguments);
}
Ok(false) => {
// This shouldn't happen as the call is blocking.
panic!();
}
Ok(true) => (),
}
let event = chip.read_info_event()?;
println!(
"line: {} type: {:?}, time: {:?}",
offset,
event.event_type()?,
event.timestamp()
);
chip.unwatch(offset);
Ok(())
}