summaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/qdroidutils.cpp72
-rw-r--r--src/utils/qdroidutils.h28
-rw-r--r--src/utils/utils.pro20
3 files changed, 120 insertions, 0 deletions
diff --git a/src/utils/qdroidutils.cpp b/src/utils/qdroidutils.cpp
new file mode 100644
index 0000000..4004352
--- /dev/null
+++ b/src/utils/qdroidutils.cpp
@@ -0,0 +1,72 @@
+#include "qdroidutils.h"
+
+#ifdef Q_OS_LINUX_ANDROID
+#include <cutils/android_reboot.h>
+#include <hardware/lights.h>
+#endif
+
+/*!
+ * Reboots the system. Does not return.
+ *
+ * \sa powerOffSystem()
+ */
+void QDroidUtils::rebootSystem()
+{
+#ifdef Q_OS_LINUX_ANDROID
+ (void)android_reboot(ANDROID_RB_RESTART, 0, 0);
+ qFatal("android_reboot returned");
+#else
+ qDebug("QDroidUtils::rebootSystem()");
+#endif
+}
+
+/*!
+ * Shuts down the system. Does not return.
+ *
+ * \sa rebootSystem()
+ */
+void QDroidUtils::powerOffSystem()
+{
+#ifdef Q_OS_LINUX_ANDROID
+ (void)android_reboot(ANDROID_RB_POWEROFF, 0, 0);
+ qFatal("android_reboot returned");
+#else
+ qDebug("QDroidUtils::powerOffSystem()");
+#endif
+}
+
+/*!
+ * Sets the display brightness (i.e. the intensity of the backlight)
+ * to \a value. A value of 255 requests maximum brightness, while 0 requests
+ * minimum (typically, the backlight turned off).
+ *
+ * Returns true on success.
+ */
+//### TBD: add the user/sensor setting as parameter!
+bool QDroidUtils::setDisplayBrightness(quint8 value)
+{
+#ifdef Q_OS_LINUX_ANDROID
+ const struct hw_module_t* module = 0;
+ if (hw_get_module(LIGHTS_HARDWARE_MODULE_ID, &module))
+ return false;
+ if (!module || !module->methods || !module->methods->open)
+ return false;
+
+ struct light_device_t* device = 0;
+ if (module->methods->open(module, LIGHT_ID_BACKLIGHT, (struct hw_device_t**)&device))
+ return false;
+ if (!device || !device->set_light || !device->common.close)
+ return false;
+
+ struct light_state_t state;
+ memset(&state, 0, sizeof(light_state_t));
+ state.color = 0xff000000 | (value << 16) | (value << 8) | value;
+ if (!device->set_light(device, &state))
+ return false;
+
+ device->common.close(&device->common);
+#else
+ qDebug("QDroidUtils::setDisplayBrightness(%i)", value);
+#endif
+ return true;
+}
diff --git a/src/utils/qdroidutils.h b/src/utils/qdroidutils.h
new file mode 100644
index 0000000..5994ede
--- /dev/null
+++ b/src/utils/qdroidutils.h
@@ -0,0 +1,28 @@
+#ifndef QDROIDUTILS_H
+#define QDROIDUTILS_H
+
+#include <qobject.h>
+
+class Q_DECL_EXPORT QDroidUtils : public QObject
+{
+ Q_OBJECT
+public:
+ QDroidUtils(QObject* parent = 0) : QObject(parent)
+ {
+ }
+ ~QDroidUtils()
+ {
+ }
+
+ //### TBD: make an instance() method, for singleton use from C++ ?
+ //e.g. connect(myobj, mysig, QDroidUtils::instance(), slot(rebootSystem());
+
+public Q_SLOTS:
+ void rebootSystem();
+ void powerOffSystem();
+
+ bool setDisplayBrightness(quint8 value);
+
+};
+
+#endif // QDROIDUTILS_H
diff --git a/src/utils/utils.pro b/src/utils/utils.pro
new file mode 100644
index 0000000..c0216b7
--- /dev/null
+++ b/src/utils/utils.pro
@@ -0,0 +1,20 @@
+TARGET = QtDroidUtils
+#VERSION = 1.0.0
+CONFIG += dll warn_on
+
+QT = core
+#QT = core-private gui-private qml-private quick-private
+#QT_PRIVATE = v8-private
+
+#DEFINES += QT_NO_URL_CAST_FROM_STRING QT_NO_INTEGER_EVENT_COORDINATES
+
+MODULE = droidutils
+load(qt_module)
+
+LIBS += -lhardware -lcutils
+
+HEADERS += \
+ $$PWD/qdroidutils.h
+
+SOURCES += \
+ $$PWD/qdroidutils.cpp