Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Using MCE interface for LED activation in Maemo 5

From Wiki
Jump to: navigation, search
Article Metadata
Compatibility
Platform(s):
Symbian
Article
Created: divanov (09 Feb 2010)
Last edited: hamishwillee (11 Oct 2012)

N900 device has LED, which can be controlled from application. There is MCE interface for controlling LED through DBus. MCE LED interface D-Bus methods - online documentation.

One can use dbus-send command line utility to try those methods without code writing. dbus-send manual page - note, an example contains missing quote.

Let's make an application, which plays all predefined LED patterns in a loop. QTimer is used to activate LedExample's slot every 5 seconds.

#include <QApplication>
#include <QTimer>
 
#include "ledexample.h"
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LedExample ledExample;
 
ledExample.show();
 
QTimer timer;
QObject::connect(&timer, SIGNAL(timeout()), &ledExample, SLOT(activate()));
timer.start(5000);
 
return a.exec();
}

This is how ledexample.h looks like.

#ifndef LED_EXAMPLE_H
#define LED_EXAMPLE_H
 
#include <QLabel>
#include <QStringList>
#include <QDBusInterface>
 
class LedExample : public QLabel
{
Q_OBJECT
 
public:
LedExample(QWidget *parent=0);
~LedExample();
 
public slots:
void activate();
 
private:
QDBusInterface *interface;
QStringList patterns;
int index;
};
 
#endif //LED_EXAMPLE_H

You can find list of predefined LED patterns in /etc/mce/mce.ini on the device. In constructor we fill string list with all those predefined patterns. MCE DBus interface is quite simple. In order to select currently active patter use MCE_ACTIVATE_LED_PATTERN and MCE_DEACTIVATE_LED_PATTERN with pattern name. We call those methods in activate() slot. And MCE_ENABLE_LED and MCE_DISABLE_LED switch LED actually on/off. We call those two methods in constructor and destructor respectively.

Implementation of LedExample:

#include <mce/dbus-names.h>
#include <QDBusMessage>
#include <QDebug>
 
#include "ledexample.h"
 
LedExample::LedExample(QWidget *parent)
: QLabel(parent), index(-1)
{
setAlignment(Qt::AlignCenter);
setFont(QFont("Nokia Sans", 35, QFont::Bold));
 
patterns << "PatternError" << "PatternDeviceOn" << "PatternPowerOn"
<< "PatternPowerOff" << "PatternCommunicationCall"
<< "PatternCommunicationIM" << "PatternCommunicationSMS"
<< "PatternCommunicationEmail" << "PatternCommonNotification"
<< "PatternWebcamActive" << "PatternBatteryCharging"
<< "PatternBatteryFull" << "PatternDeviceSoftOff";
 
interface = new QDBusInterface(MCE_SERVICE, MCE_REQUEST_PATH,
MCE_REQUEST_IF, QDBusConnection::systemBus(),
this);
 
QDBusMessage reply = interface->call(MCE_ENABLE_LED);
if (reply.type() == QDBusMessage::ErrorMessage)
qDebug() << reply.errorMessage();
}
 
 
LedExample::~LedExample()
{
QDBusMessage reply;
 
reply = interface->call(MCE_DISABLE_LED);
if (reply.type() == QDBusMessage::ErrorMessage)
qDebug() << reply.errorMessage();
 
if (index > -1) {
reply = interface->call(MCE_DEACTIVATE_LED_PATTERN, patterns.at(index));
if (reply.type() == QDBusMessage::ErrorMessage)
qDebug() << reply.errorMessage();
}
}
 
 
void LedExample::activate()
{
if (patterns.count() < 1)
return;
 
QDBusMessage reply;
 
if (index > -1) {
reply = interface->call(MCE_DEACTIVATE_LED_PATTERN, patterns.at(index));
if (reply.type() == QDBusMessage::ErrorMessage)
qDebug() << reply.errorMessage();
}
 
index = index < patterns.count() - 1 ? ++index : 0;
 
setText(patterns.at(index));
 
reply = interface->call(MCE_ACTIVATE_LED_PATTERN, patterns.at(index));
if (reply.type() == QDBusMessage::ErrorMessage)
qDebug() << reply.errorMessage();
}

Project file should be something like this:

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
 
QT += dbus
 
unix {
CONFIG += link_pkgconfig
PKGCONFIG += mce
}
 
# Input
HEADERS += ledexample.h
SOURCES += main.cpp \
ledexample.cpp
This page was last modified on 11 October 2012, at 01:18.
38 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×