}
}
-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();
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_;
};
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_(),
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());
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 {
};
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() {
: 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() {