Synchronizing pressure sensor plugin with addition of IIO interface support 47/30647/1
authorAmit Dharmapurikar <amit.vd@samsung.com>
Fri, 21 Nov 2014 12:38:58 +0000 (18:08 +0530)
committerAmit Dharmapurikar <amit.vd@samsung.com>
Fri, 21 Nov 2014 12:38:58 +0000 (18:08 +0530)
Change-Id: I298a4e11dd2944724988d0fce061f4fee7a3e459
Signed-off-by: Amit Dharmapurikar <amit.vd@samsung.com>
packaging/sensord.spec
src/pressure/CMakeLists.txt
src/pressure/pressure_sensor.cpp
src/pressure/pressure_sensor.h
src/pressure/pressure_sensor_hal.cpp
src/pressure/pressure_sensor_hal.h

index eb9d4c2..c9e381a 100755 (executable)
@@ -13,7 +13,7 @@ Source2:    sensord.socket
 %define proxi_state ON
 %define light_state OFF
 %define geo_state ON
-%define pressure_state OFF
+%define pressure_state ON
 %define temperature_state OFF
 %define orientation_state OFF
 %define gravity_state OFF
index b1984d0..ea13698 100755 (executable)
@@ -15,7 +15,7 @@ include_directories(${CMAKE_SOURCE_DIR}/src/libsensord)
 
 include(FindPkgConfig)
 pkg_check_modules(rpkgs REQUIRED vconf)
-add_definitions(${rpkgs_CFLAGS} -DUSE_ONLY_ONE_MODULE)
+add_definitions(${rpkgs_CFLAGS} -DUSE_ONLY_ONE_MODULE -DUSE_LCD_TYPE_CHECK)
 
 set(PROJECT_MAJOR_VERSION "0")
 set(PROJECT_MINOR_VERSION "0")
index 35461a7..710c86a 100755 (executable)
@@ -29,17 +29,15 @@ using config::csensor_config;
 using std::bind1st;
 using std::mem_fun;
 
-#define SENSOR_NAME                            "PRESSURE_SENSOR"
-#define SENSOR_TYPE_PRESSURE   "PRESSURE"
+#define SENSOR_NAME "PRESSURE_SENSOR"
+#define SENSOR_TYPE_PRESSURE           "PRESSURE"
 #define ELEMENT_NAME                   "NAME"
 #define ELEMENT_VENDOR                 "VENDOR"
 #define ELEMENT_TEMPERATURE_RESOLUTION "TEMPERATURE_RESOLUTION"
 #define ELEMENT_TEMPERATURE_OFFSET             "TEMPERATURE_OFFSET"
 #define ATTR_VALUE                             "value"
 
-#define SEA_LEVEL_RESOLUTION   0.01
-#define ALT_CONST1                             44330.0
-#define ALT_CONST2                             (1.0f/5.255f)
+#define SEA_LEVEL_RESOLUTION 0.01
 
 pressure_sensor::pressure_sensor()
 : m_sensor_hal(NULL)
@@ -61,21 +59,19 @@ bool pressure_sensor::init()
 {
        m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(PRESSURE_SENSOR);
 
-       if (!m_sensor_hal)
-       {
+       if (!m_sensor_hal) {
                ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
                return false;
        }
 
        sensor_properties_t properties;
 
-       if (m_sensor_hal->get_properties(properties) == false)
-       {
+       if (!m_sensor_hal->get_properties(properties)) {
                ERR("sensor->get_properties() is failed!\n");
                return false;
        }
 
-       m_resolution = properties.sensor_resolution;
+       m_resolution = properties.resolution;
 
        string model_id = m_sensor_hal->get_model_id();
 
@@ -83,8 +79,7 @@ bool pressure_sensor::init()
 
        double temperature_resolution;
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, model_id, ELEMENT_TEMPERATURE_RESOLUTION, temperature_resolution))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, model_id, ELEMENT_TEMPERATURE_RESOLUTION, temperature_resolution)) {
                ERR("[TEMPERATURE_RESOLUTION] is empty\n");
                throw ENXIO;
        }
@@ -94,8 +89,7 @@ bool pressure_sensor::init()
 
        double temperature_offset;
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, model_id, ELEMENT_TEMPERATURE_OFFSET, temperature_offset))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, model_id, ELEMENT_TEMPERATURE_OFFSET, temperature_offset)) {
                ERR("[TEMPERATURE_OFFSET] is empty\n");
                throw ENXIO;
        }
@@ -122,7 +116,6 @@ bool pressure_sensor::working(void *inst)
 bool pressure_sensor::process_event(void)
 {
        sensor_event_t event;
-       int pressure;
 
        if (!m_sensor_hal->is_data_ready(true))
                return true;
@@ -131,8 +124,8 @@ bool pressure_sensor::process_event(void)
 
        AUTOLOCK(m_client_info_mutex);
 
-       if (get_client_cnt(PRESSURE_EVENT_RAW_DATA_REPORT_ON_TIME))
-       {
+       if (get_client_cnt(PRESSURE_EVENT_RAW_DATA_REPORT_ON_TIME)) {
+               event.sensor_id = get_id();
                event.event_type = PRESSURE_EVENT_RAW_DATA_REPORT_ON_TIME;
                raw_to_base(event.data);
                push(event);
@@ -143,8 +136,7 @@ bool pressure_sensor::process_event(void)
 
 bool pressure_sensor::on_start(void)
 {
-       if (!m_sensor_hal->enable())
-       {
+       if (!m_sensor_hal->enable()) {
                ERR("m_sensor_hal start fail\n");
                return false;
        }
@@ -154,8 +146,7 @@ bool pressure_sensor::on_start(void)
 
 bool pressure_sensor::on_stop(void)
 {
-       if (!m_sensor_hal->disable())
-       {
+       if (!m_sensor_hal->disable()) {
                ERR("m_sensor_hal stop fail\n");
                return false;
        }
@@ -163,12 +154,12 @@ bool pressure_sensor::on_stop(void)
        return stop_poll();
 }
 
-bool pressure_sensor::get_properties(const unsigned int type, sensor_properties_t &properties)
+bool pressure_sensor::get_properties(sensor_properties_t &properties)
 {
        return m_sensor_hal->get_properties(properties);
 }
 
-int pressure_sensor::get_sensor_data(const unsigned int type, sensor_data_t &data)
+int pressure_sensor::get_sensor_data(unsigned int type, sensor_data_t &data)
 {
        int ret;
 
@@ -177,8 +168,7 @@ int pressure_sensor::get_sensor_data(const unsigned int type, sensor_data_t &dat
        if (ret < 0)
                return -1;
 
-       if (type == PRESSURE_BASE_DATA_SET)
-       {
+       if (type == PRESSURE_BASE_DATA_SET) {
                raw_to_base(data);
                return 0;
        }
@@ -197,25 +187,23 @@ bool pressure_sensor::set_interval(unsigned long interval)
 
 float pressure_sensor::pressure_to_altitude(float pressure)
 {
-       return ALT_CONST1 * (1.0f - pow(pressure/m_sea_level_pressure, ALT_CONST2));
+       return 44330.0f * (1.0f - pow(pressure/m_sea_level_pressure, 1.0f/5.255f));
 }
 
 void pressure_sensor::raw_to_base(sensor_data_t &data)
 {
        m_sea_level_pressure = data.values[1] * SEA_LEVEL_RESOLUTION;
        data.values[1] = pressure_to_altitude(data.values[0]);
+       data.value_count = 3;
 }
 
 extern "C" void *create(void)
 {
        pressure_sensor *inst;
 
-       try
-       {
+       try {
                inst = new pressure_sensor();
-       }
-       catch (int err)
-       {
+       } catch (int err) {
                ERR("pressure_sensor class create fail , errno : %d , errstr : %s\n", err, strerror(err));
                return NULL;
        }
index 2124f6c..1da5cab 100755 (executable)
@@ -25,8 +25,7 @@
 #include <physical_sensor.h>
 #include <sensor_hal.h>
 
-class pressure_sensor : public physical_sensor
-{
+class pressure_sensor : public physical_sensor {
 public:
        pressure_sensor();
        virtual ~pressure_sensor();
@@ -37,8 +36,8 @@ public:
        static bool working(void *inst);
 
        bool set_interval(unsigned long interval);
-       bool get_properties(const unsigned int type, sensor_properties_t &properties);
-       int get_sensor_data(const unsigned int type, sensor_data_t &data);
+       virtual bool get_properties(sensor_properties_t &properties);
+       int get_sensor_data(unsigned int type, sensor_data_t &data);
 
 private:
        sensor_hal *m_sensor_hal;
@@ -53,6 +52,7 @@ private:
        bool process_event(void);
        float pressure_to_altitude(float pressure);
        void raw_to_base(sensor_data_t &data);
+
 };
 
 #endif
index 764adc9..2823baa 100755 (executable)
 #include <dirent.h>
 #include <linux/input.h>
 #include <csensor_config.h>
-#include <pressure_sensor_hal.h>
 #include <sys/ioctl.h>
+#include <pressure_sensor_hal.h>
 #include <fstream>
+#include <string>
 #include <iio_common.h>
 
 using std::ifstream;
+using std::string;
 using config::csensor_config;
 
 #define SENSOR_TYPE_PRESSURE   "PRESSURE"
 #define ELEMENT_NAME                   "NAME"
 #define ELEMENT_VENDOR                 "VENDOR"
 #define ELEMENT_RAW_DATA_UNIT  "RAW_DATA_UNIT"
+#define ELEMENT_RESOLUTION             "RESOLUTION"
 #define ELEMENT_MIN_RANGE              "MIN_RANGE"
 #define ELEMENT_MAX_RANGE              "MAX_RANGE"
+#define ELEMENT_TEMPERATURE_RESOLUTION "TEMPERATURE_RESOLUTION"
+#define ELEMENT_TEMPERATURE_OFFSET             "TEMPERATURE_OFFSET"
+#define ATTR_VALUE                             "value"
+
+#define SEA_LEVEL_PRESSURE 101325.0
 
-#define ENABLE_VAL                     true
-#define DISABLE_VAL                    false
-#define SEA_LEVEL_PRESSURE     101325.0
-#define NO_FLAG                                0
-#define TIMEOUT                                1
+#define EVENT_EN_NODE  "events/in_pressure_mag_either_en"
+#define PRESSURE_SCALE "/in_pressure_scale"
+#define PRESSURE_RAW   "/in_pressure_raw"
+#define TEMP_OFFSET            "/in_temp_offset"
+#define TEMP_SCALE             "/in_temp_scale"
+#define TEMP_RAW               "/in_temp_raw"
+#define NO_FLAG                        0
+#define TIMEOUT                        1
 
 pressure_sensor_hal::pressure_sensor_hal()
 : m_pressure(0)
 , m_temperature(0)
 , m_polling_interval(POLL_1HZ_MS)
 , m_fired_time(0)
-, m_sensorhub_supported(false)
+, m_node_handle(-1)
 {
-       int fd, ret;
-       string file_name;
+       const string sensorhub_interval_node_name = "pressure_poll_delay";
+       csensor_config &config = csensor_config::get_instance();
 
-       if (!check_hw_node())
-       {
-               ERR("check_hw_node() fail");
+       node_path_info_query query;
+       node_path_info info;
+       int input_method = IIO_METHOD;
+
+       if (!get_model_properties(SENSOR_TYPE_PRESSURE, m_model_id, input_method)) {
+               ERR("Failed to find model_properties");
                throw ENXIO;
+
        }
 
-       csensor_config &config = csensor_config::get_instance();
+       query.input_method = input_method;
+       query.sensorhub_controlled = m_sensorhub_controlled = is_sensorhub_controlled(sensorhub_interval_node_name);
+       query.sensor_type = SENSOR_TYPE_PRESSURE;
+       query.input_event_key = "pressure_sensor";
+       query.iio_enable_node_name = EVENT_EN_NODE;
+       query.sensorhub_interval_node_name = sensorhub_interval_node_name;
+
+       if (!get_node_path_info(query, info)) {
+               ERR("Failed to get node info");
+               throw ENXIO;
+       }
+       m_data_node = info.data_node_path;
+       m_pressure_dir = info.base_dir;
+       m_enable_node = info.enable_node_path;
+       m_pressure_node = m_pressure_dir + string(PRESSURE_RAW);
+       m_temp_node = m_pressure_dir + string(TEMP_RAW);
+
+       INFO("m_data_node:%s",m_data_node.c_str());
+       INFO("m_pressure_dir:%s",m_pressure_dir.c_str());
+       INFO("m_enable_node:%s",m_enable_node.c_str());
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_VENDOR, m_vendor))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_VENDOR, m_vendor)) {
                ERR("[VENDOR] is empty\n");
                throw ENXIO;
        }
 
        INFO("m_vendor = %s", m_vendor.c_str());
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_NAME, m_chip_name))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_NAME, m_chip_name)) {
                ERR("[NAME] is empty\n");
                throw ENXIO;
        }
@@ -78,8 +110,7 @@ pressure_sensor_hal::pressure_sensor_hal()
 
        double min_range;
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MIN_RANGE, min_range))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MIN_RANGE, min_range)) {
                ERR("[MIN_RANGE] is empty\n");
                throw ENXIO;
        }
@@ -89,8 +120,7 @@ pressure_sensor_hal::pressure_sensor_hal()
 
        double max_range;
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MAX_RANGE, max_range))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_MAX_RANGE, max_range)) {
                ERR("[MAX_RANGE] is empty\n");
                throw ENXIO;
        }
@@ -100,8 +130,7 @@ pressure_sensor_hal::pressure_sensor_hal()
 
        double raw_data_unit;
 
-       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit))
-       {
+       if (!config.get(SENSOR_TYPE_PRESSURE, m_model_id, ELEMENT_RAW_DATA_UNIT, raw_data_unit)) {
                ERR("[RAW_DATA_UNIT] is empty\n");
                throw ENXIO;
        }
@@ -109,15 +138,17 @@ pressure_sensor_hal::pressure_sensor_hal()
        m_raw_data_unit = (float)(raw_data_unit);
        INFO("m_raw_data_unit = %f\n", m_raw_data_unit);
 
-       file_name = string(IIO_DIR) + m_pressure_dir + string(TEMP_SCALE);
+       string file_name;
+
+       file_name = m_pressure_dir + string(TEMP_SCALE);
        if (!read_node_value<int>(file_name, m_temp_scale))
                throw ENXIO;
 
-       file_name = string(IIO_DIR) + m_pressure_dir + string(TEMP_OFFSET);
+       file_name = m_pressure_dir + string(TEMP_OFFSET);
        if (!read_node_value<float>(file_name, m_temp_offset))
                throw ENXIO;
 
-       file_name = string(IIO_DIR) + m_pressure_dir + string(PRESSURE_SCALE);
+       file_name = m_pressure_dir + string(PRESSURE_SCALE);
        if (!read_node_value<int>(file_name, m_pressure_scale))
                throw ENXIO;
 
@@ -125,20 +156,19 @@ pressure_sensor_hal::pressure_sensor_hal()
        INFO("Temperature offset:%f", m_temp_offset);
        INFO("Pressure scale:%d", m_pressure_scale);
 
-       fd = open(m_event_resource.c_str(), NO_FLAG);
-       if (fd == -1)
-       {
+       int fd, ret;
+       fd = open(m_data_node.c_str(), NO_FLAG);
+       if (fd == -1) {
                ERR("Could not open event resource");
                throw ENXIO;
        }
 
-       ret = ioctl(fd, IOCTL_IIO_EVENT_FD, &m_event_fd);
+       ret = ioctl(fd, IOCTL_IIO_EVENT_FD, &m_node_handle);
 
        close(fd);
 
-       if ((ret == -1) || (m_event_fd == -1))
-       {
-               ERR("Failed to retrieve event fd");
+       if ((ret == -1) || (m_node_handle == -1)) {
+               ERR("Failed to retrieve node handle from event node: %s", m_data_node.c_str());
                throw ENXIO;
        }
 
@@ -147,7 +177,9 @@ pressure_sensor_hal::pressure_sensor_hal()
 
 pressure_sensor_hal::~pressure_sensor_hal()
 {
-       close(m_event_fd);
+       close(m_node_handle);
+       m_node_handle = -1;
+
        INFO("pressure_sensor_hal is destroyed!\n");
 }
 
@@ -161,17 +193,11 @@ sensor_type_t pressure_sensor_hal::get_type(void)
        return PRESSURE_SENSOR;
 }
 
-bool pressure_sensor_hal::enable_resource(bool enable)
-{
-       update_sysfs_num(m_enable_resource.c_str(), enable);
-       return true;
-}
-
 bool pressure_sensor_hal::enable(void)
 {
        AUTOLOCK(m_mutex);
-
-       enable_resource(ENABLE_VAL);
+       update_sysfs_num(m_enable_node.c_str(), true);
+       set_interval(m_polling_interval);
 
        m_fired_time = 0;
        INFO("Pressure sensor real starting");
@@ -182,7 +208,7 @@ bool pressure_sensor_hal::disable(void)
 {
        AUTOLOCK(m_mutex);
 
-       enable_resource(DISABLE_VAL);
+       update_sysfs_num(m_enable_node.c_str(), false);
 
        INFO("Pressure sensor real stopping");
        return true;
@@ -190,6 +216,7 @@ bool pressure_sensor_hal::disable(void)
 
 bool pressure_sensor_hal::set_interval(unsigned long val)
 {
+       INFO("set_interval not supported");
        return true;
 }
 
@@ -204,47 +231,40 @@ bool pressure_sensor_hal::update_value(bool wait)
 
        FD_ZERO(&readfds);
        FD_ZERO(&exceptfds);
-       FD_SET(m_event_fd, &readfds);
-       FD_SET(m_event_fd, &exceptfds);
+       FD_SET(m_node_handle, &readfds);
+       FD_SET(m_node_handle, &exceptfds);
 
-       if (wait)
-       {
+       if (wait) {
                tv.tv_sec = TIMEOUT;
                tv.tv_usec = 0;
        }
-       else
-       {
+       else {
                tv.tv_sec = 0;
                tv.tv_usec = 0;
        }
 
-       ret = select(m_event_fd + 1, &readfds, NULL, &exceptfds, &tv);
+       ret = select(m_node_handle + 1, &readfds, NULL, &exceptfds, &tv);
 
-       if (ret == -1)
-       {
-               ERR("select error:%s m_event_fd:d", strerror(errno), m_event_fd);
+       if (ret == -1) {
+               ERR("select error:%s m_node_handle:d", strerror(errno), m_node_handle);
                return false;
        }
-       else if (!ret)
-       {
+       else if (!ret) {
                DBG("select timeout");
                return false;
        }
 
-       if (FD_ISSET(m_event_fd, &exceptfds))
-       {
+       if (FD_ISSET(m_node_handle, &exceptfds)) {
                ERR("select exception occurred!");
                return false;
        }
 
-       if (FD_ISSET(m_event_fd, &readfds))
-       {
+       if (FD_ISSET(m_node_handle, &readfds)) {
                INFO("pressure event detection!");
-               int len = read(m_event_fd, &pressure_event, sizeof(pressure_event));
+               int len = read(m_node_handle, &pressure_event, sizeof(pressure_event));
 
-               if (len == -1)
-               {
-                       DBG("Error in read(m_event_fd):%s.", strerror(errno));
+               if (len == -1) {
+                       ERR("Error in read(m_event_fd):%s.", strerror(errno));
                        return false;
                }
                m_fired_time = pressure_event.timestamp;
@@ -255,12 +275,12 @@ bool pressure_sensor_hal::update_value(bool wait)
                m_pressure = ((float)raw_pressure_count)/((float)m_pressure_scale);
                m_temperature = m_temp_offset + ((float)raw_temp_count)/((float)m_temp_scale);
        }
-       else
-       {
+       else {
                ERR("No pressure event data available to read");
                return false;
        }
        return true;
+
 }
 
 bool pressure_sensor_hal::is_data_ready(bool wait)
@@ -273,10 +293,9 @@ bool pressure_sensor_hal::is_data_ready(bool wait)
 int pressure_sensor_hal::get_sensor_data(sensor_data_t &data)
 {
        AUTOLOCK(m_value_mutex);
-       data.data_accuracy = SENSOR_ACCURACY_GOOD;
-       data.data_unit_idx = SENSOR_UNIT_HECTOPASCAL;
+       data.accuracy = SENSOR_ACCURACY_GOOD;
        data.timestamp = m_fired_time ;
-       data.values_num = 3;
+       data.value_count = 3;
        data.values[0] = m_pressure;
        data.values[1] = SEA_LEVEL_PRESSURE;
        data.values[2] = m_temperature;
@@ -284,98 +303,27 @@ int pressure_sensor_hal::get_sensor_data(sensor_data_t &data)
        return 0;
 }
 
+
 bool pressure_sensor_hal::get_properties(sensor_properties_t &properties)
 {
-       properties.sensor_unit_idx = SENSOR_UNIT_HECTOPASCAL;
-       properties.sensor_min_range = m_min_range;
-       properties.sensor_max_range = m_max_range;
-       snprintf(properties.sensor_name, sizeof(properties.sensor_name), "%s", m_chip_name.c_str());
-       snprintf(properties.sensor_vendor, sizeof(properties.sensor_vendor), "%s", m_vendor.c_str());
-       properties.sensor_resolution = m_raw_data_unit;
+       properties.name = m_chip_name;
+       properties.vendor = m_vendor;
+       properties.min_range = m_min_range;
+       properties.max_range = m_max_range;
+       properties.min_interval = 1;
+       properties.resolution = m_raw_data_unit;
+       properties.fifo_count = 0;
+       properties.max_batch_count = 0;
        return true;
 }
 
-bool pressure_sensor_hal::is_sensorhub_supported(void)
-{
-       return false;
-}
-
-bool pressure_sensor_hal::check_hw_node(void)
-{
-       string name_node;
-       string hw_name;
-       string file_name;
-
-       DIR *main_dir = NULL;
-       struct dirent *dir_entry = NULL;
-       bool find_node = false;
-
-       INFO("======================start check_hw_node=============================\n");
-
-       m_sensorhub_supported = is_sensorhub_supported();
-
-       main_dir = opendir(IIO_DIR);
-
-       if (!main_dir)
-       {
-               ERR("Could not open IIO directory\n");
-               return false;
-       }
-
-       while (!find_node)
-       {
-               dir_entry = readdir(main_dir);
-               if(dir_entry == NULL)
-                       break;
-
-               if ((strncasecmp(dir_entry->d_name ,".",1 ) != 0) && (strncasecmp(dir_entry->d_name ,"..",2 ) != 0) && (dir_entry->d_ino != 0))
-               {
-                       file_name = string(IIO_DIR) + string(dir_entry->d_name) + string(NAME_NODE);
-
-                       ifstream infile(file_name.c_str());
-
-                       if (!infile)
-                               continue;
-
-                       infile >> hw_name;
-
-                       if (strncmp(dir_entry->d_name, IIO_DEV_BASE_NAME, IIO_DEV_STR_LEN) == 0)
-                       {
-                               if (CConfig::get_instance().is_supported(SENSOR_TYPE_PRESSURE, hw_name) == true)
-                               {
-                                       m_name = m_model_id = hw_name;
-                                       m_pressure_dir = string(dir_entry->d_name);
-                                       m_enable_resource = string(IIO_DIR) + m_pressure_dir + string(EVENT_DIR) + string(EVENT_EN_NODE);
-                                       m_event_resource = string(DEV_DIR) + m_pressure_dir;
-                                       m_pressure_node = string(IIO_DIR) + m_pressure_dir + string(PRESSURE_RAW);
-                                       m_temp_node = string(IIO_DIR) + m_pressure_dir + string(TEMP_RAW);
-
-                                       INFO("m_enable_resource = %s", m_enable_resource.c_str());
-                                       INFO("m_model_id = %s", m_model_id.c_str());
-                                       INFO("m_pressure_dir = %s", m_pressure_dir.c_str());
-                                       INFO("m_event_resource = %s", m_event_resource.c_str());
-
-                                       find_node = true;
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       closedir(main_dir);
-       return find_node;
-}
-
 extern "C" void *create(void)
 {
        pressure_sensor_hal *inst;
 
-       try
-       {
+       try {
                inst = new pressure_sensor_hal();
-       }
-       catch (int err)
-       {
+       } catch (int err) {
                ERR("pressure_sensor_hal class create fail , errno : %d , errstr : %s\n", err, strerror(err));
                return NULL;
        }
index 96fc362..42e5310 100755 (executable)
 #include <sensor_hal.h>
 #include <string>
 
-#define IIO_DIR                        "/sys/bus/iio/devices/"
-#define NAME_NODE              "/name"
-#define EVENT_DIR              "/events"
-#define EVENT_EN_NODE  "/in_pressure_mag_either_en"
-#define DEV_DIR                        "/dev/"
-#define PRESSURE_SCALE "/in_pressure_scale"
-#define PRESSURE_RAW   "/in_pressure_raw"
-#define TEMP_OFFSET            "/in_temp_offset"
-#define TEMP_SCALE             "/in_temp_scale"
-#define TEMP_RAW               "/in_temp_raw"
-
-#define IIO_DEV_BASE_NAME      "iio:device"
-#define IIO_DEV_STR_LEN                10
-
 using std::string;
 
 class pressure_sensor_hal : public sensor_hal
@@ -46,17 +32,15 @@ public:
        virtual ~pressure_sensor_hal();
        string get_model_id(void);
        sensor_type_t get_type(void);
-
        bool enable(void);
        bool disable(void);
        bool set_interval(unsigned long val);
        bool is_data_ready(bool wait);
        virtual int get_sensor_data(sensor_data_t &data);
-       bool get_properties(sensor_properties_t &properties);
+       virtual bool get_properties(sensor_properties_t &properties);
 
 private:
        string m_model_id;
-       string m_name;
        string m_vendor;
        string m_chip_name;
 
@@ -67,6 +51,8 @@ private:
        float m_temp_offset;
        float m_temperature;
 
+       int m_resolution;
+
        float m_min_range;
        float m_max_range;
        float m_raw_data_unit;
@@ -74,21 +60,20 @@ private:
        unsigned long m_polling_interval;
 
        unsigned long long m_fired_time;
-       int m_event_fd;
+       int m_node_handle;
+
+       string m_enable_node;
+       string m_data_node;
+       string m_interval_node;
 
        string m_pressure_dir;
        string m_pressure_node;
        string m_temp_node;
-       string m_event_resource;
-       string m_enable_resource;
 
-       cmutex m_value_mutex;
+       bool m_sensorhub_controlled;
 
-       bool m_sensorhub_supported;
+       cmutex m_value_mutex;
 
-       bool check_hw_node(void);
        bool update_value(bool wait);
-       bool enable_resource(bool enable);
-       bool is_sensorhub_supported(void);
 };
 #endif /*_PRESSURE_SENSOR_HAL_CLASS_H_*/