|  | @@ -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);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |