Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor/rename v201 to v2 #991

Merged
merged 2 commits into from
Feb 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ option(OCPP_INSTALL "Install the library (shared data might be installed anyway)
option(LIBOCPP_ENABLE_DEPRECATED_WEBSOCKETPP "Websocket++ has been removed from the project" OFF)

option(LIBOCPP_ENABLE_V16 "Enable OCPP 1.6 in the ocpp library" ON)
option(LIBOCPP_ENABLE_V201 "Enable OCPP 2.0.1 in the ocpp library" ON)
option(LIBOCPP_ENABLE_V2 "Enable OCPP 2.0.1 and OCPP2.1 in the ocpp library" ON)

if((NOT LIBOCPP_ENABLE_V16) AND (NOT LIBOCPP_ENABLE_V201))
message(FATAL_ERROR "At least one of LIBOCPP_ENABLE_V16 and LIBOCPP_ENABLE_V201 needs to be ON")
if((NOT LIBOCPP_ENABLE_V16) AND (NOT LIBOCPP_ENABLE_V2))
message(FATAL_ERROR "At least one of LIBOCPP_ENABLE_V16 and LIBOCPP_ENABLE_V2 needs to be ON")
endif()

if(LIBOCPP_ENABLE_DEPRECATED_WEBSOCKETPP)
Expand Down Expand Up @@ -59,7 +59,7 @@ endif()

# config and auxillary files
add_subdirectory(config/v16)
add_subdirectory(config/v201)
add_subdirectory(config/v2)

# library code
add_subdirectory(lib)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ The following table shows the known CSMS with which this library was tested.
| O. DisplayMessage | ✅ yes |
| P. DataTransfer | ✅ yes |

The development of OCPP2.0.1 is in progress. Check the [detailed current implementation status.](doc/v201/ocpp_201_status.md).
The development of OCPP2.0.1 is in progress. Check the [detailed current implementation status.](doc/v2/ocpp_201_status.md).

| Whitepapers & Application Notes | Supported |
| ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
Expand Down
12 changes: 6 additions & 6 deletions config/v201/CMakeLists.txt → config/v2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ collect_migration_files(
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201/core_migrations
)

set(MIGRATION_FILE_VERSION_V201 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)
set(MIGRATION_FILE_VERSION_V2 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)

collect_migration_files(
LOCATION ${MIGRATION_FILES_DEVICE_MODEL_LOCATION}
INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201/device_model_migrations
)

set(MIGRATION_DEVICE_MODEL_FILE_VERSION_V201 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)
set(MIGRATION_FILES_SOURCE_DIR_V201 ${MIGRATION_FILES_LOCATION} PARENT_SCOPE)
set(MIGRATION_FILES_DEVICE_MODEL_SOURCE_DIR_V201 ${MIGRATION_FILES_DEVICE_MODEL_LOCATION} PARENT_SCOPE)
set(MIGRATION_DEVICE_MODEL_FILE_VERSION_V2 ${TARGET_MIGRATION_FILE_VERSION} PARENT_SCOPE)
set(MIGRATION_FILES_SOURCE_DIR_V2 ${MIGRATION_FILES_LOCATION} PARENT_SCOPE)
set(MIGRATION_FILES_DEVICE_MODEL_SOURCE_DIR_V2 ${MIGRATION_FILES_DEVICE_MODEL_LOCATION} PARENT_SCOPE)

option(LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE "Install device model database for OCPP201" ON)
option(LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE "Install device model database for OCPP2.0.1 and OCPP2.1" ON)

list(APPEND CONFIGS
../logging.ini
Expand All @@ -38,7 +38,7 @@ if (LIBOCPP_INSTALL_DEVICE_MODEL_DATABASE)
endif()


message(STATUS "Using ocpp v201 component config file path: ${LIBOCPP_COMPONENT_CONFIG_PATH}")
message(STATUS "Using ocpp v2 component config file path: ${LIBOCPP_COMPONENT_CONFIG_PATH}")

install(DIRECTORY ${LIBOCPP_COMPONENT_CONFIG_PATH} DESTINATION ${CMAKE_INSTALL_DATADIR}/everest/modules/OCPP201)
endif()
13 changes: 11 additions & 2 deletions doc/common/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,22 @@

Run any required tests from build/tests.

## Clarifications for directory structures, namespaces and OCPP versions

This repository contains multiple subdirectories and namespaces named v16, v2 and v21.

Check notice on line 47 in doc/common/getting_started.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

doc/common/getting_started.md#L47

Expected: 80; Actual: 86

* The v16 directories contain files for configuring and implementing OCPP 1.6.
* The v2 directories include files for both OCPP2.0.1 and OCPP2.1, as OCPP 2.1
is fully backward compatible with OCPP 2.0.1.
* The v21 directories include files only for OCPP2.1.

## Get Started with OCPP1.6

Please see the [Getting Started documentation for OCPP1.6](../v16/getting_started.md).

## Get Started with OCPP2.0.1

Please see the [Getting Started documentation for OCPP2.0.1](../v201/getting_started.md).
Please see the [Getting Started documentation for OCPP2.0.1](../v2/getting_started.md).

## Building the doxygen documentation

Expand All @@ -60,4 +69,4 @@
You will find the generated doxygen documentation at:
`build/dist/docs/html/index.html`

The main reference for the integration of libocpp for OCPP1.6 is the ocpp::v16::ChargePoint class defined in `v16/charge_point.hpp` , for OCPP2.0.1 that is the ocpp::v201::ChargePoint class defined in `v201/charge_point.hpp` .
The main reference for the integration of libocpp for OCPP1.6 is the ocpp::v16::ChargePoint class defined in `v16/charge_point.hpp` , for OCPP2.0.1 and OCPP2.1 that is the ocpp::v2::ChargePoint class defined in `v2/charge_point.hpp` .

Check notice on line 72 in doc/common/getting_started.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

doc/common/getting_started.md#L72

Expected: 80; Actual: 234
26 changes: 13 additions & 13 deletions doc/message_dispatching.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,46 +15,46 @@ class v16_MessageDispatcher {
- RegistrationStatus& registration_status
}

class v201_MessageDispatcher {
class v2_MessageDispatcher {
- MessageQueue& message_queue
- DeviceModel& device_model
- ConnectivityManager& connectivity_manager
- RegistrationStatusEnum& registration_status
}

class v201_MessageHandlerInterface {
+handle_message(EnhancedMessage~v201_MessageType~ message)
class v2_MessageHandlerInterface {
+handle_message(EnhancedMessage~v2_MessageType~ message)
}

class v16_MessageHandlerInterface {
+handle_message(EnhancedMessage~v16_MessageType~ message)
}

class v201_DataTransferInterface {
class v2_DataTransferInterface {
+data_transfer_req(request: DataTransferRequest): std::optional~DataTransferResponse~
+handle_data_transfer_req(call: Call~DataTransferRequest~)
}

class v201_DataTransfer {
class v2_DataTransfer {
-MessageDispatcherInterface &message_dispatcher
-std::optional~function~ data_transfer_callback
}

class v201_ChargePoint {
class v2_ChargePoint {
std::unique_ptr~MessageDispatcherInterface~ message_dispatcher
std::unique_ptr~v201_DataTransferInterface~ data_transfer
std::unique_ptr~v2_DataTransferInterface~ data_transfer
}

class v16_ChargePoint {
std::unique_ptr~MessageDispatcherInterface~ message_dispatcher
}

MessageDispatcherInterface <|-- v16_MessageDispatcher
MessageDispatcherInterface <|-- v201_MessageDispatcher
v201_DataTransferInterface <|-- v201_DataTransfer
v201_MessageHandlerInterface <|-- v201_DataTransferInterface
MessageDispatcherInterface *-- v201_DataTransfer
MessageDispatcherInterface *-- v201_ChargePoint
v201_DataTransferInterface *-- v201_ChargePoint
MessageDispatcherInterface <|-- v2_MessageDispatcher
v2_DataTransferInterface <|-- v2_DataTransfer
v2_MessageHandlerInterface <|-- v2_DataTransferInterface
MessageDispatcherInterface *-- v2_DataTransfer
MessageDispatcherInterface *-- v2_ChargePoint
v2_DataTransferInterface *-- v2_ChargePoint
MessageDispatcherInterface *-- v16_ChargePoint
```
4 changes: 2 additions & 2 deletions doc/networkconnectivity/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ be activated before it is possible to connect to this interface. To do this, you

In the implementation of this callback, you have to create a promise and return the future to the promise:
```cpp
std::promise<ocpp::v201::ConfigNetworkResult> promise();
std::future<ocpp::v201::ConfigNetworkResult> future = promise.get_future();
std::promise<ocpp::v2::ConfigNetworkResult> promise();
std::future<ocpp::v2::ConfigNetworkResult> future = promise.get_future();
return future;
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@

The implementation must call **event handlers** of libocpp so that the library can track the state of the charging station and trigger OCPP messages accordingly (e.g. MeterValuesRequest , StatusNotificationRequest)

Your reference within libocpp to interact is a single instance to the class ocpp::v201::ChargePoint defined in `v201/charge_point.hpp` for OCPP 2.0.1.
Your reference within libocpp to interact is a single instance to the class ocpp::v2::ChargePoint defined in `v2/charge_point.hpp` for OCPP 2.0.1.

Check notice on line 13 in doc/v2/getting_started.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

doc/v2/getting_started.md#L13

Expected: 80; Actual: 146
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
## Database, component config and config file paths

Along with the 'initialize_device_model' flag, a few paths must be given to the constructor:
- The path of the device model migration files (normally `resources/v201/device_model_migration_files`).
- The path of the device model migration files (normally `resources/v2/device_model_migration_files`).

Check notice on line 12 in doc/v2/ocpp_201_device_model_initialization.md

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

doc/v2/ocpp_201_device_model_initialization.md#L12

Lists should be surrounded by blank lines
- The path of the device model database.
- The path of the directory with the device model config. There should be two directories in it: 'standardized' and
'custom', both containing device model config.
Expand Down
File renamed without changes.
File renamed without changes.
48 changes: 24 additions & 24 deletions include/ocpp/common/evse_security.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <string>

#include <ocpp/common/types.hpp>
#include <ocpp/v201/ocpp_types.hpp>
#include <ocpp/v2/ocpp_types.hpp>

namespace ocpp {

Expand Down Expand Up @@ -125,29 +125,29 @@ namespace evse_security_conversions {

/** Conversions for Plug&Charge Data Transfer **/

ocpp::v201::GetCertificateIdUseEnum to_ocpp_v201(ocpp::CertificateType other);
ocpp::v201::InstallCertificateUseEnum to_ocpp_v201(ocpp::CaCertificateType other);
ocpp::v201::CertificateSigningUseEnum to_ocpp_v201(ocpp::CertificateSigningUseEnum other);
ocpp::v201::HashAlgorithmEnum to_ocpp_v201(ocpp::HashAlgorithmEnumType other);
ocpp::v201::InstallCertificateStatusEnum to_ocpp_v201(ocpp::InstallCertificateResult other);
ocpp::v201::DeleteCertificateStatusEnum to_ocpp_v201(ocpp::DeleteCertificateResult other);

ocpp::v201::CertificateHashDataType to_ocpp_v201(ocpp::CertificateHashDataType other);
ocpp::v201::CertificateHashDataChain to_ocpp_v201(ocpp::CertificateHashDataChain other);
ocpp::v201::OCSPRequestData to_ocpp_v201(ocpp::OCSPRequestData other);
std::vector<ocpp::v201::OCSPRequestData> to_ocpp_v201(const std::vector<ocpp::OCSPRequestData>& ocsp_request_data);

ocpp::CertificateType from_ocpp_v201(ocpp::v201::GetCertificateIdUseEnum other);
std::vector<ocpp::CertificateType> from_ocpp_v201(const std::vector<ocpp::v201::GetCertificateIdUseEnum>& other);
ocpp::CaCertificateType from_ocpp_v201(ocpp::v201::InstallCertificateUseEnum other);
ocpp::CertificateSigningUseEnum from_ocpp_v201(ocpp::v201::CertificateSigningUseEnum other);
ocpp::HashAlgorithmEnumType from_ocpp_v201(ocpp::v201::HashAlgorithmEnum other);
ocpp::InstallCertificateResult from_ocpp_v201(ocpp::v201::InstallCertificateStatusEnum other);
ocpp::DeleteCertificateResult from_ocpp_v201(ocpp::v201::DeleteCertificateStatusEnum other);

ocpp::CertificateHashDataType from_ocpp_v201(ocpp::v201::CertificateHashDataType other);
ocpp::CertificateHashDataChain from_ocpp_v201(ocpp::v201::CertificateHashDataChain other);
ocpp::OCSPRequestData from_ocpp_v201(ocpp::v201::OCSPRequestData other);
ocpp::v2::GetCertificateIdUseEnum to_ocpp_v2(ocpp::CertificateType other);
ocpp::v2::InstallCertificateUseEnum to_ocpp_v2(ocpp::CaCertificateType other);
ocpp::v2::CertificateSigningUseEnum to_ocpp_v2(ocpp::CertificateSigningUseEnum other);
ocpp::v2::HashAlgorithmEnum to_ocpp_v2(ocpp::HashAlgorithmEnumType other);
ocpp::v2::InstallCertificateStatusEnum to_ocpp_v2(ocpp::InstallCertificateResult other);
ocpp::v2::DeleteCertificateStatusEnum to_ocpp_v2(ocpp::DeleteCertificateResult other);

ocpp::v2::CertificateHashDataType to_ocpp_v2(ocpp::CertificateHashDataType other);
ocpp::v2::CertificateHashDataChain to_ocpp_v2(ocpp::CertificateHashDataChain other);
ocpp::v2::OCSPRequestData to_ocpp_v2(ocpp::OCSPRequestData other);
std::vector<ocpp::v2::OCSPRequestData> to_ocpp_v2(const std::vector<ocpp::OCSPRequestData>& ocsp_request_data);

ocpp::CertificateType from_ocpp_v2(ocpp::v2::GetCertificateIdUseEnum other);
std::vector<ocpp::CertificateType> from_ocpp_v2(const std::vector<ocpp::v2::GetCertificateIdUseEnum>& other);
ocpp::CaCertificateType from_ocpp_v2(ocpp::v2::InstallCertificateUseEnum other);
ocpp::CertificateSigningUseEnum from_ocpp_v2(ocpp::v2::CertificateSigningUseEnum other);
ocpp::HashAlgorithmEnumType from_ocpp_v2(ocpp::v2::HashAlgorithmEnum other);
ocpp::InstallCertificateResult from_ocpp_v2(ocpp::v2::InstallCertificateStatusEnum other);
ocpp::DeleteCertificateResult from_ocpp_v2(ocpp::v2::DeleteCertificateStatusEnum other);

ocpp::CertificateHashDataType from_ocpp_v2(ocpp::v2::CertificateHashDataType other);
ocpp::CertificateHashDataChain from_ocpp_v2(ocpp::v2::CertificateHashDataChain other);
ocpp::OCSPRequestData from_ocpp_v2(ocpp::v2::OCSPRequestData other);

} // namespace evse_security_conversions

Expand Down
14 changes: 7 additions & 7 deletions include/ocpp/common/message_queue.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
#include <ocpp/common/types.hpp>
#include <ocpp/v16/messages/StopTransaction.hpp>
#include <ocpp/v16/types.hpp>
#include <ocpp/v201/messages/TransactionEvent.hpp>
#include <ocpp/v201/types.hpp>
#include <ocpp/v2/messages/TransactionEvent.hpp>
#include <ocpp/v2/types.hpp>

namespace ocpp {

Expand Down Expand Up @@ -116,7 +116,7 @@ bool is_transaction_message(const ocpp::v16::MessageType message_type);
/// \brief Indicates if the given \p message_type is a transaction message type
/// \param message_type
/// \return true if MessageType is TransactionEvent or SecurityEventNotification
bool is_transaction_message(const ocpp::v201::MessageType message_type);
bool is_transaction_message(const ocpp::v2::MessageType message_type);

/// \brief Indicates if the given \p message_type is a StartTransaction message
/// \param message_type
Expand All @@ -126,7 +126,7 @@ bool is_start_transaction_message(const ocpp::v16::MessageType message_type);
/// \brief Indicates if the given \p message_type is a StartTransaction message.
/// \param message_type
/// \return Always return false
bool is_start_transaction_message(const ocpp::v201::MessageType message_type);
bool is_start_transaction_message(const ocpp::v2::MessageType message_type);

/// \brief Indicates if the given \p control_message is a start transaction message
template <typename M> auto is_start_transaction_message(const ControlMessage<M>& control_message) {
Expand All @@ -145,7 +145,7 @@ bool is_boot_notification_message(const ocpp::v16::MessageType message_type);
/// \brief Indicates if the given \p message_type is a BootNotification
/// \param message_type
/// \return true if MessageType is BootNotification
bool is_boot_notification_message(const ocpp::v201::MessageType message_type);
bool is_boot_notification_message(const ocpp::v2::MessageType message_type);

template <typename M>
bool allowed_to_send_message(const ControlMessage<M>& message, const DateTime& time,
Expand Down Expand Up @@ -969,8 +969,8 @@ template <typename M> class MessageQueue {
bool contains_transaction_messages(const CiString<36> transaction_id) {
std::lock_guard<std::recursive_mutex> lk(this->message_mutex);
for (const auto control_message : this->transaction_message_queue) {
if (control_message->messageType == v201::MessageType::TransactionEvent) {
v201::TransactionEventRequest req = control_message->message.at(CALL_PAYLOAD);
if (control_message->messageType == v2::MessageType::TransactionEvent) {
v2::TransactionEventRequest req = control_message->message.at(CALL_PAYLOAD);
if (req.transactionInfo.transactionId == transaction_id) {
return true;
}
Expand Down
8 changes: 4 additions & 4 deletions include/ocpp/common/types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include <ocpp/common/cistring.hpp>
#include <ocpp/common/support_older_cpp_versions.hpp>
#include <ocpp/v16/ocpp_enums.hpp>
#include <ocpp/v201/ocpp_enums.hpp>
#include <ocpp/v2/ocpp_enums.hpp>

using json = nlohmann::json;

Expand Down Expand Up @@ -356,7 +356,7 @@ struct Measurement {
struct DisplayMessageContent {
std::string message;
std::optional<std::string> language;
std::optional<v201::MessageFormatEnum> message_format;
std::optional<v2::MessageFormatEnum> message_format;

friend void from_json(const json& j, DisplayMessageContent& m);
friend void to_json(json& j, const DisplayMessageContent& m);
Expand All @@ -373,8 +373,8 @@ enum class IdentifierType {

struct DisplayMessage {
std::optional<int32_t> id;
std::optional<v201::MessagePriorityEnum> priority;
std::optional<v201::MessageStateEnum> state;
std::optional<v2::MessagePriorityEnum> priority;
std::optional<v2::MessageStateEnum> state;
std::optional<DateTime> timestamp_from;
std::optional<DateTime> timestamp_to;
std::optional<std::string> identifier_id;
Expand Down
28 changes: 14 additions & 14 deletions include/ocpp/v16/charge_point.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@

// for OCPP1.6 PnC
#include "ocpp/v16/messages/ChangeAvailability.hpp"
#include <ocpp/v201/messages/Authorize.hpp>
#include <ocpp/v201/messages/CertificateSigned.hpp>
#include <ocpp/v201/messages/DeleteCertificate.hpp>
#include <ocpp/v201/messages/Get15118EVCertificate.hpp>
#include <ocpp/v201/messages/GetCertificateStatus.hpp>
#include <ocpp/v201/messages/GetInstalledCertificateIds.hpp>
#include <ocpp/v201/messages/InstallCertificate.hpp>
#include <ocpp/v201/messages/SignCertificate.hpp>
#include <ocpp/v201/messages/TriggerMessage.hpp>
#include <ocpp/v2/messages/Authorize.hpp>
#include <ocpp/v2/messages/CertificateSigned.hpp>
#include <ocpp/v2/messages/DeleteCertificate.hpp>
#include <ocpp/v2/messages/Get15118EVCertificate.hpp>
#include <ocpp/v2/messages/GetCertificateStatus.hpp>
#include <ocpp/v2/messages/GetInstalledCertificateIds.hpp>
#include <ocpp/v2/messages/InstallCertificate.hpp>
#include <ocpp/v2/messages/SignCertificate.hpp>
#include <ocpp/v2/messages/TriggerMessage.hpp>

namespace ocpp {
namespace v16 {
Expand Down Expand Up @@ -142,9 +142,9 @@ class ChargePoint {
/// \param certificate contract certificate that the EVCC provides
/// \param iso15118_certificate_hash_data
/// \return
ocpp::v201::AuthorizeResponse data_transfer_pnc_authorize(
ocpp::v2::AuthorizeResponse data_transfer_pnc_authorize(
const std::string& emaid, const std::optional<std::string>& certificate,
const std::optional<std::vector<ocpp::v201::OCSPRequestData>>& iso15118_certificate_hash_data);
const std::optional<std::vector<ocpp::v2::OCSPRequestData>>& iso15118_certificate_hash_data);

/// \brief Uses data transfer mechanism to get 15118 ev certificate from CSMS. This function can be called when the
/// EVCC requests the update or installation of a contract certificate as part of the ISO15118
Expand All @@ -155,7 +155,7 @@ class ChargePoint {
/// \param certificate_action Install or Update
void data_transfer_pnc_get_15118_ev_certificate(const int32_t connector_id, const std::string& exi_request,
const std::string& iso15118_schema_version,
const ocpp::v201::CertificateActionEnum& certificate_action);
const ocpp::v2::CertificateActionEnum& certificate_action);

/// \brief Allows the exchange of arbitrary \p data identified by a \p vendorId and \p messageId with a central
/// system \returns the DataTransferResponse
Expand Down Expand Up @@ -514,8 +514,8 @@ class ChargePoint {
/// \param callback
void register_get_15118_ev_certificate_response_callback(
const std::function<void(const int32_t connector,
const ocpp::v201::Get15118EVCertificateResponse& certificate_response,
const ocpp::v201::CertificateActionEnum& certificate_action)>& callback);
const ocpp::v2::Get15118EVCertificateResponse& certificate_response,
const ocpp::v2::CertificateActionEnum& certificate_action)>& callback);

/// \brief registers a \p callback function that is called when a StartTransaction.req message is sent by the
/// chargepoint
Expand Down
Loading