00001
00002
00003
00004
00005
00006
00007
00008
00009
#include "kdrive.h"
00010
#include "kkeymap.h"
00011
#include <X11/keysym.h>
00012
#include <inputstr.h>
00013
00014
#define VXWORKS_WIDTH 2
00015
00016 KeySym
VxWorksKeymap[] = {
00017 XK_F1, NoSymbol,
00018 XK_Escape, NoSymbol,
00019 NoSymbol, NoSymbol,
00020 NoSymbol, NoSymbol,
00021 NoSymbol, NoSymbol,
00022 NoSymbol, NoSymbol,
00023 XK_Tab, NoSymbol,
00024 XK_grave, XK_asciitilde,
00025 XK_F2, NoSymbol,
00026 NoSymbol, NoSymbol,
00027 XK_Control_L, NoSymbol,
00028 XK_Shift_L, NoSymbol,
00029 NoSymbol, NoSymbol,
00030 XK_Caps_Lock, NoSymbol,
00031 XK_Q, NoSymbol,
00032 XK_1, XK_exclam,
00033 XK_F3, NoSymbol,
00034 NoSymbol, NoSymbol,
00035 XK_Meta_L, XK_Alt_L,
00036 XK_Z, NoSymbol,
00037 XK_S, NoSymbol,
00038 XK_A, NoSymbol,
00039 XK_W, NoSymbol,
00040 XK_2, XK_at,
00041 XK_F4, NoSymbol,
00042 NoSymbol, NoSymbol,
00043 XK_C, NoSymbol,
00044 XK_X, NoSymbol,
00045 XK_D, NoSymbol,
00046 XK_E, NoSymbol,
00047 XK_4, XK_dollar,
00048 XK_3, XK_numbersign,
00049 XK_F5, NoSymbol,
00050 NoSymbol, NoSymbol,
00051 XK_space, NoSymbol,
00052 XK_V, NoSymbol,
00053 XK_F, NoSymbol,
00054 XK_T, NoSymbol,
00055 XK_R, NoSymbol,
00056 XK_5, XK_percent,
00057 XK_F6, NoSymbol,
00058 NoSymbol, NoSymbol,
00059 XK_N, NoSymbol,
00060 XK_B, NoSymbol,
00061 XK_H, NoSymbol,
00062 XK_G, NoSymbol,
00063 XK_Y, NoSymbol,
00064 XK_6, XK_asciicircum,
00065 XK_F7, NoSymbol,
00066 NoSymbol, NoSymbol,
00067 XK_Meta_R, XK_Alt_R,
00068 XK_M, NoSymbol,
00069 XK_J, NoSymbol,
00070 XK_U, NoSymbol,
00071 XK_7, XK_ampersand,
00072 XK_8, XK_asterisk,
00073 XK_F8, NoSymbol,
00074 NoSymbol, NoSymbol,
00075 XK_comma, XK_less,
00076 XK_K, NoSymbol,
00077 XK_I, NoSymbol,
00078 XK_O, NoSymbol,
00079 XK_0, XK_parenright,
00080 XK_9, XK_parenleft,
00081 XK_F9, NoSymbol,
00082 NoSymbol, NoSymbol,
00083 XK_period, XK_greater,
00084 XK_slash, XK_question,
00085 XK_L, NoSymbol,
00086 XK_semicolon, XK_colon,
00087 XK_P, NoSymbol,
00088 XK_minus, XK_underscore,
00089 XK_F10, NoSymbol,
00090 NoSymbol, NoSymbol,
00091 NoSymbol, NoSymbol,
00092 XK_apostrophe, XK_quotedbl,
00093 NoSymbol, NoSymbol,
00094 XK_bracketleft, XK_braceleft,
00095 XK_equal, XK_plus,
00096 XK_F11, NoSymbol,
00097 XK_Sys_Req, XK_Print,
00098 XK_Control_R, NoSymbol,
00099 XK_Shift_R, NoSymbol,
00100 XK_Return, NoSymbol,
00101 XK_bracketright, XK_braceright,
00102 XK_backslash, XK_bar,
00103 NoSymbol, NoSymbol,
00104 XK_F12, NoSymbol,
00105 XK_Scroll_Lock, NoSymbol,
00106 XK_Down, NoSymbol,
00107 XK_Left, NoSymbol,
00108 XK_Break, XK_Pause,
00109 XK_Up, NoSymbol,
00110 XK_Delete, NoSymbol,
00111 XK_End, NoSymbol,
00112 XK_BackSpace, NoSymbol,
00113 XK_Insert, NoSymbol,
00114 NoSymbol, NoSymbol,
00115 XK_KP_End, XK_KP_1,
00116 XK_Right, NoSymbol,
00117 XK_KP_Left, XK_KP_4,
00118 XK_KP_Home, XK_KP_7,
00119 XK_Page_Down, NoSymbol,
00120 XK_Home, NoSymbol,
00121 XK_Page_Up, NoSymbol,
00122 XK_KP_Insert, XK_KP_0,
00123 XK_KP_Delete, XK_KP_Decimal,
00124 XK_KP_Down, XK_KP_2,
00125 XK_KP_5, NoSymbol,
00126 XK_KP_Right, XK_KP_6,
00127 XK_KP_Up, XK_KP_8,
00128 XK_Num_Lock, NoSymbol,
00129 XK_KP_Divide, NoSymbol,
00130 NoSymbol, NoSymbol,
00131 XK_KP_Enter, NoSymbol,
00132 XK_KP_Page_Down, XK_KP_3,
00133 NoSymbol, NoSymbol,
00134 XK_KP_Add, NoSymbol,
00135 XK_KP_Page_Up, XK_KP_9,
00136 XK_KP_Multiply, NoSymbol,
00137 NoSymbol, NoSymbol,
00138 NoSymbol, NoSymbol,
00139 NoSymbol, NoSymbol,
00140 NoSymbol, NoSymbol,
00141 NoSymbol, NoSymbol,
00142 XK_KP_Subtract, NoSymbol,
00143 NoSymbol, NoSymbol,
00144 NoSymbol, NoSymbol,
00145 NoSymbol, NoSymbol,
00146 NoSymbol, NoSymbol,
00147 NoSymbol, NoSymbol,
00148 NoSymbol, NoSymbol,
00149 XK_Super_L, NoSymbol,
00150 XK_Super_R, NoSymbol,
00151 XK_Menu, NoSymbol,
00152 };
00153
00154
void
00155 VxWorksKeyboardLoad (
void)
00156 {
00157 KeySym *
k;
00158
00159
kdMinScanCode = 7;
00160
kdKeymapWidth = VXWORKS_WIDTH;
00161
kdMaxScanCode = 141;
00162 memcpy (
kdKeymap,
VxWorksKeymap,
sizeof (
VxWorksKeymap));
00163 }
00164
00165 static int kbdFd = -1;
00166
00167
#include <errno.h>
00168
#include <event.h>
00169
#include <kbd_ioctl.h>
00170
00171 extern KeybdCtrl defaultKeyboardControl;
00172
00173
static void
00174 VxWorksSetAutorepeat (
unsigned char *repeats, Bool on)
00175 {
00176
int i;
00177
unsigned char mask;
00178
int scan_code;
00179
int key_code;
00180
unsigned char realkc;
00181
00182
if (
on)
00183 {
00184 realkc = 1;
00185
ioctl (
kbdFd, KBD_ALL_REPEAT, &realkc);
00186
for (scan_code = 7; scan_code <= 141; scan_code++)
00187 {
00188 key_code = scan_code + 1;
00189
i = key_code >> 3;
00190
mask = 1 << (key_code & 7);
00191
if ((repeats[
i] &
mask) == 0)
00192 {
00193 realkc = scan_code;
00194
ioctl (
kbdFd, KBD_NO_REPEAT, &realkc);
00195 }
00196 }
00197 }
00198
else
00199 {
00200 realkc = 0;
00201
ioctl (
kbdFd, KBD_ALL_REPEAT, &realkc);
00202 }
00203 }
00204
00205
int
00206 VxWorksKeyboardInit (
void)
00207 {
00208
00209
kbdFd =
open (
"/dev/kbd", O_RDONLY, 0);
00210
if (
kbdFd < 0)
00211
ErrorF (
"keyboard open failure %d\n",
errno);
00212
VxWorksSetAutorepeat (
defaultKeyboardControl.
autoRepeats, TRUE);
00213
return -1;
00214 }
00215
00216
void
00217 VxWorksKeyboardFini (
int fd)
00218 {
00219
if (
kbdFd >= 0)
00220 {
00221 close (
kbdFd);
00222
kbdFd = -1;
00223 }
00224 }
00225
00226
void
00227 VxWorksKeyboardRead (
int fd)
00228 {
00229 }
00230
00231
void
00232 VxWorksKeyboardLeds (
int leds)
00233 {
00234
DeviceIntPtr pKeyboard = (
DeviceIntPtr)
LookupKeyboardDevice ();
00235
KeybdCtrl *
ctrl = &pKeyboard->
kbdfeed->
ctrl;
00236 led_ioctl_info led_info;
00237
int i;
00238
00239
VxWorksSetAutorepeat (
ctrl->autoRepeats,
ctrl->autoRepeat);
00240
for (
i = 0;
i < 3;
i++)
00241 {
00242 led_info.bit_n = 1 <<
i;
00243 led_info.OFF_or_ON = (leds & (1 <<
i)) != 0;
00244 led_info.reversed = 0;
00245
ioctl (
kbdFd, KBD_SET_LED, &led_info);
00246 }
00247 }
00248
00249
void
00250 VxWorksKeyboardBell (
int volume,
int frequency,
int duration)
00251 {
00252 }
00253
00254 KdKeyboardFuncs VxWorksKeyboardFuncs = {
00255
VxWorksKeyboardLoad,
00256
VxWorksKeyboardInit,
00257
VxWorksKeyboardRead,
00258
VxWorksKeyboardLeds,
00259
VxWorksKeyboardBell,
00260
VxWorksKeyboardFini,
00261 3,
00262 };