hurd_kbd.c revision b425557e
1ee3138f1Smrg/* 2ee3138f1Smrg * Copyright 1997,1998 by UCHIYAMA Yasushi 3ee3138f1Smrg * 4ee3138f1Smrg * Permission to use, copy, modify, distribute, and sell this software and its 5ee3138f1Smrg * documentation for any purpose is hereby granted without fee, provided that 6ee3138f1Smrg * the above copyright notice appear in all copies and that both that 7ee3138f1Smrg * copyright notice and this permission notice appear in supporting 8ee3138f1Smrg * documentation, and that the name of UCHIYAMA Yasushi not be used in 9ee3138f1Smrg * advertising or publicity pertaining to distribution of the software without 10ee3138f1Smrg * specific, written prior permission. UCHIYAMA Yasushi makes no representations 11ee3138f1Smrg * about the suitability of this software for any purpose. It is provided 12ee3138f1Smrg * "as is" without express or implied warranty. 13ee3138f1Smrg * 14ee3138f1Smrg * UCHIYAMA YASUSHI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15ee3138f1Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16ee3138f1Smrg * EVENT SHALL UCHIYAMA YASUSHI BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17ee3138f1Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18ee3138f1Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19ee3138f1Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20ee3138f1Smrg * PERFORMANCE OF THIS SOFTWARE. 21ee3138f1Smrg * 22ee3138f1Smrg */ 23ee3138f1Smrg 24ee3138f1Smrg#ifdef HAVE_CONFIG_H 25ee3138f1Smrg#include <config.h> 26ee3138f1Smrg#endif 27ee3138f1Smrg 28b425557eSmrg#include <xorg-server.h> 29ee3138f1Smrg#include <X11/X.h> 30ee3138f1Smrg 31ee3138f1Smrg#include "compiler.h" 32ee3138f1Smrg 33ee3138f1Smrg#include "xf86.h" 34ee3138f1Smrg#include "xf86Priv.h" 35ee3138f1Smrg#include "xf86_OSlib.h" 36ee3138f1Smrg 37ee3138f1Smrg#include "xf86Xinput.h" 38ee3138f1Smrg#include "xf86OSKbd.h" 39ee3138f1Smrg#include "atKeynames.h" 40ee3138f1Smrg#include "xf86Keymap.h" 41ee3138f1Smrg 42ee3138f1Smrg#include <stdio.h> 43ee3138f1Smrg#include <errno.h> 44ee3138f1Smrg#include <sys/time.h> 45ee3138f1Smrg#include <sys/file.h> 46ee3138f1Smrg#include <assert.h> 47ee3138f1Smrg#include <mach.h> 48ee3138f1Smrg#include <sys/ioctl.h> 49ee3138f1Smrg 50ee3138f1Smrgtypedef unsigned short kev_type; /* kd event type */ 51ee3138f1Smrgtypedef unsigned char Scancode; 52ee3138f1Smrg 53ee3138f1Smrgstruct mouse_motion { 54ee3138f1Smrg short mm_deltaX; /* units? */ 55ee3138f1Smrg short mm_deltaY; 56ee3138f1Smrg}; 57ee3138f1Smrg 58ee3138f1Smrgtypedef struct { 59ee3138f1Smrg kev_type type; /* see below */ 60ee3138f1Smrg struct timeval time; /* timestamp */ 61ee3138f1Smrg union { /* value associated with event */ 62ee3138f1Smrg boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */ 63ee3138f1Smrg Scancode sc; /* KEYBD_EVENT */ 64ee3138f1Smrg struct mouse_motion mmotion; /* MOUSE_MOTION */ 65ee3138f1Smrg } value; 66ee3138f1Smrg} kd_event; 67ee3138f1Smrg 68ee3138f1Smrg/* 69ee3138f1Smrg * kd_event ID's. 70ee3138f1Smrg */ 71ee3138f1Smrg#define MOUSE_LEFT 1 /* mouse left button up/down */ 72ee3138f1Smrg#define MOUSE_MIDDLE 2 73ee3138f1Smrg#define MOUSE_RIGHT 3 74ee3138f1Smrg#define MOUSE_MOTION 4 /* mouse motion */ 75ee3138f1Smrg#define KEYBD_EVENT 5 /* key up/down */ 76ee3138f1Smrg 77ee3138f1Smrg/*********************************************************************** 78ee3138f1Smrg * Keyboard 79ee3138f1Smrg **********************************************************************/ 80ee3138f1Smrgstatic void 81ee3138f1SmrgSoundKbdBell(InputInfoPtr pInfo, int loudness,int pitch,int duration) 82ee3138f1Smrg{ 83ee3138f1Smrg return; 84ee3138f1Smrg} 85ee3138f1Smrg 86ee3138f1Smrgstatic void 87ee3138f1SmrgSetKbdLeds(InputInfoPtr pInfo, int leds) 88ee3138f1Smrg{ 89ee3138f1Smrg return; 90ee3138f1Smrg} 91ee3138f1Smrg 92ee3138f1Smrgstatic int 93ee3138f1SmrgGetKbdLeds(InputInfoPtr pInfo) 94ee3138f1Smrg{ 95ee3138f1Smrg return 0; 96ee3138f1Smrg} 97ee3138f1Smrg 98ee3138f1Smrgstatic void 99ee3138f1SmrgSetKbdRepeat(InputInfoPtr pInfo, char rad) 100ee3138f1Smrg{ 101ee3138f1Smrg return; 102ee3138f1Smrg} 103ee3138f1Smrg 104ee3138f1Smrgstatic void 105ee3138f1SmrgKbdGetMapping(InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap) 106ee3138f1Smrg{ 107ee3138f1Smrg pKeySyms->map = map; 108ee3138f1Smrg pKeySyms->mapWidth = GLYPHS_PER_KEY; 109ee3138f1Smrg pKeySyms->minKeyCode = MIN_KEYCODE; 110ee3138f1Smrg pKeySyms->maxKeyCode = MAX_KEYCODE; 111ee3138f1Smrg return; 112ee3138f1Smrg} 113ee3138f1Smrg 114ee3138f1Smrgstatic int 115ee3138f1SmrgKbdOn(InputInfoPtr pInfo, int what) 116ee3138f1Smrg{ 117ee3138f1Smrg int data = 1; 118ee3138f1Smrg if( ioctl( pInfo->fd, _IOW('k', 1, int),&data) < 0) 119ee3138f1Smrg FatalError("Cannot set event mode on keyboard (%s)\n",strerror(errno)); 120ee3138f1Smrg return Success; 121ee3138f1Smrg} 122ee3138f1Smrgstatic int 123ee3138f1SmrgKbdOff(InputInfoPtr pInfo, int what) 124ee3138f1Smrg{ 125ee3138f1Smrg int data = 2; 126ee3138f1Smrg if( ioctl( pInfo->fd, _IOW('k', 1, int),&data) < 0) 127ee3138f1Smrg FatalError("can't reset keyboard mode (%s)\n",strerror(errno)); 128ee3138f1Smrg return Success; 129ee3138f1Smrg} 130ee3138f1Smrg 131ee3138f1Smrgstatic int 132ee3138f1SmrgKbdInit(InputInfoPtr pInfo, int what) 133ee3138f1Smrg{ 134ee3138f1Smrg return Success; 135ee3138f1Smrg} 136ee3138f1Smrg 137ee3138f1Smrgstatic void 138ee3138f1SmrgReadInput(InputInfoPtr pInfo) 139ee3138f1Smrg{ 140ee3138f1Smrg KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; 141ee3138f1Smrg kd_event ke; 142ee3138f1Smrg while( read(pInfo->fd, &ke, sizeof(ke)) == sizeof(ke) ) 143ee3138f1Smrg pKbd->PostEvent(pInfo, ke.value.sc & 0x7f, ke.value.sc & 0x80 ? FALSE : TRUE); 144ee3138f1Smrg} 145ee3138f1Smrg 146ee3138f1Smrgstatic Bool 147ee3138f1SmrgOpenKeyboard(InputInfoPtr pInfo) 148ee3138f1Smrg{ 149ee3138f1Smrg pInfo->fd = xf86Info.consoleFd; 150ee3138f1Smrg return TRUE; 151ee3138f1Smrg} 152ee3138f1Smrg 153ee3138f1SmrgBool 154ee3138f1Smrgxf86OSKbdPreInit(InputInfoPtr pInfo) 155ee3138f1Smrg{ 156ee3138f1Smrg KbdDevPtr pKbd = pInfo->private; 157ee3138f1Smrg 158ee3138f1Smrg pKbd->KbdInit = KbdInit; 159ee3138f1Smrg pKbd->KbdOn = KbdOn; 160ee3138f1Smrg pKbd->KbdOff = KbdOff; 161ee3138f1Smrg pKbd->Bell = SoundKbdBell; 162ee3138f1Smrg pKbd->SetLeds = SetKbdLeds; 163ee3138f1Smrg pKbd->GetLeds = GetKbdLeds; 164ee3138f1Smrg pKbd->SetKbdRepeat = SetKbdRepeat; 165ee3138f1Smrg pKbd->KbdGetMapping = KbdGetMapping; 166ee3138f1Smrg pKbd->RemapScanCode = ATScancode; 167ee3138f1Smrg pKbd->OpenKeyboard = OpenKeyboard; 168ee3138f1Smrg pKbd->vtSwitchSupported = FALSE; 169ee3138f1Smrg pKbd->CustomKeycodes = FALSE; 170ee3138f1Smrg pKbd->private = NULL; 171ee3138f1Smrg pInfo->read_input = ReadInput; 172ee3138f1Smrg return TRUE; 173ee3138f1Smrg} 174