Hi Timo,
This patch adds ALS adaptor for medfield.
Please check it.

Thanks,
Leo Yan
diff --git a/adaptors/adaptors.pro b/adaptors/adaptors.pro
index efb4bbf..a2815f0 100644
--- a/adaptors/adaptors.pro
+++ b/adaptors/adaptors.pro
@@ -12,5 +12,6 @@ internal {
               kbslideradaptor \
               proximityadaptor \
               proximityadaptor-evdev \
-              mrstaccelerometer
+              mrstaccelerometer \
+	      mfldalsadaptor 
 }
diff --git a/adaptors/mfldalsadaptor/mfldalsadaptor.cpp b/adaptors/mfldalsadaptor/mfldalsadaptor.cpp
new file mode 100644
index 0000000..bfa7004
--- /dev/null
+++ b/adaptors/mfldalsadaptor/mfldalsadaptor.cpp
@@ -0,0 +1,66 @@
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include "logging.h"
+#include "config.h"
+#include "mfldalsadaptor.h"
+#include "filters/utils.h"
+#include <QDebug>
+
+#define RANGE_PATH 	"/sys/bus/i2c/devices/5-0029/apds9802als/sensing_range"
+#define LUX_PATH	"/sys/bus/i2c/devices/5-0029/apds9802als/lux_output"
+
+MFLDALSAdaptor::MFLDALSAdaptor(const QString& id) : SysfsAdaptor(id, SysfsAdaptor::IntervalMode)
+{
+	int fd, range;
+
+	fd = open(RANGE_PATH, O_RDONLY);
+	if (fd < 0) {
+		sensordLogW() << "open():" << strerror(errno);
+		return;
+	}
+	if (read(fd, buf, sizeof(buf)) <= 0) {
+		sensordLogW() << "read():" << strerror(errno);
+		close(fd);
+		return;
+	}
+	close(fd);
+
+	sscanf(buf, "%d", &range);
+	introduceAvailableDataRange(DataRange(0, range, 1));
+	sensordLogT() << "Ambient light range: " << range;
+	
+	devId = 0;
+	addPath(LUX_PATH, devId);
+	ring_buffer = new DeviceAdaptorRingBuffer<TimedUnsigned>(1024);
+	addAdaptedSensor("als", "MFLD apds9802als", ring_buffer);
+}
+
+MFLDALSAdaptor::~MFLDALSAdaptor()
+{
+	delete ring_buffer;
+}
+
+void MFLDALSAdaptor::processSample(int pathId, int fd)
+{
+	if (pathId != devId) {
+		qDebug() << "pathId != devId";
+		return;
+	}
+
+	lseek(fd, 0, SEEK_SET);
+	if (read(fd, buf, sizeof(buf)) <= 0) {
+		qDebug() << "read() error";
+		sensordLogW() << "read():" << strerror(errno);
+		return;
+	}
+	sensordLogT() << "Ambient light value: " << buf;
+
+	TimedUnsigned* lux = ring_buffer->nextSlot();
+	sscanf(buf, "%d", &lux->value_);
+
+	lux->timestamp_ = Utils::getTimeStamp();
+	ring_buffer->commit();
+	ring_buffer->wakeUpReaders();
+}
diff --git a/adaptors/mfldalsadaptor/mfldalsadaptor.h b/adaptors/mfldalsadaptor/mfldalsadaptor.h
new file mode 100644
index 0000000..9d9e6c0
--- /dev/null
+++ b/adaptors/mfldalsadaptor/mfldalsadaptor.h
@@ -0,0 +1,34 @@
+#ifndef MFLDALSADAPTOR_H
+#define MFLDALSADAPTOR_H
+
+#include "sysfsadaptor.h"
+#include "sensord/deviceadaptorringbuffer.h"
+#include "filters/timedunsigned.h"
+#include <QTime>
+
+
+class MFLDALSAdaptor : public SysfsAdaptor
+{
+    Q_OBJECT;
+public:
+    static DeviceAdaptor* factoryMethod(const QString& id)
+    {
+        return new MFLDALSAdaptor(id);
+    }
+
+protected:
+    MFLDALSAdaptor(const QString& id);
+    ~MFLDALSAdaptor();
+
+    virtual bool setStandbyOverride(const bool override) { Q_UNUSED(override); return false; }
+private:
+
+    void processSample(int pathId, int fd);
+    int devId;
+    char buf[16];
+
+    DeviceAdaptorRingBuffer<TimedUnsigned>* ring_buffer;
+};
+
+#endif
+
diff --git a/adaptors/mfldalsadaptor/mfldalsadaptor.pro b/adaptors/mfldalsadaptor/mfldalsadaptor.pro
new file mode 100644
index 0000000..a723df9
--- /dev/null
+++ b/adaptors/mfldalsadaptor/mfldalsadaptor.pro
@@ -0,0 +1,27 @@
+TEMPLATE     = lib
+CONFIG      += plugin
+
+TARGET       = alsadaptor
+
+include( ../../common-config.pri )
+
+HEADERS += mfldalsadaptor.h \
+           mfldalsadaptorplugin.h
+
+SOURCES += mfldalsadaptor.cpp \
+           mfldalsadaptorplugin.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/mfldalsadaptor/mfldalsadaptorplugin.cpp b/adaptors/mfldalsadaptor/mfldalsadaptorplugin.cpp
new file mode 100644
index 0000000..bb3f4bf
--- /dev/null
+++ b/adaptors/mfldalsadaptor/mfldalsadaptorplugin.cpp
@@ -0,0 +1,13 @@
+#include "mfldalsadaptorplugin.h"
+#include "mfldalsadaptor.h"
+#include "sensormanager.h"
+#include <QtDebug>
+
+void MFLDALSAdaptorPlugin::Register(class Loader&)
+{
+    qDebug() << "registering mfldalsadaptor";
+    SensorManager& sm = SensorManager::instance();
+    sm.registerDeviceAdaptor<MFLDALSAdaptor>("alsadaptor");
+}
+
+Q_EXPORT_PLUGIN2(alsadaptor, MFLDALSAdaptorPlugin)
diff --git a/adaptors/mfldalsadaptor/mfldalsadaptorplugin.h b/adaptors/mfldalsadaptor/mfldalsadaptorplugin.h
new file mode 100644
index 0000000..70fc766
--- /dev/null
+++ b/adaptors/mfldalsadaptor/mfldalsadaptorplugin.h
@@ -0,0 +1,12 @@
+#ifndef MFLDALSADAPTORPLUGIN_H
+#define MFLDALSADAPTORPLUGIN_H
+
+#include "plugin.h"
+
+class MFLDALSAdaptorPlugin : 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