[Verification] Code compiles without errors.
Data for specific sensors are successfully received.
Change-Id: Id94cd6e013d955a7a736c018202962612c1a7a99
Signed-off-by: Tomasz Marciniak <t.marciniak@samsung.com>
nullable : true
}
]);
- native_.call('LightSensor_getData', {},
- function(result) {
+
+ if (!_startedSensors[this.sensorType]) {
+ setTimeout(function() {
+ if (!T_.isNullOrUndefined(args.errorCallback)) {
+ args.errorCallback(new tizen.WebAPIException(
+ tizen.WebAPIException.SERVICE_NOT_AVAILABLE_ERR,
+ 'Service is not available.'));
+ }
+ }, 0);
+ } else {
+ native_.call('Sensor_getData', { type : this.sensorType },
+ function(result) {
if (native_.isFailure(result)) {
if(!T_.isNullOrUndefined(args.errorCallback)) {
args.errorCallback(native_.getErrorObject(result));
}
} else {
- args.successCallback();
+ args.successCallback(new SensorLightData(result));
}
- }
- );
+ });
+ }
};
//// MagneticSensor
nullable : true
}
]);
- native_.call('MagneticSensor_getData', {},
- function(result) {
+
+ if (!_startedSensors[this.sensorType]) {
+ setTimeout(function() {
+ if (!T_.isNullOrUndefined(args.errorCallback)) {
+ args.errorCallback(new tizen.WebAPIException(
+ tizen.WebAPIException.SERVICE_NOT_AVAILABLE_ERR,
+ 'Service is not available.'));
+ }
+ }, 0);
+ } else {
+ native_.call('Sensor_getData', { type : this.sensorType },
+ function(result) {
if (native_.isFailure(result)) {
if(!T_.isNullOrUndefined(args.errorCallback)) {
args.errorCallback(native_.getErrorObject(result));
}
} else {
- args.successCallback();
+ args.successCallback(new SensorMagneticData(result));
}
- }
- );
+ });
+ }
};
//// PressureSensor
nullable : true
}
]);
- native_.call('PressureSensor_getData', {},
- function(result) {
+
+ if (!_startedSensors[this.sensorType]) {
+ setTimeout(function() {
+ if (!T_.isNullOrUndefined(args.errorCallback)) {
+ args.errorCallback(new tizen.WebAPIException(
+ tizen.WebAPIException.SERVICE_NOT_AVAILABLE_ERR,
+ 'Service is not available.'));
+ }
+ }, 0);
+ } else {
+ native_.call('Sensor_getData', { type : this.sensorType },
+ function(result) {
if (native_.isFailure(result)) {
if(!T_.isNullOrUndefined(args.errorCallback)) {
args.errorCallback(native_.getErrorObject(result));
}
} else {
- args.successCallback();
+ args.successCallback(new SensorPressureData(result));
}
- }
- );
+ });
+ }
};
//// ProximitySensor
nullable : true
}
]);
- native_.call('ProximitySensor_getData', {},
- function(result) {
+
+ if (!_startedSensors[this.sensorType]) {
+ setTimeout(function() {
+ if (!T_.isNullOrUndefined(args.errorCallback)) {
+ args.errorCallback(new tizen.WebAPIException(
+ tizen.WebAPIException.SERVICE_NOT_AVAILABLE_ERR,
+ 'Service is not available.'));
+ }
+ }, 0);
+ } else {
+ native_.call('Sensor_getData', { type : this.sensorType },
+ function(result) {
if (native_.isFailure(result)) {
if(!T_.isNullOrUndefined(args.errorCallback)) {
args.errorCallback(native_.getErrorObject(result));
}
} else {
- args.successCallback();
+ args.successCallback(new SensorProximityData(result));
}
- }
- );
+ });
+ }
};
//// UltravioletSensor
nullable : true
}
]);
- native_.call('UltravioletSensor_getData', {},
- function(result) {
+
+ if (!_startedSensors[this.sensorType]) {
+ setTimeout(function() {
+ if (!T_.isNullOrUndefined(args.errorCallback)) {
+ args.errorCallback(new tizen.WebAPIException(
+ tizen.WebAPIException.SERVICE_NOT_AVAILABLE_ERR,
+ 'Service is not available.'));
+ }
+ }, 0);
+ } else {
+ native_.call('Sensor_getData', { type : this.sensorType },
+ function(result) {
if (native_.isFailure(result)) {
if(!T_.isNullOrUndefined(args.errorCallback)) {
args.errorCallback(native_.getErrorObject(result));
}
} else {
- args.successCallback();
+ args.successCallback(new SensorUltravioletData(result));
}
- }
- );
+ });
+ }
};
////////////////////// Sensor Data classes/////////////////////////////////////////////////////
#define REGISTER_ASYNC(c,x) \
RegisterHandler(c, std::bind(&SensorInstance::x, this, _1, _2));
REGISTER_ASYNC("Sensor_start", SensorStart);
- REGISTER_ASYNC("LightSensor_getData", LightSensorGetData);
- REGISTER_ASYNC("MagneticSensor_getData", MagneticSensorGetData);
- REGISTER_ASYNC("PressureSensor_getData", PressureSensorGetData);
- REGISTER_ASYNC("ProximitySensor_getData", ProximitySensorGetData);
- REGISTER_ASYNC("UltravioletSensor_getData", UltravioletSensorGetData);
-
+ REGISTER_ASYNC("Sensor_getData", SensorGetData);
#undef REGISTER_ASYNC
}
SensorService::GetInstance()->SensorStart(args, out);
}
-void SensorInstance::LightSensorGetData(const picojson::value& args, picojson::object& out) {
- LoggerD("Entered");
- //empty stub
-}
-
-void SensorInstance::MagneticSensorGetData(const picojson::value& args, picojson::object& out) {
- LoggerD("Entered");
- //empty stub
-}
-
-void SensorInstance::PressureSensorGetData(const picojson::value& args, picojson::object& out) {
- LoggerD("Entered");
- //empty stub
-}
-
-void SensorInstance::ProximitySensorGetData(const picojson::value& args, picojson::object& out) {
+void SensorInstance::SensorGetData(const picojson::value& args, picojson::object& out) {
LoggerD("Entered");
- //empty stub
-}
-void SensorInstance::UltravioletSensorGetData(const picojson::value& args, picojson::object& out) {
- LoggerD("Entered");
- //empty stub
+ SensorService::GetInstance()->GetSensorData(args, out);
}
} // namespace sensor
void SensorSetChangeListener(const picojson::value& args, picojson::object& out);
void SensorUnsetChangeListener(const picojson::value& args, picojson::object& out);
void SensorStart(const picojson::value& args, picojson::object& out);
- void LightSensorGetData(const picojson::value& args, picojson::object& out);
- void MagneticSensorGetData(const picojson::value& args, picojson::object& out);
- void PressureSensorGetData(const picojson::value& args, picojson::object& out);
- void ProximitySensorGetData(const picojson::value& args, picojson::object& out);
- void UltravioletSensorGetData(const picojson::value& args, picojson::object& out);
+ void SensorGetData(const picojson::value& args, picojson::object& out);
};
} // namespace sensor
{"PROXIMITY", SENSOR_PROXIMITY},
{"ULTRAVIOLET", SENSOR_ULTRAVIOLET}
};
+
+static std::string GetAccuracyString(int accuracy) {
+ LoggerD("Entered");
+ switch (static_cast<sensor_data_accuracy_e>(accuracy)) {
+ case SENSOR_DATA_ACCURACY_BAD:
+ return "ACCURACY_BAD";
+ case SENSOR_DATA_ACCURACY_NORMAL:
+ return "ACCURACY_NORMAL";
+ case SENSOR_DATA_ACCURACY_GOOD:
+ return "ACCURACY_GOOD";
+ case SENSOR_DATA_ACCURACY_VERYGOOD:
+ return "ACCURACY_VERYGOOD";
+ default:
+ return "ACCURACY_UNDEFINED";
+ }
+}
}
SensorService::SensorService() {
}
}
+void SensorService::GetSensorData(const picojson::value& args, picojson::object& out) {
+ LoggerD("Entered");
+
+ CHECK_EXIST(args, "callbackId", out);
+ CHECK_EXIST(args, "type", out);
+
+ int callback_id = static_cast<int>(args.get("callbackId").get<double>());
+ sensor_type_e sensor_type = string_to_type_map[args.get("type").get<std::string>()];
+
+ auto get_data = [this, sensor_type](const std::shared_ptr<picojson::value>& result) {
+ sensor_event_s sensor_event;
+ SensorData* sensor = this->GetSensorStruct(sensor_type);
+ int ret = sensor_listener_read_data(sensor->listener, &sensor_event);
+
+ if (SENSOR_ERROR_NONE != ret) {
+ ReportError(GetSensorPlatformResult(ret, type_to_string_map[sensor_type]),
+ &(result->get<picojson::object>()));
+ return;
+ }
+
+ picojson::object& object = result->get<picojson::object>();
+ switch (sensor_type) {
+ case SENSOR_LIGHT: {
+ object["lightLevel"] = picojson::value(static_cast<double>(sensor_event.values[0]));
+ break;
+ }
+ case SENSOR_MAGNETIC: {
+ object["x"] = picojson::value(static_cast<double>(sensor_event.values[0]));
+ object["y"] = picojson::value(static_cast<double>(sensor_event.values[1]));
+ object["z"] = picojson::value(static_cast<double>(sensor_event.values[2]));
+ object["accuracy"] = picojson::value(GetAccuracyString(sensor_event.accuracy));
+ break;
+ }
+ case SENSOR_PRESSURE: {
+ object["pressure"] = picojson::value(static_cast<double>(sensor_event.values[0]));
+ break;
+ }
+ case SENSOR_PROXIMITY: {
+ int state = static_cast<int>(sensor_event.values[0]);
+ object["proximityState"] = picojson::value(state ? "NEAR" : "FAR");
+ break;
+ }
+ case SENSOR_ULTRAVIOLET: {
+ object["ultravioletLevel"] = picojson::value(static_cast<double>(sensor_event.values[0]));
+ break;
+ }
+ default: {
+ ReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unsupported type"),
+ &(result->get<picojson::object>()));
+ return;
+ }
+ }
+
+ ReportSuccess(object);
+ };
+
+ auto get_data_result = [callback_id](const std::shared_ptr<picojson::value>& result) {
+ result->get<picojson::object>()["callbackId"] = picojson::value{static_cast<double>(callback_id)};
+
+ SensorInstance::GetInstance().PostMessage(result->serialize().c_str());
+ };
+
+ TaskQueue::GetInstance().Queue<picojson::value>(
+ get_data,
+ get_data_result,
+ std::shared_ptr<picojson::value>{new picojson::value{picojson::object()}});
+
+ ReportSuccess(out);
+}
+
} // namespace sensor
} // namespace extension
void SensorStop(const picojson::value& args, picojson::object& out);
void SensorSetChangeListener(const picojson::value& args, picojson::object& out);
void SensorUnsetChangeListener(const picojson::value& args, picojson::object& out);
+ void GetSensorData(const picojson::value& args, picojson::object& out);
private:
SensorService();