Add device/platform info to lib. 42/62042/3
authoryoungman <yman.jung@samsung.com>
Mon, 14 Mar 2016 04:51:30 +0000 (13:51 +0900)
committeryoungman <yman.jung@samsung.com>
Mon, 14 Mar 2016 07:39:06 +0000 (16:39 +0900)
Change-Id: Ib20f457294ec0160239134920920ff57fe47915f
Signed-off-by: youngman <yman.jung@samsung.com>
lib/CMakeLists.txt
lib/icl-ioty.c
lib/icl-ioty.h
lib/icl.c

index f4840a231829441fe2a360cb8608556bb0b5f84a..396b76b3899e084a7405c4fba2f3acea870ea183 100644 (file)
@@ -7,8 +7,8 @@ SET(CLIENT_SRCS ${CLIENT_SRCS} ${CMAKE_SOURCE_DIR}/common/ic-dbus.c)
 SET_SOURCE_FILES_PROPERTIES(${CMAKE_SOURCE_DIR}/common/ic-dbus.c
        PROPERTIES GENERATED TRUE)
 
-pkg_check_modules(client_pkgs REQUIRED glib-2.0 dlog capi-base-common gio-2.0 capi-system-info
-       gio-unix-2.0 iotivity)
+pkg_check_modules(client_pkgs REQUIRED glib-2.0 dlog capi-base-common gio-2.0
+       capi-system-info capi-system-system-settings gio-unix-2.0 iotivity)
 
 FOREACH(flag ${client_pkgs_CFLAGS_OTHER})
        IF(${flag} MATCHES "\\-D+")
index 79aa719177c286078746193f123652f47c0d2ce9..8ba7b6f06325d30721ad6c6dc971ff7dfd1fac80 100644 (file)
@@ -20,6 +20,8 @@
 #include <octypes.h>
 #include <ocstack.h>
 #include <ocpayload.h>
+#include <system_info.h>
+#include <system_settings.h>
 
 #include "iotcon.h"
 #include "iotcon-internal.h"
 #include "icl-ioty-types.h"
 #include "icl-ioty.h"
 
+static const char *ICL_SYSTEM_INFO_PLATFORM_NAME = "http://tizen.org/system/platform.name";
+static const char *ICL_SYSTEM_INFO_PLATFORM_VERSION = "http://tizen.org/feature/platform.version";
+static const char *ICL_SYSTEM_INFO_MANUF_NAME = "http://tizen.org/system/manufacturer";
+static const char *ICL_SYSTEM_INFO_MODEL_NAME = "http://tizen.org/system/model_name";
+static const char *ICL_SYSTEM_INFO_BUILD_STRING = "http://tizen.org/system/build.string";
+
 static GMutex icl_csdk_mutex;
 static int icl_remote_resource_time_interval = IC_REMOTE_RESOURCE_DEFAULT_TIME_INTERVAL;
 static GHashTable *icl_monitoring_table;
@@ -72,7 +80,7 @@ void icl_ioty_deinit(GThread *thread)
                ERR("OCStop() Fail(%d)", result);
 }
 
-GThread* icl_ioty_init()
+int icl_ioty_init(GThread **out_thread)
 {
        FN_CALL;
        GError *error;
@@ -81,7 +89,7 @@ GThread* icl_ioty_init()
        OCStackResult result = OCInit(NULL, 0, OC_CLIENT_SERVER);
        if (OC_STACK_OK != result) {
                ERR("OCInit() Fail(%d)", result);
-               return NULL;
+               return ic_ioty_parse_oic_error(result);
        }
 
        icl_ioty_ocprocess_start();
@@ -91,10 +99,12 @@ GThread* icl_ioty_init()
        if (NULL == thread) {
                ERR("g_thread_try_new() Fail(%s)", error->message);
                g_error_free(error);
-               return NULL;
+               return IOTCON_ERROR_SYSTEM;
        }
 
-       return thread;
+       *out_thread = thread;
+
+       return IOTCON_ERROR_NONE;
 }
 
 static gboolean _icl_ioty_timeout(gpointer user_data)
@@ -325,6 +335,146 @@ int icl_ioty_get_platform_info(const char *host_address,
        return IOTCON_ERROR_NONE;
 }
 
