utils: ipc: Allow the skipHeader attribute on enums
Currently, enums that are passed between pipeline handlers and their IPA must be defined in a mojom file. However, there is a use case for enum/flags to be defined in a C++ header, such that the enum can be used in a component other than the pipeline handler and its IPA. To support this, add support for the skipHeader attribute for enums. Like structs, it is only allowed in core.mojom. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
3b54b56a2d
commit
4e9ed14311
4 changed files with 8 additions and 6 deletions
|
@ -14,8 +14,8 @@ module libcamera;
|
||||||
* - structs
|
* - structs
|
||||||
*
|
*
|
||||||
* Attributes:
|
* Attributes:
|
||||||
* - skipHeader - structs only, and only in core.mojom
|
* - skipHeader - allowed only for structs and enums in core.mojom
|
||||||
* - Do not generate a C++ definition for the structure
|
* - Do not generate a C++ definition for the structure or enum
|
||||||
* - Any type used in a mojom interface definition must have a corresponding
|
* - Any type used in a mojom interface definition must have a corresponding
|
||||||
* definition in a mojom file for the code generator to accept it, except
|
* definition in a mojom file for the code generator to accept it, except
|
||||||
* for types solely used as map/array members for which a definition is not
|
* for types solely used as map/array members for which a definition is not
|
||||||
|
@ -52,6 +52,8 @@ module libcamera;
|
||||||
* then the type definition in the core.mojom file should have the
|
* then the type definition in the core.mojom file should have the
|
||||||
* [skipHeader] attribute only
|
* [skipHeader] attribute only
|
||||||
* - A (de)serializer will be generated for the type
|
* - A (de)serializer will be generated for the type
|
||||||
|
* - enums that are defined in a libcamera C++ header also fall in this
|
||||||
|
* category
|
||||||
* - If a type definition has [skipHeader], then the header where the type is
|
* - If a type definition has [skipHeader], then the header where the type is
|
||||||
* defined must be included in ipa_interface.h
|
* defined must be included in ipa_interface.h
|
||||||
* - Types that are solely used as array/map members do not require a mojom
|
* - Types that are solely used as array/map members do not require a mojom
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
namespace libcamera {
|
namespace libcamera {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structs that are defined in core.mojom and have the skipHeader tag must be
|
* Structs and enums that are defined in core.mojom that have the skipHeader
|
||||||
* #included here.
|
* tag must be #included here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class IPAInterface
|
class IPAInterface
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace libcamera {
|
||||||
static const {{const.kind|name}} {{const.mojom_name}} = {{const.value}};
|
static const {{const.kind|name}} {{const.mojom_name}} = {{const.value}};
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for enum in enums %}
|
{% for enum in enums_gen_header %}
|
||||||
{{funcs.define_enum(enum)}}
|
{{funcs.define_enum(enum)}}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
|
@ -483,7 +483,7 @@ class Generator(generator.Generator):
|
||||||
def _GetJinjaExportsForCore(self):
|
def _GetJinjaExportsForCore(self):
|
||||||
return {
|
return {
|
||||||
'consts': self.module.constants,
|
'consts': self.module.constants,
|
||||||
'enums': self.module.enums,
|
'enums_gen_header': [x for x in self.module.enums if x.attributes is None or 'skipHeader' not in x.attributes],
|
||||||
'has_array': len([x for x in self.module.kinds.keys() if x[0] == 'a']) > 0,
|
'has_array': len([x for x in self.module.kinds.keys() if x[0] == 'a']) > 0,
|
||||||
'has_map': len([x for x in self.module.kinds.keys() if x[0] == 'm']) > 0,
|
'has_map': len([x for x in self.module.kinds.keys() if x[0] == 'm']) > 0,
|
||||||
'structs_gen_header': [x for x in self.module.structs if x.attributes is None or 'skipHeader' not in x.attributes],
|
'structs_gen_header': [x for x in self.module.structs if x.attributes is None or 'skipHeader' not in x.attributes],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue