use AxisParameter;
use ReadableAxisParameter;
use WriteableAxisParameter;
use Return;
use modules::tmcm::{
TmcmAxisParameter,
ReadableTmcmAxisParameter,
WriteableTmcmAxisParameter,
};
axis_param_rw!(
ActualPosition, i32, 1
);
impl ReadableTmcmAxisParameter for ActualPosition {}
impl WriteableTmcmAxisParameter for ActualPosition {}
axis_param_r!(
ActualSpeed, i16, 3
);
impl ReadableTmcmAxisParameter for ActualSpeed {}
axis_param_rw!(
MaximumPositioningSpeed, u16, 4
);
impl MaximumPositioningSpeed {
pub fn new(speed: u16) -> Self {
assert!(speed <= 2047);
MaximumPositioningSpeed(speed)
}
}
impl TmcmAxisParameter for MaximumPositioningSpeed {}
impl ReadableTmcmAxisParameter for MaximumPositioningSpeed {}
impl WriteableTmcmAxisParameter for MaximumPositioningSpeed {}
axis_param_rw!(
AbsoluteMaxCurrent, u16, 6
);
impl AbsoluteMaxCurrent {
pub fn new(current: u16) -> Self {
AbsoluteMaxCurrent(current)
}
}
impl TmcmAxisParameter for AbsoluteMaxCurrent {}
impl ReadableTmcmAxisParameter for AbsoluteMaxCurrent {}
impl WriteableTmcmAxisParameter for AbsoluteMaxCurrent {}
axis_param_rw!(
StandbyCurrent, u16, 7
);
impl StandbyCurrent {
pub fn new(current: u16) -> Self {
StandbyCurrent(current)
}
}
impl TmcmAxisParameter for StandbyCurrent {}
impl ReadableTmcmAxisParameter for StandbyCurrent {}
impl WriteableTmcmAxisParameter for StandbyCurrent {}
axis_param_rw!(
RightLimitSwitchDisable, bool, 12
);
impl RightLimitSwitchDisable {
pub fn disabled() -> Self {
RightLimitSwitchDisable(true)
}
pub fn enabled() -> Self {
RightLimitSwitchDisable(false)
}
}
impl TmcmAxisParameter for RightLimitSwitchDisable {}
impl ReadableTmcmAxisParameter for RightLimitSwitchDisable {}
impl WriteableTmcmAxisParameter for RightLimitSwitchDisable {}
axis_param_rw!(
LeftLimitSwitchDisable, bool, 13
);
impl LeftLimitSwitchDisable {
pub fn disabled() -> Self {
LeftLimitSwitchDisable(true)
}
pub fn enabled() -> Self {
LeftLimitSwitchDisable(false)
}
}
impl TmcmAxisParameter for LeftLimitSwitchDisable {}
impl ReadableTmcmAxisParameter for LeftLimitSwitchDisable {}
impl WriteableTmcmAxisParameter for LeftLimitSwitchDisable {}
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum MicrostepResolution {
Full = 0,
Half = 1,
Micro4 = 2,
Micro8 = 3,
Micro16 = 4,
Micro32 = 5,
Micro64 = 6,
}
impl MicrostepResolution {
fn try_from_u8(v: u8) -> Result<Self, ()> {
match v {
0 => Ok(MicrostepResolution::Full),
1 => Ok(MicrostepResolution::Half),
2 => Ok(MicrostepResolution::Micro4),
3 => Ok(MicrostepResolution::Micro8),
4 => Ok(MicrostepResolution::Micro16),
5 => Ok(MicrostepResolution::Micro32),
6 => Ok(MicrostepResolution::Micro64),
_ => Err(()),
}
}
}
impl AxisParameter for MicrostepResolution {
const NUMBER: u8 = 140;
}
impl Return for MicrostepResolution {
fn from_operand(array: [u8; 4]) -> Self {MicrostepResolution::try_from_u8(array[0]).unwrap()}
}
impl TmcmAxisParameter for MicrostepResolution {}
impl ReadableAxisParameter for MicrostepResolution {}
impl ReadableTmcmAxisParameter for MicrostepResolution {}
impl WriteableAxisParameter for MicrostepResolution {
fn operand(&self) -> [u8; 4] {
[*self as u8, 0u8, 0u8, 0u8]
}
}
impl WriteableTmcmAxisParameter for MicrostepResolution {}