[Util] function to get version accepted/tizen/unified/20230818.183541
authorJaeyun Jung <jy1210.jung@samsung.com>
Mon, 14 Aug 2023 10:46:49 +0000 (19:46 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Wed, 16 Aug 2023 05:43:57 +0000 (14:43 +0900)
Add util function to get the version of nnstreamer-edge.

TODO:
Add version info while sending or receiving data between the connected devices.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
CMakeLists.txt
include/nnstreamer-edge.h
src/libnnstreamer-edge/nnstreamer-edge-util.c
src/libnnstreamer-edge/nnstreamer-edge-util.h
tests/unittest_nnstreamer-edge.cc

index 5a765cf0b1716eed688f5af1dc7b1b1303ca139c..c28622344d0b2a415afb406d23011621bee5b6ef 100644 (file)
@@ -28,6 +28,13 @@ ELSE()
     SET(NNS_EDGE_FLAGS "-DDEBUG=0")
 ENDIF()
 
+STRING(REPLACE "." ";" VERSION_LIST ${VERSION})
+LIST(GET VERSION_LIST 0 VERSION_MAJOR)
+LIST(GET VERSION_LIST 1 VERSION_MINOR)
+LIST(GET VERSION_LIST 2 VERSION_MICRO)
+
+SET(NNS_EDGE_FLAGS "${NNS_EDGE_FLAGS} -DVERSION_MAJOR=${VERSION_MAJOR} -DVERSION_MINOR=${VERSION_MINOR} -DVERSION_MICRO=${VERSION_MICRO}")
+
 # Set as-needed option
 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
index 93b26bd911a42103de8371c92bdb01259e564f0e..ffa5edc7b4be9351294786893307812e1cd8b649 100644 (file)
@@ -494,6 +494,14 @@ int nns_edge_data_clear_info (nns_edge_data_h data_h);
  */
 void nns_edge_set_log_level (nns_edge_log_level_e level);
 
+/**
+ * @brief Get the version of nnstreamer-edge.
+ * @param[out] major MAJOR.minor.micro, won't set if it's null.
+ * @param[out] minor major.MINOR.micro, won't set if it's null.
+ * @param[out] micro major.minor.MICRO, won't set if it's null.
+ */
+void nns_edge_get_version (unsigned int *major, unsigned int *minor, unsigned int *micro);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 44a4e868ee55884c8e12d4fdfadcb77b5bb48dfa..a570c0aee4d6830972002d913d5e4dc472b74a05 100644 (file)
@@ -32,6 +32,54 @@ nns_edge_generate_id (void)
   return _id;
 }
 
+/**
+ * @brief Get the version of nnstreamer-edge.
+ */
+void
+nns_edge_get_version (unsigned int *major, unsigned int *minor,
+    unsigned int *micro)
+{
+  if (major)
+    *major = VERSION_MAJOR;
+  if (minor)
+    *minor = VERSION_MINOR;
+  if (micro)
+    *micro = VERSION_MICRO;
+}
+
+/**
+ * @brief Generate the version key.
+ */
+uint64_t
+nns_edge_generate_version_key (void)
+{
+  unsigned int major, minor, micro;
+
+  nns_edge_get_version (&major, &minor, &micro);
+
+  return (0xefdd000000000000ULL | (micro << 24) | (major << 12) | minor);
+}
+
+/**
+ * @brief Parse the version key.
+ */
+bool
+nns_edge_parse_version_key (const uint64_t version_key, unsigned int *major,
+    unsigned int *minor, unsigned int *micro)
+{
+  if ((version_key & 0xffff000000000000ULL) != 0xefdd000000000000ULL)
+    return false;
+
+  if (minor)
+    *minor = (unsigned int) (version_key & 0xfff);
+  if (major)
+    *major = (unsigned int) ((version_key >> 12) & 0xfff);
+  if (micro)
+    *micro = (unsigned int) ((version_key >> 24) & 0xfff);
+
+  return true;
+}
+
 /**
  * @brief Internal util function to get available port number.
  */
index 0238e7fa189b973425c2fa91762fe68d86edf193..45e499ff6e3174ab98e27a1e47a911accc55f817 100644 (file)
@@ -17,6 +17,7 @@
 #include <netinet/tcp.h>
 #include <netinet/in.h>
 #include <pthread.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -83,6 +84,16 @@ typedef struct {
  */
 int64_t nns_edge_generate_id (void);
 
+/**
+ * @brief Generate the version key.
+ */
+uint64_t nns_edge_generate_version_key (void);
+
+/**
+ * @brief Parse the version key.
+ */
+bool nns_edge_parse_version_key (const uint64_t version_key, unsigned int *major, unsigned int *minor, unsigned int *micro);
+
 /**
  * @brief Get available port number.
  */
index 567d3736232ba93427d757f05708a5009298fb69..3dd5b75aa5fb5be82afcaf32315bb2ac516da0b2 100644 (file)
@@ -3826,6 +3826,23 @@ TEST(edgeQueue, waitPopInvalidParam03_n)
   EXPECT_TRUE (nns_edge_queue_destroy (queue_h));
 }
 
+/**
+ * @brief Util to get the version.
+ */
+TEST(edgeUtil, getVersion)
+{
+  unsigned int major1, minor1, micro1;
+  unsigned int major2, minor2, micro2;
+  uint64_t ver_key;
+
+  nns_edge_get_version (&major1, &minor1, &micro1);
+  ver_key = nns_edge_generate_version_key ();
+  EXPECT_TRUE (nns_edge_parse_version_key (ver_key, &major2, &minor2, &micro2));
+  EXPECT_EQ (major1, major2);
+  EXPECT_EQ (minor1, minor2);
+  EXPECT_EQ (micro1, micro2);
+}
+
 /**
  * @brief Main gtest
  */