Browse Source

[ups_monitor] fix alarm led work

balbekova 5 years ago
parent
commit
164eb2eb59
1 changed files with 91 additions and 50 deletions
  1. 91 50
      modules/monitor/ups_monitor.c

+ 91 - 50
modules/monitor/ups_monitor.c

@@ -31,6 +31,7 @@
 
 bool flCriticalAlarm = false;
 bool flNonCriticalAlarm = false;
+bool flLedAlarm = false;
 
 /**
   * @brief  Общая структура настроек
@@ -49,13 +50,14 @@ void UPS_Monitor(void *params)
   {
 		flCriticalAlarm = false;
 	  flNonCriticalAlarm = false;
+    flLedAlarm = false;
 
 #define XMONITOR(monitor_func, present) if (present) { monitor_func(); }
         MONITOR_TABLE
 #undef XMONITOR
 
 #ifdef LED_ALARM
-      if(flCriticalAlarm){
+      if(flLedAlarm){
     	  if (UPS.Present)
     		  LED_On(LED_ALARM);
     	  else
@@ -104,9 +106,10 @@ void UPS_DI0Monitor(void)
       continue;
     }
 
-    /*if (DI0StateCurrent)
-      flCriticalAlarm = true;*/
-
+    if (DI0StateCurrent) {
+      flLedAlarm = true;
+    }
+      
     // Значение параметра изменилось
     if (DI0StateCurrent != DI0OldState[i])
     {
@@ -398,10 +401,11 @@ void UPS_LineFailMonitor(void)
     return;
   }
 
