libcamera/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl
Paul Elder 207c9e1c1d utils: ipc: Add support for Flags
Add Flags<E> as a supported type in the IPA interface.

It is used in mojom with the [flags] attribute. Any field or parameter
type E that is prefixed with the [flags] attribute will direct the code
generator to generate the type name "Flags<E>" and appropriate
serialization/deserialization code for Flags<E> instead of for E.

It is usable and has been tested in struct members, function input and
output parameters, and Signal parameters. This does not add support for
returning Flags as direct return values.

Additionally, the [scopedEnum] attribute can be used on enum
definitions, which will instruct the code generator to convert it to an
enum class instead of a raw enum.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
2022-10-18 18:51:33 +09:00

84 lines
2 KiB
Cheetah

{#-
# SPDX-License-Identifier: LGPL-2.1-or-later
# Copyright (C) 2020, Google Inc.
-#}
{%- import "definition_functions.tmpl" as funcs -%}
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2020, Google Inc.
*
* {{module_name}}_ipa_interface.h - Image Processing Algorithm interface for {{module_name}}
*
* This file is auto-generated. Do not edit.
*/
#pragma once
#include <libcamera/ipa/core_ipa_interface.h>
#include <libcamera/ipa/ipa_interface.h>
{% if has_map %}#include <map>{% endif %}
{% if has_array %}#include <vector>{% endif %}
namespace libcamera {
{%- if has_namespace %}
{% for ns in namespace %}
namespace {{ns}} {
{% endfor %}
{%- endif %}
{% for const in consts %}
const {{const.kind|name}} {{const.mojom_name}} = {{const.value}};
{% endfor %}
enum class {{cmd_enum_name}} {
Exit = 0,
{%- for method in interface_main.methods %}
{{method.mojom_name|cap}} = {{loop.index}},
{%- endfor %}
};
enum class {{cmd_event_enum_name}} {
{%- for method in interface_event.methods %}
{{method.mojom_name|cap}} = {{loop.index}},
{%- endfor %}
};
{% for enum in enums %}
{{funcs.define_enum(enum)}}
{% endfor %}
{%- for struct in structs_nonempty %}
{{funcs.define_struct(struct)}}
{% endfor %}
{#-
Any consts or #defines should be moved to the mojom file.
#}
class {{interface_name}} : public IPAInterface
{
public:
{% for method in interface_main.methods %}
virtual {{method|method_return_value}} {{method.mojom_name}}(
{%- for param in method|method_parameters %}
{{param}}{{- "," if not loop.last}}
{%- endfor -%}
) = 0;
{% endfor %}
{%- for method in interface_event.methods %}
Signal<
{%- for param in method.parameters -%}
{{"const " if not param|is_pod}}{{param|name}}{{" &" if not param|is_pod and not param|is_enum}}
{{- ", " if not loop.last}}
{%- endfor -%}
> {{method.mojom_name}};
{% endfor -%}
};
{%- if has_namespace %}
{% for ns in namespace|reverse %}
} /* namespace {{ns}} */
{% endfor %}
{%- endif %}
} /* namespace libcamera */