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 = (DeviceIntPtr) LookupKeyboardDevice ();
 | |
|     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,
 | |
| };
 |