2 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Jin Yoon <jinny.yoon@samsung.com>
5 * Geunsun Lee <gs86.lee@samsung.com>
6 * Eunyoung Lee <ey928.lee@samsung.com>
7 * Junkyu Han <junkyu.han@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
24 #include <peripheral_io.h>
30 #include "model/model_ultrasonic_sensor.h"
31 #include "model/model_infrared_motion_sensor.h"
32 #include "model/model_infrared_obstacle_avoidance_sensor.h"
33 #include "model/model_touch_sensor.h"
35 struct _model_sensor_s {
37 sensor_type_e sensor_type;
39 void *peripheral_info;
45 int model_init(const char *id, sensor_type_e sensor_type, int gpio_num1, int gpio_num2, model_sensor_h *out_info)
47 model_sensor_h info = NULL;
52 info = calloc(1, sizeof(model_sensor_s));
56 info->sensor_type = sensor_type;
57 info->id = strdup(id);
58 goto_if(!info->id, error);
60 info->gpio_num[0] = gpio_num1;
61 info->gpio_num[1] = gpio_num2;
62 goto_if(gpio_num1 == -1, error);
64 switch (sensor_type) {
65 case SENSOR_TYPE_ULTRASONIC:
66 goto_if(gpio_num2 == -1, error);
67 ret = model_init_ultrasonic_sensor(gpio_num1, gpio_num2, &info->peripheral_info);
69 case SENSOR_TYPE_INFRARED_MOTION:
70 ret = model_init_infrared_motion_sensor(gpio_num1, &info->peripheral_info);
72 case SENSOR_TYPE_INFRARED_OBSTACLE_AVOIDANCE:
73 ret = model_init_infrared_obstacle_avoidance_sensor(gpio_num1, &info->peripheral_info);
75 case SENSOR_TYPE_TOUCH:
76 ret = model_init_touch_sensor(gpio_num1, &info->peripheral_info);
82 goto_if(ret != 0, error);
87 if (info->id) free(info->id);
93 void model_fini(model_sensor_h info)
97 switch (info->sensor_type) {
98 case SENSOR_TYPE_ULTRASONIC:
99 model_fini_ultrasonic_sensor(info->peripheral_info);
101 case SENSOR_TYPE_INFRARED_MOTION:
102 model_fini_infrared_motion_sensor(info->peripheral_info);
104 case SENSOR_TYPE_INFRARED_OBSTACLE_AVOIDANCE:
105 model_fini_infrared_obstacle_avoidance_sensor(info->peripheral_info);
107 case SENSOR_TYPE_TOUCH:
108 model_fini_touch_sensor(info->peripheral_info);
118 int model_read_int_value(model_sensor_h info, int *out_value)
122 switch (info->sensor_type) {
123 case SENSOR_TYPE_ULTRASONIC:
124 ret = model_read_infrared_obstacle_avoidance_sensor(info, out_value);
126 case SENSOR_TYPE_INFRARED_MOTION:
127 ret = model_read_infrared_motion_sensor(info, out_value);
129 case SENSOR_TYPE_TOUCH:
130 ret = model_read_touch_sensor(info, out_value);
137 _E("Something wrong in the result[%d]", ret);
144 int model_read_double_value(model_sensor_h info, double *out_value)
148 switch (info->sensor_type) {
149 case SENSOR_TYPE_ULTRASONIC:
150 ret = model_read_ultrasonic_sensor(info, out_value);
153 _E("There is no data to retrieve");
158 _E("Something wrong in the result[%d]", ret);
165 int model_list_add_sensor(model_sensor_h info)
168 model_sensor_h temp = NULL;
171 retv_if(!info->id, -1);
173 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {
174 retv_if(!temp->id, -1);
175 if (!strcmp(temp->id, info->id)) {
176 _E("That id[%s] already exists.", info->id);
180 model_s.list = eina_list_append(model_s.list, info);
184 int model_list_remove_sensor(model_sensor_h info)
187 model_s.list = eina_list_remove(model_s.list, info);
191 int model_list_get_sensor(const char *id, model_sensor_h *out_info)
194 model_sensor_h temp = NULL;
198 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {
199 retv_if(!temp->id, -1);
200 if (!strcmp(temp->id, id)) {
201 _E("That id[%s] already exists.", id);
211 int model_list_foreach(void (*cb)(model_sensor_h info))
214 model_sensor_h temp = NULL;
218 EINA_LIST_FOREACH_SAFE(model_s.list, l, ln, temp) {