[Sensor] SensorService class methods implementation.
authorTomasz Marciniak <t.marciniak@samsung.com>
Thu, 12 Feb 2015 13:24:27 +0000 (14:24 +0100)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Fri, 13 Feb 2015 15:31:02 +0000 (00:31 +0900)
[Verification] Code compiles without errors.
Methods return proper values.

Change-Id: Ifa021ab8e7e6fde68377bf1bdef7588e1c08ca6e
Signed-off-by: Tomasz Marciniak <t.marciniak@samsung.com>
src/sensor/sensor_api.js
src/sensor/sensor_instance.cc
src/sensor/sensor_instance.h
src/sensor/sensor_service.cc
src/sensor/sensor_service.h

index 52870da8c851ae64d0117e975643d8619cfed515..75e92aa32015df5091b8482ee78327880add3325 100644 (file)
@@ -30,6 +30,18 @@ var MagneticSensorAccuracy = {
     VERYGOOD : 'ACCURACY_VERYGOOD'
 };
 
+var _supportedSensors = [];
+var _isChecked = false;
+
+function getAvailableSensors() {
+    var result = native_.callSync('SensorService_getAvailableSensors', {});
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObject(result);
+    }
+    _supportedSensors = native_.getResultObject(result);
+    _isChecked = true;
+}
+
 function SensorService() {
 };
 
@@ -42,18 +54,32 @@ SensorService.prototype.getDefaultSensor = function() {
         }
     ]);
 
