summaryrefslogtreecommitdiff
path: root/sw/ideScripts/updateLaunchConfig.py
diff options
context:
space:
mode:
authorStijn Kuipers <stijnkuipers@gmail.com>2023-06-29 16:26:07 +0200
committerStijn Kuipers <stijnkuipers@gmail.com>2023-06-29 16:26:07 +0200
commitfb5a321dd7c2848128b04b306f3e1e59c87a3f70 (patch)
treea8ef6273f9f331ebb1971a9baf20a8c897955612 /sw/ideScripts/updateLaunchConfig.py
parentbae7568fd4dd0676b370be8548c7ec95d6521ba1 (diff)
downloadplinky-fb5a321dd7c2848128b04b306f3e1e59c87a3f70.tar.gz
Initial Filedump
Tadaaa!!
Diffstat (limited to 'sw/ideScripts/updateLaunchConfig.py')
-rwxr-xr-xsw/ideScripts/updateLaunchConfig.py198
1 files changed, 198 insertions, 0 deletions
diff --git a/sw/ideScripts/updateLaunchConfig.py b/sw/ideScripts/updateLaunchConfig.py
new file mode 100755
index 0000000..5930c02
--- /dev/null
+++ b/sw/ideScripts/updateLaunchConfig.py
@@ -0,0 +1,198 @@
+'''
+Update/generate 'launch.json' file in .vscode subfolder.
+'''
+import os
+import json
+
+import utilities as utils
+import templateStrings as tmpStr
+
+import updatePaths as pth
+import updateBuildData as build
+
+__version__ = utils.__version__
+
+
+class LaunchConfigurations():
+ def __init__(self):
+ self.bStr = build.BuildDataStrings()
+
+ def checkLaunchFile(self):
+ '''
+ Check if 'launch.json' file exists. If it does, check if it is a valid JSON file.
+ If it doesn't exist, create new according to template.
+ '''
+ if utils.pathExists(utils.launchPath):
+ # file exists, check if it loads OK
+ try:
+ with open(utils.launchPath, 'r') as launchFile:
+ json.load(launchFile)
+
+ print("Existing 'launch.json' file found.")
+ return
+
+ except Exception as err:
+ errorMsg = "Invalid 'launch.json' file. Creating backup and new one.\n"
+ errorMsg += "Possible cause: invalid json format or comments (not supported by this scripts). Error:\n"
+ errorMsg += str(err)
+ print(errorMsg)
+
+ utils.copyAndRename(utils.launchPath, utils.launchBackupPath)
+
+ self.createLaunchFile()
+
+ else: # 'launch.json' file does not exist jet, create it according to template string
+ self.createLaunchFile()
+
+ def createLaunchFile(self):
+ '''
+ Create fresh 'launch.json' file.
+ '''
+ try:
+ with open(utils.launchPath, 'w') as launchFile:
+ data = json.loads(tmpStr.launchFileTemplate)
+ dataToWrite = json.dumps(data, indent=4, sort_keys=False)
+
+ launchFile.seek(0)
+ launchFile.truncate()
+ launchFile.write(dataToWrite)
+
+ print("New 'launch.json' file created.")
+
+ except Exception as err:
+ errorMsg = "Exception error creating new 'launch.json' file:\n"
+ errorMsg += str(err)
+ utils.printAndQuit(errorMsg)
+
+ def getLaunchData(self):
+ '''
+ Get data from current 'launch.json' file.
+ File existance is previoulsy checked in 'checkLaunchFile()'.
+ '''
+ with open(utils.launchPath, 'r') as launchFile:
+ data = json.load(launchFile)
+
+ return data
+
+ def overwriteLaunchFile(self, data):
+ '''
+ Overwrite existing 'launch.json' file with new data.
+ '''
+ try:
+ with open(utils.launchPath, 'r+') as launchFile:
+ launchFile.seek(0)
+ launchFile.truncate()
+ dataToWrite = json.dumps(data, indent=4, sort_keys=False)
+ launchFile.write(dataToWrite)
+
+ print("'launch.json' file updated!")
+
+ except Exception as err:
+ errorMsg = "Exception error overwriting 'launch.json' file:\n"
+ errorMsg += str(err)
+ utils.printAndQuit(errorMsg)
+
+ def addOrReplaceLaunchConfiguration(self, data, launchData):
+ '''
+ Check wether launch with this "name" already exists. If it doesn't, create new launch configuration, overwrite otherwise.
+ '''
+ thisConfigurationName = launchData["name"]
+
+ configurationExist = False
+ listOfConfigurations = data["configurations"]
+ for configurationIndex, config in enumerate(listOfConfigurations):
+ if config["name"] == thisConfigurationName:
+ # launch with this name already exist, replace it's content
+ data["configurations"][configurationIndex] = launchData
+ configurationExist = True
+
+ if not configurationExist:
+ data["configurations"].append(launchData)
+
+ return data
+
+ def addAllLaunchConfigurations(self, launchData):
+ '''
+ Merge and return all combined launch configuration data.
+ '''
+ launchCfg = self.getDebugLaunchConfig()
+ launchData = self.addOrReplaceLaunchConfiguration(launchData, launchCfg)
+
+ launchCfg = self.getRunPythonLaunchConfig()
+ launchData = self.addOrReplaceLaunchConfiguration(launchData, launchCfg)
+
+ # TODO USER: User can add other launch configurations here
+ # - copy any of getXLaunchConfig() functions below, edit
+ # - add this function here as other launch configurations above
+
+ return launchData
+
+ ########################################################################################################################
+
+ ########################################################################################################################
+ def getDebugLaunchConfig(self):
+ '''
+ Create/repair 'Cortex debug' launch configuration.
+ '''
+ configurationData = """
+ {
+ "name": "will be replaced with templateStrings string",
+ "type": "cortex-debug",
+ "request": "launch",
+ "servertype": "openocd",
+ "cwd": "${workspaceFolder}",
+ "executable": "will be replaced with path from buildData.json",
+ "svdFile": "will be replaced with path from buildData.json",
+ "configFiles": ["will be replaced with path from buildData.json"],
+ "preLaunchTask": "will be replaced with templateStrings string"
+ }
+ """
+ jsonConfigurationData = json.loads(configurationData)
+
+ buildData = build.BuildData().getBuildData()
+
+ jsonConfigurationData["name"] = tmpStr.launchName_Debug
+ jsonConfigurationData["executable"] = buildData[self.bStr.targetExecutablePath]
+ jsonConfigurationData["svdFile"] = buildData[self.bStr.stm32SvdPath]
+ jsonConfigurationData["configFiles"] = [buildData[self.bStr.openOcdInterfacePath]]
+ jsonConfigurationData["configFiles"].extend(buildData[self.bStr.openOcdConfig])
+ jsonConfigurationData["preLaunchTask"] = tmpStr.taskName_build
+
+ return jsonConfigurationData
+
+ def getRunPythonLaunchConfig(self):
+ '''
+ Create 'Debug current Python file' launch configuration.
+ '''
+ configurationData = """
+ {
+ "name": "Debug current Python file",
+ "type": "python",
+ "request": "launch",
+ "cwd": "${workspaceFolder}",
+ "program": "${file}",
+ "console": "integratedTerminal"
+ }
+ """
+ jsonConfigurationData = json.loads(configurationData)
+
+ return jsonConfigurationData
+
+
+########################################################################################################################
+if __name__ == "__main__":
+ utils.verifyFolderStructure()
+
+ paths = pth.UpdatePaths()
+ bData = build.BuildData()
+ launch = LaunchConfigurations()
+
+ # build data (update tools paths if neccessary)
+ buildData = bData.prepareBuildData()
+
+ # create taks file
+ launch.checkLaunchFile()
+ launchData = launch.getLaunchData()
+ launchData = launch.addAllLaunchConfigurations(launchData)
+
+ launch.overwriteLaunchFile(launchData)