2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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.
26 #include <sensor-internal.h>
27 #include <sensor-private.h>
28 #include <sensor-log-private.h>
30 #define SENSOR_SHIFT_TYPE 16
31 #define SENSOR_UNDEFINED_ID -1
32 #define SENSOR_LISTENER_MAGIC 0xCAFECAFE
33 #define RAD2DEGREE (180/M_PI)
35 #define CONVERT_AXIS_ENUM(X) ((X) < 3 ? (X) + 0x81 : (X) - 2)
36 #define CONVERT_OPTION_PAUSE_POLICY(option) ((option) ^ 0b11)
38 #define WARN_DEPRECATED_SENSOR(X) \
40 if ((X) == SENSOR_LAST || (X) == SENSOR_CUSTOM || (X) == SENSOR_HUMAN_STRESS_MONITOR) { \
41 _W("DEPRECATION WARNING: This sensor type is deprecated and will be removed from next release."); \
45 static int sensor_connect(sensor_h sensor, sensor_listener_h listener)
47 int id = SENSOR_UNDEFINED_ID;
53 return SENSOR_ERROR_INVALID_PARAMETER;
55 _D("called sensor_connect : listener[%p], sensor[%p]", listener, sensor);
57 sensord_get_type(sensor, &type);
58 event_type = type << SENSOR_SHIFT_TYPE | 0x1;
60 if (!sensord_is_supported_event_type(sensor, event_type, &support))
61 return SENSOR_ERROR_INVALID_PARAMETER;
64 return SENSOR_ERROR_NOT_SUPPORTED;
66 id = sensord_connect(sensor);
69 return SENSOR_ERROR_OPERATION_FAILED;
71 _D("success sensor_connect: id[%d]", id);
74 listener->type = type;
79 static void sensor_callback(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
81 sensor_event_s *event;
82 sensor_listener_h listener;
83 listener = (sensor_listener_h)user_data;
85 if (!sensor || !listener->callback)
88 event = (sensor_event_s *)data;
90 ((sensor_event_cb) listener->callback)(sensor, event, listener->user_data);
94 static void sensor_events_callback(sensor_t sensor, unsigned int event_type, sensor_data_t datas[], int events_count, void *user_data)
96 sensor_event_s *events;
97 sensor_listener_h listener;
98 listener = (sensor_listener_h)user_data;
100 if (!sensor || !listener->callback)
103 events = (sensor_event_s *)datas;
105 ((sensor_events_cb) listener->callback)(sensor, events, events_count, listener->user_data);
109 static inline int sensor_listener_unset_event_cb_impl(sensor_listener_h listener, bool is_events_callback)
113 unsigned int event_id;
115 _D("called sensor_listener_unset_event_cb_impl : listener[%p]", listener);
118 return SENSOR_ERROR_INVALID_PARAMETER;
120 if (listener->magic != SENSOR_LISTENER_MAGIC)
121 return SENSOR_ERROR_INVALID_PARAMETER;
124 type = (int)listener->type;
125 event_id = type << SENSOR_SHIFT_TYPE | 0x1;
128 if (is_events_callback) {
129 ret = sensord_unregister_events(id, event_id);
131 ret = sensord_unregister_event(id, event_id);
135 return SENSOR_ERROR_OPERATION_FAILED;
137 listener->callback = NULL;
138 listener->user_data = NULL;
140 _D("success sensor_unregister_event");
142 return SENSOR_ERROR_NONE;
145 static inline int sensor_listener_set_event_cb_impl(sensor_listener_h listener,
146 unsigned int interval, void* callback, bool is_events_callback, void *user_data)
149 unsigned int event_id;
150 unsigned int batch_latency;
152 if (!listener || !callback)
153 return SENSOR_ERROR_INVALID_PARAMETER;
155 if (listener->magic != SENSOR_LISTENER_MAGIC)
156 return SENSOR_ERROR_INVALID_PARAMETER;
158 _D("called sensor_listener_set_event_cb_impl : listener[%p], interval[%u], callback[%p], user_data[%p], id[%d]",
159 listener, interval, callback, user_data, listener->id);
162 event_id = (listener->type) << SENSOR_SHIFT_TYPE | 0x1;
163 batch_latency = listener->batch_latency;
165 listener->callback = (void *)callback;
166 listener->user_data = user_data;
169 if (is_events_callback) {
170 ret = sensord_register_events(id, event_id, batch_latency, sensor_events_callback, listener);
172 ret = sensord_register_event(id, event_id, interval, batch_latency, sensor_callback, listener);
176 listener->callback = NULL;
177 listener->user_data = NULL;
178 return SENSOR_ERROR_OPERATION_FAILED;
181 _D("success sensor_listener_set_event");
183 return SENSOR_ERROR_NONE;
186 int sensor_is_supported(sensor_type_e type, bool *supported)
191 WARN_DEPRECATED_SENSOR(type);
193 if (type < SENSOR_ALL)
194 return SENSOR_ERROR_INVALID_PARAMETER;
197 return SENSOR_ERROR_INVALID_PARAMETER;
199 _D("called sensor_is_supported : type[%d]", type);
201 result = sensord_get_default_sensor((sensor_type_t)type, &sensor);
203 if (result == -EPERM)
204 return SENSOR_ERROR_OPERATION_FAILED;
209 * because is_supported() API is N/P API,
210 * it must not returns PERMISSION_DENIED error.
211 * -EACCES means that there is at least one sensor.
213 if (sensor || (result == -EACCES))
216 _D("success sensor(%d) is supported[%d]", type, *supported);
218 return SENSOR_ERROR_NONE;
221 int sensor_is_supported_by_uri(const char *uri, bool *supported)
227 return SENSOR_ERROR_INVALID_PARAMETER;
229 result = sensord_get_default_sensor_by_uri(uri, &sensor);
230 if (result == -EINVAL)
231 return SENSOR_ERROR_INVALID_PARAMETER;
232 else if (result == -EPERM || result == -EIO)
233 return SENSOR_ERROR_OPERATION_FAILED;
235 if (result == -ENODATA)
240 return SENSOR_ERROR_NONE;
243 int sensor_get_default_sensor(sensor_type_e type, sensor_h *sensor)
247 sensor_privilege_t privilege;
249 WARN_DEPRECATED_SENSOR(type);
251 _D("called sensor_get_default_sensor : type[%d], sensor[%p]", type, sensor);
253 if (type < SENSOR_ALL)
254 return SENSOR_ERROR_INVALID_PARAMETER;
257 return SENSOR_ERROR_INVALID_PARAMETER;
259 result = sensord_get_default_sensor((sensor_type_t)type, &_sensor);
260 if (result == -EACCES)
261 return SENSOR_ERROR_PERMISSION_DENIED;
262 else if (result == -EPERM)
263 return SENSOR_ERROR_OPERATION_FAILED;
266 return SENSOR_ERROR_NOT_SUPPORTED;
268 sensord_get_privilege(_sensor, &privilege);
269 if (privilege != SENSOR_PRIVILEGE_PUBLIC)
270 return SENSOR_ERROR_PERMISSION_DENIED;
274 _D("success sensor_get_default_sensor sensor[%p]", _sensor);
276 return SENSOR_ERROR_NONE;
279 int sensor_get_default_sensor_by_uri(const char *uri, sensor_h *sensor)
283 result = sensord_get_default_sensor_by_uri(uri, sensor);
284 if (result == -EINVAL)
285 return SENSOR_ERROR_INVALID_PARAMETER;
286 else if (result == -EACCES)
287 return SENSOR_ERROR_PERMISSION_DENIED;
288 else if (result == -ENODATA)
289 return SENSOR_ERROR_NOT_SUPPORTED;
291 return SENSOR_ERROR_OPERATION_FAILED;
293 return SENSOR_ERROR_NONE;
296 int sensor_get_sensor_list(sensor_type_e type, sensor_h **list, int *sensor_count)
302 WARN_DEPRECATED_SENSOR(type);
304 _D("called sensor_get_list : type[%d]", type);
306 if (type < SENSOR_ALL)
307 return SENSOR_ERROR_INVALID_PARAMETER;
309 if (!sensor_count || !list)
310 return SENSOR_ERROR_INVALID_PARAMETER;
312 result = sensord_get_sensors((sensor_type_t)type, &_list, &count);
314 if (result == -EACCES)
315 return SENSOR_ERROR_PERMISSION_DENIED;
316 else if (result == -EPERM)
317 return SENSOR_ERROR_OPERATION_FAILED;
318 else if (result == -ENODATA)
319 return SENSOR_ERROR_NOT_SUPPORTED;
322 int count_public = 0;
324 for (i = 0; i < count; ++i) {
325 sensor_privilege_t privilege;
327 sensord_get_privilege(_list[i], &privilege);
328 if (privilege != SENSOR_PRIVILEGE_PUBLIC)
334 if (count_public == 0) {
336 return SENSOR_ERROR_PERMISSION_DENIED;
339 *list = (sensor_h *) malloc((sizeof(int *)) * count_public);
343 return SENSOR_ERROR_OUT_OF_MEMORY;
346 for (i = 0, j = 0; i < count; ++i) {
347 sensor_privilege_t privilege;
349 sensord_get_privilege(_list[i], &privilege);
350 if (privilege != SENSOR_PRIVILEGE_PUBLIC)
353 *(*list + j) = _list[i];
359 *sensor_count = count_public;
361 _D("success sensor_get_list");
363 return SENSOR_ERROR_NONE;
366 int sensor_get_sensor_list_by_uri(const char *uri, sensor_h **list, int *sensor_count)
369 result = sensord_get_sensors_by_uri(uri, list, sensor_count);
370 if (result == -EINVAL)
371 return SENSOR_ERROR_INVALID_PARAMETER;
372 else if (result == -EACCES)
373 return SENSOR_ERROR_PERMISSION_DENIED;
374 else if (result == -ENODATA)
375 return SENSOR_ERROR_NOT_SUPPORTED;
377 return SENSOR_ERROR_OPERATION_FAILED;
379 return SENSOR_ERROR_NONE;
382 int sensor_is_wake_up(sensor_h sensor, bool *wakeup)
384 _D("called sensor_get_type");
386 if (!sensor || !wakeup)
387 return SENSOR_ERROR_INVALID_PARAMETER;
389 *wakeup = sensord_is_wakeup_supported(sensor);
391 _D("success sensor_is_wake_up : [%d]", *wakeup);
393 return SENSOR_ERROR_NONE;
396 int sensor_create_listener(sensor_h sensor, sensor_listener_h *listener)
398 struct sensor_listener_s *_listener;
401 _D("called sensor_create_listener : listener[%p]", listener);
403 if (!sensor || !listener)
404 return SENSOR_ERROR_INVALID_PARAMETER;
406 _listener = new(std::nothrow) struct sensor_listener_s;
409 return SENSOR_ERROR_OUT_OF_MEMORY;
411 error = sensor_connect(sensor, _listener);
414 delete (struct sensor_listener_s *)_listener;
415 return SENSOR_ERROR_OPERATION_FAILED;
418 _listener->sensor = sensor;
419 _listener->pause = SENSOR_PAUSE_ALL;
420 _listener->batch_latency = SENSOR_BATCH_LATENCY_DEFAULT;
421 _listener->magic = SENSOR_LISTENER_MAGIC;
423 *listener = (sensor_listener_h) _listener;
425 _D("success sensor_create_listener");
427 return SENSOR_ERROR_NONE;
430 int sensor_destroy_listener(sensor_listener_h listener)
432 _D("called sensor_destroy : listener[%p]", listener);
435 return SENSOR_ERROR_INVALID_PARAMETER;
437 if (listener->magic != SENSOR_LISTENER_MAGIC)
438 return SENSOR_ERROR_INVALID_PARAMETER;
440 sensord_disconnect(listener->id);
443 delete (sensor_listener_s *)listener;
445 _D("success sensor_destroy");
447 return SENSOR_ERROR_NONE;
450 int sensor_listener_start(sensor_listener_h listener)
453 unsigned int pause = SENSOR_PAUSE_ALL;
455 _D("called sensor_listener_start : listener[%p]", listener);
458 return SENSOR_ERROR_INVALID_PARAMETER;
460 if (listener->magic != SENSOR_LISTENER_MAGIC)
461 return SENSOR_ERROR_INVALID_PARAMETER;
464 pause = listener->pause;
466 if (!sensord_start(id, 0))
467 return SENSOR_ERROR_OPERATION_FAILED;
469 if (sensord_set_attribute_int(id, SENSOR_ATTRIBUTE_PAUSE_POLICY, pause) < 0)
470 return SENSOR_ERROR_OPERATION_FAILED;
472 _D("success sensor_listener_start : id[%d]", id);
474 return SENSOR_ERROR_NONE;
477 int sensor_listener_stop(sensor_listener_h listener)
481 _D("called sensor_listener_stop : listener[%p]", listener);
484 return SENSOR_ERROR_INVALID_PARAMETER;
486 if (listener->magic != SENSOR_LISTENER_MAGIC)
487 return SENSOR_ERROR_INVALID_PARAMETER;
491 if (!sensord_stop(id))
492 return SENSOR_ERROR_OPERATION_FAILED;
494 _D("success sensor_listener_stop");
496 return SENSOR_ERROR_NONE;
499 int sensor_listener_set_event_cb(sensor_listener_h listener,
500 unsigned int interval, sensor_event_cb callback, void *user_data)
502 _W("DEPRECATION WARNING: sensor_listener_set_event_cb() is deprecated and will be removed from next release. Use sensor_listener_set_events_cb() instead.");
503 _D("called sensor_listener_set_event_cb : listener[%p]", listener);
504 return sensor_listener_set_event_cb_impl(listener, interval, (void*) callback, false, user_data);
507 int sensor_listener_unset_event_cb(sensor_listener_h listener)
509 _W("DEPRECATION WARNING: sensor_listener_unset_event_cb() is deprecated and will be removed from next release. Use sensor_listener_unset_events_cb() instead.");
510 _D("called sensor_listener_unset_event_cb : listener[%p]", listener);
511 return sensor_listener_unset_event_cb_impl(listener, false);
514 int sensor_listener_set_events_cb(sensor_listener_h listener, sensor_events_cb callback, void *user_data)
516 _D("called sensor_listener_set_events_cb : listener[%p]", listener);
517 return sensor_listener_set_event_cb_impl(listener, 0, (void*) callback, true, user_data);
520 int sensor_listener_unset_events_cb(sensor_listener_h listener)
522 _D("called sensor_listener_unset_events_cb : listener[%p]", listener);
523 return sensor_listener_unset_event_cb_impl(listener, true);
526 static void accuracy_changed_callback(sensor_t sensor,
527 unsigned long long timestamp, int accuracy, void *data)
529 sensor_listener_h listener = (sensor_listener_h)data;
531 if (!sensor || !listener->accu_callback)
534 ((sensor_accuracy_changed_cb)listener->accu_callback)
535 (sensor, timestamp, (sensor_data_accuracy_e)accuracy, listener->accu_user_data);
540 int sensor_listener_set_accuracy_cb(sensor_listener_h listener,
541 sensor_accuracy_changed_cb callback, void *data)
545 _D("called sensor_register_accuracy_cb : listener[%p], callback[%p], user_data[%p] cb[%p]",
546 listener, callback, data, accuracy_changed_callback);
548 if (!listener || !callback)
549 return SENSOR_ERROR_INVALID_PARAMETER;
551 if (listener->magic != SENSOR_LISTENER_MAGIC)
552 return SENSOR_ERROR_INVALID_PARAMETER;
555 listener->accu_callback = (void *)callback;
556 listener->accu_user_data = data;
558 if (!sensord_register_accuracy_cb(id, accuracy_changed_callback, listener)) {
559 listener->accu_callback = NULL;
560 listener->accu_user_data = NULL;
562 return SENSOR_ERROR_OPERATION_FAILED;
565 _D("success sensor_register_accuracy_cb");
567 return SENSOR_ERROR_NONE;
570 int sensor_listener_unset_accuracy_cb(sensor_listener_h listener)
574 _D("called sensor_unregister_accuracy_cb : listener[%p]", listener);
577 return SENSOR_ERROR_INVALID_PARAMETER;
579 if (listener->magic != SENSOR_LISTENER_MAGIC)
580 return SENSOR_ERROR_INVALID_PARAMETER;
584 if (!sensord_unregister_accuracy_cb(id))
585 return SENSOR_ERROR_OPERATION_FAILED;
587 listener->accu_callback = NULL;
588 listener->accu_user_data = NULL;
590 _D("success sensor_unregister_accuracy_cb");
592 return SENSOR_ERROR_NONE;
595 int sensor_listener_set_interval(sensor_listener_h listener, unsigned int interval)
599 unsigned int event_id;
601 _D("called sensor_set_interval : listener[%p], interval[%u]", listener, interval);
604 return SENSOR_ERROR_INVALID_PARAMETER;
606 if (listener->magic != SENSOR_LISTENER_MAGIC)
607 return SENSOR_ERROR_INVALID_PARAMETER;
610 type = (int)listener->type;
611 event_id = type << SENSOR_SHIFT_TYPE | 0x1;
613 if (!sensord_change_event_interval(id, event_id, interval))
614 return SENSOR_ERROR_OPERATION_FAILED;
616 _D("success sensor_set_interval");
618 return SENSOR_ERROR_NONE;
621 int sensor_listener_set_max_batch_latency(sensor_listener_h listener, unsigned int max_batch_latency)
626 unsigned int event_id;
628 _D("called sensor_set_max_batch_latency : listener[%p], max_batch_latency[%u]", listener, max_batch_latency);
631 return SENSOR_ERROR_INVALID_PARAMETER;
633 if (listener->magic != SENSOR_LISTENER_MAGIC)
634 return SENSOR_ERROR_INVALID_PARAMETER;
636 if (!sensord_get_max_batch_count(listener->sensor, &max_batch_count))
637 return SENSOR_ERROR_OPERATION_FAILED;
639 if (max_batch_count == 0)
640 return SENSOR_ERROR_NOT_SUPPORTED;
643 type = (int)listener->type;
644 event_id = type << SENSOR_SHIFT_TYPE | 0x1;
646 if (!sensord_change_event_max_batch_latency(id, event_id, max_batch_latency))
647 return SENSOR_ERROR_NOT_SUPPORTED;
649 listener->batch_latency = max_batch_latency;
651 _D("success sensor_set_max_batch_latency");
653 return SENSOR_ERROR_NONE;
656 int sensor_listener_set_attribute_int(sensor_listener_h listener, sensor_attribute_e attribute, int value)
661 _D("called sensor_set_attribute_int : listener[%p], attribute[%d], value[%d]", listener, attribute, value);
664 return SENSOR_ERROR_INVALID_PARAMETER;
666 if (listener->magic != SENSOR_LISTENER_MAGIC)
667 return SENSOR_ERROR_INVALID_PARAMETER;
671 error = sensord_set_attribute_int(id, (int)attribute, (int)value);
673 if (error == -EINVAL)
674 return SENSOR_ERROR_INVALID_PARAMETER;
675 else if (error != SENSOR_ERROR_NONE)
676 return SENSOR_ERROR_OPERATION_FAILED;
678 if (attribute == SENSOR_ATTRIBUTE_PAUSE_POLICY)
679 listener->pause = value;
681 _D("success sensor_set_attribute_int");
683 return SENSOR_ERROR_NONE;
686 int sensor_listener_set_option(sensor_listener_h listener, sensor_option_e option)
690 _D("called sensor_set_option : listener[%p], option[%d]", listener, option);
693 return SENSOR_ERROR_INVALID_PARAMETER;
695 if (listener->magic != SENSOR_LISTENER_MAGIC)
696 return SENSOR_ERROR_INVALID_PARAMETER;
700 if (sensord_set_attribute_int(id, SENSOR_ATTRIBUTE_PAUSE_POLICY, CONVERT_OPTION_PAUSE_POLICY(option)) < 0)
701 return SENSOR_ERROR_OPERATION_FAILED;
703 listener->pause = CONVERT_OPTION_PAUSE_POLICY(option);
705 _D("success sensor_set_option");
707 return SENSOR_ERROR_NONE;
710 int sensor_listener_read_data(sensor_listener_h listener, sensor_event_s *event)
715 unsigned int data_id;
717 _W("DEPRECATION WARNING: sensor_listener_read_data() is deprecated and will be removed from next release. Use sensor_listener_read_data_list() instead.");
718 _D("called sensor_read_data : listener[%p]", listener);
720 if (!listener || !event)
721 return SENSOR_ERROR_INVALID_PARAMETER;
723 if (listener->magic != SENSOR_LISTENER_MAGIC)
724 return SENSOR_ERROR_INVALID_PARAMETER;
727 type = (int)listener->type;
728 data_id = type << SENSOR_SHIFT_TYPE | 0x1;
730 if (!sensord_get_data(id, data_id, &data))
731 return SENSOR_ERROR_OPERATION_FAILED;
733 event->accuracy = data.accuracy;
734 event->timestamp = data.timestamp;
735 event->value_count = data.value_count;
737 for (int i = 0; i < data.value_count; ++i)
738 event->values[i] = data.values[i];
740 _D("success sensor_read_data");
742 return SENSOR_ERROR_NONE;
745 int sensor_listener_read_data_list(sensor_listener_h listener, sensor_event_s **events, int *count)
749 sensor_data_t* data_list = NULL;
750 int data_list_count = 0;
751 unsigned int data_id;
753 _D("called sensor_get_data_list : listener[%p]", listener);
755 if (!listener || !events || !count)
756 return SENSOR_ERROR_INVALID_PARAMETER;
758 if (listener->magic != SENSOR_LISTENER_MAGIC)
759 return SENSOR_ERROR_INVALID_PARAMETER;
762 type = (int)listener->type;
763 data_id = type << SENSOR_SHIFT_TYPE | 0x1;
765 if (!sensord_get_data_list(id, data_id, &data_list, &data_list_count))
766 return SENSOR_ERROR_OPERATION_FAILED;
768 *events = (sensor_event_s *)data_list;
769 *count = data_list_count;
771 _D("success sensor_get_data_list");
773 return SENSOR_ERROR_NONE;
776 int sensor_listener_flush(sensor_listener_h listener)
780 _D("called sensor_flush : listener[%p]", listener);
783 return SENSOR_ERROR_INVALID_PARAMETER;
785 if (listener->magic != SENSOR_LISTENER_MAGIC)
786 return SENSOR_ERROR_INVALID_PARAMETER;
790 if (!sensord_flush(id))
791 return SENSOR_ERROR_OPERATION_FAILED;
793 _D("success sensor_flush");
795 return SENSOR_ERROR_NONE;;
798 int sensor_get_uri(sensor_h sensor, char **uri)
803 return SENSOR_ERROR_INVALID_PARAMETER;
805 if ((ret_url = sensord_get_uri(sensor)) == NULL)
806 return SENSOR_ERROR_OPERATION_FAILED;
808 *uri = strdup(ret_url);
810 return SENSOR_ERROR_NONE;
813 int sensor_get_name(sensor_h sensor, char** name)
815 _D("called sensor_get_name");
817 const char *ret_name;
819 if (!sensor || !name)
820 return SENSOR_ERROR_INVALID_PARAMETER;
822 if ((ret_name = sensord_get_name(sensor)) == NULL)
823 return SENSOR_ERROR_OPERATION_FAILED;
825 *name = strdup(ret_name);
827 _D("success sensor_get_vendor : [%s]", *name);
829 return SENSOR_ERROR_NONE;
832 int sensor_get_vendor(sensor_h sensor, char** vendor)
834 _D("called sensor_get_vendor");
836 const char *ret_vendor;
838 if (!sensor || !vendor)
839 return SENSOR_ERROR_INVALID_PARAMETER;
841 if ((ret_vendor = sensord_get_vendor(sensor)) == NULL)
842 return SENSOR_ERROR_OPERATION_FAILED;
844 *vendor = strdup(ret_vendor);
846 _D("success sensor_vendor : [%s]", *vendor);
848 return SENSOR_ERROR_NONE;
851 int sensor_get_type(sensor_h sensor, sensor_type_e *type)
854 //_D("called sensor_get_type");
856 if (!sensor || !type)
857 return SENSOR_ERROR_INVALID_PARAMETER;
859 if (!sensord_get_type(sensor, &_type))
860 return SENSOR_ERROR_OPERATION_FAILED;
862 *type = (sensor_type_e) _type;
864 //_D("success sensor_get_type : [%d]", *type);
866 return SENSOR_ERROR_NONE;
869 int sensor_get_min_range(sensor_h sensor, float *min_range)
871 _D("called sensor_get_min_range");
873 if (!sensor || !min_range)
874 return SENSOR_ERROR_INVALID_PARAMETER;
876 if (!sensord_get_min_range(sensor, min_range))
877 return SENSOR_ERROR_OPERATION_FAILED;
879 _D("success sensor_get_min_range : [%f]", *min_range);
881 return SENSOR_ERROR_NONE;
884 int sensor_get_max_range(sensor_h sensor, float *max_range)
886 _D("called sensor_get_max_range");
888 if (!sensor || !max_range)
889 return SENSOR_ERROR_INVALID_PARAMETER;
891 if (!sensord_get_max_range(sensor, max_range))
892 return SENSOR_ERROR_OPERATION_FAILED;
894 _D("success sensor_get_max_range : [%f]", *max_range);
896 return SENSOR_ERROR_NONE;
899 int sensor_get_resolution(sensor_h sensor, float *resolution)
901 _D("called sensor_get_resolution");
903 if (!sensor || !resolution)
904 return SENSOR_ERROR_INVALID_PARAMETER;
906 if (!sensord_get_resolution(sensor, resolution))
907 return SENSOR_ERROR_OPERATION_FAILED;
909 _D("success sensor_get_resolution : [%f]", *resolution);
911 return SENSOR_ERROR_NONE;
914 int sensor_get_min_interval(sensor_h sensor, int *min_interval)
916 _D("called sensor_get_min_interval");
918 if (!sensor || !min_interval)
919 return SENSOR_ERROR_INVALID_PARAMETER;
921 if (!sensord_get_min_interval(sensor, min_interval))
922 return SENSOR_ERROR_OPERATION_FAILED;
924 _D("success sensor_get_min_interval : [%d]", *min_interval);
926 return SENSOR_ERROR_NONE;
929 int sensor_get_fifo_count(sensor_h sensor, int *fifo_count)
931 _D("called sensor_get_fifo_count");
933 if (!sensor || !fifo_count)
934 return SENSOR_ERROR_INVALID_PARAMETER;
936 if (!sensord_get_fifo_count(sensor, fifo_count))
937 return SENSOR_ERROR_OPERATION_FAILED;
939 _D("success sensor_get_fifo_count : [%d]", *fifo_count);
941 return SENSOR_ERROR_NONE;
944 int sensor_get_max_batch_count(sensor_h sensor, int *max_batch_count)
946 _D("called sensor_get_max_batch_count");
948 if (!sensor || !max_batch_count)
949 return SENSOR_ERROR_INVALID_PARAMETER;
951 if (!sensord_get_max_batch_count(sensor, max_batch_count))
952 return SENSOR_ERROR_OPERATION_FAILED;
954 _D("success sensor_get_max_batch_count : [%d]", *max_batch_count);
956 return SENSOR_ERROR_NONE;
959 int sensor_add_sensor_added_cb(sensor_added_cb callback, void *user_data)
962 result = sensord_add_sensor_added_cb(callback, user_data);
963 if (result == -EINVAL)
964 return SENSOR_ERROR_INVALID_PARAMETER;
966 return SENSOR_ERROR_OPERATION_FAILED;
968 return SENSOR_ERROR_NONE;
971 int sensor_remove_sensor_added_cb(sensor_added_cb callback)
974 result = sensord_remove_sensor_added_cb(callback);
975 if (result == -EINVAL)
976 return SENSOR_ERROR_INVALID_PARAMETER;
978 return SENSOR_ERROR_OPERATION_FAILED;
980 return SENSOR_ERROR_NONE;
983 int sensor_add_sensor_removed_cb(sensor_removed_cb callback, void *user_data)
986 result = sensord_add_sensor_removed_cb(callback, user_data);
987 if (result == -EINVAL)
988 return SENSOR_ERROR_INVALID_PARAMETER;
990 return SENSOR_ERROR_OPERATION_FAILED;
992 return SENSOR_ERROR_NONE;
995 int sensor_remove_sensor_removed_cb(sensor_removed_cb callback)
998 result = sensord_remove_sensor_removed_cb(callback);
999 if (result == -EINVAL)
1000 return SENSOR_ERROR_INVALID_PARAMETER;
1001 else if (result < 0)
1002 return SENSOR_ERROR_OPERATION_FAILED;
1004 return SENSOR_ERROR_NONE;
1008 * FUNCTIONS : SENSOR_UTIL_*
1011 int sensor_util_get_declination(float latitude, float longitude, float altitude, float *declination)
1014 return SENSOR_ERROR_INVALID_PARAMETER;
1016 setCoordinate(latitude, longitude, altitude, declination, NULL, 1);
1018 return SENSOR_ERROR_NONE;
1021 int sensor_util_get_angle_change(float R[], float prevR[], float angleChange[])
1023 if (getAngleChange(R, prevR, angleChange) < 0)
1024 return SENSOR_ERROR_INVALID_PARAMETER;
1026 return SENSOR_ERROR_NONE;
1029 int sensor_util_get_orientation(float R[], float values[])
1032 return SENSOR_ERROR_INVALID_PARAMETER;
1034 values[0] = atan2f(-R[3], R[0]) * RAD2DEGREE;
1035 values[1] = atan2f(-R[7], R[8]) * RAD2DEGREE;
1036 values[2] = asinf (R[6]) * RAD2DEGREE;
1040 return SENSOR_ERROR_NONE;
1043 int sensor_util_get_inclination(float I[], float* inclination)
1045 if (!I || !inclination)
1046 return SENSOR_ERROR_INVALID_PARAMETER;
1048 *inclination = atan2(I[5], I[4]);
1050 return SENSOR_ERROR_NONE;
1053 int sensor_util_remap_coordinate_system(float inR[], sensor_util_axis_e x, sensor_util_axis_e y, float outR[])
1055 if (remapCoordinateSystem(inR, CONVERT_AXIS_ENUM(x), CONVERT_AXIS_ENUM(y), outR) < 0)
1056 return SENSOR_ERROR_INVALID_PARAMETER;
1058 return SENSOR_ERROR_NONE;
1061 int sensor_util_get_rotation_matrix_from_vector(float Vx, float Vy, float Vz, float R[])
1063 float RV[4] = {0, Vx, Vy, Vz};
1065 RV[0] = 1 - Vx * Vx - Vy * Vy - Vz * Vz;
1066 RV[0] = (Vx > 0) ? (float) (sqrt(Vx)) : 0;
1068 if (quatToMatrix(RV, R) < 0)
1069 return SENSOR_ERROR_INVALID_PARAMETER;
1071 return SENSOR_ERROR_NONE;
1074 int sensor_util_get_rotation_matrix(float Gx, float Gy, float Gz, float Mx, float My, float Mz, float R[], float I[])
1076 float G[3] = {Gx, Gy, Gz};
1077 float M[3] = {Mx, My, Mz};
1079 if (getRotationMatrix(G, M, R, I) < 0)
1080 return SENSOR_ERROR_INVALID_PARAMETER;
1082 return SENSOR_ERROR_NONE;
1085 int sensor_util_get_altitude(float pressure, float sea_level_pressure, float temperature, float* altitude)
1088 return SENSOR_ERROR_INVALID_PARAMETER;
1089 if (sea_level_pressure <= 0)
1090 return SENSOR_ERROR_INVALID_PARAMETER;
1092 return SENSOR_ERROR_INVALID_PARAMETER;
1094 *altitude = (temperature + 273.15f) / 0.0065f * (1.0f - pow(pressure/sea_level_pressure, 1.0f/5.255f));
1096 return SENSOR_ERROR_NONE;