-    var result = native_.callSync('SensorService_getDefaultSensor', {});
-    if (native_.isFailure(result)) {
-        throw native_.getErrorObject(result);
+    if (!_isChecked) {
+        getAvailableSensors();
+    }
+
+    var index = _supportedSensors.indexOf(args.type);
+    if (index === -1) {
+        throw new tizen.WebAPIException(tizen.WebAPIException.NOT_SUPPORTED_ERR, 'Not supported.');
+    } else if (_supportedSensors[index] === 'LIGHT') {
+        return new LightSensor();
+    } else if (_supportedSensors[index] === 'MAGNETIC') {
+        return new MagneticSensor();
+    } else if (_supportedSensors[index] === 'PRESSURE') {
+        return new PressureSensor();
+    } else if (_supportedSensors[index] === 'PROXIMITY') {
+        return new ProximitySensor();
+    } else if (_supportedSensors[index] === 'ULTRAVIOLET') {
+        return new UltravioletSensor();
     }
 };
 
 SensorService.prototype.getAvailableSensors = function() {
-    var result = native_.callSync('SensorService_getAvailableSensors', {});
-    if (native_.isFailure(result)) {
-        throw native_.getErrorObject(result);
+    if (!_isChecked) {
+        getAvailableSensors();
     }
-    return [];
+
+    return _supportedSensors.slice();
 };
 
 //////////////////////Sensor classes//////////////////////////////////////////////////////////
index 685ad708f7ece3ddf223ee5d1be3d3d93f3aece5..47c83b983065d6131142cb704f74d025b37fa761 100644 (file)
@@ -7,6 +7,7 @@
 #include "common/picojson.h"
 #include "common/logger.h"
 #include "common/platform_exception.h"
+#include "sensor_service.h"
 
 namespace extension {
 namespace sensor {
@@ -22,7 +23,6 @@ SensorInstance::SensorInstance() {
   using namespace std::placeholders;
 #define REGISTER_SYNC(c,x) \
     RegisterSyncHandler(c, std::bind(&SensorInstance::x, this, _1, _2));
-  REGISTER_SYNC("SensorService_getDefaultSensor", GetDefaultSensor);
   REGISTER_SYNC("SensorService_getAvailableSensors", GetAvailableSensors);
   REGISTER_SYNC("Sensor_stop", SensorStop);
   REGISTER_SYNC("Sensor_setChangeListener", SensorSetChangeListener);
@@ -43,14 +43,9 @@ SensorInstance::SensorInstance() {
 SensorInstance::~SensorInstance() {
 }
 
-void SensorInstance::GetDefaultSensor(const picojson::value& args, picojson::object& out) {
-  LoggerD("Entered");
-  //empty stub
-}
-
 void SensorInstance::GetAvailableSensors(const picojson::value& args, picojson::object& out) {
   LoggerD("Entered");
-  //empty stub
+  SensorService::GetInstance()->GetAvailableSensors(out);
 }
 
 void SensorInstance::SensorStop(const picojson::value& args, picojson::object& out) {
index 28f82a284373c7319b10c5dfa04b249f561b077d..bcf13db60a65bd3a3bf0c4599898653e60309030 100644 (file)
@@ -18,7 +18,6 @@ class SensorInstance : public common::ParsedInstance {
   SensorInstance();
   virtual ~SensorInstance();
 
-  void GetDefaultSensor(const picojson::value& args, picojson::object& out);
   void GetAvailableSensors(const picojson::value& args, picojson::object& out);
   void SensorStop(const picojson::value& args, picojson::object& out);
   void SensorSetChangeListener(const picojson::value& args, picojson::object& out);
index a8229de2c902558c7d4bbfa5d1570901a2853e7f..2fe338fba5ce7b03a662a92f086867ce133ae1c8 100644 (file)
@@ -5,13 +5,32 @@
 #include "sensor_service.h"
 
 #include "common/logger.h"
-#include "common/platform_exception.h"
+#include "common/extension.h"
 
 using namespace common;
+using namespace common::tools;
 
 namespace extension {
 namespace sensor {
 
+namespace {
+static std::map<sensor_type_e, std::string> type_to_string_map = {
+    {SENSOR_LIGHT, "LIGHT"},
+    {SENSOR_MAGNETIC, "MAGNETIC"},
+    {SENSOR_PRESSURE, "PRESSURE"},
+    {SENSOR_PROXIMITY, "PROXIMITY"},
+    {SENSOR_ULTRAVIOLET, "ULTRAVIOLET"}
+};
+
+static std::map<std::string, sensor_type_e> string_to_type_map = {
+    {"LIGHT", SENSOR_LIGHT},
+    {"MAGNETIC", SENSOR_MAGNETIC},
+    {"PRESSURE", SENSOR_PRESSURE},
+    {"PROXIMITY", SENSOR_PROXIMITY},
+    {"ULTRAVIOLET", SENSOR_ULTRAVIOLET}
+};
+}
+
 SensorService::SensorService() {
 
 }
@@ -25,9 +44,64 @@ SensorService* SensorService::GetInstance() {
   return &instance_;
 }
 
+std::string SensorService::GetSensorErrorMessage(const int error_code) {
+  LoggerD("Entered");
+
+  switch (error_code) {
+    case SENSOR_ERROR_IO_ERROR:
+      return "IO error";
+    case SENSOR_ERROR_INVALID_PARAMETER:
+      return "Invalid parameter";
+    case SENSOR_ERROR_NOT_SUPPORTED:
+      return "Not supported";
+    case SENSOR_ERROR_PERMISSION_DENIED:
+      return "Permission denied";
+    case SENSOR_ERROR_OUT_OF_MEMORY:
+      return "Out of memory";
+    case SENSOR_ERROR_NOT_NEED_CALIBRATION:
+      return "Need calibration";
+    case SENSOR_ERROR_OPERATION_FAILED:
+      return "Operation failed";
+    default:
+      return "Unknown Error";
+  }
+}
+
+PlatformResult SensorService::GetSensorPlatformResult(const int error_code, const std::string &hint) {
+  LoggerD("Entered");
+
+  std::string message = hint + " : " + GetSensorErrorMessage(error_code);
+
+  switch (error_code) {
+    case SENSOR_ERROR_NOT_SUPPORTED:
+      return PlatformResult(ErrorCode::NOT_SUPPORTED_ERR, message);
+    default:
+      return PlatformResult(ErrorCode::UNKNOWN_ERR, message);
+  }
+}
+
 void SensorService::GetAvailableSensors(picojson::object& out) {
   LoggerD("Entered");
 
+  bool is_supported = false;
+  int ret = SENSOR_ERROR_NONE;
+
+  picojson::value result = picojson::value(picojson::array());
+  picojson::array& result_array = result.get<picojson::array>();
+
+  for (auto it = type_to_string_map.begin(); it != type_to_string_map.end(); ++it) {
+    ret = sensor_is_supported(it->first, &is_supported);
+    if (SENSOR_ERROR_NONE != ret) {
+      ReportError(GetSensorPlatformResult(ret, it->second), &out);
+      return;
+    }
+
+    if (is_supported) {
+      result_array.push_back(picojson::value(it->second));
+    }
+  }
+
+  ReportSuccess(result, out);
 }
 
 } // namespace sensor
index 4a56abd6be67d66b59676403b1ed514cdb0a0c5c..833cab8ff2365a929b320df3178ec167714b004f 100644 (file)
@@ -8,12 +8,12 @@
 #include <sensor.h>
 
 #include "common/picojson.h"
+#include "common/platform_result.h"
 
 namespace extension {
 namespace sensor {
 
-class SensorService
-{
+class SensorService {
   typedef struct {
     sensor_h handle;
     sensor_listener_h listener;
@@ -26,6 +26,8 @@ class SensorService
  private:
   SensorService();
   ~SensorService();
+  std::string GetSensorErrorMessage(const int error_code);
+  common::PlatformResult GetSensorPlatformResult(const int error_code, const std::string &hint);
 
   SensorData light_sensor_;
   SensorData magnetic_sensor_;