From 72def895431ad7a08e635b11f3da738e2b2c4618 Mon Sep 17 00:00:00 2001
From: wujiazhi <1147861305@qq.com>
Date: Thu, 13 Jun 2024 11:31:04 +0800
Subject: [PATCH] add lower model test

---
 Function/POWER_MANAGE/power_manage.c |  699 ++++++++++++++++++++++-----------------------------------
 1 files changed, 274 insertions(+), 425 deletions(-)

diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
index 3ced23d..8d2f050 100644
--- a/Function/POWER_MANAGE/power_manage.c
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -1,75 +1,37 @@
 #include "power_manage.h"
 #include "adc.h"
 #include "stdlib.h"
+#include "low_pwr_test.h"
 #include "uart.h"
+#include "sundry.h"
 #include "extern_rtc.h"
 #include "lcd.h"
+#include "system_parameter.h"
+#include "low_pwr_test.h"
 #include "gpio.h"
+#include "gprs.h"
+#include "master_slave_inter.h"
 #include "lcd.h"
+#include "working_time_calculate.h"
 #include "tim.h"
-#include "sizhu_ctrl_word.h"
-#include "system_run_fun.h"
-#include "system_mem_para.h"
-#include "sizhu_ctrl_word.h"
-#include "linked_list.h"
-#include "upper_com.h"
-
-PWR_VOL_T pwr_vol_g = {.lith_flag = LMS_PERIOD, .alka_flag = AMS_PERIOD, .mcu_temp_flag = SET,.lith_vcc_per = 100}; // Ĭ���ϵ�ɼ�һ�ε�����MCU�¶�
-
+#include "devicegpioinit.h"
+PWR_VOL_T pwr_vol_g = {LMS_PERIOD, AMS_PERIOD, SET, .lith_vcc_per = 100}; // Ĭ���ϵ�ɼ�һ�ε�����MCU�¶�
 
 uint8_t first_power_get_cnt_g = 0;
-LIMIT_TRIGGER_RECORD_PARA_T limit_trigger_record_para_g;
 
 void Power_IO_Init(void)
 {
-	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
-	OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
-	InputtIO( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, IN_NORMAL);
+  CMU_PERCLK_SetableEx(PADCLK, ENABLE); // PADʱ�ӣ�GPIO��ʹ�ܺ���
+  OutputIO(LITHIUM_DETECTION_PORT, LITHIUM_DETECTION_PIN, OUT_PUSHPULL);
+  InputtIO(LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN, IN_NORMAL);
+  //	InputtIO( LIT_PWR_UNDER_PORT, LIT_PWR_UNDER_PIN, IN_NORMAL);
 
-	
-	OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL);
-	InputtIO_H( ALKA_PWR_LOSE_PIN, IN_NORMAL);
-		
-	ALK_DEC_OFF;
-	LIT_DEC_OFF;
-	
-	OutputIO(BORROW_PWR_PORT,BORROW_PWR_PIN,OUT_PUSHPULL);
-	OutputIO(EX_PWR_EN_PORT,EX_PWR_EN_PIN,OUT_PUSHPULL);
-	BORROW_PWR_OFF;
-	EX_PWR_OFF;
-	
-	InputtIO( LIMIT_TRIGGER_PORT, LIMIT_TRIGGER_PIN, IN_NORMAL);
+  // OutputIO(ALKALI_DETECTION_PORT, ALKALI_DETECTION_PIN, OUT_PUSHPULL);
+  InputtIO(ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_PIN, IN_NORMAL);
+
+  // ALK_DEC_OFF;
+  LIT_DEC_OFF;
 }
-
-void Lith_Battery_GPIO_Clk_Init(void)
-{
-	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
-	AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//
-	OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
-//	AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);
-	
-}
-
-void Alka_Battery_GPIO_Clk_Init(void)
-{
-	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
-	AnalogIO_H(ALK_ADC_PIN);
-	OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL);
-}
-
-void EX_Pwr_GPIO_Clk_Init(void)
-{
-	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
-	InputtIO( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, IN_NORMAL);
-	OutputIO(EX_PWR_EN_PORT,EX_PWR_EN_PIN,OUT_PUSHPULL);
-}
-
-void borrow_Pwr_GPIO_Clk_Init(void)
-{
-	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
-	InputtIO( BORROW_PWR_PORT, BORROW_PWR_PIN, IN_NORMAL);
-}
-
 
 /******************************************
  * func:    Get_vol_Average
@@ -82,7 +44,7 @@
  * output:  none
  * return:  calculation sample mean of 64 middle data,multiply by 1000. eg:1.0v -> 1000
  *****************************************/
