# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

declare_args() {
  # EFR32 board used
  efr32_board = ""
}

if (efr32_board == "") {
  efr32_board = getenv("EFR32_BOARD")
}

assert(efr32_board != "", "efr32_board must be specified")

# Differentiate between boards
# - BRD4304A / SLWSTK6000B / MGM12P Module / 2.4GHz@19dBm
# - BRD4161A / SLWSTK6000B / Wireless Starter Kit / 2.4GHz@19dBm
# - BRD4163A / SLWSTK6000B / Dual band Wireless Starter Kit / 2.4GHz@19dBm, 868MHz@19dBm
# - BRD4164A / SLWSTK6000B / Dual band Wireless Starter Kit / 2.4GHz@19dBm, 915MHz@19dBm
# - BRD4166A / SLTB004A    / Thunderboard Sense 2 / 2.4GHz@10dBm
# - BRD4170A / SLWSTK6000B / Multiband Wireless Starter Kit / 2.4GHz@19dBm, 915MHz@19dBm, 868MHz@19dBm
# - BRD4180A / SLWSTK6006A / MG21 Module / 2.4GHz@20dBm
# - BRD4186A / SLWSTK6006A  / MG24 / Wireless Starter Kit / 2.4GHz@10dBm
# - BRD4187A / SLWSTK6006A  / MG24 / Wireless Starter Kit / 2.4GHz@20dBm

board_defines = []

if (efr32_board == "BRD4304A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P432F1024GM48"
  enable_fem = true
  board_defines += [ "PAL_RTCC_CLOCK_LFRCO" ]
} else if (efr32_board == "BRD4161A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P432F1024GL125"
} else if (efr32_board == "BRD4163A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P433F1024GL125"
} else if (efr32_board == "BRD4164A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P433F1024GL125"
} else if (efr32_board == "BRD4166A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P332F1024GL125"
} else if (efr32_board == "BRD4170A") {
  efr32_family = "efr32mg12"
  efr32_mcu = "EFR32MG12P433F1024GM68"
} else if (efr32_board == "BRD4180A") {
  assert(
      false,
      "The board ${efr32_board} not currentlt supported due to RAM limitation")
  efr32_family = "efr32mg21"
  efr32_mcu = "EFR32MG21A020F1024IM32"
} else if (efr32_board == "BRD4186A" || efr32_board == "BRD4187A") {
  efr32_family = "efr32mg24"
  efr32_mcu = "EFR32MG24A010F1536GM48"
} else {
  print(
      "Please provide a valid value for EFR32_BOARD env variable (currently supported BRD4304A, BRD4161A, BRD4163A, BRD4164A BRD4166A, BRD4170A, BRD4186A, BRD4187A)")
  assert(false, "The board ${efr32_board} is unsupported as for now.")
}
