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 5ef6cce90b135daf39f2f8ce2f82021a8dbb6817..4b06c0d59e45dd560e2a313c77f1f6e8b0614d33 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 5bb335f382df50f14488f37503e9d4546b863176..2183850a98c69e4c2adb110e8cb5431b838d5253 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 40308a3bfc4b0e3d6d131e4e3af1eaed8472e6db..6caaf9ea20d704c5fe97e98658cec5dbf6c864c5 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 bb57940c8d546e3a72b25a0d83510f8b11923a35..29ef4630602c6a1fb14ab41c6f734ee1c76b8002 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 aa5e17076c4140892f263dc59b53ad39eb8b19c4..136a9e9c5fcc242890f1fbfc3a4681eee01a12a0 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 2b75e62469a996aa8c7f366e5db044349609c947..07be4bef209569e077c41c91c6a9305c795b7a66 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 9b908e0369618db1b1a64d22216bc86fcb675c5c..d74950368adcefc762a0d2253b30b073c483426d 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) {