From patchwork Wed Aug 3 11:21:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16936 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id AB7EFBE173 for ; Wed, 3 Aug 2022 11:22:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5CA7763316; Wed, 3 Aug 2022 13:22:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525724; bh=6kJmCNoB/7Y3fBKdFrR4/kHVkeCHew2uGZN8KqHf6iQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=lvMSqVFRNXVd79EGyku5vVjypT2lbguzh9N54iK+Ck0aDcGPrg4pfSGqv3GjL/tDS 6x0e3RJslo1fPePhwEEGL4fIlkova81+p/lEgYDYlj3wLJE26Lv2792FCx7V5sdZs7 kzGW0WMKExx7CMd5YqNq6e1YqsLM2WHsuJeM8M1T7o10sNiCWbFLlVVU1XhBzfauWK Ornxt3yS6tSZGaXvzNc3ZzKfBOwIzUjq5foYUczvEA5nvqJJClYIhncNmuBUh/Xk+F iPpH3ME/JFfTPhP8PegsCOjmC7LIVNblH/VvJjusxelK8C6txiuEgK6Qkx5rvZ6aSl B6s1NDg+tDurw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D6BA63316 for ; Wed, 3 Aug 2022 13:22:02 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="GgqJFdMY"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C51788B; Wed, 3 Aug 2022 13:22:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525721; bh=6kJmCNoB/7Y3fBKdFrR4/kHVkeCHew2uGZN8KqHf6iQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GgqJFdMYjnbZ12FeYekykYmbsYfZp5vmg0Ds0E3YYXkMY+JpHOhvvi//mCzlKSIaH LKYNtkSPrC3qb++Dl3zTv5f+1N9fUPXeLqn1GmOgLpKjtQHc6EFaEU3I/P4lZ/GuRV xd3xhnYvg0H5wzz3scMFv6Wob6x/QHmk6GjTUhxc= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:42 +0900 Message-Id: <20220803112150.3040287-2-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/9] test: generated_serializer: Test enum that is struct member X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add an enum field to the test struct member to test serialization/deserialization of enums that are struct members. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- .../generated_serializer/generated_serializer_test.cpp | 4 ++++ .../generated_serializer/include/libcamera/ipa/test.mojom | 1 + 2 files changed, 5 insertions(+) diff --git a/test/serialization/generated_serializer/generated_serializer_test.cpp b/test/serialization/generated_serializer/generated_serializer_test.cpp index 698c81d6..a4639a80 100644 --- a/test/serialization/generated_serializer/generated_serializer_test.cpp +++ b/test/serialization/generated_serializer/generated_serializer_test.cpp @@ -51,6 +51,7 @@ if (struct1.field != struct2.field) { \ t.s2 = "goodbye"; t.s3 = "lorem ipsum"; t.i = 58527; + t.c = ipa::test::IPAOperationInit; std::vector serialized; @@ -69,6 +70,7 @@ if (struct1.field != struct2.field) { \ TEST_FIELD_EQUALITY(t, u, s2); TEST_FIELD_EQUALITY(t, u, s3); TEST_FIELD_EQUALITY(t, u, i); + TEST_FIELD_EQUALITY(t, u, c); /* Test vector of generated structs */ @@ -92,11 +94,13 @@ if (struct1.field != struct2.field) { \ TEST_FIELD_EQUALITY(v[0], w[0], s2); TEST_FIELD_EQUALITY(v[0], w[0], s3); TEST_FIELD_EQUALITY(v[0], w[0], i); + TEST_FIELD_EQUALITY(v[0], w[0], c); TEST_FIELD_EQUALITY(v[1], w[1], s1); TEST_FIELD_EQUALITY(v[1], w[1], s2); TEST_FIELD_EQUALITY(v[1], w[1], s3); TEST_FIELD_EQUALITY(v[1], w[1], i); + TEST_FIELD_EQUALITY(v[1], w[1], c); return TestPass; } diff --git a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom index 5f200885..73081b40 100644 --- a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom +++ b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom @@ -18,6 +18,7 @@ struct TestStruct { string s2; int32 i; string s3; + IPAOperationCode c; }; interface IPATestInterface { From patchwork Wed Aug 3 11:21:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16937 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id B9507BE173 for ; Wed, 3 Aug 2022 11:22:05 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D2646603E6; Wed, 3 Aug 2022 13:22:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525724; bh=a1zdUdGwfXBQbb4g0Vs1xAJ5GlDVFdqWiJB6wDxV0G8=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Es0x/UqhSvO1ki9CxsFCVonj8GlrOesHv8iNlvZBhVwuqblJhzkJclHakhMOwxTxC gWXrb7IF/WainnkLE7aCNyNzWZePyC0ZbrL8a8DTSfAPUzSpaaSPAqWijDjuQEAmSd YwvRV/fGc9hs+yHBq4NiduCo4aAfGVRCx7Yw/cAk6GHxH+U9wDMUnKdGk5VcmgXDaX oe5QIoCVrTnKo8ezpGiJJUefgTF4AJ+S8adx7SNG+jMI7WDNt/19X39diSfEHoXcdg VwGiohr2ZYXjQrSQnt2tFB1wAoRh8lvD54GnI6/66tEOBUBPLv3wd5gOk00P/p5FRj J7Zso9fCXXRRg== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 82C07603E6 for ; Wed, 3 Aug 2022 13:22:03 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="NeC1ahir"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 54CA98B; Wed, 3 Aug 2022 13:22:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525723; bh=a1zdUdGwfXBQbb4g0Vs1xAJ5GlDVFdqWiJB6wDxV0G8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NeC1ahirX5iagmOTlt6M2b4vlEgIhQAa+ce9RhVxMtRmz/WgEPjqJc2WuhBl+G9XZ EYA5/hzYtWeJDaKDz5UgXKQnYvoNw9F0lDsPgMEkuHukgme57RKtPKY6x09VyGZu63 t5pt4Jl3DYV9VcxKhsF24FF9+W2v+bStFx+hGm4o= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:43 +0900 Message-Id: <20220803112150.3040287-3-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/9] utils: ipc: Add support for enums in function parameters X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 Reviewed-by: Laurent Pinchart --- .../libcamera_templates/proxy_functions.tmpl | 13 +++++++++++-- 1 file changed, 11 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..dc35620f 100644 --- a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl +++ b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl @@ -59,7 +59,11 @@ {%- else %} std::tie({{param.mojom_name}}Buf, std::ignore) = {%- endif %} +{%- if param|is_enum %} + IPADataSerializer::serialize(static_cast({{param.mojom_name}}) +{%- else %} IPADataSerializer<{{param|name}}>::serialize({{param.mojom_name}} +{% endif -%} {{- ", &controlSerializer_" if param|needs_control_serializer -}} ); {%- endfor %} @@ -97,7 +101,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::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 +130,7 @@ {%- if param|needs_control_serializer %} &controlSerializer_ {%- endif -%} -); +){{")" if param|is_enum}}; {%- endmacro -%} From patchwork Wed Aug 3 11:21:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16938 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id E1D96BE173 for ; Wed, 3 Aug 2022 11:22:07 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AAD9563314; Wed, 3 Aug 2022 13:22:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525727; bh=jJyNKqVT5CXPER9+usl/DkRKCJNV5gqIlfA1aTkdCoE=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=J34JA522UXK8RaNhoV6RLLOKpn76usimVjy7NTA9HJp/9Anjj3opQtFiCATE/si12 oPlEUoe5EZDYuZz49fgc/Im9au7Hk1/EyC1C3MlwUwr/q+igtWuKulwuXoSPu/2fuT Oq6fEAhZo76xxq9psJlMfgwBeiuqlf4cbm3IDMo8ciPUex6yAD7S7c9DR+tq4CTIG2 kxzjLV3Kdh157SDoIg5nXmiN/4L4bBBN6awIFNkqPJQIYLiWkU4al5d/Ir8NZbRtj/ IUhQjrm6JygrYYy1Zq+V69z9Y+tK54d0N3rNt7cA6yPyq2wJDIw8XchvmrwKRXF4nL UIVuDG7GJmtEg== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 18AAE6331C for ; Wed, 3 Aug 2022 13:22:05 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="u0cH5m5n"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D985530B; Wed, 3 Aug 2022 13:22:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525724; bh=jJyNKqVT5CXPER9+usl/DkRKCJNV5gqIlfA1aTkdCoE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u0cH5m5nyXLU/bVYSa22elVBhAkrMR9l106ftuOEAkkOP2twhnPTD43DcJaOE1I6Q 668Tt1CSzN1kq5cK7FjwGTfFf5HVi3CGZKhMKUAAn6t9MAZLAS1k/9VgM/trkH7mMQ 5ukLbGClHM2WihoBG8otqwT0AngSl/S95spDMkIs= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:44 +0900 Message-Id: <20220803112150.3040287-4-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/9] libcamera: flags: Add friend class IPADataSerializer X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" To prepare for the ability to send Flags over IPC, add IPADataSerializer as a friend class to Flags. Signed-off-by: Paul Elder --- include/libcamera/base/flags.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/libcamera/base/flags.h b/include/libcamera/base/flags.h index a1b404bd..43afdf26 100644 --- a/include/libcamera/base/flags.h +++ b/include/libcamera/base/flags.h @@ -137,6 +137,9 @@ public: } private: + template + friend class IPADataSerializer; + Type value_; }; From patchwork Wed Aug 3 11:21:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16939 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 7DDCFC3275 for ; Wed, 3 Aug 2022 11:22:08 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3D83063321; Wed, 3 Aug 2022 13:22:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525728; bh=6RkYVuiwILJ4ss1QUppUyratAS0rhzobzLXSzzLlTRk=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Js1771umRzf6HupnpYjzjzmjKFfitPWJCDmPljs0B7KABsJpei+6Zfw3do8dBNU4w jSnE2nrKV6gD6B+vWQcwrl7/TCLjEzLf96Q7biaxCBS2xAJ6TEgkdm+zJxaHoIAB3N IAFa+XI0FhDRSKvo39QDa+x5ev2YWm+l9XdliGPWJ+FuAIt/i/y/rFwFRAsgyEaCow fwmZJP2FmQ4e6Y49iJYNh8/OeGLLQdCizOzZWUXJ1XHAzEJQOrUHp9xX+HxwhjVzh+ S330MArJrBOVQ8U8ntjH8T8C/CsC5nNG7jfTCEnuVTjoz4RaS6FEhch2kQtx/9iGNY d1IH5SF+3Mv2g== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9858663319 for ; Wed, 3 Aug 2022 13:22:06 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="QcT3HPtl"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6EBEF8B; Wed, 3 Aug 2022 13:22:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525726; bh=6RkYVuiwILJ4ss1QUppUyratAS0rhzobzLXSzzLlTRk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QcT3HPtlVWyHyUh3IERnFpXcpFuZ/K3+xuocD3UD9GlhSg5OalYdYmPnxYM1rUrEg C9NTU4S5jHzwWigFYIBWismcVTcoVcYFdERgdmHeNXUrFB28rqD80CHio3zMgvMQZN +fZ0jv+XV9IdtEcOM4KSVcKWQixRlbMxM6rRJNtI= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:45 +0900 Message-Id: <20220803112150.3040287-5-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 4/9] libcamera: ipa_data_serializer: Add serializer for Flags X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Implement an IPADataSerializer for Flags. Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart --- .../libcamera/internal/ipa_data_serializer.h | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h index 30bdaebc..3645da4c 100644 --- a/include/libcamera/internal/ipa_data_serializer.h +++ b/include/libcamera/internal/ipa_data_serializer.h @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -301,6 +302,53 @@ public: } }; +/* Serialization format for Flags is same as for PODs */ +template +class IPADataSerializer> +{ +public: + static std::tuple, std::vector> + serialize(const Flags &data, [[maybe_unused]] ControlSerializer *cs = nullptr) + { + std::vector dataVec; + dataVec.reserve(sizeof(Flags)); + appendPOD(dataVec, data.value_); + + return { dataVec, {} }; + } + + static Flags deserialize(std::vector &data, + [[maybe_unused]] ControlSerializer *cs = nullptr) + { + return deserialize(data.cbegin(), data.end()); + } + + static Flags deserialize(std::vector::const_iterator dataBegin, + std::vector::const_iterator dataEnd, + [[maybe_unused]] ControlSerializer *cs = nullptr) + { + Flags ret; + ret.value_ = readPOD(dataBegin, 0, dataEnd); + return ret; + } + + static Flags deserialize(std::vector &data, + [[maybe_unused]] std::vector &fds, + [[maybe_unused]] ControlSerializer *cs = nullptr) + { + return deserialize(data.cbegin(), data.end()); + } + + static Flags deserialize(std::vector::const_iterator dataBegin, + std::vector::const_iterator dataEnd, + [[maybe_unused]] std::vector::const_iterator fdsBegin, + [[maybe_unused]] std::vector::const_iterator fdsEnd, + [[maybe_unused]] ControlSerializer *cs = nullptr) + { + return deserialize(dataBegin, dataEnd); + } +}; + #endif /* __DOXYGEN__ */ } /* namespace libcamera */ From patchwork Wed Aug 3 11:21:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16940 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id EB097BE173 for ; Wed, 3 Aug 2022 11:22:10 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9EC4F6331C; Wed, 3 Aug 2022 13:22:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525730; bh=NqTLPL5PNY3ylhJLKvqV7VA95VGN7YleNtXY+CJLXX0=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=ZE9sP+tJF3D8w9dRgMcUVEZFQmE//MKMqGIgkIZE27NPMSetKEWYXg3L/Wo4+LRLg zpf0jwQpIQajd1N4tmWHfDZMfKihLfCq2upm17NJjtGu8IpDGkNYM/d9vIEG9rxR+p 1X33ohIN+CH9M4Pb8L9eqt5yXPBI1O8Qv3CvEnyCDrB6fDsQLagN/N3hhKxLhX024V f2k6Xjec5QBlntYbn1NaArvlPLwo3kdiYs5WZ05RQJ9pcKgzS0BIZToxfUY8e86hC+ jDJMjn8exsq08vWud7XSHyXVONxSy5XBVWFPXiX8klGFRszbG/pQIi9LYOcg9aRahI 3eos+abcJ8h1w== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2FE276331C for ; Wed, 3 Aug 2022 13:22:08 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="UeXb2v+Z"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EDADA8B; Wed, 3 Aug 2022 13:22:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525728; bh=NqTLPL5PNY3ylhJLKvqV7VA95VGN7YleNtXY+CJLXX0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UeXb2v+ZcAhh9oY/M7Bo1X7kH8HYvTSQgNz6j39jGBJw2v33l/j8L5YhMpj7LyicM Ck4zyMOo/mfJP2kPjsFx5whYfbVqoGgDikvvOkwrzMUkjIJHU1p8VlFcTGrO4DJO43 +ANHZSx0fRbhL6YyDdbE7vwRI8nRE0Nt77TmPnSI= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:46 +0900 Message-Id: <20220803112150.3040287-6-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 5/9] libcamera: ipa_interface: Include flags.h X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Since we will soon be adding support for Flags in IPA interfaces, the header for Flags needs to be included in ipa_interface.h. Do so. Signed-off-by: Paul Elder --- include/libcamera/ipa/ipa_interface.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h index 50ca0e7b..8afcfe21 100644 --- a/include/libcamera/ipa/ipa_interface.h +++ b/include/libcamera/ipa/ipa_interface.h @@ -13,6 +13,7 @@ #include #include +#include #include #include From patchwork Wed Aug 3 11:21:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16941 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id B306DBE173 for ; Wed, 3 Aug 2022 11:22:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4872763326; Wed, 3 Aug 2022 13:22:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525731; bh=/NGan9s9HW07JsJi6kq8U0LIajG4q31kQhSXuTrxuo4=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=H94kCP6hZuBNqPSPA/+/sR4cg/umgCicQcXAGmg6SfxLgYmMGLku/269Jsw0x2gqc Uob4iA5oWNIKxeLA0EChiMhCsmfPqUFh49JnDDi/D8NU8pOfWGpiy6rpPCntdrGvG2 1ge5crcMnbkF6AX9rsLSJcAxJVB8bna/7uV6zijKq9ogXMir9gdnS9vqsxFd9qfkoG bsgD34ccu6/+914qZ8lSx4prq64Hogjbs3Nt9+tS7orc5KpcfJK639DYL1YBuDtGTQ mdrZ27Ql6joCC4ZuxzQt13ZL13sxm3ZsDGk2xmlrsYC4vr3uMblVCtIab/AGHV+juQ /ZM7gc7UOhBvw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B4B7763319 for ; Wed, 3 Aug 2022 13:22:09 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="rsh+LdXU"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8582E8AF; Wed, 3 Aug 2022 13:22:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525729; bh=/NGan9s9HW07JsJi6kq8U0LIajG4q31kQhSXuTrxuo4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rsh+LdXUfEoJJtzK3fChmi3ZL9Xt3Hwd7TwOGYIvbBuu6RxyGNBcoXXJ6o2unR7nK MUwmyoR/goZVnXVWh58PeqoeNTuPTa3/IAvg+QpyD073q1w7OrT5v1IRdD0qXDlNCn kxWuLyVrLgOTcXUReDIkJ4j8Ku+wX0S6tnuaTqgg= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:47 +0900 Message-Id: <20220803112150.3040287-7-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 6/9] utils: ipc: Add support for Flags X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add Flags as a supported type in the IPA interface. It is defined and used in mojom as "Flags_E_t", and the code generator will convert it to "Flags". 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. Signed-off-by: Paul Elder --- .../core_ipa_interface.h.tmpl | 4 +++ .../definition_functions.tmpl | 13 +++++++ .../module_ipa_interface.h.tmpl | 4 +++ .../libcamera_templates/proxy_functions.tmpl | 10 ++++-- .../libcamera_templates/serializer.tmpl | 4 +++ .../generators/mojom_libcamera_generator.py | 35 ++++++++++++++++++- 6 files changed, 66 insertions(+), 4 deletions(-) diff --git a/utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl b/utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl index a565b59a..2fd55119 100644 --- a/utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl +++ b/utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl @@ -30,6 +30,10 @@ static const {{const.kind|name}} {{const.mojom_name}} = {{const.value}}; {{funcs.define_enum(enum)}} {% endfor %} +{% for flag in flags %} +{{funcs.define_flags(flag)}} +{% endfor %} + {%- for struct in structs_gen_header %} {{funcs.define_struct(struct)}} {% endfor %} diff --git a/utils/ipc/generators/libcamera_templates/definition_functions.tmpl b/utils/ipc/generators/libcamera_templates/definition_functions.tmpl index 94bb4918..3dbcfca0 100644 --- a/utils/ipc/generators/libcamera_templates/definition_functions.tmpl +++ b/utils/ipc/generators/libcamera_templates/definition_functions.tmpl @@ -16,6 +16,19 @@ enum {{enum.mojom_name}} { }; {%- endmacro -%} +{# + # \brief Generate Flags definition + # + # \param flags Enum object from which a Flags definition is to be generated + #} +{%- macro define_flags(flags) -%} +enum class {{flags|flags_name}} { +{%- for field in flags.fields %} + {{field.mojom_name}} = {{field.numeric_value}}, +{%- endfor %} +}; +{%- endmacro -%} + {# # \brief Generate struct definition # diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl b/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl index 415ec283..5e003849 100644 --- a/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl +++ b/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl @@ -48,6 +48,10 @@ enum class {{cmd_event_enum_name}} { {{funcs.define_enum(enum)}} {% endfor %} +{% for flag in flags %} +{{funcs.define_flags(flag)}} +{% endfor %} + {%- for struct in structs_nonempty %} {{funcs.define_struct(struct)}} {% endfor %} diff --git a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl index dc35620f..c5e24323 100644 --- a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl +++ b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl @@ -59,7 +59,9 @@ {%- else %} std::tie({{param.mojom_name}}Buf, std::ignore) = {%- endif %} -{%- if param|is_enum %} +{%- if param|is_flags %} + IPADataSerializer<{{param|name_full}}>::serialize({{param.mojom_name}} +{%- elif param|is_enum %} IPADataSerializer::serialize(static_cast({{param.mojom_name}}) {%- else %} IPADataSerializer<{{param|name}}>::serialize({{param.mojom_name}} @@ -102,7 +104,9 @@ #} {%- macro deserialize_param(param, pointer, loop, buf, fds, iter, data_size) -%} {{"*" if pointer}}{{param.mojom_name}} = -{%- if param|is_enum %} +{%- if param|is_flags %} +IPADataSerializer<{{param|name_full}}>::deserialize( +{%- elif param|is_enum %} static_cast<{{param|name_full}}>(IPADataSerializer::deserialize( {%- else %} IPADataSerializer<{{param|name}}>::deserialize( @@ -130,7 +134,7 @@ IPADataSerializer<{{param|name}}>::deserialize( {%- if param|needs_control_serializer %} &controlSerializer_ {%- endif -%} -){{")" if param|is_enum}}; +){{")" if param|is_enum and not param|is_flags}}; {%- endmacro -%} diff --git a/utils/ipc/generators/libcamera_templates/serializer.tmpl b/utils/ipc/generators/libcamera_templates/serializer.tmpl index 77bae36f..eec75211 100644 --- a/utils/ipc/generators/libcamera_templates/serializer.tmpl +++ b/utils/ipc/generators/libcamera_templates/serializer.tmpl @@ -34,6 +34,8 @@ std::tie({{field.mojom_name}}, std::ignore) = {%- if field|is_pod %} IPADataSerializer<{{field|name}}>::serialize(data.{{field.mojom_name}}); + {%- elif field|is_flags %} + IPADataSerializer<{{field|name_full}}>::serialize(data.{{field.mojom_name}}); {%- elif field|is_enum %} IPADataSerializer::serialize(data.{{field.mojom_name}}); {%- endif %} @@ -96,6 +98,8 @@ {{- check_data_size(field_size, 'dataSize', field.mojom_name, 'data')}} {%- if field|is_pod %} ret.{{field.mojom_name}} = IPADataSerializer<{{field|name}}>::deserialize(m, m + {{field_size}}); + {%- elif field|is_flags %} + ret.{{field.mojom_name}} = IPADataSerializer<{{field|name_full}}>::deserialize(m, m + {{field_size}}); {%- else %} ret.{{field.mojom_name}} = static_cast<{{field|name_full}}>(IPADataSerializer::deserialize(m, m + {{field_size}})); {%- endif %} diff --git a/utils/ipc/generators/mojom_libcamera_generator.py b/utils/ipc/generators/mojom_libcamera_generator.py index 753bfc73..22de6fdd 100644 --- a/utils/ipc/generators/mojom_libcamera_generator.py +++ b/utils/ipc/generators/mojom_libcamera_generator.py @@ -47,6 +47,8 @@ _bit_widths = { mojom.DOUBLE: '64', } +_flags_re = r'^Flags_(.*)_t$' + def ModuleName(path): return path.split('/')[-1].split('.')[0] @@ -74,6 +76,8 @@ def GetDefaultValue(element): return element.default if type(element.kind) == mojom.Kind: return '0' + if IsFlags(element): + return '' if mojom.IsEnumKind(element.kind): return f'static_cast<{element.kind.mojom_name}>(0)' if isinstance(element.kind, mojom.Struct) and \ @@ -223,6 +227,16 @@ def IsEnum(element): def IsFd(element): return mojom.IsStructKind(element.kind) and element.kind.mojom_name == "SharedFD" +def IsFlags(element): + if not hasattr(element, 'mojom_name'): + return False + if re.match(_flags_re, element.mojom_name): + return True + if hasattr(element, 'kind'): + if hasattr(element.kind, 'mojom_name'): + return True if re.match(_flags_re, element.kind.mojom_name) else False + return False + def IsMap(element): return mojom.IsMapKind(element.kind) @@ -251,9 +265,20 @@ def ByteWidthFromCppType(t): raise Exception('invalid type') return str(int(_bit_widths[key]) // 8) +def FlagsName(element): + if hasattr(element, 'mojom_name'): + if re.match(_flags_re, element.mojom_name): + return re.sub(_flags_re, lambda match: match.group(1), element.mojom_name) + if hasattr(element, 'kind'): + if hasattr(element.kind, 'mojom_name'): + return re.sub(_flags_re, lambda match: match.group(1), element.kind.mojom_name) + return None # Get the type name for a given element def GetNameForElement(element): + # Flags + if IsFlags(element): + return f'Flags<{FlagsName(element)}>' # structs if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or @@ -311,6 +336,11 @@ def GetFullNameForElement(element): if namespace_str == '': return name + + if IsFlags(element): + name = re.match(r'^Flags<(.*)>$', name).group(1) + return f'Flags<{namespace_str}::{name}>' + return f'{namespace_str}::{name}' def ValidateZeroLength(l, s, cap=True): @@ -401,6 +431,7 @@ class Generator(generator.Generator): 'choose': Choose, 'comma_sep': CommaSep, 'default_value': GetDefaultValue, + 'flags_name': FlagsName, 'has_default_fields': HasDefaultFields, 'has_fd': HasFd, 'is_async': IsAsync, @@ -408,6 +439,7 @@ class Generator(generator.Generator): 'is_controls': IsControls, 'is_enum': IsEnum, 'is_fd': IsFd, + 'is_flags': IsFlags, 'is_map': IsMap, 'is_plain_struct': IsPlainStruct, 'is_pod': IsPod, @@ -433,7 +465,8 @@ class Generator(generator.Generator): 'cmd_enum_name': '_%sCmd' % self.module_name, 'cmd_event_enum_name': '_%sEventCmd' % self.module_name, 'consts': self.module.constants, - 'enums': self.module.enums, + 'enums': [enum for enum in self.module.enums if not IsFlags(enum)], + 'flags': [enum for enum in self.module.enums if IsFlags(enum)], '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_namespace': self.module.mojom_namespace != '', From patchwork Wed Aug 3 11:21:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16942 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 23CF5BE173 for ; Wed, 3 Aug 2022 11:22:14 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CE0DC6331D; Wed, 3 Aug 2022 13:22:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525733; bh=ppvRxNSi6zVgm/ZHFWO7Xq51kRH3h4p+Ge2C+Wqu1UQ=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=mCwEQsjVm0vb0+U8WXIHPAF/YLg/Dn688bzCtWM6YyYEDfXrY0QApjv7mafxViguU gm8/oR4iBHeBKD3UX11bFLXHckV5oscJ8/paxen3I6yeZKBFmtB+ZB1yqa5/4kdGG9 pH31QY48nOJ10ymoEpEQy0NXrh3pvb3beCnbbh2tgdMAmVc3Cz3074A4sNXyfjATUo p+iQEAFz4x7dlY7e+ZYK04GUkJnJvDUMvU0JNdTZSkDHrFWLFcS+EAJkVHtsqLsdrW dL5iZrCTRLPB4QlkmPpVpUw+oyxQxqV+WdnlYGFWGH7+v9bH/naaH77/MxwsW/hNyW AAdfqADD5LKdw== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 452F66331A for ; Wed, 3 Aug 2022 13:22:11 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="RKHO4S2q"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 177B48B; Wed, 3 Aug 2022 13:22:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525731; bh=ppvRxNSi6zVgm/ZHFWO7Xq51kRH3h4p+Ge2C+Wqu1UQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RKHO4S2qIzvm2xNCnkMvqhSmAI61sNgpudmQp+oOONjc0kT/1uWCmMWq2NHWwkLP5 VkCmbVvBpKUtB4sj5z8fcOT2EsqInQ2geO9rwPYSetRXMyNL2zxIP3QEzWzy2Ecb2l 4Y7Vf6S/gb47i7VhviRjdeCs3hoDasSptKwe1CM4= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:48 +0900 Message-Id: <20220803112150.3040287-8-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 7/9] test: generated_serializer: Test Flags that is struct member X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a Flags field to the test struct to test serialization/deserialization of Flags that are struct members. Signed-off-by: Paul Elder --- .../generated_serializer_test.cpp | 19 +++++++++++++++++++ .../include/libcamera/ipa/test.mojom | 8 ++++++++ 2 files changed, 27 insertions(+) diff --git a/test/serialization/generated_serializer/generated_serializer_test.cpp b/test/serialization/generated_serializer/generated_serializer_test.cpp index a4639a80..a2d71d62 100644 --- a/test/serialization/generated_serializer/generated_serializer_test.cpp +++ b/test/serialization/generated_serializer/generated_serializer_test.cpp @@ -53,6 +53,11 @@ if (struct1.field != struct2.field) { \ t.i = 58527; t.c = ipa::test::IPAOperationInit; + Flags flags; + flags |= ipa::test::ErrorFlags::Error1; + flags |= ipa::test::ErrorFlags::Error2; + t.f = flags; + std::vector serialized; std::tie(serialized, ignore) = @@ -72,6 +77,10 @@ if (struct1.field != struct2.field) { \ TEST_FIELD_EQUALITY(t, u, i); TEST_FIELD_EQUALITY(t, u, c); + if (t.f != u.f) { + cerr << "Flags f field incorrect" << endl; + return TestFail; + } /* Test vector of generated structs */ std::vector v = { t, u }; @@ -96,12 +105,22 @@ if (struct1.field != struct2.field) { \ TEST_FIELD_EQUALITY(v[0], w[0], i); TEST_FIELD_EQUALITY(v[0], w[0], c); + if (v[0].f != w[0].f) { + cerr << "Flags f field incorrect" << endl; + return TestFail; + } + TEST_FIELD_EQUALITY(v[1], w[1], s1); TEST_FIELD_EQUALITY(v[1], w[1], s2); TEST_FIELD_EQUALITY(v[1], w[1], s3); TEST_FIELD_EQUALITY(v[1], w[1], i); TEST_FIELD_EQUALITY(v[1], w[1], c); + if (v[1].f != w[1].f) { + cerr << "Flags f field incorrect" << endl; + return TestFail; + } + return TestPass; } diff --git a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom index 73081b40..5954672b 100644 --- a/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom +++ b/test/serialization/generated_serializer/include/libcamera/ipa/test.mojom @@ -9,6 +9,13 @@ enum IPAOperationCode { IPAOperationStop, }; +enum Flags_ErrorFlags_t { + Error1 = 0x1, + Error2 = 0x2, + Error3 = 0x4, + Error4 = 0x8, +}; + struct IPASettings {}; struct TestStruct { @@ -19,6 +26,7 @@ struct TestStruct { int32 i; string s3; IPAOperationCode c; + Flags_ErrorFlags_t f; }; interface IPATestInterface { From patchwork Wed Aug 3 11:21:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16943 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id A6312C3275 for ; Wed, 3 Aug 2022 11:22:14 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 51F2A63329; Wed, 3 Aug 2022 13:22:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525734; bh=NutUZ8ZDO1qmo2PvuUlvyhcyYEi/uw3OSFk1YTLOl/0=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=SSuQOXVERJIT49BqkWCnapUKznFKFHSR7uzHGjMBKQwrbh71Jd/tiJJSlmcB74xeC pG0PtXazpbw/tgYQykwA2vhUHk7h952+8UXo0cS1Y7xYUyf6Ll6lxJcLAJv2Auu3jC 6LRXH6cWgnaAh5X6+uGOV47v7iLHl1AHoBzFi47aE2Vj838KIQ/vAMquxy1/FJRiWE mkVjMTj9lndZl3BUwBzqmqF5JjZxNBW9es8Mb9mhz5QOv/hEbRpThcTpuIMHlvp+5E WnUujfEJLk5EzsOwvUL4KfuCh7OZBqEMHVLgwZSXZBFDl0a5aGasl+k6QfG4V1wJdc 73DIpyLc8wsbg== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C23A66331A for ; Wed, 3 Aug 2022 13:22:12 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="aPlLrADv"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9909830B; Wed, 3 Aug 2022 13:22:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525732; bh=NutUZ8ZDO1qmo2PvuUlvyhcyYEi/uw3OSFk1YTLOl/0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aPlLrADvdlqeGO3Wnzkdprhz73FsVwAXuILJOver4Qzb2E7P37l1fHmgFfK2C2Cuh 39u6lg/um1352BdWKPPxpY59UDRdx0sLPgxItsO76FDKuST93a0+KnEtkBfJmX7wPh 31y9bKXpd5xGgdax2tU/kYTfDJDcT2aAqbM0b5xw= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:49 +0900 Message-Id: <20220803112150.3040287-9-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 8/9] [TEST] ipa: vimc: Add IPAOperationCode to init() parameter list X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" For the purpose of testing serializing/deserializing enums in function parameters, add IPAOperationCode to the parameter list of init(). Signed-off-by: Paul Elder --- include/libcamera/ipa/vimc.mojom | 2 +- src/ipa/vimc/vimc.cpp | 6 ++++-- src/libcamera/pipeline/vimc/vimc.cpp | 2 +- test/ipa/ipa_interface_test.cpp | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/libcamera/ipa/vimc.mojom b/include/libcamera/ipa/vimc.mojom index 718b9674..16149787 100644 --- a/include/libcamera/ipa/vimc.mojom +++ b/include/libcamera/ipa/vimc.mojom @@ -18,7 +18,7 @@ enum IPAOperationCode { }; interface IPAVimcInterface { - init(libcamera.IPASettings settings) => (int32 ret); + init(libcamera.IPASettings settings, IPAOperationCode code) => (int32 ret); configure(libcamera.IPACameraSensorInfo sensorInfo, map streamConfig, diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp index 85afb279..6bf39a1c 100644 --- a/src/ipa/vimc/vimc.cpp +++ b/src/ipa/vimc/vimc.cpp @@ -31,7 +31,7 @@ public: IPAVimc(); ~IPAVimc(); - int init(const IPASettings &settings) override; + int init(const IPASettings &settings, const ipa::vimc::IPAOperationCode &code) override; int start() override; void stop() override; @@ -66,7 +66,7 @@ IPAVimc::~IPAVimc() ::close(fd_); } -int IPAVimc::init(const IPASettings &settings) +int IPAVimc::init(const IPASettings &settings, const ipa::vimc::IPAOperationCode &code) { trace(ipa::vimc::IPAOperationInit); @@ -74,6 +74,8 @@ int IPAVimc::init(const IPASettings &settings) << "initializing vimc IPA with configuration file " << settings.configurationFile; + LOG(IPAVimc, Debug) << "Got opcode " << code; + File conf(settings.configurationFile); if (!conf.open(File::OpenModeFlag::ReadOnly)) { LOG(IPAVimc, Error) << "Failed to open configuration file"; diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 3379ac5c..41b9d6f4 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -471,7 +471,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) data->ipa_->paramsBufferReady.connect(data.get(), &VimcCameraData::paramsBufferReady); std::string conf = data->ipa_->configurationFile("vimc.conf"); - data->ipa_->init(IPASettings{ conf, data->sensor_->model() }); + data->ipa_->init(IPASettings{ conf, data->sensor_->model() }, ipa::vimc::IPAOperationInit); /* Create and register the camera. */ std::set streams{ &data->stream_ }; diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp index 3c0df843..b9fa15cd 100644 --- a/test/ipa/ipa_interface_test.cpp +++ b/test/ipa/ipa_interface_test.cpp @@ -106,7 +106,7 @@ protected: /* Test initialization of IPA module. */ std::string conf = ipa_->configurationFile("vimc.conf"); - int ret = ipa_->init(IPASettings{ conf, "vimc" }); + int ret = ipa_->init(IPASettings{ conf, "vimc" }, ipa::vimc::IPAOperationInit); if (ret < 0) { cerr << "IPA interface init() failed" << endl; return TestFail; From patchwork Wed Aug 3 11:21:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 16944 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 5CD61BE173 for ; Wed, 3 Aug 2022 11:22:16 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0D8C963327; Wed, 3 Aug 2022 13:22:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659525736; bh=JroTs5NeD38Hq9kJl2/agSUMu4kG6U1mejM7F4NzBwY=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=FaMXPSx1PsQebQdviPnho52t05mK3zLW10SSqeKwMt2IT7ol6UzfXW1ODChZ+kq52 9FDTr1EgtGLPw/xxxCnPCP63eONy8Jp2J+2n+s3zbYHZtMWB24apg0ck0VYFDTg8KL k1v4IoaqgW9a7Ul8KlNgWiWkMp+UF1/lDbhYcUw0iBUhCCI2pqocuBzCGUmezCd6qR gYxnt8x3xvuWRAmsm0w/qCKt+r0P7qs5rwbejkGmKoFpcJpb0DYU44LbsTRKaLf6dQ 4WhBjumK/7puh8A3WS2aZzLD27piFrnwaNQMce/DHjktXKNz0xDe5zRSyQOVQYuhoH bkSjUZXksDdgQ== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 539DA6332A for ; Wed, 3 Aug 2022 13:22:14 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="X5zocdWk"; dkim-atps=neutral Received: from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp [175.177.42.159]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 264C18B; Wed, 3 Aug 2022 13:22:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659525734; bh=JroTs5NeD38Hq9kJl2/agSUMu4kG6U1mejM7F4NzBwY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X5zocdWkzEztJLtnM3lhCn+8ZG2neiu4DkmA9gQPUFEa2IMDi5SPcbIEOUr4JJxfM 9KylRaElEj+KbHPEjHaMnBC9W9EcUbc6zOMFqdDtwTbAQyIIlWKNtGEppar24orIMf OgthhhvezqvfGcwJ0GtBZPumigLzn5iv1jhAi1YA= To: libcamera-devel@lists.libcamera.org Date: Wed, 3 Aug 2022 20:21:50 +0900 Message-Id: <20220803112150.3040287-10-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220803112150.3040287-1-paul.elder@ideasonboard.com> References: <20220803112150.3040287-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 9/9] [TEST] ipa: vimc: Add Flags to parameters X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Paul Elder via libcamera-devel From: Paul Elder Reply-To: Paul Elder Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" For the purpose of testing serializing/deserializing Flags in function parameters, add an enum class TestFlags and Flags to some function parameters, both for input and output and Signals. While at it, update the ipa_interface_test. Signed-off-by: Paul Elder --- include/libcamera/ipa/vimc.mojom | 13 +++++++++++-- src/ipa/vimc/vimc.cpp | 21 +++++++++++++++++---- src/libcamera/pipeline/vimc/vimc.cpp | 16 +++++++++++++--- test/ipa/ipa_interface_test.cpp | 6 +++++- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/include/libcamera/ipa/vimc.mojom b/include/libcamera/ipa/vimc.mojom index 16149787..8c718fdd 100644 --- a/include/libcamera/ipa/vimc.mojom +++ b/include/libcamera/ipa/vimc.mojom @@ -17,8 +17,17 @@ enum IPAOperationCode { IPAOperationStop, }; +enum Flags_TestFlags_t { + Flag1 = 0x1, + Flag2 = 0x2, + Flag3 = 0x4, + Flag4 = 0x8, +}; + interface IPAVimcInterface { - init(libcamera.IPASettings settings, IPAOperationCode code) => (int32 ret); + init(libcamera.IPASettings settings, + IPAOperationCode code, + Flags_TestFlags_t inFlags) => (int32 ret, Flags_TestFlags_t outFlags); configure(libcamera.IPACameraSensorInfo sensorInfo, map streamConfig, @@ -41,5 +50,5 @@ interface IPAVimcInterface { }; interface IPAVimcEventInterface { - paramsBufferReady(uint32 bufferId); + paramsBufferReady(uint32 bufferId, Flags_TestFlags_t flags); }; diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp index 6bf39a1c..bb4ca355 100644 --- a/src/ipa/vimc/vimc.cpp +++ b/src/ipa/vimc/vimc.cpp @@ -31,7 +31,10 @@ public: IPAVimc(); ~IPAVimc(); - int init(const IPASettings &settings, const ipa::vimc::IPAOperationCode &code) override; + int init(const IPASettings &settings, + const ipa::vimc::IPAOperationCode &code, + const Flags &inFlags, + Flags *outFlags) override; int start() override; void stop() override; @@ -65,8 +68,10 @@ IPAVimc::~IPAVimc() if (fd_ != -1) ::close(fd_); } - -int IPAVimc::init(const IPASettings &settings, const ipa::vimc::IPAOperationCode &code) +int IPAVimc::init(const IPASettings &settings, + const ipa::vimc::IPAOperationCode &code, + const Flags &inFlags, + Flags *outFlags) { trace(ipa::vimc::IPAOperationInit); @@ -76,6 +81,13 @@ int IPAVimc::init(const IPASettings &settings, const ipa::vimc::IPAOperationCode LOG(IPAVimc, Debug) << "Got opcode " << code; + LOG(IPAVimc, Debug) + << "Flag 2 was " + << ((inFlags & ipa::vimc::TestFlags::Flag2) ? "" : "not ") + << "set"; + + *outFlags |= ipa::vimc::TestFlags::Flag1; + File conf(settings.configurationFile); if (!conf.open(File::OpenModeFlag::ReadOnly)) { LOG(IPAVimc, Error) << "Failed to open configuration file"; @@ -144,7 +156,8 @@ void IPAVimc::fillParamsBuffer([[maybe_unused]] uint32_t frame, uint32_t bufferI return; } - paramsBufferReady.emit(bufferId); + Flags flags; + paramsBufferReady.emit(bufferId, flags); } void IPAVimc::initTrace() diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 41b9d6f4..7798be0a 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -54,7 +54,7 @@ public: int init(); int allocateMockIPABuffers(); void bufferReady(FrameBuffer *buffer); - void paramsBufferReady(unsigned int id); + void paramsBufferReady(unsigned int id, const Flags &flags); MediaDevice *media_; std::unique_ptr sensor_; @@ -471,7 +471,16 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator) data->ipa_->paramsBufferReady.connect(data.get(), &VimcCameraData::paramsBufferReady); std::string conf = data->ipa_->configurationFile("vimc.conf"); - data->ipa_->init(IPASettings{ conf, data->sensor_->model() }, ipa::vimc::IPAOperationInit); + Flags inFlags; + Flags outFlags; + inFlags |= ipa::vimc::TestFlags::Flag2; + data->ipa_->init(IPASettings{ conf, data->sensor_->model() }, + ipa::vimc::IPAOperationInit, inFlags, &outFlags); + + LOG(VIMC, Debug) + << "Flag 1 was " + << ((outFlags & ipa::vimc::TestFlags::Flag1) ? "" : "not ") + << "set"; /* Create and register the camera. */ std::set streams{ &data->stream_ }; @@ -608,7 +617,8 @@ int VimcCameraData::allocateMockIPABuffers() return video_->exportBuffers(kBufCount, &mockIPABufs_); } -void VimcCameraData::paramsBufferReady([[maybe_unused]] unsigned int id) +void VimcCameraData::paramsBufferReady([[maybe_unused]] unsigned int id, + [[maybe_unused]] const Flags &flags) { } diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp index b9fa15cd..47c7352b 100644 --- a/test/ipa/ipa_interface_test.cpp +++ b/test/ipa/ipa_interface_test.cpp @@ -106,7 +106,11 @@ protected: /* Test initialization of IPA module. */ std::string conf = ipa_->configurationFile("vimc.conf"); - int ret = ipa_->init(IPASettings{ conf, "vimc" }, ipa::vimc::IPAOperationInit); + Flags inFlags; + Flags outFlags; + int ret = ipa_->init(IPASettings{ conf, "vimc" }, + ipa::vimc::IPAOperationInit, + inFlags, &outFlags); if (ret < 0) { cerr << "IPA interface init() failed" << endl; return TestFail;