[libcamera-devel] [PATCH v5 2/9] utils: ipc: Add support for enums in function parameters

Jacopo Mondi jacopo at jmondi.org
Wed Oct 12 09:20:40 CEST 2022


Hi Paul

On Tue, Oct 11, 2022 at 07:58:52PM +0900, Paul Elder via libcamera-devel wrote:
> There is already support for enums as struct members, but there was no
> support for enums in function parameters. Add it.
>
> This does not add support for returning enums as direct return values.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>

I'm defintely not well versed when it comes to mojo, but this seems to
make sense to me
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
   j

> ---
> No change in v5
>
> No change in v4
>
> No change in v3
>
> Changes in v2:
> - add static assertion to confirm that the enum type fits in int32_t
> ---
>  .../libcamera_templates/proxy_functions.tmpl     | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> index bac826a7..cbcfb64a 100644
> --- a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> +++ b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> @@ -52,6 +52,9 @@
>   #}
>  {%- macro serialize_call(params, buf, fds) %}
>  {%- for param in params %}
> +{%- if param|is_enum %}
> +	static_assert(sizeof({{param|name_full}}) <= 4);
> +{%- endif %}
>  	std::vector<uint8_t> {{param.mojom_name}}Buf;
>  {%- if param|has_fd %}
>  	std::vector<SharedFD> {{param.mojom_name}}Fds;
> @@ -59,7 +62,11 @@
>  {%- else %}
>  	std::tie({{param.mojom_name}}Buf, std::ignore) =
>  {%- endif %}
> +{%- if param|is_enum %}
> +		IPADataSerializer<uint32_t>::serialize(static_cast<uint32_t>({{param.mojom_name}})
> +{%- else %}
>  		IPADataSerializer<{{param|name}}>::serialize({{param.mojom_name}}
> +{% endif -%}
>  {{- ", &controlSerializer_" if param|needs_control_serializer -}}
>  );
>  {%- endfor %}
> @@ -97,7 +104,12 @@
>   # This code is meant to be used by macro deserialize_call.
>   #}
>  {%- macro deserialize_param(param, pointer, loop, buf, fds, iter, data_size) -%}
> -{{"*" if pointer}}{{param.mojom_name}} = IPADataSerializer<{{param|name}}>::deserialize(
> +{{"*" if pointer}}{{param.mojom_name}} =
> +{%- if param|is_enum %}
> +static_cast<{{param|name_full}}>(IPADataSerializer<uint32_t>::deserialize(
> +{%- else %}
> +IPADataSerializer<{{param|name}}>::deserialize(
> +{%- endif %}
>  	{{buf}}{{- ".cbegin()" if not iter}} + {{param.mojom_name}}Start,
>  {%- if loop.last and not iter %}
>  	{{buf}}.cend()
> @@ -121,7 +133,7 @@
>  {%- if param|needs_control_serializer %}
>  	&controlSerializer_
>  {%- endif -%}
> -);
> +){{")" if param|is_enum}};
>  {%- endmacro -%}
>
>
> --
> 2.30.2
>


More information about the libcamera-devel mailing list