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