|
@@ -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
|