Modified to use close function of each sensor when closing resource 01/145601/2
authorEunyoung Lee <ey928.lee@samsung.com>
Wed, 23 Aug 2017 05:35:01 +0000 (14:35 +0900)
committerEunyoung Lee <ey928.lee@samsung.com>
Wed, 23 Aug 2017 05:44:49 +0000 (14:44 +0900)
Change-Id: I5eb994ac5c22823cdfef2e15c7741241e6ce36ba

inc/resource_internal.h
src/resource.c
src/resource/resource_infrared_motion_sensor.c
src/resource/resource_infrared_obstacle_avoidance_sensor.c
src/resource/resource_led.c
src/resource/resource_touch_sensor.c
src/resource/resource_ultrasonic_sensor.c

index 5ef6cce..4b06c0d 100644 (file)
@@ -36,6 +36,7 @@
 struct _resource_s {
        int opened;
        peripheral_gpio_h sensor_h;
+       void (*close) (int);
 };
 typedef struct _resource_s resource_s;
 
index 5bb335f..2183850 100644 (file)
@@ -24,7 +24,7 @@
 #include "log.h"
 #include "resource.h"
 
-static resource_s resource_info[PIN_MAX] = { 0, };
+static resource_s resource_info[PIN_MAX] = { {0, NULL, NULL}, };
 
 resource_s *resource_get_info(int pin_num)
 {
@@ -37,8 +37,9 @@ void resource_close_all(void)
        for (i = 0; i < PIN_MAX; i++) {
                if (!resource_info[i].opened) continue;
                _I("GPIO[%d] is closing...", i);
-               peripheral_gpio_close(resource_info[i].sensor_h);
-               resource_info[i].opened = 0;
+
+               if (resource_info[i].close)
+                       resource_info[i].close(i);
        }
        resource_close_illuminance_sensor();
 }
index 40308a3..6caaf9e 100644 (file)
@@ -48,6 +48,7 @@ int resource_read_infrared_motion_sensor(int pin_num, int *out_value)
                retv_if(ret != 0, -1);
 
                resource_get_info(pin_num)->opened = 1;
+               resource_get_info(pin_num)->close = resource_close_infrared_motion_sensor;
        }
 
        ret = peripheral_gpio_read(resource_get_info(pin_num)->sensor_h, out_value);
index bb57940..29ef463 100644 (file)
@@ -48,6 +48,7 @@ int resource_read_infrared_obstacle_avoidance_sensor(int pin_num, int *out_value
                retv_if(ret != 0, -1);
 
                resource_get_info(pin_num)->opened = 1;
+               resource_get_info(pin_num)->close = resource_close_infrared_obstacle_avoidance_sensor;
        }
 
        ret = peripheral_gpio_read(resource_get_info(pin_num)->sensor_h, out_value);
index aa5e170..136a9e9 100644 (file)
@@ -47,6 +47,7 @@ int resource_write_led(int pin_num, int write_value)
                retv_if(ret != 0, -1);
 
                resource_get_info(pin_num)->opened = 1;
+               resource_get_info(pin_num)->close = resource_close_led;
        }
 
        ret = peripheral_gpio_write(resource_get_info(pin_num)->sensor_h, write_value);
index 2b75e62..07be4be 100644 (file)
@@ -50,6 +50,7 @@ int resource_read_touch_sensor(int pin_num, int *out_value)
                retv_if(ret != 0, -1);
 
                resource_get_info(pin_num)->opened = 1;
+               resource_get_info(pin_num)->close = resource_close_touch_sensor;
        }
 
        ret = peripheral_gpio_read(resource_get_info(pin_num)->sensor_h, out_value);
index 9b908e0..d749503 100644 (file)
 #include "log.h"
 #include "resource_internal.h"
 
-void resource_close_ultrasonic_sensor(int trig_pin_num, int echo_pin_num)
+void resource_close_ultrasonic_sensor_trig(int trig_pin_num)
 {
-       if (!resource_get_info(echo_pin_num)->opened) return;
        if (!resource_get_info(trig_pin_num)->opened) return;
 
-       _I("Ultrasonic sensor is finishing...");
+       _I("Ultrasonic sensor's trig is finishing...");
 
        peripheral_gpio_close(resource_get_info(trig_pin_num)->sensor_h);
-       peripheral_gpio_close(resource_get_info(echo_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;
 }
 
@@ -85,6 +91,7 @@ int resource_read_ultrasonic_sensor(int trig_pin_num, int echo_pin_num, resource
                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) {
@@ -100,6 +107,7 @@ int resource_read_ultrasonic_sensor(int trig_pin_num, int echo_pin_num, resource
                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) {