#ifndef PARAMETER_H
#define PARAMETER_H

#include <stdint.h>
#include <stdbool.h>

// 参数结构体定义
typedef struct {
    uint16_t RS485_address;  // 485通讯地址，范围1~254
    uint16_t Baud_rate;  // 485通信波特率，1=4800/2=9600/3=19200/4=38400可选
    float Temp_calibration;  // 内置传感器检测到的温度修正，范围：-5~+5 ℃
    uint16_t Set_upper_temperature_limit;  // 设定温度的上限：20~35
    uint16_t Set_lower_temperature_limit;  // 设定温度的下限：5~20
    uint16_t Power_off_memory;  // 掉电再上电状态，0: OFF掉电再上电后处于关机/1:ON掉电再上电后保持开机
    uint16_t Fan_delay_off;  // 阀门关闭输出，风机延时关闭，带走盘管余热（阀门开的状态下，关机也适用）
    uint16_t Fan_state_with_heat_valve;  // 风机与热阀同步开关，0: OFF不同步，但开机后会开风不开阀/1:ON同步
    uint16_t Fan_state_with_cool_valve;  // 风机与冷阀同步开关，0: OFF不同步，但开机后会开风不开阀/1:ON同步
    uint16_t Valve_start_delay;  // 阀门关闭后到阀门重新开启的最小间隔时间（单位分钟）
    uint16_t Pipe_option;  // 0:2管制, 1:4管制
    uint16_t System_mode;  // 0:CO：模式为制冷+通风；1:CO&HE：模式为制冷+制热+通风
    uint16_t External_Input;  // 0:不接外置传感器；1:外部为NTC100K传感器；2:房卡：NO为无房卡，NC为有房卡
    uint16_t ECO_Heat;  // 当温控器未检测到房卡是运行的节能温度
    uint16_t ECO_Cool;  // 当温控器未检测到房卡是运行的节能温度
    uint16_t Program_option;  // 0:OFF 表示关闭该功能, 1:定时开关机, 2:编程开
    uint16_t temperature_unit;  // 0:摄氏度/1:华氏度切换
    uint16_t Proportional_band;  // 阀门开度比例带，例如，设置为3，则3℃对应100%开度，温度每变化0.1℃比例变化10/3(%)
    uint16_t Min_Valve_Open;  // 阀门执行的最小开度，0~5
    uint16_t Valve_Interval;  // 设置步进为30，用户管理阀门动作的间隔时间
    uint16_t Max_Fan_Voltage;  // BLDC风机最大风速电压
    uint16_t Min_Fan_Voltage;  // BLDC风机最小风速电压
    uint16_t High_Fan_Voltage;  // BLDC风机高风档电压
    uint16_t Med_Fan_Voltage;  // BLDC风机中风档电压
    uint16_t Low_Fan_Voltage;  // BLDC风机低风档电压
    uint16_t Hour1224;  // 12/14小时制，0：12，1：24，用户可设置
    uint16_t ScreenOffTime;  // 主界面息屏时间，用户可设置
    float SetPoint;  // 设定温度值，非工程参数，仅供开发者使用
    uint16_t Fan_speed;  // 风速，0：自动；1：低风；2：中风；3：高风。非工程参数，仅供开发者使用
    uint16_t Work_mode;  // 工作模式，0：自动；1：制冷；2：制热；3：通风。非工程参数，仅供开发者使用
    uint16_t BL_level;  // 背光亮度，非工程参数，仅供开发者使用
    uint16_t OnOffState;  // 开关机状态，0：OFF，1：ON，非工程参数，仅供开发者使用
    uint16_t Key_Lock;  // 童锁状态，0：OFF，1：ON，非工程参数，仅供开发者使用
    uint16_t NetConnection;  // 网络时间同步开关，0：OFF，1：ON，非工程参数，仅供开发者使用
    uint16_t Sleep_mode;  // 睡眠模式开关，0：OFF，1：ON
    uint16_t flash_save_flag;  // 
} system_work_parameter_struct;

