Browse Source

[megatec]change parser for version, model parameters

balbekova 5 years ago
parent
commit
6aaf6d3816
2 changed files with 34 additions and 14 deletions
  1. 29 12
      modules/MegaTec/megatec.c
  2. 5 2
      modules/MegaTec/megatec.h

+ 29 - 12
modules/MegaTec/megatec.c

@@ -407,7 +407,7 @@ void ups_info_response(char *data)
 
 
     data++;
     data++;
 
 
-    data += 16;
+    data += 16; //пропускаем поле название компании
 
 
     while (data[0] == ' ') {
     while (data[0] == ' ') {
         data ++;
         data ++;
@@ -417,10 +417,10 @@ void ups_info_response(char *data)
         /*endValue = strpbrk(data," ");
         /*endValue = strpbrk(data," ");
         len = endValue - data;*/
         len = endValue - data;*/
         if (UPS.model[0] == 0) {
         if (UPS.model[0] == 0) {
-            strncpy(UPS.model, data, 10);
+            strncpy(UPS.model, data, KSTAR_MODEL_LENGTH);
             SNMP_SetObjDescr();
             SNMP_SetObjDescr();
         } else {
         } else {
-            strncpy(UPS.model, data, 10);
+            strncpy(UPS.model, data, KSTAR_MODEL_LENGTH);
         }
         }
 
 
         data += 11;
         data += 11;
@@ -513,6 +513,7 @@ void ups_akb_info_response(char *data)
 void ups_model_response(char *data)
 void ups_model_response(char *data)
 {
 {
     uint8_t j = 0;
     uint8_t j = 0;
+    char value[20];
     DBG printf("ups_akb_info_response: %s\r\n", data);
     DBG printf("ups_akb_info_response: %s\r\n", data);
     if (data[0] != '(') {
     if (data[0] != '(') {
         return;
         return;
@@ -526,21 +527,32 @@ void ups_model_response(char *data)
 
 
     DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
     DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
 
 
+    memset(value, 0, 20);
     if (UPS.model[0] == 0) {
     if (UPS.model[0] == 0) {
-        for (uint8_t i = 0; i < MODEL_LENGTH; i ++) {
+        for (uint8_t i = 0; i < VOLTRONIC_MODEL_LENGTH; i ++) {
             if (data[i] != '#') {
             if (data[i] != '#') {
-                UPS.model[j] = data[i];
+                value[j] = data[i];
                 j ++;
                 j ++;
             }
             }
         }
         }
+        if(strncmp(value, "WPHV", 4) == 0 || value[0] != 0) {
+            strcpy(UPS.model, "RTMP II");
+        } else {
+            strcpy(UPS.model, value);
+        }
         SNMP_SetObjDescr();
         SNMP_SetObjDescr();
     } else {
     } else {
         j = 0;
         j = 0;
-        for (uint8_t i = 0; i < MODEL_LENGTH; i ++) {
+        for (uint8_t i = 0; i < VOLTRONIC_MODEL_LENGTH; i ++) {
             if (data[i] != '#') {
             if (data[i] != '#') {
-                UPS.model[j] = data[i];
+                value[j] = data[i];
                 j ++;
                 j ++;
             }
             }
+            if(strncmp(value, "WPHV", 4) == 0 || value[0] != 0) {
+                strcpy(UPS.model, "RTMP II");
+            } else {
+                strcpy(UPS.model, value);
+            }
         }
         }
     }
     }
 }
 }
@@ -570,7 +582,10 @@ void ups_version_response(char *data)
     DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
     DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
 
 
     len = get_ups_param(data, "\r", value);
     len = get_ups_param(data, "\r", value);
-    strncpy(UPS.vertion, value, 8);
+    if (len > VOLTRONIC_VERSION_LENGTH) {
+        len = VOLTRONIC_VERSION_LENGTH;
+    }
+    strncpy(UPS.vertion, value, len);
 }
 }
 
 
 void ups_version_part2_response(char *data)
 void ups_version_part2_response(char *data)
@@ -592,7 +607,7 @@ void ups_version_part2_response(char *data)
 
 
     data++;
     data++;
 
 
-    if (UPS.vertion[8] != 0) {
+    if (UPS.vertion[VOLTRONIC_VERSION_LENGTH] != 0) {
         return;
         return;
     }
     }
 
 
@@ -602,8 +617,11 @@ void ups_version_part2_response(char *data)
     data += (len + 1);
     data += (len + 1);
 
 
     len = get_ups_param(data, "\r", value);
     len = get_ups_param(data, "\r", value);
+    if (len > VOLTRONIC_VERSION_LENGTH) {
+        len = VOLTRONIC_VERSION_LENGTH;
+    }
     strncat(UPS.vertion, "/", 1);
     strncat(UPS.vertion, "/", 1);
-    strncpy(&UPS.vertion[9], value, 8);
+    strncat(UPS.vertion, value, len);
 }
 }
 
 
 void ups_serial_response(char *data)
 void ups_serial_response(char *data)
@@ -624,8 +642,7 @@ void ups_serial_response(char *data)
     DBG printf("UPS ups_serial_parser_start: %s\r\n", data);
     DBG printf("UPS ups_serial_parser_start: %s\r\n", data);
 
 
     len = get_ups_param(data, "\r", value);
     len = get_ups_param(data, "\r", value);
-    strncpy(UPS.serial, &value[0], 14);
-    UPS.serial[14] = 0;
+    strncpy(UPS.serial, value, VOLTRONIC_SN_LENGTH);
 }
 }
 
 
 void ups_protocol_id_response(char *data)
 void ups_protocol_id_response(char *data)

+ 5 - 2
modules/MegaTec/megatec.h

@@ -16,7 +16,10 @@
 #define AKB_VOLTAGE			12
 #define AKB_VOLTAGE			12
 #define AKB_NUM_CELL		6
 #define AKB_NUM_CELL		6
 
 
-#define MODEL_LENGTH		15
+#define VOLTRONIC_MODEL_LENGTH		15
+#define KSTAR_MODEL_LENGTH			10
+#define VOLTRONIC_VERSION_LENGTH	10
+#define VOLTRONIC_SN_LENGTH			14
 
 
 typedef enum{
 typedef enum{
 	ups_status_req,
 	ups_status_req,
@@ -57,7 +60,7 @@ typedef struct{
 	uint32_t Alarm;
 	uint32_t Alarm;
 	uint8_t Status;
 	uint8_t Status;
 	char model[16];
 	char model[16];
-	char vertion[18];
+	char vertion[22];
 	char serial[15];
 	char serial[15];
 	uint8_t cnt_err_ups;
 	uint8_t cnt_err_ups;
 	bool Present;
 	bool Present;