e:/XFree86 for RH 8.0/XFree86-4.2.0/xc/programs/Xserver/hw/kdrive/vxworks/vxkbd.c

Go to the documentation of this file.
00001 /* 00002 * Id: vxkbd.c,v 1.1 1999/11/24 08:35:24 keithp Exp $ 00003 * 00004 * Copyright © 1999 Network Computing Devices, Inc. All rights reserved. 00005 * 00006 * Author: Keith Packard 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 /*7 f1 */ XK_F1, NoSymbol, 00018 /*8 escape */ XK_Escape, NoSymbol, 00019 NoSymbol, NoSymbol, 00020 NoSymbol, NoSymbol, 00021 NoSymbol, NoSymbol, 00022 NoSymbol, NoSymbol, 00023 /*13 tab */ XK_Tab, NoSymbol, 00024 /*14 ` */ XK_grave, XK_asciitilde, 00025 /*15 f2 */ XK_F2, NoSymbol, 00026 NoSymbol, NoSymbol, 00027 /*17 lctrl */ XK_Control_L, NoSymbol, 00028 /*18 lshift */ XK_Shift_L, NoSymbol, 00029 NoSymbol, NoSymbol, 00030 /*20 lock */ XK_Caps_Lock, NoSymbol, 00031 /*21 q */ XK_Q, NoSymbol, 00032 /*22 1 */ XK_1, XK_exclam, 00033 /*23 f3 */ XK_F3, NoSymbol, 00034 NoSymbol, NoSymbol, 00035 /*25 lalt */ XK_Meta_L, XK_Alt_L, 00036 /*26 z */ XK_Z, NoSymbol, 00037 /*27 s */ XK_S, NoSymbol, 00038 /*28 a */ XK_A, NoSymbol, 00039 /*29 w */ XK_W, NoSymbol, 00040 /*30 2 */ XK_2, XK_at, 00041 /*31 f4 */ XK_F4, NoSymbol, 00042 NoSymbol, NoSymbol, 00043 /*33 c */ XK_C, NoSymbol, 00044 /*34 x */ XK_X, NoSymbol, 00045 /*35 d */ XK_D, NoSymbol, 00046 /*36 e */ XK_E, NoSymbol, 00047 /*37 4 */ XK_4, XK_dollar, 00048 /*38 3 */ XK_3, XK_numbersign, 00049 /*39 f5 */ XK_F5, NoSymbol, 00050 NoSymbol, NoSymbol, 00051 /*41 space */ XK_space, NoSymbol, 00052 /*42 v */ XK_V, NoSymbol, 00053 /*43 f */ XK_F, NoSymbol, 00054 /*44 t */ XK_T, NoSymbol, 00055 /*45 r */ XK_R, NoSymbol, 00056 /*46 5 */ XK_5, XK_percent, 00057 /*47 f6 */ XK_F6, NoSymbol, 00058 NoSymbol, NoSymbol, 00059 /*49 n */ XK_N, NoSymbol, 00060 /*50 b */ XK_B, NoSymbol, 00061 /*51 h */ XK_H, NoSymbol, 00062 /*52 g */ XK_G, NoSymbol, 00063 /*53 y */ XK_Y, NoSymbol, 00064 /*54 6 */ XK_6, XK_asciicircum, 00065 /*55 f7 */ XK_F7, NoSymbol, 00066 NoSymbol, NoSymbol, 00067 /*57 ralt */ XK_Meta_R, XK_Alt_R, 00068 /*58 m */ XK_M, NoSymbol, 00069 /*59 j */ XK_J, NoSymbol, 00070 /*60 u */ XK_U, NoSymbol, 00071 /*61 7 */ XK_7, XK_ampersand, 00072 /*62 8 */ XK_8, XK_asterisk, 00073 /*63 f8 */ XK_F8, NoSymbol, 00074 NoSymbol, NoSymbol, 00075 /*65 , */ XK_comma, XK_less, 00076 /*66 k */ XK_K, NoSymbol, 00077 /*67 i */ XK_I, NoSymbol, 00078 /*68 o */ XK_O, NoSymbol, 00079 /*69 0 */ XK_0, XK_parenright, 00080 /*70 9 */ XK_9, XK_parenleft, 00081 /*71 f9 */ XK_F9, NoSymbol, 00082 NoSymbol, NoSymbol, 00083 /*73 . */ XK_period, XK_greater, 00084 /*74 / */ XK_slash, XK_question, 00085 /*75 l */ XK_L, NoSymbol, 00086 /*76 ; */ XK_semicolon, XK_colon, 00087 /*77 p */ XK_P, NoSymbol, 00088 /*78 - */ XK_minus, XK_underscore, 00089 /*79 f10 */ XK_F10, NoSymbol, 00090 NoSymbol, NoSymbol, 00091 NoSymbol, NoSymbol, 00092 /*82 ' */ XK_apostrophe, XK_quotedbl, 00093 NoSymbol, NoSymbol, 00094 /*84 [ */ XK_bracketleft, XK_braceleft, 00095 /*85 = */ XK_equal, XK_plus, 00096 /*86 f11 */ XK_F11, NoSymbol, 00097 /*87 sysrq */ XK_Sys_Req, XK_Print, 00098 /*88 rctrl */ XK_Control_R, NoSymbol, 00099 /*89 rshift */ XK_Shift_R, NoSymbol, 00100 /*90 enter */ XK_Return, NoSymbol, 00101 /*91 ] */ XK_bracketright, XK_braceright, 00102 /*92 \ */ XK_backslash, XK_bar, 00103 NoSymbol, NoSymbol, 00104 /*94 f12 */ XK_F12, NoSymbol, 00105 /*95 scrolllock*/ XK_Scroll_Lock, NoSymbol, 00106 /*96 down */ XK_Down, NoSymbol, 00107 /*97 left */ XK_Left, NoSymbol, 00108 /*98 pause */ XK_Break, XK_Pause, 00109 /*99 up */ XK_Up, NoSymbol, 00110 /*100 delete */ XK_Delete, NoSymbol, 00111 /*101 end */ XK_End, NoSymbol, 00112 /*102 bs */ XK_BackSpace, NoSymbol, 00113 /*103 insert */ XK_Insert, NoSymbol, 00114 NoSymbol, NoSymbol, 00115 /*105 np 1 */ XK_KP_End, XK_KP_1, 00116 /*106 right */ XK_Right, NoSymbol, 00117 /*107 np 4 */ XK_KP_Left, XK_KP_4, 00118 /*108 np 7 */ XK_KP_Home, XK_KP_7, 00119 /*109 pgdn */ XK_Page_Down, NoSymbol, 00120 /*110 home */ XK_Home, NoSymbol, 00121 /*111 pgup */ XK_Page_Up, NoSymbol, 00122 /*112 np 0 */ XK_KP_Insert, XK_KP_0, 00123 /*113 np . */ XK_KP_Delete, XK_KP_Decimal, 00124 /*114 np 2 */ XK_KP_Down, XK_KP_2, 00125 /*115 np 5 */ XK_KP_5, NoSymbol, 00126 /*116 np 6 */ XK_KP_Right, XK_KP_6, 00127 /*117 np 8 */ XK_KP_Up, XK_KP_8, 00128 /*118 numlock */ XK_Num_Lock, NoSymbol, 00129 /*119 np / */ XK_KP_Divide, NoSymbol, 00130 NoSymbol, NoSymbol, 00131 /*121 np enter */ XK_KP_Enter, NoSymbol, 00132 /*122 np 3 */ XK_KP_Page_Down, XK_KP_3, 00133 NoSymbol, NoSymbol, 00134 /*124 np + */ XK_KP_Add, NoSymbol, 00135 /*125 np 9 */ XK_KP_Page_Up, XK_KP_9, 00136 /*126 np * */ XK_KP_Multiply, NoSymbol, 00137 NoSymbol, NoSymbol, 00138 NoSymbol, NoSymbol, 00139 NoSymbol, NoSymbol, 00140 NoSymbol, NoSymbol, 00141 NoSymbol, NoSymbol, 00142 /*132 np - */ XK_KP_Subtract, NoSymbol, 00143 NoSymbol, NoSymbol, 00144 NoSymbol, NoSymbol, 00145 NoSymbol, NoSymbol, 00146 NoSymbol, NoSymbol, 00147 NoSymbol, NoSymbol, 00148 NoSymbol, NoSymbol, 00149 /*139 lwin */ XK_Super_L, NoSymbol, 00150 /*140 rwin */ XK_Super_R, NoSymbol, 00151 /*141 menu */ 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 };

Generated on Mon May 10 20:21:21 2004 for XFree86 by doxygen 1.3.7