// 默认值定义
extern const system_work_parameter_struct init_param;
extern system_work_parameter_struct current_param;

// 参数读写接口
void SetRS485_address(uint16_t data);
uint16_t GetRS485_address(void);

void SetBaud_rate(uint16_t data);
uint16_t GetBaud_rate(void);

void SetTemp_calibration(float data);
float GetTemp_calibration(void);

void SetSet_upper_temperature_limit(uint16_t data);
uint16_t GetSet_upper_temperature_limit(void);

void SetSet_lower_temperature_limit(uint16_t data);
uint16_t GetSet_lower_temperature_limit(void);

void SetPower_off_memory(uint16_t data);
uint16_t GetPower_off_memory(void);

void SetFan_delay_off(uint16_t data);
uint16_t GetFan_delay_off(void);

void SetFan_state_with_heat_valve(uint16_t data);
uint16_t GetFan_state_with_heat_valve(void);

void SetFan_state_with_cool_valve(uint16_t data);
uint16_t GetFan_state_with_cool_valve(void);

void SetValve_start_delay(uint16_t data);
uint16_t GetValve_start_delay(void);

void SetPipe_option(uint16_t data);
uint16_t GetPipe_option(void);

void SetSystem_mode(uint16_t data);
uint16_t GetSystem_mode(void);

void SetExternal_Input(uint16_t data);
uint16_t GetExternal_Input(void);

void SetECO_Heat(uint16_t data);
uint16_t GetECO_Heat(void);

void SetECO_Cool(uint16_t data);
uint16_t GetECO_Cool(void);

void SetProgram_option(uint16_t data);
uint16_t GetProgram_option(void);

void Settemperature_unit(uint16_t data);
uint16_t Gettemperature_unit(void);

void SetProportional_band(uint16_t data);
uint16_t GetProportional_band(void);

void SetMin_Valve_Open(uint16_t data);
uint16_t GetMin_Valve_Open(void);

void SetValve_Interval(uint16_t data);
uint16_t GetValve_Interval(void);

void SetMax_Fan_Voltage(uint16_t data);
uint16_t GetMax_Fan_Voltage(void);

void SetMin_Fan_Voltage(uint16_t data);
uint16_t GetMin_Fan_Voltage(void);

void SetHigh_Fan_Voltage(uint16_t data);
uint16_t GetHigh_Fan_Voltage(void);

void SetMed_Fan_Voltage(uint16_t data);
uint16_t GetMed_Fan_Voltage(void);

void SetLow_Fan_Voltage(uint16_t data);
uint16_t GetLow_Fan_Voltage(void);

void SetHour1224(uint16_t data);
uint16_t GetHour1224(void);

void SetScreenOffTime(uint16_t data);
uint16_t GetScreenOffTime(void);

void SetSetPoint(float data);
float GetSetPoint(void);

void SetFan_speed(uint16_t data);
uint16_t GetFan_speed(void);

void SetWork_mode(uint16_t data);
uint16_t GetWork_mode(void);

void SetBL_level(uint16_t data);
uint16_t GetBL_level(void);

void SetOnOffState(uint16_t data);
uint16_t GetOnOffState(void);

void SetKey_Lock(uint16_t data);
uint16_t GetKey_Lock(void);

void SetNetConnection(uint16_t data);
uint16_t GetNetConnection(void);

void SetSleep_mode(uint16_t data);
uint16_t GetSleep_mode(void);

void Setflash_save_flag(uint16_t data);
uint16_t Getflash_save_flag(void);

// 参数初始化与保存接口
void InitParam(void);
void SaveParam(void);
void LoadParam(void);

void set_wifi_rssi_value(uint8_t rssi);
uint8_t get_wifi_rssi_value(void);

void set_production_test_running_flag(uint8_t flag);
uint8_t get_production_test_running_flag(void);

#endif // PARAMETER_H
