|
@@ -1479,6 +1479,7 @@ void InitGPIO()
|
|
|
system("echo 0 > /sys/class/gpio/gpio115/value");
|
|
|
sleep(3);
|
|
|
system("echo 1 > /sys/class/gpio/gpio115/value");
|
|
|
+ sleep(1);
|
|
|
|
|
|
/*RFID RST: GPIO1_30 => H:OFF; L:ON*/
|
|
|
system("echo 62 > /sys/class/gpio/export");
|
|
@@ -3766,21 +3767,66 @@ void checkRemoteUpgradeStatus()
|
|
|
|
|
|
void checkRfidAuthrize()
|
|
|
{
|
|
|
- static uint8_t isAuthrizing = FALSE;
|
|
|
- static uint8_t isShowResult = FALSE;
|
|
|
+ static uint8_t isCheckdResult = FALSE;
|
|
|
|
|
|
- if(!isAuthrizing)
|
|
|
+ if(!ShmCharger->isAuthrizing)
|
|
|
{
|
|
|
// Read RFID
|
|
|
if(GetCardSerialNumber() != FAIL)
|
|
|
{
|
|
|
uint8_t isSnStart = FALSE;
|
|
|
|
|
|
+ if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
|
|
|
+ {
|
|
|
+ // Big endian
|
|
|
+ switch(rfid.snType)
|
|
|
+ {
|
|
|
+ case RFID_SN_TYPE_6BYTE:
|
|
|
+ sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // Little endian
|
|
|
+ switch(rfid.snType)
|
|
|
+ {
|
|
|
+ case RFID_SN_TYPE_6BYTE:
|
|
|
+ sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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", ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
+
|
|
|
+ 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))
|
|
|
{
|
|
|
+
|
|
|
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;
|
|
@@ -3796,54 +3842,13 @@ void checkRfidAuthrize()
|
|
|
// Request authorize if isSnStart is false
|
|
|
if(!isSnStart)
|
|
|
{
|
|
|
- if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
|
|
|
- {
|
|
|
- // Big endian
|
|
|
- switch(rfid.snType)
|
|
|
- {
|
|
|
- case RFID_SN_TYPE_6BYTE:
|
|
|
- sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // Little endian
|
|
|
- switch(rfid.snType)
|
|
|
- {
|
|
|
- case RFID_SN_TYPE_6BYTE:
|
|
|
- sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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*)ShmSysConfigAndInfo->SysConfig.UserId, "%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", ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
-
|
|
|
ftime(&startTime[0][TMR_IDX_AUTH]);
|
|
|
ocpp_set_auth_conf(OFF);
|
|
|
ocpp_set_auth_req(ON, "ISO14443");
|
|
|
setLedMotion(0,LED_ACTION_AUTHED);
|
|
|
- isAuthrizing = TRUE;
|
|
|
- isShowResult = FALSE;
|
|
|
+ ShmCharger->isAuthrizing = TRUE;
|
|
|
+ ShmCharger->isGetAuthResult = FALSE;
|
|
|
+ isCheckdResult = FALSE;
|
|
|
sleep(1);
|
|
|
}
|
|
|
}
|
|
@@ -3864,7 +3869,7 @@ void checkRfidAuthrize()
|
|
|
setSpeaker(ON,SPEAKER_INTERVAL_3COUNT);
|
|
|
sleep(3);
|
|
|
|
|
|
- isAuthrizing = FALSE;
|
|
|
+ ShmCharger->isAuthrizing = FALSE;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -3877,12 +3882,21 @@ void checkRfidAuthrize()
|
|
|
(!ocpp_get_connection_status() && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)) ||
|
|
|
(!ocpp_get_connection_status() && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)))
|
|
|
{
|
|
|
- if(!isShowResult)
|
|
|
+ if(!isCheckdResult)
|
|
|
{
|
|
|
DEBUG_INFO("Authorize pass.\n");
|
|
|
setSpeaker(ON, SPEAKER_SHORT);
|
|
|
ftime(&startTime[0][TMR_IDX_GUN_DETECT]);
|
|
|
- isShowResult = TRUE;
|
|
|
+ ShmCharger->isGetAuthResult = TRUE;
|
|
|
+ isCheckdResult = TRUE;
|
|
|
+
|
|
|
+ if(strcmp((char *)&ShmSysConfigAndInfo->SysConfig.OcppServerURL,"") == 0)
|
|
|
+ {
|
|
|
+ ocpp_set_auth_conf(ON);
|
|
|
+ }
|
|
|
+
|
|
|
+ for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
|
|
|
+ ShmCharger->gun_info[gun_index].resultAuthorization = VALIDATED_RFID;
|
|
|
}
|
|
|
|
|
|
if(DiffTimebWithNow(startTime[0][TMR_IDX_GUN_DETECT]) < (ocpp_get_connection_timeout()*1000))
|
|
@@ -3899,10 +3913,9 @@ void checkRfidAuthrize()
|
|
|
)
|
|
|
{
|
|
|
DEBUG_INFO("Connector-%02d action detect.\n", gun_index);
|
|
|
+ ShmCharger->isAuthrizing = FALSE;
|
|
|
|
|
|
- ShmCharger->gun_info[gun_index].resultAuthorization = VALIDATED_RFID;
|
|
|
ShmCharger->gun_info[gun_index].rfidReq = ON;
|
|
|
- isAuthrizing = FALSE;
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -3911,14 +3924,18 @@ void checkRfidAuthrize()
|
|
|
else
|
|
|
{
|
|
|
DEBUG_INFO("Connector action detect timeout.\n");
|
|
|
+ ShmCharger->isAuthrizing = FALSE;
|
|
|
+ ShmCharger->isGetAuthResult = TRUE;
|
|
|
+
|
|
|
for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
|
|
|
setLedMotion(gun_index,LED_ACTION_IDLE);
|
|
|
- isAuthrizing = FALSE;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
DEBUG_INFO("Authorize fail.\n");
|
|
|
+ ShmCharger->isAuthrizing = FALSE;
|
|
|
+ ShmCharger->isGetAuthResult = TRUE;
|
|
|
|
|
|
for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
|
|
|
{
|
|
@@ -3933,8 +3950,6 @@ void checkRfidAuthrize()
|
|
|
{
|
|
|
setLedMotion(gun_index,LED_ACTION_IDLE);
|
|
|
}
|
|
|
-
|
|
|
- isAuthrizing = FALSE;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -4708,7 +4723,7 @@ int main(void)
|
|
|
{
|
|
|
DEBUG_INFO("Enter Socket-E Mode charging.\n");
|
|
|
ShmCharger->gun_info[gun_index].chargingMode = CHARGING_MODE_SOCKETE;
|
|
|
- if(ShmCharger->gun_info[gun_index].primaryMcuState.socket_e.isSocketEPinOn == CP_STATE_C)
|
|
|
+ if(ShmCharger->gun_info[gun_index].primaryMcuState.socket_e.isSocketEPinOn == ON)
|
|
|
setRelay(gun_index,ON);
|
|
|
ocpp_copy_userid_to_starttransaction(gun_index);
|
|
|
ocpp_set_starttransaction_req(gun_index, ON);
|
|
@@ -5062,7 +5077,10 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
// End authorize pass
|
|
|
- if(((ShmCharger->gun_info[gun_index].rfidReq == ON) && ocpp_get_auth_result(YES, gun_index)) ||
|
|
|
+ if(((ShmCharger->gun_info[gun_index].rfidReq == ON) &&isMatchStartUser(gun_index)) ||
|
|
|
+ ((ShmCharger->gun_info[gun_index].rfidReq == ON) && ocpp_get_auth_result(YES, gun_index)) ||
|
|
|
+ (!ocpp_get_connection_status() && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE) && (ShmCharger->gun_info[gun_index].rfidReq == ON)) ||
|
|
|
+ (!ocpp_get_connection_status() && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST) && (ShmCharger->gun_info[gun_index].rfidReq == ON)) ||
|
|
|
(ShmCharger->gun_info[gun_index].bleConfigData.isRequestStop == ON) ||
|
|
|
ocpp_get_remotestop(gun_index) ||
|
|
|
(ocpp_get_connection_status() && !ocpp_get_starttransaction_result(gun_index)) ||
|
|
@@ -5079,22 +5097,19 @@ int main(void)
|
|
|
setRelay(gun_index, OFF);
|
|
|
setLedMotion(gun_index, LED_ACTION_STOP);
|
|
|
|
|
|
- if(!ShmCharger->gun_info[gun_index].primaryMcuState.relay_state)
|
|
|
+ if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
|
|
|
{
|
|
|
- if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
|
|
|
- {
|
|
|
- checkStopReason(gun_index);
|
|
|
- setChargerMode(gun_index, SYS_MODE_COMPLETE);
|
|
|
- }
|
|
|
- else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
|
|
|
- {
|
|
|
- //setChargerMode(gun_index, SYS_MODE_COMPLETE);
|
|
|
- //Cancel CCS task negotiating
|
|
|
- ShmCharger->gun_info[gun_index].acCcsInfo.ChargingPermission = OFF;
|
|
|
- ShmCharger->gun_info[gun_index].acCcsInfo.EVSENotification = NOTIFICATION_STOP;
|
|
|
- setRelay(gun_index,OFF);
|
|
|
- ShmCharger->gun_info[gun_index].isCCSWaitChangeDuty = ON;
|
|
|
- }
|
|
|
+ checkStopReason(gun_index);
|
|
|
+ setChargerMode(gun_index, SYS_MODE_COMPLETE);
|
|
|
+ }
|
|
|
+ else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
|
|
|
+ {
|
|
|
+ //setChargerMode(gun_index, SYS_MODE_COMPLETE);
|
|
|
+ //Cancel CCS task negotiating
|
|
|
+ ShmCharger->gun_info[gun_index].acCcsInfo.ChargingPermission = OFF;
|
|
|
+ ShmCharger->gun_info[gun_index].acCcsInfo.EVSENotification = NOTIFICATION_STOP;
|
|
|
+ setRelay(gun_index,OFF);
|
|
|
+ ShmCharger->gun_info[gun_index].isCCSWaitChangeDuty = ON;
|
|
|
}
|
|
|
}
|
|
|
else
|