-
-  if (lineFailCurrent)
-	  flCriticalAlarm = true;
-    
+  if (lineFailCurrent){
+    flCriticalAlarm = true;
+    flLedAlarm = true;
+  }
+	  
   // Значение параметра изменилось
   if (lineFailCurrent != lineFailOldState)
   {
@@ -472,7 +476,6 @@ void UPS_VACoutputLowRangeMonitor(void)
   /* Отслеживается переход через нижнию границу */
   if (VACoutputCurrent < sSettings.sAlarmManager.ac_output_range.low)
   {
-	    flCriticalAlarm = true;
       if (stateCurrentVACoutput == HYST_IDLE)
 	    {
           UPS.Alarm |= (1 << 7);
@@ -505,6 +508,9 @@ void UPS_VACoutputLowRangeMonitor(void)
 	 // SNMP_SendUserTrap(POWER_NORM);
 	        flUpdateLog = true;
 	    }
+  } 
+  if (UPS.Alarm & 0x80) {
+    flLedAlarm = true;
   }
 #if	defined HARDWARE_BT6707
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
@@ -539,7 +545,6 @@ void UPS_VACoutputHighRangeMonitor(void)
   /* Отслеживается переход через верхнюю границу */
   if (VACoutputCurrent > sSettings.sAlarmManager.ac_output_range.high)
   {
-	    flCriticalAlarm = true;
       if (stateCurrentVACoutput == HYST_IDLE) {
           UPS.Alarm |= (1 << 7);
           stateCurrentVACoutput = HYST_UP;
@@ -571,6 +576,9 @@ void UPS_VACoutputHighRangeMonitor(void)
 	        flUpdateLog = true;
 	    }
   }
+  if (UPS.Alarm & 0x80) {
+    flLedAlarm = true;
+  }
 #if	defined HARDWARE_BT6707
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   	  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
@@ -667,12 +675,14 @@ void UPS_LowBatMonitor(void)
   if(!flag_alarm_time){
 	  if (lowBatCurrent){
 		  flNonCriticalAlarm = true;
+      flLedAlarm = true;
 	  }
 	  lowBatOldState = lowBatCurrent;
   }
   else{
 	  if (lowBatOldState){
 		  flNonCriticalAlarm = true;
+      flLedAlarm = true;
 	  }
   }
 #endif
@@ -692,8 +702,7 @@ void UPS_PowerMonitor(void)
   /* Отслеживается переход через верхнюю границу */
   if (load > sSettings.sAlarmManager.load_range.high)
   {
-	flCriticalAlarm = true;
-	UPS.Alarm = (UPS.Alarm & 0xfffffffe) | (1 << 0);
+	  UPS.Alarm = (UPS.Alarm & 0xfffffffe) | (1 << 0);
     if (stateCurrent == HYST_IDLE)
 	{
 #ifdef LED_RED_MINOR
@@ -714,7 +723,7 @@ void UPS_PowerMonitor(void)
   else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
   {
 	UPS.Alarm = (UPS.Alarm & 0xfffffffe);
-    if (stateCurrent == HYST_UP)
+  if (stateCurrent == HYST_UP)
 	{
 #ifdef LED_RED_MINOR
     	LED_Off(LED_RED_MINOR);
@@ -730,6 +739,11 @@ void UPS_PowerMonitor(void)
 	  flUpdateLog = true;
 	}
   }
+
+  if (UPS.Alarm & 0x00000001) {
+    flCriticalAlarm = true;
+    flLedAlarm = true;
+  }
 #endif
 }
 
@@ -747,17 +761,19 @@ void UPS_TemperatureHighRangeMonitor(void)
   if(temperature == 85) {
     UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
     return;
+  } else {
+    if (stateCurrent == HYST_IDLE) {
+      UPS.Alarm = (UPS.Alarm & 0xfffffffd);
+    }
   }
 
   /* Отслеживается переход через верхнюю границу */
   if (temperature > sSettings.sAlarmManager.Temprature_range.high)
   {
-	flCriticalAlarm = true;
-	UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
     if (stateCurrent == HYST_IDLE)
-	{
-	  stateCurrent = HYST_UP;
-      
+	  {
+	    stateCurrent = HYST_UP;
+      UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
 
 	  log_event_data(LOG_ALARM_HIGH_TEMP, "Авария");
 	  // Отправка трапа о завышении 
@@ -768,16 +784,19 @@ void UPS_TemperatureHighRangeMonitor(void)
   /* Отслеживается нормализация */
   else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
   {
-	  UPS.Alarm = (UPS.Alarm & 0xfffffffd);
     if (stateCurrent == HYST_UP)
-	{
-	  stateCurrent = HYST_IDLE;
-      
-	  log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
+	  {
+	    stateCurrent = HYST_IDLE;
+      UPS.Alarm = (UPS.Alarm & 0xfffffffd);
+	    log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
 	  // Отправка трапа о нормализации 
-	  SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
-	  flUpdateLog = true;
-	}
+	    SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
+	    flUpdateLog = true;
+	  }
+  }
+  if (UPS.Alarm & 0x00000002) {
+    flCriticalAlarm = true;
+    flLedAlarm = true;
   }
 }
 
@@ -794,17 +813,19 @@ void UPS_TemperatureLowRangeMonitor(void)
   if(temperature == 85) {
     UPS.Alarm = (UPS.Alarm & 0xfffffeff) | (1 << 8);
     return;
+  } else {
+    if (stateCurrent == HYST_IDLE) {
+      UPS.Alarm = (UPS.Alarm & 0xfffffeff);
+    }
   }
 
   /* Отслеживается переход через нипжнюю границу */
   if (temperature < sSettings.sAlarmManager.Temprature_range.low)
   {
-	flCriticalAlarm = true;
-	UPS.Alarm = (UPS.Alarm & 0xfffffeff) | (1 << 8);
     if (stateCurrent == HYST_IDLE)
 	{
 	  stateCurrent = HYST_DOWN;
-
+    UPS.Alarm = (UPS.Alarm & 0xfffffeff) | (1 << 8);
 
 	  log_event_data(LOG_ALARM_LOW_TEMP, "Авария");
 	  // Отправка трапа о занижении
@@ -815,17 +836,20 @@ void UPS_TemperatureLowRangeMonitor(void)
   /* Отслеживается нормализация */
   else if (temperature > (sSettings.sAlarmManager.Temprature_range.low + sSettings.sAlarmManager.Temprature_range.hyst))
   {
-	  UPS.Alarm = (UPS.Alarm & 0xfffffeff);
     if (stateCurrent == HYST_DOWN)
 	{
 	  stateCurrent = HYST_IDLE;
-
+    UPS.Alarm = (UPS.Alarm & 0xfffffeff);
 	  log_event_data(LOG_ALARM_LOW_TEMP, "Норма");
 	  // Отправка трапа о нормализации
 	  SNMP_SendUserTrap(BATTERY_LOW_TEMPERATURE_NORM);
 	  flUpdateLog = true;
 	}
   }
+  if (UPS.Alarm & 0x00000100) {
+    flCriticalAlarm = true;
+    flLedAlarm = true;
+  }
 }
 #endif
 
@@ -843,15 +867,19 @@ void Cabinet_TemperatureHighRangeMonitor(void)
   if(temperature == 85) {
     UPS.Alarm = (UPS.Alarm & 0xfffffdff) | (1 << 9);
     return;
+  } else {
+    if (stateCurrent == HYST_IDLE) {
+      UPS.Alarm = (UPS.Alarm & 0xfffffdff);
+    }
   }
   /* Отслеживается переход через верхнюю границу */
   if (temperature > sSettings.sAlarmManager.Temprature_cabinet_range.high)
   {
-	flCriticalAlarm = true;
-	UPS.Alarm = (UPS.Alarm & 0xfffffdff) | (1 << 9);
+	
     if (stateCurrent == HYST_IDLE)
-	{
-	  stateCurrent = HYST_UP;
+	  {
+      UPS.Alarm = (UPS.Alarm & 0xfffffdff) | (1 << 9);
+	    stateCurrent = HYST_UP;
       
 
 	  log_event_data(LOG_ALARM_HIGH_CABINET_TEMP, "Авария");
@@ -863,10 +891,10 @@ void Cabinet_TemperatureHighRangeMonitor(void)
   /* Отслеживается нормализация */
   else if (temperature < (sSettings.sAlarmManager.Temprature_cabinet_range.high - sSettings.sAlarmManager.Temprature_cabinet_range.hyst))
   {
-	  UPS.Alarm = (UPS.Alarm & 0xfffffdff);
     if (stateCurrent == HYST_UP)
-	{
-	  stateCurrent = HYST_IDLE;
+	  {
+      UPS.Alarm = (UPS.Alarm & 0xfffffdff);
+	    stateCurrent = HYST_IDLE;
       
 	  log_event_data(LOG_ALARM_HIGH_CABINET_TEMP, "Норма");
 	  // Отправка трапа о нормализации 
@@ -874,6 +902,9 @@ void Cabinet_TemperatureHighRangeMonitor(void)
 	  flUpdateLog = true;
 	}
   }
+  if (UPS.Alarm & 0x00000200) {
+    flLedAlarm = true;
+  }
 }
 
 /**
@@ -889,17 +920,19 @@ void Cabinet_TemperatureLowRangeMonitor(void)
   if(temperature == 85) {
     UPS.Alarm = (UPS.Alarm & 0xfffffbff) | (1 << 10);
     return;
+  } else {
+    if (stateCurrent == HYST_IDLE) {
+      UPS.Alarm = (UPS.Alarm & 0xfffffbff);
+    }
   }
 
   /* Отслеживается переход через нипжнюю границу */
   if (temperature < sSettings.sAlarmManager.Temprature_cabinet_range.low)
   {
-	flCriticalAlarm = true;
-	UPS.Alarm = (UPS.Alarm & 0xfffffbff) | (1 << 10);
     if (stateCurrent == HYST_IDLE)
-	{
-	  stateCurrent = HYST_DOWN;
-
+	  {
+	    stateCurrent = HYST_DOWN;
+      UPS.Alarm = (UPS.Alarm & 0xfffffbff) | (1 << 10);
 
 	  log_event_data(LOG_ALARM_LOW_CABINET_TEMP, "Авария");
 	  // Отправка трапа о занижении
@@ -910,10 +943,10 @@ void Cabinet_TemperatureLowRangeMonitor(void)
   /* Отслеживается нормализация */
   else if (temperature > (sSettings.sAlarmManager.Temprature_cabinet_range.low + sSettings.sAlarmManager.Temprature_cabinet_range.hyst))
   {
-	  UPS.Alarm = (UPS.Alarm & 0xfffffbff);
     if (stateCurrent == HYST_DOWN)
-	{
-	  stateCurrent = HYST_IDLE;
+	  {
+      UPS.Alarm = (UPS.Alarm & 0xfffffbff);
+	    stateCurrent = HYST_IDLE;
 
 	  log_event_data(LOG_ALARM_LOW_CABINET_TEMP, "Норма");
 	  // Отправка трапа о нормализации
@@ -921,6 +954,9 @@ void Cabinet_TemperatureLowRangeMonitor(void)
 	  flUpdateLog = true;
 	}
   }
+  if (UPS.Alarm & 0x00000400) {
+    flLedAlarm = true;
+  }
 }
 #endif
 
@@ -953,8 +989,10 @@ void UPS_ConnectMonitor(void)
     }
     return;
   }
-  if (!connectCurrent)
-  	  flCriticalAlarm = true;
+  if (!connectCurrent){
+    flCriticalAlarm = true;
+    flLedAlarm = true;
+  }
   // Значение параметра изменилось
   if (connectCurrent != connectOldState)
   {
@@ -1063,13 +1101,15 @@ void UPS_BatteryConnectMonitor(void)
 
   if(!flag_alarm_time){
 	  if (AKBconnectCurrent){
-		  flCriticalAlarm = true;
+      flCriticalAlarm = true;
+      flLedAlarm = true;
 	  }
 	  AKBconnectOldState = AKBconnectCurrent;
   }
   else{
 	  if (AKBconnectOldState){
-		  flCriticalAlarm = true;
+      flCriticalAlarm = true;
+      flLedAlarm = true;
 	  }
   }
 #endif
@@ -1093,6 +1133,7 @@ void AKB_Change_Monitor(void)
     UPS.Alarm |= (1 << 6);
     curr_status_change_akb = 1;
     flCriticalAlarm = true;
+    flLedAlarm = true;
   }
   else {
     UPS.Alarm &= 0xffffffbf;