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