Browse Source

[Improve][Moduralization][Module_OcppBackend / Module_OcppBackend20]

2021.08.30 / Folus Wen

Actions:
1. GetDianostic and UpdateFirmware prevent start thread if previuos thread does not end.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 năm trước cách đây
mục cha
commit
fa7b1b7008

+ 26 - 9
EVSE/Modularization/ocpp20/MessageHandler.c

@@ -842,11 +842,11 @@ int setKeyValue(char *key, char *value);
 void OCPP_get_TableAuthlocalAllData(void);
 void processUnkownKey(void);
 
-struct StructOCPPMeterValue
+struct InterLock
 {
-	unsigned char 				TimeStamp[28];
-	struct StructSampledValue	SampledValue[10];
-};
+	unsigned char isGetLogGoing:1;
+	unsigned char isUpdateFirmwareGoing:1;
+}interLock;
 
 struct ClientTime
 {
@@ -13777,7 +13777,11 @@ void* GetLogProcess(void* data)
 	}
 
 end:
+	system("rm -f /mnt/*");
+	sleep(5);
 	LogStatusNotificationStatus = UploadLogStatusEnumType_Idle;
+	ShmOCPP20Data->SpMsg.bits.LogStatusNotificationReq = ON;
+	interLock.isGetLogGoing = OFF;
 	pthread_exit(NULL);
 }
 
@@ -13797,7 +13801,14 @@ int handleGetLogRequest(char *uuid, char *payload)
 	sprintf((char*)ShmOCPP20Data->GetLog.Response_status, "%s", LogStatusEnumTypeStr[LogStatusEnumType_Accepted]);
 	sendGetLogConfirmation(uuid);
 
-	pthread_create(&th_Status, NULL, GetLogProcess, stringtrimspace(payload));
+
+	if(!interLock.isGetLogGoing)
+	{
+		interLock.isGetLogGoing = ON;
+		pthread_create(&th_Status, NULL, GetLogProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other GetDiagnostic request on going.\n");
 
 	return result;
 }
@@ -16811,6 +16822,8 @@ void *UpdateFirmwareProcess(void *data)
     }
 
 	if(strstr((char*)ShmOCPP20Data->FirmwareStatusNotification.status, FirmwareStatusEnumTypeStr[FirmwareStatusEnumType_Downloaded]) != NULL)ShmOCPP20Data->MsMsg.bits.UpdateFirmwareReq = ON;
+
+	interLock.isUpdateFirmwareGoing = OFF;
 	pthread_exit(NULL);
 
 }
@@ -16824,11 +16837,15 @@ int handleUpdateFirmwareRequest(char *uuid, char *payload)
 	memset(UpdateFirmwarepayloadData, 0, ARRAY_SIZE(UpdateFirmwarepayloadData));
 	strcpy(UpdateFirmwarepayloadData, stringtrimspace(payload));
 	memset(&ShmOCPP20Data->UpdateFirmware, 0, sizeof(struct UpdateFirmware_20));
-	pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
-	////pthread_join(t, NULL); //
-	//pthread_detach(t);
 
-	//sendUpdateFirmwareConfirmation(uuid);
+	if(!interLock.isUpdateFirmwareGoing)
+	{
+		interLock.isUpdateFirmwareGoing = ON;
+		pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other UpdateFirmware request on going.\n");
+
 	ShmOCPP20Data->MsMsg.bits.UpdateFirmwareConf = ON;
 	return result;
 }

+ 31 - 18
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -105,11 +105,11 @@ int setKeyValue(char *key, char *value);
 void OCPP_get_TableAuthlocalAllData(void);
 void processUnkownKey(void);
 
-struct StructOCPPMeterValue
+struct InterLock
 {
-	unsigned char 				TimeStamp[28];
-	struct StructSampledValue	SampledValue[10];
-};
+	unsigned char isGetDiagnosticGoing:1;
+	unsigned char isUpdateFirmwareGoing:1;
+}interLock;
 
 struct ClientTime
 {
@@ -136,7 +136,6 @@ typedef union
 		unsigned char :3;								//bit5~7
 	}bits[CONNECTOR_QUANTITY];
 }CpinitiateMsg;
-
 CpinitiateMsg cpinitateMsg;
 
 //GetConfiguration Array
@@ -7192,7 +7191,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].AvailableChargingCurrent/10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].CurrentOffered/10));
 				}
 			} // END OF FOR CHAdeMO_QUANTITY
 		}
