Преглед на файлове

Merge remote-tracking branch 'origin/AW-CCS'

FolusWen преди 2 години
родител
ревизия
848a9032c7
променени са 2 файла, в които са добавени 120 реда и са изтрити 83 реда
  1. 1 0
      EVSE/Projects/AW-CCS/Apps/Module_FactoryConfig.c
  2. 119 83
      EVSE/Projects/AW-CCS/Apps/main.c

+ 1 - 0
EVSE/Projects/AW-CCS/Apps/Module_FactoryConfig.c

@@ -307,6 +307,7 @@ int main(int argc, char *argv[])
 	strcpy((char *) SysConfig.AthInterface.WifiPassword, "");			// default: Null
 	SysConfig.AthInterface.WifiDhcpServer = 0;							// 0: Enable 1: Disable
 	SysConfig.AthInterface.WifiDhcpClient = 0;							// 0: Enable 1: Disable
+	SysConfig.AthInterface.WifiBroadcastSsid = 1;						// 0: hidden 1: broadcast
 
 	// Telecom configuration
 	strcpy((char*)SysConfig.TelecomInterface.TelcomApn, "");			// default: Null

+ 119 - 83
EVSE/Projects/AW-CCS/Apps/main.c

@@ -577,7 +577,18 @@ uint8_t ocpp_get_reset_req()
 	}
 	else if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_20)
 	{
-		result = ShmOCPP20Data->MsMsg.bits.ResetReq;
+		if(strcmp((char*)ShmOCPP20Data->Reset.type, "Immediate") == 0)
+		{
+			result = ShmOCPP20Data->MsMsg.bits.ResetReq;
+		}
+		else
+		{
+			if(((ShmSysConfigAndInfo->SysInfo.AcChargingData[0].SystemStatus != SYS_MODE_CHARGING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[0].SystemStatus != SYS_MODE_TERMINATING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[0].SystemStatus != SYS_MODE_COMPLETE)) &&
+			   (AC_QUANTITY>1?((ShmSysConfigAndInfo->SysInfo.AcChargingData[1].SystemStatus != SYS_MODE_CHARGING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[1].SystemStatus != SYS_MODE_TERMINATING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[1].SystemStatus != SYS_MODE_COMPLETE)):TRUE))
+			{
+				result = ShmOCPP20Data->MsMsg.bits.ResetReq;
+			}
+		}
 	}
 
 	return result;
@@ -791,7 +802,8 @@ uint8_t ocpp_get_auth_result(uint8_t isValidParent, ...)
 				}
 				else if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_20)
 				{
-					if((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.status, "Accepted")==0))
+					if((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.status, "Accepted")==0) &&
+					   (strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.groupIdToken.idToken, (char*)ShmOCPP20Data->ControllerComponentVariable[AuthCtrlr_MasterPassGroupId].variableAttribute[0].value) != 0))
 						result = PASS;
 				}
 
@@ -823,7 +835,8 @@ uint8_t ocpp_get_auth_result(uint8_t isValidParent, ...)
 					*/
 					
 					if((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.status, "Accepted")==0) &&
-					   (strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.groupIdToken.idToken, (char*)ShmOCPP20Data->TransactionEvent[gun_index].Response_idTokenInfo.groupIdToken.idToken)==0))
+					   ((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.groupIdToken.idToken, (char*)ShmOCPP20Data->TransactionEvent[gun_index].Response_idTokenInfo.groupIdToken.idToken) == 0) ||
+						(strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.groupIdToken.idToken, (char*)ShmOCPP20Data->ControllerComponentVariable[AuthCtrlr_MasterPassGroupId].variableAttribute[0].value) == 0)))
 						result = PASS;
 				}
 
@@ -841,7 +854,8 @@ uint8_t ocpp_get_auth_result(uint8_t isValidParent, ...)
 		}
 		else if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_20)
 		{
-			if((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.status, "Accepted")==0))
+			if((strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.status, "Accepted")==0) &&
+			   (strcmp((char*)ShmOCPP20Data->Authorize.Response_idTokenInfo.groupIdToken.idToken, (char*)ShmOCPP20Data->ControllerComponentVariable[AuthCtrlr_MasterPassGroupId].variableAttribute[0].value) != 0))
 				result = PASS;
 		}
 	}
