Add new CAPI for getting Thread Protocol version 07/302107/3
authorArkadiusz Bokowy <a.bokowy@partner.samsung.com>
Wed, 29 Nov 2023 15:28:00 +0000 (16:28 +0100)
committerArkadiusz Bokowy <a.bokowy@partner.samsung.com>
Tue, 5 Dec 2023 07:13:46 +0000 (08:13 +0100)
Change-Id: I7fb92d8dfce618232cd4db31a7b6afaff9e1e8b0

include/thread-dbus-handler.h
include/thread-type.h
include/thread.h
src/thread-core.c
tests/thread-test/thread-core.c
tests/unittest/thread-unittest-core.cpp

index 53ba5c7..4614029 100644 (file)
@@ -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);
 
index b903c58..1162488 100755 (executable)
@@ -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
  */
index 32b5ddd..160d9d0 100644 (file)
@@ -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
  *
index 66a1620..4a1ce41 100644 (file)
@@ -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)
 {
index 293f72c..5140cbe 100755 (executable)
@@ -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, },
 };
index b0eb337..3574421 100644 (file)
@@ -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());