From: Tomasz Marciniak Date: Thu, 12 Feb 2015 13:24:27 +0000 (+0100) Subject: [Sensor] SensorService class methods implementation. X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~437 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e62bce95727e3386cd3189065f3c58d7b63fc8d5;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Sensor] SensorService class methods implementation. [Verification] Code compiles without errors. Methods return proper values. Change-Id: Ifa021ab8e7e6fde68377bf1bdef7588e1c08ca6e Signed-off-by: Tomasz Marciniak --- diff --git a/src/sensor/sensor_api.js b/src/sensor/sensor_api.js index 52870da8..75e92aa3 100644 --- a/src/sensor/sensor_api.js +++ b/src/sensor/sensor_api.js @@ -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////////////////////////////////////////////////////////// diff --git a/src/sensor/sensor_instance.cc b/src/sensor/sensor_instance.cc index 685ad708..47c83b98 100644 --- a/src/sensor/sensor_instance.cc +++ b/src/sensor/sensor_instance.cc @@ -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) { diff --git a/src/sensor/sensor_instance.h b/src/sensor/sensor_instance.h index 28f82a28..bcf13db6 100644 --- a/src/sensor/sensor_instance.h +++ b/src/sensor/sensor_instance.h @@ -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); diff --git a/src/sensor/sensor_service.cc b/src/sensor/sensor_service.cc index a8229de2..2fe338fb 100644 --- a/src/sensor/sensor_service.cc +++ b/src/sensor/sensor_service.cc @@ -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 type_to_string_map = { + {SENSOR_LIGHT, "LIGHT"}, + {SENSOR_MAGNETIC, "MAGNETIC"}, + {SENSOR_PRESSURE, "PRESSURE"}, + {SENSOR_PROXIMITY, "PROXIMITY"}, + {SENSOR_ULTRAVIOLET, "ULTRAVIOLET"} +}; + +static std::map 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(); + + 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 diff --git a/src/sensor/sensor_service.h b/src/sensor/sensor_service.h index 4a56abd6..833cab8f 100644 --- a/src/sensor/sensor_service.h +++ b/src/sensor/sensor_service.h @@ -8,12 +8,12 @@ #include #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_;