2 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
4 * Contact: Jin Yoon <jinny.yoon@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include "sensor-data.h"
24 struct __sensor_data_s {
25 sensor_data_type_e type;
28 unsigned int uint_val;
33 pthread_mutex_t mutex;
36 sensor_data *sensor_data_new(sensor_data_type_e type)
38 sensor_data *data = NULL;
39 retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
41 data = calloc(1, sizeof(sensor_data));
45 pthread_mutex_init(&data->mutex, NULL);
50 void sensor_data_free(sensor_data *data)
54 if (data->type == SENSOR_DATA_TYPE_STR) {
55 pthread_mutex_lock(&data->mutex);
56 free(data->value.str_val);
57 data->value.str_val = NULL;
58 pthread_mutex_unlock(&data->mutex);
60 pthread_mutex_destroy(&data->mutex);
65 int sensor_data_set_int(sensor_data *data, int value)
68 retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
70 pthread_mutex_lock(&data->mutex);
71 data->value.int_val = value;
72 pthread_mutex_unlock(&data->mutex);
77 int sensor_data_set_uint(sensor_data *data, unsigned int value)
80 retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
82 pthread_mutex_lock(&data->mutex);
83 data->value.uint_val = value;
84 pthread_mutex_unlock(&data->mutex);
89 int sensor_data_set_bool(sensor_data *data, bool value)
92 retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
94 pthread_mutex_lock(&data->mutex);
95 data->value.b_val = value;
96 pthread_mutex_unlock(&data->mutex);
101 int sensor_data_set_double(sensor_data *data, double value)
104 retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
106 pthread_mutex_lock(&data->mutex);
107 data->value.d_val = value;
108 pthread_mutex_unlock(&data->mutex);
113 int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size)
117 retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
119 retv_if(size == 0, -1);
121 temp = strndup(value, size);
124 pthread_mutex_lock(&data->mutex);
125 free(data->value.str_val);
126 data->value.str_val = temp;
127 pthread_mutex_unlock(&data->mutex);
132 int sensor_data_get_int(sensor_data *data, int *value)
136 retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
138 pthread_mutex_lock(&data->mutex);
139 *value = data->value.int_val;
140 pthread_mutex_unlock(&data->mutex);
145 int sensor_data_get_uint(sensor_data *data, unsigned int *value)
149 retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
151 pthread_mutex_lock(&data->mutex);
152 *value = data->value.uint_val;
153 pthread_mutex_unlock(&data->mutex);
158 int sensor_data_get_bool(sensor_data *data, bool *value)
162 retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
164 pthread_mutex_lock(&data->mutex);
165 *value = data->value.b_val;
166 pthread_mutex_unlock(&data->mutex);
171 int sensor_data_get_double(sensor_data *data, double *value)
175 retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
177 pthread_mutex_lock(&data->mutex);
178 *value = data->value.d_val;
179 pthread_mutex_unlock(&data->mutex);
184 int sensor_data_get_string(sensor_data *data, const char **value)
188 retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
190 pthread_mutex_lock(&data->mutex);
191 *value = data->value.str_val;
192 pthread_mutex_unlock(&data->mutex);