From: Adam Szczerbiak Date: Wed, 20 Jan 2016 08:56:10 +0000 (+0100) Subject: [Sensor][Tizen 3.0] interval setting fix (JIRA #937) X-Git-Tag: submit/tizen/20160202.072713^2~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6815e5415b6a5bbf2112179b49e94c8f13b82375;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Sensor][Tizen 3.0] interval setting fix (JIRA #937) This fix disallows the user to select "0" interval in order to receive notifications on every sensor's value change. Passing 0 as a parameter (or not providing it at all) now causes the interval to become 100 ms, in accordance to the widl specification. Change-Id: I83019dec7a8c534046d921153d2990e3b8ed158d Signed-off-by: Adam Szczerbiak --- diff --git a/src/sensor/sensor_service.cc b/src/sensor/sensor_service.cc index b45ad1d4..8cb5cdd9 100644 --- a/src/sensor/sensor_service.cc +++ b/src/sensor/sensor_service.cc @@ -193,10 +193,7 @@ class SensorData { common::optional is_supported_; SensorInstance& instance_; unsigned int interval_; // an interval capping the maximum frequency of callback events. - // 0 means that the events are uncapped and will be called on value change. - // a value in [10, 1000] will result in invoking sensor's callback method - // every 10 ... 1000 milliseconds, regardless of whether its value has been - // changed or not. Any other interval value is considered invalid. + // valid values: from 10 to 1000 [milliseconds]. }; SensorData::SensorData(SensorInstance& instance, sensor_type_e type_enum, @@ -321,7 +318,7 @@ bool SensorData::is_supported() { bool SensorData::UpdateEvent(sensor_event_s* event) { LoggerD("Entered: %s", type_to_string_map[type()].c_str()); - + /* bool isThisEventDifferent = false; if(this->interval_ > 0) { @@ -344,6 +341,12 @@ bool SensorData::UpdateEvent(sensor_event_s* event) { } return isThisEventDifferent; + */ + + // since the events' frequency is capped by the interval value (always greater than 0), + // and the event should be send regardless of whether sensor's value has changed or not, + // send this event notification without checking any conditions: + return true; } PlatformResult SensorData::Start() { @@ -395,6 +398,11 @@ PlatformResult SensorData::SetChangeListener(unsigned int interval) { return res; } + // if the user has not provided interval value, apply the default (100 ms): + if(interval == 0) { + interval = 100; + } + int ret = sensor_listener_set_event_cb(listener_, interval, SensorCallback, this); if (SENSOR_ERROR_NONE != ret) { LoggerE("sensor_listener_set_event_cb : %d", ret); @@ -679,7 +687,7 @@ void SensorService::SensorSetChangeListener(const picojson::value& args, picojso LoggerD("Entered"); const std::string type_str = args.contains(kSensorTypeTag) ? args.get(kSensorTypeTag).get() : ""; - const double interval = args.contains("interval") ? args.get("interval").get() : 0.0; + const double interval = args.contains("interval") ? args.get("interval").get() : 100.0; LoggerD("input type: %s %f" , type_str.c_str(), interval); sensor_type_e type_enum = string_to_type_map[type_str];