// Copyright 2020 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.

#include <memory>
#include <string>

#include <base/memory/ptr_util.h>
#include <chromeos/ec/ec_commands.h>

#include "biod/ec_command.h"
#include "biod/fp_flashprotect_command.h"

namespace biod {

std::unique_ptr<FpFlashProtectCommand> FpFlashProtectCommand::Create(
    const uint32_t flags, const uint32_t mask) {
  struct ec_params_flash_protect fp_req;
  fp_req.flags = flags;
  fp_req.mask = mask;

  // Using new to access non-public constructor. See https://abseil.io/tips/134.
  auto cmd = base::WrapUnique(new FpFlashProtectCommand);
  cmd->SetReq(fp_req);
  return cmd;
}

/**
 * @return string names of set flags
 */
std::string FpFlashProtectCommand::ParseFlags(uint32_t flags) {
  std::string output;
  if (flags & EC_FLASH_PROTECT_RO_AT_BOOT) {
    output += "RO_AT_BOOT  ";
  }
  if (flags & EC_FLASH_PROTECT_RO_NOW) {
    output += "RO_NOW  ";
  }
  if (flags & EC_FLASH_PROTECT_ALL_NOW) {
    output += "ALL_NOW  ";
  }
  if (flags & EC_FLASH_PROTECT_GPIO_ASSERTED) {
    output += "GPIO_ASSERTED  ";
  }
  if (flags & EC_FLASH_PROTECT_ERROR_STUCK) {
    output += "ERROR_STUCK  ";
  }
  if (flags & EC_FLASH_PROTECT_ERROR_INCONSISTENT) {
    output += "ERROR_INCONSISTENT  ";
  }
  if (flags & EC_FLASH_PROTECT_ALL_AT_BOOT) {
    output += "ALL_AT_BOOT  ";
  }
  if (flags & EC_FLASH_PROTECT_RW_AT_BOOT) {
    output += "RW_AT_BOOT  ";
  }
  if (flags & EC_FLASH_PROTECT_RW_NOW) {
    output += "RW_NOW  ";
  }
  if (flags & EC_FLASH_PROTECT_ROLLBACK_AT_BOOT) {
    output += "ROLLBACK_AT_BOOT  ";
  }
  if (flags & EC_FLASH_PROTECT_ROLLBACK_NOW) {
    output += "ROLLBACK_NOW  ";
  }

  return output;
}

}  // namespace biod
