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

  # LCD is enabled by default
  # Boards BRD4166A, BRD2601B, BRD2703A and BRD4319A do not have a LCD so they disable it explicitly
  disable_lcd = false

  # Enable Buttons by default
  use_wstk_buttons = true

  # Enable LEDs on development board by default
  # Boards BRD4317A, BRD4316A and BRD4319A disable this explicitly
  use_wstk_leds = true

  # Boards BRD2703A and BRD4319A disable this explicitly
  use_external_flash = true

  # WIFI rcp boards options for wifi apps.
  use_wf200 = false
  use_rs9116 = false
  use_SiWx917 = false
  chip_enable_ble_rs911x = false

  wifi_soc = false

  #Disable MQTT by default
  enable_dic = false

  # Disable UART log forwarding by default
  sl_uart_log_output = false
}

declare_args() {
  # Enables LCD Qr Code on supported devices
  show_qr_code = !disable_lcd
}

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"

  # ThunderBoards don't have a LCD
  show_qr_code = false
  disable_lcd = true
} else if (silabs_board == "BRD4170A") {
  silabs_family = "efr32mg12"
  silabs_mcu = "EFR32MG12P433F1024GM68"
} else if (silabs_board == "BRD4325B") {
  silabs_family = "SiWx917"
  silabs_mcu = "EFR32MG12P432F1024GL125"
  disable_lcd = true
  show_qr_code = false
  wifi_soc = true
} 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"

  # ThunderBoards don't have a LCD,
  show_qr_code = false
  disable_lcd = true
} else if (silabs_board == "BRD2703A") {
  silabs_family = "efr32mg24"
  silabs_mcu = "EFR32MG24B020F1536IM48"

  # Explorer Kits do not have an external flash nor a LCD
  use_external_flash = false
  show_qr_code = false
  disable_lcd = true
} else if (silabs_board == "BRD4316A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240PB22VNA"

  # Board does not support LEDs and Buttons at the same time
  use_wstk_leds = false
} else if (silabs_board == "BRD4317A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240PB32VNA"

  # Board does not support LEDs and Buttons at the same time
  use_wstk_leds = false
} else if (silabs_board == "BRD4319A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240L022RNF"

  # Board does not support LEDs and Buttons at the same time
  use_wstk_leds = false

  # MGM240L do not have an external flash or LCD
  use_external_flash = false
  show_qr_code = false
  disable_lcd = true
} else if (silabs_board == "BRD2704A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240PB32VNA"

  # Explorer Kits do not have an external flash, buttons nor a LCD
  use_wstk_buttons = false
  use_external_flash = false
  show_qr_code = false
  disable_lcd = true
} else if (silabs_board == "BRD4318A") {
  silabs_family = "mgm24"
  silabs_mcu = "MGM240SD22VNA"

  use_wstk_leds = false
  use_external_flash = false
  show_qr_code = false
  disable_lcd = true
} 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, BRD2704A)")
  assert(false, "The board ${silabs_board} is unsupported")
}

# qr code cannot be true if lcd is disabled
assert(!(disable_lcd && show_qr_code))
