Przeglądaj źródła

1)add debug printf
2)fix hardfault in megatec driver

balbekova 7 lat temu
rodzic
commit
226a3b1319
2 zmienionych plików z 67 dodań i 45 usunięć
  1. 65 45
      modules/MegaTec/megatec.c
  2. 2 0
      modules/log/log.c

+ 65 - 45
modules/MegaTec/megatec.c

@@ -139,21 +139,48 @@ bool ups_megatec_rx_pdu(void)
 		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)
 		return false;
 
 	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)
 {
 	uint8_t i;
-	char *endValue;
 	char value[10];
 	uint8_t len = 0;
+	DBG printf("ups_status_response: %s\r\n", data);
 	if(data[0] != '(')
 		return;
-
+	DBG printf("ups_status_parser_start\r\n");
 	UPS.Present = true;
 	UPS.Flag_Present = true;
 	UPS.cnt_err_ups = 0;
@@ -165,66 +192,54 @@ void ups_status_response(char *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);
-	UPS.VAC_in = atof(value);
+	if(len > 0)
+		UPS.VAC_in = atof(value);
 
 	//TODO
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	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);
-	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);
-	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);
-	UPS.Freq_in = atof(value);
+	if(len > 0)
+		UPS.Freq_in = atof(value);
 
 	//TODO
-	memset(value, 0, 10);
-	endValue = strpbrk(data," ");
-	len = endValue - data;
-	strncpy(value, data, len);
+	len = get_ups_param(data, " ", value);
 	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);
-	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)
@@ -283,12 +298,17 @@ void ups_remain_time_response(char *data)
 	if(data[0] != '(')
 		return;
 
+	DBG printf("ups_remain_time_response: %s\r\n", data);
+
 	UPS.Present = true;
 	UPS.Flag_Present = true;
 	UPS.cnt_err_ups = 0;
 
 	data++;
 
+	if(strlen(data) > 5)
+		return;
+
 	memset(value, 0, 10);
 	strcpy(value, data);
 	if((UPS.Status >> 7) & 0x01)

+ 2 - 0
modules/log/log.c

@@ -291,6 +291,8 @@ void log_add(char *log_data)
 	len = strlen(log_data);
 
 	strncpy(buf_value, log_data, len);
+
+	DBG printf("UPS log data: %s\r\n", log_data);
 	buf_value[0] = '\"';
 
 	for(i = 0; i < len; i++)