All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Naveen Saini" <naveen.kumar.saini@intel.com>
To: Andrei Gherzan <andrei@gherzan.com>,
	"yocto@lists.yoctoproject.org" <yocto@lists.yoctoproject.org>
Cc: Andrei Gherzan <andrei.gherzan@huawei.com>
Subject: Re: [yocto] [meta-zephy][PATCH 13/14] zephyr-flash-pyocd.bbclass: Implement configurable probe IDs to program
Date: Tue, 16 Feb 2021 10:14:41 +0000	[thread overview]
Message-ID: <821237702e094666bca3ed61b1f6d455@intel.com> (raw)
In-Reply-To: <20210215112003.2025053-13-andrei@gherzan.com>

Thanks Andrei for adding support for v2.5-rc4 and re-structuring.

Could you fix a whitespace in this patch ? Other patches looks good to me.

Later I will fix subject-prefix meta-zephyr typo in README. 

Regards,
Naveen

> -----Original Message-----
> From: yocto@lists.yoctoproject.org <yocto@lists.yoctoproject.org> On
> Behalf Of Andrei Gherzan
> Sent: Monday, February 15, 2021 7:20 PM
> To: yocto@lists.yoctoproject.org
> Cc: Andrei Gherzan <andrei.gherzan@huawei.com>
> Subject: [yocto] [meta-zephy][PATCH 13/14] zephyr-flash-pyocd.bbclass:
> Implement configurable probe IDs to program
> 
> From: Andrei Gherzan <andrei.gherzan@huawei.com>
> 
> Implement logic to configure what probes to program based on the
> PYOCD_FLASH_IDS variable:
> 1. by default program all attached probes 2. change default behaviour by
> listing the probe IDs to flash
> 
> CONNECT_TIMEOUT_SECONDS was also renamed to maintain consistency
> with the PYOCD_FLASH_IDS variable.
> 
> One can query the IDs using `pyocd list`.
> 
> The value of PYOCD_FLASH_IDS can also be injected into the datastore using
> BB_ENV_EXTRAWHITE.
> 
> Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com>
> ---
>  README.txt                         |  9 +++++
>  classes/zephyr-flash-pyocd.bbclass | 57 ++++++++++++++++++++----------
>  2 files changed, 48 insertions(+), 18 deletions(-)
> 
> diff --git a/README.txt b/README.txt
> index bda872b..ce5338b 100644
> --- a/README.txt
> +++ b/README.txt
> @@ -67,6 +67,15 @@ dfu-util and/or pyocd need to be installed in your
> system. If you observe  permission errors or the flashing process seem to
> hang, follow those instructions:
>  https://github.com/pyocd/pyOCD/tree/master/udev
> 
> +By default, pyocd tries to flash all the attached probes. This
> +behaviour can be customised by defining the PYOCD_FLASH_IDS variable as
> +a space-separated list of IDs. Once that is set, the tool will only try
> +to program these IDs. You can query for the IDs by running `pyocd list`
> +on your host while having the probes attached. Besides setting this
> +variable through the build's configuration or metadata, you can also inject
> its value from command line with something like:
> +
> +    $ PYOCD_FLASH_IDS='<ID1> <ID2> <ID3>'
> + BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE PYOCD_FLASH_IDS"
> bitbake
> + <TARGET> -c flash_usb
> +
>  Building and Running Zephyr Tests
>  =================================
>  Presently only toolchains for ARM, x86, IAMCU and Nios2 are supported.
> diff --git a/classes/zephyr-flash-pyocd.bbclass b/classes/zephyr-flash-
> pyocd.bbclass
> index 4d24e6a..7e1cec5 100644
> --- a/classes/zephyr-flash-pyocd.bbclass
> +++ b/classes/zephyr-flash-pyocd.bbclass
> @@ -1,4 +1,5 @@
> -CONNECT_TIMEOUT_SECONDS ?= "30"
> +PYOCD_CONNECT_TIMEOUT_SECONDS ?= "30"
> +PYOCD_FLASH_IDS ?= "all"
> 
>  python do_flash_usb() {
>      try:
> @@ -7,26 +8,46 @@ python do_flash_usb() {
>      except ImportError:
>          bb.fatal("Flashing with pyocd needs the relevant python package. Make
> sure your host provides it or consult your distribution packages for how to
> install this prerequisite.")
> 
> -    timeout = int(d.getVar('CONNECT_TIMEOUT_SECONDS'))
> +    try:
> +        timeout = int(d.getVar('PYOCD_CONNECT_TIMEOUT_SECONDS'))
> +    except ValueError:
> +        bb.fatal(f"PYOCD_CONNECT_TIMEOUT_SECONDS was set to an invalid
> + value: {d.getVar('PYOCD_CONNECT_TIMEOUT_SECONDS')}.")
>      image = f"{d.getVar('DEPLOY_DIR_IMAGE')}/{d.getVar('PN')}.elf"
> -    bb.plain(f"Attempting to flash {image} to board {d.getVar('BOARD')}")
> +    ids = d.getVar('PYOCD_FLASH_IDS')
> +
> +    # Compute the list of IDs to program
> +    if ids == 'all':
> +        ids = []
> +        for probe in
> ConnectHelper.get_all_connected_probes(blocking=False):
> +            ids.append(probe.unique_id)
> +        if not ids:
> +            bb.fatal("No probe detected. Make sure your target is connected.")
> +    else:
> +        ids = ids.split()
> +        if not ids:
> +            bb.fatal("No probe requested for programming. Make sure
> + PYOCD_FLASH_IDS is set.")
> 
> -    # Try to connect to a probe with a timeout
> -    now = 0
> -    step = 3
> -    while True:
> -        session = ConnectHelper.session_with_chosen_probe(blocking=False,
> return_first=True)
> -        if session:
> -            break
> -        if now >= timeout:
> -            bb.fatal("Timeout while trying to connect to a probe. Make sure the
> target device is connected and the udev is configured accordingly. See
> <https://github.com/mbedmicro/pyOCD/tree/master/udev> for help.")
> -        bb.warn("Can't connect to the probe. Retrying in %d seconds..." % step)
> -        time.sleep(step)
> -        now += step
> +    # Program each ID
> +    for id in ids:
> +        bb.plain(f"Attempting to flash {os.path.basename(image)} to
> + board {d.getVar('BOARD')} [{id}]")
> 
> -    with session:
> -        FileProgrammer(session).program(image)
> -        session.board.target.reset()
> +        # Try to connect to a probe with a timeout
> +        now = 0
> +        step = 3
> +        while True:
> +            session =
> ConnectHelper.session_with_chosen_probe(blocking=False,
> return_first=True, unique_id=id)
> +            if session:
> +                break
> +            if now >= timeout:
> +                bb.fatal(f"Timeout while trying to connect to probe ID: {id}. Make
> sure the target device is connected and the udev is configured accordingly.
> See <https://github.com/mbedmicro/pyOCD/tree/master/udev> for help.")
> +            bb.warn(f"Can't connect to the probe ID: {id}. Retrying in {step}
> seconds...")
> +            time.sleep(step)
> +            now += step
> +
> +        # Program the sepected probe
> +        with session:
> +            FileProgrammer(session).program(image)
> +            session.board.target.reset()
>  }
> 
>  addtask do_flash_usb after do_deploy
> --
> 2.30.1


  reply	other threads:[~2021-02-16 10:14 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-15 11:19 [meta-zephy][PATCH 01/14] zephyr-flash-dfu.bbclass: Add missing do_flash_usb dependency on do_deploy Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 02/14] zephyr-flash-pyocd.bbclass: " Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 03/14] Cleanup superflous new lines Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 04/14] zephyr-kernel-src: Restructure recipe Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 05/14] zephyr-kernel-src-2.5.0-rc3.inc: Add support for zephyr kernel version 2.5.0-rc3 Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 06/14] zephyr-kernel-common.inc: Fix configuration CPPFLAGS warning Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 07/14] zephyr-kernel-common.inc: Reformat EXTRA_OECMAKE Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 08/14] zephyr-kernel.inc: Remove include file Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 09/14] Use an include file for the common parts of the sample recipes Andrei Gherzan
2021-02-15 11:19 ` [meta-zephy][PATCH 10/14] zephyr-peripheral-hr: Add recipe for BT HR sample Andrei Gherzan
2021-02-15 11:20 ` [meta-zephy][PATCH 11/14] zephyr-flash-pyocd.bbclass: Flash the first probe found with a timeout Andrei Gherzan
2021-02-15 11:20 ` [meta-zephy][PATCH 12/14] zephyr-flash-pyocd.bbclass: Handle import error for pyocd modules Andrei Gherzan
2021-02-15 11:20 ` [meta-zephy][PATCH 13/14] zephyr-flash-pyocd.bbclass: Implement configurable probe IDs to program Andrei Gherzan
2021-02-16 10:14   ` Naveen Saini [this message]
2021-02-15 11:20 ` [meta-zephy][PATCH 14/14] zephyr-kernel-src: Upgrade 2.5.0-rc3 to rc4 Andrei Gherzan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=821237702e094666bca3ed61b1f6d455@intel.com \
    --to=naveen.kumar.saini@intel.com \
    --cc=andrei.gherzan@huawei.com \
    --cc=andrei@gherzan.com \
    --cc=yocto@lists.yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.