-uint32_t Get_vol_Average(ad_data_s *data_p)
+uint32_t Get_vol_average(ad_data_s *data_p)
 {
   u32 i, j, t;
   uint32_t temp;
@@ -125,20 +87,21 @@
   float sample_vol;
   float battery_vol = 0;
   ad_data_s *data_ins;
-	Alka_Battery_GPIO_Clk_Init();
-	ADC_IN10_Init();
-  ALK_DEC_ON;
-  delay_ms(5);
-  // �������������ڴ�ռ�
-  if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_ALKA_BAT_CNT)) != NULL)
-  {
-    data_ins->ad_buffer_cnt = AD_ALKA_BAT_CNT;
-    data_ins->ad_ch = AD_ALKA_BAT_CH;
-    volt_ret = Get_vol_Average(data_ins); 
+  // Alka_Battery_GPIO_Clk_Init();
+  ADC_IN10_Init();
+  ALKA_TEST_ON; // ʹ�ܼ����
 
-		sample_vol = (float)volt_ret * 0.001;
-		battery_vol = sample_vol * ALKA_VOL_COE;
-    ALK_DEC_OFF;
+  //  delay_ms(10);
+  // �������������ڴ�ռ�
+  if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * Ad_ALKA_BAT_CNT)) != NULL)
+  {
+    data_ins->ad_buffer_cnt = Ad_ALKA_BAT_CNT;
+    data_ins->ad_ch = Ad_ALKA_BAT_CH;
+    volt_ret = Get_vol_average(data_ins);
+
+    sample_vol = (float)volt_ret * 0.001;
+    battery_vol = sample_vol * ALKA_VOL_COE;
+    ALKA_TEST_OFF;
     /*�ͷ��ڴ�*/
     free(data_ins);
     data_ins = NULL;
@@ -159,18 +122,18 @@
   float sample_vol;
   float battery_vol = 0;
   ad_data_s *data_ins;
-	Lith_Battery_GPIO_Clk_Init();
-	ADC_IN5_Init();
-  LIT_DEC_ON;
-  delay_ms(5);
-  if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_BAT_CNT)) != NULL)
+  // Lith_Battery_GPIO_Clk_Init();
+  ADC_IN5_Init();
+  LITH_TEST_ON; // ʹ��﮵���
+  //  delay_ms(10);
+  if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * Ad_LITH_BAT_CNT)) != NULL)
   {
-    data_ins->ad_buffer_cnt = AD_LITH_BAT_CNT;
-    data_ins->ad_ch = AD_LITH_BAT_CH;
-    volt_ret = Get_vol_Average(data_ins);
-		sample_vol = (float)volt_ret * 0.001;
-		battery_vol = sample_vol * LITH_VOL_COE;
-    LIT_DEC_OFF;
+    data_ins->ad_buffer_cnt = Ad_LITH_BAT_CNT;
+    data_ins->ad_ch = Ad_LITH_BAT_CH;
+    volt_ret = Get_vol_average(data_ins);
+    sample_vol = (float)volt_ret * 0.001;
+    battery_vol = sample_vol * LITH_VOL_COE;
+    LITH_TEST_OFF;
     /*�ͷ��ڴ�*/
     free(data_ins);
     data_ins = NULL;
@@ -179,35 +142,34 @@
   return battery_vol;
 }
 
-//float Get_PF6_Bat_Voltage(void)
+// float Get_PF6_Bat_Voltage(void)
 //{
 //	uint32_t volt_ret;
-//  float sample_vol;
-//  float battery_vol = 0;
-//  ad_data_s *data_ins;
+//   float sample_vol;
+//   float battery_vol = 0;
+//   ad_data_s *data_ins;
 //	Lith_Battery_GPIO_Clk_Init();
 //	ADC_IN5_Init();
-//  if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_PF6_BAT_CNT)) != NULL)
-//  {
-//    data_ins->ad_buffer_cnt = AD_LITH_PF6_BAT_CNT;
-//    data_ins->ad_ch = AD_LITH_PF6_BAT_CH;
-//    volt_ret = Get_vol_Average(data_ins);
+//   if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_PF6_BAT_CNT)) != NULL)
+//   {
+//     data_ins->ad_buffer_cnt = AD_LITH_PF6_BAT_CNT;
+//     data_ins->ad_ch = AD_LITH_PF6_BAT_CH;
+//     volt_ret = Get_vol_average(data_ins);
 //		sample_vol = (float)volt_ret * 0.001;
 //		battery_vol = sample_vol * LITH_PF6_VOL_COE;
-//    /*�ͷ��ڴ�*/
-//    free(data_ins);
-//    data_ins = NULL;
-//  }
-//  ADC_CR_EN_Setable(DISABLE);
-//  return battery_vol;
-//}
-
+//     /*�ͷ��ڴ�*/
+//     free(data_ins);
+//     data_ins = NULL;
+//   }
+//   ADC_CR_EN_Setable(DISABLE);
+//   return battery_vol;
+// }
 
 float Get_Mcu_Temp(void)
 {
   ad_data_s *data_ins_vtem;
   float temperature;
-	ADC_Temp_Init();
+  ADC_Temp_Init();
 
   if ((data_ins_vtem = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_VTEM_CNT)) != NULL)
   {
@@ -221,343 +183,230 @@
   ADC_CR_EN_Setable(DISABLE);
   return temperature;
 }
