264 lines
7.0 KiB
C
264 lines
7.0 KiB
C
/*
|
|
* Copyright © 1999 Network Computing Devices, Inc. All rights reserved.
|
|
*
|
|
* Author: Keith Packard
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <kdrive-config.h>
|
|
#endif
|
|
#include "kdrive.h"
|
|
#include "kkeymap.h"
|
|
#include <X11/keysym.h>
|
|
#include <inputstr.h>
|
|
|
|
#define VXWORKS_WIDTH 2
|
|
|
|
KeySym VxWorksKeymap[] = {
|
|
/*7 f1 */ XK_F1, NoSymbol,
|
|
/*8 escape */ XK_Escape, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*13 tab */ XK_Tab, NoSymbol,
|
|
/*14 ` */ XK_grave, XK_asciitilde,
|
|
/*15 f2 */ XK_F2, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*17 lctrl */ XK_Control_L, NoSymbol,
|
|
/*18 lshift */ XK_Shift_L, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*20 lock */ XK_Caps_Lock, NoSymbol,
|
|
/*21 q */ XK_Q, NoSymbol,
|
|
/*22 1 */ XK_1, XK_exclam,
|
|
/*23 f3 */ XK_F3, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*25 lalt */ XK_Meta_L, XK_Alt_L,
|
|
/*26 z */ XK_Z, NoSymbol,
|
|
/*27 s */ XK_S, NoSymbol,
|
|
/*28 a */ XK_A, NoSymbol,
|
|
/*29 w */ XK_W, NoSymbol,
|
|
/*30 2 */ XK_2, XK_at,
|
|
/*31 f4 */ XK_F4, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*33 c */ XK_C, NoSymbol,
|
|
/*34 x */ XK_X, NoSymbol,
|
|
/*35 d */ XK_D, NoSymbol,
|
|
/*36 e */ XK_E, NoSymbol,
|
|
/*37 4 */ XK_4, XK_dollar,
|
|
/*38 3 */ XK_3, XK_numbersign,
|
|
/*39 f5 */ XK_F5, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*41 space */ XK_space, NoSymbol,
|
|
/*42 v */ XK_V, NoSymbol,
|
|
/*43 f */ XK_F, NoSymbol,
|
|
/*44 t */ XK_T, NoSymbol,
|
|
/*45 r */ XK_R, NoSymbol,
|
|
/*46 5 */ XK_5, XK_percent,
|
|
/*47 f6 */ XK_F6, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*49 n */ XK_N, NoSymbol,
|
|
/*50 b */ XK_B, NoSymbol,
|
|
/*51 h */ XK_H, NoSymbol,
|
|
/*52 g */ XK_G, NoSymbol,
|
|
/*53 y */ XK_Y, NoSymbol,
|
|
/*54 6 */ XK_6, XK_asciicircum,
|
|
/*55 f7 */ XK_F7, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*57 ralt */ XK_Meta_R, XK_Alt_R,
|
|
/*58 m */ XK_M, NoSymbol,
|
|
/*59 j */ XK_J, NoSymbol,
|
|
/*60 u */ XK_U, NoSymbol,
|
|
/*61 7 */ XK_7, XK_ampersand,
|
|
/*62 8 */ XK_8, XK_asterisk,
|
|
/*63 f8 */ XK_F8, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*65 , */ XK_comma, XK_less,
|
|
/*66 k */ XK_K, NoSymbol,
|
|
/*67 i */ XK_I, NoSymbol,
|
|
/*68 o */ XK_O, NoSymbol,
|
|
/*69 0 */ XK_0, XK_parenright,
|
|
/*70 9 */ XK_9, XK_parenleft,
|
|
/*71 f9 */ XK_F9, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*73 . */ XK_period, XK_greater,
|
|
/*74 / */ XK_slash, XK_question,
|
|
/*75 l */ XK_L, NoSymbol,
|
|
/*76 ; */ XK_semicolon, XK_colon,
|
|
/*77 p */ XK_P, NoSymbol,
|
|
/*78 - */ XK_minus, XK_underscore,
|
|
/*79 f10 */ XK_F10, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*82 ' */ XK_apostrophe, XK_quotedbl,
|
|
NoSymbol, NoSymbol,
|
|
/*84 [ */ XK_bracketleft, XK_braceleft,
|
|
/*85 = */ XK_equal, XK_plus,
|
|
/*86 f11 */ XK_F11, NoSymbol,
|
|
/*87 sysrq */ XK_Sys_Req, XK_Print,
|
|
/*88 rctrl */ XK_Control_R, NoSymbol,
|
|
/*89 rshift */ XK_Shift_R, NoSymbol,
|
|
/*90 enter */ XK_Return, NoSymbol,
|
|
/*91 ] */ XK_bracketright, XK_braceright,
|
|
/*92 \ */ XK_backslash, XK_bar,
|
|
NoSymbol, NoSymbol,
|
|
/*94 f12 */ XK_F12, NoSymbol,
|
|
/*95 scrolllock*/ XK_Scroll_Lock, NoSymbol,
|
|
/*96 down */ XK_Down, NoSymbol,
|
|
/*97 left */ XK_Left, NoSymbol,
|
|
/*98 pause */ XK_Break, XK_Pause,
|
|
/*99 up */ XK_Up, NoSymbol,
|
|
/*100 delete */ XK_Delete, NoSymbol,
|
|
/*101 end */ XK_End, NoSymbol,
|
|
/*102 bs */ XK_BackSpace, NoSymbol,
|
|
/*103 insert */ XK_Insert, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*105 np 1 */ XK_KP_End, XK_KP_1,
|
|
/*106 right */ XK_Right, NoSymbol,
|
|
/*107 np 4 */ XK_KP_Left, XK_KP_4,
|
|
/*108 np 7 */ XK_KP_Home, XK_KP_7,
|
|
/*109 pgdn */ XK_Page_Down, NoSymbol,
|
|
/*110 home */ XK_Home, NoSymbol,
|
|
/*111 pgup */ XK_Page_Up, NoSymbol,
|
|
/*112 np 0 */ XK_KP_Insert, XK_KP_0,
|
|
/*113 np . */ XK_KP_Delete, XK_KP_Decimal,
|
|
/*114 np 2 */ XK_KP_Down, XK_KP_2,
|
|
/*115 np 5 */ XK_KP_5, NoSymbol,
|
|
/*116 np 6 */ XK_KP_Right, XK_KP_6,
|
|
/*117 np 8 */ XK_KP_Up, XK_KP_8,
|
|
/*118 numlock */ XK_Num_Lock, NoSymbol,
|
|
/*119 np / */ XK_KP_Divide, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*121 np enter */ XK_KP_Enter, NoSymbol,
|
|
/*122 np 3 */ XK_KP_Page_Down, XK_KP_3,
|
|
NoSymbol, NoSymbol,
|
|
/*124 np + */ XK_KP_Add, NoSymbol,
|
|
/*125 np 9 */ XK_KP_Page_Up, XK_KP_9,
|
|
/*126 np * */ XK_KP_Multiply, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*132 np - */ XK_KP_Subtract, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
NoSymbol, NoSymbol,
|
|
/*139 lwin */ XK_Super_L, NoSymbol,
|
|
/*140 rwin */ XK_Super_R, NoSymbol,
|
|
/*141 menu */ XK_Menu, NoSymbol,
|
|
};
|
|
|
|
void
|
|
VxWorksKeyboardLoad (void)
|
|
{
|
|
KeySym *k;
|
|
|
|
kdMinScanCode = 7;
|
|
kdKeymapWidth = VXWORKS_WIDTH;
|
|
kdMaxScanCode = 141;
|
|
memcpy (kdKeymap, VxWorksKeymap, sizeof (VxWorksKeymap));
|
|
}
|
|
|
|
static int kbdFd = -1;
|
|
|
|
#include <errno.h>
|
|
#include <event.h>
|
|
#include <kbd_ioctl.h>
|
|
|
|
extern KeyboardCtrl defaultKeyboardControl;
|
|
|
|
static void
|
|
VxWorksSetAutorepeat (unsigned char *repeats, Bool on)
|
|
{
|
|
int i;
|
|
unsigned char mask;
|
|
int scan_code;
|
|
int key_code;
|
|
unsigned char realkc;
|
|
|
|
if (on)
|
|
{
|
|
realkc = 1;
|
|
ioctl (kbdFd, KBD_ALL_REPEAT, &realkc);
|
|
for (scan_code = 7; scan_code <= 141; scan_code++)
|
|
{
|
|
key_code = scan_code + 1;
|
|
i = key_code >> 3;
|
|
mask = 1 << (key_code & 7);
|
|
if ((repeats[i] & mask) == 0)
|
|
{
|
|
realkc = scan_code;
|
|
ioctl (kbdFd, KBD_NO_REPEAT, &realkc);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
realkc = 0;
|
|
ioctl (kbdFd, KBD_ALL_REPEAT, &realkc);
|
|
}
|
|
}
|
|
|
|
int
|
|
VxWorksKeyboardInit (void)
|
|
{
|
|
|
|
kbdFd = open ("/dev/kbd", O_RDONLY, 0);
|
|
if (kbdFd < 0)
|
|
ErrorF ("keyboard open failure %d\n", errno);
|
|
VxWorksSetAutorepeat (defaultKeyboardControl.autoRepeats, TRUE);
|
|
return -1;
|
|
}
|
|
|
|
void
|
|
VxWorksKeyboardFini (int fd)
|
|
{
|
|
if (kbdFd >= 0)
|
|
{
|
|
close (kbdFd);
|
|
kbdFd = -1;
|
|
}
|
|
}
|
|
|
|
void
|
|
VxWorksKeyboardRead (int fd)
|
|
{
|
|
}
|
|
|
|
void
|
|
VxWorksKeyboardLeds (int leds)
|
|
{
|
|
DeviceIntPtr pKeyboard = inputInfo.keyboard;
|
|
KeyboardCtrl *ctrl = &pKeyboard->kbdfeed->ctrl;
|
|
led_ioctl_info led_info;
|
|
int i;
|
|
|
|
VxWorksSetAutorepeat (ctrl->autoRepeats, ctrl->autoRepeat);
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
led_info.bit_n = 1 << i;
|
|
led_info.OFF_or_ON = (leds & (1 << i)) != 0;
|
|
led_info.reversed = 0;
|
|
ioctl (kbdFd, KBD_SET_LED, &led_info);
|
|
}
|
|
}
|
|
|
|
void
|
|
VxWorksKeyboardBell (int volume, int frequency, int duration)
|
|
{
|
|
}
|
|
|
|
KdKeyboardFuncs VxWorksKeyboardFuncs = {
|
|
VxWorksKeyboardLoad,
|
|
VxWorksKeyboardInit,
|
|
VxWorksKeyboardRead,
|
|
VxWorksKeyboardLeds,
|
|
VxWorksKeyboardBell,
|
|
VxWorksKeyboardFini,
|
|
3,
|
|
};
|