blob: 54844ae3efb805c18f92c04bc1d782ffe52f09cc [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DIAGNOSTICS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_ROUTINE_SERVICE_H_
#define DIAGNOSTICS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_ROUTINE_SERVICE_H_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <base/callback.h>
#include <base/macros.h>
#include "diagnostics/routines/diag_routine.h"
#include "diagnostics/wilco_dtc_supportd/wilco_dtc_supportd_routine_factory.h"
#include "diagnostics/wilco_dtc_supportd/wilco_dtc_supportd_routine_factory_impl.h"
#include "wilco_dtc_supportd.pb.h" // NOLINT(build/include)
namespace diagnostics {
// The routine service is responsible for creating and managing diagnostic
// routines.
class WilcoDtcSupportdRoutineService final {
public:
using GetAvailableRoutinesToServiceCallback = base::Callback<void(
const std::vector<grpc_api::DiagnosticRoutine>& routines)>;
using RunRoutineToServiceCallback =
base::Callback<void(int uuid, grpc_api::DiagnosticRoutineStatus status)>;
using GetRoutineUpdateRequestToServiceCallback =
base::Callback<void(int uuid,
grpc_api::DiagnosticRoutineStatus status,
int progress_percent,
grpc_api::DiagnosticRoutineUserMessage user_message,
const std::string& output,
const std::string& status_message)>;
WilcoDtcSupportdRoutineService();
explicit WilcoDtcSupportdRoutineService(
WilcoDtcSupportdRoutineFactory* routine_factory);
~WilcoDtcSupportdRoutineService();
void GetAvailableRoutines(
const GetAvailableRoutinesToServiceCallback& callback);
void SetAvailableRoutinesForTesting(
const std::vector<grpc_api::DiagnosticRoutine>& available_routines);
void RunRoutine(const grpc_api::RunRoutineRequest& request,
const RunRoutineToServiceCallback& callback);
void GetRoutineUpdate(
int uuid,
grpc_api::GetRoutineUpdateRequest::Command command,
bool include_output,
const GetRoutineUpdateRequestToServiceCallback& callback);
private:
std::unique_ptr<WilcoDtcSupportdRoutineFactoryImpl> routine_factory_impl_;
WilcoDtcSupportdRoutineFactory* routine_factory_;
// Map from uuids to instances of diagnostics routines that have
// been started.
std::map<int, std::unique_ptr<DiagnosticRoutine>> active_routines_;
// Generator for uuids - currently, when we need a new uuids we
// just return next_id_, then increment next_id_.
int next_uuid_ = 1;
std::vector<grpc_api::DiagnosticRoutine> available_routines_{
grpc_api::ROUTINE_BATTERY, grpc_api::ROUTINE_BATTERY_SYSFS,
grpc_api::ROUTINE_URANDOM};
DISALLOW_COPY_AND_ASSIGN(WilcoDtcSupportdRoutineService);
};
} // namespace diagnostics
#endif // DIAGNOSTICS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_ROUTINE_SERVICE_H_