From 64ca0ce9bf24497db494a45313e2b6f19346a0c1 Mon Sep 17 00:00:00 2001 From: Ankur Date: Mon, 23 Feb 2015 19:00:17 +0530 Subject: [PATCH 01/16] Changes as per the reviews on the previous patches As per the reviews on the previous patches, submitting a patch with all the changes suggested in the reviews. Tested on RD-PQ device Change-Id: I15e79bdd0331c17908cc62fa523bab188cc28295 --- src/libsensord/sensor_geomagnetic_rv.h | 4 +--- src/sensor_fusion/euler_angles.h | 2 +- src/sensor_fusion/matrix.cpp | 6 +++--- src/sensor_fusion/orientation_filter.cpp | 2 +- src/sensor_fusion/quaternion.cpp | 2 +- src/sensor_fusion/vector.cpp | 14 ++++---------- 6 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/libsensord/sensor_geomagnetic_rv.h b/src/libsensord/sensor_geomagnetic_rv.h index 73106ae..3deaaa2 100755 --- a/src/libsensord/sensor_geomagnetic_rv.h +++ b/src/libsensord/sensor_geomagnetic_rv.h @@ -48,6 +48,4 @@ enum geomagnetic_rv_event_type { } #endif -#endif -//! End of a file - +#endif /* __SENSOR_GEOMAGNETIC_RV_H__ */ diff --git a/src/sensor_fusion/euler_angles.h b/src/sensor_fusion/euler_angles.h index 061dfb1..9e2f607 100644 --- a/src/sensor_fusion/euler_angles.h +++ b/src/sensor_fusion/euler_angles.h @@ -29,7 +29,7 @@ template class euler_angles { public: - vect m_ang; + vect m_ang; euler_angles(); euler_angles(const TYPE roll, const TYPE pitch, const TYPE azimuth); diff --git a/src/sensor_fusion/matrix.cpp b/src/sensor_fusion/matrix.cpp index 9d483f2..62f0555 100755 --- a/src/sensor_fusion/matrix.cpp +++ b/src/sensor_fusion/matrix.cpp @@ -51,9 +51,9 @@ TYPE_ROW_COL matrix matrix::operator =(const mat return *this; } - for (int p = 0; p < ROW; p++) - for (int q = 0; q < COL; q++) - m_mat[p][q] = m.m_mat[p][q]; + for (int i = 0; i < ROW; i++) + for (int j = 0; j < COL; j++) + m_mat[i][j] = m.m_mat[i][j]; return *this; } diff --git a/src/sensor_fusion/orientation_filter.cpp b/src/sensor_fusion/orientation_filter.cpp index 2bf7865..76febbb 100644 --- a/src/sensor_fusion/orientation_filter.cpp +++ b/src/sensor_fusion/orientation_filter.cpp @@ -84,7 +84,7 @@ inline void orientation_filter::init_accel_gyro_mag_data(const sensor_data m_magnetic.m_data = magnetic.m_data; if (m_gyro.m_time_stamp != 0 && gyro.m_time_stamp != 0) - sample_interval_gyro = gyro.m_time_stamp - m_gyro.m_time_stamp; + sample_interval_gyro = gyro.m_time_stamp - m_gyro.m_time_stamp; m_gyro_dt = sample_interval_gyro * US2S; diff --git a/src/sensor_fusion/quaternion.cpp b/src/sensor_fusion/quaternion.cpp index caf2950..9d28f58 100755 --- a/src/sensor_fusion/quaternion.cpp +++ b/src/sensor_fusion/quaternion.cpp @@ -30,7 +30,7 @@ template int sgn(T val) { template T mag(T val) { if (val < 0) - return val * (T)-1; + return val * static_cast(-1); else return val; } diff --git a/src/sensor_fusion/vector.cpp b/src/sensor_fusion/vector.cpp index 2fc932a..5174035 100644 --- a/src/sensor_fusion/vector.cpp +++ b/src/sensor_fusion/vector.cpp @@ -21,7 +21,7 @@ TYPE_SIZE vect::vect(void) { - for(int i=0;i::~vect() TYPE_SIZE vect vect::operator =(const vect& v) { if (this == &v) - { return *this; - } + for (int q = 0; q < SIZE; q++) m_vec[q] = v.m_vec[q]; - return *this; + + return *this; } T_S ostream& operator <<(ostream& dout, vect& v) { for (int j = 0; j < S; j++) - { dout << v.m_vec[j] << "\t"; - } dout << endl; @@ -114,12 +112,8 @@ T_S_R_C matrix operator *(const matrix m, const vect v) matrix m1; for (int i = 0; i < R; i++) - { for (int j = 0; j < S; j++) - { m1.m_mat[i][j] = m.m_mat[i][0] * v.m_vec[j]; - } - } return m1; } -- 2.7.4 From 1fdca779be3b11cf95880db8667d4b2d1ff036d7 Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Mon, 23 Feb 2015 18:23:29 +0530 Subject: [PATCH 02/16] Correcting indentation for if condition and adding error handling statement for sensord_unregister_event -Correcting the position of the starting brace in the if condition. -Adding error handling condition in the common test folder for unregistering the event. -Changes have been made as per reviews in previous patches. Change-Id: I407bb6a22ddf0756aed2e7c3649a1c3490a7ba28 --- src/sensor_fusion/orientation_filter.cpp | 3 +-- test/src/tc-common.c | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sensor_fusion/orientation_filter.cpp b/src/sensor_fusion/orientation_filter.cpp index 76febbb..0b316ee 100644 --- a/src/sensor_fusion/orientation_filter.cpp +++ b/src/sensor_fusion/orientation_filter.cpp @@ -333,8 +333,7 @@ inline void orientation_filter::time_update_gaming_rv() m_quat_gaming_rv = euler2quat(euler_gaming_rv); - if (is_initialized(m_state_new)) - { + if (is_initialized(m_state_new)) { m_state_error.m_vec[0] = euler_error.m_ang.m_vec[0]; m_state_error.m_vec[1] = euler_error.m_ang.m_vec[1]; m_state_error.m_vec[2] = euler_error.m_ang.m_vec[2]; diff --git a/test/src/tc-common.c b/test/src/tc-common.c index c94f77d..53661c3 100644 --- a/test/src/tc-common.c +++ b/test/src/tc-common.c @@ -280,7 +280,13 @@ int main(int argc, char **argv) g_main_loop_run(mainloop); g_main_loop_unref(mainloop); - sensord_unregister_event(handle, event); + result = sensord_unregister_event(handle, event); + + if (result < 0) { + printf("Error\n\n"); + return -1; + } + stop_handle = sensord_stop(handle); if (stop_handle < 0) { -- 2.7.4 From f8e186e29dc915112a6be63a899c63dd9f54f588 Mon Sep 17 00:00:00 2001 From: Kibak Yoon Date: Tue, 17 Feb 2015 14:53:52 +0900 Subject: [PATCH 03/16] sensord: remove sensor.h which supports some packages because it is unnecessary. It doesn't need to support sensor.h for some packages use internal api any more. Change-Id: I814d198c85ac44e01349dbf5741ff50501a6ae48 Signed-off-by: Kibak Yoon --- src/libsensord/CMakeLists.txt | 1 - src/libsensord/client.cpp | 1 - src/libsensord/sensor.h | 25 ------------------------- 3 files changed, 27 deletions(-) delete mode 100755 src/libsensord/sensor.h diff --git a/src/libsensord/CMakeLists.txt b/src/libsensord/CMakeLists.txt index 0fe82f6..2c5032e 100755 --- a/src/libsensord/CMakeLists.txt +++ b/src/libsensord/CMakeLists.txt @@ -35,7 +35,6 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION}) configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc @ONLY) install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RuntimeLibraries) -install(FILES sensor.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES sensor_internal_deprecated.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES sensor_internal.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES poller.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) diff --git a/src/libsensord/client.cpp b/src/libsensord/client.cpp index 2191434..710bdcf 100755 --- a/src/libsensord/client.cpp +++ b/src/libsensord/client.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include diff --git a/src/libsensord/sensor.h b/src/libsensord/sensor.h deleted file mode 100755 index 2885a01..0000000 --- a/src/libsensord/sensor.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * libsensord - * - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef __SENSOR_IN_H__ -#define __SENSOR_IN_H__ - -#include - -#endif -- 2.7.4 From 7e817e54e19a3a0fcfb91ca05462a81deeb15500 Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Mon, 23 Feb 2015 19:57:54 +0530 Subject: [PATCH 04/16] Removing redundant temperature sensor events TEMPERATURE_BASE_DATA_SET and TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME were the same. TEMPERATURE_BASE_DATA_SET has been removed. TEMPERATURE_BASE_DATA_SET was used for polling events and TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME was used for event driven. Since both these represent the same pressure event, DATA_SET type has been removed and TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME has been renamed to TEMPERATURE_RAW_DATA_EVENT to make it simpler. These representations have been shifted to sensor_deprecated.h in case other packages outside sensord are using these representations. Change-Id: I7ebe005fcb2dd236cabf4c209a4456973f4597d1 --- src/libsensord/client_common.cpp | 3 +-- src/libsensord/sensor_deprecated.h | 3 +++ src/libsensord/sensor_temperature.h | 6 +----- src/temperature/temperature_sensor.cpp | 8 ++++---- test/src/auto_test.c | 2 +- test/src/tc-common.c | 4 ++-- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp index 1e3b344..2a67b15 100755 --- a/src/libsensord/client_common.cpp +++ b/src/libsensord/client_common.cpp @@ -60,7 +60,7 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, LINEAR_ACCEL_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, ORIENTATION_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, PRESSURE_RAW_DATA_EVENT, 0, 10), - FILL_LOG_ELEMENT(LOG_ID_EVENT, TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), + FILL_LOG_ELEMENT(LOG_ID_EVENT, TEMPERATURE_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), @@ -71,7 +71,6 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_DATA, GRAVITY_BASE_DATA_SET, 0, 25), FILL_LOG_ELEMENT(LOG_ID_DATA, LINEAR_ACCEL_BASE_DATA_SET, 0, 25), FILL_LOG_ELEMENT(LOG_ID_DATA, ORIENTATION_BASE_DATA_SET, 0, 25), - FILL_LOG_ELEMENT(LOG_ID_DATA, TEMPERATURE_BASE_DATA_SET, 0, 25), }; typedef unordered_map log_map; diff --git a/src/libsensord/sensor_deprecated.h b/src/libsensord/sensor_deprecated.h index 094907a..52a833e 100644 --- a/src/libsensord/sensor_deprecated.h +++ b/src/libsensord/sensor_deprecated.h @@ -38,6 +38,9 @@ extern "C" #define ACCELEROMETER_EVENT_CALIBRATION_NEEDED 0x01 #define ACCELEROMETER_EVENT_SET_WAKEUP 0x02 +#define TEMPERATURE_BASE_DATA_SET (TEMPERATURE_SENSOR << 16) | 0x0001 +#define TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME (TEMPERATURE_SENSOR << 16) | 0x0001 + enum accelerometer_rotate_state { ROTATION_UNKNOWN = 0, ROTATION_LANDSCAPE_LEFT = 1, diff --git a/src/libsensord/sensor_temperature.h b/src/libsensord/sensor_temperature.h index 52b5730..2af4cc8 100755 --- a/src/libsensord/sensor_temperature.h +++ b/src/libsensord/sensor_temperature.h @@ -36,12 +36,8 @@ extern "C" * @{ */ -enum temperature_data_id { - TEMPERATURE_BASE_DATA_SET = (TEMPERATURE_SENSOR << 16) | 0x0001, -}; - enum temperature_event_type { - TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME = (TEMPERATURE_SENSOR << 16) | 0x0001, + TEMPERATURE_RAW_DATA_EVENT = (TEMPERATURE_SENSOR << 16) | 0x0001, }; /** diff --git a/src/temperature/temperature_sensor.cpp b/src/temperature/temperature_sensor.cpp index e9a154f..20d9955 100755 --- a/src/temperature/temperature_sensor.cpp +++ b/src/temperature/temperature_sensor.cpp @@ -30,7 +30,7 @@ temperature_sensor::temperature_sensor() { m_name = string(SENSOR_NAME); - register_supported_event(TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME); + register_supported_event(TEMPERATURE_RAW_DATA_EVENT); physical_sensor::set_poller(temperature_sensor::working, this); } @@ -85,9 +85,9 @@ bool temperature_sensor::process_event(void) AUTOLOCK(m_client_info_mutex); - if (get_client_cnt(TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME)) { + if (get_client_cnt(TEMPERATURE_RAW_DATA_EVENT)) { event.sensor_id = get_id(); - event.event_type = TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME; + event.event_type = TEMPERATURE_RAW_DATA_EVENT; raw_to_base(event.data); push(event); } @@ -129,7 +129,7 @@ int temperature_sensor::get_sensor_data(unsigned int type, sensor_data_t &data) if (ret < 0) return -1; - if (type == TEMPERATURE_BASE_DATA_SET) { + if (type == TEMPERATURE_RAW_DATA_EVENT) { raw_to_base(data); return 0; } diff --git a/test/src/auto_test.c b/test/src/auto_test.c index 31dd751..99a63c0 100644 --- a/test/src/auto_test.c +++ b/test/src/auto_test.c @@ -226,7 +226,7 @@ int main(int argc, char **argv) result = check_sensor_api(ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME, interval); fprintf(fp, "Rotation Vector - RAW_DATA_REPORT_ON_TIME - %d\n", result); - result = check_sensor_api(TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME, interval); + result = check_sensor_api(TEMPERATURE_RAW_DATA_EVENT, interval); fprintf(fp, "Temperature - RAW_DATA_REPORT_ON_TIME - %d\n", result); printf("Logs printed in ./auto_test.output\n"); diff --git a/test/src/tc-common.c b/test/src/tc-common.c index 53661c3..3aa57b6 100644 --- a/test/src/tc-common.c +++ b/test/src/tc-common.c @@ -83,7 +83,7 @@ unsigned int get_event_driven(sensor_type_t sensor_type, char str[]) break; case TEMPERATURE_SENSOR: if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) - return TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME; + return TEMPERATURE_RAW_DATA_EVENT; break; case PROXIMITY_SENSOR: if (strcmp(str, "EVENT_CHANGE_STATE") == 0) @@ -189,7 +189,7 @@ int main(int argc, char **argv) } else if (strcmp(argv[1], "temperature") == 0) { sensor_type = TEMPERATURE_SENSOR; - event = TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME; + event = TEMPERATURE_RAW_DATA_EVENT; } else if (strcmp(argv[1], "geomagnetic") == 0) { sensor_type = GEOMAGNETIC_SENSOR; -- 2.7.4 From 8edbb7a027637e2b11fd15e6717c844ac9ed47ae Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Tue, 24 Feb 2015 17:25:53 +0530 Subject: [PATCH 05/16] Shifting redundant event representations to sensor_deprecated.h file -Redundant event representations were removed for accelerometer,gyroscope,proximity,pressure and geomagnetic sensor. -These representations have been shifted to sensor_deprecated.h in case other packages outside sensord are using these representations. Change-Id: I7e05fcee9153351cae3a095d4966d67598a6b960 --- src/libsensord/sensor_deprecated.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/libsensord/sensor_deprecated.h b/src/libsensord/sensor_deprecated.h index 52a833e..7237789 100644 --- a/src/libsensord/sensor_deprecated.h +++ b/src/libsensord/sensor_deprecated.h @@ -38,8 +38,31 @@ extern "C" #define ACCELEROMETER_EVENT_CALIBRATION_NEEDED 0x01 #define ACCELEROMETER_EVENT_SET_WAKEUP 0x02 -#define TEMPERATURE_BASE_DATA_SET (TEMPERATURE_SENSOR << 16) | 0x0001 -#define TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME (TEMPERATURE_SENSOR << 16) | 0x0001 +#define TEMPERATURE_BASE_DATA_SET TEMPERATURE_RAW_DATA_EVENT +#define TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME TEMPERATURE_RAW_DATA_EVENT + +#define ACCELEROMETER_BASE_DATA_SET ACCELEROMETER_RAW_DATA_EVENT +#define ACCELEROMETER_EVENT_RAW_DATA_REPORT_ON_TIME ACCELEROMETER_RAW_DATA_EVENT +#define ACCELEROMETER_EVENT_UNPROCESSED_DATA_REPORT_ON_TIME ACCELEROMETER_UNPROCESSED_DATA_EVENT + +#define GYRO_BASE_DATA_SET GYROSCOPE_RAW_DATA_EVENT +#define GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME GYROSCOPE_RAW_DATA_EVENT +#define GYROSCOPE_EVENT_UNPROCESSED_DATA_REPORT_ON_TIME GYROSCOPE_UNPROCESSED_DATA_EVENT + +#define PROXIMITY_BASE_DATA_SET PROXIMITY_CHANGE_STATE_EVENT +#define PROXIMITY_DISTANCE_BASE_DATA_SET PROXIMITY_STATE_EVENT +#define PROXIMITY_EVENT_CHANGE_STATE PROXIMITY_CHANGE_STATE_EVENT +#define PROXIMITY_EVENT_STATE_REPORT_ON_TIME PROXIMITY_STATE_EVENT +#define PROXIMITY_EVENT_DISTANCE_DATA_REPORT_ON_TIME PROXIMITY_DISTANCE_DATA_EVENT + +#define PRESSURE_BASE_DATA_SET PRESSURE_RAW_DATA_EVENT +#define PRESSURE_EVENT_RAW_DATA_REPORT_ON_TIME PRESSURE_RAW_DATA_EVENT + +#define GEOMAGNETIC_BASE_DATA_SET GEOMAGNETIC_RAW_DATA_EVENT +#define GEOMAGNETIC_RAW_DATA_SET GEOMAGNETIC_RAW_DATA_EVENT +#define GEOMAGNETIC_EVENT_RAW_DATA_REPORT_ON_TIME GEOMAGNETIC_RAW_DATA_EVENT +#define GEOMAGNETIC_EVENT_CALIBRATION_NEEDED GEOMAGNETIC_CALIBRATION_NEEDED_EVENT +#define GEOMAGNETIC_EVENT_UNPROCESSED_DATA_REPORT_ON_TIME GEOMAGNETIC_UNPROCESSED_DATA_EVENT enum accelerometer_rotate_state { ROTATION_UNKNOWN = 0, -- 2.7.4 From c89a8100df2b209b8fac0f3613fc370b19ec43c9 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 26 Feb 2015 12:08:56 +0530 Subject: [PATCH 06/16] Fixing Geomagnetic RV test files and event representation - Fixing geomagnetic rv test file - Changing geomagnetic rv event name in package Change-Id: I4f8f7ca7da9b2f7745efadbffa076955f9bbd5df --- src/libsensord/client_common.cpp | 2 +- src/libsensord/sensor_geomagnetic_rv.h | 2 +- src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp | 6 +++--- src/server/command_worker.cpp | 2 +- test/src/auto_test.c | 3 +++ test/src/tc-common.c | 10 +++++----- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp index 2a67b15..2f2876b 100755 --- a/src/libsensord/client_common.cpp +++ b/src/libsensord/client_common.cpp @@ -62,7 +62,7 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, PRESSURE_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, TEMPERATURE_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), - FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), + FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_RV_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_DATA, LIGHT_BASE_DATA_SET, 0, 25), FILL_LOG_ELEMENT(LOG_ID_DATA, LIGHT_LUX_DATA_SET, 0, 25), diff --git a/src/libsensord/sensor_geomagnetic_rv.h b/src/libsensord/sensor_geomagnetic_rv.h index 3deaaa2..8343a42 100755 --- a/src/libsensord/sensor_geomagnetic_rv.h +++ b/src/libsensord/sensor_geomagnetic_rv.h @@ -37,7 +37,7 @@ extern "C" */ enum geomagnetic_rv_event_type { - GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME = (GEOMAGNETIC_RV_SENSOR << 16) | 0x0001, + GEOMAGNETIC_RV_RAW_DATA_EVENT = (GEOMAGNETIC_RV_SENSOR << 16) | 0x0001, }; /** diff --git a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp index 1fb050b..ab60019 100755 --- a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp +++ b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp @@ -71,7 +71,7 @@ geomagnetic_rv_sensor::geomagnetic_rv_sensor() cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance(); m_name = string(SENSOR_NAME); - register_supported_event(GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME); + register_supported_event(GEOMAGNETIC_RV_RAW_DATA_EVENT); m_enable_geomagnetic_rv = 0; if (!config.get(SENSOR_TYPE_GEOMAGNETIC_RV, ELEMENT_VENDOR, m_vendor)) { @@ -263,7 +263,7 @@ void geomagnetic_rv_sensor::synthesize(const sensor_event_t& event, vector quaternion_geo_rv; - if (event_type != GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME) + if (event_type != GEOMAGNETIC_RV_RAW_DATA_EVENT) return -1; m_accel_sensor->get_sensor_data(ACCELEROMETER_RAW_DATA_EVENT, accel_data); diff --git a/src/server/command_worker.cpp b/src/server/command_worker.cpp index 8b43d98..13e4d3b 100755 --- a/src/server/command_worker.cpp +++ b/src/server/command_worker.cpp @@ -858,7 +858,7 @@ void insert_priority_list(unsigned int event_type) priority_list.insert(GEOMAGNETIC_RAW_DATA_EVENT); } - if (event_type == GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME) { + if (event_type == GEOMAGNETIC_RV_RAW_DATA_EVENT) { priority_list.insert(ACCELEROMETER_RAW_DATA_EVENT); priority_list.insert(GEOMAGNETIC_RAW_DATA_EVENT); } diff --git a/test/src/auto_test.c b/test/src/auto_test.c index 99a63c0..dfe322f 100644 --- a/test/src/auto_test.c +++ b/test/src/auto_test.c @@ -226,6 +226,9 @@ int main(int argc, char **argv) result = check_sensor_api(ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME, interval); fprintf(fp, "Rotation Vector - RAW_DATA_REPORT_ON_TIME - %d\n", result); + result = check_sensor_api(GEOMAGNETIC_RV_RAW_DATA_EVENT, interval); + fprintf(fp, "Geomagnetic Rotation Vector - RAW_DATA_REPORT_ON_TIME - %d\n", result); + result = check_sensor_api(TEMPERATURE_RAW_DATA_EVENT, interval); fprintf(fp, "Temperature - RAW_DATA_REPORT_ON_TIME - %d\n", result); diff --git a/test/src/tc-common.c b/test/src/tc-common.c index 3aa57b6..edee1ba 100644 --- a/test/src/tc-common.c +++ b/test/src/tc-common.c @@ -44,7 +44,7 @@ void usage() printf("[gravity] "); printf("[linear_accel] "); printf("[rotation_vector] "); - printf("[gaming_rotation_vector] "); + printf("[geomagnetic_rv] "); printf("[light]\n"); printf("event:"); printf("[RAW_DATA_REPORT_ON_TIME]\n"); @@ -107,7 +107,7 @@ unsigned int get_event_driven(sensor_type_t sensor_type, char str[]) break; case GEOMAGNETIC_RV_SENSOR: if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) - return GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME; + return GEOMAGNETIC_RV_RAW_DATA_EVENT; break; default: return -1; @@ -153,7 +153,7 @@ void callback(sensor_t sensor, unsigned int event_type, sensor_data_t *data, voi printf("Rotation vector [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2], data->values[3]); break; case GEOMAGNETIC_RV_SENSOR: - printf("Geomagnetic rotation vector [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2], data->values[3]); + printf("Geomagnetic RV [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2], data->values[3]); break; default: return; @@ -211,9 +211,9 @@ int main(int argc, char **argv) sensor_type = ROTATION_VECTOR_SENSOR; event = ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME; } - else if (strcmp(argv[1], "gaming_rotation_vector") == 0) { + else if (strcmp(argv[1], "geomagnetic_rv") == 0) { sensor_type = GEOMAGNETIC_RV_SENSOR; - event = GEOMAGNETIC_RV_EVENT_RAW_DATA_REPORT_ON_TIME; + event = GEOMAGNETIC_RV_RAW_DATA_EVENT; } else if (strcmp(argv[1], "light") == 0) { sensor_type = LIGHT_SENSOR; -- 2.7.4 From 53cce6119b743b411e83849176a8c6014f68bfaf Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 11:50:05 +0530 Subject: [PATCH 07/16] Removing unused vconf dependencies in shared folder - removing vconf header file in csensor_event_dispatcher as it is not used - removing vconf dependency from make file Change-Id: Ia84bee39465876adcc8abb00b933d25e0155c956 --- src/shared/CMakeLists.txt | 2 +- src/shared/csensor_event_dispatcher.cpp | 1 - src/shared/csensor_event_dispatcher.h | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index f400944..2cadc1a 100755 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.6) project(sf_common CXX) INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(shared_pkgs REQUIRED vconf dlog libxml-2.0) +PKG_CHECK_MODULES(shared_pkgs REQUIRED dlog libxml-2.0) FOREACH(flag ${shared_pkgs_LDFLAGS}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") diff --git a/src/shared/csensor_event_dispatcher.cpp b/src/shared/csensor_event_dispatcher.cpp index 91fa307..6906ee2 100755 --- a/src/shared/csensor_event_dispatcher.cpp +++ b/src/shared/csensor_event_dispatcher.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include using std::thread; diff --git a/src/shared/csensor_event_dispatcher.h b/src/shared/csensor_event_dispatcher.h index 1eaa4f2..fe9eba1 100755 --- a/src/shared/csensor_event_dispatcher.h +++ b/src/shared/csensor_event_dispatcher.h @@ -25,7 +25,6 @@ #include #include #include -#include typedef unordered_map event_type_last_event_map; typedef list virtual_sensors; -- 2.7.4 From 84a6c2ac9b663d455ba7137f28031c80ae652c47 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 11:54:06 +0530 Subject: [PATCH 08/16] Cleaning CMake files for unused package dependencies - Removing all unused package dependencies in CMakelist files - Sometimes build hangs while searching for packages that are added in each CMake files. Change-Id: Iff099501d1e4a7c03c74a34ce8f800490bbdff57 --- src/rotation_vector/geomagnetic_rv/CMakeLists.txt | 3 --- src/sensor_fusion/CMakeLists.txt | 3 --- src/server/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/rotation_vector/geomagnetic_rv/CMakeLists.txt b/src/rotation_vector/geomagnetic_rv/CMakeLists.txt index 36430ee..6b44750 100755 --- a/src/rotation_vector/geomagnetic_rv/CMakeLists.txt +++ b/src/rotation_vector/geomagnetic_rv/CMakeLists.txt @@ -7,9 +7,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/src/libsensord) include_directories(${CMAKE_SOURCE_DIR}/src/sensor_fusion) -INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(geomagnetic_rv_pkgs REQUIRED vconf) - FOREACH(flag ${geomagnetic_rv_pkgs_LDFLAGS}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") ENDFOREACH(flag) diff --git a/src/sensor_fusion/CMakeLists.txt b/src/sensor_fusion/CMakeLists.txt index c38f410..627d6ec 100755 --- a/src/sensor_fusion/CMakeLists.txt +++ b/src/sensor_fusion/CMakeLists.txt @@ -8,9 +8,6 @@ SET(VERSION 1.0) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/src/libsensord) -include(FindPkgConfig) -pkg_check_modules(rpkgs REQUIRED vconf) - set(PROJECT_MAJOR_VERSION "0") set(PROJECT_MINOR_VERSION "0") set(PROJECT_RELEASE_VERSION "1") diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index a404c76..10f737d 100755 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.6) project(sensord CXX) INCLUDE(FindPkgConfig) -PKG_CHECK_MODULES(server_pkgs REQUIRED vconf glib-2.0 gio-2.0 dlog libsystemd-daemon) +PKG_CHECK_MODULES(server_pkgs REQUIRED glib-2.0 gio-2.0 dlog libsystemd-daemon) FOREACH(flag ${server_pkgs_LDFLAGS}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9329972..e81b9c0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,7 +6,7 @@ SET(EXEC_PREFIX "\${prefix}") SET(VERSION 1.0) INCLUDE(FindPkgConfig) -pkg_check_modules(pkgs REQUIRED glib-2.0 dlog) +pkg_check_modules(pkgs REQUIRED glib-2.0) add_definitions(${rpkgs_CFLAGS}) add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}") -- 2.7.4 From 89217de54d41d5f22cffd28f40f07738dfabcd0f Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 13:38:13 +0530 Subject: [PATCH 09/16] Adding gaming rotation vector class definition Adding new class gaming_rv which computes device orientation quaternion using accelerometer and gyroscope sensor inputs. Change-Id: If653b55bd1aabf3f47e6e1065bdeb93c82f0dbc2 --- src/rotation_vector/gaming_rv/gaming_rv_sensor.h | 74 ++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 src/rotation_vector/gaming_rv/gaming_rv_sensor.h diff --git a/src/rotation_vector/gaming_rv/gaming_rv_sensor.h b/src/rotation_vector/gaming_rv/gaming_rv_sensor.h new file mode 100755 index 0000000..c54d2b9 --- /dev/null +++ b/src/rotation_vector/gaming_rv/gaming_rv_sensor.h @@ -0,0 +1,74 @@ +/* + * sensord + * + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _GAMING_RV_SENSOR_H_ +#define _GAMING_RV_SENSOR_H_ + +#include +#include +#include + +class gaming_rv_sensor : public virtual_sensor { +public: + gaming_rv_sensor(); + virtual ~gaming_rv_sensor(); + + bool init(void); + + void synthesize(const sensor_event_t &event, vector &outs); + + bool add_interval(int client_id, unsigned int interval); + bool delete_interval(int client_id); + bool get_properties(sensor_properties_s &properties); + sensor_type_t get_type(void); + + int get_sensor_data(const unsigned int data_id, sensor_data_t &data); + +private: + sensor_base *m_accel_sensor; + sensor_base *m_gyro_sensor; + + sensor_data m_accel; + sensor_data m_gyro; + + cmutex m_value_mutex; + + orientation_filter m_orientation_filter; + + unsigned int m_enable_gaming_rv; + + int m_accuracy; + unsigned long long m_time; + unsigned int m_interval; + + string m_vendor; + string m_raw_data_unit; + int m_default_sampling_time; + float m_accel_static_bias[3]; + float m_gyro_static_bias[3]; + int m_accel_rotation_direction_compensation[3]; + int m_gyro_rotation_direction_compensation[3]; + float m_accel_scale; + float m_gyro_scale; + + bool on_start(void); + bool on_stop(void); +}; + +#endif /*_GAMING_RV_SENSOR_H_*/ -- 2.7.4 From 8042b5f823082d890f267e10fb5b242f5e261503 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 13:43:40 +0530 Subject: [PATCH 10/16] Adding implementation for gaming_rv class Adding file for implementation of gaming_rv class methods Change-Id: Ie6362ff80ab55d6c6283b8d9ecb06414bd7791a0 --- src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp | 337 +++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100755 src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp diff --git a/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp new file mode 100755 index 0000000..acfd003 --- /dev/null +++ b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp @@ -0,0 +1,337 @@ +/* + * sensord + * + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SENSOR_NAME "GAMING_RV_SENSOR" +#define SENSOR_TYPE_GAMING_RV "GAMING_ROTATION_VECTOR" + +#define ACCELEROMETER_ENABLED 0x01 +#define GYROSCOPE_ENABLED 0x02 +#define GAMING_RV_ENABLED 3 + +#define INITIAL_VALUE -1 + +#define MS_TO_US 1000 + +#define ELEMENT_NAME "NAME" +#define ELEMENT_VENDOR "VENDOR" +#define ELEMENT_RAW_DATA_UNIT "RAW_DATA_UNIT" +#define ELEMENT_DEFAULT_SAMPLING_TIME "DEFAULT_SAMPLING_TIME" +#define ELEMENT_ACCEL_STATIC_BIAS "ACCEL_STATIC_BIAS" +#define ELEMENT_GYRO_STATIC_BIAS "GYRO_STATIC_BIAS" +#define ELEMENT_ACCEL_ROTATION_DIRECTION_COMPENSATION "ACCEL_ROTATION_DIRECTION_COMPENSATION" +#define ELEMENT_GYRO_ROTATION_DIRECTION_COMPENSATION "GYRO_ROTATION_DIRECTION_COMPENSATION" +#define ELEMENT_ACCEL_SCALE "ACCEL_SCALE" +#define ELEMENT_GYRO_SCALE "GYRO_SCALE" + +void pre_process_data(sensor_data &data_out, const float *data_in, float *bias, int *sign, float scale) +{ + data_out.m_data.m_vec[0] = sign[0] * (data_in[0] - bias[0]) / scale; + data_out.m_data.m_vec[1] = sign[1] * (data_in[1] - bias[1]) / scale; + data_out.m_data.m_vec[2] = sign[2] * (data_in[2] - bias[2]) / scale; +} + +gaming_rv_sensor::gaming_rv_sensor() +: m_accel_sensor(NULL) +, m_gyro_sensor(NULL) +, m_accuracy(-1) +, m_time(0) +{ + cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance(); + + m_name = string(SENSOR_NAME); + register_supported_event(GAMING_RV_RAW_DATA_EVENT); + m_enable_gaming_rv = 0; + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_VENDOR, m_vendor)) { + ERR("[VENDOR] is empty\n"); + throw ENXIO; + } + + INFO("m_vendor = %s", m_vendor.c_str()); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_DEFAULT_SAMPLING_TIME, &m_default_sampling_time)) { + ERR("[DEFAULT_SAMPLING_TIME] is empty\n"); + throw ENXIO; + } + + INFO("m_default_sampling_time = %d", m_default_sampling_time); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_ACCEL_STATIC_BIAS, m_accel_static_bias, 3)) { + ERR("[ACCEL_STATIC_BIAS] is empty\n"); + throw ENXIO; + } + + INFO("m_accel_static_bias = (%f, %f, %f)", m_accel_static_bias[0], m_accel_static_bias[1], m_accel_static_bias[2]); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_GYRO_STATIC_BIAS, m_gyro_static_bias,3)) { + ERR("[GYRO_STATIC_BIAS] is empty\n"); + throw ENXIO; + } + + INFO("m_gyro_static_bias = (%f, %f, %f)", m_gyro_static_bias[0], m_gyro_static_bias[1], m_gyro_static_bias[2]); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_ACCEL_ROTATION_DIRECTION_COMPENSATION, m_accel_rotation_direction_compensation, 3)) { + ERR("[ACCEL_ROTATION_DIRECTION_COMPENSATION] is empty\n"); + throw ENXIO; + } + + INFO("m_accel_rotation_direction_compensation = (%d, %d, %d)", m_accel_rotation_direction_compensation[0], m_accel_rotation_direction_compensation[1], m_accel_rotation_direction_compensation[2]); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_GYRO_ROTATION_DIRECTION_COMPENSATION, m_gyro_rotation_direction_compensation, 3)) { + ERR("[GYRO_ROTATION_DIRECTION_COMPENSATION] is empty\n"); + throw ENXIO; + } + + INFO("m_gyro_rotation_direction_compensation = (%d, %d, %d)", m_gyro_rotation_direction_compensation[0], m_gyro_rotation_direction_compensation[1], m_gyro_rotation_direction_compensation[2]); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_ACCEL_SCALE, &m_accel_scale)) { + ERR("[ACCEL_SCALE] is empty\n"); + throw ENXIO; + } + + INFO("m_accel_scale = %f", m_accel_scale); + + if (!config.get(SENSOR_TYPE_GAMING_RV, ELEMENT_GYRO_SCALE, &m_gyro_scale)) { + ERR("[GYRO_SCALE] is empty\n"); + throw ENXIO; + } + + INFO("m_gyro_scale = %f", m_gyro_scale); + + m_interval = m_default_sampling_time * MS_TO_US; +} + +gaming_rv_sensor::~gaming_rv_sensor() +{ + INFO("gaming_rv_sensor is destroyed!\n"); +} + +bool gaming_rv_sensor::init() +{ + m_accel_sensor = sensor_plugin_loader::get_instance().get_sensor(ACCELEROMETER_SENSOR); + m_gyro_sensor = sensor_plugin_loader::get_instance().get_sensor(GYROSCOPE_SENSOR); + + if (!m_accel_sensor || !m_gyro_sensor) { + ERR("Failed to load sensors, accel: 0x%x, gyro: 0x%x", + m_accel_sensor, m_gyro_sensor); + return false; + } + + INFO("%s is created!\n", sensor_base::get_name()); + + return true; +} + +sensor_type_t gaming_rv_sensor::get_type(void) +{ + return GAMING_RV_SENSOR; +} + +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(); + + activate(); + return true; +} + +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(); + + deactivate(); + return true; +} + +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); + + return sensor_base::add_interval(client_id, interval, false); +} + +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); + + return sensor_base::delete_interval(client_id, false); +} + +void gaming_rv_sensor::synthesize(const sensor_event_t& event, vector &outs) +{ + const float MIN_DELIVERY_DIFF_FACTOR = 0.75f; + unsigned long long diff_time; + + sensor_event_t rv_event; + quaternion quaternion_gaming_rv; + + if (event.event_type == ACCELEROMETER_RAW_DATA_EVENT) { + diff_time = event.data.timestamp - m_time; + + if (m_time && (diff_time < m_interval * MIN_DELIVERY_DIFF_FACTOR)) + return; + + pre_process_data(m_accel, event.data.values, m_accel_static_bias, m_accel_rotation_direction_compensation, m_accel_scale); + + m_accel.m_time_stamp = event.data.timestamp; + + m_enable_gaming_rv |= ACCELEROMETER_ENABLED; + } + else if (event.event_type == GYROSCOPE_RAW_DATA_EVENT) { + diff_time = event.data.timestamp - m_time; + + if (m_time && (diff_time < m_interval * MIN_DELIVERY_DIFF_FACTOR)) + return; + + pre_process_data(m_gyro, event.data.values, m_gyro_static_bias, m_gyro_rotation_direction_compensation, m_gyro_scale); + + m_gyro.m_time_stamp = event.data.timestamp; + + m_enable_gaming_rv |= GYROSCOPE_ENABLED; + } + + if (m_enable_gaming_rv == GAMING_RV_ENABLED) { + m_enable_gaming_rv = 0; + + { + AUTOLOCK(m_fusion_mutex); + quaternion_gaming_rv = m_orientation_filter.get_gaming_quaternion(m_accel, m_gyro); + } + + m_time = get_timestamp(); + + rv_event.sensor_id = get_id(); + rv_event.event_type = GAMING_RV_RAW_DATA_EVENT; + rv_event.data.accuracy = SENSOR_ACCURACY_GOOD; + rv_event.data.timestamp = m_time; + rv_event.data.value_count = 4; + rv_event.data.values[0] = quaternion_gaming_rv.m_quat.m_vec[1]; + rv_event.data.values[1] = quaternion_gaming_rv.m_quat.m_vec[2]; + rv_event.data.values[2] = quaternion_gaming_rv.m_quat.m_vec[3]; + rv_event.data.values[3] = quaternion_gaming_rv.m_quat.m_vec[0]; + + push(rv_event); + } + + return; +} + +int gaming_rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &data) +{ + sensor_data accel; + sensor_data gyro; + + sensor_data_t accel_data; + sensor_data_t gyro_data; + + quaternion quaternion_gaming_rv; + + if (event_type != GAMING_RV_RAW_DATA_EVENT) + return -1; + + m_accel_sensor->get_sensor_data(ACCELEROMETER_RAW_DATA_EVENT, accel_data); + m_gyro_sensor->get_sensor_data(GYROSCOPE_RAW_DATA_EVENT, gyro_data); + + pre_process_data(accel, accel_data.values, m_accel_static_bias, m_accel_rotation_direction_compensation, m_accel_scale); + pre_process_data(gyro, gyro_data.values, m_gyro_static_bias, m_gyro_rotation_direction_compensation, m_gyro_scale); + accel.m_time_stamp = accel_data.timestamp; + gyro.m_time_stamp = gyro_data.timestamp; + + { + AUTOLOCK(m_fusion_mutex); + quaternion_gaming_rv = m_orientation_filter.get_gaming_quaternion(m_accel, m_gyro); + } + + data.accuracy = SENSOR_ACCURACY_GOOD; + data.timestamp = m_time; + data.value_count = 4; + data.values[0] = quaternion_gaming_rv.m_quat.m_vec[1]; + data.values[1] = quaternion_gaming_rv.m_quat.m_vec[2]; + data.values[2] = quaternion_gaming_rv.m_quat.m_vec[3]; + data.values[3] = quaternion_gaming_rv.m_quat.m_vec[0]; + + return 0; +} + +bool gaming_rv_sensor::get_properties(sensor_properties_s &properties) +{ + properties.vendor = m_vendor; + properties.name = SENSOR_NAME; + properties.min_range = -1; + properties.max_range = 1; + properties.resolution = 0.000001; + properties.fifo_count = 0; + properties.max_batch_count = 0; + properties.min_interval = 1; + + return true; +} + +extern "C" sensor_module* create(void) +{ + gaming_rv_sensor *sensor; + + try { + sensor = new(std::nothrow) gaming_rv_sensor; + } catch (int err) { + ERR("Failed to create module, err: %d, cause: %s", err, strerror(err)); + return NULL; + } + + sensor_module *module = new(std::nothrow) sensor_module; + retvm_if(!module || !sensor, NULL, "Failed to allocate memory"); + + module->sensors.push_back(sensor); + return module; +} -- 2.7.4 From ee136c05395d453996229dfc1ba88bde257c243d Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 14:01:41 +0530 Subject: [PATCH 11/16] Adding CMake files for adding gaming rotation vector Adding new CMakelist file and updating existing CMakelist file for rotation vector. Change-Id: Ic65bc47d2d375e5e2d64dfc3deb515b08fc7261c --- src/rotation_vector/CMakeLists.txt | 3 +++ src/rotation_vector/gaming_rv/CMakeLists.txt | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100755 src/rotation_vector/gaming_rv/CMakeLists.txt diff --git a/src/rotation_vector/CMakeLists.txt b/src/rotation_vector/CMakeLists.txt index 3142605..4be585a 100644 --- a/src/rotation_vector/CMakeLists.txt +++ b/src/rotation_vector/CMakeLists.txt @@ -3,4 +3,7 @@ add_subdirectory(rv) ENDIF() IF("${GEOMAGNETIC_RV}" STREQUAL "ON") add_subdirectory(geomagnetic_rv) +ENDIF() +IF("${GAMING_RV}" STREQUAL "ON") +add_subdirectory(gaming_rv) ENDIF() \ No newline at end of file diff --git a/src/rotation_vector/gaming_rv/CMakeLists.txt b/src/rotation_vector/gaming_rv/CMakeLists.txt new file mode 100755 index 0000000..a56dc73 --- /dev/null +++ b/src/rotation_vector/gaming_rv/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 2.6) +project(gaming_rv CXX) + +SET(SENSOR_NAME gaming_rv_sensor) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_SOURCE_DIR}/src/libsensord) +include_directories(${CMAKE_SOURCE_DIR}/src/sensor_fusion) + +FOREACH(flag ${gaming_rv_pkgs_LDFLAGS}) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") +ENDFOREACH(flag) + +FOREACH(flag ${gaming_rv_pkgs_CFLAGS}) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") +ENDFOREACH(flag) + +add_library(${SENSOR_NAME} SHARED + gaming_rv_sensor.cpp +) + +target_link_libraries(${SENSOR_NAME} ${gaming_rv_pkgs_LDFLAGS} "-lm") + +install(TARGETS ${SENSOR_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}/sensord) -- 2.7.4 From 04c07621dfdfc32d9ab724904b408d848e5651c9 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 14:16:14 +0530 Subject: [PATCH 12/16] Updating sensor API for Gaming RV virtual sensor Adding sensor API related changes for Gaming RV virtual sensor. Change-Id: If0e5dc62e1f122739b888c14e61ee3e8d66e9aca --- src/libsensord/client_common.cpp | 2 ++ src/libsensord/sensor_gaming_rv.h | 35 +++++++++++++++++++++++++++++ src/libsensord/sensor_internal.h | 1 + src/libsensord/sensor_internal_deprecated.h | 1 + src/shared/sensor_common.h | 1 + 5 files changed, 40 insertions(+) create mode 100755 src/libsensord/sensor_gaming_rv.h diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp index 2f2876b..361351b 100755 --- a/src/libsensord/client_common.cpp +++ b/src/libsensord/client_common.cpp @@ -42,6 +42,7 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, TEMPERATURE_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, ROTATION_VECTOR_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, GEOMAGNETIC_RV_SENSOR, 0, 1), + FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, GAMING_RV_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_CALIBRATION_NEEDED_EVENT, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_CHANGE_STATE_EVENT, 0,1), @@ -63,6 +64,7 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, TEMPERATURE_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, ROTATION_VECTOR_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_RV_RAW_DATA_EVENT, 0, 10), + FILL_LOG_ELEMENT(LOG_ID_EVENT, GAMING_RV_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_DATA, LIGHT_BASE_DATA_SET, 0, 25), FILL_LOG_ELEMENT(LOG_ID_DATA, LIGHT_LUX_DATA_SET, 0, 25), diff --git a/src/libsensord/sensor_gaming_rv.h b/src/libsensord/sensor_gaming_rv.h new file mode 100755 index 0000000..e290313 --- /dev/null +++ b/src/libsensord/sensor_gaming_rv.h @@ -0,0 +1,35 @@ + +#ifndef __SENSOR_GAMING_RV_H__ +#define __SENSOR_GAMING_RV_H__ + +//! Pre-defined events for the gaming rotation vector sensor +//! Sensor Plugin developer can add more event to their own headers + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @defgroup SENSOR_GEOMAGNETIC_RV Rotation Vector Sensor + * @ingroup SENSOR_FRAMEWORK + * + * These APIs are used to control the Gaming Rotation Vector sensor. + * @{ + */ + +enum gaming_rv_event_type { + GAMING_RV_RAW_DATA_EVENT = (GAMING_RV_SENSOR << 16) | 0x0001, +}; + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif +//! End of a file + diff --git a/src/libsensord/sensor_internal.h b/src/libsensord/sensor_internal.h index fcf11f7..4fcb859 100755 --- a/src/libsensord/sensor_internal.h +++ b/src/libsensord/sensor_internal.h @@ -52,6 +52,7 @@ extern "C" #include #include #include +#include #include diff --git a/src/libsensord/sensor_internal_deprecated.h b/src/libsensord/sensor_internal_deprecated.h index ee211d1..b7b06fe 100755 --- a/src/libsensord/sensor_internal_deprecated.h +++ b/src/libsensord/sensor_internal_deprecated.h @@ -50,6 +50,7 @@ extern "C" #include #include #include +#include #include #include diff --git a/src/shared/sensor_common.h b/src/shared/sensor_common.h index aae9081..48346ac 100755 --- a/src/shared/sensor_common.h +++ b/src/shared/sensor_common.h @@ -64,6 +64,7 @@ typedef enum { LINEAR_ACCEL_SENSOR, ROTATION_VECTOR_SENSOR, GEOMAGNETIC_RV_SENSOR, + GAMING_RV_SENSOR, ORIENTATION_SENSOR, PIR_SENSOR, PIR_LONG_SENSOR, -- 2.7.4 From d35b002e65ebcf230182b4055543191f0635ccb0 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 14:22:25 +0530 Subject: [PATCH 13/16] Updating XML configuration for Gaming RV virtual sensor Updating the Gaming rotation vector XML configuration file for emulator and RD-PQ device profiles. Change-Id: I6cb0095eda1708432bb2fd3c8285c426ee13eaf6 --- virtual_sensors.xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/virtual_sensors.xml b/virtual_sensors.xml index 411802c..cfb9f81 100755 --- a/virtual_sensors.xml +++ b/virtual_sensors.xml @@ -68,6 +68,18 @@ + + + + + + + + + + + + @@ -137,5 +149,17 @@ + + + + + + + + + + + + -- 2.7.4 From 690392eb48fdefc72d43b03794a6266c353e3946 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 26 Feb 2015 12:37:38 +0530 Subject: [PATCH 14/16] Updating test automation files to support Gaming RV Updating auto_test and tc-common test automation files to support Gaming RV virtual sensor Change-Id: Ib8466cbe6683a1bb2eba3ec602d7892f5b80ad35 --- test/src/auto_test.c | 3 +++ test/src/tc-common.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/test/src/auto_test.c b/test/src/auto_test.c index dfe322f..971b171 100644 --- a/test/src/auto_test.c +++ b/test/src/auto_test.c @@ -229,6 +229,9 @@ int main(int argc, char **argv) result = check_sensor_api(GEOMAGNETIC_RV_RAW_DATA_EVENT, interval); fprintf(fp, "Geomagnetic Rotation Vector - RAW_DATA_REPORT_ON_TIME - %d\n", result); + result = check_sensor_api(GAMING_RV_RAW_DATA_EVENT, interval); + fprintf(fp, "Gaming Rotation Vector - RAW_DATA_REPORT_ON_TIME - %d\n", result); + result = check_sensor_api(TEMPERATURE_RAW_DATA_EVENT, interval); fprintf(fp, "Temperature - RAW_DATA_REPORT_ON_TIME - %d\n", result); diff --git a/test/src/tc-common.c b/test/src/tc-common.c index edee1ba..2d1f263 100644 --- a/test/src/tc-common.c +++ b/test/src/tc-common.c @@ -45,6 +45,7 @@ void usage() printf("[linear_accel] "); printf("[rotation_vector] "); printf("[geomagnetic_rv] "); + printf("[gaming_rv] "); printf("[light]\n"); printf("event:"); printf("[RAW_DATA_REPORT_ON_TIME]\n"); @@ -109,6 +110,10 @@ unsigned int get_event_driven(sensor_type_t sensor_type, char str[]) if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) return GEOMAGNETIC_RV_RAW_DATA_EVENT; break; + case GAMING_RV_SENSOR: + if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) + return GAMING_RV_RAW_DATA_EVENT; + break; default: return -1; } @@ -155,6 +160,9 @@ void callback(sensor_t sensor, unsigned int event_type, sensor_data_t *data, voi case GEOMAGNETIC_RV_SENSOR: printf("Geomagnetic RV [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2], data->values[3]); break; + case GAMING_RV_SENSOR: + printf("Gaming RV [%lld] [%6.6f] [%6.6f] [%6.6f] [%6.6f]\n\n", data->timestamp, data->values[0], data->values[1], data->values[2], data->values[3]); + break; default: return; } @@ -215,6 +223,10 @@ int main(int argc, char **argv) sensor_type = GEOMAGNETIC_RV_SENSOR; event = GEOMAGNETIC_RV_RAW_DATA_EVENT; } + else if (strcmp(argv[1], "gaming_rv") == 0) { + sensor_type = GAMING_RV_SENSOR; + event = GAMING_RV_RAW_DATA_EVENT; + } else if (strcmp(argv[1], "light") == 0) { sensor_type = LIGHT_SENSOR; event = LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME; -- 2.7.4 From 7f2a4583918e16fb740193c8aa7b219efd432f77 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 15:22:49 +0530 Subject: [PATCH 15/16] Updating priority queue code for Gaming RV Enabling the priority queue support for input events of Gaming RV Change-Id: I722cf91986680de6d1505bc5b45d044aa23681b2 --- src/server/command_worker.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/server/command_worker.cpp b/src/server/command_worker.cpp index 13e4d3b..6c52743 100755 --- a/src/server/command_worker.cpp +++ b/src/server/command_worker.cpp @@ -862,4 +862,9 @@ void insert_priority_list(unsigned int event_type) priority_list.insert(ACCELEROMETER_RAW_DATA_EVENT); priority_list.insert(GEOMAGNETIC_RAW_DATA_EVENT); } + + if (event_type == GAMING_RV_RAW_DATA_EVENT) { + priority_list.insert(ACCELEROMETER_RAW_DATA_EVENT); + priority_list.insert(GYROSCOPE_RAW_DATA_EVENT); + } } -- 2.7.4 From ebc55ef04e747e823e4067daa3552df8474cf3e1 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 24 Feb 2015 15:30:20 +0530 Subject: [PATCH 16/16] Updating sensord spec files and CMakelist files for Gaming RV Adding build support for Gaming RV to spec file and CMakelist file for sensord repository Change-Id: I5ce0a9f129cbfcf25f52e878d4e7297942d098bb --- packaging/sensord.spec | 3 ++- src/CMakeLists.txt | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 987cb43..583da23 100755 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -29,6 +29,7 @@ BuildRequires: pkgconfig(capi-system-info) %define linear_accel_state ON %define rv_state ON %define geomagnetic_rv_state ON +%define gaming_rv_state ON %define build_test_suite OFF %description @@ -79,7 +80,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DACCEL=%{accel_state} \ -DGEO=%{geo_state} -DPRESSURE=%{pressure_state} -DTEMPERATURE=%{temperature_state} \ -DORIENTATION=%{orientation_state} -DGRAVITY=%{gravity_state} \ -DLINEAR_ACCEL=%{linear_accel_state} -DRV=%{rv_state} \ - -DGEOMAGNETIC_RV=%{geomagnetic_rv_state} \ + -DGEOMAGNETIC_RV=%{geomagnetic_rv_state} -DGAMING_RV=%{gaming_rv_state} \ -DTEST_SUITE=%{build_test_suite} \ -DLIBDIR=%{_libdir} -DINCLUDEDIR=%{_includedir} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 853ce97..3b0b245 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -41,6 +41,9 @@ ENDIF() IF("${GEOMAGNETIC_RV}" STREQUAL "ON") set(SENSOR_FUSION_ENABLE "1") ENDIF() +IF("${GAMING_RV}" STREQUAL "ON") +set(SENSOR_FUSION_ENABLE "1") +ENDIF() IF("${GRAVITY}" STREQUAL "ON") set(SENSOR_FUSION_ENABLE "1") set(ORIENTATION_ENABLE "1") -- 2.7.4