|
@@ -78,6 +78,7 @@ const char *MegaTecCMD[] = {
|
|
|
"QS\r",
|
|
|
"M\r",
|
|
|
"PDA\r",
|
|
|
+ "QMOD\r",
|
|
|
};
|
|
|
|
|
|
extern bool flUpdateLog;
|
|
@@ -95,6 +96,7 @@ void init_UPS_value(void)
|
|
|
UPS.work_time = 0;
|
|
|
UPS.akb_work_time = 0;
|
|
|
UPS.Status = 0;
|
|
|
+ UPS.Mode = 0;
|
|
|
UPS.Alarm = 0;
|
|
|
UPS.cnt_err_ups = 0;
|
|
|
UPS.Flag_Present = false;
|
|
@@ -704,6 +706,25 @@ void ups_buzzer_cntrl_response(char *data)
|
|
|
|
|
|
}
|
|
|
|
|
|
+void ups_mode_response(char *data)
|
|
|
+{
|
|
|
+ char value[20];
|
|
|
+ uint8_t len = 0;
|
|
|
+ DBG printf("ups_serialresponse: %s\r\n", data);
|
|
|
+ if (data[0] != '(') {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DBG printf("ups_serial_parser_start\r\n");
|
|
|
+ UPS.Present = true;
|
|
|
+ UPS.Flag_Present = true;
|
|
|
+ UPS.cnt_err_ups = 0;
|
|
|
+
|
|
|
+ data++;
|
|
|
+
|
|
|
+ DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
|
|
|
+ UPS.Mode = data[0];
|
|
|
+}
|
|
|
+
|
|
|
void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
|
|
|
{
|
|
|
switch (command) {
|
|
@@ -743,6 +764,9 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
|
|
|
case ups_buzzer_cntrl:
|
|
|
ups_buzzer_cntrl_response(ups_pdu.data);
|
|
|
break;
|
|
|
+ case ups_mode_req:
|
|
|
+ ups_mode_response(ups_pdu.data);
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -750,10 +774,12 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
|
|
|
|
|
|
int ups_metac_service_pdu(cmdMegaTecEnums_t command)
|
|
|
{
|
|
|
+ uint8_t UPS_Status_prev;
|
|
|
if (UPS.Present) {
|
|
|
while (!megatec_send) {
|
|
|
vTaskDelay(50);
|
|
|
}
|
|
|
+ UPS_Status_prev = UPS.Status;
|
|
|
memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
megatec_send = false;
|
|
|
if (sSettings.UPS_Setting.type_ups == ups_offline && command == ups_shutdown) {
|
|
@@ -771,17 +797,71 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
+ memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
+ megatec_send = false;
|
|
|
+ UPS.Flag_Present = false;
|
|
|
+ send_MegaTec_cmd(ups_status_req);
|
|
|
+ if (ups_megatec_rx_pdu()) {
|
|
|
+ ups_megatec_process_pdu(ups_status_req);
|
|
|
+ }
|
|
|
+ megatec_send = true;
|
|
|
+ if (command == ups_shutdown) {
|
|
|
+ if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
|
|
|
+ && ((UPS.Status >> 1) & 0x01)) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ } else if (command == ups_cancel_shut_down) {
|
|
|
+ if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
|
|
|
+ && !((UPS.Status >> 1) & 0x01)) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ } else if (command == ups_cancel_test) {
|
|
|
+ if ((((UPS.Status >> 2) & 0x01) != ((UPS_Status_prev >> 2) & 0x01))
|
|
|
+ && !((UPS.Status >> 2) & 0x01)) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ((((UPS.Status >> 2) & 0x01) != ((UPS_Status_prev >> 2) & 0x01))
|
|
|
+ && ((UPS.Status >> 2) & 0x01)) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
megatec_send = true;
|
|
|
}
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+void kstar_mode(void)
|
|
|
+{
|
|
|
+ if((UPS.Status >> 4) & 0x01) {
|
|
|
+ UPS.Mode = 'F';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
|
|
|
+ UPS.Mode = 'D';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(((UPS.Status >> 5) & 0x01) && UPS.VAC_out > 120 && UPS.VAC_in != 0) {
|
|
|
+ UPS.Mode = 'Y';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
|
|
|
+ UPS.Mode = 'B';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(!((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
|
|
|
+ UPS.Mode = 'L';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// TODO ����������� ���������
|
|
|
//void request_task(void)
|
|
|
void request_task(void *params)
|
|
|
{
|
|
|
uint8_t kestar_req[3] = { ups_status_req, ups_remain_time_reg, ups_info};
|
|
|
- uint8_t voltronic_req[6] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_version2_req, ups_serial_req};//
|
|
|
+ uint8_t voltronic_req[6] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_version2_req, ups_serial_req, ups_mode_req};//
|
|
|
uint8_t num_req = 0;
|
|
|
uint8_t *req;
|
|
|
|
|
@@ -800,6 +880,7 @@ void request_task(void *params)
|
|
|
UPS.SOC = 0;
|
|
|
UPS.work_time = 0;
|
|
|
UPS.Status = 0;
|
|
|
+ UPS.Mode = 0;
|
|
|
UPS.Alarm = 0;
|
|
|
UPS.Present = false;
|
|
|
|
|
@@ -864,6 +945,10 @@ void request_task(void *params)
|
|
|
megatec_send = true;
|
|
|
}
|
|
|
}
|
|
|
+ if(sSettings.UPS_Setting.type_ups == ups_kestar
|
|
|
+ || sSettings.UPS_Setting.type_ups == ups_offline) {
|
|
|
+ kstar_mode();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|