// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package chromiumos.config.api.software;

import "chromiumos/build/api/factory.proto";
import "chromiumos/build/api/firmware_config.proto";
import "chromiumos/build/api/system_image.proto";
import "chromiumos/config/api/design_config_id.proto";
import "chromiumos/config/api/resource_config.proto";
import "chromiumos/config/api/software/audio_config.proto";
import "chromiumos/config/api/software/bluetooth_config.proto";
import "chromiumos/config/api/software/camera_config.proto";
import "chromiumos/config/api/software/disk_layout.proto";
import "chromiumos/config/api/software/firmware_info.proto";
import "chromiumos/config/api/software/health_config.proto";
import "chromiumos/config/api/software/nnpalm_config.proto";
import "chromiumos/config/api/software/power_config.proto";
import "chromiumos/config/api/software/rma_config.proto";
import "chromiumos/config/api/software/ui_config.proto";
import "chromiumos/config/api/software/usb_config.proto";
import "chromiumos/config/api/wifi_config.proto";
import "chromiumos/config/public_replication/public_replication.proto";

option go_package = "go.chromium.org/chromiumos/config/go/api/software";

// Contains all of the hardware-design-specific configuration that can be
// updated via new software builds/releases.
//
// During manufacturing, the SoftwareConfigId will be set for a given device,
// which will subsequently determine what SoftwareConfig shall be selected from
// the current software-build installed on the device.
//
// SoftwareConfig payloads can be shared across different
// hardware-design-configs, if the software payloads are the same.
//
// NEXT ID: 25
message SoftwareConfig {
  // Configures fields of AudioConfig that are made public.
  chromiumos.config.public_replication.PublicReplication public_replication =
      12;

  // Defines the hardware design config this software config supports.
  DesignConfigId design_config_id = 7;

  // Scanning config used to determine the DesignConfigId
  DesignConfigId.ScanConfig id_scan_config = 8;

  // Defines firmware version pinning details (for non-development workflows).
  chromiumos.build.api.FirmwareConfig firmware = 3;

  // TODO(shapiroc): Remove once configs are migrated to firmware_build_targets
  // This establishes consistent naming so the difference between build targets,
  // build version pinning, and build metadata is clear (versus Config catch
  // all naming).
  chromiumos.build.api.FirmwareBuildConfig firmware_build_config = 9;
  chromiumos.build.api.Firmware.BuildTargets firmware_build_targets = 16;
  chromiumos.build.api.SystemImage.BuildTarget system_build_target = 13;
  chromiumos.build.api.Factory.BuildTarget factory_build_target = 14;

  BluetoothConfig bluetooth_config = 4;

  PowerConfig power_config = 5;

  ResourceConfig resource_config = 19;

  repeated AudioConfig audio_configs = 10;

  WifiConfig wifi_config = 11;

  HealthConfig health_config = 18;

  CameraConfig camera_config = 15;

  UiConfig ui_config = 17;

  UsbConfig usb_config = 20;

  NnpalmConfig nnpalm_config = 21;

  RmaConfig rma_config = 22;

  FirmwareInfo firmware_info = 23;

  DiskLayout disk_layout = 24;

  reserved 1, 2, 6;
}
