Can now read from the input device
authorEnrico Zini <enrico@enricozini.org>
Tue, 11 Aug 2009 18:20:25 +0000 (19:20 +0100)
committerEnrico Zini <enrico@enricozini.org>
Tue, 11 Aug 2009 18:20:25 +0000 (19:20 +0100)
src/input.vala

index 794645648532a1bad5a0ce250b3ae3f2f82d453e..805fc97750f628927edeee2bc770925c4c055310 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+[Compact]
+[CCode (cname = "input_event", cheader_filename = "linux/input.h")]
+public struct InputEvent
+{
+       public Posix.timeval time;
+       public uint16 type;
+       public uint16 code;
+       public int32 val;
+}
+
 /*
 import sys
 import os
 /*
 import sys
 import os
@@ -71,9 +81,21 @@ public abstract class DevInput : zavai.Service
 
     protected bool on_input_data(IOChannel source, IOCondition condition)
     {
 
     protected bool on_input_data(IOChannel source, IOCondition condition)
     {
-        stderr.printf("GOT INPUT ON %s\n", device);
+               if (condition != IOCondition.IN) return true;
+
+        stderr.printf("GOT INPUT ON %s %d\n", device, source.unix_get_fd());
+        char[] buf = new char[sizeof(InputEvent)];
+               size_t count_read;
+               source.read_chars(buf, out count_read);
+        stderr.printf("READ %zu chars\n", count_read);
+
+               InputEvent* ie = (InputEvent*)buf;
+        stderr.printf("INPUT EVENT time %lu.%lu type %hu code %hu val %d\n", (ulong)ie->time.tv_sec, ie->time.tv_usec, ie->type, ie->code, ie->val);
+
+        //ssize_t count = Posix.read(source.unix_get_fd(), buf, 16);
+        //stderr.printf("READ %zd chars: %m\n", count);
+
         /*
         /*
-        buf = self.input_fd.read(16)
         ts1, ts2, type, code, value = struct.unpack("LLHHI", buf)
         #print ts1, ts2, type, code, value
         if type == 1 and code == 119:
         ts1, ts2, type, code, value = struct.unpack("LLHHI", buf)
         #print ts1, ts2, type, code, value
         if type == 1 and code == 119:
@@ -107,6 +129,8 @@ public abstract class DevInput : zavai.Service
 
         // Open the device and listed to it using the GObject main loop
         fd = new IOChannel.file(device, "r");
 
         // Open the device and listed to it using the GObject main loop
         fd = new IOChannel.file(device, "r");
+               fd.set_encoding(null);
+               fd.set_buffered(false);
         fd_watch = fd.add_watch(IOCondition.IN, on_input_data);
 
                base.start();
         fd_watch = fd.add_watch(IOCondition.IN, on_input_data);
 
                base.start();