mirror of
https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git
synced 2026-10-24 00:48:53 +03:00
bindings: rust: provide LineRequest::chip_name()
Provide a wrapper around gpiod_line_request_get_chip_name() for Rust bindings and add a test-case. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Erik Schilling <erik.schilling@linaro.org> Reviewed-by: Kent Gibson <warthog618@gmail.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
// SPDX-FileCopyrightText: 2022 Linaro Ltd.
|
||||
// SPDX-FileCopyrightText: 2022 Viresh Kumar <viresh.kumar@linaro.org>
|
||||
|
||||
use std::ffi::CStr;
|
||||
use std::os::unix::prelude::AsRawFd;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -25,6 +26,19 @@ impl Request {
|
||||
Ok(Self { request })
|
||||
}
|
||||
|
||||
/// Get the name of the chip this request was made on.
|
||||
pub fn chip_name(&self) -> Result<&str> {
|
||||
// SAFETY: The `gpiod_line_request` is guaranteed to be live as long
|
||||
// as `&self`
|
||||
let name = unsafe { gpiod::gpiod_line_request_get_chip_name(self.request) };
|
||||
|
||||
// SAFETY: The string is guaranteed to be valid, non-null and immutable
|
||||
// by the C API for the lifetime of the `gpiod_line_request`.
|
||||
unsafe { CStr::from_ptr(name) }
|
||||
.to_str()
|
||||
.map_err(Error::StringNotUtf8)
|
||||
}
|
||||
|
||||
/// Get the number of lines in the request.
|
||||
pub fn num_lines(&self) -> usize {
|
||||
// SAFETY: `gpiod_line_request` is guaranteed to be valid here.
|
||||
|
||||
@@ -59,6 +59,20 @@ mod line_request {
|
||||
mod verify {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn chip_name() {
|
||||
const GPIO: Offset = 2;
|
||||
let mut config = TestConfig::new(NGPIO).unwrap();
|
||||
config.lconfig_add_settings(&[GPIO]);
|
||||
config.request_lines().unwrap();
|
||||
|
||||
let arc = config.sim();
|
||||
let sim = arc.lock().unwrap();
|
||||
let chip_name = sim.chip_name().clone();
|
||||
|
||||
assert_eq!(config.request().chip_name().unwrap(), chip_name);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn custom_consumer() {
|
||||
const GPIO: Offset = 2;
|
||||
|
||||
Reference in New Issue
Block a user