/********************************************************************************************************* * Module : main.h * Abstract : main modules is defined data structure! * Version : 1.0.0 * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.) * Complete : 2025-02-16 * Content : None * Note : None *********************************************************************************************************/ #ifndef __MAIN_H #define __MAIN_H #include "stdint.h" #define STS_TYPE 0x07 #define STS_R_START 4000 #define STS_RW_START 4161 #define STS_OUTPUT_STATUS (STS_RW_START) #define STS_CHOISE_INPUT (STS_OUTPUT_STATUS + 1) #define STS_INPUT_THRESHOLD (STS_CHOISE_INPUT + 1) #define STS_OUTPUT_THRESHOLD (STS_INPUT_THRESHOLD + 16) #define STS_TEMP_THRESHOLD (STS_OUTPUT_THRESHOLD + 10) #define STS_OVER_FUNC (STS_TEMP_THRESHOLD +2) #define STS_V_I_K (STS_OVER_FUNC + 1) #define STS_CLEAR_CONSUMER (STS_V_I_K + 6) #define STS_CLEAR_BEEP (STS_CLEAR_CONSUMER + 1) #define EEPROM_SATRT_DEVICE (0) #define EEPROM_SATRT_DEVICE_LENTH (2) #define EEPROM_ENABLE_SATRT (3) #define EEPROM_ENABLE_LENTH (8) #define EEPROM_INPUT_THRESHOLD_START (32) #define EEPROM_INPUT_THRESHOLD_LENTH (32) #define EEPROM_OUTPUT_THRESHOLD_START (96) #define EEPROM_OUTPUT_THRESHOLD_LENTH (80) #define EEPROM_TEMPRATURE_THRESHOLD_START (192) #define EEPROM_TEMPRATURE_THRESHOLD_LENTH (8) #define EEPROM_INPUT_THRESHOLD_START (0) #define EEPROM_INPUT_THRESHOLD_LENTH (16) #define EEPROM_OUTPUT_THRESHOLD_START (32) #define EEPROM_OUTPUT_THRESHOLD_LENTH (24) #define EEPROM_TEMPRATURE_THRESHOLD_START (64) #define EEPROM_TEMPRATURE_THRESHOLD_LENTH (8) #define EEPROM_OVER_FUNC_START (96) #define EEPROM_OVER_FUNC_LENTH (2) #define IIC_DEVICE_INFO (0) #define IIC_INPUT_THRESHOLD_START (10) #define IIC_OUTPUT_THRESHOLD_START (50) #define IIC_TEMPRATURE_THRESHOLD_START (150) #define IIC_OVER_FUNC_START (170) #define IIC_OVER_FUNC_LENTH (1) #define IIC_K_START (180) #define IIC_K_LENTH (12) //#define IIC_CONSUMER_START (200) #define IIC_OUT_CHANNEL (210) #define MAX_ROW (40) #define IIC_CONSUMER_START (2048) #define IIC_CONSUMER_LENTH (12) #define IIC_CONSUMER_PAGE (32) #define IIC_CONSUMER_MAX_NUM (30) #define INVALID_VALUE (40000000000) #define SMALL_VALUE (500) #define LOST_COUNT 100 #define WANNING_COUNT 1000 enum{ INPUT_CHANNEL_1 = 0, INPUT_CHANNEL_2, }; enum { CH448_CHANNEL_1 = 0, CH448_CHANNEL_2, CH448_CHANNEL_3, CH448_CHANNEL_NONE, }; #define VOLTAGE_MAX_EN (0x01) #define VOLTAGE_MIN_EN (0x02) #define CURRENT_MAX_EN (0x04) #define POWER_MAX_EN (0x08) #define CONSUMER_MAX_EN (0x10) #define FREQ_MAX_EN (0x20) #define FREQ_MIN_EN (0x40) #define VOLTAGLE_MAX_DIS_EN (~(VOLTAGE_MAX_EN)) #define VOLTAGLE_MIN_DIS_EN (~(VOLTAGE_MIN_EN)) #define CURRENT_MAX_DIS_EN (~(CURRENT_MAX_EN)) #define POWER_MAX_DIS_EN (~(POWER_MAX_EN)) #define CONSUMER_MAX_DIS_EN (~(CONSUMER_MAX_EN)) #define FREQ_MAX_DIS_EN (~(FREQ_MAX_EN)) #define FREQ_MIN_DIS_EN (~(FREQ_MIN_EN)) #define IS_VOLTAGE_MAX_EN(reg) ((reg) & VOLTAGE_MAX_EN) #define IS_VOLTAGE_MIN_EN(reg) ((reg) & VOLTAGE_MIN_EN) #define IS_CURRENT_MAX_EN(reg) ((reg) & CURRENT_MAX_EN) #define IS_POWER_MAX_EN(reg) ((reg) & POWER_MAX_EN) #define IS_CONSUMER_MAX_EN(reg) ((reg) & CONSUMER_MAX_EN) #define IS_FREQ_MAX_EN(reg) ((reg) & FREQ_MAX_EN) #define IS_FREQ_MIN_EN(reg) ((reg) & FREQ_MIN_EN) #define SET_VOLTAGE_MAX_EN(reg) ((reg) |= VOLTAGE_MAX_EN) #define SET_VOLTAGE_MIN_EN(reg) ((reg) |= VOLTAGE_MIN_EN) #define SET_CURRENT_MAX_EN(reg) ((reg) |= CURRENT_MAX_EN) #define SET_POWER_MAX_EN(reg) ((reg) |= POWER_MAX_EN) #define SET_CONSUMER_MAX_EN(reg) ((reg) |= CONSUMER_MAX_EN) #define SET_FREQ_MAX_EN(reg) ((reg) |= FREQ_MAX_EN) #define SET_FREQ_MIN_EN(reg) ((reg) |= FREQ_MIN_EN) #define UNSET_VOLTAGE_MAX_EN(reg) ((reg) &= VOLTAGLE_MAX_DIS_EN) #define UNSET_VOLTAGE_MIN_EN(reg) ((reg) &= VOLTAGLE_MIN_DIS_EN) #define UNSET_CURRENT_MAX_EN(reg) ((reg) &= CURRENT_MAX_DIS_EN) #define UNSET_POWER_MAX_EN(reg) ((reg) &= POWER_MAX_DIS_EN) #define UNSET_CONSUMER_MAX_EN(reg) ((reg) &= CONSUMER_MAX_DIS_EN) #define UNSET_FREQ_MAX_EN(reg) ((reg) &= FREQ_MAX_DIS_EN) #define UNSET_FREQ_MIN_EN(reg) ((reg) &= FREQ_MIN_DIS_EN) #define SET_WANNING_VOLTAGE_MAX(reg) SET_VOLTAGE_MAX_EN(reg) #define SET_WANNING_VOLTAGE_MIN(reg) SET_VOLTAGE_MIN_EN(reg) #define SET_WANNING_CURRENT_MAX(reg) SET_CURRENT_MAX_EN(reg) #define SET_WANNING_POWER_MAX(reg) SET_POWER_MAX_EN(reg) #define SET_WANNING_CONSUMER_MAX(reg) SET_CONSUMER_MAX_EN(reg) #define SET_WANNING_FREQ_MAX(reg) SET_FREQ_MAX_EN(reg) #define SET_WANNING_FREQ_MIN(reg) SET_FREQ_MIN_EN(reg) #define UNSET_WANNING_VOLTAGE_MAX(reg) UNSET_VOLTAGE_MAX_EN(reg) #define UNSET_WANNING_VOLTAGE_MIN(reg) UNSET_VOLTAGE_MIN_EN(reg) #define UNSET_WANNING_CURRENT_MAX(reg) UNSET_CURRENT_MAX_EN(reg) #define UNSET_WANNING_POWER_MAX(reg) UNSET_POWER_MAX_EN(reg) #define UNSET_WANNING_CONSUMER_MAX(reg) UNSET_CONSUMER_MAX_EN(reg) #define UNSET_WANNING_FREQ_MAX(reg) UNSET_FREQ_MAX_EN(reg) #define UNSET_WANNING_FREQ_MIN(reg) UNSET_FREQ_MIN_EN(reg) #define IS_WANNING_VOLTAGE_MAX(reg) IS_VOLTAGE_MAX_EN(reg) #define IS_WANNING_VOLTAGE_MIN(reg) IS_VOLTAGE_MIN_EN(reg) #define IS_WANNING_CURRENT_MAX(reg) IS_CURRENT_MAX_EN(reg) #define IS_WANNING_POWER_MAX(reg) IS_POWER_MAX_EN(reg) #define IS_WANNING_CONSUMER_MAX(reg) IS_CONSUMER_MAX_EN(reg) #define IS_WANNING_FREQ_MAX(reg) IS_FREQ_MAX_EN(reg) #define IS_WANNING_FREQ_MIN(reg) IS_FREQ_MIN_EN(reg) #define STS_INPUT_HAS_WANNING(reg) ((IS_WANNING_VOLTAGE_MAX(reg)) || (IS_WANNING_VOLTAGE_MIN(reg)) \ || (IS_WANNING_FREQ_MAX(reg)) || (IS_WANNING_FREQ_MIN(reg)) ) #define IS_OVERFUNC_VOLTAGE_MAX(reg) IS_VOLTAGE_MAX_EN(reg) #define IS_OVERFUNC_VOLTAGE_MIN(reg) IS_VOLTAGE_MIN_EN(reg) #define IS_OVERFUNC_CURRENT_MAX(reg) IS_CURRENT_MAX_EN(reg) #define IS_OVERFUNC_POWER_MAX(reg) IS_POWER_MAX_EN(reg) #define IS_OVERFUNC_CONSUMER_MAX(reg) IS_CONSUMER_MAX_EN(reg) #pragma pack (2) typedef struct { uint32_t uniq_ID_64_95; uint32_t uniq_ID_32_63; uint32_t uniq_ID_00_31; uint32_t channels; char ver[12]; char date[32]; }md_information_t; typedef struct { uint32_t voltage; uint32_t current; uint32_t power; uint32_t consumer; uint32_t freq; uint32_t factor; uint32_t angle; }md_out_power_info; typedef struct { uint32_t voltage; uint32_t freq; }md_input_info; typedef struct{ uint16_t choise_ch; }md_chiose_ch; typedef struct{ uint16_t input_status[2]; }md_input_status; typedef struct{ uint16_t fan_status; }md_fans; typedef struct{ uint16_t waning[2]; /* two input */ }md_in_wanning; typedef struct { float iic_consumer; uint64_t recode_index1; }iic_consumer_data_t; typedef struct{ iic_consumer_data_t iic_da; uint64_t index; uint16_t row; }consumer_data; typedef struct { uint16_t waning; }md_out_wanning; typedef struct { uint32_t voltage_max; uint32_t voltage_min; uint32_t current_max; uint32_t power_max; uint32_t consumer_max; }iic_out_threshold_t; typedef struct { uint32_t voltage_max; uint32_t voltage_min; uint32_t freq_max; uint32_t freq_min; }iic_in_threshold_t; typedef struct { uint8_t o_v_max : 1; uint8_t o_v_min : 1; uint8_t o_i_max : 1; uint8_t o_p_max : 1; uint8_t o_c_max : 1; uint8_t : 3; }wanning_o_t; typedef union { uint8_t beep_waning; wanning_o_t o_t; }wanning_o_beep_t; typedef wanning_o_beep_t wanning_o_beep_flag_t; typedef struct { uint8_t i_v_max : 1; uint8_t i_v_min : 1; uint8_t i_hz_max : 1; uint8_t i_hz_min : 1; uint8_t : 4; }wanning_i_t; typedef union { uint8_t beep_waning; wanning_i_t i_t; }wanning_i_beep_t; typedef wanning_i_beep_t wanning_i_beep_flag_t; typedef struct{ uint16_t fans_max_temp; uint16_t fans_min_temp; }iic_temp_threshold_t; typedef uint16_t iic_over_func; typedef struct{ uint16_t dev; //4000 md_information_t info; //4001 - 4030 md_input_info input[2]; //4031 - 4038 md_input_status input_status; //4039 - 4040 md_in_wanning input_wanning; //4041 md_out_wanning output_waning; //4042 md_out_power_info out_power; //4043 - 4057 int16_t temprature; //4058 uint16_t temprature_flag; //4059 uint16_t fans_status; //4060 uint16_t resurved[100]; // uint16_t out_status; //r_w //4061 md_chiose_ch md_choise; //4062 iic_in_threshold_t input_th[2]; iic_out_threshold_t output_th; iic_temp_threshold_t temprature_th; iic_over_func over_func; uint16_t input_v_k[2]; uint16_t input_i_k[2]; uint16_t output_v_k; uint16_t output_i_k; }md_data_t; #pragma pack () typedef struct sts_data{ uint8_t flag_1000ms; uint8_t flag_100ms; uint8_t beep_flag; uint8_t chiose_flag; uint32_t chiose_count_max; uint32_t chiose_counter; uint32_t beep_count; uint32_t lost_count; uint32_t wanning_count; uint8_t exit_init_flag; uint8_t switch_status; md_data_t m_data; consumer_data kwh; float iic_consumer; float temprature; uint8_t input_wanning_en[2]; uint8_t output_wanning_en; uint8_t input_beep; wanning_o_beep_t o_beep; wanning_o_beep_flag_t o_beep_flag; wanning_i_beep_t i_beep[2]; wanning_i_beep_flag_t i_beep_flag[2]; void (*choise_input)(uint8_t channel); void (*open_output)(); void (*close_output)(); void (*read_ele)(uint8_t channel); void (*read_switch_level)(); uint8_t (*get_input1_level)(); uint8_t (*get_input2_level)(); void (*fans)(uint8_t on_off); void (*beep)(); void (*clear_beep)(); void (*led_flash)(); void (*key_clear_beep)(); void (*read_eeprom)(uint16_t addr,uint8_t *r_buff,uint16_t lenth); void (*write_eeprom)(uint16_t addr,uint8_t *w_buff,uint16_t lenth); void (*read_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth); void (*write_eeprom_page)(uint16_t addr,uint8_t *r_buff,uint16_t lenth); float (*read_temp)(); void (*check_wanning)(uint8_t channel); }sts_data_t; sts_data_t *get_sts(void); #endif