Merge branch 'master' into tizen_2.1 tizen_2.1 2.1b_release accepted/tizen_2.1/20130425.020455 accepted/tizen_2.1/20130520.093126 submit/tizen_2.1/20130424.222842 submit/tizen_2.1/20130516.045904
authorTelle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com>
Thu, 4 Apr 2013 11:52:04 +0000 (14:52 +0300)
committerTelle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com>
Thu, 4 Apr 2013 11:52:04 +0000 (14:52 +0300)
CMakeLists.txt
inc/compassprocessor.h
inc/proxiprocessor.h
packaging/sensor-plugins-mfld-blackbay.changes [moved from packaging/sf-plugins-bb.changes with 57% similarity]
packaging/sensor-plugins-mfld-blackbay.spec [moved from packaging/sf-plugins-bb.spec with 86% similarity]
src/baseprocessor.cpp
src/compassprocessor.cpp
src/lightprocessor.cpp
src/proxiprocessor.cpp
src/test_programs/client.cpp
src/test_programs/reader.cpp

index 31a8780..eede785 100644 (file)
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 2.6)
-project(sensors_bb CXX)
+project(sensor-plugins-mfld-blackbay CXX)
 
 # to install pkgconfig setup file.
 SET(EXEC_PREFIX "\${prefix}")
index f975dd2..67ea232 100644 (file)
 
 #ifndef COMPASSPROCESSOR_H
 #define COMPASSPROCESSOR_H
+#define AXES 3
+#define TWO_PI 6.283185307179586476925286766559
+#define RADIAN_MULTIPLIER 57.295779513082320876798154814105
+#define ROTATION_180 180
 
 #include "baseprocessor.h"
 
@@ -28,6 +32,14 @@ public:
 
      virtual int get_property(unsigned int property_level,
                               base_property_struct &result);
+     virtual void process_input_events(const std::vector <input_event *> &events);
+private:
+     double min_xyz[AXES];
+     double max_xyz[AXES];
+     double offset[AXES];
+     double mgval[AXES];
+     double head[AXES];
+     double previous[AXES];
 };
 
 #endif // COMPASSPROCESSOR_H
index b7cc42d..36ed6d4 100644 (file)
@@ -32,6 +32,9 @@ public:
      virtual bool enable();
      virtual bool disable();
      virtual void* started();
+private:
+     int mFar_near;
+     int mDistance;
 };
 
 #endif // PROXIPROCESSOR_H
similarity index 57%
rename from packaging/sf-plugins-bb.changes
rename to packaging/sensor-plugins-mfld-blackbay.changes
index 41863fe..b6e095e 100644 (file)
@@ -1,3 +1,22 @@
+* Wed Apr 03 2013 Telle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com> submit/trunk/20130219.093127@4568f10
+- Updating version number to 0.1.1
+
+* Tue Mar 26 2013 Timo Toikkanen <timo.toikkanen@ixonos.com> Obsolete_Repo@cb11ba4
+- Add comment for sensor internal selftest results handling
+
+* Fri Mar 22 2013 Timo Toikkanen <timo.toikkanen@ixonos.com> submit/trunk/20130219.093127@af95230
+- Magnetometer and Proximity new evens
+
+* Tue Feb 19 2013 Telle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com> accepted/tizen_2.0/20130201.180546@a897b1d
+- Merge tizen_2.0 to master
+
+* Wed Jan 30 2013 Telle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com> submit/tizen_2.0/20130128.082005@ddba03f
+- Rename package to sensor-plugins-mfld-blackbay
+
+* Thu Jan 24 2013 Timo Toikkanen <timo.toikkanen@ixonos.com> accepted/tizen_2.0/20130111.182103@acd54f7
+- Fix for TZSP-4919
+- Updating changelog
+
 * Fri Jan 10 2013 Telle-Tiia Pitkänen <telle-tiia.pitkanen@ixonos.com> submit/trunk/20121023.061641@daf1aa1
 - Adding LGPLv2.1 license information
 
similarity index 86%
rename from packaging/sf-plugins-bb.spec
rename to packaging/sensor-plugins-mfld-blackbay.spec
index 8fab54e..5be16ed 100644 (file)
@@ -1,10 +1,10 @@
-Name:       sf-plugins-bb
+Name:       sensor-plugins-mfld-blackbay
 Summary:    Plugins for sensor framework on blackbay device
-Version:    0.0.1
+Version:    0.1.1
 Release:    1
 Group:      System/Sensor Framework
 License:    LGPLv2.1
