blob: eb076a189bb7d6be22e0a162c385b6782bd04b43 [file] [log] [blame] [edit]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RMAD_DAEMON_DAEMON_CALLBACK_H_
#define RMAD_DAEMON_DAEMON_CALLBACK_H_
#include <optional>
#include <string>
#include <base/functional/callback.h>
#include <base/functional/callback_helpers.h>
#include <base/memory/scoped_refptr.h>
#include "rmad/proto_bindings/rmad.pb.h"
#include "rmad/utils/futility_utils.h"
namespace rmad {
struct DiagnosticsAppInfo {
std::string swbn_path;
std::string crx_path;
};
using HardwareVerificationSignalCallback =
base::RepeatingCallback<void(const HardwareVerificationResult&)>;
using UpdateRoFirmwareSignalCallback =
base::RepeatingCallback<void(UpdateRoFirmwareStatus)>;
using CalibrationOverallSignalCallback =
base::RepeatingCallback<void(CalibrationOverallStatus)>;
using CalibrationComponentSignalCallback =
base::RepeatingCallback<void(CalibrationComponentStatus)>;
using ProvisionSignalCallback =
base::RepeatingCallback<void(const ProvisionStatus&)>;
using FinalizeSignalCallback =
base::RepeatingCallback<void(const FinalizeStatus&)>;
using WriteProtectSignalCallback = base::RepeatingCallback<void(bool)>;
using PowerCableSignalCallback = base::RepeatingCallback<void(bool)>;
using ExternalDiskSignalCallback = base::RepeatingCallback<void(bool)>;
using ExecuteMountAndWriteLogCallback = base::RepeatingCallback<void(
uint8_t,
const std::string&,
const std::string&,
const std::string&,
const std::string&,
base::OnceCallback<void(const std::optional<std::string>&)>)>;
using ExecuteMountAndCopyFirmwareUpdaterCallback =
base::RepeatingCallback<void(uint8_t, base::OnceCallback<void(bool)>)>;
using ExecuteMountAndCopyDiagnosticsAppCallback = base::RepeatingCallback<void(
uint8_t,
base::OnceCallback<void(const std::optional<DiagnosticsAppInfo>&)>)>;
using ExecuteRebootEcCallback =
base::RepeatingCallback<void(base::OnceCallback<void(bool)>)>;
using ExecuteRequestRmaPowerwashCallback =
base::RepeatingCallback<void(base::OnceCallback<void(bool)>)>;
using ExecuteRequestBatteryCutoffCallback =
base::RepeatingCallback<void(base::OnceCallback<void(bool)>)>;
using ExecuteGetFlashInfoCallback = base::RepeatingCallback<void(
base::OnceCallback<void(const std::optional<FlashInfo>&)>)>;
#define DECLARE_CALLBACK(type, var) \
public: \
type Get##type() const { \
return var; \
} \
void Set##type(type callback) { \
var = callback; \
} \
\
private: \
type var = base::DoNothing()
// A collection of callbacks for state handlers to use.
class DaemonCallback : public base::RefCounted<DaemonCallback> {
public:
DaemonCallback() = default;
protected:
friend class base::RefCounted<DaemonCallback>;
virtual ~DaemonCallback() = default;
// Callbacks as private members and their public getter/setter.
DECLARE_CALLBACK(HardwareVerificationSignalCallback,
hardware_verification_signal_callback);
DECLARE_CALLBACK(UpdateRoFirmwareSignalCallback,
update_ro_firmware_signal_callback_);
DECLARE_CALLBACK(CalibrationOverallSignalCallback,
calibration_overall_signal_callback_);
DECLARE_CALLBACK(CalibrationComponentSignalCallback,
calibration_component_signal_callback_);
DECLARE_CALLBACK(ProvisionSignalCallback, provision_signal_callback_);
DECLARE_CALLBACK(FinalizeSignalCallback, finalize_signal_callback_);
DECLARE_CALLBACK(WriteProtectSignalCallback, write_protect_signal_callback_);
DECLARE_CALLBACK(PowerCableSignalCallback, power_cable_signal_callback_);
DECLARE_CALLBACK(ExternalDiskSignalCallback, external_disk_signal_callback_);
DECLARE_CALLBACK(ExecuteMountAndWriteLogCallback,
execute_mount_and_write_log_callback_);
DECLARE_CALLBACK(ExecuteMountAndCopyFirmwareUpdaterCallback,
execute_mount_and_copy_firmware_updater_callback_);
DECLARE_CALLBACK(ExecuteMountAndCopyDiagnosticsAppCallback,
execute_mount_and_copy_diagnostics_app_callback_);
DECLARE_CALLBACK(ExecuteRebootEcCallback, execute_reboot_ec_callback_);
DECLARE_CALLBACK(ExecuteRequestRmaPowerwashCallback,
execute_request_rma_powerwash_callback_);
DECLARE_CALLBACK(ExecuteRequestBatteryCutoffCallback,
execute_request_battery_cutoff_callback_);
DECLARE_CALLBACK(ExecuteGetFlashInfoCallback,
execute_get_flash_name_callback_);
};
} // namespace rmad
#endif // RMAD_DAEMON_DAEMON_CALLBACK_H_