From 78ee1a18f25d649fadbca86690047f15579f4edf Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Thu, 7 Dec 2023 16:14:50 +0100 Subject: [PATCH 1/5] Add mergeflash target which merges all partitions into a single file. --- Sming/Components/esptool/component.mk | 7 +++++++ Sming/component.mk | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/Sming/Components/esptool/component.mk b/Sming/Components/esptool/component.mk index 934bbf0805..3f82c8e219 100644 --- a/Sming/Components/esptool/component.mk +++ b/Sming/Components/esptool/component.mk @@ -51,6 +51,13 @@ define WriteFlash ) endef +define MergeFlash + $(if $1,\ + $(info MergeFlash $1) \ + $(call ESPTOOL_EXECUTE,merge_bin -o $2 $(flashimageoptions) $(subst =, ,$1)) \ + ) +endef + # Verify flash against file contents # $1 -> List of `Offset=File` chunks define VerifyFlash diff --git a/Sming/component.mk b/Sming/component.mk index c0e95cf705..c40fb6b002 100644 --- a/Sming/component.mk +++ b/Sming/component.mk @@ -141,6 +141,11 @@ else ifneq ($(SMING_ARCH),Host) $(TERMINAL) endif +.PHONY: mergeflash +mergeflash: all ##Merge the boot loader and all defined partition images into a single flash file + $(Q) $(call CheckPartitionChunks,$(FLASH_PARTITION_CHUNKS)) + $(call MergeFlash,$(FLASH_BOOT_CHUNKS) $(FLASH_MAP_CHUNK) $(FLASH_PARTITION_CHUNKS),$(FW_BASE)/app-merged.bin) + .PHONY: verifyflash verifyflash: ##Read all flash sections and verify against source $(Q) $(call CheckPartitionChunks,$(FLASH_PARTITION_CHUNKS)) From afb020faf287b8ef9e0e50c72a10b6bce8267a54 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Fri, 8 Dec 2023 12:26:02 +0100 Subject: [PATCH 2/5] Added wokwi-support. Make vs-code workspace with ENABLE_WORKI=1 . --- Tools/ide/vscode/setup.py | 27 +++++++++++++++++--- Tools/ide/vscode/template/extensions.json | 3 +++ Tools/ide/vscode/template/wokwi/diagram.json | 18 +++++++++++++ Tools/ide/vscode/template/wokwi/wokwi.toml | 4 +++ 4 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 Tools/ide/vscode/template/extensions.json create mode 100644 Tools/ide/vscode/template/wokwi/diagram.json create mode 100644 Tools/ide/vscode/template/wokwi/wokwi.toml diff --git a/Tools/ide/vscode/setup.py b/Tools/ide/vscode/setup.py index a9b2aceb2f..b16bb28d91 100644 --- a/Tools/ide/vscode/setup.py +++ b/Tools/ide/vscode/setup.py @@ -3,7 +3,7 @@ # Sming hardware configuration tool # -import os, sys, copy +import os, sys, copy, shutil appPath = os.path.dirname(os.path.realpath(__file__)) libPath = appPath + '/../common/' @@ -103,6 +103,27 @@ def update_workspace(): schemas += [schema] save_json(ws, filename) +def update_wokwi(): + filename = '.vscode/extensions.json' + extensions = load_json(filename, False) + template = load_template('extensions.json', appPath) + if extensions is None: + extensions = template.copy() + save_json(extensions, filename) + return + + extensions["recommendations"] = extensions["recommendations"] + list(set(template["recommendations"]) - set(extensions["recommendations"])) + save_json(extensions, filename) + + if not os.path.exists('diagram.json'): + diagrams_template = load_template('wokwi/diagram.json', appPath) + save_json(diagrams_template, 'diagram.json') + + if not os.path.exists('wokwi.toml'): + source = open(appPath + '/template/wokwi/wokwi.toml', 'r').read() + source = env.resolve(source) + open('wokwi.toml', 'w+').write(source) + def main(): if not env['SMING_HOME'] or not env['SMING_ARCH']: sys.exit(1) @@ -113,9 +134,9 @@ def main(): update_intellisense() update_tasks() update_launch() + if env.get('ENABLE_WOKWI'): + update_wokwi() update_workspace() - - if __name__ == '__main__': main() diff --git a/Tools/ide/vscode/template/extensions.json b/Tools/ide/vscode/template/extensions.json new file mode 100644 index 0000000000..b7d371a050 --- /dev/null +++ b/Tools/ide/vscode/template/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["wokwi.wokwi-vscode"] +} diff --git a/Tools/ide/vscode/template/wokwi/diagram.json b/Tools/ide/vscode/template/wokwi/diagram.json new file mode 100644 index 0000000000..05533b6286 --- /dev/null +++ b/Tools/ide/vscode/template/wokwi/diagram.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "author": "Sming Framework", + "editor": "wokwi", + "parts": [ + { + "type": "wokwi-esp32-devkit-v1", + "id": "esp", + "top": 0, + "left": 0, + "attrs": {} + } + ], + "connections": [ + ["esp:TX0", "$serialMonitor:RX", "", []], + ["esp:RX0", "$serialMonitor:TX", "", []] + ] +} diff --git a/Tools/ide/vscode/template/wokwi/wokwi.toml b/Tools/ide/vscode/template/wokwi/wokwi.toml new file mode 100644 index 0000000000..a3ce4bf54f --- /dev/null +++ b/Tools/ide/vscode/template/wokwi/wokwi.toml @@ -0,0 +1,4 @@ +[wokwi] +version=1 +firmware='${FW_BASE}/app-merged.bin' +elf='${TARGET_OUT_0}' From 4231a8ca9acd3e1cd9c0eb88b98e8d5a0c0f2501 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Fri, 8 Dec 2023 14:05:00 +0100 Subject: [PATCH 3/5] Add Wokwi documentation. --- docs/source/experimental/index.rst | 1 + docs/source/experimental/wokwi.rst | 49 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 docs/source/experimental/wokwi.rst diff --git a/docs/source/experimental/index.rst b/docs/source/experimental/index.rst index 00e19e17d5..0a5859ac45 100644 --- a/docs/source/experimental/index.rst +++ b/docs/source/experimental/index.rst @@ -7,3 +7,4 @@ Experimental Stuff httpserver-ssl signed-ota + wokwi diff --git a/docs/source/experimental/wokwi.rst b/docs/source/experimental/wokwi.rst new file mode 100644 index 0000000000..296a1f97d1 --- /dev/null +++ b/docs/source/experimental/wokwi.rst @@ -0,0 +1,49 @@ +**************** +Simulator: Wokwi +**************** + +.. highlight:: bash + +* At the moment Sming and Wokwi have experimenta support for the Esp32 architecture. +* Only VS Code IDE is supported +* The Esp32 simulator lacks certain features and may encounter failures; hence, it is recommended for use with simple applications. + +Wokwi Support into VS Code +========================== + +To integrate Wokwi support into your VS Code, run the following command from your application's root directory:: + + make ide-vscode ENABLE_WOKWI=1 SMING_ARCH=Esp32 + +Install the recommended extensions +---------------------------------- + +Ensure that you have installed the newly recommended extensions. If none appear, manually install the ``wokwi.wokwi-vscode`` extension. + +Merge all partitions to a single flash file +------------------------------------------- + +From the root directory of your application, run the following command to consolidate all partitions for the simulator and flash them into a single file:: + + make mergeflash SMING_ARCH=Esp32 + +Example Usage +============= + +Basic_Blink +----------- + +The Basic_Blink sample can be compiled and executed directly on a simulator before deploying it to a physical microcontroller. +Follow the commands below to get started:: + + cd $SMING_ARCH/../samples/Basic_Blink + make ide-vscode ENABLE_WOKWI=1 SMING_ARCH=Esp32 + make mergedflash + +Once the compilation is complete, open the folder in VS Code, install the recommended extensions, and either open the ``diagram.json`` file or press F1 and type ``Wokwi``. +From the options, choose to start the Wokwi simulator. + +Diagram Editor +============== +The ``diagram.json`` file, which includes elements and their connections, can be edited on the Wokwi official website __. +You can add new elements such as extra LEDs or servos. Ensure to copy the modified contents of the diagram.json from the website to your local environment. \ No newline at end of file From 928d9afefedfcb187ca58bd74931bf602705466a Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Mon, 11 Dec 2023 13:37:44 +0100 Subject: [PATCH 4/5] Add Wokwi debug support. --- Tools/ide/vscode/setup.py | 67 +++++++++++--------- Tools/ide/vscode/template/wokwi/launch.json | 18 ++++++ Tools/ide/vscode/template/wokwi/wokwi.toml | 1 + docs/source/experimental/wokwi-debug.jpg | Bin 0 -> 70195 bytes docs/source/experimental/wokwi.rst | 20 ++++-- 5 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 Tools/ide/vscode/template/wokwi/launch.json create mode 100644 docs/source/experimental/wokwi-debug.jpg diff --git a/Tools/ide/vscode/setup.py b/Tools/ide/vscode/setup.py index b16bb28d91..39b60d4bd4 100644 --- a/Tools/ide/vscode/setup.py +++ b/Tools/ide/vscode/setup.py @@ -3,7 +3,7 @@ # Sming hardware configuration tool # -import os, sys, copy, shutil +import os, sys, copy appPath = os.path.dirname(os.path.realpath(__file__)) libPath = appPath + '/../common/' @@ -58,36 +58,46 @@ def update_launch(): filename = '.vscode/launch.json' launch = load_json(filename, False) template = load_template('launch.json', appPath) + if env.get('ENABLE_WOKWI'): + wokwi_template = load_template('wokwi/launch.json', appPath) + template["configurations"].extend(wokwi_template["configurations"]) if launch is None: launch = template.copy() configurations = get_property(launch, 'configurations', []) - config_name = "%s GDB" % env['SMING_ARCH'] - config = find_object(configurations, config_name) - template_config = find_object(template['configurations'], config_name) - if template_config is None: - print("Warning: Template launch configuration '%s' not found" % config_name) - elif not config is None: - configurations.remove(config) - config = template_config.copy() - configurations.append(config) - - if config is None: - return - config['miDebuggerPath'] = find_tool(env['GDB']) - dbgargs = "-x ${env:SMING_HOME}/Arch/%s/Components/gdbstub/gdbcmds" % env['SMING_ARCH'] - if env['SMING_ARCH'] == 'Host': - args = [] - args += env['CLI_TARGET_OPTIONS'].split() - args += ["--"] - args += env['HOST_PARAMETERS'].split() - config['args'] = args - else: - if not env.isWsl(): - dbgargs += " -b %s" % env.resolve('${COM_SPEED_GDB}') - config['miDebuggerServerAddress'] = env.resolve('${COM_PORT_GDB}') - config['miDebuggerArgs'] = dbgargs - config['program'] = "${workspaceFolder}/" + env.resolve('${TARGET_OUT_0}') + wokwi_config_name = "Wokwi GDB" + config_names = ["%s GDB" % env['SMING_ARCH']] + if env.get('ENABLE_WOKWI'): + config_names.append(wokwi_config_name) + for config_name in config_names: + config = find_object(configurations, config_name) + template_config = find_object(template['configurations'], config_name) + if template_config is None: + print("Warning: Template launch configuration '%s' not found" % config_name) + elif not config is None: + configurations.remove(config) + config = template_config.copy() + configurations.append(config) + + if config is None: + return + + config['miDebuggerPath'] = find_tool(env['GDB']) + dbgargs = "-x ${env:SMING_HOME}/Arch/%s/Components/gdbstub/gdbcmds" % env['SMING_ARCH'] + if env['SMING_ARCH'] == 'Host': + args = [] + args += env['CLI_TARGET_OPTIONS'].split() + args += ["--"] + args += env['HOST_PARAMETERS'].split() + config['args'] = args + else: + if not env.isWsl(): + dbgargs += " -b %s" % env.resolve('${COM_SPEED_GDB}') + if config_name != wokwi_config_name: + config['miDebuggerServerAddress'] = env.resolve('${COM_PORT_GDB}') + if config_name != wokwi_config_name: + config['miDebuggerArgs'] = dbgargs + config['program'] = "${workspaceFolder}/" + env.resolve('${TARGET_OUT_0}') save_json(launch, filename) @@ -111,7 +121,6 @@ def update_wokwi(): extensions = template.copy() save_json(extensions, filename) return - extensions["recommendations"] = extensions["recommendations"] + list(set(template["recommendations"]) - set(extensions["recommendations"])) save_json(extensions, filename) @@ -123,7 +132,7 @@ def update_wokwi(): source = open(appPath + '/template/wokwi/wokwi.toml', 'r').read() source = env.resolve(source) open('wokwi.toml', 'w+').write(source) - + def main(): if not env['SMING_HOME'] or not env['SMING_ARCH']: sys.exit(1) diff --git a/Tools/ide/vscode/template/wokwi/launch.json b/Tools/ide/vscode/template/wokwi/launch.json new file mode 100644 index 0000000000..81bb464108 --- /dev/null +++ b/Tools/ide/vscode/template/wokwi/launch.json @@ -0,0 +1,18 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Wokwi GDB", + "type": "cppdbg", + "request": "launch", + "program": "", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": true, + "MIMode": "gdb", + "miDebuggerServerAddress": "localhost:3333" + } + ] +} diff --git a/Tools/ide/vscode/template/wokwi/wokwi.toml b/Tools/ide/vscode/template/wokwi/wokwi.toml index a3ce4bf54f..f54dca4f23 100644 --- a/Tools/ide/vscode/template/wokwi/wokwi.toml +++ b/Tools/ide/vscode/template/wokwi/wokwi.toml @@ -2,3 +2,4 @@ version=1 firmware='${FW_BASE}/app-merged.bin' elf='${TARGET_OUT_0}' +gdbServerPort=3333 diff --git a/docs/source/experimental/wokwi-debug.jpg b/docs/source/experimental/wokwi-debug.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11c2380b0416164443df798083f0b728af7a5eeb GIT binary patch literal 70195 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 W6b){A{0`n(x&X;krQO1Rm;W1WSNi|} literal 0 HcmV?d00001 diff --git a/docs/source/experimental/wokwi.rst b/docs/source/experimental/wokwi.rst index 296a1f97d1..cabbc5bd25 100644 --- a/docs/source/experimental/wokwi.rst +++ b/docs/source/experimental/wokwi.rst @@ -27,8 +27,8 @@ From the root directory of your application, run the following command to consol make mergeflash SMING_ARCH=Esp32 -Example Usage -============= +Usage +===== Basic_Blink ----------- @@ -43,7 +43,19 @@ Follow the commands below to get started:: Once the compilation is complete, open the folder in VS Code, install the recommended extensions, and either open the ``diagram.json`` file or press F1 and type ``Wokwi``. From the options, choose to start the Wokwi simulator. +Debugging +========= + +Running the Basic_Blink sample in the simulator enables you to debug it directly in VS Code. +Set a breakpoint in the ``init`` function in the Basic_Blink ``app/application.cpp`` file. +Press F1 and select "Start Simulator and Wait for Debugger." In the Launch configurations, choose "Wokwi GDB" and click the play button. +This initiates a new debugging session, allowing you to debug the code running in the simulator. + +.. image:: wokwi-debug.jpg + :height: 192px + Diagram Editor ============== -The ``diagram.json`` file, which includes elements and their connections, can be edited on the Wokwi official website __. -You can add new elements such as extra LEDs or servos. Ensure to copy the modified contents of the diagram.json from the website to your local environment. \ No newline at end of file + +The ``diagram.json`` file, which includes elements and their connections, can be edited on the `Wokwi official website `__. +You can add new elements such as extra LEDs or servos. Ensure to copy the modified contents of the diagram.json from the website to your local environment. From 13e061d9bbeb0c40712e49d72d526a4654ddd6d9 Mon Sep 17 00:00:00 2001 From: Slavey Karadzhov Date: Tue, 12 Dec 2023 11:43:03 +0100 Subject: [PATCH 5/5] Move wokwi specific templates to Tools/ide/vscode/template/wokwi/. --- Tools/ide/vscode/setup.py | 2 +- Tools/ide/vscode/template/{ => wokwi}/extensions.json | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename Tools/ide/vscode/template/{ => wokwi}/extensions.json (100%) diff --git a/Tools/ide/vscode/setup.py b/Tools/ide/vscode/setup.py index 39b60d4bd4..eda0924702 100644 --- a/Tools/ide/vscode/setup.py +++ b/Tools/ide/vscode/setup.py @@ -116,7 +116,7 @@ def update_workspace(): def update_wokwi(): filename = '.vscode/extensions.json' extensions = load_json(filename, False) - template = load_template('extensions.json', appPath) + template = load_template('wokwi/extensions.json', appPath) if extensions is None: extensions = template.copy() save_json(extensions, filename) diff --git a/Tools/ide/vscode/template/extensions.json b/Tools/ide/vscode/template/wokwi/extensions.json similarity index 100% rename from Tools/ide/vscode/template/extensions.json rename to Tools/ide/vscode/template/wokwi/extensions.json