; Copyright 2022 TOKITA Hiroshi <tokita.hiroshi@fujitsu.com>
; SPDX-License-Identifier: Apache-2.0

GLOBAL &GDBPORT
GLOBAL &TERMPORT

;
; parse arguments
;
ENTRY %LINE &args
&command=STRing.SCANAndExtract("&args","command=","debug")
&elfFile=STRing.SCANAndExtract("&args","elfFile=","")
&gdbRemote=STRing.SCANAndExtract("&args","gdbRemote=","")
&termComPort=STRing.SCANAndExtract("&args","terminal=","")
&userScript=STRing.SCANAndExtract("&args","userScript=","")

IF "&command"=="flash"
(
  ; Execute the application and quit
  QUIT -1
)

IF "&elfFile"==""
(
  PRINT %ERROR "Missing ELF file path"
  PLIST
  STOP
  ENDDO
)

;
; process system-wide settings
;
IF OS.FILE("~~/system-settings.cmm")
  DO "~~/system-settings.cmm"

;
; CPU setup
;
SYStem.Down
IF PRACTICE.CoMmanD.AVAILable(SYStem.CPU.NANO33BLE)
  SYStem.CPU NANO33BLE
ELSE
  SYStem.CPU NRF52840QI

;
; RTOS setup
;
IF OS.FILE("~~/demo/arm/kernel/zephyr/v2-x/zephyr.t32")&&OS.FILE("~~/demo/arm/kernel/zephyr/v2-x/zephyr.men")
(
  TASK.CONFIG ~~/demo/arm/kernel/zephyr/v2-x/zephyr.t32
  MENU.ReProgram ~~/demo/arm/kernel/zephyr/v2-x/zephyr.men
)

;
; connect to the target
;
IF INTERFACE.GDB()
(
  IF ("&gdbRemote"=="")&&("&GDBPORT"!="")
    &gdbRemote="&GDBPORT"

  IF "&gdbRemote"!=""
  (
    PRINT "Use gdb remote: &gdbRemote"
  )
  ELSE
  (
    PRINT %ERROR "GDB Port not defined."
    PLIST
    STOP
    ENDDO
  )

  TITLE "TRACE32 PowerView front-end debugger for Nano 33 BLE (remote=&gdbRemote)"

  IF !SYStem.Up()
  (
    SYStem.PORT &gdbRemote
    Break.CONFIG.METHOD.Program Onchip
    SYStem.Option MMUSPACES ON

    ON ERROR CONTinue
    ERROR.RESet
    SYStem.Mode Attach
    ON ERROR nothing
    IF ERROR.OCCURRED()
    (
      PRINT %ERROR  "Error while connecting to the target."
      PLIST
      STOP
      ENDDO
    )
  )
)
ELSE
(
  SYStem.CONFIG.DEBUGPORTTYPE SWD
  SYStem.UP
)

;
; load ELF
;
Data.LOAD.Elf "&elfFile"

;
; Window initialization
;
IF ("&userScript"!="")&&FILE.EXIST("&userScript")
(
  DO "&userScript"
)
ELSE
(
  ; Setup minimal debug environment
  WinCLEAR
  SETUP.Var.%SpotLight
  WinPOS 0. 0. 120. 30.
  List.auto
  WinPOS 125. 0. 80. 10.
  Frame.view
  WinPOS 125. 18.
  Register.view /SpotLight

  IF "&termComPort"!=""
  (
    SUBTITLE " &termComPort"
    TERM.RESet
    TERM.METHOD COM &termComPort 115200 8 NONE 1STOP NONE
    TERM.Mode VT100
    WinPOS 104.88 35.286 91. 24. 0. 0. W001
    TERM.view
    SUBTITLE ""
  )
)

ENDDO
