Kaynağa Gözat

[Imporve][AW-CCS][main.c]
2022-07-13 / EASON YANG
Action:
1. Improve: checkRfidAuthrize() function. Prevent swiping twice.

File:
1. main.c
Action 1

FIRMWARE VERSION: B0.62.XX.XXXX.PX

8009 2 yıl önce
ebeveyn
işleme
1c85ed0891
1 değiştirilmiş dosya ile 91 ekleme ve 74 silme
  1. 91 74
      EVSE/Projects/AW-CCS/Apps/main.c

+ 91 - 74
EVSE/Projects/AW-CCS/Apps/main.c

@@ -4948,6 +4948,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 +4956,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 +5114,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 +5154,8 @@ void checkRfidAuthrize()
 									break;
 								}
 							}
+							
+							isReadable = TRUE;
 						}
 					}
 					else