From 1c277861c8fdfb367a71485ba1b584cfe581a493 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Tue, 2 Feb 2016 15:28:03 +0900 Subject: [PATCH] sensord: remove vector in sensor HAL interface * instead of using std::vector, use point array for interface Change-Id: Ib909856b315da546f66b206bbfedb4b01af4b64d Signed-off-by: kibak.yoon --- src/server/physical_sensor.cpp | 9 ++++++++- src/server/sensor_loader.cpp.in | 26 ++++++++++++++++---------- src/server/sensor_loader.h | 4 ++-- src/shared/sensor_hal.h | 19 +++++++------------ 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/server/physical_sensor.cpp b/src/server/physical_sensor.cpp index 7d6de5a..fc0b3db 100644 --- a/src/server/physical_sensor.cpp +++ b/src/server/physical_sensor.cpp @@ -78,11 +78,18 @@ int physical_sensor::get_poll_fd() bool physical_sensor::read_fd(std::vector &ids) { AUTOLOCK(m_mutex); + int size; + uint16_t *_ids; if (!m_sensor_device) return false; - return m_sensor_device->read_fd(ids); + size = m_sensor_device->read_fd(&_ids); + + for (int i = 0; i < size; ++i) + ids.push_back(_ids[i]); + + return true; } int physical_sensor::get_data(sensor_data_t **data) diff --git a/src/server/sensor_loader.cpp.in b/src/server/sensor_loader.cpp.in index 6f046fe..13731a8 100644 --- a/src/server/sensor_loader.cpp.in +++ b/src/server/sensor_loader.cpp.in @@ -50,8 +50,11 @@ sensor_loader& sensor_loader::get_instance() return inst; } -bool sensor_loader::load_devices(const string &path, vector &devices, void* &handle) +bool sensor_loader::load_devices(const string &path, vector &devices, void* &handle) { + int size; + sensor_device_t *_devices = NULL; + INFO("load device: [%s]", path.c_str()); void *_handle = dlopen(path.c_str(), RTLD_NOW); @@ -71,7 +74,7 @@ bool sensor_loader::load_devices(const string &path, vector &devices, voi return false; } - sensor_devices *_devices = create_devices(); + size = create_devices(&_devices); if (!_devices) { ERR("Failed to create devices, path is %s\n", path.c_str()); @@ -80,11 +83,14 @@ bool sensor_loader::load_devices(const string &path, vector &devices, voi } devices.clear(); - devices.swap(_devices->devices); - delete _devices; + for (int i = 0; i < size; ++i) + devices.push_back(_devices[i]); + handle = _handle; + delete _devices; + return true; } @@ -108,19 +114,19 @@ physical_sensor* sensor_loader::create_sensor(sensor_handle_t handle, sensor_dev return sensor; } -bool sensor_loader::load_physical_sensors(std::vector devices) +bool sensor_loader::load_physical_sensors(std::vector &devices) { + int size; sensor_device *device; - vector handles; + const sensor_handle_t *handles; physical_sensor *sensor; for (void *device_ptr : devices) { device = static_cast(device_ptr); - handles.clear(); - device->get_sensors(handles); + size = device->get_sensors(&handles); - for (unsigned int i = 0; i < handles.size(); ++i) { + for (int i = 0; i < size; ++i) { sensor = create_sensor(handles[i], device); if (!sensor) continue; @@ -157,7 +163,7 @@ bool sensor_loader::load_sensors(void) for_each(unique_device_plugin_paths.begin(), unique_device_plugin_paths.end(), [&](const string &path) { void *handle; - std::vector devices; + std::vector devices; load_devices(path, devices, handle); load_physical_sensors(devices); diff --git a/src/server/sensor_loader.h b/src/server/sensor_loader.h index 41b1dcb..1abe38d 100644 --- a/src/server/sensor_loader.h +++ b/src/server/sensor_loader.h @@ -44,10 +44,10 @@ class sensor_loader private: sensor_loader(); - bool load_devices(const std::string &path, std::vector &devices, void* &handle); + bool load_devices(const std::string &path, std::vector &devices, void* &handle); physical_sensor* create_sensor(sensor_handle_t handle, sensor_device *device); - bool load_physical_sensors(std::vector devices); + bool load_physical_sensors(std::vector &devices); template void load_virtual_sensor(const char *name); void load_virtual_sensors(void); diff --git a/src/shared/sensor_hal.h b/src/shared/sensor_hal.h index 46fd840..19681ed 100644 --- a/src/shared/sensor_hal.h +++ b/src/shared/sensor_hal.h @@ -22,11 +22,6 @@ #include -#ifdef __cplusplus -#include -#include -#endif /* __cplusplus */ - #define SENSOR_HAL_VERSION(maj,min) \ ((((maj) & 0xffff) << 24) | ((min) & 0xffff)) @@ -150,11 +145,11 @@ typedef struct sensor_data_t { #endif /* __cplusplus */ #ifdef __cplusplus -typedef struct { - std::vector devices; -} sensor_devices; - -typedef sensor_devices* (*create_t)(void); +/* + * Create devices + */ +typedef void *sensor_device_t; +typedef int (*create_t)(sensor_device_t **devices); /* * Sensor device interface @@ -171,7 +166,7 @@ public: } virtual int get_poll_fd(void) = 0; - virtual bool get_sensors(std::vector &sensors) = 0; + virtual int get_sensors(const sensor_handle_t **sensors) = 0; virtual bool enable(uint16_t id) = 0; virtual bool disable(uint16_t id) = 0; @@ -180,7 +175,7 @@ public: virtual bool set_batch_latency(uint16_t id, unsigned long val) = 0; virtual bool set_attribute(uint16_t id, int32_t attribute, int32_t value) = 0; - virtual bool read_fd(std::vector &ids) = 0; + virtual int read_fd(uint16_t **ids) = 0; virtual int get_data(uint16_t id, sensor_data_t **data) = 0; virtual bool flush(uint16_t id) = 0; -- 2.7.4