From fbffbbfa405dd67990a58c232335ef603fb2a1e1 Mon Sep 17 00:00:00 2001 From: Szymon Jastrzebski Date: Mon, 21 Aug 2017 11:35:52 +0200 Subject: [PATCH] [Sensor] Fixing DefaultEventComparator Comparator DefaultEventComparator should iterate through all received values. It should NOT compare timestamps. The amount of received values depend on the type of used sensor. The sensor_value_count_ values are taken from Native Sensor's Guides. [Verification] Code compiles. TCT (TW1) passed 100%. Change-Id: I60d5af338a7feea2dd4fb40cdff0f6bd03f8d650 Signed-off-by: Szymon Jastrzebski --- src/sensor/sensor_service.cc | 60 ++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/src/sensor/sensor_service.cc b/src/sensor/sensor_service.cc index 88f68b20..71a3ab25 100755 --- a/src/sensor/sensor_service.cc +++ b/src/sensor/sensor_service.cc @@ -175,21 +175,27 @@ PlatformResult GetSensorPlatformResult(const int error_code, const std::string & } } -bool MagneticEventComparator(sensor_event_s* l, sensor_event_s* r) { - return (l->values[0] == r->values[0] && - l->values[1] == r->values[1] && - l->values[2] == r->values[2] && - l->accuracy == r->accuracy); +bool DefaultEventComparator(sensor_event_s* l, sensor_event_s* r, const unsigned int value_count) { + for (unsigned int i = 0; i < value_count; ++i) { + if (l->values[i] != r->values[i]) { + return false; + } + } + return true; +} + +bool MagneticEventComparator(sensor_event_s* l, sensor_event_s* r, const unsigned int value_count) { + return DefaultEventComparator(l, r, value_count) ? l->accuracy == r->accuracy : false; } } // namespace class SensorData { public: - typedef bool (*EventComparator)(sensor_event_s* l, sensor_event_s* r); + typedef bool (*EventComparator)(sensor_event_s* l, sensor_event_s* r, const unsigned int value_count); SensorData(SensorInstance& instance, sensor_type_e type_enum, - const std::string& name, EventComparator comparator = + const std::string& name, const unsigned int sensor_value_count, EventComparator comparator = DefaultEventComparator); virtual ~SensorData(); @@ -213,10 +219,10 @@ class SensorData { private: static void SensorCallback(sensor_h sensor, sensor_event_s* event, void* user_data); - static bool DefaultEventComparator(sensor_event_s* l, sensor_event_s* r); sensor_type_e type_enum_; EventComparator comparator_; + const unsigned int sensor_value_count_; sensor_h handle_; sensor_listener_h listener_; sensor_event_s previous_event_; @@ -226,9 +232,11 @@ class SensorData { }; SensorData::SensorData(SensorInstance& instance, sensor_type_e type_enum, - const std::string& name, EventComparator comparator) + const std::string& name, const unsigned int sensor_value_count, + EventComparator comparator) : type_enum_(type_enum), comparator_(comparator), + sensor_value_count_(sensor_value_count), handle_(nullptr), listener_(nullptr), previous_event_(), @@ -270,10 +278,6 @@ void SensorData::SensorCallback(sensor_h sensor, sensor_event_s* event, void* us Instance::PostMessage(&that->instance_, result.serialize().c_str()); } -bool SensorData::DefaultEventComparator(sensor_event_s* l, sensor_event_s* r) { - return (l->timestamp == r->timestamp); -} - PlatformResult SensorData::CheckInitialization() { LoggerD("Entered: %s", type_to_string_map[type()].c_str()); @@ -348,7 +352,7 @@ bool SensorData::is_supported() { bool SensorData::UpdateEvent(sensor_event_s* event) { LoggerD("Entered: %s", type_to_string_map[type()].c_str()); - if (comparator_(&previous_event_, event)) { + if (comparator_(&previous_event_, event, sensor_value_count_)) { // previous and current events are the same -> no update return false; } else { @@ -662,11 +666,12 @@ class HrmSensorData : public SensorData { }; HrmSensorData::HrmSensorData(SensorInstance& instance) - : SensorData(instance, SENSOR_CUSTOM, "HRM_RAW") { + : SensorData(instance, SENSOR_CUSTOM, "HRM_RAW", 1) { LoggerD("Entered: %s", type_to_string_map[type()].c_str()); - AddSensor(new SensorData(instance, SENSOR_HRM_LED_IR, "LED_IR")); - AddSensor(new SensorData(instance, SENSOR_HRM_LED_RED, "LED_RED")); - AddSensor(new SensorData(instance, SENSOR_HRM_LED_GREEN, "LED_GREEN")); + // For amount of retrieved values from sensors please refer to native guides. + AddSensor(new SensorData(instance, SENSOR_HRM_LED_IR, "LED_IR", 1)); + AddSensor(new SensorData(instance, SENSOR_HRM_LED_RED, "LED_RED", 1)); + AddSensor(new SensorData(instance, SENSOR_HRM_LED_GREEN, "LED_GREEN", 1)); } HrmSensorData::~HrmSensorData() { @@ -812,16 +817,17 @@ SensorService::SensorService(SensorInstance& instance) : instance_(instance) { LoggerD("Entered"); - AddSensor(new SensorData(instance, SENSOR_LIGHT, "LIGHT")); - AddSensor(new SensorData(instance, SENSOR_MAGNETIC, "MAGNETIC", MagneticEventComparator)); - AddSensor(new SensorData(instance, SENSOR_PRESSURE, "PRESSURE")); - AddSensor(new SensorData(instance, SENSOR_PROXIMITY, "PROXIMITY")); - AddSensor(new SensorData(instance, SENSOR_ULTRAVIOLET, "ULTRAVIOLET")); + // For amount of retrieved values from sensors please refer to native guides. + AddSensor(new SensorData(instance, SENSOR_LIGHT, "LIGHT", 1)); + AddSensor(new SensorData(instance, SENSOR_MAGNETIC, "MAGNETIC", 3, MagneticEventComparator)); + AddSensor(new SensorData(instance, SENSOR_PRESSURE, "PRESSURE", 1)); + AddSensor(new SensorData(instance, SENSOR_PROXIMITY, "PROXIMITY", 1)); + AddSensor(new SensorData(instance, SENSOR_ULTRAVIOLET, "ULTRAVIOLET", 1)); AddSensor(new HrmSensorData(instance)); - AddSensor(new SensorData(instance, SENSOR_GRAVITY, "GRAVITY")); - AddSensor(new SensorData(instance, SENSOR_GYROSCOPE, "GYROSCOPE")); - AddSensor(new SensorData(instance, SENSOR_GYROSCOPE_ROTATION_VECTOR, "GYROSCOPE_ROTATION_VECTOR")); - AddSensor(new SensorData(instance, SENSOR_LINEAR_ACCELERATION, "LINEAR_ACCELERATION")); + AddSensor(new SensorData(instance, SENSOR_GRAVITY, "GRAVITY", 3)); + AddSensor(new SensorData(instance, SENSOR_GYROSCOPE, "GYROSCOPE", 3)); + AddSensor(new SensorData(instance, SENSOR_GYROSCOPE_ROTATION_VECTOR, "GYROSCOPE_ROTATION_VECTOR", 4)); + AddSensor(new SensorData(instance, SENSOR_LINEAR_ACCELERATION, "LINEAR_ACCELERATION", 3)); } SensorService::~SensorService() { -- 2.34.1