/**
 * @Author: 李建
 * @Date: 2024/8/13 10:38
 * Description: 485从站，实现与线控器通讯
 * Copyright: Copyright (©) 2024 永续绿建. All rights reserved.
 */
#ifndef FFX_BOARD_SLAVE_485_H
#define FFX_BOARD_SLAVE_485_H

#include "main.h"

#define POWER_REG_ADDRESS 0x00 // 电源寄存器
#define FAN1_LEVEL_REG_ADDRESS 0x01 // 风阀1风速挡位
#define FAN2_LEVEL_REG_ADDRESS 0x02 // 风阀2风速挡位
#define FAN3_LEVEL_REG_ADDRESS 0x03 // 风阀3风速挡位
#define FAN4_LEVEL_REG_ADDRESS 0x04 // 风阀4风速挡位
#define FAN5_LEVEL_REG_ADDRESS 0x05 // 风阀5风速挡位

#define S_REG_HOLDING_START           0
#define S_REG_HOLDING_NREGS           16

typedef enum {
    // 网关通讯故障
    ERR_GATEWAY = 1 << 2,
    // 线控器通讯故障
    ERR_WIRE_CONTROLLER = 1 << 3,
} err_code_t;

/**
 * 设置故障码
 * @param err
 */
void set_err_code(uint8_t err);

/**
 * 清除故障码
 * @param err
 */
void clear_err_code(uint8_t err);

void set_gateway_err_code(uint8_t err);

void clear_gateway_err_code(uint8_t err);

#
/**
 * 初始化485从站
 */
void slave_485_init(uint8_t slave_id);

/**
 *  设置寄存器值
 * @param reg_address
 * @param reg_value
 */
void set_reg_value(uint8_t reg_address, uint16_t reg_value);

/**
 * 获取寄存器数据
 * @param reg_address
 * @param reg_value
 */
void get_reg_value(uint8_t reg_address, uint16_t *reg_value);

uint16_t get_reg_value2(uint8_t reg_address);

#endif //FFX_BOARD_SLAVE_485_H
