// Copyright 2018 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 INIT_CROSSYSTEM_H_
#define INIT_CROSSYSTEM_H_

#include <string>

// Light-weight interface to crossystem with std::string semantics.
class CrosSystem {
 public:
  virtual ~CrosSystem() {}

  // Name of property containing the position of the Developer Switch when the
  // device booted.
  static constexpr char kDevSwitchBoot[] = "devsw_boot";

  // Name of property containing the active main firmware.
  static constexpr char kMainFirmwareActive[] = "mainfw_act";

  // Name of property that signals a request to clear TPM owner on next reboot.
  static constexpr char kClearTpmOwnerRequest[] = "clear_tpm_owner_request";

  // Name of property that indicates if the current build is a debug build.
  static constexpr char kDebugBuild[] = "debug_build";

  // Reads a system property integer into |value_out|.
  //
  // Returns true on sucess
  virtual bool GetInt(const std::string& name, int* value_out) = 0;

  // Sets the system property integer |name| to |value|.
  //
  // Returns true on success.
  virtual bool SetInt(const std::string& name, int value) = 0;

  // Reads a system property string and stores it in |value_out|.
  //
  // Returns true on success.
  virtual bool GetString(const std::string& name, std::string* value_out) = 0;

  // Sets a system property string.
  //
  // The maximum length of the value accepted depends on the specific property.
  //
  // Returns true on success.
  virtual bool SetString(const std::string& name, const std::string& value) = 0;
};

#endif  // INIT_CROSSYSTEM_H_
