From 96bb7fe62013637e94bf47464577a38948c838d8 Mon Sep 17 00:00:00 2001 From: Gichan Jang Date: Tue, 18 Feb 2025 17:53:34 +0900 Subject: [PATCH] [Custom] Add disconnect function for custom connection - Add disconnection function for custom connection - Add unit test Signed-off-by: Gichan Jang --- include/nnstreamer-edge-custom.h | 1 + .../nnstreamer-edge-custom-impl.c | 23 +++++++++++++++++++ .../nnstreamer-edge-custom-impl.h | 6 +++++ .../nnstreamer-edge-internal.c | 9 ++++++-- tests/nnstreamer-edge-custom-test.c | 15 ++++++++++++ tests/unittest_nnstreamer-edge-custom.cc | 19 +++++++++++++++ 6 files changed, 71 insertions(+), 2 deletions(-) diff --git a/include/nnstreamer-edge-custom.h b/include/nnstreamer-edge-custom.h index 95b5594..0b5f8b4 100644 --- a/include/nnstreamer-edge-custom.h +++ b/include/nnstreamer-edge-custom.h @@ -32,6 +32,7 @@ typedef struct int (*nns_edge_custom_start) (void *priv); int (*nns_edge_custom_stop) (void *priv); int (*nns_edge_custom_connect) (void *priv); + int (*nns_edge_custom_disconnect) (void *priv); int (*nns_edge_custom_subscribe) (void *priv); int (*nns_edge_custom_is_connected) (void *priv); int (*nns_edge_custom_start_discovery) (void *priv); diff --git a/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.c b/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.c index 3d4dee1..1183345 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.c @@ -289,6 +289,29 @@ nns_edge_custom_connect (nns_edge_custom_connection_h handle) return ret; } +/** + * @brief Internal function to disconnect custom connection. + */ +int +nns_edge_custom_disconnect (nns_edge_custom_connection_h handle) +{ + custom_connection_s *custom = (custom_connection_s *) handle; + nns_edge_custom_s *custom_h; + int ret; + + if (!custom || !custom->instance) + return NNS_EDGE_ERROR_INVALID_PARAMETER; + + custom_h = custom->instance; + + ret = custom_h->nns_edge_custom_disconnect (custom->priv); + if (NNS_EDGE_ERROR_NONE != ret) { + nns_edge_loge ("Failed to disconnect custom connection."); + } + + return ret; +} + /** * @brief Internal function to check custom connection. */ diff --git a/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.h b/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.h index 2a98992..e5f4ca9 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-custom-impl.h @@ -62,6 +62,11 @@ int nns_edge_custom_set_event_callback (nns_edge_custom_connection_h handle, nns */ int nns_edge_custom_connect (nns_edge_custom_connection_h handle); +/** + * @brief Internal function to disconnect custom connection. + */ +int nns_edge_custom_disconnect (nns_edge_custom_connection_h handle); + /** * @brief Internal function to check custom connection. */ @@ -90,6 +95,7 @@ int nns_edge_custom_get_info (nns_edge_custom_connection_h handle, const char *k #define nns_edge_custom_stop_discovery(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) #define nns_edge_custom_set_event_callback(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) #define nns_edge_custom_connect(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) +#define nns_edge_custom_disconnect(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) #define nns_edge_custom_is_connected(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) #define nns_edge_custom_send_data(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) #define nns_edge_custom_set_info(...) (NNS_EDGE_ERROR_NOT_SUPPORTED) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index 762815d..097fbaa 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -1836,6 +1836,7 @@ int nns_edge_disconnect (nns_edge_h edge_h) { nns_edge_handle_s *eh; + int ret = NNS_EDGE_ERROR_NONE; eh = (nns_edge_handle_s *) edge_h; if (!eh) { @@ -1849,10 +1850,14 @@ nns_edge_disconnect (nns_edge_h edge_h) } nns_edge_lock (eh); - _nns_edge_remove_all_connection (eh); + if (NNS_EDGE_CONNECT_TYPE_CUSTOM == eh->connect_type) { + ret = nns_edge_custom_disconnect (eh->custom_connection_h); + } else { + _nns_edge_remove_all_connection (eh); + } nns_edge_unlock (eh); - return NNS_EDGE_ERROR_NONE; + return ret; } /** diff --git a/tests/nnstreamer-edge-custom-test.c b/tests/nnstreamer-edge-custom-test.c index b627d9a..c16ac2f 100644 --- a/tests/nnstreamer-edge-custom-test.c +++ b/tests/nnstreamer-edge-custom-test.c @@ -102,6 +102,20 @@ nns_edge_custom_connect (void *priv) return NNS_EDGE_ERROR_NONE; } +static int +nns_edge_custom_disconnect (void *priv) +{ + if (!priv) { + nns_edge_loge ("Invalid param, handle should not be null."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + nns_edge_custom_test_s *custom_h = (nns_edge_custom_test_s *) priv; + custom_h->is_connected = 0; + + return NNS_EDGE_ERROR_NONE; +} + + static int nns_edge_custom_subscribe (void *priv) { @@ -223,6 +237,7 @@ nns_edge_custom_s edge_custom_h = { .nns_edge_custom_stop_discovery = nns_edge_custom_stop_discovery, .nns_edge_custom_stop = nns_edge_custom_stop, .nns_edge_custom_connect = nns_edge_custom_connect, + .nns_edge_custom_disconnect = nns_edge_custom_disconnect, .nns_edge_custom_subscribe = nns_edge_custom_subscribe, .nns_edge_custom_is_connected = nns_edge_custom_is_connected, .nns_edge_custom_set_event_cb = nns_edge_custom_set_event_cb, diff --git a/tests/unittest_nnstreamer-edge-custom.cc b/tests/unittest_nnstreamer-edge-custom.cc index 0f0c55a..17030d5 100644 --- a/tests/unittest_nnstreamer-edge-custom.cc +++ b/tests/unittest_nnstreamer-edge-custom.cc @@ -134,6 +134,14 @@ TEST (edgeCustom, expectedReturn) ret = nns_edge_is_connected (edge_h); EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + ret = nns_edge_disconnect (edge_h); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + ret = nns_edge_is_connected (edge_h); + EXPECT_EQ (NNS_EDGE_ERROR_CONNECTION_FAILURE, ret); + + ret = nns_edge_connect (edge_h, "temp", 3000); + EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); + ret = nns_edge_data_create (&data_h); EXPECT_EQ (NNS_EDGE_ERROR_NONE, ret); ret = nns_edge_send (edge_h, data_h); @@ -262,6 +270,17 @@ TEST (edgeCustom, connectInvalidParam01_n) EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); } +/** + * @brief Disconnect edge custom - invalid param. + */ +TEST (edgeCustom, disconnectInvalidParam01_n) +{ + int ret; + + ret = nns_edge_custom_disconnect (NULL); + EXPECT_NE (NNS_EDGE_ERROR_NONE, ret); +} + /** * @brief Check connection of edge custom - invalid param. */ -- 2.34.1