-
-
-#define	LITH_BAT_VCC_MAX	7.2f
-/*��ص�ѹ״̬�ж�,״̬���ϱ����Ҫ������ֵ+0.2V����ֹ״̬����ֵ��������*/
-void Lith_Bat_Voltage_Status(float lith_vcc,PWR_VOL_T *pwr_vol_p)
+/*Mcu�¶�״̬��������*/
+#define LCD_TEMPERATURE_LOW_VALUE (-15)
+void Mcu_TempStateAlarmHandler(float mcu_temperature, SYS_TEMP_ALARM_CFG_T *sys_temp_alarm_p)
 {
-	float fTemp;
-	if(lith_vcc < bat_para_g.lith_bat_under_v*0.1){
-		pwr_vol_p->lith_vcc_status = BAT_V_DOWN;
-	}else if(lith_vcc < bat_para_g.lith_bat_under_v*0.1 + 0.2){
-		if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
-			pwr_vol_p->lith_vcc_status = BAT_V_DOWN;
-		}else{
-			pwr_vol_p->lith_vcc_status = BAT_V_LOW;
-		}
-	}else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1){
-		pwr_vol_p->lith_vcc_status = BAT_V_LOW;
-	}else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1 + 0.2){
-		if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
-			pwr_vol_p->lith_vcc_status = BAT_V_LOW;
-		}else{
-			pwr_vol_p->lith_vcc_status = BAT_V_NONE;
-		}
-	}else{
-		pwr_vol_p->lith_vcc_status = BAT_V_NONE;
-	}
-	
-	/*****���ݵ�ѹֵ����ٷֱȣ����簴LITH_BAT_VCC_MAX��***/
-	if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
-		pwr_vol_p->lith_vcc_per = 0;
-	}else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
-		if(bat_para_g.lith_bat_low_v > bat_para_g.lith_bat_under_v){
-			fTemp = BAT_PERSENT_LEVEL_1*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(0.1*(bat_para_g.lith_bat_low_v - bat_para_g.lith_bat_under_v));
-			if(fTemp > 20.0)
-				fTemp = 20;
-			else if(fTemp <0)
-				fTemp = 0;
-			pwr_vol_p->lith_vcc_per = fTemp;
-		}else
-		{
-			pwr_vol_p->lith_vcc_per = 0;
-		}
-		
-	}else
-	{
-		if(LITH_BAT_VCC_MAX>bat_para_g.lith_bat_low_v*0.1){
-			fTemp = (100-BAT_PERSENT_LEVEL_1)*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(LITH_BAT_VCC_MAX - bat_para_g.lith_bat_low_v*0.1);
-			if(fTemp > 80.0)
-				fTemp = 80;
-			else if(fTemp <0.0)
-				fTemp = 0.0;
-			pwr_vol_p->lith_vcc_per = fTemp + 20.0;
-		}else{
-			pwr_vol_p->lith_vcc_per = 20;
-		}
-		
-	}
-    
+  if (mcu_temperature < sys_temp_alarm_p->cpu_temp_up_scope &&
+      mcu_temperature > sys_temp_alarm_p->cpu_temp_down_scope) // �����¶� cpu_temp_down < mcu_temp_now < cpu_temp_up
+  {
+    __SYS_STATUS_BYTES_STATUS(cpu_temp_up, RESET, AV_CPU_TEMP_UP);
+    __SYS_STATUS_BYTES_STATUS(cpu_temp_down, RESET, AV_CPU_TEMP_DOWN);
+  }
+  else if (mcu_temperature >= sys_temp_alarm_p->cpu_temp_up_scope)
+    __SYS_STATUS_ALARM_BYTES_SET(cpu_temp_up);
+  else if (mcu_temperature <= sys_temp_alarm_p->cpu_temp_down_scope)
+    __SYS_STATUS_ALARM_BYTES_SET(cpu_temp_down);
+
+  if (mcu_temperature <= LCD_TEMPERATURE_LOW_VALUE)
+    __SYS_STATUS_ALARM_BYTES_SET(lcd_temp_low);
+  else
+    __SYS_STATUS_BYTES_STATUS(lcd_temp_low, RESET, AV_LCD_TEMP_LOW);
+}
+/*��ص�ѹ״̬�ж�*/
+#define LITH_LOW_EFFECTIVE_VOLTAGE_VALUE (3.2f - 2.9f)
+void Lith_Bat_Voltage_Status(float lith_vcc, int8_t *pLith_vcc_per)
+{
+  if (lith_vcc < 3.2f)
+  {
+    if (__SYS_STATUS_BYTES_GET(lith_under) == RESET || __SYS_STATUS_BYTES_GET(lith_remove) == RESET)
+    {
+      *pLith_vcc_per = (float)(lith_vcc - 2.9f) / (float)LITH_LOW_EFFECTIVE_VOLTAGE_VALUE * 20;
+      if (*pLith_vcc_per < 0)
+        *pLith_vcc_per = 1;
+    }
+  }
+  else
+    *pLith_vcc_per = 100;
+
+  if (__SYS_STATUS_BYTES_GET(lith_low) == 0 && lith_vcc < 3.2f) // ﮵�͵�״̬��δ��λ && ﮵� < ij���� = ﮵�͵�
+    __SYS_STATUS_ALARM_BYTES_SET(lith_low);
+  else if (__SYS_STATUS_BYTES_GET(lith_low) && lith_vcc >= 3.25f)
+    __SYS_STATUS_BYTES_STATUS(lith_low, RESET, AV_LITH_LOW); // ���﮵�͵�״̬
+
+  if (__SYS_STATUS_BYTES_GET(lith_under) == 0 && lith_vcc < 2.9f)
+  {
+    pwr_vol_g.lith_vcc_per = 0;
+    __SYS_STATUS_ALARM_BYTES_SET(lith_under);
+  }
+  else if (__SYS_STATUS_BYTES_GET(lith_under) && lith_vcc >= 2.95f) // ﮵�Ƿѹ����
+    __SYS_STATUS_BYTES_STATUS(lith_under, RESET, AV_LITH_UNDER);
+
+  if (__SYS_STATUS_BYTES_GET(lith_remove) && lith_vcc >= 2.5f &&
+      GPIO_ReadInputDataBit(LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN) == Bit_SET) // ﮵��Ƴ�/��������
+  {
+    __SYS_STATUS_BYTES_STATUS(lith_remove, RESET, AV_LITH_REMOVE);
+    SLAVE_PWR_ON;
+  }
 }
 
