From acc455f87e227ec0367d377e7f03844ab09c249e Mon Sep 17 00:00:00 2001 From: Wataru Ishida Date: Thu, 2 Sep 2021 03:56:48 +0000 Subject: [PATCH] mux: capability API support Signed-off-by: Wataru Ishida --- tai_mux/module_adapter.hpp | 21 +++++++++++++++++++++ tai_mux/mux.hpp | 11 ++++++----- tai_mux/oopt-tai | 2 +- tai_mux/platform_adapter.cpp | 9 +++++++++ tai_mux/platform_adapter.hpp | 1 + 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/tai_mux/module_adapter.hpp b/tai_mux/module_adapter.hpp index 7b80278..895fac0 100644 --- a/tai_mux/module_adapter.hpp +++ b/tai_mux/module_adapter.hpp @@ -68,6 +68,27 @@ namespace tai::mux { return TAI_STATUS_NOT_SUPPORTED; } + tai_status_t get_capabilities(tai_object_type_t type, tai_object_id_t oid, uint32_t count, tai_attribute_capability_t *list) { + switch (type) { + case TAI_OBJECT_TYPE_MODULE: + if ( m_module_api == nullptr || m_module_api->get_module_capabilities == nullptr ) { + return TAI_STATUS_NOT_SUPPORTED; + } + return m_module_api->get_module_capabilities(oid, count, list); + case TAI_OBJECT_TYPE_NETWORKIF: + if ( m_netif_api == nullptr || m_netif_api->get_network_interface_capabilities == nullptr ) { + return TAI_STATUS_NOT_SUPPORTED; + } + return m_netif_api->get_network_interface_capabilities(oid, count, list); + case TAI_OBJECT_TYPE_HOSTIF: + if ( m_hostif_api == nullptr || m_hostif_api->get_host_interface_capabilities == nullptr ) { + return TAI_STATUS_NOT_SUPPORTED; + } + return m_hostif_api->get_host_interface_capabilities(oid, count, list); + } + return TAI_STATUS_NOT_SUPPORTED; + } + tai_status_t create_module( _Out_ tai_object_id_t *module_id, _In_ uint32_t attr_count, diff --git a/tai_mux/mux.hpp b/tai_mux/mux.hpp index 90c5519..788242f 100644 --- a/tai_mux/mux.hpp +++ b/tai_mux/mux.hpp @@ -61,7 +61,8 @@ namespace tai::mux { Object(S_PlatformAdapter pa) : m_context{pa}, tai::framework::Object(0, nullptr, std::make_shared(), reinterpret_cast(&m_context), std::bind(&Object::default_setter, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5), - std::bind(&Object::default_getter, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)) {} + std::bind(&Object::default_getter, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), + std::bind(&Object::default_cap_getter, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)) {} tai_object_id_t id() const { return m_context.oid; @@ -80,10 +81,10 @@ namespace tai::mux { return m_context.pa->set(T, id(), count, attribute); } tai_status_t default_getter(uint32_t count, tai_attribute_t* const attribute, void* const user, const tai::framework::error_info* const info) { - auto ret = m_context.pa->get(T, id(), count, attribute); - if ( ret != TAI_STATUS_SUCCESS ) { - } - return ret; + return m_context.pa->get(T, id(), count, attribute); + } + tai_status_t default_cap_getter(uint32_t count, tai_attribute_capability_t* const caps, void* const user, const tai::framework::error_info* const info) { + return m_context.pa->get_capability(T, id(), count, caps); } }; diff --git a/tai_mux/oopt-tai b/tai_mux/oopt-tai index 7711e23..ba4b1ba 160000 --- a/tai_mux/oopt-tai +++ b/tai_mux/oopt-tai @@ -1 +1 @@ -Subproject commit 7711e2332db587b97d98fbcc4c3d0fde4afd3b16 +Subproject commit ba4b1ba6a68be8cec28801c7c85a4573c25a1565 diff --git a/tai_mux/platform_adapter.cpp b/tai_mux/platform_adapter.cpp index 6bf11b8..b665964 100644 --- a/tai_mux/platform_adapter.cpp +++ b/tai_mux/platform_adapter.cpp @@ -156,6 +156,15 @@ namespace tai::mux { return TAI_STATUS_SUCCESS; } + tai_status_t PlatformAdapter::get_capability(const tai_object_type_t& type, const tai_object_id_t& id, uint32_t count, tai_attribute_capability_t* const caps) { + S_ModuleAdapter adapter; + tai_object_id_t real_id; + if ( get_mapping(id, &adapter, &real_id) != 0 ) { + return TAI_STATUS_FAILURE; + } + return adapter->get_capabilities(type, real_id, count, caps); + } + tai_status_t PlatformAdapter::set(const tai_object_type_t& type, const tai_object_id_t& id, uint32_t count, const tai_attribute_t* const attrs) { S_ModuleAdapter adapter; tai_object_id_t real_id; diff --git a/tai_mux/platform_adapter.hpp b/tai_mux/platform_adapter.hpp index 852d816..b61c249 100644 --- a/tai_mux/platform_adapter.hpp +++ b/tai_mux/platform_adapter.hpp @@ -112,6 +112,7 @@ namespace tai::mux { tai_status_t get(const tai_object_type_t& type, const tai_object_id_t& id, uint32_t count, tai_attribute_t* const attrs); tai_status_t set(const tai_object_type_t& type, const tai_object_id_t& id, uint32_t count, const tai_attribute_t* const attrs); + tai_status_t get_capability(const tai_object_type_t& type, const tai_object_id_t& id, uint32_t count, tai_attribute_capability_t* const caps); virtual tai_status_t get_mux_attribute(const tai_object_type_t& type, const tai_object_id_t& oid, tai_attribute_t* const attribute); virtual tai_status_t set_mux_attribute(const tai_object_type_t& type, const tai_object_id_t& oid, const tai_attribute_t* const attribute, tai::framework::FSMState* state);