1
0
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:
Bartosz Golaszewski
2023-07-20 16:47:47 +02:00
parent eb9816ebe0
commit d12ce74a91
2 changed files with 28 additions and 0 deletions

View File

@@ -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.

View File

@@ -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;