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