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

syntax = "proto3";

package device;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/device";

import "device/config_id.proto";

// These are the distinct configs combinations that will constitue a ChromeOS
// device.

// Next tag: 21
message Config {

  // Required. Unique ID of the device config.
  ConfigId id = 1;

  // NOTE: anytime a proto field is removed, make sure to add them to these
  // "reserved" lists below (see
  // https://developers.google.com/protocol-buffers/docs/proto3#reserved)

  // For removing `carrier = 2`
  reserved 2;
  reserved "carrier";

  // Next tag: 8
  enum FormFactor {
    FORM_FACTOR_UNSPECIFIED = 0;
    FORM_FACTOR_CLAMSHELL = 1;
    FORM_FACTOR_CONVERTIBLE = 2;
    FORM_FACTOR_DETACHABLE = 3;
    FORM_FACTOR_CHROMEBASE = 4;
    FORM_FACTOR_CHROMEBOX = 5;
    FORM_FACTOR_CHROMEBIT = 6;
    FORM_FACTOR_CHROMESLATE = 7;
  }

  FormFactor form_factor = 3;

  // e.g: "haswell", "tegra",...
  string gpu_family = 4;

  // Next Tag: 3
  enum Graphics {
    GRAPHICS_UNSPECIFIED = 0;
    GRAPHICS_GL = 1;
    GRAPHICS_GLE = 2;
  }

  Graphics graphics = 5;

  // Next Tag: 12
  enum HardwareFeature {
    HARDWARE_FEATURE_UNSPECIFIED = 0;
    HARDWARE_FEATURE_BLUETOOTH = 1;
    HARDWARE_FEATURE_FLASHROM = 2;
    // Indicate if the device support audio hotwording, an audio listening module
    // included with Google Chrome and Chromium to support Google Assistant.
    // https://chromeos.google.com/partner/dlm/docs/latest-requirements/chromebook.html#audio-hotwording-always-on-listening
    HARDWARE_FEATURE_HOTWORDING = 3;
    HARDWARE_FEATURE_INTERNAL_DISPLAY = 4;
    // Indicate if the device has support for lucid sleep (a connected lower power state,
    // in which the device should still has some network communications)
    // https://chromeos.google.com/partner/dlm/docs/p-hardware-specs/lucidsleep.html
    HARDWARE_FEATURE_LUCID_SLEEP = 5;
    HARDWARE_FEATURE_WEBCAM = 6;
    HARDWARE_FEATURE_STYLUS = 7;
    HARDWARE_FEATURE_TOUCHPAD = 8;
    HARDWARE_FEATURE_TOUCHSCREEN = 9;
    // Indicate if the device has detachable keyboard.
    // https://chromeos.google.com/partner/dlm/docs/latest-requirements/detachable.html#keyboard-external
    HARDWARE_FEATURE_DETACHABLE_KEYBOARD = 10;
    // Indicate if the device has fingerprint sensor.
    HARDWARE_FEATURE_FINGERPRINT = 11;
  }

  // If a hardware feature isn't specified, one can assume that it doesn't
  // exist on the device.
  repeated HardwareFeature hardware_features = 6;

  // Indicate the device's power supply.
  // Next Tag: 3
  enum PowerSupply {
    POWER_SUPPLY_UNSPECIFIED = 0;
    POWER_SUPPLY_BATTERY = 1;
    POWER_SUPPLY_AC_ONLY = 2;
  }
  PowerSupply power = 8;

  // Next Tag: 6
  enum Storage {
    STORAGE_UNSPECIFIED = 0;
    STORAGE_SSD = 1;
    STORAGE_HDD = 2;
    STORAGE_MMC = 3;
    STORAGE_NVME = 4;
    STORAGE_UFS = 5;
  }
  // Indicate the device's storage type.
  Storage storage = 9;

  // Next tag: 13
  enum VideoAcceleration {
    VIDEO_UNSPECIFIED = 0;
    VIDEO_ACCELERATION_H264 = 1;
    VIDEO_ACCELERATION_ENC_H264 = 2;
    VIDEO_ACCELERATION_VP8 = 3;
    VIDEO_ACCELERATION_ENC_VP8 = 4;
    VIDEO_ACCELERATION_VP9 = 5;
    VIDEO_ACCELERATION_ENC_VP9 = 6;
    VIDEO_ACCELERATION_VP9_2 = 7;
    VIDEO_ACCELERATION_ENC_VP9_2 = 8;
    VIDEO_ACCELERATION_H265 = 9;
    VIDEO_ACCELERATION_ENC_H265 = 10;
    VIDEO_ACCELERATION_MJPG = 11;
    VIDEO_ACCELERATION_ENC_MJPG = 12;
  }
  repeated VideoAcceleration video_acceleration_supports = 10;

  // Next Tag: 33
  enum SOC {
    SOC_UNSPECIFIED = 0;
    // Aka AML-Y
    SOC_AMBERLAKE_Y = 1;
    SOC_APOLLO_LAKE = 2;
    SOC_BAY_TRAIL = 3;
    SOC_BRASWELL = 4;
    SOC_BROADWELL = 5;
    SOC_CANNON_LAKE_Y = 6;
    SOC_COMET_LAKE_U = 7;
    SOC_EXYNOS_5250 = 8;
    SOC_EXYNOS_5420 = 9;
    // Aka GLK
    SOC_GEMINI_LAKE = 10;
    SOC_HASWELL = 11;
    SOC_ICE_LAKE_Y = 12;
    SOC_IVY_BRIDGE = 13;
    SOC_KABYLAKE_U = 14;
    // KabyLake U refresh
    SOC_KABYLAKE_U_R = 15;
    SOC_KABYLAKE_Y = 16;
    SOC_MT8173 = 17;
    SOC_MT8176 = 18;
    SOC_MT8183 = 19;
    SOC_PICASSO = 20;
    SOC_PINE_TRAIL = 21;
    SOC_RK3288 = 22;
    SOC_RK3399 = 23;
    SOC_SANDY_BRIDGE = 24;
    SOC_SDM845 = 25;
    SOC_SKYLAKE_U = 26;
    SOC_SKYLAKE_Y = 27;
    SOC_STONEY_RIDGE = 28;
    SOC_TEGRA_K1 = 29;
    SOC_WHISKEY_LAKE_U = 30;
    SOC_SC7180 = 31;
    SOC_JASPER_LAKE = 32;
  }

  SOC soc = 11;

  // Full email address for TAMs responsible for device
  repeated string tam = 12;

  // Full email address for Google EEs responsible for device
  repeated string ee = 13;

  // Next Tag: 6
  enum ODM {
    ODM_UNSPECIFIED = 0;
    ODM_QUANTA = 1;
    ODM_BITLAND = 2;
    ODM_SAMSUNG = 3;
    ODM_PEGATRON = 4;
    ODM_COMPAL = 5;
  }

  // ODM for device
  ODM odm = 14;

  // Group email address for this device's odm contact in buganizer (@google.com)
  string odm_email_group = 15;

  enum OEM {
    OEM_UNSPECIFIED = 0;
    OEM_ACER = 1;
    OEM_DELL = 2;
    OEM_SAMSUNG = 3;
    OEM_HP = 4;
    OEM_LENOVO = 5;
    OEM_ASUS = 6;
    OEM_NEC = 7;
  }

  // OEM for device
  OEM oem = 16;

  // Group email address for this device's oem contact in buganizer (@google.com)
  string oem_email_group = 17;

  // Group email address for this device's SoC contact in buganizer (@google.com)
  string soc_email_group = 18;

  // A bit field used by firmware to make decisions. The definition of this
  // firmware configuration field is per firmware build. This does not have
  // 1st-class definitions for values in the top-level configuration proto since
  // each firmware build target can appropriate the bits within this 32-bit
  // field differently. Each firmware build can vary significantly in the
  // configuration space that needs customization.
  uint32 firmware_configuration = 19;

  enum Architecture {
    ARCHITECTURE_UNDEFINED = 0;
    X86 = 1;
    X86_64 = 2;
    ARM = 3;
    ARM64 = 4;
  }
  Architecture cpu = 20;
}

// Message contains all ChromeOS device configs.
message AllConfigs {
  repeated Config configs = 1;
}
