//
// Created by DELL on 2024/10/18.
//

#ifndef GMV_GATEWAY_BOARD_MODBUS_SLAVE_H
#define GMV_GATEWAY_BOARD_MODBUS_SLAVE_H
#include "main.h"
// 定义从机寄存器开始地址和长度
#define S_REG_HOLDING_START           0
#define S_REG_HOLDING_NREGS           30

//#define COMMUNICATION_REG_ADDRESS 0 // 当前从机通讯地址
#define SLAVE_POWER_ADDRESS 0    // 电源地址
#define POWER_REG_ADDRESS 29     // 电源地址
#define WORK_MODE_REG_ADDRESS 1 // 运行模式
#define FRESH_AIR_MODE_REG_ADDRESS 2 // 新风阀模式
#define FAN_SPEED_REG_ADDRESS 4 // 风扇转速
#define SET_TEMP_REG_ADDRESS 14 // 设定温度
#define INNER_GROUP1_REG_ADDRESS 10 //内机机组1地址，1~8
#define INNER_GROUP2_REG_ADDRESS 11 //内机机组2地址，9~16
#define HUMP_ON_FFX_ADDRESS 17      // 加湿开启值
#define HUMP_OFF_FFX_ADDRESS 18     // 加湿关闭值
#define FRESH_AIR_REG_ADDRESS 19    // 新风机组站号
#define INNER_ERROR1_REG_ADDRESS 20     //40021  格力网关485/CAN通信故障
#define INNER_ERROR2_REG_ADDRESS 21     //40022  分风箱485通信故障
#define INNER_ERROR3_REG_ADDRESS 22     //内机故障
#define INNER_ERROR4_REG_ADDRESS 23     //新风机故障

#define POWER_SYNC_REG_ADDRESS 24 // 内机电源同步寄存器
#define SET_TEMP_SYNC_REG_ADDRESS 25 // 设置温度同步
#define MODE_SYNC_REG_ADDRESS 26 // 模式同步寄存器
#define FAN_SPEED_SYNC_REG_ADDRESS 27 // 风速挡位同步

/**
 * 开启485从机
 * @param address 从机地址
 */
void start_485_slave(uint8_t address);

/**
 * 设置故障位
 * @param offset 位偏移量
 */
void set_err_code(uint8_t offset);

/**
 * 清除故障位
 * @param offset 位偏移量
 */
void clear_err_code(uint8_t offset);

/**
 * 设置一个寄存器的值
 * @param regAddress
 */
void set_reg_value(uint16_t regAddress, uint16_t value);

/**
 * 读取一个寄存器的值
 * @param regAddress
 * @return
 */
uint16_t get_reg_value(uint16_t regAddress);
#endif //GMV_GATEWAY_BOARD_MODBUS_SLAVE_H
