[{"id":23301,"web_url":"https://patchwork.libcamera.org/comment/23301/","msgid":"<20220603064901.3id64mdv4wgaxiux@uno.localdomain>","date":"2022-06-03T06:49:01","subject":"Re: [libcamera-devel] [PATCH v5 3/4] libcamera: controls: Generate\n\tfixed- and variable-sized Span Controls","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Christian\n\nOn Thu, Jun 02, 2022 at 12:18:01AM +0100, Christian Rauch via libcamera-devel wrote:\n> This defines Controls with a 'size' as either variable-sized Span<T> or as\n> fixed-sized Span<T,N>.\n>\n> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n> ---\n>  utils/gen-controls.py | 32 ++++++++++++++++++++++----------\n>  1 file changed, 22 insertions(+), 10 deletions(-)\n>\n> diff --git a/utils/gen-controls.py b/utils/gen-controls.py\n> index 3f99b5e2..c9e79a22 100755\n> --- a/utils/gen-controls.py\n> +++ b/utils/gen-controls.py\n> @@ -7,6 +7,7 @@\n>  # gen-controls.py - Generate control definitions from YAML\n>\n>  import argparse\n> +import math\n>  import string\n>  import sys\n>  import yaml\n> @@ -22,6 +23,25 @@ def format_description(description):\n>      return '\\n'.join([(line and ' * ' or ' *') + line for line in description])\n>\n>\n> +def get_ctrl_type(ctrl):\n> +    ctrl_type = ctrl['type']\n> +    ctrl_size_arr = ctrl.get('size')\n> +    ctrl_is_span = ctrl_size_arr is not None\n> +\n> +    if ctrl_type == 'string':\n> +        return 'std::string'\n> +    elif ctrl_is_span:\n> +        ctrl_span_size = math.prod(ctrl_size_arr) if len(ctrl_size_arr) > 0 else None\n> +        if ctrl_span_size:\n> +            # fixed-sized Span\n> +            return f\"Span<const {ctrl_type}, {ctrl_span_size}>\"\n> +        else:\n> +            # variable-sized Span\n> +            return f\"Span<const {ctrl_type}>\"\n> +    else:\n> +        return ctrl_type\n\nYou can save a few indentation levels with\n\ndef get_ctrl_type(ctrl):\n    ctrl_type = ctrl['type']\n    ctrl_size_arr = ctrl.get('size')\n\n    if ctrl_type == 'string':\n        return 'std::string'\n\n    if ctrl_size_arr is not None:\n        if len(ctrl_size_arr) > 0:\n            # fixed-sized Span\n            ctrl_span_size = math.prod(ctrl_size_arr)\n            return f\"Span<const {ctrl_type}, {ctrl_span_size}>\"\n        else:\n            # variable-sized Span\n            return f\"Span<const {ctrl_type}>\"\n\n    return ctrl_type\n\nAs you prefer.\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> +\n> +\n>  def generate_cpp(controls):\n>      enum_doc_start_template = string.Template('''/**\n>   * \\\\enum ${name}Enum\n> @@ -50,11 +70,7 @@ ${description}\n>          name, ctrl = ctrl.popitem()\n>          id_name = snake_case(name).upper()\n>\n> -        ctrl_type = ctrl['type']\n> -        if ctrl_type == 'string':\n> -            ctrl_type = 'std::string'\n> -        elif ctrl.get('size'):\n> -            ctrl_type = 'Span<const %s>' % ctrl_type\n> +        ctrl_type = get_ctrl_type(ctrl)\n>\n>          info = {\n>              'name': name,\n> @@ -135,11 +151,7 @@ def generate_h(controls):\n>\n>          ids.append('\\t' + id_name + ' = ' + str(id_value) + ',')\n>\n> -        ctrl_type = ctrl['type']\n> -        if ctrl_type == 'string':\n> -            ctrl_type = 'std::string'\n> -        elif ctrl.get('size'):\n> -            ctrl_type = 'Span<const %s>' % ctrl_type\n> +        ctrl_type = get_ctrl_type(ctrl)\n>\n>          info = {\n>              'name': name,\n> --\n> 2.34.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 4F163BD160\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jun 2022 06:49:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 897FB65631;\n\tFri,  3 Jun 2022 08:49:05 +0200 (CEST)","from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::221])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 288FA60104\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jun 2022 08:49:04 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 66A39240006;\n\tFri,  3 Jun 2022 06:49:03 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1654238945;\n\tbh=Qb1np46Yk+AE+qHzDqVvCtqNEvToiW4GayjR7+CR+xw=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=qheAB2bt6VOc0B/7/jAjBhSS7QO55JUr/tBp5PYmh8ydUPcM+zTtUTufXblOJIoCW\n\tuigZIsZej4qohqk+O2mSNw9b3FuvXgUMR4ngiFvoIfURpDBYrx/4Lc4MlwkC6Zjd+P\n\t/d2B36Ru/dRj0fP0Z2x9Ns6KYxsV05RcHebD8jqai8aVsZtmXpBtBSmFFRhR4YUFSi\n\tgOBgGxAxs77bOdEjMZnsyBI7TN1GHI7WVafC5SY4ukkoPbw2cezknzZqotXJGxjeZz\n\tRFn5lMQePglc0q4/vQwK3AHrPQ6+MmiRqaaGYLyd9XY34xAIxatrKoB8tSaYyHyZbo\n\tf8C8tQ3cdYJTg==","Date":"Fri, 3 Jun 2022 08:49:01 +0200","To":"Christian Rauch <Rauch.Christian@gmx.de>","Message-ID":"<20220603064901.3id64mdv4wgaxiux@uno.localdomain>","References":"<20220601231802.16735-1-Rauch.Christian@gmx.de>\n\t<20220601231802.16735-4-Rauch.Christian@gmx.de>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220601231802.16735-4-Rauch.Christian@gmx.de>","Subject":"Re: [libcamera-devel] [PATCH v5 3/4] libcamera: controls: Generate\n\tfixed- and variable-sized Span Controls","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]