# Copyright 2022 The Pigweed 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
#
#     https://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.

import("//build_overrides/pi_pico.gni")
import("//build_overrides/pigweed.gni")
import("$dir_pigweed_experimental/third_party/imgui/imgui.gni")
import("$dir_pw_build/target_types.gni")

declare_args() {
  # LCD width in pixels (ex. "320")
  pw_lcd_width = ""

  # LCD height in pixels (ex. "240")
  pw_lcd_height = ""

  # LCD backlight pin (ex "4", or "-1" if unused)
  pw_lcd_backlight = "-1"

  # LCD reset GPIO pin (ex "2", or "-1" if unused)
  pw_lcd_rst_pin_num = "-1"

  # GPIO Port of LCD CS pin (ex. "A")
  pw_lcd_cs_port_char = ""

  # GPIO Pin of LDD CS (ex. "10")
  pw_lcd_cs_pin_num = ""

  # GPIO Port of LCD DC pin (ex. "B")
  pw_lcd_dc_port_char = ""

  # GPIO Pin of LDD dc (ex. "11")
  pw_lcd_dc_pin_num = ""

  # SPI bus MISO pin (ex. "12", or "-1" if unusedsable)
  pw_spi_miso_pin_num = "-1"

  # SPI bus MOSI pin (ex. "13")
  pw_spi_mosi_pin_num = ""

  # SPI bus clock pin (ex. "14")
  pw_spi_clock_pin_num = ""
}

config("common_standard_flags") {
  cflags = [
    "-DLCD_WIDTH=" + pw_lcd_width,
    "-DLCD_HEIGHT=" + pw_lcd_height,
    "-DTFT_BL=" + pw_lcd_backlight,
    "-DTFT_CS=" + pw_lcd_cs_pin_num,
    "-DTFT_DC=" + pw_lcd_dc_pin_num,
    "-DTFT_RST=" + pw_lcd_rst_pin_num,
    "-DTFT_MISO=" + pw_spi_miso_pin_num,
    "-DTFT_MOSI=" + pw_spi_mosi_pin_num,
    "-DTFT_SCLK=" + pw_spi_clock_pin_num,
  ]
}

config("common_stm32_flags") {
  cflags = [
    "-DLCD_WIDTH=" + pw_lcd_width,
    "-DLCD_HEIGHT=" + pw_lcd_height,
    "-DLCD_BL=" + pw_lcd_backlight,
    "-DLCD_CS_PORT_CHAR=" + pw_lcd_cs_port_char,
    "-DLCD_CS_PIN_NUM=" + pw_lcd_cs_pin_num,
    "-DLCD_DC_PORT_CHAR=" + pw_lcd_dc_port_char,
    "-DLCD_DC_PIN_NUM=" + pw_lcd_dc_pin_num,
    "-DLCD_RST_PIN_NUM=" + pw_lcd_rst_pin_num,
  ]
}

config("common_host_flags") {
  cflags = [
    "-DLCD_WIDTH=" + pw_lcd_width,
    "-DLCD_HEIGHT=" + pw_lcd_height,
  ]
}

pw_source_set("stm32cube") {
  public_configs = [ ":common_stm32_flags" ]
  deps = [
    "$dir_pw_digital_io_stm32cube",
    "$dir_pw_display",
    "$dir_pw_display_driver_ili9341",
    "$dir_pw_spi_stm32cube",
    "$dir_pw_sync:borrow",
    "$dir_pw_sync:mutex",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_stm32cube.cc" ]
}

pw_source_set("stm32") {
  deps = [
    "$dir_pw_display_driver_null",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_stm32.cc" ]
}

pw_source_set("arduino") {
  public_configs = [ ":common_standard_flags" ]
  deps = [
    "$dir_pw_digital_io_arduino",
    "$dir_pw_display",
    "$dir_pw_display_driver_ili9341",
    "$dir_pw_spi_arduino",
    "$dir_pw_sync:borrow",
    "$dir_pw_sync:mutex",
    "$dir_pw_third_party/arduino:arduino_core_sources",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_arduino.cc" ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

pw_source_set("mimxrt595") {
  deps = [
    "$dir_pw_display_driver_null",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_mimxrt595.cc" ]
}

_pico_common_deps = [
  "$PICO_ROOT/src/common/pico_base",
  "$PICO_ROOT/src/common/pico_stdlib",
  "$PICO_ROOT/src/rp2_common/hardware_pwm",
  "$PICO_ROOT/src/rp2_common/hardware_spi",
  "$dir_pw_digital_io_pico",
  "$dir_pw_display",
  "$dir_pw_log",
  "$dir_pw_spi_pico",
  "$dir_pw_sync:borrow",
  "$dir_pw_sync:mutex",
  "//applications/app_common:app_common.facade",
]

pw_source_set("pico_ili9341") {
  public_configs = [ ":common_standard_flags" ]
  cflags = [ "-DDISPLAY_TYPE_ILI9341" ]
  deps = _pico_common_deps
  deps += [ "$dir_pw_display_driver_ili9341" ]
  sources = [ "common_pico.cc" ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

pw_source_set("pico_st7789") {
  public_configs = [ ":common_standard_flags" ]
  cflags = [ "-DDISPLAY_TYPE_ST7789" ]
  deps = _pico_common_deps
  deps += [ "$dir_pw_display_driver_st7789" ]
  sources = [ "common_pico.cc" ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

pw_source_set("pico_st7735") {
  public_configs = [ ":common_standard_flags" ]
  cflags = [ "-DDISPLAY_TYPE_ST7735" ]
  deps = _pico_common_deps
  deps += [ "$dir_pw_display_driver_st7735" ]
  sources = [ "common_pico.cc" ]
  remove_configs = [ "$dir_pw_build:strict_warnings" ]
}

pw_source_set("host_imgui") {
  public_configs = [ ":common_host_flags" ]
  deps = [
    "$dir_pw_display_driver_imgui",
    "$dir_pw_display_imgui",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_host_imgui.cc" ]
}

pw_source_set("host_null") {
  public_configs = [ ":common_host_flags" ]
  deps = [
    "$dir_pw_display",
    "$dir_pw_display_driver_null",
    "//applications/app_common:app_common.facade",
  ]
  sources = [ "common_host_null.cc" ]
}
