[Sensor] Fix for HRM Sensor 94/144294/5
authorSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Thu, 17 Aug 2017 07:05:15 +0000 (09:05 +0200)
committerSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Thu, 17 Aug 2017 07:05:15 +0000 (09:05 +0200)
Currently, successCallback nor errorCallback functions are invoked after
calling start() method for HRM sensor. This occurs only on platforms
that do not support HRM sensor.

Thus, it's better to invoke errorCallback in above case instead of
successCallback.

[Verification] Code compiles, TCT 100% pass rate (TM1, TW1), except
               emulators, which do not support HRM sensor.
               Sensor startSuccessCallbacks are invoked after
               receiving an event from sensors.

Change-Id: I6484b44fd66f966c72b29fbc277b14f9006ca205
Signed-off-by: Szymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
src/sensor/sensor_service.cc

index 2a7510a5c1805b854465ab59512f9075c1b3df6d..88f68b202bcb4c5861cd34f6409ddba97cf1e8c4 100755 (executable)
@@ -680,15 +680,21 @@ void HrmSensorData::AddSensor(SensorData* sensor) {
 
 PlatformResult HrmSensorData::CallMember(PlatformResult (SensorData::*member) ()) {
   LoggerD("Entered: %s", type_to_string_map[type()].c_str());
+  bool is_any_supported = false;
   for (const auto& sensor : hrm_sensors_) {
     if (sensor.second->is_supported()) {
+      is_any_supported = true;
       auto res = (sensor.second.get()->*member)();
       if (!res) {
         return res;
       }
     }
   }
-  return PlatformResult(ErrorCode::NO_ERROR);
+  if (is_any_supported) {
+    return PlatformResult(ErrorCode::NO_ERROR);
+  } else {
+    return PlatformResult(ErrorCode::NOT_SUPPORTED_ERR, "None HRM LED sensor is supported.");
+  }
 }
 
 PlatformResult HrmSensorData::CallMember(
@@ -698,15 +704,21 @@ PlatformResult HrmSensorData::CallMember(
     const std::shared_ptr<picojson::value>& result,
     const std::function<void(const std::shared_ptr<picojson::value>&)>& work) {
   LoggerD("Entered: %s", type_to_string_map[type()].c_str());
+  bool is_any_supported = false;
   for (const auto& sensor : hrm_sensors_) {
     if (sensor.second->is_supported()) {
+      is_any_supported = true;
       auto res = (sensor.second.get()->*member)(result, work);
       if (!res) {
         return res;
       }
     }
   }
-  return PlatformResult(ErrorCode::NO_ERROR);
+  if (is_any_supported) {
+    return PlatformResult(ErrorCode::NO_ERROR);
+  } else {
+    return PlatformResult(ErrorCode::NOT_SUPPORTED_ERR, "None HRM LED sensor is supported.");
+  }
 }
 
 PlatformResult HrmSensorData::IsSupportedImpl(bool* supported) const {