-#define	ALKA_BAT_VCC_MAX	6.4f
-void Alka_Bat_Voltage_Status(float alka_vcc,PWR_VOL_T *pwr_vol_p)
+void Alka_Bat_Voltage_Status(float alka_vcc)
 {
-	float fTemp;
-	if(alka_vcc < bat_para_g.alka_bat_under_v*0.1){
-		pwr_vol_p->alka_vcc_status = BAT_V_DOWN;
-	}else if(alka_vcc < bat_para_g.alka_bat_under_v*0.1 + 0.2){
-		if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
-			pwr_vol_p->alka_vcc_status = BAT_V_DOWN;
-		}else{
-			pwr_vol_p->alka_vcc_status = BAT_V_LOW;
-		}
-	}else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1){
-		pwr_vol_p->alka_vcc_status = BAT_V_LOW;
-	}else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1 + 0.2){
-		if(pwr_vol_p->alka_vcc_status==BAT_V_LOW){
-			pwr_vol_p->alka_vcc_status = BAT_V_LOW;
-		}else{
-			pwr_vol_p->alka_vcc_status = BAT_V_NONE;
-		}
-	}else{
-		pwr_vol_p->alka_vcc_status = BAT_V_NONE;
-	}
-	
-	/*****���ݵ�ѹֵ����ٷֱȣ����簴ALKA_BAT_VCC_MAX��***/
-	if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
-		pwr_vol_p->alka_vcc_per = 0;
-	}else if(pwr_vol_p->alka_vcc_status == BAT_V_LOW){
-		if(bat_para_g.alka_bat_low_v > bat_para_g.alka_bat_under_v){
-			fTemp = BAT_PERSENT_LEVEL_1*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(0.1*(bat_para_g.alka_bat_low_v - bat_para_g.alka_bat_under_v));
-			if(fTemp > 20.0)
-				fTemp = 20;
-			else if(fTemp <0)
-				fTemp = 0;
-			pwr_vol_p->alka_vcc_per = fTemp;
-		}else
-		{
-			pwr_vol_p->alka_vcc_per = 0;
-		}
-		
-	}else
-	{
-		if(ALKA_BAT_VCC_MAX>bat_para_g.alka_bat_low_v*0.1){
-			fTemp = (100-BAT_PERSENT_LEVEL_1)*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(ALKA_BAT_VCC_MAX - bat_para_g.alka_bat_low_v*0.1);
-			if(fTemp > 80.0)
-				fTemp = 80;
-			else if(fTemp <0.0)
-				fTemp = 0.0;
-			pwr_vol_p->alka_vcc_per = fTemp + 20.0;
-		}else{
-			pwr_vol_p->alka_vcc_per = 20;
-		}
-		
-	}
-	
+  if (__SYS_STATUS_BYTES_GET(alka_low) == 0 && alka_vcc < 4.85f) // ���͵�
+    __SYS_STATUS_ALARM_BYTES_SET(alka_low);
+  else if (__SYS_STATUS_BYTES_GET(alka_low) && alka_vcc >= 4.95f)
+  {
+    __SYS_STATUS_BYTES_STATUS(alka_low, RESET, AV_ALKA_LOW);
+  }
+
+  if (__SYS_STATUS_BYTES_GET(alka_under) == 0 && alka_vcc < 4.5f) // ���Ƿѹ
+    __SYS_STATUS_ALARM_BYTES_SET(alka_under);
+  else if (__SYS_STATUS_BYTES_GET(alka_under) && alka_vcc >= 4.6f)
+    __SYS_STATUS_BYTES_STATUS(alka_under, RESET, AV_ALKA_UNDER);
+
+  if (__SYS_STATUS_BYTES_GET(alka_remove) && alka_vcc >= 3.0f &&
+      GPIO_ReadInputDataBit(ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_PIN) == Bit_SET) // ����Ƴ�/��������
+    __SYS_STATUS_BYTES_STATUS(alka_remove, RESET, AV_ALKA_REMOVE);
+
+  if (GPIO_ReadOutputDataBit(LCD_PWR_GPIO_PORT, LCD_PWR_PIN))
+    LCD_BACKLIGHT_SELECT(__SYS_STATUS_BYTES_GET(alka_low));
 }
 
