pub const FEEDBACK_BASE_ID: u32 = 0x2A1;
pub const FEEDBACK_END_ID: u32 = 0x2A8;
pub const CONTROL_BASE_ID: u32 = 0x150;
pub const CONTROL_END_ID: u32 = 0x15F;
pub const CONFIG_BASE_ID: u32 = 0x470;
pub const CONFIG_END_ID: u32 = 0x47E;
pub const ID_ROBOT_STATUS: u32 = 0x2A1;
pub const ID_END_POSE_1: u32 = 0x2A2;
pub const ID_END_POSE_2: u32 = 0x2A3;
pub const ID_END_POSE_3: u32 = 0x2A4;
pub const ID_JOINT_FEEDBACK_12: u32 = 0x2A5;
pub const ID_JOINT_FEEDBACK_34: u32 = 0x2A6;
pub const ID_JOINT_FEEDBACK_56: u32 = 0x2A7;
pub const ID_GRIPPER_FEEDBACK: u32 = 0x2A8;
pub const ID_JOINT_DRIVER_HIGH_SPEED_BASE: u32 = 0x251;
pub const ID_JOINT_DRIVER_LOW_SPEED_BASE: u32 = 0x261;
pub const ID_JOINT_END_VELOCITY_ACCEL_BASE: u32 = 0x481;
pub const ID_FIRMWARE_READ: u32 = 0x4AF;
pub const ID_EMERGENCY_STOP: u32 = 0x150;
pub const ID_CONTROL_MODE: u32 = 0x151;
pub const ID_END_POSE_CONTROL_1: u32 = 0x152;
pub const ID_END_POSE_CONTROL_2: u32 = 0x153;
pub const ID_END_POSE_CONTROL_3: u32 = 0x154;
pub const ID_JOINT_CONTROL_12: u32 = 0x155;
pub const ID_JOINT_CONTROL_34: u32 = 0x156;
pub const ID_JOINT_CONTROL_56: u32 = 0x157;
pub const ID_ARC_POINT: u32 = 0x158;
pub const ID_GRIPPER_CONTROL: u32 = 0x159;
pub const ID_MIT_CONTROL_BASE: u32 = 0x15A;
pub const ID_LIGHT_CONTROL: u32 = 0x121;
pub const ID_FIRMWARE_UPGRADE: u32 = 0x422;
pub const ID_MASTER_SLAVE_MODE: u32 = 0x470;
pub const ID_MOTOR_ENABLE: u32 = 0x471;
pub const ID_QUERY_MOTOR_LIMIT: u32 = 0x472;
pub const ID_MOTOR_LIMIT_FEEDBACK: u32 = 0x473;
pub const ID_SET_MOTOR_LIMIT: u32 = 0x474;
pub const ID_JOINT_SETTING: u32 = 0x475;
pub const ID_SETTING_RESPONSE: u32 = 0x476;
pub const ID_PARAMETER_QUERY_SET: u32 = 0x477;
pub const ID_END_VELOCITY_ACCEL_FEEDBACK: u32 = 0x478;
pub const ID_SET_END_VELOCITY_ACCEL: u32 = 0x479;
pub const ID_COLLISION_PROTECTION_LEVEL: u32 = 0x47A;
pub const ID_COLLISION_PROTECTION_LEVEL_FEEDBACK: u32 = 0x47B;
pub const ID_MOTOR_MAX_ACCEL_FEEDBACK: u32 = 0x47C;
pub const ID_GRIPPER_TEACH_PARAMS: u32 = 0x47D;
pub const ID_GRIPPER_TEACH_PARAMS_FEEDBACK: u32 = 0x47E;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FrameType {
Feedback,
Control,
Config,
Unknown,
}
impl FrameType {
pub fn from_id(id: u32) -> Self {
match id {
0x2A1..=0x2A8 | 0x251..=0x256 | 0x261..=0x266 | 0x481..=0x486 | 0x4AF => {
FrameType::Feedback
},
0x150..=0x15F => FrameType::Control,
0x470..=0x47E => FrameType::Config,
_ => FrameType::Unknown,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_frame_type_feedback() {
assert_eq!(FrameType::from_id(0x2A1), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x2A8), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x251), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x256), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x261), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x266), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x481), FrameType::Feedback);
assert_eq!(FrameType::from_id(0x486), FrameType::Feedback);
}
#[test]
fn test_frame_type_control() {
assert_eq!(FrameType::from_id(0x150), FrameType::Control);
assert_eq!(FrameType::from_id(0x15F), FrameType::Control);
assert_eq!(FrameType::from_id(0x151), FrameType::Control);
assert_eq!(FrameType::from_id(0x155), FrameType::Control);
}
#[test]
fn test_frame_type_config() {
assert_eq!(FrameType::from_id(0x470), FrameType::Config);
assert_eq!(FrameType::from_id(0x47E), FrameType::Config);
assert_eq!(FrameType::from_id(0x471), FrameType::Config);
assert_eq!(FrameType::from_id(0x47D), FrameType::Config);
}
#[test]
fn test_frame_type_unknown() {
assert_eq!(FrameType::from_id(0x100), FrameType::Unknown);
assert_eq!(FrameType::from_id(0x999), FrameType::Unknown);
assert_eq!(FrameType::from_id(0x121), FrameType::Unknown); assert_eq!(FrameType::from_id(0x422), FrameType::Unknown); }
#[test]
fn test_id_constants() {
assert_eq!(ID_ROBOT_STATUS, 0x2A1);
assert_eq!(ID_EMERGENCY_STOP, 0x150);
assert_eq!(ID_MOTOR_ENABLE, 0x471);
}
}