From a65b3ebb6512a90d6837f2558092dd5440a769c7 Mon Sep 17 00:00:00 2001 From: Arkadiusz Bokowy Date: Wed, 29 Nov 2023 16:28:00 +0100 Subject: [PATCH] Add new CAPI for getting Thread Protocol version Change-Id: I7fb92d8dfce618232cd4db31a7b6afaff9e1e8b0 --- include/thread-dbus-handler.h | 1 + include/thread-type.h | 12 ++++++++++++ include/thread.h | 15 +++++++++++++++ src/thread-core.c | 23 +++++++++++++++++++++++ tests/thread-test/thread-core.c | 22 ++++++++++++++++++++++ tests/unittest/thread-unittest-core.cpp | 21 +++++++++++++++++++++ 6 files changed, 94 insertions(+) diff --git a/include/thread-dbus-handler.h b/include/thread-dbus-handler.h index 53ba5c7..4614029 100644 --- a/include/thread-dbus-handler.h +++ b/include/thread-dbus-handler.h @@ -75,6 +75,7 @@ extern "C" { #define THREAD_DBUS_PROPERTY_ACTIVE_DATASET_TLVS "ActiveDatasetTlvs" #define THREAD_DBUS_PROPERTY_RADIO_REGION "RadioRegion" #define THREAD_DBUS_PROPERTY_ON_MESH_PREFIXES "OnMeshPrefixes" +#define THREAD_DBUS_PROPERTY_THREAD_VERSION "ThreadVersion" typedef void (*thread_async_request_cb)(gboolean res, const char *method, GVariant *val, void *user_data); diff --git a/include/thread-type.h b/include/thread-type.h index b903c58..1162488 100755 --- a/include/thread-type.h +++ b/include/thread-type.h @@ -85,6 +85,18 @@ typedef enum { /** * @ingroup CAPI_NETWORK_THREAD_MODULE + * @brief Enumerations of thread protocol version + * @since_tizen 7.0 + */ +typedef enum { + THREAD_VERSION_1_0 = 1, ///< Thread Version 1.0 + THREAD_VERSION_1_1 = 2, ///< Thread Version 1.1 + THREAD_VERSION_1_2 = 3, ///< Thread Version 1.2 + THREAD_VERSION_1_3 = 4, ///< Thread Version 1.3 +} thread_version_e; + +/** + * @ingroup CAPI_NETWORK_THREAD_MODULE * @brief Enumerations of thread device role * @since_tizen 7.0 */ diff --git a/include/thread.h b/include/thread.h index 32b5ddd..160d9d0 100644 --- a/include/thread.h +++ b/include/thread.h @@ -179,6 +179,21 @@ int thread_factoryreset(thread_instance_h instance); /** * @ingroup CAPI_NETWORK_THREAD_MODULE + * @brief Get Thread Protocol Version + * @since_tizen 7.0 + * + * @return 0 on success, otherwise a negative error value. + * @retval #THREAD_ERROR_NONE Successful + * @retval #THREAD_ERROR_NOT_INITIALIZED Not initialized + * @retval #THREAD_ERROR_OPERATION_FAILED Operation failed + * + * @pre thread API must be initialized with thread_initialize(). + * @see thread_version_e + */ +int thread_get_version(thread_instance_h instance, uint16_t *version); + +/** + * @ingroup CAPI_NETWORK_THREAD_MODULE * @brief Get Thread Device Role * @since_tizen 7.0 * diff --git a/src/thread-core.c b/src/thread-core.c index 66a1620..4a1ce41 100644 --- a/src/thread-core.c +++ b/src/thread-core.c @@ -297,6 +297,29 @@ int thread_factoryreset(thread_instance_h instance) return ret; } +int thread_get_version(thread_instance_h instance, uint16_t *version) +{ + FUNC_ENTRY; + THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); + THREAD_CHECK_INIT_STATUS(); + THREAD_VALIDATE_INPUT_PARAMETER(instance); + THREAD_VALIDATE_INPUT_PARAMETER(version); + + int ret = THREAD_ERROR_NONE; + GVariant *out = NULL; + + /* get "ThreadVersion" dbus property */ + ret = _thread_dbus_get_property( + THREAD_DBUS_PROPERTY_THREAD_VERSION, &out); + retv_if(ret != THREAD_ERROR_NONE, ret); + + *version = g_variant_get_uint16(out); + g_variant_unref(out); + + FUNC_EXIT; + return ret; +} + int thread_get_device_role(thread_instance_h instance, thread_device_role_e *device_role) { diff --git a/tests/thread-test/thread-core.c b/tests/thread-test/thread-core.c index 293f72c..5140cbe 100755 --- a/tests/thread-test/thread-core.c +++ b/tests/thread-test/thread-core.c @@ -184,6 +184,26 @@ OUT: return RET_SUCCESS; } +static int run_thread_get_version(MManager *mm, struct menu_data *menu) +{ + FUNC_ENTRY; + thread_instance_h g_instance = mm->t_instance; + if (g_instance == NULL) + goto OUT; + + uint16_t version; + int ret = thread_get_version(g_instance, &version); + if (ret == THREAD_ERROR_NONE) + msg("thread_get_version success"); + else + msg("thread_get_version failed"); + + msg("- thread_get_version() ret: version->[%u]", version); +OUT: + FUNC_EXIT; + return RET_SUCCESS; +} + static int run_thread_get_device_role(MManager *mm, struct menu_data *menu) { FUNC_ENTRY; @@ -390,5 +410,7 @@ struct menu_data menu_thread_core[] = { NULL, run_thread_get_extended_address, NULL }, { "14", "thread_get_extended_uuid", NULL, run_thread_get_extended_uuid, NULL }, + { "15", "thread_get_version", + NULL, run_thread_get_version, NULL }, { NULL, NULL, }, }; diff --git a/tests/unittest/thread-unittest-core.cpp b/tests/unittest/thread-unittest-core.cpp index b0eb337..3574421 100644 --- a/tests/unittest/thread-unittest-core.cpp +++ b/tests/unittest/thread-unittest-core.cpp @@ -29,6 +29,7 @@ public: thread_device_type_e deviceType; thread_scan_param_h scanParam; uint64_t extendedAddress; + uint16_t threadVersion; const char *uuid; public: @@ -157,6 +158,26 @@ TEST_F(ThreadCoreTest, FactoryresetErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_factoryreset(instance)); } +TEST_F(ThreadCoreTest, GetVersionNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_get_version(instance, &threadVersion)); +} + +TEST_F(ThreadCoreTest, GetVersionInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_get_version(nullptr, &threadVersion)); + + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_get_version(instance, nullptr)); +} + +TEST_F(ThreadCoreTest, GetVersionErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_get_version(instance, &threadVersion)); +} + TEST_F(ThreadCoreTest, GetDeviceRoleNotInitialized) { EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); -- 2.7.4