Skip to content

Commit

Permalink
Adding bidirectional to iso15118_charger interface, call setup_config…
Browse files Browse the repository at this point in the history
… in D20 module to tell libiso evse_id and energy modes

Signed-off-by: Sebastian Lukas <[email protected]>
  • Loading branch information
SebaLukas committed Jun 21, 2024
1 parent 1c32cfb commit 85e8028
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 17 deletions.
3 changes: 3 additions & 0 deletions interfaces/ISO15118_charger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ cmds:
debug_mode:
description: Enable/Disable debug mode
type: boolean
bidirectional:
description: Set true if the powersupply (AC or DC) supports bidi mode
type: boolean
set_charging_parameters:
description: >-
At startup, set the the charging parameters at least once. May be updated later on.
Expand Down
11 changes: 6 additions & 5 deletions modules/DummyV2G/main/ISO15118_chargerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@ void ISO15118_chargerImpl::ready() {
void ISO15118_chargerImpl::handle_setup(
types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) {
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode, bool& bidirectional) {
// your code for cmd setup goes here
}

void ISO15118_chargerImpl::handle_set_charging_parameters(
types::iso15118_charger::SetupPhysicalValues& physical_values) {
// your code for cmd set_charging_parameters goes here
}

void ISO15118_chargerImpl::handle_session_setup(std::vector<types::iso15118_charger::PaymentOption>& payment_options,
bool& supported_certificate_service) {
// your code for cmd session_setup goes here
Expand Down Expand Up @@ -55,10 +60,6 @@ void ISO15118_chargerImpl::handle_stop_charging(bool& stop) {
// your code for cmd stop_charging goes here
}

void ISO15118_chargerImpl::handle_set_charging_parameters(
types::iso15118_charger::SetupPhysicalValues& physical_values) {
}

void ISO15118_chargerImpl::handle_update_ac_max_current(double& max_current) {
// your code for cmd update_ac_max_current goes here
}
Expand Down
3 changes: 2 additions & 1 deletion modules/DummyV2G/main/ISO15118_chargerImpl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class ISO15118_chargerImpl : public ISO15118_chargerImplBase {
// command handler functions (virtual)
virtual void handle_setup(types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) override;
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode,
bool& bidirectional) override;
virtual void handle_set_charging_parameters(types::iso15118_charger::SetupPhysicalValues& physical_values) override;
virtual void handle_session_setup(std::vector<types::iso15118_charger::PaymentOption>& payment_options,
bool& supported_certificate_service) override;
Expand Down
15 changes: 11 additions & 4 deletions modules/EvseManager/EvseManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,8 @@ void EvseManager::ready() {

auto sae_mode = types::iso15118_charger::SAE_J2847_Bidi_Mode::None;

bool support_bidi = false;

// Set up energy transfer modes for HLC. For now we only support either DC or AC, not both at the same time.
std::vector<types::iso15118_charger::EnergyTransferMode> transfer_modes;
if (config.charge_mode == "AC") {
Expand All @@ -207,7 +209,10 @@ void EvseManager::ready() {
} else if (config.charge_mode == "DC") {
transfer_modes.push_back(types::iso15118_charger::EnergyTransferMode::DC_extended);

update_powersupply_capabilities(get_powersupply_capabilities());
const auto caps = get_powersupply_capabilities();
update_powersupply_capabilities(caps);

support_bidi = caps.bidirectional;

// Set present measurements on HLC to sane defaults
types::iso15118_charger::DC_EVSEPresentVoltage_Current present_values;
Expand Down Expand Up @@ -457,7 +462,7 @@ void EvseManager::ready() {

r_hlc[0]->call_receipt_is_required(config.ev_receipt_required);

r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging);
r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging, support_bidi);

// reset error flags
r_hlc[0]->call_reset_error();
Expand Down Expand Up @@ -961,8 +966,9 @@ void EvseManager::setup_fake_DC_mode() {
r_hlc[0]->call_update_dc_minimum_limits(evseMinLimits);

const auto sae_mode = types::iso15118_charger::SAE_J2847_Bidi_Mode::None;
const auto support_bidi = false;

r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging);
r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging, support_bidi);
}

void EvseManager::setup_AC_mode() {
Expand All @@ -984,9 +990,10 @@ void EvseManager::setup_AC_mode() {
types::iso15118_charger::SetupPhysicalValues setup_physical_values;

const auto sae_mode = types::iso15118_charger::SAE_J2847_Bidi_Mode::None;
const auto support_bidi = false;

if (get_hlc_enabled()) {
r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging);
r_hlc[0]->call_setup(evseid, transfer_modes, sae_mode, config.session_logging, support_bidi);
}
}

Expand Down
2 changes: 1 addition & 1 deletion modules/EvseV2G/charger/ISO15118_chargerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ void ISO15118_chargerImpl::ready() {
void ISO15118_chargerImpl::handle_setup(
types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) {
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode, bool& bidirectional) {

uint8_t len = evse_id.EVSE_ID.length();
if (len < iso1SessionSetupResType_EVSEID_CHARACTERS_SIZE) {
Expand Down
3 changes: 2 additions & 1 deletion modules/EvseV2G/charger/ISO15118_chargerImpl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ class ISO15118_chargerImpl : public ISO15118_chargerImplBase {
// command handler functions (virtual)
virtual void handle_setup(types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) override;
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode,
bool& bidirectional) override;
virtual void handle_set_charging_parameters(types::iso15118_charger::SetupPhysicalValues& physical_values) override;
virtual void handle_session_setup(std::vector<types::iso15118_charger::PaymentOption>& payment_options,
bool& supported_certificate_service) override;
Expand Down
32 changes: 28 additions & 4 deletions modules/Iso15118/D20Evse/charger/ISO15118_chargerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,30 @@ void ISO15118_chargerImpl::ready() {
void ISO15118_chargerImpl::handle_setup(
types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) {
// your code for cmd setup goes here
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode, bool& bidirectional) {

std::vector<iso15118::message_20::ServiceCategory> supported_energy_transfer_services;

for (auto mode : supported_energy_transfer_modes) {
if (mode == types::iso15118_charger::EnergyTransferMode::AC_single_phase_core ||
mode == types::iso15118_charger::EnergyTransferMode::AC_three_phase_core) {
supported_energy_transfer_services.push_back(iso15118::message_20::ServiceCategory::AC);
if (bidirectional) {
supported_energy_transfer_services.push_back(iso15118::message_20::ServiceCategory::AC_BPT);
}
} else if (mode == types::iso15118_charger::EnergyTransferMode::DC_core ||
mode == types::iso15118_charger::EnergyTransferMode::DC_extended ||
mode == types::iso15118_charger::EnergyTransferMode::DC_combo_core ||
mode == types::iso15118_charger::EnergyTransferMode::DC_unique) {
supported_energy_transfer_services.push_back(iso15118::message_20::ServiceCategory::DC);
if (bidirectional) {
supported_energy_transfer_services.push_back(iso15118::message_20::ServiceCategory::DC_BPT);
}
}
}

// TODO(sl): Check if ISO-2 evse_id format is the same for ISO-20
controller->setup_config(evse_id.EVSE_ID, supported_energy_transfer_services);
}

void ISO15118_chargerImpl::handle_set_charging_parameters(
Expand All @@ -163,12 +185,14 @@ void ISO15118_chargerImpl::handle_session_setup(std::vector<types::iso15118_char

std::vector<iso15118::message_20::Authorization> auth_services;

// Note(sl): Right now only eim is supported!
for (auto& option : payment_options) {
if (option == types::iso15118_charger::PaymentOption::ExternalPayment) {
auth_services.push_back(iso15118::message_20::Authorization::EIM);
} else if (option == types::iso15118_charger::PaymentOption::Contract) {
auth_services.push_back(iso15118::message_20::Authorization::PnC);
}
// } else if (option == types::iso15118_charger::PaymentOption::Contract) {
// auth_services.push_back(iso15118::message_20::Authorization::PnC);
// }
}

controller->setup_session(auth_services, supported_certificate_service);
Expand Down
3 changes: 2 additions & 1 deletion modules/Iso15118/D20Evse/charger/ISO15118_chargerImpl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class ISO15118_chargerImpl : public ISO15118_chargerImplBase {
// command handler functions (virtual)
virtual void handle_setup(types::iso15118_charger::EVSEID& evse_id,
std::vector<types::iso15118_charger::EnergyTransferMode>& supported_energy_transfer_modes,
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode) override;
types::iso15118_charger::SAE_J2847_Bidi_Mode& sae_j2847_mode, bool& debug_mode,
bool& bidirectional) override;
virtual void handle_set_charging_parameters(types::iso15118_charger::SetupPhysicalValues& physical_values) override;
virtual void handle_session_setup(std::vector<types::iso15118_charger::PaymentOption>& payment_options,
bool& supported_certificate_service) override;
Expand Down

0 comments on commit 85e8028

Please sign in to comment.