Resent on behalf of Yan, Leo <[email protected]>, looks like there is
problem with Leo's mail client.

Hi, Timo,

This patch adds accelerometer adaptor for Medfield to sensor framework.
Please help reviewing.

Thanks,
Hong
diff --git a/adaptors/adaptors.pro b/adaptors/adaptors.pro
index fb4f2a4..ff9aef1 100644
--- a/adaptors/adaptors.pro
+++ b/adaptors/adaptors.pro
@@ -10,5 +10,6 @@ internal {
               touchadaptor \
               kbslideradaptor \
               proximityadaptor \
-              mrstaccelerometer
+              mrstaccelerometer \
+              mfldaccelerometer
 }
diff --git a/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.cpp b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.cpp
new file mode 100644
index 0000000..92c3729
--- /dev/null
+++ b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.cpp
@@ -0,0 +1,74 @@
+#include "logging.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/input.h>
+
+#include "filters/utils.h"
+#include "sensord/config.h"
+#include "sensord/logging.h"
+
+#include "mfldaccelerometeradaptor.h"
+
+#define DEVICE_MATCH_STRING "ST LIS3LV02DL Accelerometer"
+
+MFLDAccelerometerAdaptor::MFLDAccelerometerAdaptor(const QString& id) :
+    InputDevAdaptor(id, 1)
+{
+    if (!getInputDevices(DEVICE_MATCH_STRING)) {
+        sensordLogW() << "Input device not found.";
+	return;
+    }
+
+    setDescription("Input device ST LIS3LV02DL Accelerometer");
+
+    accelerometerBuffer_ = new DeviceAdaptorRingBuffer<OrientationData>(1024);
+    addAdaptedSensor("accelerometer", "Internal accelerometer coordinates", accelerometerBuffer_);
+
+    introduceAvailableDataRange(DataRange(-2000, 2000, 1));
+}
+
+MFLDAccelerometerAdaptor::~MFLDAccelerometerAdaptor()
+{
+    delete accelerometerBuffer_;
+}
+
+void MFLDAccelerometerAdaptor::interpretEvent(int src, struct input_event *ev)
+{
+    Q_UNUSED(src);
+
+    switch (ev->type) {
+        case EV_ABS:
+            switch (ev->code) {
+                case ABS_X:
+                    orientationValue_.x_ = ev->value;
+                    break;
+                case ABS_Y:
+                    orientationValue_.y_ = ev->value; 
+		    break;
+                case ABS_Z:
+                    orientationValue_.z_ = ev->value;
+                    break;
+            }
+            break;
+
+    }
+}
+
+void MFLDAccelerometerAdaptor::interpretSync(int src)
+{
+    Q_UNUSED(src);
+    commitOutput();
+}
+
+void MFLDAccelerometerAdaptor::commitOutput()
+{
+    OrientationData* d = accelerometerBuffer_->nextSlot();
+
+    d->timestamp_ = Utils::getTimeStamp();
+    d->x_ = orientationValue_.x_;
+    d->y_ = orientationValue_.y_;
+    d->z_ = orientationValue_.z_;
+    
+    accelerometerBuffer_->commit();
+    accelerometerBuffer_->wakeUpReaders();
+}
diff --git a/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.h b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.h
new file mode 100644
index 0000000..968428c
--- /dev/null
+++ b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.h
@@ -0,0 +1,32 @@
+#ifndef MFLDACCELEROMETERADAPTOR_H
+#define MFLDACCELEROMETERADAPTOR_H
+
+#include <QTime>
+#include "inputdevadaptor.h"
+#include "sensord/deviceadaptorringbuffer.h"
+#include "filters/orientationdata.h"
+
+class MFLDAccelerometerAdaptor : public InputDevAdaptor
+{
+    Q_OBJECT;
+public:
+    static DeviceAdaptor* factoryMethod(const QString& id)
+    {
+        return new MFLDAccelerometerAdaptor(id);
+    }
+
+protected:
+    MFLDAccelerometerAdaptor(const QString& id);
+    ~MFLDAccelerometerAdaptor();
+
+private:
+    DeviceAdaptorRingBuffer<OrientationData>* accelerometerBuffer_;
+    OrientationData orientationValue_;
+    QTime time;
+
+    void interpretEvent(int src, struct input_event *ev);
+    void commitOutput();
+    void interpretSync(int src);
+};
+
+#endif
diff --git a/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.pro b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.pro
new file mode 100644
index 0000000..ec77c68
--- /dev/null
+++ b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptor.pro
@@ -0,0 +1,28 @@
+TEMPLATE     = lib
+CONFIG      += plugin
+
+TARGET       = accelerometeradaptor
+
+include( ../../common-config.pri )
+
+HEADERS += mfldaccelerometeradaptor.h \
+           mfldaccelerometeradaptorplugin.h
+
+SOURCES += mfldaccelerometeradaptor.cpp \
+           mfldaccelerometeradaptorplugin.cpp
+
+SENSORFW_INCLUDEPATHS = ../.. \
+                        ../../include \
+                        ../ \
+                        ../../sensord \
+                        ../../datatypes \
+                        ../../filters 
+
+DEPENDPATH  += $$SENSORFW_INCLUDEPATHS
+INCLUDEPATH += $$SENSORFW_INCLUDEPATHS
+
+include(../../common-install.pri)
+publicheaders.files += $$HEADERS
+target.path = $$PLUGINPATH
+
+INSTALLS += target
diff --git a/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.cpp b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.cpp
new file mode 100644
index 0000000..c0006ac
--- /dev/null
+++ b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.cpp
@@ -0,0 +1,13 @@
+#include "mfldaccelerometeradaptorplugin.h"
+#include "mfldaccelerometeradaptor.h"
+#include "sensormanager.h"
+#include <QtDebug>
+
+void MFLDAccelerometerAdaptorPlugin::Register(class Loader&)
+{
+	qDebug() << "registering medfield accelerometeradaptor plugin";
+	SensorManager& sm = SensorManager::instance();
+	sm.registerDeviceAdaptor<MFLDAccelerometerAdaptor>("accelerometeradaptor");
+}
+
+Q_EXPORT_PLUGIN2(accelerometeradaptor, MFLDAccelerometerAdaptorPlugin)
diff --git a/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.h b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.h
new file mode 100644
index 0000000..353abe0
--- /dev/null
+++ b/adaptors/mfldaccelerometeradaptor/mfldaccelerometeradaptorplugin.h
@@ -0,0 +1,12 @@
+#ifndef MFLDACCELEROMETERADAPTORPLUGIN_H
+#define MFLDACCELEROMETERADAPTORPLUGIN_H
+
+#include "plugin.h"
+
+class MFLDAccelerometerAdaptorPlugin : public Plugin
+{
+private:
+    void Register(class Loader& l);
+};
+
+#endif
_______________________________________________
MeeGo-dev mailing list
[email protected]
http://lists.meego.com/listinfo/meego-dev

Reply via email to