-/**MCU�¶�״̬�ж�*/
-void MCU_temperature_Status(float mcu_tem,PWR_VOL_T *pwr_vol_p)
+/*��Դ����ʱ������*/
+void Power_PeriodTimeSet(PWR_VOL_T *pwr_vol_p_p, __IO SYS_STATUS_T *sys_state_p)
 {
-	
+  static uint8_t alka_last_state[3] = {0}, lith_last_state[3] = {0};
+  static uint16_t alka_get_power_period_time_set = 720, lith_get_power_period_time_set = 720;
+  /*���*/
+  if (alka_last_state[0] != sys_state_p->alka_low) // ���͵�
+  {
+    if (sys_state_p->alka_low)
+      alka_get_power_period_time_set = 360; // 6Сʱ
+    else
+      alka_get_power_period_time_set = 720;
+    alka_last_state[0] = sys_state_p->alka_low;
+    __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
+  }
+  if (alka_last_state[1] != sys_state_p->alka_under)
+  {
+    if (sys_state_p->alka_under)
+      alka_get_power_period_time_set = 60; // 1Сʱ
+    else
+      alka_get_power_period_time_set = 720;
+    alka_last_state[1] = sys_state_p->alka_under;
+    __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
+  }
+  if (alka_last_state[2] != sys_state_p->alka_remove)
+  {
+    if (sys_state_p->alka_remove)
+      alka_get_power_period_time_set = 10; // 1/6Сʱ
+    else
+      alka_get_power_period_time_set = 720;
+    alka_last_state[2] = sys_state_p->alka_remove;
+    __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
+  }
+  /*﮵�*/
+  if (lith_last_state[0] != sys_state_p->lith_low)
+  {
+    if (sys_state_p->lith_low)
+      lith_get_power_period_time_set = 360; // 6Сʱ
+    else
+      lith_get_power_period_time_set = 720;
+    lith_last_state[0] = sys_state_p->lith_low;
+    __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
+  }
+  if (lith_last_state[1] != sys_state_p->lith_under)
+  {
+    if (sys_state_p->lith_under)
+      lith_get_power_period_time_set = 60; // 1Сʱ
+    else
+      lith_get_power_period_time_set = 720;
+    lith_last_state[1] = sys_state_p->lith_under;
+    __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
+  }
+  if (lith_last_state[2] != sys_state_p->lith_remove)
+  {
+    if (sys_state_p->lith_remove)
+      lith_get_power_period_time_set = 10; // 1/6Сʱ
+    else
+      lith_get_power_period_time_set = 720;
+    lith_last_state[2] = sys_state_p->lith_remove;
+    __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
+  }
+  if (calendar_g.Second == 0x10 &&
+      Func_PeriodStartHandler(0, alka_get_power_period_time_set, &period_para_g.alka_get_power_period.period_flag, &period_para_g.alka_get_power_period.last_time_m, &calendar_g))
+    pwr_vol_p_p->alka_flag = AMS_PERIOD;
+  if (
+      calendar_g.Second == 0x12 &&
+      Func_PeriodStartHandler(0, lith_get_power_period_time_set, &period_para_g.lith_get_power_period.period_flag, &period_para_g.lith_get_power_period.last_time_m, &calendar_g))
+    pwr_vol_p_p->lith_flag = LMS_PERIOD;
+  if (calendar_g.Second == 0x14 &&
+      Func_PeriodStartHandler(0, 30, &period_para_g.mcu_get_temperature_period.period_flag, &period_para_g.mcu_get_temperature_period.last_time_m, &calendar_g))
+    pwr_vol_p_p->mcu_temp_flag = SET;
 }
 
