#ifndef __CIA402_DEFS_H__
#define __CIA402_DEFS_H__

//本文件存放CiA402中INDEX，controlword，statusword的宏定义替换

#include "stdint.h"

/* --- CiA 402 对象字典索引 (Object Dictionary Indices) --- */
#define CIA402_INDEX_CONTROLWORD                0x6040  /* 控制字 */
#define CIA402_INDEX_STATUSWORD                 0x6041  /* 状态字 */
#define CIA402_INDEX_OP_MODE                    0x6060  /* 目标运动模式 (Modes of Operation) */
#define CIA402_INDEX_OP_MODE_DISPLAY            0x6061  /* 模式显示 (Modes of Operation Display) */
#define CIA402_INDEX_POS_ACTUAL                 0x6064  /* 当前位置值 */
#define CIA402_INDEX_FOLLOWING_ERROR_WINDOW      0x6065  /* Following error window */
#define CIA402_INDEX_VEL_ACTUAL                 0x606C  /* 当前速度值 */
#define CIA402_INDEX_TARGET_POS                 0x607A  /* 目标位置 */
#define CIA402_INDEX_TARGET_VEL                 0x60FF  /* 目标速度 */
#define CIA402_INDEX_PROFILE_ACC                0x6083  /* 梯形加减速：加速度 */
#define CIA402_INDEX_PROFILE_DEC                0x6084  /* 梯形加减速：减速度 */

/* --- 状态字位定义 (Statusword, 0x6041) --- */
#define CIA402_STATUS_READY_TO_SWITCH_ON        (1 << 0)  /* 准备好切换就绪 */
#define CIA402_STATUS_SWITCHED_ON               (1 << 1)  /* 已切换开启 */
#define CIA402_STATUS_OPERATION_ENABLED         (1 << 2)  /* 运行使能 (动力输出中) */
#define CIA402_STATUS_FAULT                     (1 << 3)  /* 故障激活 */
#define CIA402_STATUS_VOLTAGE_ENABLED           (1 << 4)  /* 电压已使能 (主回路通电) */
#define CIA402_STATUS_QUICK_STOP                (1 << 5)  /* 快速停止标志 (0:正在执行快停, 1:正常) */
#define CIA402_STATUS_SWITCH_ON_DISABLED        (1 << 6)  /* 切换开启禁用 */
#define CIA402_STATUS_WARNING                   (1 << 7)  /* 警告标志 */
#define CIA402_STATUS_REMOTE                    (1 << 9)  /* 远程控制 (可通过网络控制) */
#define CIA402_STATUS_TARGET_REACHED            (1 << 10) /* 目标位置到达 */
#define CIA402_STATUS_INTERNAL_LIMIT_ACTIVE     (1 << 11) /* 内部限位激活 */
#define CIA402_STATUS_OMS_12                    (1 << 12) /* 模式特定位 12 (如 PP模式:Ack, 回零模式:Attained) */
#define CIA402_STATUS_OMS_13                    (1 << 13) /* 模式特定位 13 (如 PP模式:following error) */

/* --- 控制字位定义 (Controlword, 0x6040) --- */
#define CIA402_CONTROL_SWITCH_ON                (1 << 0)  /* 切换开启 */
#define CIA402_CONTROL_ENABLE_VOLTAGE           (1 << 1)  /* 使能电压 */
#define CIA402_CONTROL_QUICK_STOP               (1 << 2)  /* 快速停止 (逻辑 0 触发) */
#define CIA402_CONTROL_ENABLE_OPERATION         (1 << 3)  /* 使能运行 */
#define CIA402_CONTROL_FAULT_RESET              (1 << 7)  /* 故障复位 (上升沿触发) */
#define CIA402_CONTROL_HALT                     (1 << 8)  /* 暂停运动 */

/* --- 运动模式特定控制位 (OMS) --- */
/* PP 模式 (Profile Position Mode, 模式 1) */
#define CIA402_CONTROL_PP_NEW_SET_POINT         (1 << 4)  /* 新目标点触发 (上升沿触发) */
#define CIA402_CONTROL_PP_CHANGE_IMM            (1 << 5)  /* 立即改变目标 (1:立即更新, 0:完成当前再更新) */
#define CIA402_CONTROL_PP_ABS_REL               (1 << 6)  /* 绝对/相对坐标 (0:绝对, 1:相对) */

/* 回零模式 (Homing Mode, 模式 6) */
#define CIA402_CONTROL_HM_START                 (1 << 4)  /* 启动回零操作 */

/* --- 常用逻辑掩码与指令组合 --- */
/* 运行使能掩码：检查是否处于 Ready + SwOn + OpEn + NoQuickStop 状态 */
#define CIA402_STATUS_MASK_OP_ENABLE            (0x0027) 

/* 常用指令组合包 */
#define CIA402_CMD_SHUTDOWN                     (CIA402_CONTROL_ENABLE_VOLTAGE | CIA402_CONTROL_QUICK_STOP)
#define CIA402_CMD_SWITCH_ON                    (CIA402_CONTROL_SWITCH_ON | CIA402_CONTROL_ENABLE_VOLTAGE | CIA402_CONTROL_QUICK_STOP)
#define CIA402_CMD_ENABLE_OP                    (CIA402_CMD_SWITCH_ON | CIA402_CONTROL_ENABLE_VOLTAGE | \
                                                 CIA402_CONTROL_QUICK_STOP | CIA402_CONTROL_ENABLE_OPERATION)

// CiA402 状态机状态 (标准定义)
typedef enum
{
    STATE_NOT_READY_TO_SWITCH_ON,
    STATE_SWITCH_ON_DISABLED,
    STATE_READY_TO_SWITCH_ON,
    STATE_SWITCHED_ON,
    STATE_OPERATION_ENABLED,
    STATE_FAULT,
    STATE_QUICK_STOP_ACTIVE
} Motor_State_t;



// 回零专用状态机
typedef enum
{
    HOMING_IDLE,   // 空闲
    HOMING_START,  // 准备启动
    HOMING_MOVING, // 正在找开关
    HOMING_DONE    // 完成
} Homing_State_t;

#endif