-Source0:    sf-plugins-bb-%{version}.tar.gz
+Source0:    %{name}-%{version}.tar.gz
 Requires:   libsf-common
 Requires:   sensor
 Requires:   udev
index 8b905a8..faf8c51 100644 (file)
@@ -209,6 +209,7 @@ int BaseProcessor::get_struct_value(unsigned int struct_type , void *struct_valu
 
      if (!fill_values(struct_type, count, unit, accuracy)) {
           DbgPrint("Fill values returned false");
+          mValueMutex.unlock();
           return -3;
      }
 
@@ -231,7 +232,7 @@ int BaseProcessor::get_struct_value(unsigned int struct_type , void *struct_valu
 
 void* BaseProcessor::started(void *ctx)
 {
-     //DbgPrint("%p",(void *) ctx);
+     DbgPrint("");
      return ((BaseProcessor *) ctx)->started();
 }
 
@@ -272,7 +273,7 @@ void BaseProcessor::process_input_events(const std::vector<input_event*> &events
           case EV_REL:
           case EV_ABS:
                DbgPrint("%s sensor got input code %d value %d\n",mName.c_str(), event.code, event.value);
-               if (event.code >= 0 && event.code < sizeof(mValues)/sizeof(float))
+               if (event.code < sizeof(mValues)/sizeof(float))
                     mValues[event.code] = event.value;
                break;
 
@@ -390,7 +391,7 @@ const char *BaseProcessor::find_device_from_udev(const char *driver)
      udev_enumerate *enumerator = NULL;
      bool result = false;
      struct udev_list_entry *devices = NULL, *dev_list_entry = NULL;
-     const char *devicePath = NULL;
+     const char *devicePath = "";
 
      DbgPrint("");
 
@@ -467,8 +468,10 @@ bool BaseProcessor::writeToSysfs(const char *filename, const char *buffer, int c
                DbgPrint("Sysfs file entry opened");
                int writeCount = write(fd,buffer,count);
                if (writeCount == count) {
+                    close(fd);
                     return true;
                }
+               close(fd);
           }
      }
      DbgPrint("There was error opening sysfs file %s",strerror(errno));
index 4e0634e..f1f3414 100644 (file)
 #include "compassprocessor.h"
 #include "sensor_geomag.h"
 #include "log.h"
+#include "math.h"
 
 CompassProcessor::CompassProcessor()
 {
      DbgPrint("");
+     int i=0;
      mName = "magnetometer";
      mInputEventCount = 4;
      find_input_device_by_name("hmc5883");
      BaseProcessor::find_device_from_udev("compass");
      mSysfsPath += "/hmc5883";
      mSupportedEvents.push_back(GEOMAGNETIC_EVENT_RAW_DATA_REPORT_ON_TIME);
+     mSupportedEvents.push_back(GEOMAGNETIC_EVENT_ATTITUDE_DATA_REPORT_ON_TIME);
+
+     for(i=0; i < AXES; ++i) {
+               min_xyz[i] = 700;
+               max_xyz[i] = -700;
+               previous[i] = 0;
+     }
 }
 
 bool CompassProcessor::fill_values(unsigned int type, int &count,
                                    data_unit_idx_t &unit, data_accuracy &accuracy)
 {
-     if (type == GEOMAGNETIC_RAW_DATA_SET) {
-          count = 3;
+     switch (type) {
+     case GEOMAGNETIC_RAW_DATA_SET:
+          count = AXES;
           unit = IDX_UNIT_MICRO_TESLA;
           accuracy = ACCURACY_GOOD;
-          return true;
+          break;
+     case GEOMAGNETIC_ATTITUDE_DATA_SET:
+          count = AXES;
+          unit = IDX_UNIT_DEGREE;
+          accuracy = ACCURACY_GOOD;
+          mValues[0]= (int)head[0];
+          mValues[1]= (int)head[1];
+          mValues[2]= (int)head[2];
+          break;
+     default:
+          return false;
      }
 
-     return false;
+     return true;
 }
 
 int CompassProcessor::get_property(unsigned int property_level,
@@ -49,15 +69,75 @@ int CompassProcessor::get_property(unsigned int property_level,
 {
      strcpy(result.sensor_name, "hmc5883");
      strcpy(result.sensor_vendor,"Honeywell");
-     if (property_level == GEOMAGNETIC_RAW_DATA_SET) {
+     switch (property_level){
+     case GEOMAGNETIC_RAW_DATA_SET:
           result.sensor_unit_idx = IDX_UNIT_MICRO_TESLA;
           result.sensor_min_range = 0;
           result.sensor_max_range = 1000;
           result.sensor_resolution = 1;
-     } else {
+          break;
+     case GEOMAGNETIC_ATTITUDE_DATA_SET:
+          result.sensor_unit_idx = IDX_UNIT_DEGREE;
+          result.sensor_min_range = 0;
+          result.sensor_max_range = 360;
+          result.sensor_resolution = 2;
+          break;
+     default:
           return -1;
      }
 
-
      return 0;
 }
+
+void CompassProcessor::process_input_events(const std::vector <input_event *> &events)
+{
+     int i = 0 ;
+     int trim = -105;
+     double temp[AXES] ={0,0,0};
+     double sf[AXES] = {1,1,1};
+     BaseProcessor::process_input_events(events);
+
+     for(i=0; i < AXES; ++i) {
+           // remove internal kernel driver selftest results !
+           if (fabs(previous[i]-mValues[i]) > 150 ) {
+               previous[i] = mValues[i];
+               return;
+           }
+           previous[i] = mValues[i];
+           if (min_xyz[i] > mValues[i] && mValues[i] != 0) {
+               min_xyz[i] = mValues[i];
+           }
+           if (max_xyz[i] < mValues[i] && mValues[i] != 0) {
+               max_xyz[i] = mValues[i];
+           }
+           temp[i] = max_xyz[i] - min_xyz[i];
+     }
+
+     sf[0] = (temp[1]/temp[0]) > 1 ? (temp[1]/temp[0]) : 1;
+     sf[1] = (temp[0]/temp[1]) > 1 ? (temp[0]/temp[1]) : 1;
+     sf[2] = (temp[0]/temp[2]) > 1 ? (temp[0]/temp[2]) : 1;
+
+     for(i=0; i < AXES; ++i) {
+         offset[i] =((temp[i])/2-max_xyz[i])*sf[i];
+         mgval[i] = (mValues[i]+offset[i]) * sf[i];
+     }
+
+     head[0] = atan2(mgval[0],mgval[1]);
+     head[1] = atan2(mgval[2],mgval[1]);
+     head[2] = atan2(mgval[0],mgval[2]);
+
+     if(head[0] < 0)
+          head[0] += TWO_PI;
+     if(head[0] > TWO_PI)
+         head[0] -= TWO_PI;
+     head[0] = head[0] * RADIAN_MULTIPLIER;
+     for(i=1; i < AXES; ++i) {
+        head[i] = head[i] * RADIAN_MULTIPLIER;
+     }
+     if(head[1] < trim) {
+         head[1] = head[1]+(ROTATION_180-trim);
+     }
+     else{
+        head[1] = head[1]-(ROTATION_180 + trim);
+     }
+}
index 58b09b8..2cec8d7 100644 (file)
@@ -132,9 +132,7 @@ void* LightProcessor::started()
      pollfd pollInfo;
      pollInfo.fd = mFd;
      pollInfo.events = POLLIN;
-     poll(&pollInfo,1,2000);
-
-     if (pollInfo.revents & POLLIN) {
+     if(poll(&pollInfo,1,2000)){
           DbgPrint("HAVE POLLIN");
           int value;
           int readCount = read(mFd,&value,sizeof(int));
index cb2f8b2..8cfeba7 100644 (file)
@@ -31,6 +31,7 @@ ProxiProcessor::ProxiProcessor()
      mName = "proxi";
      mSupportedEvents.push_back(PROXIMITY_EVENT_CHANGE_STATE);
      mSupportedEvents.push_back(PROXIMITY_EVENT_STATE_REPORT_ON_TIME);
+     mSupportedEvents.push_back(PROXIMITY_EVENT_DISTANCE_DATA_REPORT_ON_TIME);
 }
 
 bool ProxiProcessor::fill_values(unsigned int type, int &count,
@@ -44,6 +45,13 @@ bool ProxiProcessor::fill_values(unsigned int type, int &count,
           count = 1;
           accuracy = ACCURACY_GOOD;
           unit = IDX_UNIT_STATE_ON_OFF;
+          mValues[0] = mFar_near;
+          return true;
+     case PROXIMITY_DISTANCE_DATA_SET:
+          count = 1;
+          accuracy = ACCURACY_GOOD;
+          unit = IDX_UNIT_CENTIMETER;
+          mValues[0] = mDistance;
           return true;
      }
 
@@ -56,12 +64,20 @@ int ProxiProcessor::get_property(unsigned int property_level,
      strcpy(result.sensor_name,"ltr502");
      strcpy(result.sensor_vendor, "Lite-On");
 
-     if (property_level == PROXIMITY_BASE_DATA_SET) {
+    switch (property_level){
+    case PROXIMITY_BASE_DATA_SET:
           result.sensor_unit_idx = IDX_UNIT_STATE_ON_OFF;
           result.sensor_min_range = 0;
           result.sensor_max_range = 1;
-          result.sensor_resolution = 6;
-     } else {
+          result.sensor_resolution = 1;
+    break;
+    case PROXIMITY_DISTANCE_DATA_SET:
+          result.sensor_unit_idx =  IDX_UNIT_CENTIMETER;
+          result.sensor_min_range = 0;
+          result.sensor_max_range = 10;
+          result.sensor_resolution = 10;
+    break;
+    default:
           return -1;
      }
 
@@ -99,15 +115,14 @@ void* ProxiProcessor::started()
      pollfd pollInfo;
      pollInfo.fd = mFd;
      pollInfo.events = POLLIN;
-     poll(&pollInfo,1,-1);
-     DbgPrint("Poll completed");
-
-     if (pollInfo.revents & POLLIN) {
+     if (poll(&pollInfo,1,-1)){
+          DbgPrint("Poll completed");
           int value;
           int result = read(mFd,&value,sizeof(int));
           if (result > 0) {
             mValueMutex.lock();
-            mValues[0] = value != 0 ? 1 : 0;
+            mDistance = value != 0 ? 0 : 10;
+            mFar_near = value != 0 ? 1 : 0;
             mValueMutex.unlock();
             vconf_set_int(PROXI_CHANGED_KEY,value);
 
index e95ec4e..ef0e0bd 100644 (file)
@@ -77,7 +77,6 @@ static int connect_sfsvc(sensor_type_t sensor, int data_event, int report_event)
      LOGERR("Sensor name: %s", props.sensor_name);
 
      sensor_data_t data;
-     //memset(&data,0,sizeof(data));
 
      /* connect with sensor fw */
      LOGERR("connect with sensor fw");
@@ -98,7 +97,7 @@ static int connect_sfsvc(sensor_type_t sensor, int data_event, int report_event)
      if (err == 0) {
           err = sf_get_data(sf_handle,data_event, &data);
           if (err == 0) {
-               LOGERR("sf_get_data values:", data.values[0]);
+               LOGERR("sf_get_data values:");
                for (int i =0; i <data.values_num; i++)
                     LOGERR("%d: %f\n",i, data.values[i]);
                LOGERR("Values end");
@@ -106,7 +105,7 @@ static int connect_sfsvc(sensor_type_t sensor, int data_event, int report_event)
                if (err)
                     LOGERR("Error registering for event %d",err);
           } else {
-               LOGERR("sf_get_data value fail", err);
+               LOGERR("sf_get_data value fail %d", err);
           }
      } else {
           LOGERR("sf_start failed %d", err);
@@ -135,7 +134,7 @@ int main(int argc, char **argv)
      else if (strcmp(argv[1],"proxi") ==  0)
           connect_sfsvc(PROXIMITY_SENSOR, PROXIMITY_BASE_DATA_SET,PROXIMITY_EVENT_CHANGE_STATE );
      else if (strcmp(argv[1],"compass") ==  0)
-          connect_sfsvc(GEOMAGNETIC_SENSOR, GEOMAGNETIC_RAW_DATA_SET,GEOMAGNETIC_EVENT_RAW_DATA_REPORT_ON_TIME );
+          connect_sfsvc(GEOMAGNETIC_SENSOR, GEOMAGNETIC_ATTITUDE_DATA_SET,GEOMAGNETIC_EVENT_ATTITUDE_DATA_REPORT_ON_TIME );
      else if (strcmp(argv[1],"gyro") ==  0)
           connect_sfsvc(GYROSCOPE_SENSOR, GYRO_BASE_DATA_SET,GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME );
      else {
index b0ebf1d..a9111e8 100644 (file)
@@ -66,7 +66,7 @@ int main(int argc, char **argv)
 
      if (!processor) {
           cout <<"Give processor name: compass, light, proxi, accel,"
-               <<"gyro, pressure, temperature";
+               <<"gyro, pressure, temperature \n";
           return 1;
      }
 
@@ -82,10 +82,9 @@ int main(int argc, char **argv)
 
           processor->get_struct_value(event,&result);
           cerr <<"Values from sensor:  \n";
-          for (int i =0; i <result.values_num; i++)
+          for (i = 0; i <result.values_num; i++)
                cerr <<i <<":" <<result.values[i] <<"\n";
           cerr <<"Values end\n";
-          //break;
 
      }
 }