pub struct Attribute { /* private fields */ }
Expand description
A wrapper to a attribute file in the /sys/class/
directory.
Implementations§
Source§impl Attribute
impl Attribute
Sourcepub fn from_path(path: &Path) -> Ev3Result<Attribute>
pub fn from_path(path: &Path) -> Ev3Result<Attribute>
Create a new Attribute
instance for the given path.
Sourcepub fn from_sys_class(
class_name: &str,
name: &str,
attribute_name: &str,
) -> Ev3Result<Attribute>
pub fn from_sys_class( class_name: &str, name: &str, attribute_name: &str, ) -> Ev3Result<Attribute>
Create a new Attribute
instance that wrap’s
the file /sys/class/{class_name}/{name}{attribute_name}
.
Sourcepub fn from_path_with_discriminator(
driver_path: &str,
attribute_path: &str,
discriminator_path: &str,
discriminator_value: &str,
) -> Ev3Result<Attribute>
pub fn from_path_with_discriminator( driver_path: &str, attribute_path: &str, discriminator_path: &str, discriminator_value: &str, ) -> Ev3Result<Attribute>
Create a new Attribute
instance by a discriminator attribute.
This can be used to manually access driver files or advances features like raw encoder values.
To find the correct file, this function iterates over all directories $d
in driver_path
and
checks if the content of driver_path/$d/discriminator_path
equals discriminator_value
. When a
match is found it returns an Attribute for file driver_path/$d/attribute_path
.
§Example
use ev3dev_lang_rust::Attribute;
// Get value0 of first connected color sensor.
let color_sensor_value = Attribute::from_path_with_discriminator(
"/sys/class/lego-sensor",
"value0",
"driver_name",
"lego-ev3-color"
)?;
println!("value0 of color sensor: {}", color_sensor_value.get::<i32>()?);
// Get raw rotation count of motor in port `A`.
// See https://github.com/ev3dev/ev3dev/wiki/Internals:-ev3dev-stretch for more information.
let rotation_count = Attribute::from_path_with_discriminator(
"/sys/bus/iio/devices",
"in_count0_raw",
"name",
"ev3-tacho"
)?;
println!("Raw rotation count: {}", rotation_count.get::<i32>()?);
Examples found in repository?
6fn main() -> Ev3Result<()> {
7 // Get value0 of first connected color sensor.
8 let color_sensor_value = Attribute::from_path_with_discriminator(
9 "/sys/class/lego-sensor",
10 "value0",
11 "driver_name",
12 "lego-ev3-color",
13 )?;
14
15 // Get raw rotation count of motor in port `A`.
16 // See https://github.com/ev3dev/ev3dev/wiki/Internals:-ev3dev-stretch for more infomation.
17 let rotation_count = Attribute::from_path_with_discriminator(
18 "/sys/bus/iio/devices",
19 "in_count0_raw",
20 "name",
21 "ev3-tacho",
22 )?;
23
24 loop {
25 println!(
26 "value0 of color sensor: {}",
27 color_sensor_value.get::<i32>()?
28 );
29 println!("Raw rotation count: {}", rotation_count.get::<i32>()?);
30
31 std::thread::sleep(std::time::Duration::from_secs(1));
32 }
33}
Sourcepub fn get<T>(&self) -> Ev3Result<T>
pub fn get<T>(&self) -> Ev3Result<T>
Returns the current value of the wrapped file.
The value is parsed to the type T
.
Returns a Ev3Result::InternalError
if the current value is not parsable to type T
.
Examples found in repository?
6fn main() -> Ev3Result<()> {
7 // Get value0 of first connected color sensor.
8 let color_sensor_value = Attribute::from_path_with_discriminator(
9 "/sys/class/lego-sensor",
10 "value0",
11 "driver_name",
12 "lego-ev3-color",
13 )?;
14
15 // Get raw rotation count of motor in port `A`.
16 // See https://github.com/ev3dev/ev3dev/wiki/Internals:-ev3dev-stretch for more infomation.
17 let rotation_count = Attribute::from_path_with_discriminator(
18 "/sys/bus/iio/devices",
19 "in_count0_raw",
20 "name",
21 "ev3-tacho",
22 )?;
23
24 loop {
25 println!(
26 "value0 of color sensor: {}",
27 color_sensor_value.get::<i32>()?
28 );
29 println!("Raw rotation count: {}", rotation_count.get::<i32>()?);
30
31 std::thread::sleep(std::time::Duration::from_secs(1));
32 }
33}
Sourcepub fn set<T>(&self, value: T) -> Ev3Result<()>where
T: ToString,
pub fn set<T>(&self, value: T) -> Ev3Result<()>where
T: ToString,
Sets the value of the wrapped file.
The value is parsed from the type T
.
Returns a Ev3Result::InternalError
if the file is not writable.
Sourcepub fn set_str_slice(&self, value: &str) -> Ev3Result<()>
pub fn set_str_slice(&self, value: &str) -> Ev3Result<()>
Sets the value of the wrapped file.
This function skips the string parsing of the self.set<T>()
function.
Returns a Ev3Result::InternalError
if the file is not writable.
Sourcepub fn get_vec(&self) -> Ev3Result<Vec<String>>
pub fn get_vec(&self) -> Ev3Result<Vec<String>>
Returns a string vector representation of the wrapped file. The file value is splitted at whitespace’s.
Sourcepub fn get_raw_fd(&self) -> RawFd
pub fn get_raw_fd(&self) -> RawFd
Returns a C pointer to the wrapped file.
Sourcepub fn get_file_path(&self) -> PathBuf
pub fn get_file_path(&self) -> PathBuf
Returns the path to the wrapped file.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Attribute
impl RefUnwindSafe for Attribute
impl Send for Attribute
impl Sync for Attribute
impl Unpin for Attribute
impl UnwindSafe for Attribute
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more