x-input-evdev: 3 commits - configure.ac src/evdev.c src/evdev_funcs.c src/Xevdev.h

Tiago Vignatti vignatti at kemper.freedesktop.org
Mon Aug 28 20:59:11 PDT 2006


 configure.ac      |    6 +++
 src/Xevdev.h      |   22 +++++++++----
 src/evdev.c       |   88 +++++++++++++++++++++++++++++++++++-------------------
 src/evdev_funcs.c |   64 ++++++++++++++++++++++++++++++++++++++-
 4 files changed, 141 insertions(+), 39 deletions(-)

New commits:
diff-tree 7fcb82ab79cb23440e20fe0bab89f2021b90c27f (from 4eb26f059f7a0f3f27efd0739cb2dc37c1693510)
Author: Tiago Vignatti <vignatti at c3sl.ufpr.br>
Date:   Mon Aug 28 21:15:58 2006 -0300

    Revert "Arghh. Commit, do it!"
    
    This reverts commit 4eb26f059f7a0f3f27efd0739cb2dc37c1693510.

diff --git a/configure.ac b/configure.ac
index 10268b6..9607696 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,11 +63,15 @@ AC_ARG_WITH(xorg-module-dir,
 inputdir=${moduledir}/input
 AC_SUBST(inputdir)
 
+# Checks for extensions
+XORG_DRIVER_CHECK_EXT(XINPUT, inputproto)
+XORG_DRIVER_CHECK_EXT(XKB, kbproto)
+
 # Checks for pkg-config packages
 PKG_CHECK_MODULES(XORG, xorg-server xproto $REQUIRED_MODULES)
 sdkdir=$(pkg-config --variable=sdkdir xorg-server)
 
-CFLAGS="$CFLAGS "' -I$(top_srcdir)/src'
+CFLAGS="$CFLAGS $XORG_CFLAGS"' -I$(top_srcdir)/src'
 AC_SUBST([CFLAGS])
 
 # Checks for libraries.
diff --git a/src/Xevdev.h b/src/Xevdev.h
index a317c7f..98f7ea1 100644
--- a/src/Xevdev.h
+++ b/src/Xevdev.h
@@ -1,6 +1,10 @@
 #ifndef XEVDEV_H
 #define XEVDEV_H
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -13,9 +17,15 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-
 #include <X11/Xdefs.h>
-//#include <X11/extensions/XKBstr.h>
+
+#include "input.h"
+
+/* #include <X11/extensions/XKBstr.h> */
+
+
+/* XXX: CARD8 is required from some place */
+#define CARD8 int
 
 #ifndef BITS_PER_LONG
 #define BITS_PER_LONG           (sizeof(unsigned long) * 8)
@@ -44,8 +54,7 @@ typedef struct {
 typedef struct {
     int         real_buttons;
     int         buttons;
-    /* XXX: CARD8 is required from some place
-    CARD8       map[EVDEV_MAXBUTTONS]; */
+    CARD8       map[EVDEV_MAXBUTTONS]; 
     
     /* XXX: InputInfoPtr is from Xf86
     void        (*callback[EVDEV_MAXBUTTONS])(InputInfoPtr pInfo, int button, int value);*/
@@ -109,11 +118,10 @@ typedef struct _evdevDevice {
     const char          *device;
     int                 seen;
 /* XXX: InputInfoPtr is from xf86
-    InputInfoPtr        pInfo;
+    InputInfoPtr        pInfo;*/
     
     int                 (*callback)(DeviceIntPtr cb_data, int what);
-    */
-
+    
     evdevBitsRec        bits;
     struct input_id     id;
 
diff --git a/src/evdev.c b/src/evdev.c
index 5f75aa6..4bc177d 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -26,21 +26,24 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include "Xevdev.h"
 
 #include <unistd.h>
 #include <errno.h>
 #include <stdio.h>
 
-int             kbd_fd, /* Keyboard file descriptor */
-                ptr_fd; /* Mouse file descriptor */
+int             kbd_fd, 
+                ptr_fd; 
 
 static EvdevReadInputProc EvdevReadInput;
 
-
 static void
 EvdevSigio(int sig)
 {
@@ -51,6 +54,44 @@ EvdevSigio(int sig)
     EvdevUnblockSigio();
 }
 
+#ifdef FNONBLOCK
+#define NOBLOCK FNONBLOCK
+#else
+#define NOBLOCK FNDELAY
+#endif
+
+static void
+EvdevNonBlockFd (int fd)
+{
+    int flags;
+    flags = fcntl (fd, F_GETFL);
+    flags |= FASYNC|NOBLOCK;
+    fcntl (fd, F_SETFL, flags);
+} 
+
+static void
+EvdevAddFd (int fd)
+{
+    struct sigaction    act;
+    sigset_t            set;
+
+    fcntl (fd, F_SETOWN, getpid());
+    EvdevNonBlockFd (fd);
+    AddEnabledDevice (fd);
+    memset (&act, '\0', sizeof act);
+    act.sa_handler = EvdevSigio; 
+    sigemptyset (&act.sa_mask);
+    sigaddset (&act.sa_mask, SIGIO);
+    sigaddset (&act.sa_mask, SIGALRM);
+    sigaddset (&act.sa_mask, SIGVTALRM);
+    sigaction (SIGIO, &act, 0);
+    sigemptyset (&set);
+    sigprocmask (SIG_SETMASK, &set, 0);
+}
+
+evdevDevicePtr KbdDevice;
+evdevDevicePtr PtrDevice;
+
 int
 OpenEvdevInput (char		   *KbdEvdev,
 		char		   *PtrEvdev,
@@ -58,10 +99,7 @@ OpenEvdevInput (char		   *KbdEvdev,
 {
     struct sigaction sa;
 
-    evdevDevicePtr KbdDevice;
-    evdevDevicePtr PtrDevice;
-
-    
+   
     EvdevReadInput = readInput;
     
     if (!(KbdDevice = Xcalloc(sizeof(*KbdDevice))))
@@ -75,29 +113,19 @@ OpenEvdevInput (char		   *KbdEvdev,
     kbd_fd = evdevGetFDForDevice(KbdDevice);
     ptr_fd = evdevGetFDForDevice(PtrDevice);
 
-    /*
-     * Register the fd to receive SIGIO signals 
-     */
-    if (fcntl(kbd_fd, F_SETFL, fcntl(kbd_fd, F_GETFL) | O_ASYNC) == -1)
-        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", kbd_fd, strerror(errno));
-    if (fcntl(kbd_fd, F_SETOWN, getpid()) == -1)
-        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", kbd_fd, strerror(errno));
-
-    /*
-     * Register the fd to receive SIGIO signals 
-     */
-    if (fcntl(ptr_fd, F_SETFL, fcntl(ptr_fd, F_GETFL) | O_ASYNC) == -1)
-        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", ptr_fd, strerror(errno));
-    if (fcntl(ptr_fd, F_SETOWN, getpid()) == -1)
-        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", ptr_fd, strerror(errno));
-
-    sigemptyset(&sa.sa_mask);
-    sigaddset(&sa.sa_mask, SIGIO);
-    sa.sa_flags = 0;
-    sa.sa_handler = EvdevSigio;
-    sigaction(SIGIO, &sa, 0);
+    EvdevAddFd(kbd_fd);
+    EvdevAddFd(ptr_fd);
+
+    return 1;   
+}
+
+Bool
+EvdevInit(void)
+{
+//	EvdevAxesInit (device);
+//	EvdevBtnInit (device);
+//	EvdevKeyInit (device);
 
-    return 1;
 }
 
 //static int grabbed = 0;
diff --git a/src/evdev_funcs.c b/src/evdev_funcs.c
index 407a8f4..bc49823 100644
--- a/src/evdev_funcs.c
+++ b/src/evdev_funcs.c
@@ -26,7 +26,7 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
  */
 
 #include "Xevdev.h"
@@ -105,3 +105,65 @@ evdevGetBits (int fd, evdevBitsPtr bits)
     return 1;
 }
 
+#if 0
+int
+EvdevKeyInit (DeviceIntPtr device)
+{
+    /* Must get off the xf86 specific context
+    InputInfoPtr pInfo = device->public.devicePrivate;
+    evdevDevicePtr pEvdev = pInfo->private; */
+    evdevStatePtr state = &pEvdev->state;
+    KeySymsRec keySyms;
+    CARD8 modMap[MAP_LENGTH];
+    KeySym sym;
+    int i, j;
+
+    static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
+        { XK_Shift_L,           ShiftMask },
+        { XK_Shift_R,           ShiftMask },
+        { XK_Control_L,         ControlMask },
+        { XK_Control_R,         ControlMask },
+        { XK_Caps_Lock,         LockMask },
+        { XK_Alt_L,             AltMask },
+        { XK_Alt_R,             AltMask },
+        { XK_Num_Lock,          NumLockMask },
+        { XK_Scroll_Lock,       ScrollLockMask },
+        { XK_Mode_switch,       AltLangMask }
+    };
+
+    /* TODO:
+     * Ctrl-Alt-Backspace and other Ctrl-Alt-stuff should work
+     * XKB, let's try without the #ifdef nightmare
+     * Get keyboard repeat under control (right now caps lock repeats!)
+     */
+    /* xf86 specific
+    pInfo = device->public.devicePrivate;*/
+
+     /* Compute the modifier map */
+    memset(modMap, 0, sizeof modMap);
+
+    for (i = 0; i < ArrayLength(map) / GLYPHS_PER_KEY; i++) {
+        sym = map[i * GLYPHS_PER_KEY];
+        for (j = 0; j < ArrayLength(modifiers); j++) {
+            if (modifiers[j].keysym == sym)
+                modMap[i + MIN_KEYCODE] = modifiers[j].mask;
+        }
+    }
+
+    keySyms.map        = map;
+    keySyms.mapWidth   = GLYPHS_PER_KEY;
+    keySyms.minKeyCode = MIN_KEYCODE;
+    keySyms.maxKeyCode = MIN_KEYCODE + ArrayLength(map) / GLYPHS_PER_KEY - 1;
+
+
+    XkbSetRulesDflts (state->key->xkb_rules, state->key->xkb_model,
+            state->key->xkb_layout, state->key->xkb_variant,
+            state->key->xkb_options);
+
+    XkbInitKeyboardDeviceStruct (device, &state->key->xkbnames, &keySyms, modMap, EvdevKbdBell, EvdevKbdCtrl);
+
+    return Success;
+}
+
+#endif 
+
diff-tree 4eb26f059f7a0f3f27efd0739cb2dc37c1693510 (from 7af88f34414cb56d751b83dc192b75e6aecebba4)
Author: Tiago Vignatti <vignatti at c3sl.ufpr.br>
Date:   Mon Aug 28 21:02:54 2006 -0300

    Arghh. Commit, do it!

diff --git a/configure.ac b/configure.ac
index 9607696..10268b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,15 +63,11 @@ AC_ARG_WITH(xorg-module-dir,
 inputdir=${moduledir}/input
 AC_SUBST(inputdir)
 
-# Checks for extensions
-XORG_DRIVER_CHECK_EXT(XINPUT, inputproto)
-XORG_DRIVER_CHECK_EXT(XKB, kbproto)
-
 # Checks for pkg-config packages
 PKG_CHECK_MODULES(XORG, xorg-server xproto $REQUIRED_MODULES)
 sdkdir=$(pkg-config --variable=sdkdir xorg-server)
 
-CFLAGS="$CFLAGS $XORG_CFLAGS"' -I$(top_srcdir)/src'
+CFLAGS="$CFLAGS "' -I$(top_srcdir)/src'
 AC_SUBST([CFLAGS])
 
 # Checks for libraries.
diff --git a/src/Xevdev.h b/src/Xevdev.h
index 98f7ea1..a317c7f 100644
--- a/src/Xevdev.h
+++ b/src/Xevdev.h
@@ -1,10 +1,6 @@
 #ifndef XEVDEV_H
 #define XEVDEV_H
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -17,15 +13,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include <X11/Xdefs.h>
-
-#include "input.h"
-
-/* #include <X11/extensions/XKBstr.h> */
 
-
-/* XXX: CARD8 is required from some place */
-#define CARD8 int
+#include <X11/Xdefs.h>
+//#include <X11/extensions/XKBstr.h>
 
 #ifndef BITS_PER_LONG
 #define BITS_PER_LONG           (sizeof(unsigned long) * 8)
@@ -54,7 +44,8 @@ typedef struct {
 typedef struct {
     int         real_buttons;
     int         buttons;
-    CARD8       map[EVDEV_MAXBUTTONS]; 
+    /* XXX: CARD8 is required from some place
+    CARD8       map[EVDEV_MAXBUTTONS]; */
     
     /* XXX: InputInfoPtr is from Xf86
     void        (*callback[EVDEV_MAXBUTTONS])(InputInfoPtr pInfo, int button, int value);*/
@@ -118,10 +109,11 @@ typedef struct _evdevDevice {
     const char          *device;
     int                 seen;
 /* XXX: InputInfoPtr is from xf86
-    InputInfoPtr        pInfo;*/
+    InputInfoPtr        pInfo;
     
     int                 (*callback)(DeviceIntPtr cb_data, int what);
-    
+    */
+
     evdevBitsRec        bits;
     struct input_id     id;
 
diff --git a/src/evdev.c b/src/evdev.c
index 4bc177d..5f75aa6 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -26,24 +26,21 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include "Xevdev.h"
 
 #include <unistd.h>
 #include <errno.h>
 #include <stdio.h>
 
-int             kbd_fd, 
-                ptr_fd; 
+int             kbd_fd, /* Keyboard file descriptor */
+                ptr_fd; /* Mouse file descriptor */
 
 static EvdevReadInputProc EvdevReadInput;
 
+
 static void
 EvdevSigio(int sig)
 {
@@ -54,44 +51,6 @@ EvdevSigio(int sig)
     EvdevUnblockSigio();
 }
 
-#ifdef FNONBLOCK
-#define NOBLOCK FNONBLOCK
-#else
-#define NOBLOCK FNDELAY
-#endif
-
-static void
-EvdevNonBlockFd (int fd)
-{
-    int flags;
-    flags = fcntl (fd, F_GETFL);
-    flags |= FASYNC|NOBLOCK;
-    fcntl (fd, F_SETFL, flags);
-} 
-
-static void
-EvdevAddFd (int fd)
-{
-    struct sigaction    act;
-    sigset_t            set;
-
-    fcntl (fd, F_SETOWN, getpid());
-    EvdevNonBlockFd (fd);
-    AddEnabledDevice (fd);
-    memset (&act, '\0', sizeof act);
-    act.sa_handler = EvdevSigio; 
-    sigemptyset (&act.sa_mask);
-    sigaddset (&act.sa_mask, SIGIO);
-    sigaddset (&act.sa_mask, SIGALRM);
-    sigaddset (&act.sa_mask, SIGVTALRM);
-    sigaction (SIGIO, &act, 0);
-    sigemptyset (&set);
-    sigprocmask (SIG_SETMASK, &set, 0);
-}
-
-evdevDevicePtr KbdDevice;
-evdevDevicePtr PtrDevice;
-
 int
 OpenEvdevInput (char		   *KbdEvdev,
 		char		   *PtrEvdev,
@@ -99,7 +58,10 @@ OpenEvdevInput (char		   *KbdEvdev,
 {
     struct sigaction sa;
 
-   
+    evdevDevicePtr KbdDevice;
+    evdevDevicePtr PtrDevice;
+
+    
     EvdevReadInput = readInput;
     
     if (!(KbdDevice = Xcalloc(sizeof(*KbdDevice))))
@@ -113,19 +75,29 @@ OpenEvdevInput (char		   *KbdEvdev,
     kbd_fd = evdevGetFDForDevice(KbdDevice);
     ptr_fd = evdevGetFDForDevice(PtrDevice);
 
-    EvdevAddFd(kbd_fd);
-    EvdevAddFd(ptr_fd);
-
-    return 1;   
-}
-
-Bool
-EvdevInit(void)
-{
-//	EvdevAxesInit (device);
-//	EvdevBtnInit (device);
-//	EvdevKeyInit (device);
+    /*
+     * Register the fd to receive SIGIO signals 
+     */
+    if (fcntl(kbd_fd, F_SETFL, fcntl(kbd_fd, F_GETFL) | O_ASYNC) == -1)
+        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", kbd_fd, strerror(errno));
+    if (fcntl(kbd_fd, F_SETOWN, getpid()) == -1)
+        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", kbd_fd, strerror(errno));
+
+    /*
+     * Register the fd to receive SIGIO signals 
+     */
+    if (fcntl(ptr_fd, F_SETFL, fcntl(ptr_fd, F_GETFL) | O_ASYNC) == -1)
+        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", ptr_fd, strerror(errno));
+    if (fcntl(ptr_fd, F_SETOWN, getpid()) == -1)
+        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", ptr_fd, strerror(errno));
+
+    sigemptyset(&sa.sa_mask);
+    sigaddset(&sa.sa_mask, SIGIO);
+    sa.sa_flags = 0;
+    sa.sa_handler = EvdevSigio;
+    sigaction(SIGIO, &sa, 0);
 
+    return 1;
 }
 
 //static int grabbed = 0;
diff --git a/src/evdev_funcs.c b/src/evdev_funcs.c
index bc49823..407a8f4 100644
--- a/src/evdev_funcs.c
+++ b/src/evdev_funcs.c
@@ -26,7 +26,7 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
  */
 
 #include "Xevdev.h"
@@ -105,65 +105,3 @@ evdevGetBits (int fd, evdevBitsPtr bits)
     return 1;
 }
 
-#if 0
-int
-EvdevKeyInit (DeviceIntPtr device)
-{
-    /* Must get off the xf86 specific context
-    InputInfoPtr pInfo = device->public.devicePrivate;
-    evdevDevicePtr pEvdev = pInfo->private; */
-    evdevStatePtr state = &pEvdev->state;
-    KeySymsRec keySyms;
-    CARD8 modMap[MAP_LENGTH];
-    KeySym sym;
-    int i, j;
-
-    static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
-        { XK_Shift_L,           ShiftMask },
-        { XK_Shift_R,           ShiftMask },
-        { XK_Control_L,         ControlMask },
-        { XK_Control_R,         ControlMask },
-        { XK_Caps_Lock,         LockMask },
-        { XK_Alt_L,             AltMask },
-        { XK_Alt_R,             AltMask },
-        { XK_Num_Lock,          NumLockMask },
-        { XK_Scroll_Lock,       ScrollLockMask },
-        { XK_Mode_switch,       AltLangMask }
-    };
-
-    /* TODO:
-     * Ctrl-Alt-Backspace and other Ctrl-Alt-stuff should work
-     * XKB, let's try without the #ifdef nightmare
-     * Get keyboard repeat under control (right now caps lock repeats!)
-     */
-    /* xf86 specific
-    pInfo = device->public.devicePrivate;*/
-
-     /* Compute the modifier map */
-    memset(modMap, 0, sizeof modMap);
-
-    for (i = 0; i < ArrayLength(map) / GLYPHS_PER_KEY; i++) {
-        sym = map[i * GLYPHS_PER_KEY];
-        for (j = 0; j < ArrayLength(modifiers); j++) {
-            if (modifiers[j].keysym == sym)
-                modMap[i + MIN_KEYCODE] = modifiers[j].mask;
-        }
-    }
-
-    keySyms.map        = map;
-    keySyms.mapWidth   = GLYPHS_PER_KEY;
-    keySyms.minKeyCode = MIN_KEYCODE;
-    keySyms.maxKeyCode = MIN_KEYCODE + ArrayLength(map) / GLYPHS_PER_KEY - 1;
-
-
-    XkbSetRulesDflts (state->key->xkb_rules, state->key->xkb_model,
-            state->key->xkb_layout, state->key->xkb_variant,
-            state->key->xkb_options);
-
-    XkbInitKeyboardDeviceStruct (device, &state->key->xkbnames, &keySyms, modMap, EvdevKbdBell, EvdevKbdCtrl);
-
-    return Success;
-}
-
-#endif 
-
diff-tree 7af88f34414cb56d751b83dc192b75e6aecebba4 (from 424970118d18d86b392a6a530c56a46d169ec585)
Author: Tiago Vignatti <vignatti at c3sl.ufpr.br>
Date:   Mon Aug 28 20:50:46 2006 -0300

    The sigio stuff was built.
    Fixed configure.ac to accept $XORG_CFLAGS.
    Added DeviceIntPtr struct stuffs.

diff --git a/configure.ac b/configure.ac
index 10268b6..9607696 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,11 +63,15 @@ AC_ARG_WITH(xorg-module-dir,
 inputdir=${moduledir}/input
 AC_SUBST(inputdir)
 
+# Checks for extensions
+XORG_DRIVER_CHECK_EXT(XINPUT, inputproto)
+XORG_DRIVER_CHECK_EXT(XKB, kbproto)
+
 # Checks for pkg-config packages
 PKG_CHECK_MODULES(XORG, xorg-server xproto $REQUIRED_MODULES)
 sdkdir=$(pkg-config --variable=sdkdir xorg-server)
 
-CFLAGS="$CFLAGS "' -I$(top_srcdir)/src'
+CFLAGS="$CFLAGS $XORG_CFLAGS"' -I$(top_srcdir)/src'
 AC_SUBST([CFLAGS])
 
 # Checks for libraries.
diff --git a/src/Xevdev.h b/src/Xevdev.h
index a317c7f..98f7ea1 100644
--- a/src/Xevdev.h
+++ b/src/Xevdev.h
@@ -1,6 +1,10 @@
 #ifndef XEVDEV_H
 #define XEVDEV_H
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -13,9 +17,15 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-
 #include <X11/Xdefs.h>
-//#include <X11/extensions/XKBstr.h>
+
+#include "input.h"
+
+/* #include <X11/extensions/XKBstr.h> */
+
+
+/* XXX: CARD8 is required from some place */
+#define CARD8 int
 
 #ifndef BITS_PER_LONG
 #define BITS_PER_LONG           (sizeof(unsigned long) * 8)
@@ -44,8 +54,7 @@ typedef struct {
 typedef struct {
     int         real_buttons;
     int         buttons;
-    /* XXX: CARD8 is required from some place
-    CARD8       map[EVDEV_MAXBUTTONS]; */
+    CARD8       map[EVDEV_MAXBUTTONS]; 
     
     /* XXX: InputInfoPtr is from Xf86
     void        (*callback[EVDEV_MAXBUTTONS])(InputInfoPtr pInfo, int button, int value);*/
@@ -109,11 +118,10 @@ typedef struct _evdevDevice {
     const char          *device;
     int                 seen;
 /* XXX: InputInfoPtr is from xf86
-    InputInfoPtr        pInfo;
+    InputInfoPtr        pInfo;*/
     
     int                 (*callback)(DeviceIntPtr cb_data, int what);
-    */
-
+    
     evdevBitsRec        bits;
     struct input_id     id;
 
diff --git a/src/evdev.c b/src/evdev.c
index 5f75aa6..4bc177d 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -26,21 +26,24 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include "Xevdev.h"
 
 #include <unistd.h>
 #include <errno.h>
 #include <stdio.h>
 
-int             kbd_fd, /* Keyboard file descriptor */
-                ptr_fd; /* Mouse file descriptor */
+int             kbd_fd, 
+                ptr_fd; 
 
 static EvdevReadInputProc EvdevReadInput;
 
-
 static void
 EvdevSigio(int sig)
 {
@@ -51,6 +54,44 @@ EvdevSigio(int sig)
     EvdevUnblockSigio();
 }
 
+#ifdef FNONBLOCK
+#define NOBLOCK FNONBLOCK
+#else
+#define NOBLOCK FNDELAY
+#endif
+
+static void
+EvdevNonBlockFd (int fd)
+{
+    int flags;
+    flags = fcntl (fd, F_GETFL);
+    flags |= FASYNC|NOBLOCK;
+    fcntl (fd, F_SETFL, flags);
+} 
+
+static void
+EvdevAddFd (int fd)
+{
+    struct sigaction    act;
+    sigset_t            set;
+
+    fcntl (fd, F_SETOWN, getpid());
+    EvdevNonBlockFd (fd);
+    AddEnabledDevice (fd);
+    memset (&act, '\0', sizeof act);
+    act.sa_handler = EvdevSigio; 
+    sigemptyset (&act.sa_mask);
+    sigaddset (&act.sa_mask, SIGIO);
+    sigaddset (&act.sa_mask, SIGALRM);
+    sigaddset (&act.sa_mask, SIGVTALRM);
+    sigaction (SIGIO, &act, 0);
+    sigemptyset (&set);
+    sigprocmask (SIG_SETMASK, &set, 0);
+}
+
+evdevDevicePtr KbdDevice;
+evdevDevicePtr PtrDevice;
+
 int
 OpenEvdevInput (char		   *KbdEvdev,
 		char		   *PtrEvdev,
@@ -58,10 +99,7 @@ OpenEvdevInput (char		   *KbdEvdev,
 {
     struct sigaction sa;
 
-    evdevDevicePtr KbdDevice;
-    evdevDevicePtr PtrDevice;
-
-    
+   
     EvdevReadInput = readInput;
     
     if (!(KbdDevice = Xcalloc(sizeof(*KbdDevice))))
@@ -75,29 +113,19 @@ OpenEvdevInput (char		   *KbdEvdev,
     kbd_fd = evdevGetFDForDevice(KbdDevice);
     ptr_fd = evdevGetFDForDevice(PtrDevice);
 
-    /*
-     * Register the fd to receive SIGIO signals 
-     */
-    if (fcntl(kbd_fd, F_SETFL, fcntl(kbd_fd, F_GETFL) | O_ASYNC) == -1)
-        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", kbd_fd, strerror(errno));
-    if (fcntl(kbd_fd, F_SETOWN, getpid()) == -1)
-        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", kbd_fd, strerror(errno));
-
-    /*
-     * Register the fd to receive SIGIO signals 
-     */
-    if (fcntl(ptr_fd, F_SETFL, fcntl(ptr_fd, F_GETFL) | O_ASYNC) == -1)
-        fprintf(stderr, "fcntl(%d, O_ASYNC): %s\n", ptr_fd, strerror(errno));
-    if (fcntl(ptr_fd, F_SETOWN, getpid()) == -1)
-        fprintf(stderr, "fcntl(%d, F_SETOWN): %s\n", ptr_fd, strerror(errno));
-
-    sigemptyset(&sa.sa_mask);
-    sigaddset(&sa.sa_mask, SIGIO);
-    sa.sa_flags = 0;
-    sa.sa_handler = EvdevSigio;
-    sigaction(SIGIO, &sa, 0);
+    EvdevAddFd(kbd_fd);
+    EvdevAddFd(ptr_fd);
+
+    return 1;   
+}
+
+Bool
+EvdevInit(void)
+{
+//	EvdevAxesInit (device);
+//	EvdevBtnInit (device);
+//	EvdevKeyInit (device);
 
-    return 1;
 }
 
 //static int grabbed = 0;
diff --git a/src/evdev_funcs.c b/src/evdev_funcs.c
index 407a8f4..bc49823 100644
--- a/src/evdev_funcs.c
+++ b/src/evdev_funcs.c
@@ -26,7 +26,7 @@
  * other dealings in this Software without prior written authorization of
  * the copyright holder.
  *
- * Author:  Tiago Vignatti  (tv02 at c3sl.ufpr.br)
+ * Author:  Tiago Vignatti  (vignatti (at) c3sl.ufpr.br)
  */
 
 #include "Xevdev.h"
@@ -105,3 +105,65 @@ evdevGetBits (int fd, evdevBitsPtr bits)
     return 1;
 }
 
+#if 0
+int
+EvdevKeyInit (DeviceIntPtr device)
+{
+    /* Must get off the xf86 specific context
+    InputInfoPtr pInfo = device->public.devicePrivate;
+    evdevDevicePtr pEvdev = pInfo->private; */
+    evdevStatePtr state = &pEvdev->state;
+    KeySymsRec keySyms;
+    CARD8 modMap[MAP_LENGTH];
+    KeySym sym;
+    int i, j;
+
+    static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
+        { XK_Shift_L,           ShiftMask },
+        { XK_Shift_R,           ShiftMask },
+        { XK_Control_L,         ControlMask },
+        { XK_Control_R,         ControlMask },
+        { XK_Caps_Lock,         LockMask },
+        { XK_Alt_L,             AltMask },
+        { XK_Alt_R,             AltMask },
+        { XK_Num_Lock,          NumLockMask },
+        { XK_Scroll_Lock,       ScrollLockMask },
+        { XK_Mode_switch,       AltLangMask }
+    };
+
+    /* TODO:
+     * Ctrl-Alt-Backspace and other Ctrl-Alt-stuff should work
+     * XKB, let's try without the #ifdef nightmare
+     * Get keyboard repeat under control (right now caps lock repeats!)
+     */
+    /* xf86 specific
+    pInfo = device->public.devicePrivate;*/
+
+     /* Compute the modifier map */
+    memset(modMap, 0, sizeof modMap);
+
+    for (i = 0; i < ArrayLength(map) / GLYPHS_PER_KEY; i++) {
+        sym = map[i * GLYPHS_PER_KEY];
+        for (j = 0; j < ArrayLength(modifiers); j++) {
+            if (modifiers[j].keysym == sym)
+                modMap[i + MIN_KEYCODE] = modifiers[j].mask;
+        }
+    }
+
+    keySyms.map        = map;
+    keySyms.mapWidth   = GLYPHS_PER_KEY;
+    keySyms.minKeyCode = MIN_KEYCODE;
+    keySyms.maxKeyCode = MIN_KEYCODE + ArrayLength(map) / GLYPHS_PER_KEY - 1;
+
+
+    XkbSetRulesDflts (state->key->xkb_rules, state->key->xkb_model,
+            state->key->xkb_layout, state->key->xkb_variant,
+            state->key->xkb_options);
+
+    XkbInitKeyboardDeviceStruct (device, &state->key->xkbnames, &keySyms, modMap, EvdevKbdBell, EvdevKbdCtrl);
+
+    return Success;
+}
+
+#endif 
+



More information about the xorg-commit mailing list