keyboard.c revision 97748
1151937Sjkim/*- 2151937Sjkim * Copyright (c) 1997 S�ren Schmidt 3151937Sjkim * All rights reserved. 4151937Sjkim * 5151937Sjkim * Redistribution and use in source and binary forms, with or without 6151937Sjkim * modification, are permitted provided that the following conditions 7217365Sjkim * are met: 8229989Sjkim * 1. Redistributions of source code must retain the above copyright 9151937Sjkim * notice, this list of conditions and the following disclaimer 10151937Sjkim * in this position and unchanged. 11217365Sjkim * 2. Redistributions in binary form must reproduce the above copyright 12217365Sjkim * notice, this list of conditions and the following disclaimer in the 13217365Sjkim * documentation and/or other materials provided with the distribution. 14217365Sjkim * 3. The name of the author may not be used to endorse or promote products 15217365Sjkim * derived from this software without specific prior written permission 16217365Sjkim * 17217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18217365Sjkim * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19217365Sjkim * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20217365Sjkim * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21217365Sjkim * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22217365Sjkim * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23217365Sjkim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24217365Sjkim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25151937Sjkim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26217365Sjkim * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27217365Sjkim */ 28217365Sjkim 29151937Sjkim#include <sys/cdefs.h> 30217365Sjkim__FBSDID("$FreeBSD: head/lib/libvgl/keyboard.c 97748 2002-06-02 20:05:59Z schweikh $"); 31217365Sjkim 32217365Sjkim#include <stdio.h> 33217365Sjkim#include <sys/types.h> 34217365Sjkim#include <sys/ioctl.h> 35217365Sjkim#include <termios.h> 36217365Sjkim#include <sys/time.h> 37217365Sjkim#include <sys/fbio.h> 38217365Sjkim#include <sys/kbio.h> 39217365Sjkim#include "vgl.h" 40217365Sjkim 41217365Sjkimstatic struct termios VGLKeyboardTty; 42217365Sjkimstatic int VGLKeyboardMode = -1; 43151937Sjkim 44151937Sjkimint 45151937SjkimVGLKeyboardInit(int mode) 46151937Sjkim{ 47193341Sjkim static struct termios term; 48193341Sjkim 49151937Sjkim ioctl(0, KDGKBMODE, &VGLKeyboardMode); 50151937Sjkim tcgetattr(0, &VGLKeyboardTty); 51151937Sjkim 52151937Sjkim term = VGLKeyboardTty; 53151937Sjkim cfmakeraw(&term); 54151937Sjkim term.c_iflag = IGNPAR | IGNBRK; 55151937Sjkim term.c_oflag = OPOST | ONLCR; 56151937Sjkim term.c_cflag = CREAD | CS8; 57151937Sjkim term.c_lflag &= ~(ICANON | ECHO | ISIG); 58151937Sjkim term.c_cc[VTIME] = 0; 59151937Sjkim term.c_cc[VMIN] = 0; 60151937Sjkim cfsetispeed(&term, 9600); 61151937Sjkim cfsetospeed(&term, 9600); 62151937Sjkim tcsetattr(0, TCSANOW | TCSAFLUSH, &term); 63151937Sjkim 64151937Sjkim switch (mode) { 65151937Sjkim case VGL_RAWKEYS: 66151937Sjkim ioctl(0, KDSKBMODE, K_RAW); 67151937Sjkim break; 68151937Sjkim case VGL_CODEKEYS: 69151937Sjkim ioctl(0, KDSKBMODE, K_CODE); 70151937Sjkim break; 71151937Sjkim case VGL_XLATEKEYS: 72151937Sjkim ioctl(0, KDSKBMODE, K_XLATE); 73151937Sjkim break; 74151937Sjkim } 75151937Sjkim return 0; 76151937Sjkim} 77151937Sjkim 78151937Sjkimvoid 79151937SjkimVGLKeyboardEnd() 80151937Sjkim{ 81151937Sjkim if (VGLKeyboardMode != -1) { 82151937Sjkim ioctl(0, KDSKBMODE, VGLKeyboardMode); 83151937Sjkim tcsetattr(0, TCSANOW | TCSAFLUSH, &VGLKeyboardTty); 84151937Sjkim } 85151937Sjkim} 86151937Sjkim 87151937Sjkimint 88151937SjkimVGLKeyboardGetCh() 89151937Sjkim{ 90151937Sjkim unsigned char ch = 0; 91151937Sjkim 92151937Sjkim read (0, &ch, 1); 93151937Sjkim return (int)ch; 94151937Sjkim} 95151937Sjkim