|
@@ -139,21 +139,48 @@ bool ups_megatec_rx_pdu(void)
|
|
ups_pdu.data[ups_pdu.len++] = c;
|
|
ups_pdu.data[ups_pdu.len++] = c;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ DBG printf("UPS raw data: %s\r\n", ups_pdu.data);
|
|
|
|
+ DBG printf("UPS raw data len: %d\r\n", ups_pdu.len);
|
|
|
|
+
|
|
if (ups_pdu.len == 0)
|
|
if (ups_pdu.len == 0)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int8_t get_ups_param(char *buf, char *param, char *val)
|
|
|
|
+{
|
|
|
|
+ char *endValue;
|
|
|
|
+ int8_t param_len;
|
|
|
|
+
|
|
|
|
+ memset(val, 0, 10);
|
|
|
|
+ endValue = strpbrk(buf, param);
|
|
|
|
+ if(endValue != NULL){
|
|
|
|
+ param_len = endValue - buf;
|
|
|
|
+ if(param_len < 10){
|
|
|
|
+ strncpy(val, buf, param_len);
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ param_len = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ param_len = 0;
|
|
|
|
+ }
|
|
|
|
+ DBG printf("UPS parameter: %s\r\n", val);
|
|
|
|
+
|
|
|
|
+ return param_len;
|
|
|
|
+}
|
|
|
|
+
|
|
void ups_status_response(char *data)
|
|
void ups_status_response(char *data)
|
|
{
|
|
{
|
|
uint8_t i;
|
|
uint8_t i;
|
|
- char *endValue;
|
|
|
|
char value[10];
|
|
char value[10];
|
|
uint8_t len = 0;
|
|
uint8_t len = 0;
|
|
|
|
+ DBG printf("ups_status_response: %s\r\n", data);
|
|
if(data[0] != '(')
|
|
if(data[0] != '(')
|
|
return;
|
|
return;
|
|
-
|
|
|
|
|
|
+ DBG printf("ups_status_parser_start\r\n");
|
|
UPS.Present = true;
|
|
UPS.Present = true;
|
|
UPS.Flag_Present = true;
|
|
UPS.Flag_Present = true;
|
|
UPS.cnt_err_ups = 0;
|
|
UPS.cnt_err_ups = 0;
|
|
@@ -165,66 +192,54 @@ void ups_status_response(char *data)
|
|
|
|
|
|
data++;
|
|
data++;
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ DBG printf("UPS ups_status_parser_startr: %s\r\n", data);
|
|
|
|
+
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.VAC_in = atof(value);
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.VAC_in = atof(value);
|
|
|
|
|
|
//TODO
|
|
//TODO
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.VAC_out = atof(value);
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.VAC_out = atof(value);
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.Load = atoi(value);
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.Load = atoi(value);
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.Freq_in = atof(value);
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.Freq_in = atof(value);
|
|
|
|
|
|
//TODO
|
|
//TODO
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data," ");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
|
|
+ len = get_ups_param(data, " ", value);
|
|
data += (len + 1);
|
|
data += (len + 1);
|
|
- UPS.Temp = atof(value);
|
|
|
|
|
|
+ if(len > 0)
|
|
|
|
+ UPS.Temp = atof(value);
|
|
|
|
|
|
- memset(value, 0, 10);
|
|
|
|
- endValue = strpbrk(data,"\r");
|
|
|
|
- len = endValue - data;
|
|
|
|
- strncpy(value, data, len);
|
|
|
|
- uint8_t stat = 0;
|
|
|
|
- for(i = 0; i < len; i ++)
|
|
|
|
- {
|
|
|
|
- stat |= (value[i] - 0x30) << (7-i);
|
|
|
|
|
|
+
|
|
|
|
+ len = get_ups_param(data, "\r", value);
|
|
|
|
+ data += (len + 1);
|
|
|
|
+ if(len > 0){
|
|
|
|
+ uint8_t stat = 0;
|
|
|
|
+ for(i = 0; i < len; i ++)
|
|
|
|
+ {
|
|
|
|
+ stat |= (value[i] - 0x30) << (7-i);
|
|
|
|
+ }
|
|
|
|
+ UPS.Status = stat;
|
|
}
|
|
}
|
|
- UPS.Status = stat;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void ups_info_response(char *data)
|
|
void ups_info_response(char *data)
|
|
@@ -283,12 +298,17 @@ void ups_remain_time_response(char *data)
|
|
if(data[0] != '(')
|
|
if(data[0] != '(')
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ DBG printf("ups_remain_time_response: %s\r\n", data);
|
|
|
|
+
|
|
UPS.Present = true;
|
|
UPS.Present = true;
|
|
UPS.Flag_Present = true;
|
|
UPS.Flag_Present = true;
|
|
UPS.cnt_err_ups = 0;
|
|
UPS.cnt_err_ups = 0;
|
|
|
|
|
|
data++;
|
|
data++;
|
|
|
|
|
|
|
|
+ if(strlen(data) > 5)
|
|
|
|
+ return;
|
|
|
|
+
|
|
memset(value, 0, 10);
|
|
memset(value, 0, 10);
|
|
strcpy(value, data);
|
|
strcpy(value, data);
|
|
if((UPS.Status >> 7) & 0x01)
|
|
if((UPS.Status >> 7) & 0x01)
|