kcan 0.3.0

CAN controller primitives for actuator and motor control.
Documentation
use kcan::{
    KnottDynamicsFlashCommand, KnottDynamicsMode, KnottDynamicsParameter,
    KnottDynamicsParameterValue, knott_dynamics_disable_frame, knott_dynamics_flash_frame_in_mode,
    knott_dynamics_heartbeat_frame, knott_dynamics_nmt_frame_from_mode,
    knott_dynamics_parameter_read_frame, knott_dynamics_parameter_write_frame_in_mode,
    knott_dynamics_position_torque_frame, knott_dynamics_position_velocity_frame,
    knott_dynamics_probe_frame,
};

fn main() -> kcan::Result<()> {
    let frames = [
        knott_dynamics_nmt_frame_from_mode(
            Some(1),
            KnottDynamicsMode::Disabled,
            KnottDynamicsMode::Idle,
        )?,
        knott_dynamics_disable_frame(Some(1))?,
        knott_dynamics_probe_frame(1)?,
        knott_dynamics_position_velocity_frame(1, 1.0, -2.0)?,
        knott_dynamics_position_torque_frame(1, 1.0, 0.5)?,
        knott_dynamics_heartbeat_frame(1)?,
        knott_dynamics_parameter_read_frame(1, KnottDynamicsParameter::FirmwareVersion)?,
        knott_dynamics_parameter_write_frame_in_mode(
            1,
            KnottDynamicsMode::Idle,
            KnottDynamicsParameter::TorqueLimit,
            KnottDynamicsParameterValue::F32(1.0),
        )?,
        knott_dynamics_flash_frame_in_mode(
            1,
            KnottDynamicsMode::Idle,
            KnottDynamicsFlashCommand::Store,
        )?,
    ];

    for frame in frames {
        println!("{frame}");
    }
    Ok(())
}