#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);
/**
* @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
*/
/**
* @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
*
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)
{
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;
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, },
};
thread_device_type_e deviceType;
thread_scan_param_h scanParam;
uint64_t extendedAddress;
+ uint16_t threadVersion;
const char *uuid;
public:
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());