@@ -7211,7 +7210,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].AvailableChargingCurrent/10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].CurrentOffered/10));
 				}
 			} // END OF CCS_QUANTITY
 		}
@@ -7230,7 +7229,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].AvailableChargingCurrent/10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].CurrentOffered/10));
 				}
 			} // END OF GB_QUANTITY
 		}
@@ -7242,7 +7241,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.AvailableChargingCurrent/10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[10].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.CurrentOffered/10));
 				}
 			}
 		}
@@ -7303,7 +7302,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].AvailableChargingPower*10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].PowerOffered/10));
 				}
 			} // END OF FOR CHAdeMO_QUANTITY
 		}
@@ -7322,7 +7321,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].AvailableChargingPower*10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].PowerOffered/10));
 				}
 			} // END OF CCS_QUANTITY
 		}
@@ -7341,7 +7340,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].AvailableChargingPower*10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].PowerOffered/10));
 				}
 			} // END OF GB_QUANTITY
 		}
@@ -7353,7 +7352,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
 			{
 				if (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.Index == tempIndex)
 				{
-					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.AvailableChargingPower*10));
+					sprintf((char *)ShmOCPP16Data->MeterValues[gun_index].MeterValue[0].SampledValue[11].Value, "%d", (uint16_t) (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[index].GeneralChargingData.PowerOffered/10));
 				}
 			}
 		}
@@ -10312,7 +10311,13 @@ int handleGetDiagnosticsRequest(char *uuid, char *payload)
 	sprintf((char*)ShmOCPP16Data->GetDiagnostics.ResponseFileName, "%s-%s-%04d%02d%02d%02d%02d%02d.zip", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber, (tm->tm_year+1900), (tm->tm_mon+1),tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
 	sendGetDiagnosticsConfirmation(uuid, (char*)ShmOCPP16Data->GetDiagnostics.ResponseFileName);
 
-	pthread_create(&th_Status, NULL, GetDiagnosticsProcess, stringtrimspace(payload));
+	if(!interLock.isGetDiagnosticGoing)
+	{
+		interLock.isGetDiagnosticGoing = 1;
+		pthread_create(&th_Status, NULL, GetDiagnosticsProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other GetDiagnostic request on going.\n");
 
 	return result;
 }
@@ -10578,6 +10583,7 @@ end:
 	sleep(5);
 	sprintf((char*)ShmOCPP16Data->DiagnosticsStatusNotification.Status, "%s", DiagnosticsStatusStr[DiagnosticsStatus_Idle]);
 	ShmOCPP16Data->SpMsg.bits.DiagnosticsStatusNotificationReq = 1;
+	interLock.isGetDiagnosticGoing = 0;
 	pthread_exit(NULL);
 }
 
@@ -13145,11 +13151,15 @@ int handleUpdateFirmwareRequest(char *uuid, char *payload)
 	sendUpdateFirmwareConfirmation(uuid);
 	memset(UpdateFirmwarepayloadData, 0, 300);
 	strcpy(UpdateFirmwarepayloadData, stringtrimspace(payload));
-	pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
-	////pthread_join(t, NULL); //
-	//pthread_detach(t);
 
-	//sendUpdateFirmwareConfirmation(uuid);
+	if(!interLock.isUpdateFirmwareGoing)
+	{
+		interLock.isUpdateFirmwareGoing = 1;
+		pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other UpdateFirmware request on going.\n");
+
 	ShmOCPP16Data->MsMsg.bits.UpdateFirmwareConf =1;
 	return result;
 }
@@ -13168,6 +13178,7 @@ void *UpdateFirmwareProcess(void *data)
 	char * pch;
 
 	DEBUG_INFO("handleUpdateFirmwareRequest ...\n");
+
 	json_object *UpdateFirmware;
 	UpdateFirmware = json_tokener_parse(UpdateFirmwarepayloadData);
 	if(!is_error(UpdateFirmware))
@@ -13351,6 +13362,8 @@ void *UpdateFirmwareProcess(void *data)
     }
 
 	if(strstr((char*)ShmOCPP16Data->FirmwareStatusNotification.Status, FirmwareStatusStr[FirmwareStatus_Downloaded]) != NULL)ShmOCPP16Data->MsMsg.bits.UpdateFirmwareReq = 1;
+
+	interLock.isUpdateFirmwareGoing = 0;
 	pthread_exit(NULL);
 }
 

