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