ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
firmware_update.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 {
9// Formward declarations.
10struct FunctionalBlockContext;
11class AvailabilityInterface;
12class SecurityInterface;
13
14struct UpdateFirmwareRequest;
15struct UpdateFirmwareResponse;
16
17// Typedef
18typedef std::function<UpdateFirmwareResponse(const UpdateFirmwareRequest& request)> UpdateFirmwareRequestCallback;
19typedef std::function<void()> AllConnectorsUnavailableCallback;
20
22public:
23 virtual ~FirmwareUpdateInterface() = default;
24
25 virtual void on_firmware_update_status_notification(int32_t request_id,
26 const FirmwareStatusEnum& firmware_update_status) = 0;
27 virtual void on_firmware_status_notification_request() = 0;
28};
29
31private: // Members
32 const FunctionalBlockContext& context;
33 AvailabilityInterface& availability;
34 SecurityInterface& security;
35
36 UpdateFirmwareRequestCallback update_firmware_request_callback;
37 std::optional<AllConnectorsUnavailableCallback> all_connectors_unavailable_callback;
38
39 FirmwareStatusEnum firmware_status;
40 // The request ID in the last firmware update status received
41 std::optional<int32_t> firmware_status_id;
42 // The last firmware status which will be posted before the firmware is installed.
43 FirmwareStatusEnum firmware_status_before_installing = FirmwareStatusEnum::SignatureVerified;
44
45public:
46 FirmwareUpdate(const FunctionalBlockContext& functional_block_context, AvailabilityInterface& availability,
47 SecurityInterface& security, UpdateFirmwareRequestCallback update_firmware_request_callback,
48 std::optional<AllConnectorsUnavailableCallback> all_connectors_unavailable_callback);
49 void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
50 void on_firmware_update_status_notification(int32_t request_id,
51 const FirmwareStatusEnum& firmware_update_status) override;
52 void on_firmware_status_notification_request() override;
53
54private: // Functions
55 // Functional Block L: Firmware management
56 void handle_firmware_update_req(Call<UpdateFirmwareRequest> call);
57
62 void change_all_connectors_to_unavailable_for_firmware_update();
63
65 void restore_all_connector_states();
66};
67} // namespace ocpp::v2
Definition: availability.hpp:21
Definition: firmware_update.hpp:21
Definition: firmware_update.hpp:30
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: firmware_update.cpp:37
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Definition: security.hpp:29
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