Adding common plugin for hardware/software sensor fusion - gaming_rv 31/39531/5
authorAnkur <ankur29.garg@samsung.com>
Mon, 18 May 2015 10:36:41 +0000 (16:06 +0530)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 27 May 2015 14:19:19 +0000 (07:19 -0700)
Tested on rd-pq device for tizen 2.4 repo

Change-Id: I62436db7534a325515ae49594cde02b02ef3e51f

src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp

index 997bc7b..0b3559f 100755 (executable)
@@ -56,10 +56,17 @@ void pre_process_data(sensor_data<float> &data_out, const float *data_in, float
 gaming_rv_sensor::gaming_rv_sensor()
 : m_accel_sensor(NULL)
 , m_gyro_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(GAMING_RV_RAW_DATA_EVENT);
        m_enable_gaming_rv = 0;
@@ -113,12 +120,14 @@ bool gaming_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_gyro_sensor->add_client(GYROSCOPE_RAW_DATA_EVENT);
-       m_gyro_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
-       m_gyro_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_gyro_sensor->add_client(GYROSCOPE_RAW_DATA_EVENT);
+               m_gyro_sensor->add_interval((intptr_t)this, (m_interval/MS_TO_US), false);
+               m_gyro_sensor->start();
+       }
 
        m_fusion_sensor->register_supported_event(FUSION_EVENT);
        m_fusion_sensor->register_supported_event(FUSION_GAMING_ROTATION_VECTOR_ENABLED);
@@ -134,12 +143,14 @@ bool gaming_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_gyro_sensor->delete_client(GYROSCOPE_RAW_DATA_EVENT);
-       m_gyro_sensor->delete_interval((intptr_t)this, false);
-       m_gyro_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_gyro_sensor->delete_client(GYROSCOPE_RAW_DATA_EVENT);
+               m_gyro_sensor->delete_interval((intptr_t)this, false);
+               m_gyro_sensor->stop();
+       }
 
        m_fusion_sensor->delete_client(FUSION_EVENT);
        m_fusion_sensor->delete_interval((intptr_t)this, false);
@@ -155,8 +166,10 @@ bool gaming_rv_sensor::add_interval(int client_id, unsigned int interval)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->add_interval(client_id, interval, false);
-       m_gyro_sensor->add_interval(client_id, interval, false);
+       if (!m_hardware_fusion) {
+               m_accel_sensor->add_interval(client_id, interval, false);
+               m_gyro_sensor->add_interval(client_id, interval, false);
+       }
 
        m_fusion_sensor->add_interval(client_id, interval, false);
 
@@ -167,8 +180,10 @@ bool gaming_rv_sensor::delete_interval(int client_id)
 {
        AUTOLOCK(m_mutex);
 
-       m_accel_sensor->delete_interval(client_id, false);
-       m_gyro_sensor->delete_interval(client_id, false);
+       if (!m_hardware_fusion) {
+               m_accel_sensor->delete_interval(client_id, false);
+               m_gyro_sensor->delete_interval(client_id, false);
+       }
 
        m_fusion_sensor->delete_interval(client_id, false);
 
@@ -211,7 +226,7 @@ int gaming_rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &da
        if (event_type != GAMING_RV_RAW_DATA_EVENT)
                return -1;
 
-       m_fusion_sensor->get_sensor_data(FUSION_ORIENTATION_ENABLED, fusion_data);
+       m_fusion_sensor->get_sensor_data(FUSION_GAMING_ROTATION_VECTOR_ENABLED, fusion_data);
 
        data.accuracy = SENSOR_ACCURACY_GOOD;
        data.timestamp = get_timestamp();