OVMS3-idf/tools/idf_py_actions
David Cermak 3b5c3d6521 idf.py: debug targets for easier execution of openocd, gdb, gdbui
Support for execution of asynchronous target, such as openocd, which
by default runs in the background, but if it's the only target idf.py
outputs the openocd in the console waiting for termination by user.

Supports also blocking commands gdb and gdbtui to start a debugging
session in an active console.

Supports running gdbgui running a UI debugging session in a browser
window, using the active console for other commands, such as openocd
or monitor.

Supports combining the debug targets in one action list, such as
idf.py openocd gdbgui monitor
2020-04-07 17:37:48 +02:00
..
__init__.py Add idf.py extensions and move core actions to separate files 2019-10-30 10:34:17 +01:00
constants.py tools: Force the order of cmake generators 2020-03-02 16:15:30 +01:00
core_ext.py idf.py: use underlying flash targets 2020-01-15 03:36:47 +00:00
debug_ext.py idf.py: debug targets for easier execution of openocd, gdb, gdbui 2020-04-07 17:37:48 +02:00
errors.py idf.py: debug targets for easier execution of openocd, gdb, gdbui 2020-04-07 17:37:48 +02:00
global_options.py Add idf.py extensions and move core actions to separate files 2019-10-30 10:34:17 +01:00
README.md Fix typo and naming format for extensions 2019-10-30 10:34:17 +01:00
serial_ext.py idf.py: debug targets for easier execution of openocd, gdb, gdbui 2020-04-07 17:37:48 +02:00
tools.py tools: fix idf.py to be able to select a generator for build 2020-03-06 10:41:09 +01:00

idf.py extensions

Python modules (subdirectories and files) in this directory named [your_extension]_ext will be loaded as idf.py extensions. If you want to provide extra extensions just provide ; separated list of directories with extensions in IDF_EXTRA_ACTIONS_PATH. Extensions will be loaded in alphanumeric order. Command line arguments parsing and extension mechanism is implemented on top of Click (versions >=5.0 are supported).

They should define a function action_extensions(base_actions, project_path) where:

  • base_actions - dictionary with actions that are already available for idf.py
  • project_path - working dir, may be defaulted to os.getcwd()

This function have to return a dict with 3 possible keys:

{
    # Additional options that will be available from id
    "global_options": [{
        "names": ["--option-name"],
        "help": "Help for option --option-name.",
    }],
    # List of functions that will have access to full app context, and can mangle with arguments
    "global_action_callbacks": [global_callback],
    # Additional subcommands for idf.py
    "actions": {
        "subcommand_name": {
            "callback": subcommand_callback,
            "help": "Help for subcommand.",
        },
    },
}

Where function global_callback(ctx, global_args, tasks) accepts 3 arguments:

  • ctx - Click context
  • global_args - dictionary of all available global arguments
  • tasks - list of Task objects

And subcommand_callback(subcommand_name, ctx, args) accepts 3 arguments:

  • subcommand_name - name of subcommand
  • ctx - Click context
  • args - list of command's arguments