sensor-hal-tm2: check if the light event value is invalid 81/87681/2 devel/tizen_3.0 accepted/tizen/3.0/mobile/20161015.034046 accepted/tizen/mobile/20160909.122758 submit/tizen_3.0_mobile/20161015.000006 submit/tizen_mobile/20160909.095211
authorkibak.yoon <kibak.yoon@samsung.com>
Fri, 9 Sep 2016 06:13:01 +0000 (15:13 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Fri, 9 Sep 2016 06:18:28 +0000 (15:18 +0900)
Change-Id: I927bb0485e624679490aa4a99bd55af9782173a1
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/light/light_device.cpp
src/light/light_device.h

index c98ed3cf980223d18d0ee1365ea8c2b1a1ec94ef..bfebe3e28c2f0a4cc52435c140cd4d210d5016e5 100644 (file)
@@ -238,7 +238,11 @@ bool light_device::update_value_lux(void)
                return false;
        }
 
-       compute_lux_tmg399x(raw_red, raw_green, raw_blue, raw_white, raw_ir_cmp, raw_amb_pga);
+       if (!compute_lux_tmg399x(raw_red, raw_green, raw_blue, raw_white, raw_ir_cmp, raw_amb_pga)) {
+               _E("Failed to compute lux");
+               return false;
+       }
+
        m_fired_time = fired_time;
 
        _D("update_value_lux, lux : %d", m_lux);
@@ -279,7 +283,7 @@ int light_device::get_data(uint32_t id, sensor_data_t **data, int *length)
        return 0;
 }
 
-void light_device::compute_lux_tmg399x(size_t red, size_t green, size_t blue, size_t clear, size_t a_time, size_t a_gain)
+bool light_device::compute_lux_tmg399x(size_t red, size_t green, size_t blue, size_t clear, size_t a_time, size_t a_gain)
 {
        const int luxgain[4] = {1, 4, 16, 64};
        size_t rp1, gp1, bp1, cp1;
@@ -288,6 +292,11 @@ void light_device::compute_lux_tmg399x(size_t red, size_t green, size_t blue, si
        int ir;
        int sat;
 
+       if (a_gain > 3) {
+               _E("Invalid a_gain value : %d", a_gain);
+               return false;
+       }
+
        sat = min_t(MAX_ALS_VALUE, ((256 - a_time) << 10));
        sat = sat * 7 / 10;
 
@@ -303,7 +312,7 @@ void light_device::compute_lux_tmg399x(size_t red, size_t green, size_t blue, si
                                "RED : %d, GREEN : %d, BLUE : %d, CLEAR : %d,"
                                "Lux = %f, CCT = %f, sat = %d",
                                red, green, blue, clear, calculated_lux, m_cct, sat);
-               return;
+               return true;
        }
 
        ir = red + green + blue - clear + 1;
@@ -400,5 +409,7 @@ void light_device::compute_lux_tmg399x(size_t red, size_t green, size_t blue, si
                                a_time, gain, ir,
                                rp1, gp1, bp1, cp1, cpl);
        }
+
+       return true;
 }
 
index c21e4fc67ab19e91f8bae4c8fb61cd0562985db4..bac76480f1b0477dc2ee531b8a29de8cd8598054 100644 (file)
@@ -58,6 +58,6 @@ private:
 
        bool update_value_lux(void);
 
-       void compute_lux_tmg399x(size_t red, size_t green, size_t blue, size_t clear, size_t a_time, size_t a_gain);
+       bool compute_lux_tmg399x(size_t red, size_t green, size_t blue, size_t clear, size_t a_time, size_t a_gain);
 };
 #endif /* _LIGHT_DEVICE_H_ */