From 75844f6a106be9caaa61aa09e27b0836fdd46df6 Mon Sep 17 00:00:00 2001
From: Xin, Zhang<xing.z.zhang@intel.com>
Date: Wed, 21 Jul 2010 09:07:52 +0800
Subject: [PATCH 1/2] add mrst

---
 adaptors/mrstaccelerometer/mrstaccelerometer.pro   |   28 +++++++
 .../mrstaccelerometer/mrstaccelerometeradaptor.cpp |   84 ++++++++++++++++++++
 .../mrstaccelerometer/mrstaccelerometeradaptor.h   |   33 ++++++++
 .../mrstaccelerometeradaptorplugin.cpp             |   13 +++
 .../mrstaccelerometeradaptorplugin.h               |   12 +++
 5 files changed, 170 insertions(+), 0 deletions(-)
 create mode 100644 adaptors/mrstaccelerometer/mrstaccelerometer.pro
 create mode 100644 adaptors/mrstaccelerometer/mrstaccelerometeradaptor.cpp
 create mode 100644 adaptors/mrstaccelerometer/mrstaccelerometeradaptor.h
 create mode 100644 adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.cpp
 create mode 100644 adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.h

diff --git a/adaptors/mrstaccelerometer/mrstaccelerometer.pro b/adaptors/mrstaccelerometer/mrstaccelerometer.pro
new file mode 100644
index 0000000..166f0b0
--- /dev/null
+++ b/adaptors/mrstaccelerometer/mrstaccelerometer.pro
@@ -0,0 +1,28 @@
+TEMPLATE     = lib
+CONFIG      += plugin
+
+TARGET       = mrstaccelerometeradaptor-mrst
+
+include( ../../common-config.pri )
+
+HEADERS += mrstaccelerometeradaptor.h \
+           mrstaccelerometeradaptorplugin.h
+
+SOURCES += mrstaccelerometeradaptor.cpp \
+           mrstaccelerometeradaptorplugin.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/mrstaccelerometer/mrstaccelerometeradaptor.cpp b/adaptors/mrstaccelerometer/mrstaccelerometeradaptor.cpp
new file mode 100644
index 0000000..95d8106
--- /dev/null
+++ b/adaptors/mrstaccelerometer/mrstaccelerometeradaptor.cpp
@@ -0,0 +1,84 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "mrstaccelerometeradaptor.h"
+#include "logging.h"
+#include "filters/utils.h"
+
+MRSTAccelAdaptor::MRSTAccelAdaptor (const QString& id) :
+    SysfsAdaptor (id, SysfsAdaptor::IntervalMode)
+{
+    struct stat st;
+
+    devPath = Config::configuration ()->value ("device_sys_path").toString ();
+    if ( lstat (devPath.toAscii().constData(), &st) < 0 ) {
+        sensordLogW () << devPath << "no found";
+        return;
+    }
+
+    devId = 0;
+    addPath (devPath, devId);
+    buffer = new DeviceAdaptorRingBuffer<OrientationData>(1024);
+    addAdaptedSensor("accelerometer", "MRST accelerometer", buffer);
+}
+
+MRSTAccelAdaptor::~MRSTAccelAdaptor () {
+    delete buffer;
+}
+
+bool MRSTAccelAdaptor::startSensor (const QString& sensorid) {
+    if ( !(SysfsAdaptor::startSensor (sensorid)) )
+        return false;
+
+    sensordLogD() << "MRSTAccelAdaptor start\n";
+    return true;
+}
+
+void MRSTAccelAdaptor::stopSensor (const QString& sensorid) {
+    SysfsAdaptor::stopSensor(sensorid);
+    sensordLogD() << "MRSTAccelAdaptor stop\n";
+}
+
+void MRSTAccelAdaptor::processSample (int pathId, int fd) {
+    char buf[32];
+    int x, y, z;
+
+    if ( pathId != devId ) {
+        sensordLogW () << "Wrong pathId" << pathId;
+        return;
+    }
+
+    lseek (fd, 0, SEEK_SET);
+    if ( read (fd, buf, sizeof(buf)) < 0 ) {
+        sensordLogW () << "Read failed";
+        return;
+    }
+
+    if ( sscanf (buf, "(%d,%d,%d)", &x, &y, &z) == 0 ) {
+        sensordLogW () << "Wrong data format";
+        return;
+    }
+
+    static float step = 2.0 / 116.0;
+    float fx, fy, fz;
+
+    fx = x * step;
+    fy = y * step;
+    fz = z * step;
+
+    /* Translate to mg */
+    x = fx * 1000;
+    y = fy * 1000;
+    z = fz * 1000;
+
+    OrientationData* d = buffer->nextSlot ();
+    d->timestamp_ = Utils::getTimeStamp();
+    d->x_ = x;
+    d->y_ = y;
+    d->z_ = z;
+
+    buffer->commit ();
+    buffer->wakeUpReaders ();
+}
diff --git a/adaptors/mrstaccelerometer/mrstaccelerometeradaptor.h b/adaptors/mrstaccelerometer/mrstaccelerometeradaptor.h
new file mode 100644
index 0000000..5ad1866
--- /dev/null
+++ b/adaptors/mrstaccelerometer/mrstaccelerometeradaptor.h
@@ -0,0 +1,33 @@
+#ifndef MRSTACCELEROMETERADPTOR_H
+#define MRSTACCELEROMETERADPTOR_H
+#include "sensord/sysfsadaptor.h"
+#include <QString>
+#include <QStringList>
+#include <linux/input.h>
+#include <sensord/filterproperty.h>
+#include "sensord/deviceadaptorringbuffer.h"
+#include "filters/orientationdata.h"
+#include <QTime>
+
+class MRSTAccelAdaptor : public SysfsAdaptor {
+    Q_OBJECT
+
+    public:
+        static DeviceAdaptor* factoryMethod (const QString& id) {
+            return new MRSTAccelAdaptor (id);
+        }
+        MRSTAccelAdaptor (const QString& id);
+        ~MRSTAccelAdaptor ();
+
+        bool startSensor (const QString& sensorid);
+        void stopSensor (const QString& sensorid);
+
+    protected:
+        void processSample (int pathId, int fd);
+
+    private:
+        DeviceAdaptorRingBuffer<OrientationData>* buffer;
+        QString devPath;
+        int devId;
+};
+#endif
diff --git a/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.cpp b/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.cpp
new file mode 100644
index 0000000..9235996
--- /dev/null
+++ b/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.cpp
@@ -0,0 +1,13 @@
+#include "mrstaccelerometeradaptorplugin.h"
+#include "mrstaccelerometeradaptor.h"
+#include "sensormanager.h"
+#include <QtDebug>
+
+void MRSTAccelerometerAdaptorPlugin::Register(class Loader&)
+{
+    qDebug() << "registering mrstaccelerometeradaptor";
+    SensorManager& sm = SensorManager::instance();
+    sm.registerDeviceAdaptor<MRSTAccelAdaptor>("accelerometeradaptor");
+}
+
+Q_EXPORT_PLUGIN2(accelerometeradaptor-mrst, MRSTAccelerometerAdaptorPlugin)
diff --git a/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.h b/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.h
new file mode 100644
index 0000000..f038e9e
--- /dev/null
+++ b/adaptors/mrstaccelerometer/mrstaccelerometeradaptorplugin.h
@@ -0,0 +1,12 @@
+#ifndef MRSTACCELEROMETERADAPTORPLUGIN_H
+#define MRSTACCELEROMETERADAPTORPLUGIN_H
+
+#include "plugin.h"
+
+class MRSTAccelerometerAdaptorPlugin : public Plugin
+{
+private:
+    void Register(class Loader& l);
+};
+
+#endif
-- 
1.6.2.2