+static int _ioty_set_device_info()
+{
+       int ret;
+       char *device_name = NULL;
+       OCDeviceInfo device_info = {0};
+
+       ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_DEVICE_NAME, &device_name);
+       if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
+               ERR("system_settings_get_value_string() Fail(%d)", ret);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       device_info.deviceName = device_name;
+
+       icl_ioty_csdk_lock();
+       ret = OCSetDeviceInfo(device_info);
+       icl_ioty_csdk_unlock();
+
+       if (OC_STACK_OK != ret) {
+               ERR("OCSetDeviceInfo() Fail(%d)", ret);
+               free(device_name);
+               return ic_ioty_parse_oic_error(ret);
+       }
+
+       return IOTCON_ERROR_NONE;
+}
+
+static void _icl_ioty_on_device_name_changed_cb(system_settings_key_e key,
+               void *user_data)
+{
+       int ret;
+
+       ret = _ioty_set_device_info();
+       if (IOTCON_ERROR_NONE != ret) {
+               ERR("_ioty_set_device_info() Fail(%d)", ret);
+               return;
+       }
+}
+
+int icl_ioty_set_device_info()
+{
+       int ret;
+
+       ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_DEVICE_NAME,
+                       _icl_ioty_on_device_name_changed_cb, NULL);
+       if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
+               ERR("system_settings_set_changed_cb() Fail(%d)", ret);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       ret = _ioty_set_device_info();
+       if (IOTCON_ERROR_NONE != ret) {
+               ERR("_ioty_set_device_info() Fail(%d)", ret);
+               return ret;
+       }
+
+       return IOTCON_ERROR_NONE;
+}
+
+static void _ioty_free_platform_info(OCPlatformInfo platform_info)
+{
+       free(platform_info.manufacturerName);
+       free(platform_info.manufacturerUrl);
+       free(platform_info.modelNumber);
+       free(platform_info.dateOfManufacture);
+       free(platform_info.platformVersion);
+       free(platform_info.operatingSystemVersion);
+       free(platform_info.hardwareVersion);
+       free(platform_info.firmwareVersion);
+       free(platform_info.supportUrl);
+       free(platform_info.systemTime);
+}
+
+int icl_ioty_set_platform_info()
+{
+       int ret;
+       OCPlatformInfo platform_info = {0};
+
+       ret = system_info_get_platform_string(ICL_SYSTEM_INFO_PLATFORM_NAME,
+                       &platform_info.platformID);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               ERR("system_info_get_platform_string() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       ret = system_info_get_platform_string(ICL_SYSTEM_INFO_MANUF_NAME,
+                       &platform_info.manufacturerName);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               ERR("system_info_get_platform_string() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       ret = system_info_get_platform_string(ICL_SYSTEM_INFO_MODEL_NAME,
+                       &platform_info.modelNumber);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               ERR("system_info_get_platform_string() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       ret = system_info_get_platform_string(ICL_SYSTEM_INFO_PLATFORM_VERSION,
+                       &platform_info.platformVersion);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               ERR("system_info_get_platform_string() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       ret = system_info_get_platform_string(ICL_SYSTEM_INFO_BUILD_STRING,
+                       &platform_info.firmwareVersion);
+       if (SYSTEM_INFO_ERROR_NONE != ret) {
+               ERR("system_info_get_platform_string() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return IOTCON_ERROR_SYSTEM;
+       }
+
+       /* platform_info.manufacturerUrl */
+       /* platform_info.dateOfManufacture */
+       /* platform_info.operatingSystemVersion */
+       /* platform_info.hardwareVersion */
+       /* platform_info.supportUrl */
+       /* platform_info.systemTime */
+
+       icl_ioty_csdk_lock();
+       ret = OCSetPlatformInfo(platform_info);
+       icl_ioty_csdk_unlock();
+
+       if (OC_STACK_OK != ret) {
+               ERR("OCSetPlatformInfo() Fail(%d)", ret);
+               _ioty_free_platform_info(platform_info);
+               return ic_ioty_parse_oic_error(ret);
+       }
+       _ioty_free_platform_info(platform_info);
+
+       return IOTCON_ERROR_NONE;
+}
+
+
 int icl_ioty_add_presence_cb(const char *host_address,
                iotcon_connectivity_type_e connectivity_type,
                const char *resource_type,
index 8d7e89cc5db13e2ffdbbbf64b9e38f7ca4caf61b..5391d8a7dc514bc53907df958e6db31c32b6fc9a 100644 (file)
@@ -42,7 +42,10 @@ void icl_ioty_csdk_lock();
 void icl_ioty_csdk_unlock();
 
 void icl_ioty_deinit(GThread *thread);
-GThread* icl_ioty_init();
+int icl_ioty_init(GThread **out_thread);
+
+int icl_ioty_set_device_info();
+int icl_ioty_set_platform_info();
 
 /* client APIs */
 int icl_ioty_find_resource(const char *host_address,
index cec86ad24490bf0d0000f7d58a2e8e4a35f3ec1d..386979da6de5f9d1e7e535b048fa65437a6a6f0c 100644 (file)
--- a/lib/icl.c
+++ b/lib/icl.c
@@ -47,7 +47,25 @@ API int iotcon_connect_for_service_mode(iotcon_service_mode_e mode)
 
        switch (mode) {
        case IOTCON_SERVICE_IP:
-               icl_thread = icl_ioty_init();
+               ret = icl_ioty_init(&icl_thread);
+               if (IOTCON_ERROR_NONE != ret) {
+                       ERR("icl_ioty_init() Fail(%d)", ret);
+                       return ret;
+               }
+
+               ret = icl_ioty_set_device_info();
+               if (IOTCON_ERROR_NONE != ret) {
+                       ERR("icl_ioty_set_device_info() Fail(%d)", ret);
+                       icl_ioty_deinit(icl_thread);
+                       return ret;
+               }
+
+               ret = icl_ioty_set_platform_info();
+               if (IOTCON_ERROR_NONE != ret) {
+                       ERR("icl_ioty_set_platform_info() Fail(%d)", ret);
+                       icl_ioty_deinit(icl_thread);
+                       return ret;
+               }
                break;
        case IOTCON_SERVICE_BT:
                ret = icl_dbus_start();