hurd_kbd.c revision ee3138f1
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/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/hurd/hurd_io.c,v 1.8 2002/10/11 01:40:35 dawes Exp $ */ 24ee3138f1Smrg 25ee3138f1Smrg#define NEED_EVENTS 26ee3138f1Smrg#ifdef HAVE_CONFIG_H 27ee3138f1Smrg#include <config.h> 28ee3138f1Smrg#endif 29ee3138f1Smrg 30ee3138f1Smrg#include <X11/X.h> 31ee3138f1Smrg 32ee3138f1Smrg#include "compiler.h" 33ee3138f1Smrg 34ee3138f1Smrg#include "xf86.h" 35ee3138f1Smrg#include "xf86Priv.h" 36ee3138f1Smrg#include "xf86_OSlib.h" 37ee3138f1Smrg 38ee3138f1Smrg#include "xf86Xinput.h" 39ee3138f1Smrg#include "xf86OSKbd.h" 40ee3138f1Smrg#include "atKeynames.h" 41ee3138f1Smrg#include "xf86Keymap.h" 42ee3138f1Smrg 43ee3138f1Smrg#include <stdio.h> 44ee3138f1Smrg#include <errno.h> 45ee3138f1Smrg#include <sys/time.h> 46ee3138f1Smrg#include <sys/file.h> 47ee3138f1Smrg#include <assert.h> 48ee3138f1Smrg#include <mach.h> 49ee3138f1Smrg#include <sys/ioctl.h> 50ee3138f1Smrg 51ee3138f1Smrgtypedef unsigned short kev_type; /* kd event type */ 52ee3138f1Smrgtypedef unsigned char Scancode; 53ee3138f1Smrg 54ee3138f1Smrgstruct mouse_motion { 55ee3138f1Smrg short mm_deltaX; /* units? */ 56ee3138f1Smrg short mm_deltaY; 57ee3138f1Smrg}; 58ee3138f1Smrg 59ee3138f1Smrgtypedef struct { 60ee3138f1Smrg kev_type type; /* see below */ 61ee3138f1Smrg struct timeval time; /* timestamp */ 62ee3138f1Smrg union { /* value associated with event */ 63ee3138f1Smrg boolean_t up; /* MOUSE_LEFT .. MOUSE_RIGHT */ 64ee3138f1Smrg Scancode sc; /* KEYBD_EVENT */ 65ee3138f1Smrg struct mouse_motion mmotion; /* MOUSE_MOTION */ 66ee3138f1Smrg } value; 67ee3138f1Smrg} kd_event; 68ee3138f1Smrg 69ee3138f1Smrg/* 70ee3138f1Smrg * kd_event ID's. 71ee3138f1Smrg */ 72ee3138f1Smrg#define MOUSE_LEFT 1 /* mouse left button up/down */ 73ee3138f1Smrg#define MOUSE_MIDDLE 2 74ee3138f1Smrg#define MOUSE_RIGHT 3 75ee3138f1Smrg#define MOUSE_MOTION 4 /* mouse motion */ 76ee3138f1Smrg#define KEYBD_EVENT 5 /* key up/down */ 77ee3138f1Smrg 78ee3138f1Smrg/*********************************************************************** 79ee3138f1Smrg * Keyboard 80ee3138f1Smrg **********************************************************************/ 81ee3138f1Smrgstatic void 82ee3138f1SmrgSoundKbdBell(InputInfoPtr pInfo, int loudness,int pitch,int duration) 83ee3138f1Smrg{ 84ee3138f1Smrg return; 85ee3138f1Smrg} 86ee3138f1Smrg 87ee3138f1Smrgstatic void 88ee3138f1SmrgSetKbdLeds(InputInfoPtr pInfo, int leds) 89ee3138f1Smrg{ 90ee3138f1Smrg return; 91ee3138f1Smrg} 92ee3138f1Smrg 93ee3138f1Smrgstatic int 94ee3138f1SmrgGetKbdLeds(InputInfoPtr pInfo) 95ee3138f1Smrg{ 96ee3138f1Smrg return 0; 97ee3138f1Smrg} 98ee3138f1Smrg 99ee3138f1Smrgstatic void 100ee3138f1SmrgSetKbdRepeat(InputInfoPtr pInfo, char rad) 101ee3138f1Smrg{ 102ee3138f1Smrg return; 103ee3138f1Smrg} 104ee3138f1Smrg 105ee3138f1Smrgstatic void 106ee3138f1SmrgKbdGetMapping(InputInfoPtr pInfo, KeySymsPtr pKeySyms, CARD8 *pModMap) 107ee3138f1Smrg{ 108ee3138f1Smrg pKeySyms->map = map; 109ee3138f1Smrg pKeySyms->mapWidth = GLYPHS_PER_KEY; 110ee3138f1Smrg pKeySyms->minKeyCode = MIN_KEYCODE; 111ee3138f1Smrg pKeySyms->maxKeyCode = MAX_KEYCODE; 112ee3138f1Smrg return; 113ee3138f1Smrg} 114ee3138f1Smrg 115ee3138f1Smrgstatic int 116ee3138f1SmrgKbdOn(InputInfoPtr pInfo, int what) 117ee3138f1Smrg{ 118ee3138f1Smrg int data = 1; 119ee3138f1Smrg if( ioctl( pInfo->fd, _IOW('k', 1, int),&data) < 0) 120ee3138f1Smrg FatalError("Cannot set event mode on keyboard (%s)\n",strerror(errno)); 121ee3138f1Smrg return Success; 122ee3138f1Smrg} 123ee3138f1Smrgstatic int 124ee3138f1SmrgKbdOff(InputInfoPtr pInfo, int what) 125ee3138f1Smrg{ 126ee3138f1Smrg int data = 2; 127ee3138f1Smrg if( ioctl( pInfo->fd, _IOW('k', 1, int),&data) < 0) 128ee3138f1Smrg FatalError("can't reset keyboard mode (%s)\n",strerror(errno)); 129ee3138f1Smrg return Success; 130ee3138f1Smrg} 131ee3138f1Smrg 132ee3138f1Smrgstatic int 133ee3138f1SmrgKbdInit(InputInfoPtr pInfo, int what) 134ee3138f1Smrg{ 135ee3138f1Smrg return Success; 136ee3138f1Smrg} 137ee3138f1Smrg 138ee3138f1Smrgstatic void 139ee3138f1SmrgReadInput(InputInfoPtr pInfo) 140ee3138f1Smrg{ 141ee3138f1Smrg KbdDevPtr pKbd = (KbdDevPtr) pInfo->private; 142ee3138f1Smrg kd_event ke; 143ee3138f1Smrg while( read(pInfo->fd, &ke, sizeof(ke)) == sizeof(ke) ) 144ee3138f1Smrg pKbd->PostEvent(pInfo, ke.value.sc & 0x7f, ke.value.sc & 0x80 ? FALSE : TRUE); 145ee3138f1Smrg} 146ee3138f1Smrg 147ee3138f1Smrgstatic Bool 148ee3138f1SmrgOpenKeyboard(InputInfoPtr pInfo) 149ee3138f1Smrg{ 150ee3138f1Smrg pInfo->fd = xf86Info.consoleFd; 151ee3138f1Smrg return TRUE; 152ee3138f1Smrg} 153ee3138f1Smrg 154ee3138f1SmrgBool 155ee3138f1Smrgxf86OSKbdPreInit(InputInfoPtr pInfo) 156ee3138f1Smrg{ 157ee3138f1Smrg KbdDevPtr pKbd = pInfo->private; 158ee3138f1Smrg 159ee3138f1Smrg pKbd->KbdInit = KbdInit; 160ee3138f1Smrg pKbd->KbdOn = KbdOn; 161ee3138f1Smrg pKbd->KbdOff = KbdOff; 162ee3138f1Smrg pKbd->Bell = SoundKbdBell; 163ee3138f1Smrg pKbd->SetLeds = SetKbdLeds; 164ee3138f1Smrg pKbd->GetLeds = GetKbdLeds; 165ee3138f1Smrg pKbd->SetKbdRepeat = SetKbdRepeat; 166ee3138f1Smrg pKbd->KbdGetMapping = KbdGetMapping; 167ee3138f1Smrg pKbd->SpecialKey = NULL; 168ee3138f1Smrg pKbd->RemapScanCode = ATScancode; 169ee3138f1Smrg pKbd->GetSpecialKey = NULL; 170ee3138f1Smrg pKbd->OpenKeyboard = OpenKeyboard; 171ee3138f1Smrg pKbd->vtSwitchSupported = FALSE; 172ee3138f1Smrg pKbd->CustomKeycodes = FALSE; 173ee3138f1Smrg pKbd->private = NULL; 174ee3138f1Smrg pInfo->read_input = ReadInput; 175ee3138f1Smrg return TRUE; 176ee3138f1Smrg} 177