#ifndef _ADMINISTRATOR_H_ #define _ADMINISTRATOR_H_ #include "define_all.h" #define __SYS_STATUS_BYTES_GET(__HANDLE__) ((&sys_admin_g)->sys_admin.state_bytes.__HANDLE__) #define __SYS_STATUS_BYTES_STATUS(__HANDLE__, __FLAG__, __ID__) \ do \ { \ if (__SYS_STATUS_BYTES_GET(__HANDLE__) != __FLAG__) \ { \ ((&sys_admin_g)->sys_admin.state_bytes.__HANDLE__ = __FLAG__); \ sys_clear_state_bytes_id_g = __ID__; \ Alarm_List_Node_Deleted(&pList_head,__ID__); \ } \ } while (0) #define __SYS_ALARM_BYTES_SET(__HANDLE__, __FLAG__) ((&sys_admin_g)->sys_admin.alarm_bytes.__HANDLE__ = __FLAG__) #define __SYS_STATUS_ALARM_BYTES_SET(__HANDLE__) \ do \ { \ if (__SYS_STATUS_BYTES_GET(__HANDLE__) != SET) \ (&sys_admin_g)->sys_admin.state_bytes.__HANDLE__ = \ (&sys_admin_g)->sys_admin.alarm_bytes.__HANDLE__ = SET; \ } while (0) #define __SYS_FUNC_CFG_BYTES_GET(__HANDLE__) ((&sys_func_cfg_bytes_g)->sys_func_cfg_bytes_s.__HANDLE__) #define __SYS_ALARM_CTL_BYTES_GET(__HANDLE__) ((&sys_alarm_ctl_bytes_g)->sys_alarm_ctl_send.__HANDLE__) #define __SYS_ALARM_SEND_BYTES_GET(__HANDLE__) ((&sys_alarm_send_bytes_g)->sys_alarm_ctl_send.__HANDLE__) #define __SYS_ALARM_CTL_SEND_BYTES_SET(__HANDLE__,__FLAG__) \ do \ { \ if(__SYS_ALARM_CTL_BYTES_GET(__HANDLE__) != __FLAG__) \ (&sys_alarm_ctl_bytes_g)->sys_alarm_ctl_send.__HANDLE__ = \ (&sys_alarm_send_bytes_g)->sys_alarm_ctl_send.__HANDLE__ = __FLAG__; \ }while(0) #define SYS_STATUS_BYTES_TYPE_LENGTH sizeof(SYS_STATUS_T) // 12×Ö½Ú£¨6´óÀࣩ //²é״̬¡¢±¨¾¯×ÖÎĵµ¿ÉµÃÎĵµ #define SYS_ALARM_BYTES_TYPE_LENGTH sizeof(SYS_ALARM_T) #define SYS_ALARM_CTL_BYTES_TYPE_LENGTH SYS_ALARM_BYTES_TYPE_LENGTH #define SYS_ALARM_SEND_BYTES_TYPE_LENGTH SYS_ALARM_BYTES_TYPE_LENGTH #define SYS_FUNC_CTL_BYTES_TYPE_LENGTH sizeof(SYS_FUNC_CFG_UNION_T) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_1 (sizeof(sys_av_id_tab_func_1) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_2 (sizeof(sys_av_id_tab_func_2) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_3 (sizeof(sys_av_id_tab_func_3) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_4 (sizeof(sys_av_id_tab_func_4) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_5 (sizeof(sys_av_id_tab_func_5) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_6 (sizeof(sys_av_id_tab_func_6) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define SYS_ALARM_VALVE_ID_FUNC_TABLE_NUM_7 (sizeof(sys_av_id_tab_func_7) / sizeof(SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T)) #define ALARM_BYTES_DAILY_NUM 2 typedef enum { VALVE_NONE = 0U, VALVE_OP, VALVE_CL, VALVE_OPENING, VALVE_CLOSING, VALVE_ERROR } VALVE_STATE_T; // ·§ÃÅ״̬ÀàÐÍ typedef enum { LDM_KEY_AWAKEN = 0U, // °´¼ü»½ÐÑ LDM_ALWAYS_AWAKEN, // ³£ÏÔ LDM_FLOW_AWAKEN // ÓÐÁ÷Á¿»½ÐÑ } LCD_DISPLAY_MODE_T; // LCDÆÁÄ»ÏÔʾģʽÀàÐÍ typedef enum { BM_NONE = 0U, BM_DEVICE, // É豸¶Ë BM_PLATFORM // ƽ̨¶Ë } BILLING_MODE_T; // ¼Æ·Ñģʽ typedef enum { PARA_AMEND_NONE = 0U, GAS_CUMULATE_PARA_AMEND, BALANCE_PARA_AMEND, TEMP_CFG_PARA_AMEND, PRESS_CFG_PARA_AMEND, BILLING_PARA_AMEND, GAS_CAL_PARA_AMEND, GAS_CFG_PARA_AMEND, PLUSE_CAL_PARA_AMEND, UT_ERR_PARA_AMEND, UT_CAL_PARA_AMEND, SYS_FUNC_CFG_BYTES_AMEND, ALARM_CTL_SEND_BYTES_AMEND, VALVE_CTL_BYTES_AMEND, BILLING_ALARM_CFG_AMEND, SEC_ORDER_CORR_PARA_AMEND, } PARA_AMEND_T; // ²ÎÊýÐÞ¸ÄÀàÐÍ typedef enum //BCD { AV_NORMAL = 0U, A_RESTART, // ¸´Î» ½ö½öÊDZ¨¾¯ÀàÐͲ»²úÉú¹Ø·§ AV_EXTERN_VCC_DOWN, AV_UNCAP_1, AV_UNCAP_2, AV_GPRS_FAIL, AV_LCD_UP, AV_LITH_LOW = 0x10, // ﮵çµÍµç±¨¾¯/¹Ø·§ AV_LITH_UNDER, AV_LITH_REMOVE, AV_ALKA_LOW, AV_ALKA_UNDER, AV_ALKA_REMOVE, AV_VALVE_VCC_LOW, AV_VALVE_VCC_DOWN, RTC_VCC, AV_TEMP_ERR = 0x20, // ζÈÒì³£±¨¾¯/¹Ø·§ AV_TEMP_UP, AV_TEMP_UP_UP, AV_TEMP_DOWN, AV_TEMP_DOWN_DOWN, AV_PRESS_ERR, AV_PRESS_UP, AV_PRESS_UP_UP, AV_PRESS_DOWN, AV_PRESS_DOWN_DOWN, AV_CPU_TEMP_UP = 0x30, // 30 AV_CPU_TEMP_DOWN, AV_CPU_TEMP_DRASTIC_CHANGE, AV_LCD_TEMP_LOW, AV_UT_LOSE = 0x40, // ̽ͷ¶ªÊ§±¨¾¯/¹Ø·§ AV_FLOW_VEL_ERR, AV_TOF_DIFF_ERR, AV_SOUND_VEL_ERR, AV_SNR_ERR, AV_SIG_UP, AV_SIG_TH_ERR, AV_GAIN_ERR, AV_INPUT_WATER_ERR, AV_MEDIA_ERR, AV_DISMANTLE = 0x50, //50 AV_MEASURE_ERR, //¼ÆÁ¿µ¥Ôª´íÎ󣨿ÉÄÜΪÖ÷´ÓͨѶʧ°Ü£¬Ò²¿ÉΪʱ¼äоƬ´íÎó£© AV_FLOW_UP_1 = 0x60, // Á÷Á¿³¬ÏÞ1±¨¾¯/¹Ø·§ AV_FLOW_UP_2, AV_FLOW_UP_3, AV_FLOW_DIRECTION, AV_CONSTANT_FLOW, AV_CONSTANT_TINY_FLOW, AV_LEAKAGE, AV_VALVE_ERR = 0x70, AV_CL_HAVE_FLOW, AV_BALANCE_1 = 0x90, // Óà¶îÉÙ¶î1±¨¾¯/¹Ø·§ AV_BALANCE_2, AV_BALANCE_3, AV_BALANCE_4, AV_BALANCE_5, AV_SET_CUMULATE, AV_NO_USE_GAS, AV_NO_GPRS, V_KEY_OP = 0x996, // ½ö½öÊǹط§ÀàÐͲ»²úÉú±¨¾¯ V_KEY_CL = 0x997, V_GPRS_CMD_OP = 0x998, V_GPRS_CMD_CL = 0x999 } SYS_ALARM_VALVE_T; // ±¨¾¯ºÍ¹Ø·§ÀàÐÍID #pragma pack(1) typedef struct { uint16_t lcd_mode : 3; uint16_t : 1; uint16_t account_state : 1; uint16_t flow_direction : 1; uint16_t work_state : 2; uint16_t : 1; // Ô¤Áô uint16_t power_state : 1; uint16_t : 1; uint16_t uncap_state_1 : 1; //²ðÃæ°å uint16_t : 4; uint16_t valve_state : 3; uint16_t valve_lock : 1; uint16_t set_cumulate_up_to : 1; uint16_t no_use_gas_date_up_to : 1; uint16_t no_gprs_date_up_to : 1; uint16_t virtual_billing : 1; uint16_t billing_type : 2; uint16_t : 1; // Ô¤Áô uint16_t balance_small_1 : 1; uint16_t balance_small_2 : 1; uint16_t balance_small_3 : 1; uint16_t balance_small_4 : 1; uint16_t balance_small_5 : 1; uint16_t lith_low : 1; uint16_t lith_under : 1; uint16_t lith_remove : 1; uint16_t alka_low : 1; uint16_t alka_under : 1; uint16_t alka_remove : 1; uint16_t : 2; uint16_t gprs_status : 1; uint16_t : 7; uint16_t temp_err : 1; uint16_t temp_up : 1; uint16_t temp_up_up : 1; uint16_t temp_down : 1; uint16_t temp_down_down : 1; uint16_t cpu_temp_up : 1; uint16_t cpu_temp_down : 1; uint16_t cpu_temp_drastic_change : 1; uint16_t press_err : 1; uint16_t press_up : 1; uint16_t press_up_up : 1; uint16_t press_down : 1; uint16_t press_down_down : 1; uint16_t : 3; uint16_t flow_ver_err : 1; uint16_t tof_diff_err : 1; uint16_t sound_vel_err : 1; uint16_t snr_err : 1; uint16_t sig_up : 1; uint16_t sig_th_err : 1; uint16_t gain_err : 1; uint16_t ut_lose : 1; uint16_t media_status : 2; uint16_t input_water : 1; uint16_t measure_err : 1; uint16_t : 4; uint16_t gas_leakage : 1; uint16_t lcd_up : 1; uint16_t lcd_temp_low : 1; uint16_t flow_up_1 : 1; uint16_t flow_up_2 : 1; uint16_t flow_up_3 : 1; uint16_t constant_tiny_flow : 1; uint16_t constant_flow : 1; uint16_t cl_have_flow : 1; uint16_t : 7; } SYS_STATUS_T; typedef struct { uint16_t : 4; // Ô¤Áô uint16_t account_state : 1; uint16_t flow_direction : 1; uint16_t : 2; uint16_t restart : 1; uint16_t power_state : 1; uint16_t : 1; uint16_t uncap_state_1 : 1; uint16_t : 4; uint16_t valve_error : 1; uint16_t valve_change : 1; uint16_t : 2; uint16_t set_cumulate_up_to : 1; uint16_t no_use_gas_date_up_to : 1; uint16_t no_gprs_date_up_to : 1; uint16_t : 4; uint16_t balance_small_1 : 1; uint16_t balance_small_2 : 1; uint16_t balance_small_3 : 1; uint16_t balance_small_4 : 1; uint16_t balance_small_5 : 1; uint16_t lith_low : 1; uint16_t lith_under : 1; uint16_t lith_remove : 1; uint16_t alka_low : 1; uint16_t alka_under : 1; uint16_t alka_remove : 1; uint16_t : 2; uint16_t gprs_status : 1; uint16_t : 7; uint16_t temp_err : 1; uint16_t temp_up : 1; uint16_t temp_up_up : 1; uint16_t temp_down : 1; uint16_t temp_down_down : 1; uint16_t cpu_temp_up : 1; uint16_t cpu_temp_down : 1; uint16_t cpu_temp_drastic_change : 1; uint16_t press_err : 1; uint16_t press_up : 1; uint16_t press_up_up : 1; uint16_t press_down : 1; uint16_t press_down_down : 1; uint16_t : 3; uint16_t flow_vel_err : 1; uint16_t tof_diff_err : 1; uint16_t sound_vel_err : 1; uint16_t snr_err : 1; uint16_t sig_up : 1; uint16_t sig_th_err : 1; uint16_t gain_err : 1; uint16_t ut_lose : 1; uint16_t input_water : 1; uint16_t media_other : 1; uint16_t dismantle : 1; uint16_t measure_err : 1; uint16_t : 4; uint16_t gas_leakage : 1; uint16_t lcd_up : 1; uint16_t lcd_temp_low : 1; uint16_t flow_up_1 : 1; uint16_t flow_up_2 : 1; uint16_t flow_up_3 : 1; uint16_t constant_tiny_flow : 1; uint16_t constant_flow : 1; uint16_t cl_have_flow : 1; uint16_t : 7; uint16_t gas_cumulate_amend : 1; uint16_t balance_amend : 1; uint16_t temp_para_amend : 1; uint16_t press_para_amend : 1; uint16_t billing_para_amend : 1; uint16_t : 3; uint16_t flow_cal_amend : 1; uint16_t flow_para_amend : 1; uint16_t pluse_cal_amend : 1; uint16_t ut_err_amend : 1; uint16_t ut_cal_amend : 1; uint16_t : 3; } SYS_ALARM_T; typedef union { uint16_t alarm_ctl_send_union[SYS_ALARM_CTL_BYTES_TYPE_LENGTH >> 1]; SYS_ALARM_T sys_alarm_ctl_send; } SYS_ALARM_CTL_SEND_UNION_T; // ±¨¾¯¿ØÖÆ/Éϱ¨×Ö typedef union { uint16_t func_cfg_union[4]; struct { uint16_t : 4; // Ô¤Áô uint16_t small_flow_excision : 1; uint16_t : 2; uint16_t both_way_measure : 1; uint16_t lcd_mode : 3; uint16_t : 5; uint16_t set_compressibility : 2; uint16_t : 1; uint16_t press_corrected_manage : 3; uint16_t press_err_manage : 2; uint16_t : 3; uint16_t temp_corrected_manage : 3; uint16_t temp_err_manage : 2; uint16_t super_flow_manage_3 : 1; uint16_t super_flow_manage_2 : 1; uint16_t : 14; uint16_t : 2; uint16_t virtual_billing : 1; uint16_t : 2; uint16_t account_state : 1; uint16_t : 2; uint16_t balance_display_set:1; uint16_t price_display_set: 1; uint16_t logo_display_set : 1; uint16_t : 3; uint16_t billing_type : 2; } sys_func_cfg_bytes_s; } SYS_FUNC_CFG_UNION_T; typedef union { uint16_t admin_union[(SYS_STATUS_BYTES_TYPE_LENGTH + SYS_ALARM_BYTES_TYPE_LENGTH) >> 1]; struct { __IO SYS_STATUS_T state_bytes; __IO SYS_ALARM_T alarm_bytes; } sys_admin; // ϵͳ¹ÜÀíÔ± } SYS_ADMIN_UNION_T; typedef struct { const SYS_ALARM_VALVE_T alarm_valve_id; // ±¨¾¯/¹Ø·§Ô­Òòid const uint8_t offset_bit; // Õë¶ÔÓÚ±¨¾¯×ֵį«ÒÆÁ¿ __IO uint16_t alarm_daily_num; // ÿÈյı¨¾¯´ÎÊýÏÞÖÆ uint16_t *alarm_byte; // ±¨¾¯×Ö } SYS_ALARM_VALVE_ID_FUNC_TABLE_DRV_T; #pragma pack() extern PARA_AMEND_T sys_para_amend_log_flag_g; extern SYS_ALARM_VALVE_T sys_alarm_id_g; extern SYS_ALARM_VALVE_T sys_valve_ctl_id_g; extern SYS_ADMIN_UNION_T sys_admin_g; extern SYS_ALARM_CTL_SEND_UNION_T sys_alarm_ctl_bytes_g; extern SYS_ALARM_CTL_SEND_UNION_T sys_alarm_send_bytes_g; extern SYS_FUNC_CFG_UNION_T sys_func_cfg_bytes_g; void Admin_AlarmBytesProcess(uint8_t *pGprs_send_flag, SYS_ADMIN_UNION_T *sys_admin_p); void Sys_StatusBytesInit(void); void Upcap1_StateAlarmHandler(void); #include "linked_list.h" #endif