-
-//﮵��ʹ��ʱ�����
-void LithBatUseTimeCalculate(BAT_PARA_T *bat_para_p)
+uint8_t sys_bst_flag = 0;
+void Sys_BST_LithStatus(float lith_vcc)
 {
-	bat_para_p->lith_bat_used_sec ++;
-	if(bat_para_p->lith_bat_used_sec >=3600){
-		bat_para_p->lith_bat_used_sec = 0;
-		
-		if(bat_para_p->lith_bat_used_hour < 87600) //24Сʱ*365��*10��
-			bat_para_p->lith_bat_used_hour ++;
-
-		//? �洢���ݶ�ÿСʱ�洢һ��
-	}
-	
+  if (first_power_get_cnt_g >= FIRST_POWER_TIM_MAX)
+  {
+    if (lith_vcc >= 3.2f)
+    {
+      SYS_BST_DIS;
+      sys_bst_flag = 0;
+    }
+    else if (lith_vcc < /*3.1f*/ 3.0f)
+    {
+      SYS_BST_EN;
+      sys_bst_flag = 1;
+    }
+  }
 }
 
-#define	EX_PWR_CONTINUE_TIME	5     //������ʱ�䣬����X������Ч
-/*��õ�Դ״̬��﮵硢��硢��硢MCU�¶�*/
-void GetPwrStatusPro(PWR_VOL_T *pwr_vol_p)
+/*���˫��ص�ѹ*/
+void Get_Double_Bat_Voltage(PWR_VOL_T *pwr_vol_p)
 {
-	const uint16_t 	DELAY_TIME = 5;
-	static uint16_t delay_time_cnt = 0;	
-	
-	/*�߹��Ĺ������н���֮����ʱһ��ʱ���ټ����*/
-	if((sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.wrc_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.valve_ctrl_flag.running_flag == RESET)){
-		if(delay_time_cnt < DELAY_TIME) delay_time_cnt ++;
-	}
-	else
-		delay_time_cnt = 0;
-	
-  /*﮵������ڴ���*/ //�ݶ��򵥴���һ����һ��
-	if((sys_clockBCD_g.hour == 23)&&(sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 57)){
-		pwr_vol_p->lith_flag = LMS_PERIOD;
-		pwr_vol_p->alka_flag = AMS_PERIOD;
-	}
-	
-	/*MCU�¶������Լ��*/ //�ݶ�ÿСʱ���һ��
-	if((sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 58))
-		pwr_vol_p->mcu_temp_flag = SET;
-	
-	//﮵����ȷ��
-	if(pwr_vol_p->lith_lose_check_flag == SET){
-		pwr_vol_p->lith_lose_check_flag = RESET;
-		if(LITH_PWR_LOSE_IO_READ == Bit_RESET){
-			//ȷ��﮵����
-			__SYS_STATUS_ALARM_BYTES_SET(lith_remove,ALARM_ID_LITH_BAT_REMOVAL); //?﮵����֮����ҪһЩ������������ʵʱ��������洢һ��
-		}
-	}
-	
-	//������ȷ��
-	if(pwr_vol_p->alka_lose_check_flag == SET){
-		pwr_vol_p->alka_lose_check_flag = RESET;
-		if(ALKA_PWR_LOSE_IO_READ == Bit_RESET){
-			//ȷ��﮵����
-			__SYS_STATUS_ALARM_BYTES_SET(alka_remove,ALARM_ID_ALKA_BAT_REMOVAL);
-		}
-	}
-	
-	
-	
-	if(pwr_vol_p->lith_flag != LMS_NONE ){
-		pwr_vol_p->lith_flag = LMS_NONE;
-		pwr_vol_p->lith_vcc = Get_Lith_Bat_Voltage();//﮵���
-		Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc,pwr_vol_p);
-	}
-	
-//	if((pwr_vol_p->alka_flag != AMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){
-//		pwr_vol_p->alka_flag = AMS_PERIOD;
-//		pwr_vol_p->alka_vcc = Get_Alka_Bat_Voltage();//�����
-//		Alka_Bat_Voltage_Status(pwr_vol_p->alka_vcc,pwr_vol_p);
-//	} 
-	
-	if(pwr_vol_p->mcu_temp_flag == SET){
-		pwr_vol_p->mcu_temp_flag = RESET;
-		pwr_vol_p->mcu_temperature = Get_Mcu_Temp();//mcu�¶Ȼ�ȡ
-		
-	}
-	
-	
-	/*���ʹ��ʱ����㣬�ٸ��ݵ�ѹ״̬��ʹ��ʱ��״̬�ۺϵó����յĵ��״̬*/
-	/*﮵��ѹǷѹ����ϳ�Ƿѹ���ٷֱ�0��﮵��ѹ�͵磬��ϳɵ͵磬�ٷֱȰ���ѹֵ��ʾ0-20�� ���򣬺ϳ�=ʹ��ʱ��ʣ�࣬�ϳ�С��20�ж�Ϊ�͵磬20-100Ϊ����*/
-	
-	if(__SYS_STATUS_BYTES_GET(power_state) ==RESET)
-		LithBatUseTimeCalculate(&bat_para_g);
-	
-	if(bat_para_g.lith_bat_used_hour >= bat_para_g.lith_bat_max_hour){
-		pwr_vol_p->lith_remain_use_time_per = 0;
-	}else{
-		pwr_vol_p->lith_remain_use_time_per = 100*(bat_para_g.lith_bat_max_hour - bat_para_g.lith_bat_used_hour)/bat_para_g.lith_bat_max_hour;		
-	}
-	
-	if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
-		__SYS_STATUS_ALARM_BYTES_SET(lith_down, ALARM_ID_LITH_BAT_DOWN);
-		__SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW);
-		pwr_vol_p->lith_synthesize_per = 0;
-	}else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
-		__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
-		__SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW);
-		pwr_vol_p->lith_synthesize_per = pwr_vol_p->alka_vcc_per;
-	}else{
-		pwr_vol_p->lith_synthesize_per = (pwr_vol_p->lith_remain_use_time_per ==100)? 100:pwr_vol_p->lith_remain_use_time_per + 1;  //Ϊ��100%�ܹ�ά��һ��ʱ�䣬��ѹ����״̬ʱ�ٷֱȲ���Ϊ0��Ϊ0��Ҫ��ʾ���ˣ�����1������ѹ״̬��ΪǷѹ
-		
-		if(pwr_vol_p->lith_synthesize_per < 20){
-			__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
-			__SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW);
-		}else{
-			__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
-			__SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW);
-		}
-		
-	}
-	/*���ؿ��ܸ���ʹ�ô�����������ʱ�䣬����״̬�жϷ�ʽ��������ʱ��ֻ�Ǹ��ݵ�ѹֵ*/
-	if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
-		__SYS_STATUS_ALARM_BYTES_SET(alka_down, ALARM_ID_ALKA_BAT_DOWN);
-		__SYS_STATUS_ALARM_BYTES_SET(alka_low, ALARM_ID_ALKA_BAT_LOW);
-	}else if(pwr_vol_p->alka_vcc_status == BAT_V_LOW){
-		__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
-		__SYS_STATUS_ALARM_BYTES_SET(alka_low, ALARM_ID_ALKA_BAT_LOW);
-	}else{
-		__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
-		__SYS_STATUS_BYTES_STATUS(alka_low, RESET, ALARM_ID_ALKA_BAT_LOW);
-	}
-
-	
-	/****���ʵʱ���,�������ӳ٣�����Ƴ�Ҫ˲���л��ص�ع���******/
-	EX_Pwr_GPIO_Clk_Init();
-	if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
-		if((pwr_vol_p->ex_pwr_out_cnt!=0)&&(pwr_vol_p->ex_pwr_out_cnt!=EX_PWR_CONTINUE_TIME)){  
-			//������;״̬�ı䣬���ܴ�����粻�ȶ���Ƶ�������򱨾�
-		}
-		pwr_vol_p->ex_pwr_out_cnt = 0;  
-		if(pwr_vol_p->ex_pwr_in_cnt < EX_PWR_CONTINUE_TIME )
-			pwr_vol_p->ex_pwr_in_cnt++;
-		
-		if(pwr_vol_p->ex_pwr_in_cnt >=EX_PWR_CONTINUE_TIME){
-			if(__SYS_STATUS_BYTES_GET(power_state) != SET){
-				EX_PWR_ON;
-				__SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL);
-				//������֮�������Ƴ��жϣ�����Ƴ�Ҫ�����л���ع���
-				GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, ENABLE);
-				
-				up_comm_uart_enable();//���ʱʹ����λ������
-				
-				//?������仯����
-			}
-		}
-	}else
-	{
-		GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, DISABLE);
-		EX_PWR_OFF;
-		__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
-		
-//		if((pwr_vol_p->ex_pwr_in_cnt!=0)&&(pwr_vol_p->ex_pwr_in_cnt!=EX_PWR_CONTINUE_TIME)){  
-//			//������;״̬�ı䣬���ܴ�����粻�ȶ���Ƶ�������򱨾�
-//		}
-//		pwr_vol_p->ex_pwr_in_cnt = 0;
-//		if(pwr_vol_p->ex_pwr_out_cnt < EX_PWR_CONTINUE_TIME )
-//			pwr_vol_p->ex_pwr_out_cnt++;
-//		
-//		if(pwr_vol_p->ex_pwr_out_cnt >=EX_PWR_CONTINUE_TIME){
-//			if(__SYS_STATUS_BYTES_GET(power_state) != RESET){
-//				EX_PWR_OFF;
-//				__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
-//				//?������仯����
-//			}
-//		}
-	}
-	
-	
-}
-
-
-//�����������Դ�����ʼ���� �״�����жϣ��״ε�ص�ѹ�ɼ�
-void PowerManagrInit(void)
-{
-	pwr_vol_g.lith_vcc = Get_Lith_Bat_Voltage();//﮵���
-	if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_under_v*0.1){
-		__SYS_STATUS_BYTES_STATUS(lith_down, SET, ALARM_ID_LITH_BAT_DOWN);
-		__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
-	}else if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_low_v*0.1){
-		__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
-		__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
-	}else{
-		__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
-		__SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW);
-	}
-	
-//	pwr_vol_g.alka_vcc = Get_Alka_Bat_Voltage();//�����
-//	if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_under_v*0.1){
-//		__SYS_STATUS_BYTES_STATUS(alka_down, SET, ALARM_ID_ALKA_BAT_DOWN);
-//		__SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW);
-//	}else if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_low_v*0.1){
-//		__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
-//		__SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW);
-//	}else{
-//		__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
-//		__SYS_STATUS_BYTES_STATUS(alka_low, RESET, ALARM_ID_ALKA_BAT_LOW);
-//	}
-	
-	//�����,HWID0������
-	EX_Pwr_GPIO_Clk_Init();
-	if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
-		delay_ms(10);
-		if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
-			EX_PWR_ON;
-			__SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL);
-		}else{
-			EX_PWR_OFF;
-		__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
-		}
-	}else{
-		EX_PWR_OFF;
-		__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
-	}
-	
-	
+  /*Զ��������*/
+  if ((gprs_soft_para_g.gprs_state != GPRS_IDLE) && (gprs_soft_para_g.gprs_state != GPRS_RESTART))
+  {
+    if (__SYS_STATUS_BYTES_GET(lith_under) || __SYS_STATUS_BYTES_GET(lith_remove))
+    {
+      __SYS_DELAY_SEC_TIME_SET_(gprs_timeout_para, 0); // ��ʱʱ�����㣬��������ʱflag
+      gprs_soft_para_g.gprs_state = GPRS_CLOSE_PWR;    // �ر�GPRS��Դ
+      __SYS_DELAY_SEC_TIME_SET_(gprs_delay_para, 1);
+    }
+  }
+  /*���ڲɼ���ѹ*/
+  Power_PeriodTimeSet(pwr_vol_p, &sys_admin_g.sys_admin.state_bytes);
+  if (LargeCurrent_LimitingProcess() == 3)
+  {
+    if (pwr_vol_p->alka_flag != AMS_NONE) // �ɼ����
+    {
+      pwr_vol_p->alka_vcc = Get_Alka_Bat_Voltage();
+      sys_realtime_data_g.state_para_s.alka_vcc = pwr_vol_p->alka_vcc * 10;
+#ifdef RS232_PRINTF
+      printf("alka vcc = %.2f \r\n", pwr_vol_p->alka_vcc);
+#endif
+      Alka_Bat_Voltage_Status(pwr_vol_p->alka_vcc); // ��Դ����״̬�ж�
+      if ((pwr_vol_p->alka_flag == AMS_GPRS_BEFORE) && (pwr_vol_p->alka_vcc >= 4.5f))
+        gprs_soft_para_g.gprs_state = GPRS_OPEN_PWR;
+      else if (pwr_vol_p->alka_flag == AMS_GPRS_BEFORE)
+        sys_mode_conversion_show_g = ERROR_1;
+      pwr_vol_p->alka_flag = AMS_NONE;
+    }
+    if (pwr_vol_p->lith_flag != LMS_NONE) // �ɼ�﮵�
+    {
+      pwr_vol_p->lith_vcc = Get_Lith_Bat_Voltage();
+      sys_realtime_data_g.state_para_s.lith_vcc = pwr_vol_p->lith_vcc * 10; // float���ͷŴ�ʮ�����u8����
+#ifdef RS232_PRINTF
+      printf("lith vcc = %.2f \r\n", pwr_vol_p->lith_vcc);
+#endif
+      Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc, &pwr_vol_p->lith_vcc_per); // ��Դ����״̬�ж�
+#ifdef CAL_TEST
+      Sys_BST_LithStatus(pwr_vol_p->lith_vcc);
+#endif
+      if ((pwr_vol_p->lith_flag == LMS_OPEN_VALVE_BEFORE) && (pwr_vol_p->lith_vcc >= 2.9f))
+        sys_valve_ctl_id_g = V_KEY_OP;
+      else if (pwr_vol_p->lith_flag == LMS_OPEN_VALVE_BEFORE)
+        sys_mode_conversion_show_g = ERROR_1;
+      pwr_vol_p->lith_flag = LMS_NONE;
+    }
+    if (pwr_vol_p->mcu_temp_flag == SET) // �ɼ�MCU�¶�
+    {
+      pwr_vol_p->mcu_temp_flag = RESET;
+      sys_realtime_data_g.state_para_s.cpu_temperature = pwr_vol_p->mcu_temperature = Get_Mcu_Temp();
+      Mcu_TempStateAlarmHandler(pwr_vol_p->mcu_temperature, &sys_temp_alarm_cfg_g);
+    }
+  }
+  Remaining_WorkingTime_CalculateProcess(pwr_vol_p->lith_vcc_per, pwr_vol_p->lith_vcc);
 }

--
Gitblit v1.9.3