1mod comp;
5
6 pub mod servo;
8
9 pub mod stepper;
11 use core::ops::Mul;
12 use core::str::FromStr;
13
14 use serde::{Serialize, Deserialize};
15 pub use stepper::{StepperConfig, StepperConst};
16
17 mod var;
19 pub use var::ActuatorVars;
20#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
24pub struct MicroSteps(u8);
25
26impl MicroSteps {
27 pub fn as_u8(self) -> u8 {
29 self.0
30 }
31}
32
33impl From<u8> for MicroSteps {
34 fn from(value: u8) -> Self {
35 if (value & value.wrapping_sub(1)) == 0 { Self(value)
37 } else {
38 panic!("Number of microsteps must be a power of 2! ({} given)", value)
39 }
40 }
41}
42
43impl FromStr for MicroSteps {
44 type Err = <u8 as FromStr>::Err;
45
46 fn from_str(s: &str) -> Result<Self, Self::Err> {
47 Ok(Self(u8::from_str(s)?))
48 }
49}
50
51impl From<MicroSteps> for u8 {
52 fn from(value: MicroSteps) -> Self {
53 value.0
54 }
55}
56
57impl Default for MicroSteps {
58 fn default() -> Self {
59 Self(1)
60 }
61}
62
63impl Mul<MicroSteps> for u64 {
64 type Output = u64;
65
66 fn mul(self, rhs: MicroSteps) -> Self::Output {
67 self * (rhs.as_u8() as u64)
68 }
69}