{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build - Build project",
      "type": "shell",
      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py build",
      "windows": {
        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}"
          }
        }
      },
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}"
        }
      },
      "problemMatcher": [
        {
          "owner": "cpp",
          "fileLocation": [
            "autoDetect",
            "${workspaceFolder}"
          ],
          "pattern": {
            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
          }
        }
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    },
    {
      "label": "Set ESP-IDF Target",
      "type": "shell",
      "command": "${command:espIdf.setTarget}",
      "problemMatcher": {
        "owner": "cpp",
        "fileLocation": [
          "autoDetect",
          "${workspaceFolder}"
        ],
        "pattern": {
          "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
          "file": 1,
          "line": 2,
          "column": 3,
          "severity": 4,
          "message": 5
        }
      }
    },
    {
      "label": "Clean - Clean the project",
      "type": "shell",
      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py fullclean",
      "windows": {
        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}"
          }
        }
      },
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}"
        }
      },
      "problemMatcher": [
        {
          "owner": "cpp",
          "fileLocation": [
            "autoDetect",
            "${workspaceFolder}"
          ],
          "pattern": {
            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
          }
        }
      ]
    },
    {
      "label": "Flash - Flash the device",
      "type": "shell",
      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.flashBaudRate} flash",
      "windows": {
        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.flashBaudRate}",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}"
          }
        }
      },
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}"
        }
      },
      "problemMatcher": [
        {
          "owner": "cpp",
          "fileLocation": [
            "autoDetect",
            "${workspaceFolder}"
          ],
          "pattern": {
            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
          }
        }
      ]
    },
    {
      "label": "Monitor: Start the monitor",
      "type": "shell",
      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} monitor",
      "windows": {
        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py -p ${config:idf.portWin} monitor",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}"
          }
        }
      },
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}"
        }
      },
      "problemMatcher": [
        {
          "owner": "cpp",
          "fileLocation": [
            "autoDetect",
            "${workspaceFolder}"
          ],
          "pattern": {
            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
          }
        }
      ],
      "dependsOn": "Flash - Flash the device"
    },
    {
      "label": "OpenOCD: Start openOCD",
      "type": "shell",
      "presentation": {
        "echo": true,
        "reveal": "never",
        "focus": false,
        "panel": "new"
      },
      "command": "openocd -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
      "windows": {
        "command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}"
          }
        }
      },
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}"
        }
      },
      "problemMatcher": {
        "owner": "cpp",
        "fileLocation": [
          "autoDetect",
          "${workspaceFolder}"
        ],
        "pattern": {
          "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
          "file": 1,
          "line": 2,
          "column": 3,
          "severity": 4,
          "message": 5
        }
      }
    },
    {
      "label": "adapter",
      "type": "shell",
      "command": "${config:idf.pythonBinPath}",
      "isBackground": true,
      "options": {
        "env": {
          "PATH": "${env:PATH}:${config:idf.customExtraPaths}",
          "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
        }
      },
      "problemMatcher": {
        "background": {
          "beginsPattern": "\bDEBUG_ADAPTER_STARTED\b",
          "endsPattern": "DEBUG_ADAPTER_READY2CONNECT",
          "activeOnStart": true
        },
        "pattern": {
          "regexp": "(\\d+)-(\\d+)-(\\d+)\\s(\\d+):(\\d+):(\\d+),(\\d+)\\s-(.+)\\s(ERROR)",
          "file": 8,
          "line": 2,
          "column": 3,
          "severity": 4,
          "message": 9
        }
      },
      "args": [
        "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter_main.py",
        "-e",
        "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
        "-s",
        "$OPENOCD_SCRIPTS",
        "-dn",
        "esp32",
        "-om",
        "connect_to_instance",
        "-t",
        "xtensa-esp32-elf-"

      ],
      "windows": {
        "command": "${config:idf.pythonBinPathWin}",
        "options": {
          "env": {
            "PATH": "${env:PATH};${config:idf.customExtraPaths}",
            "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
          }
        }
      }
    }
  ]
}