2 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
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.
21 #include <peripheral_io.h>
27 #include "model/model_ultrasonic_sensor.h"
28 #include "model/model_infrared_motion_sensor.h"
29 #include "model/model_infrared_obstacle_avoidance_sensor.h"
30 #include "model/model_touch_sensor.h"
32 struct _model_sensor_s {
34 sensor_type_e sensor_type;
36 void *peripheral_info;
42 int model_init(const char *id, sensor_type_e sensor_type, int gpio_num1, int gpio_num2, model_sensor_h *out_info)
44 model_sensor_h info = NULL;
49 info = calloc(1, sizeof(model_sensor_s));
53 info->sensor_type = sensor_type;
54 info->id = strdup(id);
55 goto_if(!info->id, error);
57 info->gpio_num[0] = gpio_num1;
58 info->gpio_num[1] = gpio_num2;
59 goto_if(gpio_num1 == -1, error);
61 switch (sensor_type) {
62 case SENSOR_TYPE_ULTRASONIC:
63 goto_if(gpio_num2 == -1, error);
64 ret = model_init_ultrasonic_sensor(gpio_num1, gpio_num2, &info->peripheral_info);
66 case SENSOR_TYPE_INFRARED_MOTION:
67 ret = model_init_infrared_motion_sensor(gpio_num1, &info->peripheral_info);
69 case SENSOR_TYPE_INFRARED_OBSTACLE_AVOIDANCE:
70 ret = model_init_infrared_obstacle_avoidance_sensor(gpio_num1, &info->peripheral_info);
72 case SENSOR_TYPE_TOUCH:
73 ret = model_init_touch_sensor(gpio_num1, &info->peripheral_info);
79 goto_if(ret != 0, error);
84 if (info->id) free(info->id);
90 void model_fini(model_sensor_h info)
94 switch (info->sensor_type) {
95 case SENSOR_TYPE_ULTRASONIC:
96 model_fini_ultrasonic_sensor(info->peripheral_info);
98 case SENSOR_TYPE_INFRARED_MOTION:
99 model_fini_infrared_motion_sensor(info->peripheral_info);
101 case SENSOR_TYPE_INFRARED_OBSTACLE_AVOIDANCE:
102 model_fini_infrared_obstacle_avoidance_sensor(info->peripheral_info);
104 case SENSOR_TYPE_TOUCH:
105 model_fini_touch_sensor(info->peripheral_info);
115 int model_read_int_value(model_sensor_h info, int *out_value)
119 switch (info->sensor_type) {
120 case SENSOR_TYPE_ULTRASONIC:
121 ret = model_read_infrared_obstacle_avoidance_sensor(info, out_value);
123 case SENSOR_TYPE_INFRARED_MOTION:
124 ret = model_read_infrared_motion_sensor(info, out_value);
126 case SENSOR_TYPE_TOUCH:
127 ret = model_read_touch_sensor(info, out_value);
134 _E("Something wrong in the result[%d]", ret);
141 int model_read_double_value(model_sensor_h info, double *out_value)
145 switch (info->sensor_type) {
146 case SENSOR_TYPE_ULTRASONIC:
147 ret = model_read_ultrasonic_sensor(info, out_value);
150 _E("There is no data to retrieve");
155 _E("Something wrong in the result[%d]", ret);
162 int model_list_add_sensor(model_sensor_h info)
165 model_sensor_h temp = NULL;
168 retv_if(!info->id, -1);
170 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {
171 retv_if(!temp->id, -1);
172 if (!strcmp(temp->id, info->id)) {
173 _E("That id[%s] already exists.", info->id);
177 model_s.list = eina_list_append(model_s.list, info);
181 int model_list_remove_sensor(model_sensor_h info)
184 model_s.list = eina_list_remove(model_s.list, info);
188 int model_list_get_sensor(const char *id, model_sensor_h *out_info)
191 model_sensor_h temp = NULL;
195 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {
196 retv_if(!temp->id, -1);
197 if (!strcmp(temp->id, id)) {
198 _E("That id[%s] already exists.", id);
208 int model_list_foreach(void (*cb)(model_sensor_h info))
211 model_sensor_h temp = NULL;
215 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {