diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2014-06-06 17:59:18 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2014-06-16 15:26:37 (GMT) |
commit | a5267f1a1fc8a7cd3cec158758630787b69a00ea (patch) | |
tree | a04a226ec844c77b3a6ceb14456886725a620bc9 | |
parent | ddd6871ca5ac7d82a17c10e4b617fa9c1785c5c1 (diff) |
Add sensor to detect ebook mode
-rw-r--r-- | sensors.py | 74 |
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() |