Files
Astral/patches/xf86-input-keyboard/jinx-working-patch.patch
T

225 lines
5.6 KiB
Diff

diff --git xf86-input-keyboard-clean/configure.ac xf86-input-keyboard-workdir/configure.ac
index 0f71ce3..024edd3 100644
--- xf86-input-keyboard-clean/configure.ac
+++ xf86-input-keyboard-workdir/configure.ac
@@ -57,6 +57,11 @@ AC_SUBST(inputdir)
# The keyboard driver code is O/S specific
case $host_os in
+
+ astral*)
+ IS_ASTRAL="yes"
+ ;;
+
linux*)
AC_MSG_ERROR([This is not the keyboard driver you are looking for. Use evdev or libinput.])
;;
@@ -95,6 +100,7 @@ case $host_os in
esac
AC_SUBST([OS_FLAGS])
+AM_CONDITIONAL(ASTRAL, [test "x$IS_ASTRAL" = xyes])
AM_CONDITIONAL(BSD, [test "x$IS_BSD" = xyes])
AM_CONDITIONAL(SOLARIS, [test "x$IS_SOLARIS" = xyes])
AM_CONDITIONAL(HURD, [test "x$IS_HURD" = xyes])
diff --git xf86-input-keyboard-clean/src/Makefile.am xf86-input-keyboard-workdir/src/Makefile.am
index 52f5f4d..3899868 100644
--- xf86-input-keyboard-clean/src/Makefile.am
+++ xf86-input-keyboard-workdir/src/Makefile.am
@@ -26,10 +26,15 @@ kbd_drv_la_SOURCES = kbd.c xf86OSKbd.h xf86Keymap.h atKeynames.h
kbd_drv_la_LIBADD = $(XORG_LIBS)
kbd_drv_ladir = @inputdir@
+ASTRAL_SRCS = astral_kbd.c at_scancode.c
BSD_SRCS = bsd_KbdMap.c bsd_kbd.c bsd_kbd.h at_scancode.c
HURD_SRCS = hurd_kbd.c at_scancode.c
SOLARIS_SRCS = sun_kbd.c sun_kbd.h sun_kbdMap.c
+if ASTRAL
+kbd_drv_la_SOURCES += $(ASTRAL_SRCS)
+endif
+
if BSD
kbd_drv_la_SOURCES += $(BSD_SRCS)
endif
@@ -42,4 +47,4 @@ if HURD
kbd_drv_la_SOURCES += $(HURD_SRCS)
endif
-EXTRA_DIST = $(BSD_SRCS) $(HURD_SRCS) $(SOLARIS_SRCS)
+EXTRA_DIST = $(ASTRAL_SRCS) $(BSD_SRCS) $(HURD_SRCS) $(SOLARIS_SRCS)
diff --git xf86-input-keyboard-workdir/src/astral_KbdMap.c xf86-input-keyboard-workdir/src/astral_KbdMap.c
new file mode 100644
index 0000000..2ca19fd
--- /dev/null
+++ xf86-input-keyboard-workdir/src/astral_KbdMap.c
@@ -0,0 +1,27 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <xorg-server.h>
+#include <X11/X.h>
+
+#include "compiler.h"
+
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86_OSlib.h"
+
+#include "xf86Xinput.h"
+#include "xf86OSKbd.h"
+#include "atKeynames.h"
+#include "xf86Keymap.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+void getmap(InputInfoPtr info, KeySymsPtr syms, CARD8 *map){
+ syms->map = map;
+ syms->mapWidth = GLYPHS_PER_KEY;
+ syms->minKeyCode = MIN_KEYCODE;
+ syms->maxKeyCode = MAX_KEYCODE;
+}
diff --git xf86-input-keyboard-workdir/src/astral_kbd.c xf86-input-keyboard-workdir/src/astral_kbd.c
new file mode 100644
index 0000000..9de5fa7
--- /dev/null
+++ xf86-input-keyboard-workdir/src/astral_kbd.c
@@ -0,0 +1,135 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <xorg-server.h>
+#include <X11/X.h>
+
+#include "compiler.h"
+
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86_OSlib.h"
+
+#include "xf86Xinput.h"
+#include "xf86OSKbd.h"
+#include "atKeynames.h"
+#include "xf86Keymap.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+// astral stuff
+
+#define KBPACKET_FLAGS_RELEASED 1
+#define KBPACKET_FLAGS_LEFTCTRL 2
+#define KBPACKET_FLAGS_CAPSLOCK 4
+#define KBPACKET_FLAGS_LEFTALT 8
+#define KBPACKET_FLAGS_RIGHTALT 16
+#define KBPACKET_FLAGS_LEFTSHIFT 32
+#define KBPACKET_FLAGS_RIGHTCTRL 64
+#define KBPACKET_FLAGS_RIGHTSHIFT 128
+
+#define KEYCODE_KEYPADENTER 96
+#define KEYCODE_RIGHTCTRL 97
+#define KEYCODE_KEYPADSLASH 98
+#define KEYCODE_SYSREQ 99
+#define KEYCODE_RIGHTALT 100
+#define KEYCODE_LINEFEED 101
+#define KEYCODE_HOME 102
+#define KEYCODE_UP 103
+#define KEYCODE_PAGEUP 104
+#define KEYCODE_LEFT 105
+#define KEYCODE_RIGHT 106
+#define KEYCODE_END 107
+#define KEYCODE_DOWN 108
+#define KEYCODE_PAGEDOWN 109
+#define KEYCODE_INSERT 110
+#define KEYCODE_DELETE 111
+
+typedef struct {
+ char ascii;
+ uintmax_t keycode;
+ int flags;
+} kbpacket_t;
+
+
+// interface
+
+static int nop(){
+ return Success;
+}
+
+static int keycodeMap[] = {
+ KEYCODE_KEYPADENTER, KEY_KP_Enter,
+ KEYCODE_RIGHTCTRL, KEY_RCtrl,
+ KEYCODE_KEYPADSLASH, KEY_KP_Divide,
+ KEYCODE_RIGHTALT, KEY_AltLang,
+ KEYCODE_LINEFEED, KEY_KP_Enter,
+ KEYCODE_HOME, KEY_Home,
+ KEYCODE_UP, KEY_Up,
+ KEYCODE_PAGEUP, KEY_PgUp,
+ KEYCODE_LEFT, KEY_Left,
+ KEYCODE_RIGHT, KEY_Right,
+ KEYCODE_END, KEY_End,
+ KEYCODE_DOWN, KEY_Down,
+ KEYCODE_PAGEDOWN, KEY_PgDown,
+ KEYCODE_INSERT, KEY_Insert,
+ KEYCODE_DELETE, KEY_Delete
+};
+
+#define KEYCODE_MAP_SIZE (sizeof(keycodeMap) / sizeof(int))
+
+static int getleds(InputInfoPtr pInfo){return 0;}
+
+static int init(InputInfoPtr, int){return Success;}
+
+static void kbdread(InputInfoPtr info){
+ KbdDevPtr kbd = (KbdDevPtr) info->private;
+ kbpacket_t packet;
+
+ while (read(info->fd, &packet, sizeof(kbpacket_t))) {
+ int keycode = packet.keycode;
+
+ // is it a keycode that isn't in the AT keymap?
+ for (int i = 0; i < KEYCODE_MAP_SIZE; i += 2) {
+ if (keycode == keycodeMap[i]) {
+ keycode = keycodeMap[i + 1];
+ break;
+ }
+ }
+
+ kbd->PostEvent(info, keycode, (packet.flags & KBPACKET_FLAGS_RELEASED) ? FALSE : TRUE);
+ }
+
+}
+
+static Bool openkeyboard(InputInfoPtr info){
+ char *kbdPath = xf86SetStrOption(info->options, "Device", "/dev/keyboard0");
+ info->fd = open("/dev/keyboard0", O_NONBLOCK | O_RDONLY);
+ if(info->fd == -1)
+ FatalError("Failed to open keyboard (%s)\n",strerror(errno));
+
+ info->read_input = kbdread;
+
+ return TRUE;
+}
+
+Bool xf86OSKbdPreInit(InputInfoPtr info){
+
+ KbdDevPtr kbd = info->private;
+
+ kbd->KbdInit = init;
+ kbd->KbdOn = nop;
+ kbd->KbdOff = nop;
+ kbd->Bell = nop;
+ kbd->SetLeds = nop;
+ kbd->GetLeds = getleds;
+ kbd->KbdGetMapping = nop;
+ kbd->RemapScanCode = 0;
+ kbd->OpenKeyboard = openkeyboard;
+
+ kbd->private = NULL;
+
+ return TRUE;
+}