Bläddra i källkod

[megatec]1. add new cmd ups_bypass_volt_range, ups_bypass_hvolt_264_set
2. BT-6711_v1 change model (SN)

balbekova 2 år sedan
förälder
incheckning
c2268d924d
2 ändrade filer med 80 tillägg och 5 borttagningar
  1. 77 5
      modules/MegaTec/megatec.c
  2. 3 0
      modules/MegaTec/megatec.h

+ 77 - 5
modules/MegaTec/megatec.c

@@ -93,10 +93,12 @@ const char *MegaTecCMD[] = {
     "QMOD\r",
     "SON\r",
     "QWS\r",
+    "QBYV\r",
+    "PHV264\r",//264
 };
 
 extern bool flUpdateLog;
-
+static bool flag_WPHVR2K0L = false;
 
 void init_UPS_value(void)
 {
@@ -604,7 +606,22 @@ void ups_model_response(char *data)
             }
         }
         if(strncmp(value, "WPHV", 4) == 0 || strncmp(value, "G2", 2) == 0 || value[0] == 0) {
-            strcpy(UPS.model, "RTMP-II");
+#if HARDWARE_BT6711_V1
+            if(UPS.serial[0] == 0) {
+                return;
+            }
+            if(strncmp(value, "WPHVR2K0L", 9) == 0) {
+                strcpy(UPS.model, "RTMP-II v1rih");
+                flag_WPHVR2K0L = true;
+            } else if(strncmp(UPS.serial, "83122103100051", 14) == 0) {
+                strcpy(UPS.model, "RTMP-II v0hi v1");
+                //flag_WPHVR2K0L = true;
+            }
+            else
+#endif
+            {
+                strcpy(UPS.model, "RTMP-II");
+            }
         } else {
 #ifdef HARDWARE_BT6709
             if(UPS.serial[0] == 0) {
@@ -627,6 +644,23 @@ void ups_model_response(char *data)
                 strncpy(UPS.model, value, len);
             }
         }
+ #if HARDWARE_BT6711_V1       
+        if(UPS.serial[0] == 0) {
+            memset(UPS.model, 0, sizeof(UPS.model));
+            return;
+        }
+        if(strncmp(UPS.serial, "83122103100051", 14) == 0) {
+            strcpy(UPS.model, "RTMP-II v0hi v1");
+            //flag_WPHVR2K0L = true;
+        } else if (strncmp(UPS.serial, "83122204100", 11) == 0) {
+            char str[15];
+            strncpy(str, &UPS.serial[11], 3);
+            int32_t tmp = atoi(str);
+            if (tmp >= 139 && tmp <= 938) {
+                strcpy(UPS.model, "RTMP-II v0hi v1");
+            } 
+        }
+#endif
         SNMP_SetObjDescr();
         data += (VOLTRONIC_MODEL_LENGTH + 1);
         memset(value, 0, sizeof(value));
@@ -797,21 +831,23 @@ void ups_mode_response(char *data)
     data++;
 
     DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
-#ifdef UPS_MODE_MONITOR
+
     if (UPS.Mode != data[0]) {
         UPS.Mode = data[0]; 
+#ifdef UPS_MODE_MONITOR
         memset(value, 0, sizeof(value));
         GetModeStr(value, &len);
         SNMP_SendUserTrap(UPS_MODE);
         syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
         log_event_data(LOG_UPS_MODE, value);
+#endif 
     }
-#endif    
+   
 }
 
 #define BIT_OFFSET(c, offset) ((c - 0x30) << offset)
 
-char ups_warn_status_response(char *data)
+void ups_warn_status_response(char *data)
 {
     if (data[0] != '(') {
         return;
@@ -826,6 +862,21 @@ char ups_warn_status_response(char *data)
                         + BIT_OFFSET(data[7], 4) + BIT_OFFSET(data[8], 5) + BIT_OFFSET(data[12], 6) + BIT_OFFSET(data[13], 7); 
 }
 
+void ups_bypass_hvolt_set(char *data)
+{
+    UPS.Present = UPS_CONNECTED;
+    UPS.Flag_Present = true;
+    UPS.cnt_err_ups = 0;
+
+    if (strlen(data) != 0) {
+        if (strncmp(data, "(ACK", 4) == 0) {
+            return;
+        }
+    }
+
+    DBG printf("UPS ups_buzzer_cntrl_parser_start: %s\r\n", data);    
+}
+
 void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
 {
     switch (command) {
@@ -871,6 +922,9 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
         case ups_warning_status:
             ups_warn_status_response(ups_pdu.data);
             break;
+        case ups_bypass_hvolt_264_set:
+            ups_bypass_hvolt_set(ups_pdu.data);
+            break;
         default:
             break;
     }
@@ -1054,6 +1108,16 @@ void request_task(void *params)
                     }
                 }
 #endif
+                if (megatec_send) {
+                    memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
+                    megatec_send = false;
+                    UPS.Flag_Present = false;
+                    send_MegaTec_cmd(ups_bypass_hvolt_264_set);
+                    if (ups_megatec_rx_pdu()) {
+                        ups_megatec_process_pdu(ups_bypass_hvolt_264_set);
+                    }
+                    megatec_send = true;
+                }
                 break;
             default:
                 num_req = sizeof(kestar_req);
@@ -1089,6 +1153,7 @@ bool get_sync_data(void)
 void akb_time_work_task(void *params)
 {
     static uint32_t tick_prev = 0;
+    static uint32_t cnt_sec = 0;
     for (;;) {
         if (UPS.Present == UPS_CONNECTED && ((UPS.Status >> 7) & 0x01)) {
             if (tick_prev == 0) {
@@ -1101,6 +1166,13 @@ void akb_time_work_task(void *params)
             tick_prev = 0;
             UPS.akb_work_time = 0;
         }
+        if(flag_WPHVR2K0L) {
+            cnt_sec ++;
+            if (cnt_sec == 3600) {
+                cnt_sec = 0;
+                int res = ups_metac_service_pdu(ups_test_10sec);
+            }
+        }
         vTaskDelay(1000);
     }
 }

+ 3 - 0
modules/MegaTec/megatec.h

@@ -49,6 +49,9 @@ typedef enum{
 	ups_mode_req,
 	ups_remote_turn_on,
 	ups_warning_status,
+	ups_bypass_volt_range,
+	ups_bypass_hvolt_264_set,
+
 
 	MegaTec_cmd_max
 } cmdMegaTecEnums_t;