diff options
Diffstat (limited to 'src/resource/resource_ultrasonic_sensor.c')
-rw-r--r-- | src/resource/resource_ultrasonic_sensor.c | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/src/resource/resource_ultrasonic_sensor.c b/src/resource/resource_ultrasonic_sensor.c deleted file mode 100644 index 336e623..0000000 --- a/src/resource/resource_ultrasonic_sensor.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. - * - * Contact: Jin Yoon <jinny.yoon@samsung.com> - * Geunsun Lee <gs86.lee@samsung.com> - * Eunyoung Lee <ey928.lee@samsung.com> - * Junkyu Han <junkyu.han@samsung.com> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <stdlib.h> -#include <unistd.h> -#include <peripheral_io.h> -#include <sys/time.h> -#include <gio/gio.h> - -#include "log.h" -#include "resource_internal.h" - -static resource_read_s *resource_read_info = NULL; -static unsigned long long triggered_time = 0; - -void resource_close_ultrasonic_sensor_trig(int trig_pin_num) -{ - if (!resource_get_info(trig_pin_num)->opened) return; - - _I("Ultrasonic sensor's trig is finishing..."); - - peripheral_gpio_close(resource_get_info(trig_pin_num)->sensor_h); - resource_get_info(trig_pin_num)->opened = 0; -} - -void resource_close_ultrasonic_sensor_echo(int echo_pin_num) -{ - if (!resource_get_info(echo_pin_num)->opened) return; - - _I("Ultrasonic sensor's echo is finishing..."); - - peripheral_gpio_close(resource_get_info(echo_pin_num)->sensor_h); - resource_get_info(echo_pin_num)->opened = 0; - free(resource_read_info); - resource_read_info = NULL; -} - -static unsigned long long _get_timestamp(void) -{ - struct timespec t; - clock_gettime(CLOCK_REALTIME, &t); - return ((unsigned long long)(t.tv_sec)*1000000000LL + t.tv_nsec) / 1000; -} - -static void _resource_read_ultrasonic_sensor_cb(peripheral_gpio_h gpio, peripheral_error_e error, void *user_data) -{ - float dist = 0; - uint32_t value; - unsigned long long returned_time = 0; - resource_read_s *resource_read_info = user_data; - - ret_if(!resource_read_info); - ret_if(!resource_read_info->cb); - - peripheral_gpio_read(gpio, &value); - - if (value == 1) { - triggered_time = _get_timestamp(); - } else if (value == 0) { - returned_time = _get_timestamp(); - } - - if (triggered_time > 0 && value == 0) { - dist = returned_time - triggered_time; - if (dist < 150 || dist > 25000) { - dist = -1; - } else { - dist = (dist * 34300) / 2000000; - } - - resource_read_info->cb(dist, resource_read_info->data); - } -} - -int resource_read_ultrasonic_sensor(int trig_pin_num, int echo_pin_num, resource_read_cb cb, void *data) -{ - int ret = 0; - - triggered_time = 0; - - if (resource_read_info == NULL) { - resource_read_info = calloc(1, sizeof(resource_read_s)); - retv_if(!resource_read_info, -1); - } else { - peripheral_gpio_unset_interrupted_cb(resource_get_info(resource_read_info->pin_num)->sensor_h); - } - resource_read_info->cb = cb; - resource_read_info->data = data; - resource_read_info->pin_num = echo_pin_num; - - if (!resource_get_info(trig_pin_num)->opened) { - _I("Ultrasonic sensor's trig is initializing..."); - - ret = peripheral_gpio_open(trig_pin_num, &resource_get_info(trig_pin_num)->sensor_h); - retv_if(!resource_get_info(trig_pin_num)->sensor_h, -1); - - ret = peripheral_gpio_set_direction(resource_get_info(trig_pin_num)->sensor_h, PERIPHERAL_GPIO_DIRECTION_OUT_INITIALLY_LOW); - retv_if(ret != 0, -1); - - resource_get_info(trig_pin_num)->opened = 1; - resource_get_info(trig_pin_num)->close = resource_close_ultrasonic_sensor_trig; - } - - if (!resource_get_info(echo_pin_num)->opened) { - _I("Ultrasonic sensor's echo is initializing..."); - - ret = peripheral_gpio_open(echo_pin_num, &resource_get_info(echo_pin_num)->sensor_h); - retv_if(!resource_get_info(echo_pin_num)->sensor_h, -1); - - ret = peripheral_gpio_set_direction(resource_get_info(echo_pin_num)->sensor_h, PERIPHERAL_GPIO_DIRECTION_IN); - retv_if(ret != 0, -1); - - ret = peripheral_gpio_set_edge_mode(resource_get_info(echo_pin_num)->sensor_h, PERIPHERAL_GPIO_EDGE_BOTH); - retv_if(ret != 0, -1); - - resource_get_info(echo_pin_num)->opened = 1; - resource_get_info(echo_pin_num)->close = resource_close_ultrasonic_sensor_echo; - } - - if (resource_get_info(echo_pin_num)->sensor_h) { - ret = peripheral_gpio_set_interrupted_cb(resource_get_info(echo_pin_num)->sensor_h, _resource_read_ultrasonic_sensor_cb, resource_read_info); - retv_if(ret != 0, -1); - } - - ret = peripheral_gpio_write(resource_get_info(trig_pin_num)->sensor_h, 0); - retv_if(ret < 0, -1); - - usleep(20000); - - ret = peripheral_gpio_write(resource_get_info(trig_pin_num)->sensor_h, 1); - retv_if(ret < 0, -1); - - usleep(20000); - - ret = peripheral_gpio_write(resource_get_info(trig_pin_num)->sensor_h, 0); - retv_if(ret < 0, -1); - - return 0; -} |