add sensor data module
authorJeonghoon Park <jh1979.park@samsung.com>
Tue, 17 Jul 2018 06:21:15 +0000 (15:21 +0900)
committerJeonghoon Park <jh1979.park@samsung.com>
Tue, 17 Jul 2018 06:21:15 +0000 (15:21 +0900)
inc/sensor-data.h [new file with mode: 0644]
src/sensor-data.c [new file with mode: 0644]

diff --git a/inc/sensor-data.h b/inc/sensor-data.h
new file mode 100644 (file)
index 0000000..e4b9554
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * 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__ */
diff --git a/src/sensor-data.c b/src/sensor-data.c
new file mode 100644 (file)
index 0000000..9caec1a
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * 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;
+}
+