Browse Source

添加led和beep触发代码

guohui 1 year ago
parent
commit
38c681f575
4 changed files with 124 additions and 5 deletions
  1. 103 1
      pro/src/sqlite_handle.c
  2. 1 1
      pro/src/sys.c
  3. 9 2
      pro/ui/beep.c
  4. 11 1
      pro/ui/led.c

+ 103 - 1
pro/src/sqlite_handle.c

@@ -9,10 +9,14 @@
 #include "mqtt.h"
 #include "file.h"
 #include "sys.h"
+#include "led.h"
+#include "beep.h"
 #include "switch_ctrl.h"
 #include "pduMIB_trap.h"
 
 #define	TOTAL_COUNT	60//统计总数
+#define LIMIT_HOF(x)  (x*1.1f)
+#define LIMIT_LOF(x)  (x*0.9f)
 
 enum{
     DB_MIN=0,
@@ -34,7 +38,11 @@ static int utc_to_time(uint32_t *utc, char *time)
 {
     return 0;
 }
-
+static void set_led_beep(int led_mode, int beep_mode)
+{
+    led_set(led_mode);
+    beep_set(beep_mode);
+}
 
 
 static int get_count(sqlite3 *db, char *table)
@@ -3872,6 +3880,8 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
     struct tm *t;
     char CtrlData[64];
     int alarm_action=-1;
+    int limit_flag=0;
+    GlobalPowerManger *pwr=__globalPowerTemp;
 
     memset(CtrlData, 0, sizeof(CtrlData));
     switch (_AlarmType)
@@ -3881,6 +3891,9 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         alarm_action = __globalPowerTemp->global_over_manager.product_vol_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.voltage>LIMIT_HOF(pwr->global_over_manager.product_vol_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
         break;
     case WARNING_V_DOWN:
@@ -3888,6 +3901,9 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         alarm_action = __globalPowerTemp->global_over_manager.product_vol_over_lower_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Down[languagesID],CtrlData);
+        if(pwr->_PowerInfo.voltage<LIMIT_LOF(pwr->global_over_manager.product_vol_lower_threshold)) {
+            limit_flag = 1;
+        }
     }
         break;
     case WARNING_A_UP:
@@ -3895,6 +3911,9 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         alarm_action = __globalPowerTemp->global_over_manager.product_cur_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_A[languagesID],language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.current>LIMIT_HOF(pwr->global_over_manager.product_cur_upper_threshold)) {
+            limit_flag = 1;
+        }
     }        
         break;
     case WARNING_W_UP:
