; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[platformio]
default_envs = view
src_dir = firmware/src
lib_dir = firmware/lib
include_dir = firmware/include
test_dir = firmware/test
data_dir = firmware/data

[base_config]
platform = espressif32@3.4
framework = arduino
monitor_speed = 921600
monitor_flags = 
	--eol=CRLF
	--echo
	--filter=esp32_exception_decoder
upload_speed = 921600
lib_deps =
    infineon/TLV493D-Magnetic-Sensor @ 1.0.3
    bxparks/AceButton @ 1.9.1
    bakercp/PacketSerial @ 1.4.0
    nanopb/Nanopb @ 0.4.6   ; Ideally this would reference the nanopb submodule, but that would require
                            ; everyone to check out submodules to just compile, so we use the library
                            ; registry for the runtime. The submodule is available for manually updating
                            ; the pre-compiled (checked in) .pb.h/c files when proto files change, but is
                            ; otherwise not used during application firmware compilation.
build_flags =
    -DMONITOR_SPEED=921600

[env:view]
extends = base_config
board = esp32doit-devkit-v1
board_build.partitions = default_ffat.csv
lib_deps =
  ${base_config.lib_deps}
  askuric/Simple FOC @ 2.2.0
  bodmer/TFT_eSPI@2.4.25
  fastled/FastLED @ 3.5.0
  bogde/HX711 @ 0.7.5
  adafruit/Adafruit VEML7700 Library @ 1.1.1

build_flags =
  ${base_config.build_flags}
  ; Display enabled: 1=enable, 0=disable
  -DSK_DISPLAY=1
  ; Display orientation: 0=usb bottom, 2=usb top
  -DSK_DISPLAY_ROTATION=0
  ; LEDs enabled: 1=enable, 0=disable
  -DSK_LEDS=1
  ; Number of LEDs
  -DNUM_LEDS=8
  ; Strain-gauge press input enabled: 1=enable, 0=disable
  -DSK_STRAIN=1
  ; Ambient light sensor (VEML7700) enabled: 1=enable (display/LEDs match ambient brightness), 0=disable (100% brightness all the time)
  -DSK_ALS=1
  ; Use MT6701 magnetic encoder
  -DSENSOR_MT6701=1
  ; Invert direction of angle sensor (motor direction is detected relative to angle sensor as part of the calibration procedure)
  -DSK_INVERT_ROTATION=1

  -DMOTOR_WANZHIDA_ONCE_TOP=1

  ; Pin configurations
  -DPIN_UH=26
  -DPIN_UL=25
  -DPIN_VH=27
  -DPIN_VL=32
  -DPIN_WH=12
  -DPIN_WL=33
  -DPIN_BUTTON_NEXT=-1
  -DPIN_BUTTON_PREV=-1
  -DPIN_SDA=15
  -DPIN_SCL=8
  -DPIN_MT_DATA=37
  -DPIN_MT_CLOCK=13
  -DPIN_MT_CSN=14
  -DPIN_LED_DATA=7
  -DPIN_LCD_BACKLIGHT=19

  -DDESCRIPTION_FONT=Roboto_Thin_24
  -DDESCRIPTION_Y_OFFSET=20
  -DVALUE_OFFSET=30
  -DDRAW_ARC=0

  ; TFT_eSPI setup
  -DUSER_SETUP_LOADED=1
  -DGC9A01_DRIVER=1
  -DCGRAM_OFFSET=1
  -DTFT_WIDTH=240
  -DTFT_HEIGHT=240
  -DTFT_MISO=-1
  -DTFT_MOSI=5
  -DTFT_SCLK=20
  -DTFT_CS=21
  -DTFT_DC=22
  -DTFT_RST=4
  -DTFT_BL=-1
  -DLOAD_GLCD=1
  -DLOAD_GFXFF=1
  -DSPI_FREQUENCY=40000000

  ; Reduce loop task stack size (only works on newer IDF Arduino core)
  ; -DARDUINO_LOOP_STACK_SIZE=2048

  -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG

  ; FastLED setup
  ; Modify the default unusable pin mask to allow GPIO 7 (allowed to use on ESP32-PICO-V3-02)
  ; Unusable bits: 6, 8, 9, 10, 20
  ; (0ULL | _FL_BIT(6) | _FL_BIT(8) | _FL_BIT(9) | _FL_BIT(10) | _FL_BIT(20))
  -DFASTLED_UNUSABLE_PIN_MASK=0x100740LL
  ; 0~39 except from 24, 28~31 are valid
  ; (0xFFFFFFFFFFULL & ~(0ULL | _FL_BIT(24) | _FL_BIT(28) | _FL_BIT(29) | _FL_BIT(30) | _FL_BIT(31)))
  -DSOC_GPIO_VALID_GPIO_MASK=0xFF0EFFFFFF
  ; GPIO >= 34 are input only
  ; (SOC_GPIO_VALID_GPIO_MASK & ~(0ULL | _FL_BIT(34) | _FL_BIT(35) | _FL_BIT(36) | _FL_BIT(37) | _FL_BIT(38) | _FL_BIT(39)))
  -DSOC_GPIO_VALID_OUTPUT_GPIO_MASK=0x30EFFFFFF


[env:nanofoc]
extends = base_config
platform = espressif32@6.3.1
board = adafruit_feather_esp32s3
board_build.partitions = firmware/partitions-4MB-fat.csv
lib_deps =
  ${base_config.lib_deps}
  askuric/Simple FOC@^2.3.0
  bodmer/TFT_eSPI@2.5.0

build_flags =
  ${base_config.build_flags}
  ; Display enabled: 1=enable, 0=disable
  -DSK_DISPLAY=0
  ; Display orientation: 0=usb bottom, 2=usb top
  -DSK_DISPLAY_ROTATION=0
  ; LEDs enabled: 1=enable, 0=disable
  -DSK_LEDS=0
  ; Number of LEDs
  -DNUM_LEDS=8
  ; Strain-gauge press input enabled: 1=enable, 0=disable
  -DSK_STRAIN=0
  ; Ambient light sensor (VEML7700) enabled: 1=enable (display/LEDs match ambient brightness), 0=disable (100% brightness all the time)
  -DSK_ALS=0

  -DSENSOR_MAQ430=1
  -DPIN_MAQ_SCK=6
  -DPIN_MAQ_MISO=7
  -DPIN_MAQ_MOSI=5
  -DPIN_MAQ_SS=4
  ; Invert direction of angle sensor (motor direction is detected relative to angle sensor as part of the calibration procedure)
  -DSK_INVERT_ROTATION=1

  -DMOTOR_MAD2804=1

  ; Pin configurations
  -DPIN_UH=21
  -DPIN_UL=12
  -DPIN_VH=14
  -DPIN_VL=10
  -DPIN_WH=13
  -DPIN_WL=11
  -DPIN_BUTTON_NEXT=-1
  -DPIN_BUTTON_PREV=-1
  -DPIN_LED_DATA=7
  -DPIN_LCD_BACKLIGHT=08

  -DPIO_FRAMEWORK_ARDUINO_ENABLE_CDC=1
  -DUSBCON=1
  -DARDUINO_USB_CDC_ON_BOOT=1
  -DARDUINO_USB_MODE=1
  -DCORE_DEBUG_LEVEL=2
  -DHSPI_SPEED=100000 ; MA/MAQ Nominal SPI Speed in Mhz (HSPI)
  -DVSPI_SPEED=400000 ; TFt Nominal SPI Speed in Mhz (VSPI)

  ; Reduce loop task stack size (only works on newer IDF Arduino core)
  ; -DARDUINO_LOOP_STACK_SIZE=2048
