2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include "sensor-data.h"
22 struct __sensor_data_s {
23 sensor_data_type_e type;
26 unsigned int uint_val;
31 pthread_mutex_t mutex;
34 sensor_data *sensor_data_new(sensor_data_type_e type)
36 sensor_data *data = NULL;
37 retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
39 data = calloc(1, sizeof(sensor_data));
40 retv_if(type == SENSOR_DATA_TYPE_NONE, NULL);
43 pthread_mutex_init(&data->mutex, NULL);
48 void sensor_data_free(sensor_data *data)
52 if (data->type == SENSOR_DATA_TYPE_STR) {
53 pthread_mutex_lock(&data->mutex);
54 free(data->value.str_val);
55 data->value.str_val = NULL;
56 pthread_mutex_unlock(&data->mutex);
58 pthread_mutex_destroy(&data->mutex);
63 int sensor_data_set_int(sensor_data *data, int value)
66 retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
68 pthread_mutex_lock(&data->mutex);
69 data->value.int_val = value;
70 pthread_mutex_unlock(&data->mutex);
75 int sensor_data_set_uint(sensor_data *data, unsigned int value)
78 retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
80 pthread_mutex_lock(&data->mutex);
81 data->value.uint_val = value;
82 pthread_mutex_unlock(&data->mutex);
87 int sensor_data_set_bool(sensor_data *data, bool value)
90 retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
92 pthread_mutex_lock(&data->mutex);
93 data->value.b_val = value;
94 pthread_mutex_unlock(&data->mutex);
99 int sensor_data_set_double(sensor_data *data, double value)
102 retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
104 pthread_mutex_lock(&data->mutex);
105 data->value.d_val = value;
106 pthread_mutex_unlock(&data->mutex);
111 int sensor_data_set_string(sensor_data *data, const char *value, unsigned int size)
115 retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
117 retv_if(size == 0, -1);
119 temp = strndup(value, size);
120 pthread_mutex_lock(&data->mutex);
121 free(data->value.str_val);
122 data->value.str_val = temp;
123 pthread_mutex_unlock(&data->mutex);
128 int sensor_data_get_int(sensor_data *data, int *value)
132 retv_if(data->type != SENSOR_DATA_TYPE_INT, -1);
134 pthread_mutex_lock(&data->mutex);
135 *value = data->value.int_val;
136 pthread_mutex_unlock(&data->mutex);
141 int sensor_data_get_uint(sensor_data *data, unsigned int *value)
145 retv_if(data->type != SENSOR_DATA_TYPE_UINT, -1);
147 pthread_mutex_lock(&data->mutex);
148 *value = data->value.uint_val;
149 pthread_mutex_unlock(&data->mutex);
154 int sensor_data_get_bool(sensor_data *data, bool *value)
158 retv_if(data->type != SENSOR_DATA_TYPE_BOOL, -1);
160 pthread_mutex_lock(&data->mutex);
161 *value = data->value.b_val;
162 pthread_mutex_unlock(&data->mutex);
167 int sensor_data_get_double(sensor_data *data, double *value)
171 retv_if(data->type != SENSOR_DATA_TYPE_DOUBLE, -1);
173 pthread_mutex_lock(&data->mutex);
174 *value = data->value.d_val;
175 pthread_mutex_unlock(&data->mutex);
180 int sensor_data_get_string(sensor_data *data, const char **value)
184 retv_if(data->type != SENSOR_DATA_TYPE_STR, -1);
186 pthread_mutex_lock(&data->mutex);
187 *value = data->value.str_val;
188 pthread_mutex_unlock(&data->mutex);