# 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() {
  # TI SimpleLink board used
  ti_simplelink_board = ""
}

if (ti_simplelink_board == "") {
  ti_simplelink_board = getenv("TI_SIMPLELINK_BOARD")
}

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

# Differentiate between boards
#
# | Development Kit    | Device Family   | SoC        |                     |
# | -----------------  | --------------- | ---------- | ------------------- |
# | CC1352R1_LAUNCHXL  | cc13x2_26x2     | cc1352r1f3 | Thread MTD + no BLE |
# | CC2652R1_LAUNCHXL  | cc13x2_26x2     | cc2652r1f3 | Thread MTD + no BLE |
# | LP_CC2652R7        | cc13x2x7_26x2x7 | cc2652r1f7 | Thread FTD + BLE    |
# | CC134P10_6_LAUNCHXL| cc13x4_26x4     | cc1354p10  | Thread FTD + BLE    |
# | CC3220SF_LAUNCHXL  | cc32xx          | cc3220SF   | Wi-Fi               |
# | CC3235SF_LAUNCHXL  | cc32xx          | cc3235SF   | Wi-Fi               |

# XXX: Can we do an array with a case statement?
if (ti_simplelink_board == "CC1352R1_LAUNCHXL") {
  ti_simplelink_device_family = "cc13x2_26x2"
  ti_simplelink_soc_family = "cc13x2"
  ti_simplelink_isa = "m4f"

  # set -DDeviceFamily_CC13X2?
  ti_simplelink_soc = "cc1352r1f3"
  ti_simplelink_bim_name = "cc1352r1lp"
} else if (ti_simplelink_board == "CC2652R1_LAUNCHXL") {
  ti_simplelink_device_family = "cc13x2_26x2"
  ti_simplelink_soc_family = "cc26x2"
  ti_simplelink_isa = "m4f"

  # set -DDeviceFamily_CC26X2?
  ti_simplelink_soc = "cc2652r1f3"
  ti_simplelink_bim_name = "cc2652r1lp"
} else if (ti_simplelink_board == "LP_EM_CC1354P10_6") {
  ti_simplelink_device_family = "cc13x4_26x4"
  ti_simplelink_soc_family = "cc13x4"
  ti_simplelink_isa = "m33f"
  ti_simplelink_soc = "cc1354p10"
  ti_simplelink_bim_name = "cc1354p10"
} else if (ti_simplelink_board == "LP_CC2652R7") {
  ti_simplelink_device_family = "cc13x2x7_26x2x7"
  ti_simplelink_soc_family = "cc26x2"
  ti_simplelink_isa = "m4f"

  # set -DDeviceFamily_CC26X2?
  ti_simplelink_soc = "cc2652r1f7"
  ti_simplelink_bim_name = "cc2652r7lp"
} else if (ti_simplelink_board == "CC3220SF_LAUNCHXL") {
  ti_simplelink_device_family = "cc32xx"
  ti_simplelink_soc_family = "cc32xx"

  # set -DDeviceFamily_CC3220
  ti_simplelink_soc = "cc32xxSF"
} else if (ti_simplelink_board == "CC3235SF_LAUNCHXL") {
  ti_simplelink_device_family = "cc32xx"
  ti_simplelink_soc_family = "cc32xx"

  # set -DDeviceFamily_CC3220
  ti_simplelink_soc = "cc32xxSF"
} else {
  print("Please provide a valid value for TI_SIMPLELINK_BOARD env variable")
  assert(false, "The board ${ti_simplelink_board} is unsupported as for now.")
}
