--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __RCC_SENSOR_DATA_H__
+#define __RCC_SENSOR_DATA_H__
+
+typedef enum {
+ SENSOR_DATA_TYPE_NONE = 0,
+ SENSOR_DATA_TYPE_INT,
+ SENSOR_DATA_TYPE_UINT,
+ SENSOR_DATA_TYPE_DOUBLE,
+ SENSOR_DATA_TYPE_STR,
+} sensor_data_type_e;
+
+typedef struct __sensor_data_s sensor_data;
+
+sensor_data *sensor_data_new(sensor_data_type_e type);
+void sensor_data_free(sensor_data *data);
+
+int sensor_data_set_int(sensor_data *data, int value);
+int sensor_data_set_uint(sensor_data *data, unsigned int value);
+int sensor_data_set_double(sensor_data *data, double value);
+int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size);
+
+int sensor_data_get_int(sensor_data *data, int *value);
+int sensor_data_get_uint(sensor_data *data, unsigned int *value);
+int sensor_data_get_double(sensor_data *data, double *value);
+int sensor_data_get_string(sensor_data *data, const char **value);
+
+#endif /* __RCC_SENSOR_DATA_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include "log.h"
+#include "sensor-data.h"
+
+struct __sensor_data_s {
+ sensor_data_type_e type;
+ union {
+ int int_val;
+ unsigned int uint_val;
+ double d_val;
+ char *str_val;
+ } value;
+ pthread_mutex_t mutex;
+};
+
+sensor_data *sensor_data_new(sensor_data_type_e type)
+{
+ sensor_data *data = NULL;
+ retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
+
+ data = calloc(1, sizeof(sensor_data));
+ retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
+
+ data->type = type;
+ pthread_mutex_init(&data->mutex, NULL);
+
+ return data;
+}
+
+void sensor_data_free(sensor_data *data)
+{
+ ret_if(!data);
+
+ if (data->type == SENSOR_DATA_TYPE_STR) {
+ pthread_mutex_lock(&data->mutex);
+ free(data->value.str_val);
+ data->value.str_val = NULL;
+ pthread_mutex_unlock(&data->mutex);
+ }
+ pthread_mutex_destroy(&data->mutex);
+
+ free(data);
+}
+
+int sensor_data_set_int(sensor_data *data, int value)
+{
+ retv_if(!data, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ data->value.int_val = value;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_set_uint(sensor_data *data, unsigned int value)
+{
+ retv_if(!data, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ data->value.uint_val = value;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_set_double(sensor_data *data, double value)
+{
+ retv_if(!data, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ data->value.d_val = value;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size)
+{
+ char *temp = NULL;
+ retv_if(!data, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
+ retv_if(!value, -1);
+ retv_if(size == 0, -1);
+
+ temp = strndup(value, size);
+ pthread_mutex_lock(&data->mutex);
+ free(data->value.str_val);
+ data->value.str_val = temp;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_get_int(sensor_data *data, int *value)
+{
+ retv_if(!data, -1);
+ retv_if(!value, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ *value = data->value.int_val;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_get_uint(sensor_data *data, unsigned int *value)
+{
+ retv_if(!data, -1);
+ retv_if(!value, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ *value = data->value.uint_val;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_get_double(sensor_data *data, double *value)
+{
+ retv_if(!data, -1);
+ retv_if(!value, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ *value = data->value.d_val;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+
+int sensor_data_get_string(sensor_data *data, const char **value)
+{
+ retv_if(!data, -1);
+ retv_if(!value, -1);
+ retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
+
+ pthread_mutex_lock(&data->mutex);
+ *value = data->value.str_val;
+ pthread_mutex_unlock(&data->mutex);
+
+ return 0;
+}
+