Adding common plugin for hardware/software sensor fusion - geomagnetic_rv 34/39534/2
authorAnkur <ankur29.garg@samsung.com>
Mon, 18 May 2015 11:03:47 +0000 (16:33 +0530)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 27 May 2015 14:20:34 +0000 (07:20 -0700)
Tested on rd-pq device with tizen 2.4 repo

Change-Id: Ifa9a10a1ab60dcde364f7b26f4e8ee4ea66df509

src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp

index 381dbe2..d39f81a 100755 (executable)
@@ -56,10 +56,17 @@ void pre_process_data(sensor_data<float> &data_out, const float *data_in, float
 geomagnetic_rv_sensor::geomagnetic_rv_sensor()
 : m_accel_sensor(NULL)
 , m_magnetic_sensor(NULL)
+, m_fusion_sensor(NULL)
 , m_time(0)
 {
        cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
 
+       sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+       if (!fusion_sensor_hal)
+               m_hardware_fusion = false;
+       else
+               m_hardware_fusion = true;
+
        m_name = string(SENSOR_NAME);
        register_supported_event(GEOMAGNETIC_RV_RAW_DATA_EVENT);
        m_enable_geomagnetic_rv = 0;
@@ -113,12 +120,14 @@ bool geomagnetic_rv_sensor::on_start(void)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->add_client(ACCELEROMETER_RAW_DATA_EVENT);
-       m_accel_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
-       m_accel_sensor->start();
-       m_magnetic_sensor->add_client(GEOMAGNETIC_RAW_DATA_EVENT);
-       m_magnetic_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
-       m_magnetic_sensor->start();
+       if (!m_hardware_fusion) {
+               m_accel_sensor->add_client(ACCELEROMETER_RAW_DATA_EVENT);
+               m_accel_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
+               m_accel_sensor->start();
+               m_magnetic_sensor->add_client(GEOMAGNETIC_RAW_DATA_EVENT);
+               m_magnetic_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
+               m_magnetic_sensor->start();
+       }
 
        m_fusion_sensor->register_supported_event(FUSION_EVENT);
        m_fusion_sensor->register_supported_event(FUSION_GEOMAGNETIC_ROTATION_VECTOR_ENABLED);
@@ -134,12 +143,14 @@ bool geomagnetic_rv_sensor::on_stop(void)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->delete_client(ACCELEROMETER_RAW_DATA_EVENT);
-       m_accel_sensor->delete_interval((intptr_t)this, false);
-       m_accel_sensor->stop();
-       m_magnetic_sensor->delete_client(GEOMAGNETIC_RAW_DATA_EVENT);
-       m_magnetic_sensor->delete_interval((intptr_t)this, false);
-       m_magnetic_sensor->stop();
+       if (!m_hardware_fusion) {
+               m_accel_sensor->delete_client(ACCELEROMETER_RAW_DATA_EVENT);
+               m_accel_sensor->delete_interval((intptr_t)this, false);
+               m_accel_sensor->stop();
+               m_magnetic_sensor->delete_client(GEOMAGNETIC_RAW_DATA_EVENT);
+               m_magnetic_sensor->delete_interval((intptr_t)this, false);
+               m_magnetic_sensor->stop();
+       }
 
        m_fusion_sensor->delete_client(FUSION_EVENT);
        m_fusion_sensor->delete_interval((intptr_t)this, false);
@@ -155,8 +166,10 @@ bool geomagnetic_rv_sensor::add_interval(int client_id, unsigned int interval)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->add_interval(client_id, interval, false);
-       m_magnetic_sensor->add_interval(client_id, interval, false);
+       if (!m_hardware_fusion) {
+               m_accel_sensor->add_interval(client_id, interval, false);
+               m_magnetic_sensor->add_interval(client_id, interval, false);
+       }
 
        m_fusion_sensor->add_interval(client_id, interval, false);
 
@@ -167,8 +180,10 @@ bool geomagnetic_rv_sensor::delete_interval(int client_id)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->delete_interval(client_id, false);
-       m_magnetic_sensor->delete_interval(client_id, false);
+       if (!m_hardware_fusion) {
+               m_accel_sensor->delete_interval(client_id, false);
+               m_magnetic_sensor->delete_interval(client_id, false);
+       }
 
        m_fusion_sensor->delete_interval(client_id, false);
 
@@ -211,7 +226,7 @@ int geomagnetic_rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_
        if (event_type != GEOMAGNETIC_RV_RAW_DATA_EVENT)
                return -1;
 
-       m_fusion_sensor->get_sensor_data(FUSION_ORIENTATION_ENABLED, fusion_data);
+       m_fusion_sensor->get_sensor_data(FUSION_GEOMAGNETIC_ROTATION_VECTOR_ENABLED, fusion_data);
 
        data.accuracy = SENSOR_ACCURACY_GOOD;
        data.timestamp = get_timestamp();