[Verification] Code compiles without errors.
Methods return proper values.
Change-Id: Ifa021ab8e7e6fde68377bf1bdef7588e1c08ca6e
Signed-off-by: Tomasz Marciniak <t.marciniak@samsung.com>
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() {
};
}
]);
- 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//////////////////////////////////////////////////////////
#include "common/picojson.h"
#include "common/logger.h"
#include "common/platform_exception.h"
+#include "sensor_service.h"
namespace extension {
namespace sensor {
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);
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) {
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);
#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() {
}
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
#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;
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_;