+ 23 - 9
EVSE/Modularization/ocppph/MessageHandler.c

@@ -106,11 +106,11 @@ int setKeyValue(char *key, char *value);
 void OCPP_get_TableAuthlocalAllData(void);
 void processUnkownKey(void);
 
-struct StructOCPPMeterValue
+struct InterLock
 {
-	unsigned char 				TimeStamp[28];
-	struct StructSampledValue	SampledValue[10];
-};
+	unsigned char isGetDiagnosticGoing:1;
+	unsigned char isUpdateFirmwareGoing:1;
+}interLock;
 
 struct ClientTime
 {
@@ -10034,7 +10034,13 @@ int handleGetDiagnosticsRequest(char *uuid, char *payload)
 	sprintf((char*)ShmOCPP16DataPH->GetDiagnostics.ResponseFileName, "%s-%s-%04d%02d%02d%02d%02d%02d.zip", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber, (tm->tm_year+1900), (tm->tm_mon+1),tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
 	sendGetDiagnosticsConfirmation(uuid, (char*)ShmOCPP16DataPH->GetDiagnostics.ResponseFileName);
 
-	pthread_create(&th_Status, NULL, GetDiagnosticsProcess, stringtrimspace(payload));
+	if(!interLock.isGetDiagnosticGoing)
+	{
+		interLock.isGetDiagnosticGoing = 1;
+		pthread_create(&th_Status, NULL, GetDiagnosticsProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other GetDiagnostic request on going.\n");
 
 	return result;
 }
@@ -10302,6 +10308,7 @@ end:
 	sleep(5);
 	sprintf((char*)ShmOCPP16DataPH->DiagnosticsStatusNotification.Status, "%s", DiagnosticsStatusStr[DiagnosticsStatus_Idle]);
 	ShmOCPP16DataPH->SpMsg.bits.DiagnosticsStatusNotificationReq = 1;
+	interLock.isGetDiagnosticGoing = 0;
 	pthread_exit(NULL);
 }
 
@@ -12869,11 +12876,15 @@ int handleUpdateFirmwareRequest(char *uuid, char *payload)
 	sendUpdateFirmwareConfirmation(uuid);
 	memset(UpdateFirmwarepayloadData, 0, 300);
 	strcpy(UpdateFirmwarepayloadData, stringtrimspace(payload));
-	pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
-	////pthread_join(t, NULL); //
-	//pthread_detach(t);
 
-	//sendUpdateFirmwareConfirmation(uuid);
+	if(!interLock.isUpdateFirmwareGoing)
+	{
+		interLock.isUpdateFirmwareGoing = 1;
+		pthread_create(&t, NULL, UpdateFirmwareProcess, stringtrimspace(payload));
+	}
+	else
+		DEBUG_WARN("Other UpdateFirmware request on going.\n");
+
 	ShmOCPP16DataPH->MsMsg.bits.UpdateFirmwareConf =1;
 	return result;
 }
@@ -12892,6 +12903,7 @@ void *UpdateFirmwareProcess(void *data)
 	char * pch;
 
 	DEBUG_INFO("handleUpdateFirmwareRequest ...\n");
+
 	json_object *UpdateFirmware;
 	UpdateFirmware = json_tokener_parse(UpdateFirmwarepayloadData);
 	if(!is_error(UpdateFirmware))
@@ -13076,6 +13088,8 @@ void *UpdateFirmwareProcess(void *data)
 
 	// OCPPPH only, must announce CSU upgrade firmware
 	if(strstr((char*)ShmOCPP16DataPH->FirmwareStatusNotification.Status, FirmwareStatusStr[FirmwareStatus_Downloaded]) != NULL)ShmSysConfigAndInfo->SysInfo.FirmwareUpdate = 1;
+
+	interLock.isUpdateFirmwareGoing = 0;
 	pthread_exit(NULL);
 }
 

+ 3 - 1
EVSE/Projects/define.h

@@ -620,7 +620,9 @@ struct ChargingInfoData
 	float 				ConnectorMaxVoltage;			// 0~6553.5 volt
 	float 				ConnectorMaxCurrent;			// 0~6553.5 volt
 	unsigned char 		ModelType;
-    	MeterIcCalibration  meterIcCalInfo;
+	MeterIcCalibration  meterIcCalInfo;
+    float				CurrentOffered;					// unit 0.1A
+    float				PowerOffered;					// unit 0.1KWH
 };
 
 typedef union