From 8f064fefbbd1c0959ea897655321de597c39b2b8 Mon Sep 17 00:00:00 2001
From: Ankur
Date: Thu, 10 Sep 2015 11:16:52 +0530
Subject: [PATCH 01/16] Removing compilation error for aarch64
signed-off-by:"Ankur Garg "
Change-Id: I3bd2c71f42ccb0e3a37c8c519562d25e8b339b2d
---
src/auto_rotation/auto_rotation_sensor.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/auto_rotation/auto_rotation_sensor.cpp b/src/auto_rotation/auto_rotation_sensor.cpp
index 1b1954b..9c0e367 100755
--- a/src/auto_rotation/auto_rotation_sensor.cpp
+++ b/src/auto_rotation/auto_rotation_sensor.cpp
@@ -145,7 +145,7 @@ bool auto_rotation_sensor::on_start(void)
m_alg->start();
m_accel_sensor->add_client(ACCELEROMETER_RAW_DATA_EVENT);
- m_accel_sensor->add_interval((int)this , (m_interval/MS_TO_US), true);
+ m_accel_sensor->add_interval((intptr_t)this , (m_interval/MS_TO_US), true);
m_accel_sensor->start();
return activate();
@@ -154,7 +154,7 @@ bool auto_rotation_sensor::on_start(void)
bool auto_rotation_sensor::on_stop(void)
{
m_accel_sensor->delete_client(ACCELEROMETER_RAW_DATA_EVENT);
- m_accel_sensor->delete_interval((int)this , true);
+ m_accel_sensor->delete_interval((intptr_t)this , true);
m_accel_sensor->stop();
return deactivate();
--
2.7.4
From c17186d6f0a3d28e735fe36bb91c5e5fd777cafc Mon Sep 17 00:00:00 2001
From: Ankur
Date: Thu, 10 Sep 2015 11:56:24 +0530
Subject: [PATCH 02/16] Correcting the polling function get_sensor_data error
for rotation_vector
signed-off-by:"Ankur Garg "
Change-Id: Ieed8021b878a8b6cd91e2de51dd4c0f1fffb44fe
---
src/rotation_vector/rv/rv_sensor.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/rotation_vector/rv/rv_sensor.cpp b/src/rotation_vector/rv/rv_sensor.cpp
index 5114cdc..bcf20e2 100755
--- a/src/rotation_vector/rv/rv_sensor.cpp
+++ b/src/rotation_vector/rv/rv_sensor.cpp
@@ -241,10 +241,10 @@ int rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &data)
data.accuracy = SENSOR_ACCURACY_GOOD;
data.timestamp = get_timestamp();
data.value_count = 4;
- data.values[0] = data.values[1];
- data.values[1] = data.values[2];
- data.values[2] = data.values[3];
- data.values[3] = data.values[0];
+ data.values[0] = fusion_data.values[1];
+ data.values[1] = fusion_data.values[2];
+ data.values[2] = fusion_data.values[3];
+ data.values[3] = fusion_data.values[0];
return 0;
}
--
2.7.4
From aa442a1afb5ce32d39451c23b15c7acb89a9559a Mon Sep 17 00:00:00 2001
From: Adarsh Shree Ram
Date: Mon, 7 Sep 2015 17:02:49 +0530
Subject: [PATCH 03/16] Adding test case for single process multi-threaded
client application
multi-threaded test case to test the performance of the sensors running in parallel for a specific time interval.
Change-Id: I2a47ef879a5bb6ebdbea85e164ce18341516b708
---
packaging/sensord.spec | 3 +-
test/CMakeLists.txt | 12 ++-
test/src/check-sensor.c | 26 ++---
test/src/check-sensor.h | 8 +-
...nce-test.c => multi-process-performance-test.c} | 7 +-
test/src/multi-thread-performance-test.c | 119 +++++++++++++++++++++
test/src/sensor-test.c | 10 +-
7 files changed, 164 insertions(+), 21 deletions(-)
rename test/src/{performance-test.c => multi-process-performance-test.c} (94%)
create mode 100644 test/src/multi-thread-performance-test.c
diff --git a/packaging/sensord.spec b/packaging/sensord.spec
index 040aeb0..1287566 100755
--- a/packaging/sensord.spec
+++ b/packaging/sensord.spec
@@ -147,7 +147,8 @@ systemctl daemon-reload
%defattr(-,root,root,-)
%{_bindir}/api-test
%{_bindir}/sensor-test
-%{_bindir}/performance-test
+%{_bindir}/multi-thread-performance-test
+%{_bindir}/multi-process-performance-test
%{_bindir}/fusion-data-collection
%license LICENSE.APLv2
%endif
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 81213f1..a59c341 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -27,20 +27,24 @@ link_directories(../src/libsensord/)
add_executable(api-test src/api-test.c)
add_executable(sensor-test src/sensor-test.c src/check-sensor.c)
-add_executable(performance-test src/performance-test.c src/check-sensor.c)
+add_executable(multi-process-performance-test src/multi-process-performance-test.c src/check-sensor.c)
add_executable(fusion-data-collection src/fusion-data-collection.c)
+add_executable(multi-thread-performance-test src/multi-thread-performance-test.c src/check-sensor.c)
SET_TARGET_PROPERTIES(api-test PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(sensor-test PROPERTIES LINKER_LANGUAGE C)
-SET_TARGET_PROPERTIES(performance-test PROPERTIES LINKER_LANGUAGE C)
+SET_TARGET_PROPERTIES(multi-process-performance-test PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(fusion-data-collection PROPERTIES LINKER_LANGUAGE C)
+SET_TARGET_PROPERTIES(multi-thread-performance-test PROPERTIES LINKER_LANGUAGE C)
target_link_libraries(api-test glib-2.0 dlog sensor)
target_link_libraries(sensor-test glib-2.0 dlog sensor)
-target_link_libraries(performance-test glib-2.0 dlog sensor)
+target_link_libraries(multi-process-performance-test glib-2.0 dlog sensor)
target_link_libraries(fusion-data-collection glib-2.0 dlog sensor)
+target_link_libraries(multi-thread-performance-test glib-2.0 dlog sensor)
INSTALL(TARGETS api-test DESTINATION /usr/bin/)
INSTALL(TARGETS sensor-test DESTINATION /usr/bin/)
-INSTALL(TARGETS performance-test DESTINATION /usr/bin/)
+INSTALL(TARGETS multi-process-performance-test DESTINATION /usr/bin/)
INSTALL(TARGETS fusion-data-collection DESTINATION /usr/bin/)
+INSTALL(TARGETS multi-thread-performance-test DESTINATION /usr/bin/)
diff --git a/test/src/check-sensor.c b/test/src/check-sensor.c
index bcaf5be..5fcff08 100644
--- a/test/src/check-sensor.c
+++ b/test/src/check-sensor.c
@@ -28,7 +28,7 @@
#include "check-sensor.h"
-static GMainLoop *mainloop;
+
void printpollinglogs(sensor_type_t type,sensor_data_t data)
{
@@ -237,51 +237,53 @@ void callback(sensor_t sensor, unsigned int event_type, sensor_data_t *data, voi
}
}
-int check_sensor(sensor_type_t sensor_type, unsigned int event, int interval)
+void *check_sensor(void *arg)
{
+ struct pthread_arguments * argu = (struct pthread_arguments *) arg;
+
+ GMainLoop *mainloop;
int handle, result, start_handle, stop_handle;
mainloop = g_main_loop_new(NULL, FALSE);
- sensor_t sensor = sensord_get_sensor(sensor_type);
+ sensor_t sensor = sensord_get_sensor(argu -> sensor_type);
handle = sensord_connect(sensor);
- result = sensord_register_event(handle, event, interval, 0, callback, NULL);
+ result = sensord_register_event(handle, argu->event, argu->interval, 0, callback, NULL);
if (result < 0) {
printf("Can't register sensor\n");
- return -1;
+ return NULL;
}
start_handle = sensord_start(handle, 0);
if (start_handle < 0) {
printf("Error\n\n\n\n");
- sensord_unregister_event(handle, event);
+ sensord_unregister_event(handle, argu->event);
sensord_disconnect(handle);
- return -1;
+ return NULL;
}
g_main_loop_run(mainloop);
g_main_loop_unref(mainloop);
- result = sensord_unregister_event(handle, event);
+ result = sensord_unregister_event(handle, argu->event);
if (result < 0) {
printf("Error\n\n");
- return -1;
+ return NULL;
}
stop_handle = sensord_stop(handle);
if (stop_handle < 0) {
printf("Error\n\n");
- return -1;
+ return NULL;
}
sensord_disconnect(handle);
-
- return 0;
+ return NULL;
}
int polling_sensor(sensor_type_t sensor_type, unsigned int event)
diff --git a/test/src/check-sensor.h b/test/src/check-sensor.h
index 86b407b..a53602a 100644
--- a/test/src/check-sensor.h
+++ b/test/src/check-sensor.h
@@ -23,8 +23,14 @@
int get_event(sensor_type_t sensor_type, char str[]);
void callback(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data);
-int check_sensor(sensor_type_t sensor_type, unsigned int event, int interval);
+void *check_sensor(void *arg);
void printpollinglogs(sensor_type_t type, sensor_data_t data);
int polling_sensor(sensor_type_t sensor_type, unsigned int event);
+struct pthread_arguments
+{
+ sensor_type_t sensor_type;
+ unsigned int event;
+ int interval;
+};
#endif
diff --git a/test/src/performance-test.c b/test/src/multi-process-performance-test.c
similarity index 94%
rename from test/src/performance-test.c
rename to test/src/multi-process-performance-test.c
index 207b6fc..82fc74f 100644
--- a/test/src/performance-test.c
+++ b/test/src/multi-process-performance-test.c
@@ -92,7 +92,12 @@ int main(int argc, char** argv)
if (i < MAX) {
// call the sensord test tc-common for a sensor.
int event = (sensor[i] << 16) | 0x0001;
- check_sensor(sensor[i], event, interval);
+ struct pthread_arguments arg;
+ arg.sensor_type = sensor[i];
+ arg.event = event;
+ arg.interval = interval;
+
+ check_sensor((void*)&arg);
}
else {
// Main Parent Child. Waits for TIMEOUT and then kills all child processes.
diff --git a/test/src/multi-thread-performance-test.c b/test/src/multi-thread-performance-test.c
new file mode 100644
index 0000000..009b1cf
--- /dev/null
+++ b/test/src/multi-thread-performance-test.c
@@ -0,0 +1,119 @@
+/*
+ * 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 "check-sensor.h"
+
+
+void usage()
+{
+ printf("Usage : ./multi-sensor (optional)\n\n");
+ printf("TIMEOUT:\n");
+ printf("time for which the parallel sensor test cases should run\n");
+
+ printf("interval:\n");
+ printf("The time interval should be entered based on the sampling frequency supported by accelerometer driver on the device in ms.\n");
+ printf("If no value for sensor is entered default value by the driver will be used.\n");
+ printf("arg[i].sensor_type: ");
+ printf("[accelerometer] ");
+ printf("[auto_rotation]\n");
+ printf("[gyroscope] ");
+ printf("[pressure] ");
+ printf("[temperature] ");
+ printf("[geomagnetic] ");
+ printf("[orientation] ");
+ printf("[tilt] ");
+ printf("[gravity] ");
+ printf("[linear_accel] ");
+ printf("[rotation_vector] ");
+ printf("[geomagnetic_rv] ");
+ printf("[gaming_rv] ");
+ printf("[ultraviolet] ");
+ printf("[light]\n");
+ printf("[uncal_gyro]");
+
+}
+
+int main(int argc, char **argv)
+{
+
+ int i = 0;
+ int interval = DEFAULT_EVENT_INTERVAL;
+ int TIMEOUT = 10; //in seconds for which all the sensor tests should run
+
+ if(argc < 2) {
+ usage();
+ return -1;
+ }
+ else if(argc == 2){
+ TIMEOUT = atoi(argv[1]);
+ if (TIMEOUT == 0) {
+ usage();
+ return -1;
+ }
+ }
+ else {
+ TIMEOUT = atoi(argv[1]);
+ interval = atoi(argv[2]);
+ if (TIMEOUT == 0 || interval == 0) {
+ usage();
+ return -1;
+ }
+ }
+
+
+ int MAX = 6, j = 0, k = 0;
+ struct pthread_arguments arg[MAX];
+ int t = 0;
+
+ arg[0].sensor_type = ACCELEROMETER_SENSOR;
+ arg[0].event = ACCELEROMETER_RAW_DATA_EVENT;
+ arg[1].sensor_type = GYROSCOPE_SENSOR;
+ arg[1].event = GYROSCOPE_RAW_DATA_EVENT;
+ arg[2].sensor_type = GEOMAGNETIC_RV_SENSOR;
+ arg[2].event = GEOMAGNETIC_RV_RAW_DATA_EVENT;
+ arg[3].sensor_type = PRESSURE_SENSOR;
+ arg[3].event = PRESSURE_RAW_DATA_EVENT;
+ arg[4].sensor_type = PROXIMITY_SENSOR;
+ arg[4].event = PROXIMITY_CHANGE_STATE_EVENT;
+ arg[5].sensor_type = LIGHT_SENSOR;
+ arg[5].event = LIGHT_LUX_DATA_EVENT;
+
+ for(t = 0; t < MAX; t++)
+ {
+ arg[t].interval = interval;
+ }
+
+ pthread_t thread_id[MAX];
+
+ for(j = 0; j < MAX; j++)
+ {
+ pthread_create(&thread_id[j], NULL, check_sensor, (void*)&arg[j]);
+ }
+
+ sleep(TIMEOUT);
+ return 0;
+}
diff --git a/test/src/sensor-test.c b/test/src/sensor-test.c
index 610bd0b..d9ddcff 100644
--- a/test/src/sensor-test.c
+++ b/test/src/sensor-test.c
@@ -73,7 +73,7 @@ int main(int argc, char **argv)
if (argc < 2 || argc > 5) {
printf("Wrong number of arguments\n");
usage();
- return 0;
+ return -1;
}
if (strcmp(argv[1], "accelerometer") == 0) {
@@ -209,6 +209,12 @@ int main(int argc, char **argv)
return -1;
}
}
- return check_sensor(sensor_type, event, interval);
+ struct pthread_arguments arg;
+ arg.sensor_type = sensor_type;
+ arg.event = event;
+ arg.interval = interval;
+
+ return check_sensor((void*)&arg);
+
}
}
--
2.7.4
From 2f8549c5a390bb071e3b3fa9a9cceb6fc1429bfc Mon Sep 17 00:00:00 2001
From: Mu-Woong
Date: Thu, 15 Oct 2015 14:38:12 +0900
Subject: [PATCH 04/16] Replace Security-server with Cynara
Change-Id: If00a9d7d3d87a2f7b01c33e8d2b0986a69a19e82
Signed-off-by: Mu-Woong
---
packaging/sensord.spec | 3 ++
src/server/CMakeLists.txt | 2 +-
src/server/permission_checker.cpp | 89 +++++++++++++++++++++++----------------
src/server/permission_checker.h | 18 +++-----
4 files changed, 62 insertions(+), 50 deletions(-)
diff --git a/packaging/sensord.spec b/packaging/sensord.spec
index 1287566..d1a34e3 100755
--- a/packaging/sensord.spec
+++ b/packaging/sensord.spec
@@ -16,6 +16,9 @@ BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(libsystemd-daemon)
BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(cynara-creds-socket)
+BuildRequires: pkgconfig(cynara-client)
+BuildRequires: pkgconfig(cynara-session)
%define accel_state ON
%define auto_rotation_state ON
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index 10f737d..bb7a221 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 glib-2.0 gio-2.0 dlog libsystemd-daemon)
+PKG_CHECK_MODULES(server_pkgs REQUIRED glib-2.0 gio-2.0 dlog libsystemd-daemon cynara-client cynara-creds-socket cynara-session)
FOREACH(flag ${server_pkgs_LDFLAGS})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
diff --git a/src/server/permission_checker.cpp b/src/server/permission_checker.cpp
index ad05b02..f4fff18 100755
--- a/src/server/permission_checker.cpp
+++ b/src/server/permission_checker.cpp
@@ -17,27 +17,57 @@
*
*/
+#include
+#include
+#include
#include
#include
#include
#include
#include
-#include
-#define SECURITY_LIB "/usr/lib/libsecurity-server-client.so.1"
+static cynara *cynara_env = NULL;
+
+static bool check_privilege_by_sockfd(int sock_fd, const char *priv)
+{
+ retvm_if(cynara_env == NULL, false, "Cynara not initialized");
+
+ int ret;
+ int pid = -1;
+ char *client = NULL;
+ char *session = NULL;
+ char *user = NULL;
+
+ retvm_if(cynara_creds_socket_get_pid(sock_fd, &pid) != CYNARA_API_SUCCESS, false, "Getting PID failed");
+
+ if (cynara_creds_socket_get_client(sock_fd, CLIENT_METHOD_DEFAULT, &client) != CYNARA_API_SUCCESS ||
+ cynara_creds_socket_get_user(sock_fd, USER_METHOD_DEFAULT, &user) != CYNARA_API_SUCCESS ||
+ (session = cynara_session_from_pid(pid)) == NULL) {
+ ERR("Getting client info failed");
+ free(client);
+ free(user);
+ free(session);
+ return false;
+ }
+
+ ret = cynara_check(cynara_env, client, session, user, priv);
+
+ free(client);
+ free(session);
+ free(user);
+
+ return (ret == CYNARA_API_ACCESS_ALLOWED);
+}
permission_checker::permission_checker()
-: m_security_server_check_privilege_by_sockfd(NULL)
-, m_security_handle(NULL)
-, m_permission_set(0)
+: m_permission_set(0)
{
init();
}
permission_checker::~permission_checker()
{
- if (m_security_handle)
- dlclose(m_security_handle);
+ deinit();
}
permission_checker& permission_checker::get_instance()
@@ -46,33 +76,10 @@ permission_checker& permission_checker::get_instance()
return inst;
}
-bool permission_checker::init_security_lib(void)
-{
- m_security_handle = dlopen(SECURITY_LIB, RTLD_LAZY);
-
- if (!m_security_handle) {
- ERR("dlopen(%s) error, cause: %s", SECURITY_LIB, dlerror());
- return false;
- }
-
- m_security_server_check_privilege_by_sockfd =
- (security_server_check_privilege_by_sockfd_t) dlsym(m_security_handle, "security_server_check_privilege_by_sockfd");
-
- if (!m_security_server_check_privilege_by_sockfd) {
- ERR("Failed to load symbol");
- dlclose(m_security_handle);
- m_security_handle = NULL;
- return false;
- }
-
- return true;
-
-}
-
void permission_checker::init()
{
- m_permission_infos.push_back(std::make_shared (SENSOR_PERMISSION_STANDARD, false, "", ""));
- m_permission_infos.push_back(std::make_shared (SENSOR_PERMISSION_BIO, true, "sensord::bio", "rw"));
+ m_permission_infos.push_back(std::make_shared (SENSOR_PERMISSION_STANDARD, false, ""));
+ m_permission_infos.push_back(std::make_shared (SENSOR_PERMISSION_BIO, true, "http://tizen.org/privilege/healthinfo"));
vector sensors;
sensors = sensor_plugin_loader::get_instance().get_sensors(ALL_SENSOR);
@@ -82,8 +89,18 @@ void permission_checker::init()
INFO("Permission Set = %d", m_permission_set);
- if (!init_security_lib())
- ERR("Failed to init security lib: %s", SECURITY_LIB);
+ if (cynara_initialize(&cynara_env, NULL) != CYNARA_API_SUCCESS) {
+ cynara_env = NULL;
+ ERR("Cynara initialization failed");
+ }
+}
+
+void permission_checker::deinit()
+{
+ if (cynara_env)
+ cynara_finish(cynara_env);
+
+ cynara_env = NULL;
}
int permission_checker::get_permission(int sock_fd)
@@ -93,8 +110,8 @@ int permission_checker::get_permission(int sock_fd)
for (unsigned int i = 0; i < m_permission_infos.size(); ++i) {
if (!m_permission_infos[i]->need_to_check) {
permission |= m_permission_infos[i]->permission;
- } else if ((m_permission_set & m_permission_infos[i]->permission) && m_security_server_check_privilege_by_sockfd) {
- if (m_security_server_check_privilege_by_sockfd(sock_fd, m_permission_infos[i]->name.c_str(), m_permission_infos[i]->access_right.c_str()) == 1) {
+ } else if (m_permission_set & m_permission_infos[i]->permission) {
+ if (check_privilege_by_sockfd(sock_fd, m_permission_infos[i]->privilege.c_str())) {
permission |= m_permission_infos[i]->permission;
}
}
diff --git a/src/server/permission_checker.h b/src/server/permission_checker.h
index ad94708..8acc6ac 100755
--- a/src/server/permission_checker.h
+++ b/src/server/permission_checker.h
@@ -28,38 +28,30 @@ class permission_checker {
private:
class permission_info {
public:
- permission_info(int _permission, bool _need_to_check, std::string _name, std::string _access_right)
+ permission_info(int _permission, bool _need_to_check, std::string _priv)
: permission(_permission)
, need_to_check(_need_to_check)
- , name(_name)
- , access_right(_access_right)
+ , privilege(_priv)
{
}
int permission;
bool need_to_check;
- std::string name;
- std::string access_right;
+ std::string privilege;
};
typedef std::vector> permission_info_vector;
- typedef int (*security_server_check_privilege_by_sockfd_t)(int sockfd,
- const char *object,
- const char *access_rights);
-
permission_checker();
~permission_checker();
permission_checker(permission_checker const&) {};
permission_checker& operator=(permission_checker const&);
- bool init_security_lib(void);
void init();
-
- security_server_check_privilege_by_sockfd_t m_security_server_check_privilege_by_sockfd;
- void *m_security_handle;
+ void deinit();
permission_info_vector m_permission_infos;
int m_permission_set;
+
public:
static permission_checker& get_instance();
--
2.7.4
From c9d34f004ecc08816e99259e4b0948497e3cda2e Mon Sep 17 00:00:00 2001
From: "Hongkuk, Son"
Date: Sun, 18 Oct 2015 14:06:03 +0900
Subject: [PATCH 05/16] sensord: sync with SPIN tizen_2.4
Signed-off-by: Hongkuk, Son
Change-Id: I6c2150a15109a0ab80c3e642828a2786f137690f
---
src/accel/accel_sensor.cpp | 10 +-
src/accel/accel_sensor.h | 6 +-
src/accel/accel_sensor_hal.cpp | 5 +-
src/accel/accel_sensor_hal.h | 19 ++-
src/auto_rotation/auto_rotation_sensor.cpp | 8 +-
src/auto_rotation/auto_rotation_sensor.h | 11 +-
src/bio_led_red/bio_led_red_sensor.cpp | 10 +-
src/bio_led_red/bio_led_red_sensor.h | 4 +-
src/bio_led_red/bio_led_red_sensor_hal.cpp | 5 +-
src/bio_led_red/bio_led_red_sensor_hal.h | 19 ++-
src/fusion/fusion_sensor.cpp | 9 +-
src/fusion/fusion_sensor.h | 8 +-
src/fusion/hardware_fusion_sensor.html | 4 +-
src/geo/geo_sensor.cpp | 13 +-
src/geo/geo_sensor.h | 4 +-
src/geo/geo_sensor_hal.cpp | 6 +-
src/geo/geo_sensor_hal.h | 19 ++-
src/gravity/gravity_sensor.cpp | 11 +-
src/gravity/gravity_sensor.h | 12 +-
src/gyro/gyro_sensor.cpp | 11 +-
src/gyro/gyro_sensor.h | 4 +-
src/gyro/gyro_sensor_hal.cpp | 5 +-
src/gyro/gyro_sensor_hal.h | 19 ++-
src/libsensord/client.cpp | 96 ++++++++++-----
src/libsensord/client_common.cpp | 2 -
src/libsensord/command_channel.cpp | 36 +++---
src/libsensord/command_channel.h | 7 +-
src/libsensord/creg_event_info.h | 2 +
src/libsensord/csensor_event_listener.cpp | 61 +++++----
src/libsensord/csensor_event_listener.h | 35 ++----
src/libsensord/csensor_handle_info.cpp | 32 +++--
src/libsensord/csensor_handle_info.h | 11 +-
src/libsensord/poller.h | 4 +-
src/libsensord/sensor_info_manager.cpp | 2 +
src/libsensord/sensor_info_manager.h | 12 +-
src/libsensord/sensor_internal.h | 7 +-
src/libsensord/sensor_proxi.h | 2 +-
src/light/light_sensor.cpp | 12 +-
src/light/light_sensor.h | 5 +-
src/light/light_sensor_hal.cpp | 5 +-
src/light/light_sensor_hal.h | 19 ++-
src/linear_accel/linear_accel_sensor.cpp | 13 +-
src/linear_accel/linear_accel_sensor.h | 12 +-
src/orientation/orientation_sensor.cpp | 11 +-
src/orientation/orientation_sensor.h | 10 +-
src/pressure/pressure_sensor.cpp | 10 +-
src/pressure/pressure_sensor.h | 4 +-
src/pressure/pressure_sensor_hal.cpp | 5 +-
src/pressure/pressure_sensor_hal.h | 19 ++-
src/proxi/proxi_sensor.cpp | 11 +-
src/proxi/proxi_sensor.h | 4 +-
src/proxi/proxi_sensor_hal.cpp | 5 +-
src/proxi/proxi_sensor_hal.h | 17 ++-
src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp | 11 +-
src/rotation_vector/gaming_rv/gaming_rv_sensor.h | 10 +-
.../geomagnetic_rv/geomagnetic_rv_sensor.cpp | 11 +-
.../geomagnetic_rv/geomagnetic_rv_sensor.h | 10 +-
src/rotation_vector/rv/rv_sensor.cpp | 11 +-
src/rotation_vector/rv/rv_sensor.h | 10 +-
src/rotation_vector/rv_raw/rv_raw_sensor.cpp | 11 +-
src/rotation_vector/rv_raw/rv_raw_sensor.h | 4 +-
src/rotation_vector/rv_raw/rv_raw_sensor_hal.cpp | 5 +-
src/rotation_vector/rv_raw/rv_raw_sensor_hal.h | 19 ++-
src/server/command_worker.cpp | 137 ++++++++++++---------
src/server/command_worker.h | 11 +-
src/server/main.cpp | 5 +-
src/server/permission_checker.cpp | 2 +-
src/shared/CMakeLists.txt | 2 +
src/shared/batch_info_list.cpp | 90 ++++++++++++++
src/shared/batch_info_list.h | 45 +++++++
src/shared/cclient_info_manager.cpp | 37 +++---
src/shared/cclient_info_manager.h | 12 +-
src/shared/cclient_sensor_record.cpp | 48 ++++----
src/shared/cclient_sensor_record.h | 13 +-
src/shared/cconfig.cpp | 3 +
src/shared/cconfig.h | 8 +-
src/shared/cinterval_info_list.h | 5 +-
src/shared/common.cpp | 17 +++
src/shared/csensor_config.cpp | 3 +
src/shared/csensor_config.h | 24 ++--
src/shared/csensor_event_dispatcher.cpp | 3 +
src/shared/csensor_event_dispatcher.h | 6 +-
src/shared/csensor_event_queue.cpp | 20 +--
src/shared/csensor_event_queue.h | 37 +++---
src/shared/csensor_usage.cpp | 1 +
src/shared/csensor_usage.h | 4 +-
src/shared/csocket.cpp | 10 +-
src/shared/csocket.h | 8 +-
src/shared/cvirtual_sensor_config.h | 24 ++--
src/shared/iio_common.h | 8 +-
src/shared/physical_sensor.cpp | 16 ++-
src/shared/physical_sensor.h | 6 +-
src/shared/sensor_base.cpp | 58 ++++++---
src/shared/sensor_base.h | 38 +++---
src/shared/sensor_hal.cpp | 8 +-
src/shared/sensor_hal.h | 78 ++++++++----
src/shared/sensor_info.cpp | 5 +
src/shared/sensor_info.h | 23 ++--
src/shared/sensor_plugin_loader.cpp | 81 +++++-------
src/shared/sensor_plugin_loader.h | 32 ++---
src/shared/sf_common.h | 21 ++--
src/shared/virtual_sensor.h | 2 +-
src/shared/worker_thread.h | 13 +-
src/temperature/temperature_sensor.cpp | 11 +-
src/temperature/temperature_sensor.h | 4 +-
src/temperature/temperature_sensor_hal.cpp | 6 +-
src/temperature/temperature_sensor_hal.h | 19 ++-
src/tilt/tilt_sensor.cpp | 9 +-
src/tilt/tilt_sensor.h | 11 +-
src/ultraviolet/ultraviolet_sensor.cpp | 10 +-
src/ultraviolet/ultraviolet_sensor.h | 4 +-
src/ultraviolet/ultraviolet_sensor_hal.cpp | 5 +-
src/ultraviolet/ultraviolet_sensor_hal.h | 19 ++-
src/uncal_gyro/uncal_gyro_sensor.cpp | 11 +-
src/uncal_gyro/uncal_gyro_sensor.h | 8 +-
systemd/sensord.socket | 2 +-
test/src/api-test.c | 20 +++
test/src/check-sensor.c | 2 +
test/src/fusion-data-collection.c | 2 +-
test/src/multi-process-performance-test.c | 3 +-
test/src/sensor-test.c | 1 +
121 files changed, 1095 insertions(+), 811 deletions(-)
mode change 100644 => 100755 src/fusion/hardware_fusion_sensor.html
mode change 100755 => 100644 src/libsensord/client.cpp
mode change 100755 => 100644 src/libsensord/command_channel.cpp
mode change 100755 => 100644 src/libsensord/command_channel.h
mode change 100755 => 100644 src/libsensord/creg_event_info.h
mode change 100755 => 100644 src/libsensord/csensor_event_listener.cpp
mode change 100755 => 100644 src/libsensord/csensor_event_listener.h
mode change 100755 => 100644 src/libsensord/csensor_handle_info.cpp
mode change 100755 => 100644 src/libsensord/csensor_handle_info.h
mode change 100755 => 100644 src/libsensord/sensor_internal.h
mode change 100755 => 100644 src/server/command_worker.cpp
mode change 100755 => 100644 src/server/command_worker.h
mode change 100755 => 100644 src/shared/CMakeLists.txt
create mode 100644 src/shared/batch_info_list.cpp
create mode 100644 src/shared/batch_info_list.h
mode change 100755 => 100644 src/shared/cclient_info_manager.cpp
mode change 100755 => 100644 src/shared/cclient_info_manager.h
mode change 100755 => 100644 src/shared/cclient_sensor_record.cpp
mode change 100755 => 100644 src/shared/cclient_sensor_record.h
mode change 100755 => 100644 src/shared/common.cpp
mode change 100755 => 100644 src/shared/csensor_event_queue.cpp
mode change 100755 => 100644 src/shared/csensor_event_queue.h
mode change 100755 => 100644 src/shared/csensor_usage.cpp
mode change 100755 => 100644 src/shared/csensor_usage.h
mode change 100755 => 100644 src/shared/csocket.cpp
mode change 100755 => 100644 src/shared/csocket.h
mode change 100755 => 100644 src/shared/physical_sensor.cpp
mode change 100755 => 100644 src/shared/physical_sensor.h
mode change 100755 => 100644 src/shared/sf_common.h
mode change 100644 => 100755 src/uncal_gyro/uncal_gyro_sensor.cpp
mode change 100644 => 100755 src/uncal_gyro/uncal_gyro_sensor.h
mode change 100644 => 100755 systemd/sensord.socket
mode change 100644 => 100755 test/src/api-test.c
mode change 100644 => 100755 test/src/check-sensor.c
mode change 100644 => 100755 test/src/fusion-data-collection.c
mode change 100644 => 100755 test/src/multi-process-performance-test.c
mode change 100644 => 100755 test/src/sensor-test.c
diff --git a/src/accel/accel_sensor.cpp b/src/accel/accel_sensor.cpp
index 1dc28ff..0db4c12 100755
--- a/src/accel/accel_sensor.cpp
+++ b/src/accel/accel_sensor.cpp
@@ -26,6 +26,8 @@
using std::bind1st;
using std::mem_fun;
+using std::string;
+using std::vector;
#define GRAVITY 9.80665
#define G_TO_MG 1000
@@ -59,7 +61,7 @@ accel_sensor::~accel_sensor()
bool accel_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(ACCELEROMETER_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_ACCELEROMETER);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -81,9 +83,9 @@ bool accel_sensor::init()
return true;
}
-sensor_type_t accel_sensor::get_type(void)
+void accel_sensor::get_types(vector &types)
{
- return ACCELEROMETER_SENSOR;
+ types.push_back(ACCELEROMETER_SENSOR);
}
bool accel_sensor::working(void *inst)
@@ -140,7 +142,7 @@ bool accel_sensor::on_stop(void)
return stop_poll();
}
-bool accel_sensor::get_properties(sensor_properties_s &properties)
+bool accel_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/accel/accel_sensor.h b/src/accel/accel_sensor.h
index fec8d69..a873538 100755
--- a/src/accel/accel_sensor.h
+++ b/src/accel/accel_sensor.h
@@ -31,12 +31,13 @@ public:
virtual ~accel_sensor();
bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
virtual int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+
private:
sensor_hal *m_sensor_hal;
cmutex m_value_mutex;
@@ -47,7 +48,6 @@ private:
virtual bool on_start(void);
virtual bool on_stop(void);
-
void raw_to_base(sensor_data_t &data);
bool process_event(void);
};
diff --git a/src/accel/accel_sensor_hal.cpp b/src/accel/accel_sensor_hal.cpp
index 3f4bfba..ac709a5 100755
--- a/src/accel/accel_sensor_hal.cpp
+++ b/src/accel/accel_sensor_hal.cpp
@@ -24,6 +24,7 @@
#include
using std::ifstream;
+using std::string;
#define GRAVITY 9.80665
#define G_TO_MG 1000
@@ -157,9 +158,9 @@ string accel_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t accel_sensor_hal::get_type(void)
+sensor_hal_type_t accel_sensor_hal::get_type(void)
{
- return ACCELEROMETER_SENSOR;
+ return SENSOR_HAL_TYPE_ACCELEROMETER;
}
bool accel_sensor_hal::enable(void)
diff --git a/src/accel/accel_sensor_hal.h b/src/accel/accel_sensor_hal.h
index 5782368..f16d94c 100755
--- a/src/accel/accel_sensor_hal.h
+++ b/src/accel/accel_sensor_hal.h
@@ -21,18 +21,15 @@
#define _ACCEL_SENSOR_HAL_H_
#include
-#include
#include
-using std::string;
-
class accel_sensor_hal : public sensor_hal
{
public:
accel_sensor_hal();
virtual ~accel_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long val);
@@ -48,17 +45,17 @@ private:
unsigned long m_polling_interval;
unsigned long long m_fired_time;
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
int m_resolution;
float m_raw_data_unit;
int m_method;
- string m_data_node;
- string m_enable_node;
- string m_interval_node;
+ std::string m_data_node;
+ std::string m_enable_node;
+ std::string m_interval_node;
std::function update_value;
diff --git a/src/auto_rotation/auto_rotation_sensor.cpp b/src/auto_rotation/auto_rotation_sensor.cpp
index 9c0e367..5601fae 100755
--- a/src/auto_rotation/auto_rotation_sensor.cpp
+++ b/src/auto_rotation/auto_rotation_sensor.cpp
@@ -38,6 +38,8 @@
using std::bind1st;
using std::mem_fun;
+using std::string;
+using std::vector;
#define SENSOR_NAME "AUTO_ROTATION_SENSOR"
#define SENSOR_TYPE_AUTO_ROTATION "AUTO_ROTATION"
@@ -133,9 +135,9 @@ bool auto_rotation_sensor::init()
return true;
}
-sensor_type_t auto_rotation_sensor::get_type(void)
+void auto_rotation_sensor::get_types(vector &types)
{
- return AUTO_ROTATION_SENSOR;
+ types.push_back(AUTO_ROTATION_SENSOR);
}
bool auto_rotation_sensor::on_start(void)
@@ -208,7 +210,7 @@ int auto_rotation_sensor::get_sensor_data(const unsigned int event_type, sensor_
return 0;
}
-bool auto_rotation_sensor::get_properties(sensor_properties_s &properties)
+bool auto_rotation_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.name = "Auto Rotation Sensor";
properties.vendor = "Samsung Electronics";
diff --git a/src/auto_rotation/auto_rotation_sensor.h b/src/auto_rotation/auto_rotation_sensor.h
index 863d419..d2d1998 100755
--- a/src/auto_rotation/auto_rotation_sensor.h
+++ b/src/auto_rotation/auto_rotation_sensor.h
@@ -21,7 +21,6 @@
#define _AUTO_ROTATION_SENSOR_H_
#include
-#include
#include
class auto_rotation_sensor : public virtual_sensor {
@@ -30,14 +29,14 @@ public:
virtual ~auto_rotation_sensor();
bool init();
- sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
- void synthesize(const sensor_event_t& event, vector &outs);
+ void synthesize(const sensor_event_t& event, std::vector &outs);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
- virtual bool get_properties(sensor_properties_s &properties);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_base *m_accel_sensor;
cmutex m_value_mutex;
@@ -47,8 +46,8 @@ private:
unsigned long long m_rotation_time;
auto_rotation_alg *m_alg;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
auto_rotation_alg *get_alg();
diff --git a/src/bio_led_red/bio_led_red_sensor.cpp b/src/bio_led_red/bio_led_red_sensor.cpp
index 17d228f..07006c7 100755
--- a/src/bio_led_red/bio_led_red_sensor.cpp
+++ b/src/bio_led_red/bio_led_red_sensor.cpp
@@ -26,6 +26,8 @@
using std::bind1st;
using std::mem_fun;
+using std::string;
+using std::vector;
#define SENSOR_NAME "BIO_LED_RED_SENSOR"
@@ -46,7 +48,7 @@ bio_led_red_sensor::~bio_led_red_sensor()
bool bio_led_red_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(BIO_LED_RED_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_BIO_LED_RED);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -58,9 +60,9 @@ bool bio_led_red_sensor::init()
return true;
}
-sensor_type_t bio_led_red_sensor::get_type(void)
+void bio_led_red_sensor::get_types(vector &types)
{
- return BIO_LED_RED_SENSOR;
+ types.push_back(BIO_LED_RED_SENSOR);
}
bool bio_led_red_sensor::working(void *inst)
@@ -110,7 +112,7 @@ bool bio_led_red_sensor::on_stop(void)
return stop_poll();
}
-bool bio_led_red_sensor::get_properties(sensor_properties_s &properties)
+bool bio_led_red_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/bio_led_red/bio_led_red_sensor.h b/src/bio_led_red/bio_led_red_sensor.h
index f14b4af..78af52a 100755
--- a/src/bio_led_red/bio_led_red_sensor.h
+++ b/src/bio_led_red/bio_led_red_sensor.h
@@ -31,11 +31,11 @@ public:
virtual ~bio_led_red_sensor();
bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
virtual int get_sensor_data(unsigned int type, sensor_data_t &data);
private:
sensor_hal *m_sensor_hal;
diff --git a/src/bio_led_red/bio_led_red_sensor_hal.cpp b/src/bio_led_red/bio_led_red_sensor_hal.cpp
index 38ee2bb..59fea6a 100755
--- a/src/bio_led_red/bio_led_red_sensor_hal.cpp
+++ b/src/bio_led_red/bio_led_red_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define SENSOR_TYPE_BIO_LED_RED "BIO_LED_RED"
#define ELEMENT_NAME "NAME"
@@ -112,9 +113,9 @@ string bio_led_red_sensor_hal::get_model_id(void)
}
-sensor_type_t bio_led_red_sensor_hal::get_type(void)
+sensor_hal_type_t bio_led_red_sensor_hal::get_type(void)
{
- return BIO_LED_RED_SENSOR;
+ return SENSOR_HAL_TYPE_BIO_LED_RED;
}
bool bio_led_red_sensor_hal::enable(void)
diff --git a/src/bio_led_red/bio_led_red_sensor_hal.h b/src/bio_led_red/bio_led_red_sensor_hal.h
index d94c470..bd9059b 100755
--- a/src/bio_led_red/bio_led_red_sensor_hal.h
+++ b/src/bio_led_red/bio_led_red_sensor_hal.h
@@ -21,17 +21,14 @@
#define _BIO_LED_RED_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class bio_led_red_sensor_hal : public sensor_hal
{
public:
bio_led_red_sensor_hal();
virtual ~bio_led_red_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long val);
@@ -40,9 +37,9 @@ public:
bool get_properties(sensor_properties_s &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
unsigned long m_polling_interval;
@@ -51,9 +48,9 @@ private:
unsigned long long m_fired_time;
int m_node_handle;
- string m_enable_node;
- string m_data_node;
- string m_interval_node;
+ std::string m_enable_node;
+ std::string m_data_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/fusion/fusion_sensor.cpp b/src/fusion/fusion_sensor.cpp
index 38e02e4..bb04436 100755
--- a/src/fusion/fusion_sensor.cpp
+++ b/src/fusion/fusion_sensor.cpp
@@ -33,6 +33,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "FUSION_SENSOR"
#define SENSOR_TYPE_FUSION "FUSION"
@@ -212,9 +215,9 @@ bool fusion_sensor::init(void)
return true;
}
-sensor_type_t fusion_sensor::get_type(void)
+void fusion_sensor::get_types(vector &types)
{
- return FUSION_SENSOR;
+ types.push_back(FUSION_SENSOR);
}
bool fusion_sensor::on_start(void)
@@ -458,7 +461,7 @@ int fusion_sensor::get_sensor_data(const unsigned int event_type, sensor_data_t
return 0;
}
-bool fusion_sensor::get_properties(sensor_properties_s &properties)
+bool fusion_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.min_range = 0;
properties.max_range = 0;
diff --git a/src/fusion/fusion_sensor.h b/src/fusion/fusion_sensor.h
index 8b4013f..e057ff0 100755
--- a/src/fusion/fusion_sensor.h
+++ b/src/fusion/fusion_sensor.h
@@ -35,8 +35,8 @@ public:
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);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+ virtual void get_types(std::vector &types);
int get_sensor_data(const unsigned int data_id, sensor_data_t &data);
@@ -63,8 +63,8 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
float m_accel_static_bias[3];
float m_gyro_static_bias[3];
diff --git a/src/fusion/hardware_fusion_sensor.html b/src/fusion/hardware_fusion_sensor.html
old mode 100644
new mode 100755
index aae6fea..2c81202
--- a/src/fusion/hardware_fusion_sensor.html
+++ b/src/fusion/hardware_fusion_sensor.html
@@ -91,7 +91,7 @@ software sensor fusion,
->In
the constructor use sensor_plugin_loader to check if the hal sensor
fusion is present or not:
-sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR)
+sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION)
->If
@@ -103,7 +103,7 @@ this result in virtual_sensor::m_hardware_fusion
sensor_hal
*fusion_sensor_hal =
-sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if
(!fusion_sensor_hal)
m_hardware_fusion
diff --git a/src/geo/geo_sensor.cpp b/src/geo/geo_sensor.cpp
index 02609ca..6d9c170 100755
--- a/src/geo/geo_sensor.cpp
+++ b/src/geo/geo_sensor.cpp
@@ -23,6 +23,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "GEOMAGNETIC_SENSOR"
geo_sensor::geo_sensor()
@@ -45,7 +48,7 @@ geo_sensor::~geo_sensor()
bool geo_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(GEOMAGNETIC_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_GEOMAGNETIC);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -66,15 +69,15 @@ bool geo_sensor::init()
return true;
}
-sensor_type_t geo_sensor::get_type(void)
+void geo_sensor::get_types(vector &types)
{
- return GEOMAGNETIC_SENSOR;
+ types.push_back(GEOMAGNETIC_SENSOR);
}
bool geo_sensor::working(void *inst)
{
geo_sensor *sensor = (geo_sensor*)inst;
- return sensor->process_event();;
+ return sensor->process_event();
}
bool geo_sensor::process_event(void)
@@ -125,7 +128,7 @@ bool geo_sensor::on_stop(void)
return stop_poll();
}
-bool geo_sensor::get_properties(sensor_properties_s &properties)
+bool geo_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/geo/geo_sensor.h b/src/geo/geo_sensor.h
index d864ec1..df1e2c3 100755
--- a/src/geo/geo_sensor.h
+++ b/src/geo/geo_sensor.h
@@ -31,13 +31,13 @@ public:
virtual ~geo_sensor();
virtual bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_hal *m_sensor_hal;
diff --git a/src/geo/geo_sensor_hal.cpp b/src/geo/geo_sensor_hal.cpp
index 0480752..9b23ea5 100755
--- a/src/geo/geo_sensor_hal.cpp
+++ b/src/geo/geo_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define SENSOR_TYPE_MAGNETIC "MAGNETIC"
#define ELEMENT_NAME "NAME"
@@ -147,9 +148,9 @@ string geo_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t geo_sensor_hal::get_type(void)
+sensor_hal_type_t geo_sensor_hal::get_type(void)
{
- return GEOMAGNETIC_SENSOR;
+ return SENSOR_HAL_TYPE_GEOMAGNETIC;
}
bool geo_sensor_hal::enable(void)
@@ -190,7 +191,6 @@ bool geo_sensor_hal::set_interval(unsigned long val)
INFO("Interval is changed from %dms to %dms]", m_polling_interval, val);
m_polling_interval = val;
return true;
-
}
bool geo_sensor_hal::update_value(bool wait)
diff --git a/src/geo/geo_sensor_hal.h b/src/geo/geo_sensor_hal.h
index 44afebb..0af57e8 100755
--- a/src/geo/geo_sensor_hal.h
+++ b/src/geo/geo_sensor_hal.h
@@ -21,17 +21,14 @@
#define _GEO_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class geo_sensor_hal : public sensor_hal
{
public:
geo_sensor_hal();
virtual ~geo_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long val);
@@ -39,9 +36,9 @@ public:
virtual int get_sensor_data(sensor_data_t &data);
bool get_properties(sensor_properties_s &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
float m_min_range;
float m_max_range;
@@ -57,9 +54,9 @@ private:
int m_node_handle;
unsigned long m_polling_interval;
- string m_enable_node;
- string m_data_node;
- string m_interval_node;
+ std::string m_enable_node;
+ std::string m_data_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/gravity/gravity_sensor.cpp b/src/gravity/gravity_sensor.cpp
index aa23a5e..dfe3ae7 100755
--- a/src/gravity/gravity_sensor.cpp
+++ b/src/gravity/gravity_sensor.cpp
@@ -31,6 +31,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define INITIAL_VALUE -1
#define GRAVITY 9.80665
@@ -66,7 +69,7 @@ gravity_sensor::gravity_sensor()
{
cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -157,9 +160,9 @@ bool gravity_sensor::init()
return true;
}
-sensor_type_t gravity_sensor::get_type(void)
+void gravity_sensor::get_types(vector &types)
{
- return GRAVITY_SENSOR;
+ types.push_back(GRAVITY_SENSOR);
}
bool gravity_sensor::on_start(void)
@@ -374,7 +377,7 @@ int gravity_sensor::get_sensor_data(const unsigned int event_type, sensor_data_t
return 0;
}
-bool gravity_sensor::get_properties(sensor_properties_s &properties)
+bool gravity_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.min_range = -GRAVITY;
properties.max_range = GRAVITY;
diff --git a/src/gravity/gravity_sensor.h b/src/gravity/gravity_sensor.h
index cd15b79..b5114ee 100755
--- a/src/gravity/gravity_sensor.h
+++ b/src/gravity/gravity_sensor.h
@@ -30,15 +30,15 @@ public:
virtual ~gravity_sensor();
bool init();
- sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t& event, std::vector &outs);
bool add_interval(int client_id, unsigned int interval);
bool delete_interval(int client_id);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
- bool get_properties(sensor_properties_s &properties);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_base *m_accel_sensor;
sensor_base *m_gyro_sensor;
@@ -55,9 +55,9 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
- string m_orientation_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
+ std::string m_orientation_data_unit;
int m_default_sampling_time;
int m_gravity_sign_compensation[3];
int m_azimuth_rotation_compensation;
diff --git a/src/gyro/gyro_sensor.cpp b/src/gyro/gyro_sensor.cpp
index c7b0001..2cb2859 100755
--- a/src/gyro/gyro_sensor.cpp
+++ b/src/gyro/gyro_sensor.cpp
@@ -23,6 +23,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define MS_TO_US 1000
#define DPS_TO_MDPS 1000
#define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS))
@@ -48,7 +51,7 @@ gyro_sensor::~gyro_sensor()
bool gyro_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(GYROSCOPE_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_GYROSCOPE);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -69,9 +72,9 @@ bool gyro_sensor::init()
return true;
}
-sensor_type_t gyro_sensor::get_type(void)
+void gyro_sensor::get_types(vector &types)
{
- return GYROSCOPE_SENSOR;
+ types.push_back(GYROSCOPE_SENSOR);
}
bool gyro_sensor::working(void *inst)
@@ -127,7 +130,7 @@ bool gyro_sensor::on_stop(void)
return stop_poll();
}
-bool gyro_sensor::get_properties(sensor_properties_s &properties)
+bool gyro_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/gyro/gyro_sensor.h b/src/gyro/gyro_sensor.h
index a56ca2f..81bcb7b 100755
--- a/src/gyro/gyro_sensor.h
+++ b/src/gyro/gyro_sensor.h
@@ -31,13 +31,13 @@ public:
virtual ~gyro_sensor();
virtual bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_hal *m_sensor_hal;
float m_resolution;
diff --git a/src/gyro/gyro_sensor_hal.cpp b/src/gyro/gyro_sensor_hal.cpp
index 52b55fb..97a6903 100755
--- a/src/gyro/gyro_sensor_hal.cpp
+++ b/src/gyro/gyro_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define DPS_TO_MDPS 1000
#define MIN_RANGE(RES) (-((1 << (RES))/2))
@@ -137,9 +138,9 @@ string gyro_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t gyro_sensor_hal::get_type(void)
+sensor_hal_type_t gyro_sensor_hal::get_type(void)
{
- return GYROSCOPE_SENSOR;
+ return SENSOR_HAL_TYPE_GYROSCOPE;
}
bool gyro_sensor_hal::enable(void)
diff --git a/src/gyro/gyro_sensor_hal.h b/src/gyro/gyro_sensor_hal.h
index 6204399..dde408e 100755
--- a/src/gyro/gyro_sensor_hal.h
+++ b/src/gyro/gyro_sensor_hal.h
@@ -21,17 +21,14 @@
#define _GYRO_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class gyro_sensor_hal : public sensor_hal
{
public:
gyro_sensor_hal();
virtual ~gyro_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long ms_interval);
@@ -47,18 +44,18 @@ private:
unsigned long m_polling_interval;
unsigned long long m_fired_time;
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
float m_min_range;
float m_max_range;
int m_resolution;
float m_raw_data_unit;
- string m_data_node;
- string m_enable_node;
- string m_interval_node;
+ std::string m_data_node;
+ std::string m_enable_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/libsensord/client.cpp b/src/libsensord/client.cpp
old mode 100755
new mode 100644
index 710bdcf..943e5a9
--- a/src/libsensord/client.cpp
+++ b/src/libsensord/client.cpp
@@ -27,11 +27,17 @@
#include
#include
#include
+#include
+#include
+
+using std::vector;
#ifndef API
#define API __attribute__((visibility("default")))
#endif
+#define MIN_INTERVAL 10
+
static const int OP_SUCCESS = 0;
static const int OP_ERROR = -1;
@@ -260,16 +266,9 @@ static bool change_sensor_rep(sensor_id_t sensor_id, sensor_rep &prev_rep, senso
}
}
- if (prev_rep.interval != cur_rep.interval) {
- unsigned int min_interval;
-
- if (cur_rep.interval == 0)
- min_interval= POLL_MAX_HZ_MS;
- else
- min_interval = cur_rep.interval;
-
- if (!cmd_channel->cmd_set_interval(min_interval)) {
- ERR("Sending cmd_set_interval(%d, %s, %d) failed for %s", client_id, get_sensor_name(sensor_id), min_interval, get_client_name());
+ if ( (prev_rep.interval != cur_rep.interval) || (prev_rep.latency != cur_rep.latency)) {
+ if (!cmd_channel->cmd_set_batch(cur_rep.interval, cur_rep.latency)) {
+ ERR("Sending cmd_set_batch(%d, %s, %d, %d) failed for %s", client_id, get_sensor_name(sensor_id), cur_rep.interval, cur_rep.latency, get_client_name());
return false;
}
}
@@ -297,7 +296,7 @@ static bool change_sensor_rep(sensor_id_t sensor_id, sensor_rep &prev_rep, senso
return false;
}
} else {
- if (!cmd_channel->cmd_unset_interval()) {
+ if (!cmd_channel->cmd_unset_batch()) {
ERR("Sending cmd_unset_interval(%d, %s) failed for %s", client_id, get_sensor_name(sensor_id), get_client_name());
return false;
}
@@ -616,14 +615,14 @@ API int sensord_connect(sensor_t sensor)
retvm_if (!sensor_info_manager::get_instance().is_valid(info),
OP_ERROR, "Invalid param: sensor (%p)", sensor);
- sensor_id_t sensor_id = info->get_id();
+ sensor_id_t sensor_id = info->get_id();
AUTOLOCK(lock);
sensor_registered = event_listener.is_sensor_registered(sensor_id);
handle = event_listener.create_handle(sensor_id);
- if (handle == MAX_HANDLE) {
+ if (handle == MAX_HANDLE_REACHED) {
ERR("Maximum number of handles reached, sensor: %s in client %s", get_sensor_name(sensor_id), get_client_name());
return OP_ERROR;
}
@@ -758,14 +757,15 @@ static bool register_event(int handle, unsigned int event_type, unsigned int int
return false;
}
- if (interval == 0)
- interval = 1;
+ if (interval < MIN_INTERVAL)
+ interval = MIN_INTERVAL;
- INFO("%s registers event %s[0x%x] for sensor %s[%d] with interval: %d, cb: 0x%x, user_data: 0x%x", get_client_name(), get_event_name(event_type),
- event_type, get_sensor_name(sensor_id), handle, interval, cb, user_data);
+ INFO("%s registers event %s[0x%x] for sensor %s[%d] with interval: %d, latency: %d, cb: 0x%x, user_data: 0x%x",
+ get_client_name(), get_event_name(event_type), event_type, get_sensor_name(sensor_id),
+ handle, interval, max_batch_latency, cb, user_data);
event_listener.get_sensor_rep(sensor_id, prev_rep);
- event_listener.register_event(handle, event_type, interval, cb_type, cb, user_data);
+ event_listener.register_event(handle, event_type, interval, max_batch_latency, cb_type, cb, user_data);
event_listener.get_sensor_rep(sensor_id, cur_rep);
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
@@ -791,7 +791,7 @@ API bool sensord_unregister_event(int handle, unsigned int event_type)
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
- unsigned int prev_interval;
+ unsigned int prev_interval, prev_latency;
int prev_cb_type;
void *prev_cb;
void *prev_user_data;
@@ -807,7 +807,7 @@ API bool sensord_unregister_event(int handle, unsigned int event_type)
event_type, get_sensor_name(sensor_id), handle);
event_listener.get_sensor_rep(sensor_id, prev_rep);
- event_listener.get_event_info(handle, event_type, prev_interval, prev_cb_type, prev_cb, prev_user_data);
+ event_listener.get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
if (!event_listener.unregister_event(handle, event_type)) {
ERR("%s try to unregister non registered event %s[0x%x] for sensor %s[%d]",
@@ -819,7 +819,7 @@ API bool sensord_unregister_event(int handle, unsigned int event_type)
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
if (!ret)
- event_listener.register_event(handle, event_type, prev_interval, prev_cb_type, prev_cb, prev_user_data);
+ event_listener.register_event(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
return ret;
@@ -945,12 +945,12 @@ API bool sensord_stop(int handle)
}
-API bool sensord_change_event_interval(int handle, unsigned int event_type, unsigned int interval)
+static bool change_event_batch(int handle, unsigned int event_type, unsigned int interval, unsigned int latency)
{
sensor_id_t sensor_id;
sensor_rep prev_rep, cur_rep;
bool ret;
- unsigned int prev_interval;
+ unsigned int prev_interval, prev_latency;
int prev_cb_type;
void *prev_cb;
void *prev_user_data;
@@ -962,14 +962,20 @@ API bool sensord_change_event_interval(int handle, unsigned int event_type, unsi
return false;
}
- INFO("%s changes interval of event %s[0x%x] for %s[%d] to interval %d", get_client_name(), get_event_name(event_type),
- event_type, get_sensor_name(sensor_id), handle, interval);
+ if (interval == 0)
+ interval = 1;
+
+ INFO("%s changes batch of event %s[0x%x] for %s[%d] to (%d, %d)", get_client_name(), get_event_name(event_type),
+ event_type, get_sensor_name(sensor_id), handle, interval, latency);
event_listener.get_sensor_rep(sensor_id, prev_rep);
- event_listener.get_event_info(handle, event_type, prev_interval, prev_cb_type, prev_cb, prev_user_data);
+ event_listener.get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data);
+
+ if (interval < MIN_INTERVAL)
+ interval = MIN_INTERVAL;
- if (!event_listener.set_event_interval(handle, event_type, interval))
+ if (!event_listener.set_event_batch(handle, event_type, interval, latency))
return false;
event_listener.get_sensor_rep(sensor_id, cur_rep);
@@ -977,17 +983,45 @@ API bool sensord_change_event_interval(int handle, unsigned int event_type, unsi
ret = change_sensor_rep(sensor_id, prev_rep, cur_rep);
if (!ret)
- event_listener.set_event_interval(handle, event_type, prev_interval);
+ event_listener.set_event_batch(handle, event_type, prev_interval, prev_latency);
return ret;
-
}
-API bool sensord_change_event_max_batch_latency(int handle, unsigned int max_batch_latency)
+API bool sensord_change_event_interval(int handle, unsigned int event_type, unsigned int interval)
{
- return false;
+ unsigned int prev_interval, prev_latency;
+ int prev_cb_type;
+ void *prev_cb;
+ void *prev_user_data;
+
+ AUTOLOCK(lock);
+
+ if (!event_listener.get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data)) {
+ ERR("Failed to get event info with handle = %d, event_type = 0x%x", handle, event_type);
+ return false;
+ }
+
+ INFO("handle = %d, event_type = 0x%x, interval = %d, prev_latency = %d", handle, event_type, interval, prev_latency);
+ return change_event_batch(handle, event_type, interval, prev_latency);
}
+API bool sensord_change_event_max_batch_latency(int handle, unsigned int event_type, unsigned int max_batch_latency)
+{
+ unsigned int prev_interval, prev_latency;
+ int prev_cb_type;
+ void *prev_cb;
+ void *prev_user_data;
+
+ AUTOLOCK(lock);
+
+ if (!event_listener.get_event_info(handle, event_type, prev_interval, prev_latency, prev_cb_type, prev_cb, prev_user_data)) {
+ ERR("Failed to get event info with handle = %d, event_type = 0x%x", handle, event_type);
+ return false;
+ }
+
+ return change_event_batch(handle, event_type, prev_interval, max_batch_latency);
+}
API bool sensord_set_option(int handle, int option)
{
diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp
index 40f99b1..9efccee 100755
--- a/src/libsensord/client_common.cpp
+++ b/src/libsensord/client_common.cpp
@@ -123,8 +123,6 @@ const char* get_log_element_name(log_id id, unsigned int type)
const char* get_sensor_name(sensor_id_t sensor_id)
{
- const int SENSOR_TYPE_MASK = 0x0000FFFF;
-
sensor_type_t sensor_type = (sensor_type_t) (sensor_id & SENSOR_TYPE_MASK);
return get_log_element_name(LOG_ID_SENSOR_TYPE, sensor_type);
diff --git a/src/libsensord/command_channel.cpp b/src/libsensord/command_channel.cpp
old mode 100755
new mode 100644
index 21238a2..c46a1a1
--- a/src/libsensord/command_channel.cpp
+++ b/src/libsensord/command_channel.cpp
@@ -108,7 +108,8 @@ bool command_channel::cmd_get_id(int &client_id)
packet->set_cmd(CMD_GET_ID);
cmd_get_id = (cmd_get_id_t *)packet->data();
- cmd_get_id->pid = getpid();
+
+ get_proc_name(getpid(), cmd_get_id->name);
INFO("%s send cmd_get_id()", get_client_name());
@@ -480,33 +481,34 @@ bool command_channel::cmd_unregister_events(event_type_vector &event_vec)
return true;
}
-bool command_channel::cmd_set_interval(unsigned int interval)
+bool command_channel::cmd_set_batch(unsigned int interval, unsigned int latency)
{
cpacket *packet;
- cmd_set_interval_t *cmd_set_interval;
+ cmd_set_batch_t *cmd_set_batch;
cmd_done_t *cmd_done;
- packet = new(std::nothrow) cpacket(sizeof(cmd_set_interval_t));
+ packet = new(std::nothrow) cpacket(sizeof(cmd_set_batch_t));
retvm_if(!packet, false, "Failed to allocate memory");
- packet->set_cmd(CMD_SET_INTERVAL);
+ packet->set_cmd(CMD_SET_BATCH);
- cmd_set_interval = (cmd_set_interval_t*)packet->data();
- cmd_set_interval->interval = interval;
+ cmd_set_batch = (cmd_set_batch_t*)packet->data();
+ cmd_set_batch->interval = interval;
+ cmd_set_batch->latency = latency;
- INFO("%s send cmd_set_interval(client_id=%d, %s, interval=%d)",
- get_client_name(), m_client_id, get_sensor_name(m_sensor_id), interval);
+ INFO("%s send cmd_set_batch(client_id=%d, %s, interval=%d, latency = %d)",
+ get_client_name(), m_client_id, get_sensor_name(m_sensor_id), interval, latency);
if (!command_handler(packet, (void **)&cmd_done)) {
- ERR("%s failed to send/receive command for sensor[%s] with client_id [%d], interval[%d]",
- get_client_name(), get_sensor_name(m_sensor_id), m_client_id, interval);
+ ERR("%s failed to send/receive command for sensor[%s] with client_id [%d], interval[%d], latency[%d]",
+ get_client_name(), get_sensor_name(m_sensor_id), m_client_id, interval, latency);
delete packet;
return false;
}
if (cmd_done->value < 0) {
- ERR("%s got error[%d] from server for sensor[%s] with client_id [%d], interval[%d]",
- get_client_name(), cmd_done->value, get_sensor_name(m_sensor_id), m_client_id, interval);
+ ERR("%s got error[%d] from server for sensor[%s] with client_id [%d], interval[%d], latency[%d]",
+ get_client_name(), cmd_done->value, get_sensor_name(m_sensor_id), m_client_id, interval, latency);
delete[] (char *)cmd_done;
delete packet;
@@ -519,17 +521,17 @@ bool command_channel::cmd_set_interval(unsigned int interval)
return true;
}
-bool command_channel::cmd_unset_interval(void)
+bool command_channel::cmd_unset_batch(void)
{
cpacket *packet;
cmd_done_t *cmd_done;
- packet = new(std::nothrow) cpacket(sizeof(cmd_unset_interval_t));
+ packet = new(std::nothrow) cpacket(sizeof(cmd_unset_batch_t));
retvm_if(!packet, false, "Failed to allocate memory");
- packet->set_cmd(CMD_UNSET_INTERVAL);
+ packet->set_cmd(CMD_UNSET_BATCH);
- INFO("%s send cmd_unset_interval(client_id=%d, %s)",
+ INFO("%s send cmd_unset_batch(client_id=%d, %s)",
get_client_name(), m_client_id, get_sensor_name(m_sensor_id));
if (!command_handler(packet, (void **)&cmd_done)) {
diff --git a/src/libsensord/command_channel.h b/src/libsensord/command_channel.h
old mode 100755
new mode 100644
index 2688c15..ae1ba6a
--- a/src/libsensord/command_channel.h
+++ b/src/libsensord/command_channel.h
@@ -23,9 +23,6 @@
#include
#include
#include
-#include
-
-using std::vector;
class command_channel
{
@@ -48,8 +45,8 @@ public:
bool cmd_register_events(event_type_vector &event_vec);
bool cmd_unregister_event(unsigned int event_type);
bool cmd_unregister_events(event_type_vector &event_vec);
- bool cmd_set_interval(unsigned int interval);
- bool cmd_unset_interval(void);
+ bool cmd_set_batch(unsigned int interval, unsigned int latency);
+ bool cmd_unset_batch(void);
bool cmd_set_command(unsigned int cmd, long value);
bool cmd_get_data(unsigned int type, sensor_data_t* values);
bool cmd_send_sensorhub_data(const char* buffer, int data_len);
diff --git a/src/libsensord/creg_event_info.h b/src/libsensord/creg_event_info.h
old mode 100755
new mode 100644
index 82f23bd..a270d79
--- a/src/libsensord/creg_event_info.h
+++ b/src/libsensord/creg_event_info.h
@@ -35,6 +35,7 @@ public:
int m_handle;
unsigned int type;
unsigned int m_interval;
+ unsigned int m_latency;
int m_cb_type;
void *m_cb;
void *m_user_data;
@@ -43,6 +44,7 @@ public:
creg_event_info():m_id(0), m_handle(-1),
type(0), m_interval(POLL_1HZ_MS),
+ m_latency(0),
m_cb_type(SENSOR_EVENT_CB), m_cb(NULL), m_user_data(NULL),
m_previous_event_time(0), m_fired(false){}
diff --git a/src/libsensord/csensor_event_listener.cpp b/src/libsensord/csensor_event_listener.cpp
old mode 100755
new mode 100644
index 7dbebc3..dea77e0
--- a/src/libsensord/csensor_event_listener.cpp
+++ b/src/libsensord/csensor_event_listener.cpp
@@ -24,12 +24,14 @@
#include
#include
+#include
#define MS_TO_US 1000
#define MIN_DELIVERY_DIFF_FACTOR 0.75f
using std::thread;
using std::pair;
+using std::vector;
csensor_event_listener::csensor_event_listener()
: m_client_id(CLIENT_ID_INVALID)
@@ -114,7 +116,7 @@ bool csensor_event_listener::stop_handle(int handle)
}
bool csensor_event_listener::register_event(int handle, unsigned int event_type,
- unsigned int interval, int cb_type, void *cb, void* user_data)
+ unsigned int interval, unsigned int latency, int cb_type, void *cb, void* user_data)
{
AUTOLOCK(m_handle_info_lock);
@@ -125,7 +127,7 @@ bool csensor_event_listener::register_event(int handle, unsigned int event_type,
return false;
}
- if (!it_handle->second.add_reg_event_info(event_type, interval, cb_type, cb, user_data))
+ if (!it_handle->second.add_reg_event_info(event_type, interval, latency, cb_type, cb, user_data))
return false;
return true;
@@ -148,24 +150,6 @@ bool csensor_event_listener::unregister_event(int handle, unsigned int event_typ
return true;
}
-bool csensor_event_listener::change_event_interval(int handle, unsigned int event_type,
- unsigned int interval)
-{
- AUTOLOCK(m_handle_info_lock);
-
- auto it_handle = m_sensor_handle_infos.find(handle);
-
- if (it_handle == m_sensor_handle_infos.end()) {
- ERR("Handle[%d] is not found for client %s", handle, get_client_name());
- return false;
- }
-
- if (!it_handle->second.change_reg_event_interval(event_type, interval))
- return false;
-
- return true;
-}
-
bool csensor_event_listener::register_accuracy_cb(int handle, sensor_accuracy_changed_cb_t cb, void* user_data)
{
AUTOLOCK(m_handle_info_lock);
@@ -268,7 +252,7 @@ bool csensor_event_listener::set_sensor_option(int handle, int sensor_option)
return true;
}
-bool csensor_event_listener::set_event_interval(int handle, unsigned int event_type, unsigned int interval)
+bool csensor_event_listener::set_event_batch(int handle, unsigned int event_type, unsigned int interval, unsigned int latency)
{
AUTOLOCK(m_handle_info_lock);
@@ -279,14 +263,14 @@ bool csensor_event_listener::set_event_interval(int handle, unsigned int event_t
return false;
}
- if (!it_handle->second.change_reg_event_interval(event_type, interval))
+ if (!it_handle->second.change_reg_event_batch(event_type, interval, latency))
return false;
return true;
}
-bool csensor_event_listener::get_event_info(int handle, unsigned int event_type, unsigned int &interval, int &cb_type, void* &cb, void* &user_data)
+bool csensor_event_listener::get_event_info(int handle, unsigned int event_type, unsigned int &interval, unsigned int &latency, int &cb_type, void* &cb, void* &user_data)
{
AUTOLOCK(m_handle_info_lock);
@@ -304,8 +288,8 @@ bool csensor_event_listener::get_event_info(int handle, unsigned int event_type,
if (!event_info)
return NULL;
-
interval = event_info->m_interval;
+ latency = event_info->m_latency;
cb_type = event_info->m_cb_type;
cb = event_info->m_cb;
user_data = event_info->m_user_data;
@@ -332,13 +316,18 @@ void csensor_event_listener::get_listening_sensors(sensor_id_vector &sensors)
void csensor_event_listener::get_sensor_rep(sensor_id_t sensor, sensor_rep& rep)
{
+ const unsigned int INVALID_BATCH_VALUE = std::numeric_limits::max();
+
AUTOLOCK(m_handle_info_lock);
rep.active = is_sensor_active(sensor);
rep.option = get_active_option(sensor);
- rep.interval = get_active_min_interval(sensor);
- get_active_event_types(sensor, rep.event_types);
+ if (!get_active_batch(sensor, rep.interval, rep.latency)) {
+ rep.interval = INVALID_BATCH_VALUE;
+ rep.latency = INVALID_BATCH_VALUE;
+ }
+ get_active_event_types(sensor, rep.event_types);
}
void csensor_event_listener::operate_sensor(sensor_id_t sensor, int power_save_state)
@@ -443,11 +432,14 @@ void csensor_event_listener::set_client_id(int client_id)
m_client_id = client_id;
}
-unsigned int csensor_event_listener::get_active_min_interval(sensor_id_t sensor)
+bool csensor_event_listener::get_active_batch(sensor_id_t sensor, unsigned int &interval, unsigned int &latency)
{
unsigned int min_interval = POLL_MAX_HZ_MS;
+ unsigned int min_latency = std::numeric_limits::max();
+
bool active_sensor_found = false;
- unsigned int interval;
+ unsigned int _interval;
+ unsigned int _latency;
AUTOLOCK(m_handle_info_lock);
@@ -457,18 +449,23 @@ unsigned int csensor_event_listener::get_active_min_interval(sensor_id_t sensor)
if ((it_handle->second.m_sensor_id == sensor) &&
(it_handle->second.m_sensor_state == SENSOR_STATE_STARTED)) {
active_sensor_found = true;
- interval = it_handle->second.get_min_interval();
- min_interval = (interval < min_interval) ? interval : min_interval;
+ it_handle->second.get_batch(_interval, _latency);
+ min_interval = (_interval < min_interval) ? _interval : min_interval;
+ min_latency = (_latency < min_latency) ? _latency : min_latency;
}
++it_handle;
}
- if (!active_sensor_found)
+ if (!active_sensor_found) {
DBG("Active sensor[0x%x] is not found for client %s", sensor, get_client_name());
+ return false;
+ }
- return (active_sensor_found) ? min_interval : 0;
+ interval = min_interval;
+ latency = min_latency;
+ return true;
}
unsigned int csensor_event_listener::get_active_option(sensor_id_t sensor)
diff --git a/src/libsensord/csensor_event_listener.h b/src/libsensord/csensor_event_listener.h
old mode 100755
new mode 100644
index 0f7ac49..2986273
--- a/src/libsensord/csensor_event_listener.h
+++ b/src/libsensord/csensor_event_listener.h
@@ -38,19 +38,10 @@
#include
#include
-using std::unordered_map;
-using std::vector;
-using std::string;
-using std::queue;
-using std::mutex;
-using std::lock_guard;
-using std::unique_lock;
-using std::condition_variable;
-
-typedef vector handle_vector;
-typedef vector sensor_id_vector;
-typedef unordered_map sensor_handle_info_map;
-typedef unordered_map sensor_command_channel_map;
+typedef std::vector handle_vector;
+typedef std::vector sensor_id_vector;
+typedef std::unordered_map sensor_handle_info_map;
+typedef std::unordered_map sensor_command_channel_map;
typedef struct {
unsigned long long event_id;
@@ -72,6 +63,7 @@ typedef struct sensor_rep
bool active;
int option;
unsigned int interval;
+ unsigned int latency;
event_type_vector event_types;
} sensor_rep;
@@ -84,9 +76,8 @@ public:
bool delete_handle(int handle);
bool start_handle(int handle);
bool stop_handle(int handle);
- bool register_event(int handle, unsigned int event_type, unsigned int interval, int cb_type, void *cb, void* user_data);
+ bool register_event(int handle, unsigned int event_type, unsigned int interval, unsigned int latency, int cb_type, void *cb, void* user_data);
bool unregister_event(int handle, unsigned int event_type);
- bool change_event_interval(int handle, unsigned int event_type, unsigned int interval);
bool register_accuracy_cb(int handle, sensor_accuracy_changed_cb_t cb, void* user_data);
bool unregister_accuracy_cb(int handle);
@@ -95,12 +86,12 @@ public:
bool get_sensor_params(int handle, int &sensor_state, int &sensor_option);
bool set_sensor_state(int handle, int sensor_state);
bool set_sensor_option(int handle, int sensor_option);
- bool set_event_interval(int handle, unsigned int event_type, unsigned int interval);
- bool get_event_info(int handle, unsigned int event_type, unsigned int &interval, int &cb_type, void* &cb, void* &user_data);
+ bool set_event_batch(int handle, unsigned int event_type, unsigned int interval, unsigned int latency);
+ bool get_event_info(int handle, unsigned int event_type, unsigned int &interval, unsigned int &latency, int &cb_type, void* &cb, void* &user_data);
void operate_sensor(sensor_id_t sensor, int power_save_state);
void get_listening_sensors(sensor_id_vector &sensors);
- unsigned int get_active_min_interval(sensor_id_t sensor_id);
+ bool get_active_batch(sensor_id_t sensor_id, unsigned int &interval, unsigned int &latency);
unsigned int get_active_option(sensor_id_t sensor_id);
void get_active_event_types(sensor_id_t sensor_id, event_type_vector &active_event_types);
@@ -135,8 +126,8 @@ private:
THREAD_STATE_STOP,
THREAD_STATE_TERMINATE,
};
- typedef lock_guard lock;
- typedef unique_lock ulock;
+ typedef std::lock_guard lock;
+ typedef std::unique_lock ulock;
sensor_handle_info_map m_sensor_handle_infos;
sensor_command_channel_map m_command_channels;
@@ -149,8 +140,8 @@ private:
cmutex m_handle_info_lock;
thread_state m_thread_state;
- mutex m_thread_mutex;
- condition_variable m_thread_cond;
+ std::mutex m_thread_mutex;
+ std::condition_variable m_thread_cond;
hup_observer_t m_hup_observer;
diff --git a/src/libsensord/csensor_handle_info.cpp b/src/libsensord/csensor_handle_info.cpp
old mode 100755
new mode 100644
index d1c8dbb..3aa173f
--- a/src/libsensord/csensor_handle_info.cpp
+++ b/src/libsensord/csensor_handle_info.cpp
@@ -19,6 +19,7 @@
#include
#include
+#include
using std::pair;
@@ -64,7 +65,7 @@ void csensor_handle_info::get_reg_event_types(event_type_vector &event_types)
}
}
-bool csensor_handle_info::add_reg_event_info(unsigned int event_type, unsigned int interval, int cb_type, void *cb, void *user_data)
+bool csensor_handle_info::add_reg_event_info(unsigned int event_type, unsigned int interval, unsigned int latency, int cb_type, void *cb, void *user_data)
{
creg_event_info event_info;
@@ -79,6 +80,7 @@ bool csensor_handle_info::add_reg_event_info(unsigned int event_type, unsigned i
event_info.m_handle = m_handle;
event_info.type = event_type;
event_info.m_interval = interval;
+ event_info.m_latency = latency;
event_info.m_cb_type = cb_type;
event_info.m_cb = cb;
event_info.m_user_data = user_data;
@@ -113,7 +115,7 @@ unsigned long long csensor_handle_info::renew_event_id(void)
return m_event_id++;
}
-bool csensor_handle_info::change_reg_event_interval(unsigned int event_type, unsigned int interval)
+bool csensor_handle_info::change_reg_event_batch(unsigned int event_type, unsigned int interval, unsigned int latency)
{
auto it_event = m_reg_event_infos.find(event_type);
@@ -124,29 +126,39 @@ bool csensor_handle_info::change_reg_event_interval(unsigned int event_type, uns
it_event->second.m_id = renew_event_id();
it_event->second.m_interval = interval;
+ it_event->second.m_latency = latency;
return true;
}
-unsigned int csensor_handle_info::get_min_interval(void)
+void csensor_handle_info::get_batch(unsigned int &interval, unsigned int &latency)
{
- unsigned int min_interval = POLL_MAX_HZ_MS;
- unsigned int interval;
-
if (m_reg_event_infos.empty()) {
DBG("No events are registered for client %s", get_client_name());
- return min_interval;
+ interval = POLL_MAX_HZ_MS;
+ latency = 0;
+ return;
}
+ unsigned int min_interval = POLL_MAX_HZ_MS;
+ unsigned int min_latency = std::numeric_limits::max();
+
+ unsigned int _interval;
+ unsigned int _latency;
+
auto it_event = m_reg_event_infos.begin();
while (it_event != m_reg_event_infos.end()) {
- interval = it_event->second.m_interval;
- min_interval = (interval < min_interval) ? interval : min_interval;
+ _interval = it_event->second.m_interval;
+ _latency = it_event->second.m_latency;
+
+ min_interval = (_interval < min_interval) ? _interval : min_interval;
+ min_latency = (_latency < min_latency) ? _latency : min_latency;
++it_event;
}
- return min_interval;
+ interval = min_interval;
+ latency = min_latency;
}
unsigned int csensor_handle_info::get_reg_event_count(void)
diff --git a/src/libsensord/csensor_handle_info.h b/src/libsensord/csensor_handle_info.h
old mode 100755
new mode 100644
index b6eca9b..3330dbe
--- a/src/libsensord/csensor_handle_info.h
+++ b/src/libsensord/csensor_handle_info.h
@@ -25,11 +25,8 @@
#include
#include
#include
-#include
-using std::unordered_map;
-using std::vector;
-typedef unordered_map event_info_map;
+typedef std::unordered_map event_info_map;
class csensor_handle_info {
public:
@@ -45,14 +42,14 @@ public:
csensor_handle_info();
~csensor_handle_info();
- bool add_reg_event_info(unsigned int event_type, unsigned int interval, int cb_type, void *cb,void *user_data);
+ bool add_reg_event_info(unsigned int event_type, unsigned int interval, unsigned int latency, int cb_type, void *cb,void *user_data);
bool delete_reg_event_info(unsigned int event_type);
- bool change_reg_event_interval(unsigned int event_type, unsigned int interval);
+ bool change_reg_event_batch(unsigned int event_type, unsigned int interval, unsigned int latency);
creg_event_info* get_reg_event_info(const unsigned int event_type);
void get_reg_event_types(event_type_vector &event_types);
- unsigned int get_min_interval(void);
+ void get_batch(unsigned int &interval, unsigned int &latency);
unsigned int get_reg_event_count(void);
void clear_all_events(void);
diff --git a/src/libsensord/poller.h b/src/libsensord/poller.h
index 5650518..eaf7d93 100755
--- a/src/libsensord/poller.h
+++ b/src/libsensord/poller.h
@@ -29,8 +29,6 @@
#include
#include
-using std::queue;
-
class poller {
public:
poller(int fd);
@@ -39,7 +37,7 @@ public:
bool poll(int &event);
private:
int m_epfd;
- queue m_event_queue;
+ std::queue m_event_queue;
bool create(int fd);
bool fill_event_queue(void);
diff --git a/src/libsensord/sensor_info_manager.cpp b/src/libsensord/sensor_info_manager.cpp
index f4c6fe1..4a427f2 100755
--- a/src/libsensord/sensor_info_manager.cpp
+++ b/src/libsensord/sensor_info_manager.cpp
@@ -19,9 +19,11 @@
#include
#include
+#include
using std::pair;
using std::make_pair;
+using std::vector;
sensor_info_manager::sensor_info_manager()
{
diff --git a/src/libsensord/sensor_info_manager.h b/src/libsensord/sensor_info_manager.h
index 512905f..084b5a3 100755
--- a/src/libsensord/sensor_info_manager.h
+++ b/src/libsensord/sensor_info_manager.h
@@ -26,23 +26,19 @@
#include
#include
-using std::multimap;
-using std::unordered_map;
-using std::unordered_set;
-
class sensor_info_manager {
public:
static sensor_info_manager& get_instance(void);
const sensor_info* get_info(sensor_type_t type);
- vector get_infos(sensor_type_t type);
+ std::vector get_infos(sensor_type_t type);
const sensor_info* get_info(sensor_id_t id);
bool is_valid(sensor_info* info);
void add_info(sensor_info* info);
private:
- typedef multimap sensor_infos;
- typedef unordered_map id_to_info_map;
- typedef unordered_set info_set;
+ typedef std::multimap sensor_infos;
+ typedef std::unordered_map id_to_info_map;
+ typedef std::unordered_set info_set;
sensor_info_manager();
~sensor_info_manager();
diff --git a/src/libsensord/sensor_internal.h b/src/libsensord/sensor_internal.h
old mode 100755
new mode 100644
index 49c74dc..ff107cb
--- a/src/libsensord/sensor_internal.h
+++ b/src/libsensord/sensor_internal.h
@@ -24,6 +24,10 @@
#define DEPRECATED __attribute__((deprecated))
#endif
+#ifndef API
+#define API __attribute__((visibility("default")))
+#endif
+
#include "stdbool.h"
#ifdef __cplusplus
@@ -298,10 +302,11 @@ bool sensord_change_event_interval(int handle, unsigned int event_type, unsigned
* @brief Change the max batch latency of a specifed event type in a connected sensor.
*
* @param[in] handle a handle represensting a connected sensor.
+ * @param[in] event_type an event type to change max batch latency
* @param[in] max_batch_latency an event in the batch can be delayed by at most max_batch_latency microseconds. If this is set to zero, batch mode is disabled.
* @return true on success, otherwise false.
*/
-bool sensord_change_event_max_batch_latency(int handle, unsigned int max_batch_latency);
+bool sensord_change_event_max_batch_latency(int handle, unsigned int event_type, unsigned int max_batch_latency);
/**
* @brief Change the option of a connected sensor.
diff --git a/src/libsensord/sensor_proxi.h b/src/libsensord/sensor_proxi.h
index 22939d9..1c99fa4 100755
--- a/src/libsensord/sensor_proxi.h
+++ b/src/libsensord/sensor_proxi.h
@@ -40,7 +40,7 @@ enum proxi_event_type {
};
enum proxi_change_state {
- PROXIMITY_STATE_FAR = 0,
+ PROXIMITY_STATE_FAR = 0,
PROXIMITY_STATE_NEAR = 1,
};
diff --git a/src/light/light_sensor.cpp b/src/light/light_sensor.cpp
index 73e45cc..e0a61f1 100755
--- a/src/light/light_sensor.cpp
+++ b/src/light/light_sensor.cpp
@@ -22,9 +22,12 @@
#include
#include
#include
+#include
using std::bind1st;
using std::mem_fun;
+using std::string;
+using std::vector;
#define SENSOR_NAME "LIGHT_SENSOR"
@@ -56,7 +59,7 @@ light_sensor::~light_sensor()
bool light_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(LIGHT_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_LIGHT);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -64,12 +67,13 @@ bool light_sensor::init()
}
INFO("%s is created!", sensor_base::get_name());
+
return true;
}
-sensor_type_t light_sensor::get_type(void)
+void light_sensor::get_types(vector &types)
{
- return LIGHT_SENSOR;
+ types.push_back(LIGHT_SENSOR);
}
bool light_sensor::working(void *inst)
@@ -148,7 +152,7 @@ bool light_sensor::on_stop(void)
return stop_poll();
}
-bool light_sensor::get_properties(sensor_properties_s &properties)
+bool light_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
m_sensor_hal->get_properties(properties);
return true;
diff --git a/src/light/light_sensor.h b/src/light/light_sensor.h
index cdc8e50..1b6d0ca 100755
--- a/src/light/light_sensor.h
+++ b/src/light/light_sensor.h
@@ -30,14 +30,13 @@ public:
virtual ~light_sensor();
virtual bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
int get_sensor_data(const unsigned int type, sensor_data_t &data);
-
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
static const int m_light_level[];
diff --git a/src/light/light_sensor_hal.cpp b/src/light/light_sensor_hal.cpp
index 835a096..bf3a613 100755
--- a/src/light/light_sensor_hal.cpp
+++ b/src/light/light_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define SENSOR_TYPE_LIGHT "LIGHT"
#define ELEMENT_NAME "NAME"
@@ -114,9 +115,9 @@ string light_sensor_hal::get_model_id(void)
}
-sensor_type_t light_sensor_hal::get_type(void)
+sensor_hal_type_t light_sensor_hal::get_type(void)
{
- return LIGHT_SENSOR;
+ return SENSOR_HAL_TYPE_LIGHT;
}
bool light_sensor_hal::enable(void)
diff --git a/src/light/light_sensor_hal.h b/src/light/light_sensor_hal.h
index 89a88f1..560cb87 100755
--- a/src/light/light_sensor_hal.h
+++ b/src/light/light_sensor_hal.h
@@ -21,17 +21,14 @@
#define _LIGHT_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class light_sensor_hal : public sensor_hal
{
public:
light_sensor_hal();
virtual ~light_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long val);
@@ -39,9 +36,9 @@ public:
virtual int get_sensor_data(sensor_data_t &data);
bool get_properties(sensor_properties_s &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
unsigned long m_polling_interval;
@@ -50,9 +47,9 @@ private:
unsigned long long m_fired_time;
int m_node_handle;
- string m_enable_node;
- string m_data_node;
- string m_interval_node;
+ std::string m_enable_node;
+ std::string m_data_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/linear_accel/linear_accel_sensor.cpp b/src/linear_accel/linear_accel_sensor.cpp
index 6e21ab2..fc2a1bb 100755
--- a/src/linear_accel/linear_accel_sensor.cpp
+++ b/src/linear_accel/linear_accel_sensor.cpp
@@ -31,6 +31,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "LINEAR_ACCEL_SENSOR"
#define SENSOR_TYPE_LINEAR_ACCEL "LINEAR_ACCEL"
#define SENSOR_TYPE_GRAVITY "GRAVITY"
@@ -78,7 +81,7 @@ linear_accel_sensor::linear_accel_sensor()
m_enable_linear_accel = 0;
register_supported_event(LINEAR_ACCEL_RAW_DATA_EVENT);
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -195,9 +198,9 @@ bool linear_accel_sensor::init()
return true;
}
-sensor_type_t linear_accel_sensor::get_type(void)
+void linear_accel_sensor::get_types(vector &types)
{
- return LINEAR_ACCEL_SENSOR;
+ types.push_back(LINEAR_ACCEL_SENSOR);
}
bool linear_accel_sensor::on_start(void)
@@ -416,9 +419,9 @@ int linear_accel_sensor::get_sensor_data(const unsigned int event_type, sensor_d
return 0;
}
-bool linear_accel_sensor::get_properties(sensor_properties_s &properties)
+bool linear_accel_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
- m_accel_sensor->get_properties(properties);
+ m_accel_sensor->get_properties(ACCELEROMETER_SENSOR, properties);
properties.name = "Linear Acceleration Sensor";
properties.vendor = m_vendor;
properties.resolution = 0.000001;
diff --git a/src/linear_accel/linear_accel_sensor.h b/src/linear_accel/linear_accel_sensor.h
index e8f8395..e201b93 100755
--- a/src/linear_accel/linear_accel_sensor.h
+++ b/src/linear_accel/linear_accel_sensor.h
@@ -30,15 +30,15 @@ public:
virtual ~linear_accel_sensor();
bool init();
- sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t& event, std::vector &outs);
bool add_interval(int client_id, unsigned int interval);
bool delete_interval(int client_id);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
- bool get_properties(sensor_properties_s &properties);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_base *m_accel_sensor;
sensor_base *m_gyro_sensor;
@@ -56,9 +56,9 @@ private:
unsigned int m_enable_linear_accel;
- string m_vendor;
- string m_raw_data_unit;
- string m_orientation_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
+ std::string m_orientation_data_unit;
int m_default_sampling_time;
float m_accel_static_bias[3];
int m_accel_rotation_direction_compensation[3];
diff --git a/src/orientation/orientation_sensor.cpp b/src/orientation/orientation_sensor.cpp
index 44d44bd..e560007 100755
--- a/src/orientation/orientation_sensor.cpp
+++ b/src/orientation/orientation_sensor.cpp
@@ -32,6 +32,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "ORIENTATION_SENSOR"
#define SENSOR_TYPE_ORIENTATION "ORIENTATION"
@@ -61,7 +64,7 @@ orientation_sensor::orientation_sensor()
{
cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -139,9 +142,9 @@ bool orientation_sensor::init(void)
return true;
}
-sensor_type_t orientation_sensor::get_type(void)
+void orientation_sensor::get_types(vector &types)
{
- return ORIENTATION_SENSOR;
+ types.push_back(ORIENTATION_SENSOR);
}
bool orientation_sensor::on_start(void)
@@ -314,7 +317,7 @@ int orientation_sensor::get_sensor_data(const unsigned int event_type, sensor_da
return 0;
}
-bool orientation_sensor::get_properties(sensor_properties_s &properties)
+bool orientation_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
if(m_raw_data_unit == "DEGREES") {
properties.min_range = -180;
diff --git a/src/orientation/orientation_sensor.h b/src/orientation/orientation_sensor.h
index 86c39f9..070a21b 100755
--- a/src/orientation/orientation_sensor.h
+++ b/src/orientation/orientation_sensor.h
@@ -31,12 +31,12 @@ public:
bool init(void);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t& event, std::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);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+ virtual void get_types(std::vector &types);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
@@ -55,8 +55,8 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
int m_azimuth_rotation_compensation;
int m_pitch_rotation_compensation;
diff --git a/src/pressure/pressure_sensor.cpp b/src/pressure/pressure_sensor.cpp
index 407c6f9..0559021 100755
--- a/src/pressure/pressure_sensor.cpp
+++ b/src/pressure/pressure_sensor.cpp
@@ -26,6 +26,8 @@
using std::bind1st;
using std::mem_fun;
+using std::string;
+using std::vector;
#define SENSOR_NAME "PRESSURE_SENSOR"
#define SENSOR_TYPE_PRESSURE "PRESSURE"
@@ -55,7 +57,7 @@ pressure_sensor::~pressure_sensor()
bool pressure_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(PRESSURE_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_PRESSURE);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -100,9 +102,9 @@ bool pressure_sensor::init()
return true;
}
-sensor_type_t pressure_sensor::get_type(void)
+void pressure_sensor::get_types(vector &types)
{
- return PRESSURE_SENSOR;
+ types.push_back(PRESSURE_SENSOR);
}
bool pressure_sensor::working(void *inst)
@@ -152,7 +154,7 @@ bool pressure_sensor::on_stop(void)
return stop_poll();
}
-bool pressure_sensor::get_properties(sensor_properties_s &properties)
+bool pressure_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/pressure/pressure_sensor.h b/src/pressure/pressure_sensor.h
index 3430dfb..e17f587 100755
--- a/src/pressure/pressure_sensor.h
+++ b/src/pressure/pressure_sensor.h
@@ -31,13 +31,13 @@ public:
virtual ~pressure_sensor();
bool init();
- sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_s &properties);
int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_hal *m_sensor_hal;
diff --git a/src/pressure/pressure_sensor_hal.cpp b/src/pressure/pressure_sensor_hal.cpp
index 33aa181..544240f 100755
--- a/src/pressure/pressure_sensor_hal.cpp
+++ b/src/pressure/pressure_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define SENSOR_TYPE_PRESSURE "PRESSURE"
#define ELEMENT_NAME "NAME"
@@ -151,9 +152,9 @@ string pressure_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t pressure_sensor_hal::get_type(void)
+sensor_hal_type_t pressure_sensor_hal::get_type(void)
{
- return PRESSURE_SENSOR;
+ return SENSOR_HAL_TYPE_PRESSURE;
}
bool pressure_sensor_hal::enable(void)
diff --git a/src/pressure/pressure_sensor_hal.h b/src/pressure/pressure_sensor_hal.h
index 04412fc..07e8e1b 100755
--- a/src/pressure/pressure_sensor_hal.h
+++ b/src/pressure/pressure_sensor_hal.h
@@ -21,17 +21,14 @@
#define _PRESSURE_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class pressure_sensor_hal : public sensor_hal
{
public:
pressure_sensor_hal();
virtual ~pressure_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
@@ -40,9 +37,9 @@ public:
virtual int get_sensor_data(sensor_data_t &data);
virtual bool get_properties(sensor_properties_s &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
float m_pressure;
float m_sea_level_pressure;
@@ -60,9 +57,9 @@ private:
unsigned long long m_fired_time;
int m_node_handle;
- string m_enable_node;
- string m_data_node;
- string m_interval_node;
+ std::string m_enable_node;
+ std::string m_data_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/proxi/proxi_sensor.cpp b/src/proxi/proxi_sensor.cpp
index 65809b9..05352d1 100755
--- a/src/proxi/proxi_sensor.cpp
+++ b/src/proxi/proxi_sensor.cpp
@@ -22,6 +22,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "PROXI_SENSOR"
proxi_sensor::proxi_sensor()
@@ -44,7 +47,7 @@ proxi_sensor::~proxi_sensor()
bool proxi_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(PROXIMITY_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_PROXIMITY);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -55,9 +58,9 @@ bool proxi_sensor::init()
return true;
}
-sensor_type_t proxi_sensor::get_type(void)
+void proxi_sensor::get_types(vector &types)
{
- return PROXIMITY_SENSOR;
+ types.push_back(PROXIMITY_SENSOR);
}
bool proxi_sensor::working(void *inst)
@@ -122,7 +125,7 @@ bool proxi_sensor::on_stop(void)
return stop_poll();
}
-bool proxi_sensor::get_properties(sensor_properties_s &properties)
+bool proxi_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
m_sensor_hal->get_properties(properties);
diff --git a/src/proxi/proxi_sensor.h b/src/proxi/proxi_sensor.h
index 8584f2d..9c3a009 100755
--- a/src/proxi/proxi_sensor.h
+++ b/src/proxi/proxi_sensor.h
@@ -30,12 +30,12 @@ public:
virtual ~proxi_sensor();
bool init();
- sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
- virtual bool get_properties(sensor_properties_s &properties);
int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_hal *m_sensor_hal;
diff --git a/src/proxi/proxi_sensor_hal.cpp b/src/proxi/proxi_sensor_hal.cpp
index aee3f7a..7358b08 100755
--- a/src/proxi/proxi_sensor_hal.cpp
+++ b/src/proxi/proxi_sensor_hal.cpp
@@ -25,6 +25,7 @@
#include
#include
+using std::string;
using std::ifstream;
#define SENSOR_TYPE_PROXI "PROXI"
@@ -107,9 +108,9 @@ string proxi_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t proxi_sensor_hal::get_type(void)
+sensor_hal_type_t proxi_sensor_hal::get_type(void)
{
- return PROXIMITY_SENSOR;
+ return SENSOR_HAL_TYPE_PROXIMITY;
}
bool proxi_sensor_hal::enable(void)
diff --git a/src/proxi/proxi_sensor_hal.h b/src/proxi/proxi_sensor_hal.h
index 3b96b04..a1cd3a1 100755
--- a/src/proxi/proxi_sensor_hal.h
+++ b/src/proxi/proxi_sensor_hal.h
@@ -21,9 +21,6 @@
#define _PROXI_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class proxi_sensor_hal : public sensor_hal
{
@@ -43,20 +40,20 @@ public:
proxi_sensor_hal();
virtual ~proxi_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool is_data_ready(bool wait);
virtual int get_sensor_data(sensor_data_t &data);
virtual bool get_properties(sensor_properties_s &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
- string m_enable_node;
- string m_data_node;
+ std::string m_enable_node;
+ std::string m_data_node;
unsigned int m_state;
diff --git a/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp
index fa359a0..f491038 100755
--- a/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp
+++ b/src/rotation_vector/gaming_rv/gaming_rv_sensor.cpp
@@ -32,6 +32,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "GAMING_RV_SENSOR"
#define SENSOR_TYPE_GAMING_RV "GAMING_ROTATION_VECTOR"
@@ -69,7 +72,7 @@ gaming_rv_sensor::gaming_rv_sensor()
{
cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -161,9 +164,9 @@ bool gaming_rv_sensor::init()
return true;
}
-sensor_type_t gaming_rv_sensor::get_type(void)
+void gaming_rv_sensor::get_types(vector &types)
{
- return GAMING_RV_SENSOR;
+ types.push_back(GAMING_RV_SENSOR);
}
bool gaming_rv_sensor::on_start(void)
@@ -316,7 +319,7 @@ int gaming_rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &da
return 0;
}
-bool gaming_rv_sensor::get_properties(sensor_properties_s &properties)
+bool gaming_rv_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.vendor = m_vendor;
properties.name = SENSOR_NAME;
diff --git a/src/rotation_vector/gaming_rv/gaming_rv_sensor.h b/src/rotation_vector/gaming_rv/gaming_rv_sensor.h
index db9dd47..1b748b1 100755
--- a/src/rotation_vector/gaming_rv/gaming_rv_sensor.h
+++ b/src/rotation_vector/gaming_rv/gaming_rv_sensor.h
@@ -31,12 +31,12 @@ public:
bool init(void);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t &event, std::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);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+ virtual void get_types(std::vector &types);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
@@ -58,8 +58,8 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
float m_accel_static_bias[3];
diff --git a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp
index c3e8a26..f4aafe8 100755
--- a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp
+++ b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.cpp
@@ -32,6 +32,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "GEOMAGNETIC_RV_SENSOR"
#define SENSOR_TYPE_GEOMAGNETIC_RV "GEOMAGNETIC_ROTATION_VECTOR"
@@ -50,7 +53,7 @@ geomagnetic_rv_sensor::geomagnetic_rv_sensor()
{
cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -99,9 +102,9 @@ bool geomagnetic_rv_sensor::init()
return true;
}
-sensor_type_t geomagnetic_rv_sensor::get_type(void)
+void geomagnetic_rv_sensor::get_types(vector &types)
{
- return GEOMAGNETIC_RV_SENSOR;
+ types.push_back(GEOMAGNETIC_RV_SENSOR);
}
bool geomagnetic_rv_sensor::on_start(void)
@@ -227,7 +230,7 @@ int geomagnetic_rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_
return 0;
}
-bool geomagnetic_rv_sensor::get_properties(sensor_properties_s &properties)
+bool geomagnetic_rv_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.vendor = m_vendor;
properties.name = SENSOR_NAME;
diff --git a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.h b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.h
index c87d252..f5ad4b7 100755
--- a/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.h
+++ b/src/rotation_vector/geomagnetic_rv/geomagnetic_rv_sensor.h
@@ -31,12 +31,12 @@ public:
bool init(void);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t &event, std::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);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+ virtual void get_types(std::vector &types);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
@@ -53,8 +53,8 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
bool on_start(void);
diff --git a/src/rotation_vector/rv/rv_sensor.cpp b/src/rotation_vector/rv/rv_sensor.cpp
index bcf20e2..e42716b 100755
--- a/src/rotation_vector/rv/rv_sensor.cpp
+++ b/src/rotation_vector/rv/rv_sensor.cpp
@@ -32,6 +32,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "RV_SENSOR"
#define SENSOR_TYPE_RV "ROTATION_VECTOR"
@@ -63,7 +66,7 @@ rv_sensor::rv_sensor()
cvirtual_sensor_config &config = cvirtual_sensor_config::get_instance();
// Will check if fusion_sensor is in the list of hal sensors.
- sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(FUSION_SENSOR);
+ sensor_hal *fusion_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_FUSION);
if (!fusion_sensor_hal)
m_hardware_fusion = false;
else
@@ -114,9 +117,9 @@ bool rv_sensor::init()
return true;
}
-sensor_type_t rv_sensor::get_type(void)
+void rv_sensor::get_types(vector &types)
{
- return ROTATION_VECTOR_SENSOR;
+ types.push_back(ROTATION_VECTOR_SENSOR);
}
bool rv_sensor::on_start(void)
@@ -249,7 +252,7 @@ int rv_sensor::get_sensor_data(unsigned int event_type, sensor_data_t &data)
return 0;
}
-bool rv_sensor::get_properties(sensor_properties_s &properties)
+bool rv_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
properties.vendor = m_vendor;
properties.name = SENSOR_NAME;
diff --git a/src/rotation_vector/rv/rv_sensor.h b/src/rotation_vector/rv/rv_sensor.h
index 3e5de3d..00f9761 100755
--- a/src/rotation_vector/rv/rv_sensor.h
+++ b/src/rotation_vector/rv/rv_sensor.h
@@ -31,12 +31,12 @@ public:
bool init(void);
- void synthesize(const sensor_event_t &event, vector &outs);
+ void synthesize(const sensor_event_t &event, std::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);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
+ virtual void get_types(std::vector &types);
int get_sensor_data(const unsigned int event_type, sensor_data_t &data);
@@ -60,8 +60,8 @@ private:
unsigned long long m_time;
unsigned int m_interval;
- string m_vendor;
- string m_raw_data_unit;
+ std::string m_vendor;
+ std::string m_raw_data_unit;
int m_default_sampling_time;
bool on_start(void);
diff --git a/src/rotation_vector/rv_raw/rv_raw_sensor.cpp b/src/rotation_vector/rv_raw/rv_raw_sensor.cpp
index 3e017ce..f1b3a2b 100755
--- a/src/rotation_vector/rv_raw/rv_raw_sensor.cpp
+++ b/src/rotation_vector/rv_raw/rv_raw_sensor.cpp
@@ -23,6 +23,9 @@
#include
#include
+using std::string;
+using std::vector;
+
#define SENSOR_NAME "RV_RAW_SENSOR"
rv_raw_sensor::rv_raw_sensor()
@@ -43,7 +46,7 @@ rv_raw_sensor::~rv_raw_sensor()
bool rv_raw_sensor::init()
{
- m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(RV_RAW_SENSOR);
+ m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(SENSOR_HAL_TYPE_RV_RAW);
if (!m_sensor_hal) {
ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
@@ -64,9 +67,9 @@ bool rv_raw_sensor::init()
return true;
}
-sensor_type_t rv_raw_sensor::get_type(void)
+void rv_raw_sensor::get_types(vector &types)
{
- return RV_RAW_SENSOR;
+ types.push_back(RV_RAW_SENSOR);
}
bool rv_raw_sensor::working(void *inst)
@@ -116,7 +119,7 @@ bool rv_raw_sensor::on_stop(void)
return stop_poll();
}
-bool rv_raw_sensor::get_properties(sensor_properties_t &properties)
+bool rv_raw_sensor::get_properties(sensor_type_t sensor_type, sensor_properties_s &properties)
{
return m_sensor_hal->get_properties(properties);
}
diff --git a/src/rotation_vector/rv_raw/rv_raw_sensor.h b/src/rotation_vector/rv_raw/rv_raw_sensor.h
index 4d04a4b..f55d0a1 100755
--- a/src/rotation_vector/rv_raw/rv_raw_sensor.h
+++ b/src/rotation_vector/rv_raw/rv_raw_sensor.h
@@ -31,13 +31,13 @@ public:
virtual ~rv_raw_sensor();
virtual bool init();
- virtual sensor_type_t get_type(void);
+ virtual void get_types(std::vector &types);
static bool working(void *inst);
virtual bool set_interval(unsigned long interval);
- virtual bool get_properties(sensor_properties_t &properties);
int get_sensor_data(unsigned int type, sensor_data_t &data);
+ virtual bool get_properties(sensor_type_t sensor_type, sensor_properties_s &properties);
private:
sensor_hal *m_sensor_hal;
diff --git a/src/rotation_vector/rv_raw/rv_raw_sensor_hal.cpp b/src/rotation_vector/rv_raw/rv_raw_sensor_hal.cpp
index 261a81e..11eb5c4 100755
--- a/src/rotation_vector/rv_raw/rv_raw_sensor_hal.cpp
+++ b/src/rotation_vector/rv_raw/rv_raw_sensor_hal.cpp
@@ -26,6 +26,7 @@
#include
using std::ifstream;
+using std::string;
#define SENSOR_TYPE_RV_RAW "ROTATION_VECTOR"
#define ELEMENT_NAME "NAME"
@@ -108,9 +109,9 @@ string rv_raw_sensor_hal::get_model_id(void)
return m_model_id;
}
-sensor_type_t rv_raw_sensor_hal::get_type(void)
+sensor_hal_type_t rv_raw_sensor_hal::get_type(void)
{
- return RV_RAW_SENSOR;
+ return SENSOR_HAL_TYPE_RV_RAW;
}
bool rv_raw_sensor_hal::enable(void)
diff --git a/src/rotation_vector/rv_raw/rv_raw_sensor_hal.h b/src/rotation_vector/rv_raw/rv_raw_sensor_hal.h
index 565b509..382f454 100755
--- a/src/rotation_vector/rv_raw/rv_raw_sensor_hal.h
+++ b/src/rotation_vector/rv_raw/rv_raw_sensor_hal.h
@@ -21,17 +21,14 @@
#define _RV_RAW_SENSOR_HAL_H_
#include
-#include
-
-using std::string;
class rv_raw_sensor_hal : public sensor_hal
{
public:
rv_raw_sensor_hal();
virtual ~rv_raw_sensor_hal();
- string get_model_id(void);
- sensor_type_t get_type(void);
+ std::string get_model_id(void);
+ sensor_hal_type_t get_type(void);
bool enable(void);
bool disable(void);
bool set_interval(unsigned long val);
@@ -39,9 +36,9 @@ public:
virtual int get_sensor_data(sensor_data_t &data);
virtual bool get_properties(sensor_properties_t &properties);
private:
- string m_model_id;
- string m_vendor;
- string m_chip_name;
+ std::string m_model_id;
+ std::string m_vendor;
+ std::string m_chip_name;
unsigned long m_polling_interval;
@@ -54,9 +51,9 @@ private:
unsigned long long m_fired_time;
int m_node_handle;
- string m_enable_node;
- string m_data_node;
- string m_interval_node;
+ std::string m_enable_node;
+ std::string m_data_node;
+ std::string m_interval_node;
bool m_sensorhub_controlled;
diff --git a/src/server/command_worker.cpp b/src/server/command_worker.cpp
old mode 100755
new mode 100644
index 09e633f..e88c897
--- a/src/server/command_worker.cpp
+++ b/src/server/command_worker.cpp
@@ -28,11 +28,13 @@
#include
#include
#include
+#include
#include
#include
#include
using std::string;
+using std::vector;
using std::make_pair;
using std::set;
@@ -47,6 +49,7 @@ command_worker::command_worker(const csocket& socket)
, m_permission(SENSOR_PERMISSION_NONE)
, m_socket(socket)
, m_module(NULL)
+, m_sensor_id(UNKNOWN_SENSOR)
{
static bool init = false;
@@ -84,8 +87,8 @@ void command_worker::init_cmd_handlers(void)
m_cmd_handlers[CMD_REG] = &command_worker::cmd_register_event;
m_cmd_handlers[CMD_UNREG] = &command_worker::cmd_unregister_event;
m_cmd_handlers[CMD_SET_OPTION] = &command_worker::cmd_set_option;
- m_cmd_handlers[CMD_SET_INTERVAL] = &command_worker::cmd_set_interval;
- m_cmd_handlers[CMD_UNSET_INTERVAL] = &command_worker::cmd_unset_interval;
+ m_cmd_handlers[CMD_SET_BATCH] = &command_worker::cmd_set_batch;
+ m_cmd_handlers[CMD_UNSET_BATCH] = &command_worker::cmd_unset_batch;
m_cmd_handlers[CMD_SET_COMMAND] = &command_worker::cmd_set_command;
m_cmd_handlers[CMD_GET_DATA] = &command_worker::cmd_get_data;
m_cmd_handlers[CMD_SEND_SENSORHUB_DATA] = &command_worker::cmd_send_sensorhub_data;
@@ -147,17 +150,26 @@ void command_worker::make_sensor_raw_data_map(void)
sensors = sensor_plugin_loader::get_instance().get_sensors(ALL_SENSOR);
+ std::sort(sensors.begin(), sensors.end());
+ auto last = std::unique(sensors.begin(), sensors.end());
+
auto it_sensor = sensors.begin();
- while (it_sensor != sensors.end()) {
- (*it_sensor)->get_sensor_info(info);
- permission = (*it_sensor)->get_permission();
+ while (it_sensor != last) {
+
+ vector types;
+ (*it_sensor)->get_types(types);
- sensor_raw_data_map::iterator it_sensor_raw_data;
- it_sensor_raw_data = m_sensor_raw_data_map.insert(std::make_pair(permission, raw_data_t()));
+ for (unsigned int i = 0; i < types.size(); ++i) {
+ (*it_sensor)->get_sensor_info(types[i], info);
+ permission = (*it_sensor)->get_permission();
- info.get_raw_data(it_sensor_raw_data->second);
- info.clear();
+ sensor_raw_data_map::iterator it_sensor_raw_data;
+ it_sensor_raw_data = m_sensor_raw_data_map.insert(std::make_pair(permission, raw_data_t()));
+
+ info.get_raw_data(it_sensor_raw_data->second);
+ info.clear();
+ }
++it_sensor;
}
}
@@ -213,7 +225,7 @@ bool command_worker::stopped(void *ctx)
if ((inst->m_module) && (inst->m_client_id != CLIENT_ID_INVALID)) {
- get_client_info_manager().get_registered_events(inst->m_client_id, inst->m_module->get_id(), event_vec);
+ get_client_info_manager().get_registered_events(inst->m_client_id, inst->m_sensor_id, event_vec);
auto it_event = event_vec.begin();
@@ -225,16 +237,16 @@ bool command_worker::stopped(void *ctx)
++it_event;
}
- if (get_client_info_manager().is_started(inst->m_client_id, inst->m_module->get_id())) {
+ if (get_client_info_manager().is_started(inst->m_client_id, inst->m_sensor_id)) {
WARN("Does not receive cmd_stop before connection broken for [%s]!!", inst->m_module->get_name());
inst->m_module->delete_interval(inst->m_client_id, false);
inst->m_module->stop();
}
- if (inst->m_module->get_id()) {
- if (get_client_info_manager().has_sensor_record(inst->m_client_id, inst->m_module->get_id())) {
- INFO("Removing sensor[0x%x] record for client_id[%d]", inst->m_module->get_id(), inst->m_client_id);
- get_client_info_manager().remove_sensor_record(inst->m_client_id, inst->m_module->get_id());
+ if (inst->m_sensor_id) {
+ if (get_client_info_manager().has_sensor_record(inst->m_client_id, inst->m_sensor_id)) {
+ INFO("Removing sensor[0x%x] record for client_id[%d]", inst->m_sensor_id, inst->m_client_id);
+ get_client_info_manager().remove_sensor_record(inst->m_client_id, inst->m_sensor_id);
}
}
}
@@ -356,12 +368,20 @@ bool command_worker::cmd_get_id(void *payload)
{
cmd_get_id_t *cmd;
int client_id;
+ struct ucred cr;
+ socklen_t opt_len = sizeof(cr);
DBG("CMD_GET_ID Handler invoked\n");
cmd = (cmd_get_id_t*)payload;
+ if (getsockopt(m_socket.get_socket_fd(), SOL_SOCKET, SO_PEERCRED, &cr, &opt_len)) {
+ ERR("Failed to get socket option with SO_PEERCRED");
+ return false;
+ }
+
client_id = get_client_info_manager().create_client_record();
- get_client_info_manager().set_client_info(client_id, cmd->pid);
+
+ get_client_info_manager().set_client_info(client_id, cr.pid, cmd->name);
m_permission = get_permission();
get_client_info_manager().set_permission(client_id, m_permission);
@@ -393,6 +413,7 @@ bool command_worker::cmd_hello(void *payload)
DBG("CMD_HELLO Handler invoked\n");
cmd = (cmd_hello_t*)payload;
+ m_sensor_id = cmd->sensor;
m_client_id = cmd->client_id;
if (m_permission == SENSOR_PERMISSION_NONE)
@@ -410,14 +431,14 @@ bool command_worker::cmd_hello(void *payload)
}
if (!is_permission_allowed()) {
- ERR("Permission denied to connect sensor[0x%x] for client [%d]", m_module->get_id(), m_client_id);
+ ERR("Permission denied to connect sensor[0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
goto out;
}
- DBG("Hello sensor [0x%x], client id [%d]", m_module->get_id(), m_client_id);
- get_client_info_manager().create_sensor_record(m_client_id, m_module->get_id());
- INFO("New sensor record created for sensor [0x%x], sensor name [%s] on client id [%d]\n", m_module->get_id(), m_module->get_name(), m_client_id);
+ DBG("Hello sensor [0x%x], client id [%d]", m_sensor_id, m_client_id);
+ get_client_info_manager().create_sensor_record(m_client_id, m_sensor_id);
+ INFO("New sensor record created for sensor [0x%x], sensor name [%s] on client id [%d]\n", m_sensor_id, m_module->get_name(), m_client_id);
ret_value = OP_SUCCESS;
out:
if (!send_cmd_done(ret_value))
@@ -431,14 +452,14 @@ bool command_worker::cmd_byebye(void *payload)
long ret_value = OP_ERROR;
if (!is_permission_allowed()) {
- ERR("Permission denied to stop sensor[0x%x] for client [%d]", m_module? m_module->get_id() : -1, m_client_id);
+ ERR("Permission denied to stop sensor[0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
goto out;
}
- DBG("CMD_BYEBYE for client [%d], sensor [0x%x]", m_client_id, m_module->get_id());
+ DBG("CMD_BYEBYE for client [%d], sensor [0x%x]", m_client_id, m_sensor_id);
- if (!get_client_info_manager().remove_sensor_record(m_client_id, m_module->get_id())) {
+ if (!get_client_info_manager().remove_sensor_record(m_client_id, m_sensor_id)) {
ERR("Error removing sensor_record for client [%d]", m_client_id);
ret_value = OP_ERROR;
goto out;
@@ -462,24 +483,24 @@ bool command_worker::cmd_start(void *payload)
long ret_value = OP_ERROR;
if (!is_permission_allowed()) {
- ERR("Permission denied to start sensor[0x%x] for client [%d]", m_module? m_module->get_id() : -1, m_client_id);
+ ERR("Permission denied to start sensor[0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
goto out;
}
- DBG("START Sensor [0x%x], called from client [%d]", m_module->get_id(), m_client_id);
+ DBG("START Sensor [0x%x], called from client [%d]", m_sensor_id, m_client_id);
if (m_module->start()) {
- get_client_info_manager().set_start(m_client_id, m_module->get_id(), true);
+ get_client_info_manager().set_start(m_client_id, m_sensor_id, true);
/*
* Rotation could be changed even LCD is off by pop sync rotation
* and a client listening rotation event with always-on option.
* To reflect the last rotation state, request it to event dispatcher.
*/
- get_event_dispathcher().request_last_event(m_client_id, m_module->get_id());
+ get_event_dispathcher().request_last_event(m_client_id, m_sensor_id);
ret_value = OP_SUCCESS;
} else {
- ERR("Failed to start sensor [0x%x] for client [%d]", m_module->get_id(), m_client_id);
+ ERR("Failed to start sensor [0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
}
@@ -495,18 +516,18 @@ bool command_worker::cmd_stop(void *payload)
long ret_value = OP_ERROR;
if (!is_permission_allowed()) {
- ERR("Permission denied to stop sensor[0x%x] for client [%d]", m_module? m_module->get_id() : -1, m_client_id);
+ ERR("Permission denied to stop sensor[0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
goto out;
}
- DBG("STOP Sensor [0x%x], called from client [%d]", m_module->get_id(), m_client_id);
+ DBG("STOP Sensor [0x%x], called from client [%d]", m_sensor_id, m_client_id);
if (m_module->stop()) {
- get_client_info_manager().set_start(m_client_id, m_module->get_id(), false);
+ get_client_info_manager().set_start(m_client_id, m_sensor_id, false);
ret_value = OP_SUCCESS;
} else {
- ERR("Failed to stop sensor [0x%x] for client [%d]", m_module->get_id(), m_client_id);
+ ERR("Failed to stop sensor [0x%x] for client [%d]", m_sensor_id, m_client_id);
ret_value = OP_ERROR;
}
@@ -531,7 +552,7 @@ bool command_worker::cmd_register_event(void *payload)
goto out;
}
- if (!get_client_info_manager().register_event(m_client_id, m_module? m_module->get_id() : -1, cmd->event_type)) {
+ if (!get_client_info_manager().register_event(m_client_id, m_sensor_id, cmd->event_type)) {
INFO("Failed to register event [0x%x] for client [%d] to client info manager",
cmd->event_type, m_client_id);
ret_value = OP_ERROR;
@@ -565,7 +586,7 @@ bool command_worker::cmd_unregister_event(void *payload)
goto out;
}
- if (!get_client_info_manager().unregister_event(m_client_id, m_module->get_id(), cmd->event_type)) {
+ if (!get_client_info_manager().unregister_event(m_client_id, m_sensor_id, cmd->event_type)) {
ERR("Failed to unregister event [0x%x] for client [%d] from client info manager",
cmd->event_type, m_client_id);
ret_value = OP_ERROR;
@@ -590,30 +611,30 @@ out:
return true;
}
-bool command_worker::cmd_set_interval(void *payload)
+bool command_worker::cmd_set_batch(void *payload)
{
- cmd_set_interval_t *cmd;
+ cmd_set_batch_t *cmd;
long ret_value = OP_ERROR;
- cmd = (cmd_set_interval_t*)payload;
+ cmd = (cmd_set_batch_t*)payload;
if (!is_permission_allowed()) {
- ERR("Permission denied to register interval for client [%d], for sensor [0x%x] with interval [%d] to client info manager",
- m_client_id, m_module? m_module->get_id() : -1, cmd->interval);
+ ERR("Permission denied to set batch for client [%d], for sensor [0x%x] with batch [%d, %d] to client info manager",
+ m_client_id, m_sensor_id, cmd->interval, cmd->latency);
ret_value = OP_ERROR;
goto out;
}
- if (!get_client_info_manager().set_interval(m_client_id, m_module->get_id(), cmd->interval)) {
- ERR("Failed to register interval for client [%d], for sensor [0x%x] with interval [%d] to client info manager",
- m_client_id, m_module->get_id(), cmd->interval);
+ if (!get_client_info_manager().set_batch(m_client_id, m_sensor_id, cmd->interval, cmd->latency)) {
+ ERR("Failed to set batch for client [%d], for sensor [0x%x] with batch [%d, %d] to client info manager",
+ m_client_id, m_sensor_id, cmd->interval, cmd->latency);
ret_value = OP_ERROR;
goto out;
}
if (!m_module->add_interval(m_client_id, cmd->interval, false)) {
ERR("Failed to set interval for client [%d], for sensor [0x%x] with interval [%d]",
- m_client_id, m_module->get_id(), cmd->interval);
+ m_client_id, m_sensor_id, cmd->interval);
ret_value = OP_ERROR;
goto out;
}
@@ -627,20 +648,20 @@ out:
return true;
}
-bool command_worker::cmd_unset_interval(void *payload)
+bool command_worker::cmd_unset_batch(void *payload)
{
long ret_value = OP_ERROR;
if (!is_permission_allowed()) {
- ERR("Permission denied to unregister interval for client [%d], for sensor [0x%x] to client info manager",
- m_client_id, m_module? m_module->get_id() : -1);
+ ERR("Permission denied to unset batch for client [%d], for sensor [0x%x] to client info manager",
+ m_client_id, m_sensor_id);
ret_value = OP_ERROR;
goto out;
}
- if (!get_client_info_manager().set_interval(m_client_id, m_module->get_id(), 0)) {
- ERR("Failed to unregister interval for client [%d], for sensor [0x%x] to client info manager",
- m_client_id, m_module->get_id());
+ if (!get_client_info_manager().set_batch(m_client_id, m_sensor_id, 0, 0)) {
+ ERR("Failed to unset batch for client [%d], for sensor [0x%x] to client info manager",
+ m_client_id, m_sensor_id);
ret_value = OP_ERROR;
goto out;
}
@@ -669,14 +690,14 @@ bool command_worker::cmd_set_option(void *payload)
if (!is_permission_allowed()) {
ERR("Permission denied to set interval for client [%d], for sensor [0x%x] with option [%d] to client info manager",
- m_client_id, m_module? m_module->get_id() : -1, cmd->option);
+ m_client_id, m_sensor_id, cmd->option);
ret_value = OP_ERROR;
goto out;
}
- if (!get_client_info_manager().set_option(m_client_id, m_module->get_id(), cmd->option)) {
+ if (!get_client_info_manager().set_option(m_client_id, m_sensor_id, cmd->option)) {
ERR("Failed to set option for client [%d], for sensor [0x%x] with option [%d] to client info manager",
- m_client_id, m_module->get_id(), cmd->option);
+ m_client_id, m_sensor_id, cmd->option);
ret_value = OP_ERROR;
goto out;
}
@@ -700,7 +721,7 @@ bool command_worker::cmd_set_command(void *payload)
if (!is_permission_allowed()) {
ERR("Permission denied to set command for client [%d], for sensor [0x%x] with cmd [%d]",
- m_client_id, m_module? m_module->get_id() : -1, cmd->cmd);
+ m_client_id, m_sensor_id, cmd->cmd);
ret_value = OP_ERROR;
goto out;
}
@@ -729,7 +750,7 @@ bool command_worker::cmd_get_data(void *payload)
if (!is_permission_allowed()) {
ERR("Permission denied to get data for client [%d], for sensor [0x%x]",
- m_client_id, m_module? m_module->get_id() : -1);
+ m_client_id, m_sensor_id);
state = OP_ERROR;
goto out;
}
@@ -744,7 +765,7 @@ bool command_worker::cmd_get_data(void *payload)
// 5. repeat 2 ~ 4 operations RETRY_CNT times
// 6. reverting back to original interval
if (!state && !data.timestamp) {
- const int RETRY_CNT = 3;
+ const int RETRY_CNT = 5;
const unsigned long long INIT_WAIT_TIME = 20000; //20ms
const unsigned long WAIT_TIME = 100000; //100ms
int retry = 0;
@@ -757,7 +778,7 @@ bool command_worker::cmd_get_data(void *payload)
}
while (!state && !data.timestamp && (retry++ < RETRY_CNT)) {
- INFO("Wait sensor[0x%x] data updated for client [%d] #%d", m_module->get_id(), m_client_id, retry);
+ INFO("Wait sensor[0x%x] data updated for client [%d] #%d", m_sensor_id, m_client_id, retry);
usleep((retry == 1) ? INIT_WAIT_TIME : WAIT_TIME);
state = m_module->get_sensor_data(cmd->type, data);
}
@@ -771,7 +792,7 @@ bool command_worker::cmd_get_data(void *payload)
if (state) {
ERR("Failed to get data for client [%d], for sensor [0x%x]",
- m_client_id, m_module->get_id());
+ m_client_id, m_sensor_id);
}
out:
@@ -791,7 +812,7 @@ bool command_worker::cmd_send_sensorhub_data(void *payload)
if (!is_permission_allowed()) {
ERR("Permission denied to send sensorhub_data for client [%d], for sensor [0x%x]",
- m_client_id, m_module? m_module->get_id() : -1);
+ m_client_id, m_sensor_id);
ret_value = OP_ERROR;
goto out;
}
diff --git a/src/server/command_worker.h b/src/server/command_worker.h
old mode 100755
new mode 100644
index 33f1b0a..89796f5
--- a/src/server/command_worker.h
+++ b/src/server/command_worker.h
@@ -26,9 +26,7 @@
#include
#include