[{"id":25391,"web_url":"https://patchwork.libcamera.org/comment/25391/","msgid":"<20221012072040.upbumlilxxfpxqbr@uno.localdomain>","date":"2022-10-12T07:20:40","subject":"Re: [libcamera-devel] [PATCH v5 2/9] utils: ipc: Add support for\n\tenums in function parameters","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul\n\nOn Tue, Oct 11, 2022 at 07:58:52PM +0900, Paul Elder via libcamera-devel wrote:\n> There is already support for enums as struct members, but there was no\n> support for enums in function parameters. Add it.\n>\n> This does not add support for returning enums as direct return values.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n\nI'm defintely not well versed when it comes to mojo, but this seems to\nmake sense to me\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> ---\n> No change in v5\n>\n> No change in v4\n>\n> No change in v3\n>\n> Changes in v2:\n> - add static assertion to confirm that the enum type fits in int32_t\n> ---\n>  .../libcamera_templates/proxy_functions.tmpl     | 16 ++++++++++++++--\n>  1 file changed, 14 insertions(+), 2 deletions(-)\n>\n> diff --git a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl\n> index bac826a7..cbcfb64a 100644\n> --- a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl\n> +++ b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl\n> @@ -52,6 +52,9 @@\n>   #}\n>  {%- macro serialize_call(params, buf, fds) %}\n>  {%- for param in params %}\n> +{%- if param|is_enum %}\n> +\tstatic_assert(sizeof({{param|name_full}}) <= 4);\n> +{%- endif %}\n>  \tstd::vector<uint8_t> {{param.mojom_name}}Buf;\n>  {%- if param|has_fd %}\n>  \tstd::vector<SharedFD> {{param.mojom_name}}Fds;\n> @@ -59,7 +62,11 @@\n>  {%- else %}\n>  \tstd::tie({{param.mojom_name}}Buf, std::ignore) =\n>  {%- endif %}\n> +{%- if param|is_enum %}\n> +\t\tIPADataSerializer<uint32_t>::serialize(static_cast<uint32_t>({{param.mojom_name}})\n> +{%- else %}\n>  \t\tIPADataSerializer<{{param|name}}>::serialize({{param.mojom_name}}\n> +{% endif -%}\n>  {{- \", &controlSerializer_\" if param|needs_control_serializer -}}\n>  );\n>  {%- endfor %}\n> @@ -97,7 +104,12 @@\n>   # This code is meant to be used by macro deserialize_call.\n>   #}\n>  {%- macro deserialize_param(param, pointer, loop, buf, fds, iter, data_size) -%}\n> -{{\"*\" if pointer}}{{param.mojom_name}} = IPADataSerializer<{{param|name}}>::deserialize(\n> +{{\"*\" if pointer}}{{param.mojom_name}} =\n> +{%- if param|is_enum %}\n> +static_cast<{{param|name_full}}>(IPADataSerializer<uint32_t>::deserialize(\n> +{%- else %}\n> +IPADataSerializer<{{param|name}}>::deserialize(\n> +{%- endif %}\n>  \t{{buf}}{{- \".cbegin()\" if not iter}} + {{param.mojom_name}}Start,\n>  {%- if loop.last and not iter %}\n>  \t{{buf}}.cend()\n> @@ -121,7 +133,7 @@\n>  {%- if param|needs_control_serializer %}\n>  \t&controlSerializer_\n>  {%- endif -%}\n> -);\n> +){{\")\" if param|is_enum}};\n>  {%- endmacro -%}\n>\n>\n> --\n> 2.30.2\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 5ED78C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 12 Oct 2022 07:20:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9F9D662D87;\n\tWed, 12 Oct 2022 09:20:44 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::222])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CF23D603D4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Oct 2022 09:20:42 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 4A54F40009;\n\tWed, 12 Oct 2022 07:20:42 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665559244;\n\tbh=6Te0VIrzAfZxQmhbuGRDr/B025313LpobGY3uWCMFIQ=;\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=hwqg+mht0inF1MmqwfubPOz1IQEol97odRSRKYCK0maHAut8jjD46aNUvRLPW4JTA\n\tVwboQs0TI0HVrhNtzlHC++9y2XJWWIIh4M9aVL6fimPHd9trFVnXmVRyWNznmmzyEo\n\tAx5ztkX+rJOyBqgE7hxe047haCzRuqjCEd5vy9QjyJPj9T0bV9PO8Eyv/fg3LtLAly\n\t4vC9673TQA75Mxfeegcv6hMwv/Gf7s0oQxZq4JdfYha73/l/5wwLIhtuVb77ljzgNH\n\toqkSGFVcMvSwzdTR3eqs3xmC91KPPL/a/88+r6viIYtic3ePsNCgVvj9IIrHtelo3J\n\tOyJF/lsWQCPOA==","Date":"Wed, 12 Oct 2022 09:20:40 +0200","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20221012072040.upbumlilxxfpxqbr@uno.localdomain>","References":"<20221011105859.457567-1-paul.elder@ideasonboard.com>\n\t<20221011105859.457567-3-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20221011105859.457567-3-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 2/9] utils: ipc: Add support for\n\tenums in function parameters","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>"}}]