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

load("//config/util/component.star", "comp")
load("//config/util/design.star", "design")
load("//config/util/hw_topology.star", "hw_topo")
load("//config/util/program.star", program_util = "program")

_FAKE_SOC = comp.create_soc_model(
    family = comp.create_soc_family(name = "FAKE_FAMILY"),
    model = "FAKE_MODEL",
    cores = 2,
    id = "FAKE_MODEL_2",
)

_SOC_MODELS = [_FAKE_SOC]

_FAKE_BT_COMP = comp.create_bt("0001", "0002", "0003")

_BT_COMPS = [_FAKE_BT_COMP]

_QUALIFIED_COMPS = _SOC_MODELS + _BT_COMPS

_QUAL_CONSTRAINTS = comp.create_quals(
    [comp.id for comp in _QUALIFIED_COMPS],
    comp.qual_status.QUALIFIED,
)

_FW_MASKS = struct(
    DB = 0x0000000F,
    CAMERA = 0x000000F0,
    SENSOR = 0x00000F00,
    WIFI_SAR_ID = 0x0000F000,
    TOUCH = 0x00010000,
)

_FIRMWARE_CONFIGURATION_SEGMENTS = [
    program_util.create_firmware_configuration_segment("Daughter board", _FW_MASKS.DB),
    program_util.create_firmware_configuration_segment("Camera", _FW_MASKS.CAMERA),
    program_util.create_firmware_configuration_segment("Sensor", _FW_MASKS.SENSOR),
    program_util.create_firmware_configuration_segment("Intel wifi sar id", _FW_MASKS.WIFI_SAR_ID),
    program_util.create_firmware_configuration_segment("Touch controller", _FW_MASKS.TOUCH),
]

_FEATURE_CONSTRAINTS = design.create_constraints(
    hw_topo.create_features(),
)  # Default for now

_SIGNER_BRAND_CONFIGS = program_util.create_signer_configs_by_brand(
    {
        "WLAA": "KEYD",  # White label A
        "WLBB": "KEYE",  # White label B
        "WLCC": "KEYF",  # White label C
        "WLZZ": "DEFAULT",  # White label default
    },
)

_SIGNER_DESIGN_CONFIGS = program_util.create_signer_configs_by_design(
    {
        "FAKE_REF_DESIGN": "DEFAULT",
        "PROJECT_A": "KEYA",  # Follow up design A
        "PROJECT_B": "KEYB",  # Follow up design B
        "PROJECT_C": "KEYC",  # Follow up design C
        "PROJECT_BOX": "KEYBX",  # Follow up design BOX
    },
)

_SIGNER_CONFIG = _SIGNER_BRAND_CONFIGS + _SIGNER_DESIGN_CONFIGS

_FAKE = program_util.create(
    name = "FAKE_PROGRAM",
    component_quals = _QUAL_CONSTRAINTS,
    constraints = _FEATURE_CONSTRAINTS,
    firmware_configuration_segments = _FIRMWARE_CONFIGURATION_SEGMENTS,
    device_signer_configs = _SIGNER_CONFIG,
    mosys_platform_name = "fake",
)

program = struct(
    fake = _FAKE,
    fw_masks = _FW_MASKS,
    components = _QUALIFIED_COMPS,
    bluetooth_component = _FAKE_BT_COMP,
)
