ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
remote_transaction_control.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 EvseInterface;
11
12class TransactionInterface;
13class SmartChargingInterface;
14class MeterValuesInterface;
15class AvailabilityInterface;
16class FirmwareUpdateInterface;
17class SecurityInterface;
18class ReservationInterface;
19class ProvisioningInterface;
20
21struct UnlockConnectorRequest;
22struct RequestStartTransactionRequest;
23struct RequestStopTransactionRequest;
24struct TriggerMessageRequest;
25struct UnlockConnectorResponse;
26
27typedef std::function<UnlockConnectorResponse(const int32_t evse_id, const int32_t connecor_id)>
28 UnlockConnectorCallback;
29typedef std::function<RequestStartStopStatusEnum(const RequestStartTransactionRequest& request,
30 const bool authorize_remote_start)>
31 RemoteStartTransactionCallback;
32typedef std::function<RequestStartStopStatusEnum(const int32_t evse_id, const ReasonEnum& stop_reason)>
33 StopTransactionCallback;
34
36public:
37 virtual ~RemoteTransactionControlInterface() = default;
38};
39
41public:
42 RemoteTransactionControl(const FunctionalBlockContext& functional_block_context, TransactionInterface& transaction,
43 SmartChargingInterface& smart_charging, MeterValuesInterface& meter_values,
44 AvailabilityInterface& availability, FirmwareUpdateInterface& firmware_update,
45 SecurityInterface& security, ReservationInterface* reservation,
46 ProvisioningInterface& provisioning, UnlockConnectorCallback unlock_connector_callback,
47 RemoteStartTransactionCallback remote_start_transaction_callback,
48 StopTransactionCallback stop_transaction_callback,
49 std::atomic<RegistrationStatusEnum>& registration_status,
50 std::atomic<UploadLogStatusEnum>& upload_log_status,
51 std::atomic<int32_t>& upload_log_status_id);
52 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
53
54private: // Members
55 const FunctionalBlockContext& context;
56
57 TransactionInterface& transaction;
58 SmartChargingInterface& smart_charging;
59 MeterValuesInterface& meter_values;
60 AvailabilityInterface& availability;
61 FirmwareUpdateInterface& firmware_update;
62 SecurityInterface& security;
63 ReservationInterface* reservation;
64 ProvisioningInterface& provisioning;
65
66 UnlockConnectorCallback unlock_connector_callback;
67 RemoteStartTransactionCallback remote_start_transaction_callback;
68 StopTransactionCallback stop_transaction_callback;
69
70 std::atomic<RegistrationStatusEnum>& registration_status;
71 std::atomic<UploadLogStatusEnum>& upload_log_status;
72 std::atomic<int32_t>& upload_log_status_id;
73
74private: // Functions
75 /* OCPP message handlers */
76
77 // Function Block F: Remote transaction control
78 void handle_unlock_connector(Call<UnlockConnectorRequest> call);
79 void handle_remote_start_transaction_request(Call<RequestStartTransactionRequest> call);
80 void handle_remote_stop_transaction_request(Call<RequestStopTransactionRequest> call);
81 void handle_trigger_message(Call<TriggerMessageRequest> call);
82
83 // Helper functions
90 bool is_evse_connector_available(EvseInterface& evse) const;
91
99 ReservationCheckStatus is_evse_reserved_for_other(EvseInterface& evse, const IdToken& id_token,
100 const std::optional<IdToken>& group_id_token) const;
101};
102} // namespace ocpp::v2
Definition: availability.hpp:21
Definition: evse.hpp:27
Definition: firmware_update.hpp:21
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: provisioning.hpp:36
Definition: remote_transaction_control.hpp:35
Definition: remote_transaction_control.hpp:40
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: remote_transaction_control.cpp:55
Definition: reservation.hpp:21
Definition: security.hpp:29
Definition: smart_charging.hpp:70
Definition: transaction.hpp:26
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:36