@@ -2757,6 +2771,14 @@ void InitEthernet()
 				DEBUG_INFO("Bridge uap0 & eth0 for local power sharing by ethernet.\n");
 			}
 
+			// Change uap0 to low priority
+			if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing &&
+			  (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2) &&
+			  (isUap0up() == PASS))
+			{
+				system("/sbin/ifmetric uap0 1");
+			}
+
 			sleep(5);
 		}
 	}
@@ -4772,12 +4794,9 @@ void checkStopReason(uint8_t gun_index)
 		{
 			sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason, "GroundFault");
 		}
-		else if(ShmOCPP20Data->MsMsg.bits.ResetReq)
+		else if((ShmOCPP20Data->MsMsg.bits.ResetReq) && (strcmp((char*)ShmOCPP20Data->Reset.type, "Immediate")==0))
 		{
-			if(strcmp((char*)ShmOCPP20Data->Reset.type, "Immediate")==0)
-				sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason, "ImmediateReset");
-			else
-				sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason, "OnIdle");
+			sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason, "ImmediateReset");
 		}
 		else if(ShmCharger->gun_info[gun_index].rfidReq || ShmCharger->gun_info[gun_index].bleConfigData.isRequestStop)
 		{
@@ -4948,6 +4967,7 @@ void checkHandshakeCountdown(uint8_t gun_index)
 void checkRfidAuthrize()
 {
 	static uint8_t isCheckdResult = FALSE;
+	static uint8_t isReadable = TRUE;
 	uint8_t isStartByWrongReservation = NO;
 
 	if(!ShmCharger->isAuthrizing)
@@ -4955,85 +4975,94 @@ void checkRfidAuthrize()
 		// Read RFID
 		if(GetCardSerialNumber() != FAIL)
 		{
-			uint8_t isSnStart = FALSE;
-			uint8_t bufferRFID[ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId)];
-
-			if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
+			if(isReadable == TRUE)
 			{
-				// Big endian
-				switch(rfid.snType)
+				uint8_t isSnStart = FALSE;
+				uint8_t bufferRFID[ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId)];
+
+				if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
 				{
-					case RFID_SN_TYPE_6BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
-						break;
-					case RFID_SN_TYPE_7BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
-						break;
-					case RFID_SN_TYPE_10BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
-						break;
-					case RFID_SN_TYPE_4BYTE:
-					default:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
-						break;
+					// Big endian
+					switch(rfid.snType)
+					{
+						case RFID_SN_TYPE_6BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
+							break;
+						case RFID_SN_TYPE_7BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
+							break;
+						case RFID_SN_TYPE_10BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
+							break;
+						case RFID_SN_TYPE_4BYTE:
+						default:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
+							break;
+					}
 				}
-			}
-			else
-			{
-				// Little endian
-				switch(rfid.snType)
+				else
 				{
-					case RFID_SN_TYPE_6BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-						break;
-					case RFID_SN_TYPE_7BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-						break;
-					case RFID_SN_TYPE_10BYTE:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-						break;
-					case RFID_SN_TYPE_4BYTE:
-					default:
-						sprintf((char*)bufferRFID, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-						break;
+					// Little endian
+					switch(rfid.snType)
+					{
+						case RFID_SN_TYPE_6BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+							break;
+						case RFID_SN_TYPE_7BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+							break;
+						case RFID_SN_TYPE_10BYTE:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+							break;
+						case RFID_SN_TYPE_4BYTE:
+						default:
+							sprintf((char*)bufferRFID, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+							break;
+					}
 				}
-			}
-			DEBUG_INFO("Authorize request User Id : %s\n", bufferRFID);
-			//DEBUG_INFO("Authorize request User Id : %s\n", ShmSysConfigAndInfo->SysConfig.UserId);
+				DEBUG_INFO("Authorize request User Id : %s\n", bufferRFID);
+				//DEBUG_INFO("Authorize request User Id : %s\n", ShmSysConfigAndInfo->SysConfig.UserId);
 
-			for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
-				ShmCharger->gun_info[gun_index].resultAuthorization = UNKNOW_RFID;
+				for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
+					ShmCharger->gun_info[gun_index].resultAuthorization = UNKNOW_RFID;
 
-			// Check SN already start
-			for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
-			{
-				if(isMatchStartUser(gun_index) || (isMatchPresentUser(gun_index) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_PREPARING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_A)))
+				// Check SN already start
+				for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
 				{
-					DEBUG_INFO("%s running on connector-%02d.\n", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartUserId, gun_index);
-					isSnStart = TRUE;
-					ShmCharger->gun_info[gun_index].rfidReq = ON;
-					ocpp_set_auth_conf(ON);
-					setLedMotion(gun_index,LED_ACTION_RFID_PASS);
-					setSpeaker(ON, SPEAKER_SHORT);
-					sleep(3);
+					if(isMatchStartUser(gun_index) || (isMatchPresentUser(gun_index) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_PREPARING) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_A)))
+					{
+						DEBUG_INFO("%s running on connector-%02d.\n", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartUserId, gun_index);
+						isSnStart = TRUE;
+						ShmCharger->gun_info[gun_index].rfidReq = ON;
+						ocpp_set_auth_conf(ON);
+						setLedMotion(gun_index,LED_ACTION_RFID_PASS);
+						setSpeaker(ON, SPEAKER_SHORT);
+						sleep(3);
 
-					break;
+						break;
+					}
 				}
-			}
 
