#ifndef __MB_REGS_DEF_H__
#define __MB_REGS_DEF_H__

#include <stdint.h>

#define MB_SLAVE_ID 0x01

// -------------------------- 保持寄存器（3xxxx，可读写）--------------------------
// 相对地址对应：30001 = 0x0000，30002 = 0x0001，以此类推
#define HOLD_REG_SYS_CTRL_CMD     0x0000 // 系统控制命令（30001，uint16_t）
#define HOLD_REG_MEAS_MODE        0x0001 // 测量模式设置（30002，uint8_t，低8位有效）
#define HOLD_REG_TARGET_TEMP_H    0x0002 // 目标温度高16位（30003，float高半字）
#define HOLD_REG_TARGET_TEMP_L    0x0003 // 目标温度低16位（30004，float低半字）
#define HOLD_REG_TUBE_LEN         0x0004 // 旋光管长度高16位（30005，float高半字）
#define HOLD_REG_MEAS_PRECISION   0x0005 // 测量精度设置（30007，uint8_t，低8位有效）
#define HOLD_REG_AUTO_MEAS_CNT    0x0006 // 自动测量次数（30008，uint8_t，低8位有效）
#define HOLD_REG_HIST_QUERY_START 0x0007 // 历史数据起始序号（30009，uint16_t）
#define HOLD_REG_HIST_QUERY_CNT   0x0008 // 历史数据查询数量（30010，uint16_t）

// -------------------------- 输入寄存器（4xxxx，只读）--------------------------
// 相对地址对应：40001 = 0x0000，40002 = 0x0001，以此类推
#define INPUT_REG_REAL_TEMP_H       0x0000 // 实时温度高16位（40001，float高半字）
#define INPUT_REG_REAL_TEMP_L       0x0001 // 实时温度低16位（40002，float低半字）
#define INPUT_REG_REAL_ROT_H        0x0002 // 实时旋光度高16位（40003，float高半字）
#define INPUT_REG_REAL_ROT_L        0x0003 // 实时旋光度低16位（40004，float低半字）
#define INPUT_REG_RESULT_MODE       0x0004 // 测量结果-模式代码（40005，uint8_t）
#define INPUT_REG_RESULT_VAL_H      0x0005 // 测量结果-数值高16位（40006，float高半字）
#define INPUT_REG_RESULT_VAL_L      0x0006 // 测量结果-数值低16位（40007，float低半字）
#define INPUT_REG_RESULT_TEMP_H     0x0007 // 测量结果-温度高16位（40008，float高半字）
#define INPUT_REG_RESULT_TEMP_L     0x0008 // 测量结果-温度低16位（40009，float低半字）
#define INPUT_REG_DEV_RUNNING_STATE 0x0009 // 设备状态码（40010，uint8_t，低8位）
#define INPUT_REG_ALARM_STATUS      0x000A // 报警状态码（占用两个寄存器，40011-40012，U32）
#define INPUT_REG_MEAS_DONE_FLAG    0x000C // 测量完成标志（40013，uint8_t）

#define INPUT_REG_DEVICE_MODEL_H 0x000D    // 设备型号（4字节，两个寄存器）高16位（40014,40015，ASCII）
#define INPUT_REG_DEVICE_MODEL_L 0x000E    // 设备型号低16位（40016,40017，ASCII）
#define INPUT_REG_FW_VERSION_H   0x000F    // 固件版本高16位（40018，主/次版本）
#define INPUT_REG_FW_VERSION_L   0x0010    // 固件版本低16位（40019，修订/构建号）

// -------------------------- 测量模式代码（HOLD_REG_MEAS_MODE和INPUT_REG_RESULT_MODE）--------------------------
#define MEAS_MODE_ROTATION      0x00 // 旋光度模式
#define MEAS_MODE_SPECIFIC_ROT  0x01 // 比旋度模式
#define MEAS_MODE_CONCENTRATION 0x02 // 浓度模式
#define MEAS_MODE_SUGAR_DEGREE  0x03 // 国际糖度模式


// -------------------------- 状态码与错误码（INPUT_REG_DEVICE_STATUS）--------------------------
#define STATUS_SUCCESS         0x00 // 操作成功
#define STATUS_PARAM_ERROR     0x01 // 参数格式错误（对应Modbus异常0x03）
#define STATUS_DEVICE_BUSY     0x02 // 设备忙（对应Modbus异常0x06）
#define STATUS_OP_FAILED       0x03 // 操作失败（对应Modbus异常0x04）
#define STATUS_NOT_INITED      0x04 // 功能未初始化（对应Modbus异常0x02）
#define STATUS_CMD_UNSUPPORTED 0x05 // 不支持的指令（对应Modbus异常0x01）


#endif /* __MB_REGS_DEF_H__ */
