Skip to content

Commit 05c45c8

Browse files
authored
EvseV2G: Changes to EvseStatusCode (EVerest#712)
- Setting the correct EvseStatusCode (EVSE_IsolationMonitoringActive) during cable check - Adding correct evse_status_code reset handling. Before that in every state the evse was ready. Signed-off-by: Sebastian Lukas <sebastian.lukas@pionix.de>
1 parent 539cab1 commit 05c45c8

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

modules/EvseV2G/charger/ISO15118_chargerImpl.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,16 @@ void ISO15118_chargerImpl::handle_send_error(types::iso15118_charger::EvseError&
419419

420420
void ISO15118_chargerImpl::handle_reset_error() {
421421
v2g_ctx->evse_v2g_data.rcd = 0;
422-
memset(v2g_ctx->evse_v2g_data.evse_status_code, (int)iso1DC_EVSEStatusCodeType_EVSE_Ready,
423-
sizeof(v2g_ctx->evse_v2g_data.evse_status_code));
422+
423+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_INIT] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
424+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_AUTH] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
425+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_PARAMETER] = iso1DC_EVSEStatusCodeType_EVSE_Ready; // [V2G-DC-453]
426+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_ISOLATION] = iso1DC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive;
427+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_PRECHARGE] = iso1DC_EVSEStatusCodeType_EVSE_Ready;
428+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_CHARGE] = iso1DC_EVSEStatusCodeType_EVSE_Ready;
429+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_WELDING] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
430+
v2g_ctx->evse_v2g_data.evse_status_code[PHASE_STOP] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
431+
424432
// Todo(sl): check if emergency should be cleared here?
425433
}
426434

modules/EvseV2G/din_server.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -723,15 +723,20 @@ static enum v2g_event handle_din_cable_check(struct v2g_connection* conn) {
723723
res->DC_EVSEStatus.EVSEIsolationStatus = (dinisolationLevelType)conn->ctx->evse_v2g_data.evse_isolation_status;
724724
res->DC_EVSEStatus.EVSEIsolationStatus_isUsed = conn->ctx->evse_v2g_data.evse_isolation_status_is_used;
725725
res->DC_EVSEStatus.EVSENotification = (dinEVSENotificationType)conn->ctx->evse_v2g_data.evse_notification;
726-
res->DC_EVSEStatus.EVSEStatusCode =
727-
(conn->ctx->intl_emergency_shutdown == true)
728-
? dinDC_EVSEStatusCodeType_EVSE_EmergencyShutdown
729-
: (dinDC_EVSEStatusCodeType)conn->ctx->evse_v2g_data.evse_status_code[PHASE_ISOLATION];
730726
res->DC_EVSEStatus.NotificationMaxDelay = (uint32_t)conn->ctx->evse_v2g_data.notification_max_delay;
731727
res->EVSEProcessing = (conn->ctx->evse_v2g_data.evse_processing[PHASE_ISOLATION] == (uint8_t)0)
732728
? dinEVSEProcessingType_Finished
733729
: dinEVSEProcessingType_Ongoing;
734730

731+
if (conn->ctx->intl_emergency_shutdown == true) {
732+
res->DC_EVSEStatus.EVSEStatusCode = dinDC_EVSEStatusCodeType_EVSE_EmergencyShutdown;
733+
} else if (res->EVSEProcessing == dinEVSEProcessingType_Finished) {
734+
res->DC_EVSEStatus.EVSEStatusCode = dinDC_EVSEStatusCodeType_EVSE_Ready;
735+
} else {
736+
res->DC_EVSEStatus.EVSEStatusCode =
737+
static_cast<dinDC_EVSEStatusCodeType>(conn->ctx->evse_v2g_data.evse_status_code[PHASE_ISOLATION]);
738+
}
739+
735740
/* Check the current response code and check if no external error has occurred */
736741
nextEvent = din_validate_response_code(&res->ResponseCode, conn);
737742

modules/EvseV2G/iso_server.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2004,10 +2004,15 @@ static enum v2g_event handle_iso_cable_check(struct v2g_connection* conn) {
20042004
res->DC_EVSEStatus.EVSEIsolationStatus = (iso1isolationLevelType)conn->ctx->evse_v2g_data.evse_isolation_status;
20052005
res->DC_EVSEStatus.EVSEIsolationStatus_isUsed = conn->ctx->evse_v2g_data.evse_isolation_status_is_used;
20062006
res->DC_EVSEStatus.EVSENotification = (iso1EVSENotificationType)conn->ctx->evse_v2g_data.evse_notification;
2007-
res->DC_EVSEStatus.EVSEStatusCode = get_emergency_status_code(conn->ctx, PHASE_ISOLATION);
20082007
res->DC_EVSEStatus.NotificationMaxDelay = (uint16_t)conn->ctx->evse_v2g_data.notification_max_delay;
20092008
res->EVSEProcessing = (iso1EVSEProcessingType)conn->ctx->evse_v2g_data.evse_processing[PHASE_ISOLATION];
20102009

2010+
if (conn->ctx->intl_emergency_shutdown == false && res->EVSEProcessing == dinEVSEProcessingType_Finished) {
2011+
res->DC_EVSEStatus.EVSEStatusCode = iso1DC_EVSEStatusCodeType_EVSE_Ready;
2012+
} else {
2013+
res->DC_EVSEStatus.EVSEStatusCode = get_emergency_status_code(conn->ctx, PHASE_ISOLATION);
2014+
}
2015+
20112016
/* Check the current response code and check if no external error has occurred */
20122017
next_event = (v2g_event)iso_validate_response_code(&res->ResponseCode, conn);
20132018

modules/EvseV2G/v2g_ctx.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,14 @@ void v2g_ctx_init_charging_values(struct v2g_context* const ctx) {
149149
ctx->evse_v2g_data.evse_isolation_status = (uint8_t)iso1isolationLevelType_Invalid;
150150
ctx->evse_v2g_data.evse_isolation_status_is_used = (unsigned int)1; // Shall be used in DIN
151151
ctx->evse_v2g_data.evse_notification = (uint8_t)0;
152+
ctx->evse_v2g_data.evse_status_code[PHASE_INIT] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
153+
ctx->evse_v2g_data.evse_status_code[PHASE_AUTH] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
152154
ctx->evse_v2g_data.evse_status_code[PHASE_PARAMETER] = iso1DC_EVSEStatusCodeType_EVSE_Ready; // [V2G-DC-453]
153-
ctx->evse_v2g_data.evse_status_code[PHASE_ISOLATION] = iso1DC_EVSEStatusCodeType_EVSE_Ready;
155+
ctx->evse_v2g_data.evse_status_code[PHASE_ISOLATION] = iso1DC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive;
154156
ctx->evse_v2g_data.evse_status_code[PHASE_PRECHARGE] = iso1DC_EVSEStatusCodeType_EVSE_Ready;
155157
ctx->evse_v2g_data.evse_status_code[PHASE_CHARGE] = iso1DC_EVSEStatusCodeType_EVSE_Ready;
158+
ctx->evse_v2g_data.evse_status_code[PHASE_WELDING] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
159+
ctx->evse_v2g_data.evse_status_code[PHASE_STOP] = iso1DC_EVSEStatusCodeType_EVSE_NotReady;
156160
memset(ctx->evse_v2g_data.evse_processing, iso1EVSEProcessingType_Ongoing, PHASE_LENGTH);
157161
ctx->evse_v2g_data.evse_processing[PHASE_PARAMETER] = iso1EVSEProcessingType_Finished; // Skip parameter phase
158162

0 commit comments

Comments
 (0)