-			// Request authorize if isSnStart is false
-			if(!isSnStart)
-			{
-				memcpy(ShmSysConfigAndInfo->SysConfig.UserId, bufferRFID, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
-				refreshStartTimer(&startTime[0][TMR_IDX_AUTH]);
-				ocpp_set_auth_conf(OFF);
-				ocpp_set_auth_req(ON, "ISO14443");
-				setLedMotion(0,LED_ACTION_AUTHED);
-				ShmCharger->isAuthrizing = TRUE;
-				ShmCharger->isGetAuthResult = FALSE;
-				isCheckdResult = FALSE;
+				// Request authorize if isSnStart is false
+				if(!isSnStart)
+				{
+					memcpy(ShmSysConfigAndInfo->SysConfig.UserId, bufferRFID, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
+					refreshStartTimer(&startTime[0][TMR_IDX_AUTH]);
+					ocpp_set_auth_conf(OFF);
+					ocpp_set_auth_req(ON, "ISO14443");
+					setLedMotion(0,LED_ACTION_AUTHED);
+					ShmCharger->isAuthrizing = TRUE;
+					ShmCharger->isGetAuthResult = FALSE;
+					isCheckdResult = FALSE;
+				}
+				
+				isReadable = FALSE;
 			}
 		}
+		else
+		{
+			isReadable = TRUE;
+		}
 	}
 	else
 	{
@@ -5104,17 +5133,22 @@ void checkRfidAuthrize()
 					{
 						if(GetCardSerialNumber() != FAIL)
 						{
-							if(isMatchPresentUser())
+							if(isReadable == TRUE)
 							{
-								DEBUG_INFO("Cancel present user.\n");
-								for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
+								if(isMatchPresentUser())
 								{
-									setLedMotion(gun_index,LED_ACTION_IDLE);
-									ShmCharger->gun_info[gun_index].resultAuthorization = DEFAULT_RFID;
-								}
+									DEBUG_INFO("Cancel present user.\n");
+									for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
+									{
+										setLedMotion(gun_index,LED_ACTION_IDLE);
+										ShmCharger->gun_info[gun_index].resultAuthorization = DEFAULT_RFID;
+									}
 
-								setSpeaker(ON, SPEAKER_SHORT);
-								ShmCharger->isAuthrizing = FALSE;
+									setSpeaker(ON, SPEAKER_SHORT);
+									ShmCharger->isAuthrizing = FALSE;
+								}
+								
+								isReadable = FALSE;
 							}
 						}
 						else
@@ -5139,6 +5173,8 @@ void checkRfidAuthrize()
 									break;
 								}
 							}
+							
+							isReadable = TRUE;
 						}
 					}
 					else