# 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
  silabs_board = ""
}

if (silabs_board == "") {
  silabs_board = getenv("SILABS_BOARD")
}

assert(silabs_board != "", "silabs_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 (silabs_board == "BRD4304A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P432F1024GM48"
  enable_fem = true
  board_defines += [ "PAL_RTCC_CLOCK_LFRCO" ]
} else if (silabs_board == "BRD4161A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P432F1024GL125"
} else if (silabs_board == "BRD4162A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P332F1024GL125"
} else if (silabs_board == "BRD4163A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P433F1024GL125"
} else if (silabs_board == "BRD4164A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P433F1024GL125"
} else if (silabs_board == "BRD4166A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P332F1024GL125"
} else if (silabs_board == "BRD4170A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P433F1024GM68"
} else if (silabs_board == "BRD4325A") {
  silabs_family = "SiWx917"
  silabs_mcu = "EFR32MG12P432F1024GL125"
} else if (silabs_board == "BRD4180A") {
  assert(
      false,
      "The board ${silabs_board} not currently supported due to RAM limitation")
  silabs_family = "efr32mg21"
  silabs_mcu = "EFR32MG21A020F1024IM32"
} else if (silabs_board == "BRD4186A" || silabs_board == "BRD4187A") {
  print("RevA is deprecated, We suggest using BRD4186C (rev C)")
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24A010F1536GM48"
} else if (silabs_board == "BRD4186C") {
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24B210F1536IM48"
} else if (silabs_board == "BRD4187C") {
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24B220F1536IM48"
} else if (silabs_board == "BRD2601B") {
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24B310F1536IM48"
} else if (silabs_board == "BRD2703A") {
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24B020F1536IM48"
} else if (silabs_board == "BRD4316A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240PB22VNA"
} else if (silabs_board == "BRD4317A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240PB32VNA"
} else if (silabs_board == "BRD4319A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240L022RNF"
} else {
  print(
      "Please provide a valid value for SILABS_BOARD env variable (currently supported BRD4304A, BRD4161A, BRD4163A, BRD4164A BRD4166A, BRD4170A, BRD4186C, BRD4187C, BRD2601B, BRD2703A, BRD4317A)")
  assert(false, "The board ${silabs_board} is unsupported")
}