@@ -3902,6 +3921,9 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         alarm_action = __globalPowerTemp->global_over_manager.product_pwr_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_W[languagesID],language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.consumption>LIMIT_HOF(pwr->global_over_manager.product_pwrcon_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
         break;
     case WARNING_P_UP:
@@ -3909,6 +3931,9 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         alarm_action = __globalPowerTemp->global_over_manager.product_pwrcon_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_P[languagesID],language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.power>LIMIT_HOF(pwr->global_over_manager.product_pwr_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case 0:
@@ -3957,6 +3982,12 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
     send_pduPowerAlarm_trap(1, (void *)&pAlarmTrapinfo);
     // if(_globalSNMPManager.trapmode==1)snmp_alarm_register(1,SA_REPEAT,send_pduPowerAlarm_trap,(void *)&pAlarmTrapinfo);
     
+    if(limit_flag) {
+        set_led_beep(LED_MODE_WARN2, BEEP_MODE_WARN2);
+    }
+    else {
+        set_led_beep(LED_MODE_WARN1, BEEP_MODE_WARN1);
+    }
     
     //只管理总体电源阈值超限动作防护
     int ret = -1 ;
@@ -4008,6 +4039,8 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
     struct tm *t;
     char CtrlData[64];
     int alarm_action=-1;
+    int limit_flag=0;
+    GlobalTreeACManager *pwr=__globalPowerTemp;
 
     memset(CtrlData,0,sizeof(CtrlData));
     switch (_AlarmType)
@@ -4017,6 +4050,9 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
         alarm_action = __globalPowerTemp->global_over_manager.product_vol_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText, "$通道$|CH%d%c |$%s$|$%s$| %s", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.voltage>LIMIT_HOF(pwr->global_over_manager.product_vol_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case ENABLE_TAC_V_DOWN:
@@ -4024,6 +4060,9 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
         alarm_action = __globalPowerTemp->global_over_manager.product_vol_over_lower_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText, "$通道$|CH%d%c |$%s$|$%s$| %s", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Down[languagesID],CtrlData);
+        if(pwr->_PowerInfo.voltage<LIMIT_LOF(pwr->global_over_manager.product_vol_lower_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case ENABLE_TAC_A_UP:
@@ -4031,6 +4070,9 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
         alarm_action = __globalPowerTemp->global_over_manager.product_cur_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText, "$通道$|CH%d%c |$%s$|$%s$| %s", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_A[languagesID], language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.current>LIMIT_HOF(pwr->global_over_manager.product_cur_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case ENABLE_TAC_W_UP:
@@ -4038,6 +4080,9 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
         alarm_action = __globalPowerTemp->global_over_manager.product_pwr_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText, "$通道$|CH%d%c |$%s$|$%s$| %s", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_W[languagesID], language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.consumption>LIMIT_HOF(pwr->global_over_manager.product_pwrcon_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case ENABLE_TAC_P_UP:
@@ -4045,6 +4090,9 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
         alarm_action = __globalPowerTemp->global_over_manager.product_pwrcon_over_upper_threshold_ctrl;
         get_message_CtrlType(alarm_action,CtrlData);
         sprintf(AlarmText, "$通道$|CH%d%c |$%s$|$%s$| %s", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_P[languagesID], language_alarm_Up[languagesID],CtrlData);
+        if(pwr->_PowerInfo.power>LIMIT_HOF(pwr->global_over_manager.product_pwr_upper_threshold)) {
+            limit_flag = 1;
+        }
     }
     break;
     case ENABLE_TAC_STIME:
@@ -4093,6 +4141,14 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeAC
     if (_globalSNMPManager.trapmode == 1)
     send_pduPowerAlarm_trap(1, (void *)&pAlarmTrapinfo);
     // if(_globalSNMPManager.trapmode==1)snmp_alarm_register(1,SA_REPEAT,send_pduPowerAlarm_trap,(void *)&pAlarmTrapinfo);
+
+    if(limit_flag) {
+        set_led_beep(LED_MODE_WARN2, BEEP_MODE_WARN2);
+    }
+    else {
+        set_led_beep(LED_MODE_WARN1, BEEP_MODE_WARN1);
+    }
+
     return 0;
 }
 /**
@@ -4111,6 +4167,9 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
     char AlarmText[256];
     int languagesID=0;
     struct tm* t ;
+    int limit_flag=0;
+    GlobalSensorManger *ss=__globalPowerTemp;
+
     if (!__globalPowerTemp)
     {
         return -1;
@@ -4124,15 +4183,27 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         {
         case SENSOR_VAL1_UPPER:
             sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val1>LIMIT_HOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL1_LOWER:
             sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val1<LIMIT_LOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL2_UPPER:
             sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val2>LIMIT_HOF(ss->over_manager.sensor_val2_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL2_LOWER:
             sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val2<LIMIT_LOF(ss->over_manager.sensor_val2_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         default:
             sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_NULL_ERROR[languagesID]);
@@ -4147,9 +4218,15 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         {
         case SENSOR_VAL1_UPPER:
             sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val1>LIMIT_HOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL1_LOWER:
             sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val1<LIMIT_LOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         }
     }
@@ -4161,15 +4238,27 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         {
         case SENSOR_VAL1_UPPER:
             sprintf(AlarmText, "%s |$温度$|1|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val1>LIMIT_HOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL1_LOWER:
             sprintf(AlarmText, "%s |$温度$|1|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val1<LIMIT_LOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL2_UPPER:
             sprintf(AlarmText, "%s |$温度$|2|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val2>LIMIT_HOF(ss->over_manager.sensor_val2_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL2_LOWER:
             sprintf(AlarmText, "%s |$温度$|2|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val2<LIMIT_LOF(ss->over_manager.sensor_val2_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         default:
             sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_NULL_ERROR[languagesID]);
@@ -4183,9 +4272,15 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         {
         case SENSOR_VAL1_UPPER:
             sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            if(ss->Cur_sensor_info.val1>LIMIT_HOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         case SENSOR_VAL1_LOWER:
             sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            if(ss->Cur_sensor_info.val1<LIMIT_LOF(ss->over_manager.sensor_val1_upper_threshold)) {
+                limit_flag = 1;
+            }
             break;
         default:
             sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_NULL_ERROR[languagesID]);
@@ -4225,6 +4320,13 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,Global
         send_pduSensorAlarm_trap(1, (void *)&pAlarmTrapinfo);
     // if(_globalSNMPManager.trapmode==1)snmp_alarm_register(1,SA_REPEAT,send_pduSensorAlarm_trap,(void *)&pAlarmTrapinfo);
 
+    if(limit_flag) {
+        set_led_beep(LED_MODE_WARN2, BEEP_MODE_WARN2);
+    }
+    else {
+        set_led_beep(LED_MODE_WARN1, BEEP_MODE_WARN1);
+    }
+
     return 0;
 }
 int dev_Alarm_Run_message(GlobalDeviceManager* globalDeviceManger, const char* strRunMSG, const char *strOther)

+ 1 - 1
pro/src/sys.c

@@ -1534,7 +1534,7 @@ int sys_init(void)
     sys_chmod();
     init_hash_table();
     
-    //ui_init();
+    ui_init();
     net_init();
     thread_start(THREAD_ID_POLLING, polling_thread, NULL);
 

+ 9 - 2
pro/ui/beep.c

@@ -38,6 +38,7 @@ typedef struct {
     int             tmr;
     uint32_t        cnt;
     beep_para_t     para;
+    int             mode;
     int             stop_level;
 }beep_handle_t;
 static beep_handle_t bpHandle={0};
@@ -71,7 +72,7 @@ int beep_init(void)
     h->io = gpio_init(BEEP_GPIO, GPIO_OUT);
     h->tmr = timer_init();
     gpio_set(h->io, BEEP_OFF_LEVEL);
-    h->tmr = -1;
+    h->mode = -1;
 
     //beep_set(BEEP_MODE_FATAL);
     return 0;
@@ -95,7 +96,8 @@ int beep_set(int mode)
 {
     beep_handle_t *h=&bpHandle;
     
-    return beep_set_ex(&beep_para[mode]);
+    h->mode = mode;
+    return beep_set_ex(&beep_para[h->mode]);
 }
 
 
@@ -138,6 +140,11 @@ int beep_reset(void)
 {
     beep_handle_t *h=&bpHandle;
 
+    if(h->mode==-1) {
+        return -1;
+    }
+
+    h->mode = -1;
     timer_stop(h->tmr);
     gpio_set(h->io, BEEP_OFF_LEVEL);
     return 0;

+ 11 - 1
pro/ui/led.c

@@ -34,6 +34,7 @@ typedef struct {
 }led_data_t;
 typedef struct {
     int         tmr;
+    int         mode;
     led_data_t  data[LED_ID_MAX];
 }led_handle_t;
 
@@ -99,6 +100,7 @@ int led_init(void)
         h->data[i].io = gpio_init(led_info[i].gpio, GPIO_OUT);
         gpio_set(h->data[i].io, led_info[i].off_level);
     }
+    h->mode = -1;
     
     //led_set(LED_MODE_UPGRADING);
     
@@ -122,7 +124,10 @@ int led_deinit(void)
 
 int led_set(int mode)
 {
-    return led_set_ex(&led_para[mode]);
+    led_handle_t *h=&ledHandle;
+
+    h->mode = mode;
+    return led_set_ex(&led_para[h->mode]);
 }
 
 
@@ -166,6 +171,11 @@ int led_reset(void)
 {
     led_handle_t *h=&ledHandle;
 
+    if(h->mode==-1) {
+        return -1;
+    }
+
+    h->mode = -1;
     timer_stop(h->tmr);
     gpio_set(h->data[LED_ID_RED].io, led_info[LED_ID_RED].off_level);
     return 0;