From c89a8100df2b209b8fac0f3613fc370b19ec43c9 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 26 Feb 2015 12:08:56 +0530 Subject: [PATCH 01/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 02/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 03/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 04/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 05/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 06/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 07/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 08/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 09/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 10/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 11/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 From f4513df8861c168a2b8124c56da839df83395749 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Wed, 25 Feb 2015 10:18:07 +0530 Subject: [PATCH 12/16] Replacing mul() with operator *() after rebase mul() method has been replaced with *() in one of the other commits. Rebasing according to the change. Change-Id: I1f332dbe3413f2b08e1107783c59cdca48f54c71 --- src/sensor_fusion/orientation_filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sensor_fusion/orientation_filter.cpp b/src/sensor_fusion/orientation_filter.cpp index 0b316ee..68f0431 100644 --- a/src/sensor_fusion/orientation_filter.cpp +++ b/src/sensor_fusion/orientation_filter.cpp @@ -304,7 +304,7 @@ inline void orientation_filter::time_update_gaming_rv() m_measure_mat.m_mat[2][2] = 1; if (is_initialized(m_state_old)) - m_state_new = transpose(mul(m_tran_mat, transpose(m_state_old))); + m_state_new = transpose(m_tran_mat * transpose(m_state_old)); m_pred_cov = (m_tran_mat * m_pred_cov * tran(m_tran_mat)) + m_driv_cov; -- 2.7.4 From e63090288ba1b678b99e455590dbad5131b4d506 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Wed, 25 Feb 2015 17:36:20 +0530 Subject: [PATCH 13/16] Adding different RD-PQ hardware virtual sensor xml configuration The sensor hardware behavior has been found to be different for 2 different variants of the RD-PQ hardware used for development. Adding the virtual sensor xml configuration for the 2nd RD-PQ hardware that is tested. Change-Id: Ic1c13b7a5da7cb9802d07c5401e04151d56a89e9 --- virtual_sensors.xml | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/virtual_sensors.xml b/virtual_sensors.xml index cfb9f81..42ea53d 100755 --- a/virtual_sensors.xml +++ b/virtual_sensors.xml @@ -81,12 +81,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.7.4 From e6e15c490afa0360438cfb2123af4939a5a3fb1c Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 26 Feb 2015 11:33:25 +0530 Subject: [PATCH 14/16] Updating configuration file for loading missing so files - Updating sensor_plugins.xml configuration file for loading missing geomagnetic rotation vector and gaming rotation vector plugins. Change-Id: I4bfec9344f30e2b13b0a9b908454e90cd7e517c2 --- sensor_plugins.xml.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sensor_plugins.xml.in b/sensor_plugins.xml.in index aca8a81..eb469c1 100755 --- a/sensor_plugins.xml.in +++ b/sensor_plugins.xml.in @@ -21,5 +21,7 @@ + + -- 2.7.4 From a6689f5545620ae9c050db2de30f432838fb9354 Mon Sep 17 00:00:00 2001 From: Ankur Date: Thu, 26 Feb 2015 17:30:27 +0530 Subject: [PATCH 15/16] Removing redundant auto_rotation events AUTO_ROTATION_BASE_DATA_SET and AUTO_ROTATION_EVENT_CHANGE_STATE were the same AUTO_ROTATION_BASE_DATA_SET has been removed. AUTO_ROTATION_BASE_DATA_SET was used for polling events and AUTO_ROTATION__EVENT_CHANGE_STATE was used for event driven Since both these represent the same auto_rotation sensor event, DATA_SET type has been removed. And AUTO_ROTATION_EVENT_CHANGE_STATE has been renamed to AUTO_ROTATION_CHANGE_STATE_EVENT to make it simpler. Change-Id: I8523af6c00dd2919bb6b9f0606c48d5df37ff0c9 --- src/auto_rotation/auto_rotation_sensor.cpp | 6 +++--- src/libsensord/client_common.cpp | 5 ++--- src/libsensord/sensor_auto_rotation.h | 6 +----- src/libsensord/sensor_deprecated.h | 3 +++ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/auto_rotation/auto_rotation_sensor.cpp b/src/auto_rotation/auto_rotation_sensor.cpp index cdf7609..381e861 100755 --- a/src/auto_rotation/auto_rotation_sensor.cpp +++ b/src/auto_rotation/auto_rotation_sensor.cpp @@ -49,7 +49,7 @@ auto_rotation_sensor::auto_rotation_sensor() { m_name = string(SENSOR_NAME); - register_supported_event(AUTO_ROTATION_EVENT_CHANGE_STATE); + register_supported_event(AUTO_ROTATION_CHANGE_STATE_EVENT); } auto_rotation_sensor::~auto_rotation_sensor() @@ -146,7 +146,7 @@ void auto_rotation_sensor::synthesize(const sensor_event_t& event, vector Date: Tue, 24 Feb 2015 19:02:25 +0530 Subject: [PATCH 16/16] Removing redundant Light sensor events LIGHT_LUX_DATA_SET and LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME were the same LIGHT_LUX_DATA_SET has been removed. LIGHT_LUX_DATA_SET was used for polling events and LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME was used for event driven Since both these represent the same light sensor event, DATA_SET type has been removed. And LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME has been renamed to LIGHT_LUX_DATA_EVENT to make it simpler. The change has been tested on rd-pq device for all sensord API and all API were found to be working. Change-Id: I44a761251a6fc9e78333f022b131c2562d65ccb9 --- src/libsensord/client_common.cpp | 14 ++++++-------- src/libsensord/sensor_deprecated.h | 6 ++++++ src/libsensord/sensor_light.h | 11 +++-------- src/light/light_sensor.cpp | 22 +++++++++++----------- test/src/auto_test.c | 2 +- test/src/tc-common.c | 4 ++-- 6 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp index 6e5bfe7..1b0cc59 100755 --- a/src/libsensord/client_common.cpp +++ b/src/libsensord/client_common.cpp @@ -46,7 +46,7 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_CALIBRATION_NEEDED_EVENT, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_CHANGE_STATE_EVENT, 0,1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_EVENT_CHANGE_LEVEL, 0, 1), + FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_CHANGE_LEVEL_EVENT, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_STATE_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_DISTANCE_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, CONTEXT_EVENT_REPORT, 0, 1), @@ -55,8 +55,8 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, GYROSCOPE_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_RAW_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, PRESSURE_RAW_DATA_EVENT, 0, 10), - FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME, 0, 10), - FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME, 0, 10), + FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_LEVEL_DATA_EVENT, 0, 10), + FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_LUX_DATA_EVENT, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GRAVITY_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), 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), @@ -66,8 +66,6 @@ log_element g_log_elements[] = { 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), FILL_LOG_ELEMENT(LOG_ID_DATA, CONTEXT_BASE_DATA_SET, 0, 25), 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), @@ -149,9 +147,9 @@ bool is_ontime_event(unsigned int event_type) case ACCELEROMETER_RAW_DATA_EVENT: case PROXIMITY_STATE_EVENT: case GYROSCOPE_RAW_DATA_EVENT: - case LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME: + case LIGHT_LEVEL_DATA_EVENT: case GEOMAGNETIC_RAW_DATA_EVENT: - case LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME: + case LIGHT_LUX_DATA_EVENT: case PROXIMITY_DISTANCE_DATA_EVENT: case GRAVITY_EVENT_RAW_DATA_REPORT_ON_TIME: case LINEAR_ACCEL_EVENT_RAW_DATA_REPORT_ON_TIME: @@ -173,7 +171,7 @@ bool is_single_state_event(unsigned int event_type) { switch (event_type) { case GEOMAGNETIC_CALIBRATION_NEEDED_EVENT: - case LIGHT_EVENT_CHANGE_LEVEL: + case LIGHT_CHANGE_LEVEL_EVENT: case PROXIMITY_CHANGE_STATE_EVENT: case AUTO_ROTATION_CHANGE_STATE_EVENT: return true; diff --git a/src/libsensord/sensor_deprecated.h b/src/libsensord/sensor_deprecated.h index da7fd94..5ebedfe 100644 --- a/src/libsensord/sensor_deprecated.h +++ b/src/libsensord/sensor_deprecated.h @@ -67,6 +67,12 @@ extern "C" #define AUTO_ROTATION_BASE_DATA_SET AUTO_ROTATION_CHANGE_STATE_EVENT #define AUTO_ROTATION_EVENT_CHANGE_STATE AUTO_ROTATION_CHANGE_STATE_EVENT +#define LIGHT_LUX_DATA_SET LIGHT_LUX_DATA_EVENT +#define LIGHT_BASE_DATA_SET LIGHT_LEVEL_DATA_EVENT +#define LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME LIGHT_LUX_DATA_EVENT +#define LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME LIGHT_LEVEL_DATA_EVENT +#define LIGHT_EVENT_CHANGE_LEVEL LIGHT_CHANGE_LEVEL_EVENT + enum accelerometer_rotate_state { ROTATION_UNKNOWN = 0, ROTATION_LANDSCAPE_LEFT = 1, diff --git a/src/libsensord/sensor_light.h b/src/libsensord/sensor_light.h index bd35fb3..1f476b6 100755 --- a/src/libsensord/sensor_light.h +++ b/src/libsensord/sensor_light.h @@ -36,15 +36,10 @@ extern "C" * @{ */ -enum light_data_id { - LIGHT_LUX_DATA_SET = (LIGHT_SENSOR << 16) | 0x0001, - LIGHT_BASE_DATA_SET = (LIGHT_SENSOR << 16) | 0x0002, -}; - enum light_event_type { - LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME = (LIGHT_SENSOR << 16) | 0x0001, - LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME = (LIGHT_SENSOR << 16) | 0x0002, - LIGHT_EVENT_CHANGE_LEVEL = (LIGHT_SENSOR << 16) | 0x0004, + LIGHT_LUX_DATA_EVENT = (LIGHT_SENSOR << 16) | 0x0001, + LIGHT_LEVEL_DATA_EVENT = (LIGHT_SENSOR << 16) | 0x0002, + LIGHT_CHANGE_LEVEL_EVENT = (LIGHT_SENSOR << 16) | 0x0004, }; enum light_property_id { diff --git a/src/light/light_sensor.cpp b/src/light/light_sensor.cpp index fbffb23..73e45cc 100755 --- a/src/light/light_sensor.cpp +++ b/src/light/light_sensor.cpp @@ -38,9 +38,9 @@ light_sensor::light_sensor() m_name = string(SENSOR_NAME); vector supported_events = { - LIGHT_EVENT_CHANGE_LEVEL, - LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME, - LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME, + LIGHT_CHANGE_LEVEL_EVENT, + LIGHT_LEVEL_DATA_EVENT, + LIGHT_LUX_DATA_EVENT, }; for_each(supported_events.begin(), supported_events.end(), @@ -92,13 +92,13 @@ bool light_sensor::process_event(void) AUTOLOCK(m_client_info_mutex); event.sensor_id = get_id(); - if (get_client_cnt(LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME)) { - event.event_type = LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME; + if (get_client_cnt(LIGHT_LUX_DATA_EVENT)) { + event.event_type = LIGHT_LUX_DATA_EVENT; push(event); } - if (get_client_cnt(LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME)) { - event.event_type = LIGHT_EVENT_LEVEL_DATA_REPORT_ON_TIME; + if (get_client_cnt(LIGHT_LEVEL_DATA_EVENT)) { + event.event_type = LIGHT_LEVEL_DATA_EVENT; raw_to_level(event.data); push(event); } @@ -106,8 +106,8 @@ bool light_sensor::process_event(void) if (m_level != level) { m_level = level; - if (get_client_cnt(LIGHT_EVENT_CHANGE_LEVEL)) { - event.event_type = LIGHT_EVENT_CHANGE_LEVEL; + if (get_client_cnt(LIGHT_CHANGE_LEVEL_EVENT)) { + event.event_type = LIGHT_CHANGE_LEVEL_EVENT; raw_to_level(event.data); push(event); } @@ -162,10 +162,10 @@ int light_sensor::get_sensor_data(unsigned int type, sensor_data_t &data) if (ret < 0) return -1; - if (type == LIGHT_LUX_DATA_SET) + if (type == LIGHT_LUX_DATA_EVENT) return 0; - if (type == LIGHT_BASE_DATA_SET) { + if (type == LIGHT_LEVEL_DATA_EVENT) { raw_to_level(data); return 0; } diff --git a/test/src/auto_test.c b/test/src/auto_test.c index 971b171..64857db 100644 --- a/test/src/auto_test.c +++ b/test/src/auto_test.c @@ -211,7 +211,7 @@ int main(int argc, char **argv) result = check_sensor_api(GYROSCOPE_RAW_DATA_EVENT, interval); fprintf(fp, "Gyroscope - RAW_DATA_REPORT_ON_TIME - %d\n", result); - result = check_sensor_api(LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME, interval); + result = check_sensor_api(LIGHT_LUX_DATA_EVENT, interval); fprintf(fp, "Light - RAW_DATA_REPORT_ON_TIME - %d\n", result); result = check_sensor_api(LINEAR_ACCEL_EVENT_RAW_DATA_REPORT_ON_TIME, interval); diff --git a/test/src/tc-common.c b/test/src/tc-common.c index 2d1f263..defded2 100644 --- a/test/src/tc-common.c +++ b/test/src/tc-common.c @@ -80,7 +80,7 @@ unsigned int get_event_driven(sensor_type_t sensor_type, char str[]) break; case LIGHT_SENSOR: if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) - return LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME; + return LIGHT_LUX_DATA_EVENT; break; case TEMPERATURE_SENSOR: if (strcmp(str, "RAW_DATA_REPORT_ON_TIME") == 0) @@ -229,7 +229,7 @@ int main(int argc, char **argv) } else if (strcmp(argv[1], "light") == 0) { sensor_type = LIGHT_SENSOR; - event = LIGHT_EVENT_LUX_DATA_REPORT_ON_TIME; + event = LIGHT_LUX_DATA_EVENT; } else if (strcmp(argv[1], "proximity") == 0) { sensor_type = PROXIMITY_SENSOR; -- 2.7.4