ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
provisioning.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Pionix GmbH and Contributors to EVerest
3
4#pragma once
5
6#include <ocpp/v2/message_handler.hpp>
7
8namespace ocpp::v2 {
9struct FunctionalBlockContext;
10class OcspUpdaterInterface;
11
12class AvailabilityInterface;
13class SecurityInterface;
14class MeterValuesInterface;
15class DiagnosticsInterface;
16class TransactionInterface;
17
18struct BootNotificationResponse;
19struct SetVariablesRequest;
20struct GetBaseReportRequest;
21struct ResetRequest;
22struct SetNetworkProfileRequest;
23
24typedef std::function<void(const ocpp::DateTime& currentTime)> TimeSyncCallback;
25typedef std::function<void(const BootNotificationResponse& boot_notification_response)> BootNotificationCallback;
26typedef std::function<SetNetworkProfileStatusEnum(const int32_t configuration_slot,
27 const NetworkConnectionProfile& network_connection_profile)>
28 ValidateNetworkProfileCallback;
29typedef std::function<bool(const std::optional<const int32_t> evse_id, const ResetEnum& reset_type)>
30 IsResetAllowedCallback;
31typedef std::function<void(const std::optional<const int32_t> evse_id, const ResetEnum& reset_type)> ResetCallback;
32typedef std::function<RequestStartStopStatusEnum(const int32_t evse_id, const ReasonEnum& stop_reason)>
33 StopTransactionCallback;
34typedef std::function<void(const SetVariableData& set_variable_data)> VariableChangedCallback;
35
37public:
38 /* OCPP message requests */
39
40 // Functional Block B: Provisioning
41 virtual void boot_notification_req(const BootReasonEnum& reason,
42 const bool initiated_by_trigger_message = false) = 0;
43 virtual void stop_bootnotification_timer() = 0;
47 virtual void on_variable_changed(const SetVariableData& set_variable_data) = 0;
48
54 virtual std::vector<GetVariableResult>
55 get_variables(const std::vector<GetVariableData>& get_variable_data_vector) = 0;
56
61 virtual std::map<SetVariableData, SetVariableResult>
62 set_variables(const std::vector<SetVariableData>& set_variable_data_vector, const std::string& source) = 0;
63};
64
66public:
67 Provisioning(const FunctionalBlockContext& functional_block_context, MessageQueue<v2::MessageType>& message_queue,
68 OcspUpdaterInterface& ocsp_updater, AvailabilityInterface& availability,
69 MeterValuesInterface& meter_values, SecurityInterface& security, DiagnosticsInterface& diagnostics,
70 TransactionInterface& transaction, std::optional<TimeSyncCallback> time_sync_callback,
71 std::optional<BootNotificationCallback> boot_notification_callback,
72 std::optional<ValidateNetworkProfileCallback> validate_network_profile_callback,
73 IsResetAllowedCallback is_reset_allowed_callback, ResetCallback reset_callback,
74 StopTransactionCallback stop_transaction_callback,
75 std::optional<VariableChangedCallback> variable_changed_callback,
76
77 std::atomic<RegistrationStatusEnum>& registration_status);
78 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
79 void boot_notification_req(const BootReasonEnum& reason, const bool initiated_by_trigger_message = false) override;
80 void stop_bootnotification_timer() override;
81 void on_variable_changed(const SetVariableData& set_variable_data) override;
82 std::vector<GetVariableResult> get_variables(const std::vector<GetVariableData>& get_variable_data_vector) override;
83 std::map<SetVariableData, SetVariableResult>
84 set_variables(const std::vector<SetVariableData>& set_variable_data_vector, const std::string& source) override;
85
86private: // Members
87 const FunctionalBlockContext& context;
88 MessageQueue<v2::MessageType>& message_queue;
89 OcspUpdaterInterface& ocsp_updater;
90
91 AvailabilityInterface& availability;
92 MeterValuesInterface& meter_values;
93 SecurityInterface& security;
94 DiagnosticsInterface& diagnostics;
95 TransactionInterface& transaction;
96
97 std::optional<TimeSyncCallback> time_sync_callback;
98 std::optional<BootNotificationCallback> boot_notification_callback;
99 std::optional<ValidateNetworkProfileCallback> validate_network_profile_callback;
100 IsResetAllowedCallback is_reset_allowed_callback;
101 ResetCallback reset_callback;
102 StopTransactionCallback stop_transaction_callback;
103 std::optional<VariableChangedCallback> variable_changed_callback;
104
105 std::atomic<RegistrationStatusEnum>& registration_status;
106
107 Everest::SteadyTimer boot_notification_timer;
108
109private: // Functions
110 /* OCPP message requests */
111
112 void notify_report_req(const int request_id, const std::vector<ReportData>& report_data);
113
114 /* OCPP message handlers */
115
116 void handle_boot_notification_response(CallResult<BootNotificationResponse> call_result);
117 void handle_set_variables_req(Call<SetVariablesRequest> call);
118 void handle_get_variables_req(const EnhancedMessage<v2::MessageType>& message);
119 void handle_get_base_report_req(Call<GetBaseReportRequest> call);
120 void handle_get_report_req(const EnhancedMessage<v2::MessageType>& message);
121 void handle_set_network_profile_req(Call<SetNetworkProfileRequest> call);
122 void handle_reset_req(Call<ResetRequest> call);
123
124 /* Helper functions. */
125
128 void handle_variable_changed(const SetVariableData& set_variable_data);
129 void handle_variables_changed(const std::map<SetVariableData, SetVariableResult>& set_variable_results);
130 bool validate_set_variable(const SetVariableData& set_variable_data);
131
138 std::map<SetVariableData, SetVariableResult>
139 set_variables_internal(const std::vector<SetVariableData>& set_variable_data_vector, const std::string& source,
140 const bool allow_read_only);
141};
142} // namespace ocpp::v2
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Definition: availability.hpp:21
Definition: diagnostics.hpp:32
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Definition: meter_values.hpp:14
Definition: ocsp_updater.hpp:44
Definition: provisioning.hpp:36
virtual std::map< SetVariableData, SetVariableResult > set_variables(const std::vector< SetVariableData > &set_variable_data_vector, const std::string &source)=0
Sets variables specified within set_variable_data_vector in the device model and returns the result.
virtual std::vector< GetVariableResult > get_variables(const std::vector< GetVariableData > &get_variable_data_vector)=0
Gets variables specified within get_variable_data_vector from the device model and returns the result...
virtual void on_variable_changed(const SetVariableData &set_variable_data)=0
Event handler that will update the variable internally when it has been changed on the fly.
Definition: provisioning.hpp:65
std::vector< GetVariableResult > get_variables(const std::vector< GetVariableData > &get_variable_data_vector) override
Gets variables specified within get_variable_data_vector from the device model and returns the result...
Definition: provisioning.cpp:119
std::map< SetVariableData, SetVariableResult > set_variables(const std::vector< SetVariableData > &set_variable_data_vector, const std::string &source) override
Sets variables specified within set_variable_data_vector in the device model and returns the result.
Definition: provisioning.cpp:140
void handle_message(const ocpp::EnhancedMessage< MessageType > &message) override
Handles the given message from the CSMS. This includes dispatching a CALLRESULT as a response to the ...
Definition: provisioning.cpp:67
void on_variable_changed(const SetVariableData &set_variable_data) override
Event handler that will update the variable internally when it has been changed on the fly.
Definition: provisioning.cpp:114
Definition: security.hpp:29
Definition: transaction.hpp:26
Contains a OCPP CallResult message.
Definition: call_types.hpp:105
Contains a OCPP Call message.
Definition: call_types.hpp:60
Contains a OCPP message in json form with additional information.
Definition: message_queue.hpp:54
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23
Definition: ocpp_types.hpp:898