Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2014-06-06 17:59:18 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2014-06-16 15:26:37 (GMT)
commita5267f1a1fc8a7cd3cec158758630787b69a00ea (patch)
treea04a226ec844c77b3a6ceb14456886725a620bc9
parentddd6871ca5ac7d82a17c10e4b617fa9c1785c5c1 (diff)
Add sensor to detect ebook mode
-rw-r--r--sensors.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/sensors.py b/sensors.py
new file mode 100644
index 0000000..7469612
--- /dev/null
+++ b/sensors.py
@@ -0,0 +1,74 @@
+import threading
+import subprocess
+
+from gi.repository import GObject
+
+GObject.threads_init()
+
+
+class EbookModeDetector(GObject.GObject):
+
+ EBOOK_DEVICE = '/dev/input/event4'
+
+ __gsignals__ = {
+ 'changed': (GObject.SignalFlags.RUN_FIRST, None, ([bool])), }
+
+ def __init__(self):
+ GObject.GObject.__init__(self)
+ self._ebook_mode = self._get_initial_value()
+ self._start_reading()
+
+ def get_ebook_mode(self):
+ return self._ebook_mode
+
+ def _get_initial_value(self):
+ output = subprocess.call(['evtest', '--query', self.EBOOK_DEVICE,
+ 'EV_SW', 'SW_TABLET_MODE'])
+ # 10 is ebook_mode, 0 is normal
+ return (output == 10)
+ logging.error('Initial state %s', (output == 10))
+
+ def _start_reading(self):
+ thread = threading.Thread(target=self._read)
+ thread.daemon = True
+ thread.start()
+
+ def _read(self):
+ fd = open(self.EBOOK_DEVICE, 'rb')
+ for x in range(12):
+ fd.read(1)
+ self._report_change(ord(fd.read(1)))
+
+ def _report_change(self, value):
+ self._ebook_mode = (value == 1)
+ self.emit('changed', self._ebook_mode)
+ # restart
+ GObject.idle_add(self._start_reading)
+
+# Move to tests
+
+import logging
+from gi.repository import Gtk
+
+
+def log_ebook_mode(detector, ebook_mode):
+ logging.error('Ebook mode %s', ebook_mode)
+
+
+def quit(win, detector):
+ Gtk.main_quit()
+
+
+def main():
+ win = Gtk.Window()
+ win.set_default_size(450, 550)
+ label = Gtk.Label('Put your xo in ebook mode nd in notebook mode')
+ win.add(label)
+ win.show_all()
+ ebookdetector = EbookModeDetector()
+ ebookdetector.connect('changed', log_ebook_mode)
+ win.connect('destroy', quit, ebookdetector)
+ Gtk.main()
+
+if __name__ == '__main__':
+ main()