mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
Merge pull request #809 from RT-Thread/revert-805-master
Revert "x86: keyboad input bug fix"
This commit is contained in:
commit
2a6726a5d9
10 files changed
+122
-1258
No files matched your search
@@ -8,7 +8,6 @@ all:floppy.img
|
||||
|
||||
clean:
|
||||
scons -c clean
|
||||
rm -fr build rtthread*
|
||||
|
||||
floppy.img:
|
||||
wget https://github.com/bajdcc/tinix/raw/master/floppy.img
|
||||
|
||||
+37
-33
@@ -17,13 +17,16 @@
|
||||
|
||||
#include <bsp.h>
|
||||
|
||||
|
||||
//#include "serial.h"
|
||||
|
||||
static unsigned addr_6845;
|
||||
static rt_uint16_t *crt_buf;
|
||||
static rt_int16_t crt_pos;
|
||||
|
||||
extern void init_keyboard();
|
||||
extern void rt_keyboard_isr(void);
|
||||
extern rt_bool_t rt_keyboard_getc(char* c);
|
||||
//extern void rt_serial_init(void);
|
||||
extern char rt_keyboard_getc(void);
|
||||
//extern char rt_serial_getc(void);
|
||||
|
||||
static void rt_console_putc(int c);
|
||||
|
||||
@@ -214,38 +217,39 @@ static rt_size_t rt_console_read(rt_device_t dev, rt_off_t pos, void* buffer, rt
|
||||
static void rt_console_isr(int vector, void* param)
|
||||
{
|
||||
char c;
|
||||
rt_bool_t ret;
|
||||
rt_base_t level;
|
||||
|
||||
rt_keyboard_isr();
|
||||
while(1)
|
||||
{
|
||||
c = rt_keyboard_getc();
|
||||
|
||||
ret = rt_keyboard_getc(&c);
|
||||
if(ret == RT_FALSE)
|
||||
{
|
||||
/* do nothing */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* disable interrupt */
|
||||
level = rt_hw_interrupt_disable();
|
||||
if(c == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if(c > 0)
|
||||
{
|
||||
/* disable interrupt */
|
||||
level = rt_hw_interrupt_disable();
|
||||
|
||||
/* save character */
|
||||
rx_buffer[save_index] = c;
|
||||
save_index ++;
|
||||
if (save_index >= CONSOLE_RX_BUFFER_SIZE)
|
||||
save_index = 0;
|
||||
/* save character */
|
||||
rx_buffer[save_index] = c;
|
||||
save_index ++;
|
||||
if (save_index >= CONSOLE_RX_BUFFER_SIZE)
|
||||
save_index = 0;
|
||||
|
||||
/* if the next position is read index, discard this 'read char' */
|
||||
if (save_index == read_index)
|
||||
{
|
||||
read_index ++;
|
||||
if (read_index >= CONSOLE_RX_BUFFER_SIZE)
|
||||
read_index = 0;
|
||||
}
|
||||
/* if the next position is read index, discard this 'read char' */
|
||||
if (save_index == read_index)
|
||||
{
|
||||
read_index ++;
|
||||
if (read_index >= CONSOLE_RX_BUFFER_SIZE)
|
||||
read_index = 0;
|
||||
}
|
||||
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
}
|
||||
|
||||
/* invoke callback */
|
||||
if (console_device.rx_indicate != RT_NULL)
|
||||
@@ -254,9 +258,10 @@ static void rt_console_isr(int vector, void* param)
|
||||
|
||||
/* get rx length */
|
||||
rx_length = read_index > save_index ?
|
||||
CONSOLE_RX_BUFFER_SIZE - read_index + save_index :
|
||||
save_index - read_index;
|
||||
CONSOLE_RX_BUFFER_SIZE - read_index + save_index :
|
||||
save_index - read_index;
|
||||
|
||||
// rt_kprintf("\r\nrx_length %d\r\n", rx_length);
|
||||
if(rx_length > 0)
|
||||
{
|
||||
console_device.rx_indicate(&console_device, rx_length);
|
||||
@@ -264,7 +269,7 @@ static void rt_console_isr(int vector, void* param)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// rt_kprintf("\r\nconsole_device.rx_indicate == RT_NULL\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +280,6 @@ static void rt_console_isr(int vector, void* param)
|
||||
void rt_hw_console_init(void)
|
||||
{
|
||||
rt_cga_init();
|
||||
init_keyboard();
|
||||
|
||||
/* install keyboard isr */
|
||||
rt_hw_interrupt_install(INTKEYBOARD, rt_console_isr, RT_NULL, "kbd");
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
#ifndef _DMA_H
|
||||
#define _DMA_H
|
||||
|
||||
|
||||
#define MAX_DMA_CHANNELS 8
|
||||
|
||||
/* 8237 DMA controllers */
|
||||
#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */
|
||||
#define IO_DMA2_BASE 0xC0 /* 16 bit master DMA, ch 4(=slave input)..7 */
|
||||
|
||||
/* DMA controller registers */
|
||||
#define DMA1_CMD_REG 0x08 /* command register (w) */
|
||||
#define DMA1_STAT_REG 0x08 /* status register (r) */
|
||||
#define DMA1_REQ_REG 0x09 /* request register (w) */
|
||||
#define DMA1_MASK_REG 0x0A /* single-channel mask (w) */
|
||||
#define DMA1_MODE_REG 0x0B /* mode register (w) */
|
||||
#define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */
|
||||
#define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */
|
||||
#define DMA1_RESET_REG 0x0D /* Master Clear (w) */
|
||||
#define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */
|
||||
#define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */
|
||||
|
||||
#define DMA2_CMD_REG 0xD0 /* command register (w) */
|
||||
#define DMA2_STAT_REG 0xD0 /* status register (r) */
|
||||
#define DMA2_REQ_REG 0xD2 /* request register (w) */
|
||||
#define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */
|
||||
#define DMA2_MODE_REG 0xD6 /* mode register (w) */
|
||||
#define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */
|
||||
#define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */
|
||||
#define DMA2_RESET_REG 0xDA /* Master Clear (w) */
|
||||
#define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */
|
||||
#define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */
|
||||
|
||||
#define DMA_ADDR_0 0x00 /* DMA address registers */
|
||||
#define DMA_ADDR_1 0x02
|
||||
#define DMA_ADDR_2 0x04
|
||||
#define DMA_ADDR_3 0x06
|
||||
#define DMA_ADDR_4 0xC0
|
||||
#define DMA_ADDR_5 0xC4
|
||||
#define DMA_ADDR_6 0xC8
|
||||
#define DMA_ADDR_7 0xCC
|
||||
|
||||
#define DMA_CNT_0 0x01 /* DMA count registers */
|
||||
#define DMA_CNT_1 0x03
|
||||
#define DMA_CNT_2 0x05
|
||||
#define DMA_CNT_3 0x07
|
||||
#define DMA_CNT_4 0xC2
|
||||
#define DMA_CNT_5 0xC6
|
||||
#define DMA_CNT_6 0xCA
|
||||
#define DMA_CNT_7 0xCE
|
||||
|
||||
#define DMA_PAGE_0 0x87 /* DMA page registers */
|
||||
#define DMA_PAGE_1 0x83
|
||||
#define DMA_PAGE_2 0x81
|
||||
#define DMA_PAGE_3 0x82
|
||||
#define DMA_PAGE_5 0x8B
|
||||
#define DMA_PAGE_6 0x89
|
||||
#define DMA_PAGE_7 0x8A
|
||||
|
||||
#define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */
|
||||
#define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */
|
||||
#define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */
|
||||
|
||||
/*
|
||||
* 启用指定的DMA通道
|
||||
*/
|
||||
static __inline__ void EnableDma(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr<=3)
|
||||
outb(dmanr, DMA1_MASK_REG);
|
||||
else
|
||||
outb(dmanr & 3, DMA2_MASK_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* 禁用指定的DMA通道
|
||||
*/
|
||||
static __inline__ void DisableDma(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr<=3)
|
||||
outb(dmanr | 4, DMA1_MASK_REG);
|
||||
else
|
||||
outb((dmanr & 3) | 4, DMA2_MASK_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* 清空DMA 晶体计数器
|
||||
*/
|
||||
static __inline__ void ClearDmaFF(unsigned int dmanr)
|
||||
{
|
||||
if (dmanr<=3)
|
||||
outb(0, DMA1_CLEAR_FF_REG);
|
||||
else
|
||||
outb(0, DMA2_CLEAR_FF_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* 清空DMA 晶体计数器
|
||||
*/
|
||||
static __inline__ void SetDmaMode(unsigned int dmanr, char mode)
|
||||
{
|
||||
if (dmanr<=3)
|
||||
outb(mode | dmanr, DMA1_MODE_REG);
|
||||
else
|
||||
outb(mode | (dmanr&3), DMA2_MODE_REG);
|
||||
}
|
||||
|
||||
/*
|
||||
* 设定DMA 页面寄存器
|
||||
*/
|
||||
static __inline__ void SetDmaPage(unsigned int dmanr, char pagenr)
|
||||
{
|
||||
switch(dmanr) {
|
||||
case 0:
|
||||
outb(pagenr, DMA_PAGE_0);
|
||||
break;
|
||||
case 1:
|
||||
outb(pagenr, DMA_PAGE_1);
|
||||
break;
|
||||
case 2:
|
||||
outb(pagenr, DMA_PAGE_2);
|
||||
break;
|
||||
case 3:
|
||||
outb(pagenr, DMA_PAGE_3);
|
||||
break;
|
||||
case 5:
|
||||
outb(pagenr & 0xfe, DMA_PAGE_5);
|
||||
break;
|
||||
case 6:
|
||||
outb(pagenr & 0xfe, DMA_PAGE_6);
|
||||
break;
|
||||
case 7:
|
||||
outb(pagenr & 0xfe, DMA_PAGE_7);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 设定DMA 传输高速缓冲区地址
|
||||
*/
|
||||
static __inline__ void SetDmaAddr(unsigned int dmanr, unsigned int a)
|
||||
{
|
||||
SetDmaPage(dmanr, a>>16);
|
||||
if (dmanr <= 3) {
|
||||
outb( a & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE );
|
||||
outb( (a>>8) & 0xff, ((dmanr&3)<<1) + IO_DMA1_BASE );
|
||||
} else {
|
||||
outb( (a>>1) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE );
|
||||
outb( (a>>9) & 0xff, ((dmanr&3)<<2) + IO_DMA2_BASE );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 设定DMA 传输块数
|
||||
*/
|
||||
static __inline__ void SetDmaCount(unsigned int dmanr, unsigned int count)
|
||||
{
|
||||
count--;
|
||||
if (dmanr <= 3) {
|
||||
outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
|
||||
outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
|
||||
} else {
|
||||
outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
|
||||
outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 获得DMA 传输剩余块数
|
||||
*/
|
||||
static __inline__ int GetDmaResidue(unsigned int dmanr)
|
||||
{
|
||||
unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE
|
||||
: ((dmanr&3)<<2) + 2 + IO_DMA2_BASE;
|
||||
|
||||
/* using short to get 16-bit wrap around */
|
||||
unsigned short count;
|
||||
count = 1 + inb(io_port);
|
||||
count += inb(io_port) << 8;
|
||||
return (dmanr<=3)? count : (count<<1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,72 +0,0 @@
|
||||
#ifndef _FLOPPY_H
|
||||
#define _FLOPPY_H
|
||||
|
||||
#define FD_STATUS 0x3f4 // 主状态寄存器端口。
|
||||
#define FD_DATA 0x3f5 // 数据端口。
|
||||
#define FD_DOR 0x3f2 // 数字输出寄存器(也称为数字控制寄存器)。
|
||||
#define FD_DIR 0x3f7 // 数字输入寄存器。
|
||||
#define FD_DCR 0x3f7 // 数据传输率控制寄存器。
|
||||
|
||||
/* 主状态寄存器各比特位的含义 */
|
||||
|
||||
#define STATUS_BUSYMASK 0x0F // 驱动器忙位(每位对应一个驱动器)。
|
||||
#define STATUS_BUSY 0x10 // 软盘控制器忙。
|
||||
#define STATUS_DMA 0x20 // 0 - 为DMA 数据传输模式,1 - 为非DMA 模式。
|
||||
#define STATUS_DIR 0x40 // 传输方向:0 - CPU .. fdc,1 - 相反。
|
||||
#define STATUS_READY 0x80 // 数据寄存器就绪位。
|
||||
|
||||
|
||||
/*状态字节0(ST0)各比特位的含义 */
|
||||
|
||||
#define ST0_DS 0x03 // 驱动器选择号(发生中断时驱动器号)。
|
||||
#define ST0_HA 0x04 // 磁头号。
|
||||
#define ST0_NR 0x08 // 磁盘驱动器未准备好。
|
||||
#define ST0_ECE 0x10 // 设备检测出错(零磁道校准出错)。
|
||||
#define ST0_SE 0x20 // 寻道或重新校正操作执行结束。
|
||||
#define ST0_INTR 0xC0 // 中断代码位(中断原因),00 - 命令正常结束;
|
||||
// 01 - 命令异常结束;10 - 命令无效;11 - FDD 就绪状态改变。
|
||||
|
||||
/*状态字节1(ST1)各比特位的含义 */
|
||||
|
||||
#define ST1_MAM 0x01 // 未找到地址标志(ID AM)。
|
||||
#define ST1_WP 0x02 // 写保护。
|
||||
#define ST1_ND 0x04 // 未找到指定的扇区。
|
||||
#define ST1_OR 0x10 // 数据传输超时(DMA 控制器故障)。
|
||||
#define ST1_CRC 0x20 // CRC 检验出错。
|
||||
#define ST1_EOC 0x80 // 访问超过一个磁道上的最大扇区号。
|
||||
|
||||
/*状态字节2(ST2)各比特位的含义 */
|
||||
|
||||
#define ST2_MAM 0x01 // 未找到数据地址标志。
|
||||
#define ST2_BC 0x02 // 磁道坏。
|
||||
#define ST2_SNS 0x04 // 检索(扫描)条件不满足。
|
||||
#define ST2_SEH 0x08 // 检索条件满足。
|
||||
#define ST2_WC 0x10 // 磁道(柱面)号不符。
|
||||
#define ST2_CRC 0x20 // 数据场CRC 校验错。
|
||||
#define ST2_CM 0x40 // 读数据遇到删除标志。
|
||||
|
||||
/*状态字节3(ST3)各比特位的含义 */
|
||||
|
||||
#define ST3_HA 0x04 // 磁头号。
|
||||
#define ST3_TZ 0x10 // 零磁道信号。
|
||||
#define ST3_WP 0x40 // 写保护。
|
||||
|
||||
|
||||
/* 软盘命令码 */
|
||||
|
||||
#define FD_RECALIBRATE 0x07 // 重新校正(磁头退到零磁道)。
|
||||
#define FD_SEEK 0x0F // 磁头寻道。
|
||||
#define FD_READ 0xE6 // 读数据(MT 多磁道操作,MFM 格式,跳过删除数据)。
|
||||
#define FD_WRITE 0xC5 // 写数据(MT,MFM)。
|
||||
#define FD_SENSEI 0x08 // 检测中断状态。
|
||||
#define FD_SPECIFY 0x03 // 设定驱动器参数(步进速率、磁头卸载时间等)。
|
||||
|
||||
|
||||
/* DMA 命令 */
|
||||
#define DMA_READ 0x46 // DMA 读盘,DMA 方式字(送DMA 端口12,11)。
|
||||
#define DMA_WRITE 0x4A
|
||||
|
||||
extern void init_fd(void);
|
||||
extern void fd_handler(void);
|
||||
|
||||
#endif
|
||||
@@ -101,16 +101,6 @@ extern "C" {
|
||||
#define KBSTATP 0x64 /* kbd controller status port(I) */
|
||||
#define KBS_DIB 0x01 /* kbd data in buffer */
|
||||
#define KBDATAP 0x60 /* kbd data port(I) */
|
||||
/* AT keyboard */
|
||||
/* 8042 ports */
|
||||
#define KB_DATA 0x60 /* I/O port for keyboard data
|
||||
Read : Read Output Buffer
|
||||
Write: Write Input Buffer(8042 Data&8048 Command) */
|
||||
#define KB_CMD 0x64 /* I/O port for keyboard command
|
||||
Read : Read Status Register
|
||||
Write: Write Input Buffer(8042 Command) */
|
||||
#define LED_CODE 0xED
|
||||
#define KB_ACK 0xFA
|
||||
|
||||
/*******************************************************************/
|
||||
/* Serial Register */
|
||||
|
||||
@@ -11,18 +11,6 @@ static __inline unsigned char inb(int port)
|
||||
__asm __volatile("inb %w1,%0" : "=a" (data) : "d" (port));
|
||||
return data;
|
||||
}
|
||||
static __inline unsigned char inb_p(unsigned short port)
|
||||
{
|
||||
unsigned char _v;
|
||||
__asm__ __volatile__ ("inb %1, %0\n\t"
|
||||
// "outb %0,$0x80\n\t"
|
||||
// "outb %0,$0x80\n\t"
|
||||
// "outb %0,$0x80\n\t"
|
||||
"outb %0,$0x80"
|
||||
:"=a" (_v)
|
||||
:"d" ((unsigned short) port));
|
||||
return _v;
|
||||
}
|
||||
|
||||
static __inline unsigned short inw(int port)
|
||||
{
|
||||
@@ -51,36 +39,11 @@ static __inline void outb(int port, unsigned char data)
|
||||
__asm __volatile("outb %0,%w1" : : "a" (data), "d" (port));
|
||||
}
|
||||
|
||||
|
||||
static __inline void outb_p(char value, unsigned short port)
|
||||
{
|
||||
__asm__ __volatile__ ("outb %0,%1\n\t"
|
||||
"outb %0,$0x80"
|
||||
::"a" ((char) value),"d" ((unsigned short) port));
|
||||
}
|
||||
|
||||
static __inline void outw(int port, unsigned short data)
|
||||
{
|
||||
__asm __volatile("outw %0,%w1" : : "a" (data), "d" (port));
|
||||
}
|
||||
|
||||
static __inline unsigned char readcmos(int reg)
|
||||
{
|
||||
outb(reg,0x70);
|
||||
return (unsigned char) inb(0x71);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define io_delay() \
|
||||
__asm__ __volatile__ ("pushal \n\t"\
|
||||
"mov $0x3F6, %dx \n\t" \
|
||||
"inb %dx, %al \n\t" \
|
||||
"inb %dx, %al \n\t" \
|
||||
"inb %dx, %al \n\t" \
|
||||
"inb %dx, %al \n\t" \
|
||||
"popal")
|
||||
|
||||
/* Gate descriptors are slightly different*/
|
||||
struct Gatedesc {
|
||||
unsigned gd_off_15_0 : 16; // low 16 bits of offset in segment
|
||||
|
||||
+85
-313
File diff suppressed because it is too large.
Load diff
@@ -1,132 +0,0 @@
|
||||
|
||||
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
keyboard.h
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
Forrest Yu, 2005
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
|
||||
|
||||
#ifndef _TINIX_KEYBOARD_H_
|
||||
#define _TINIX_KEYBOARD_H_
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Macros Declaration */
|
||||
/************************************************************************/
|
||||
#define KB_IN_BYTES 32 /* size of keyboard input buffer */
|
||||
#define MAP_COLS 3 /* Number of columns in keymap */
|
||||
#define NR_SCAN_CODES 0x80 /* Number of scan codes (rows in keymap) */
|
||||
|
||||
#define FLAG_BREAK 0x0080 /* Break Code */
|
||||
#define FLAG_EXT 0x0100 /* Normal function keys */
|
||||
#define FLAG_SHIFT_L 0x0200 /* Shift key */
|
||||
#define FLAG_SHIFT_R 0x0400 /* Shift key */
|
||||
#define FLAG_CTRL_L 0x0800 /* Control key */
|
||||
#define FLAG_CTRL_R 0x1000 /* Control key */
|
||||
#define FLAG_ALT_L 0x2000 /* Alternate key */
|
||||
#define FLAG_ALT_R 0x4000 /* Alternate key */
|
||||
#define FLAG_PAD 0x8000 /* keys in num pad */
|
||||
|
||||
#define MASK_RAW 0x01FF /* raw key value = code passed to tty & MASK_RAW
|
||||
the value can be found either in the keymap column 0
|
||||
or in the list below */
|
||||
|
||||
/* Special keys */
|
||||
#define ESC (0x01 + FLAG_EXT) /* Esc */
|
||||
#define TAB (0x02 + FLAG_EXT) /* Tab */
|
||||
#define ENTER (0x03 + FLAG_EXT) /* Enter */
|
||||
#define BACKSPACE (0x04 + FLAG_EXT) /* BackSpace */
|
||||
|
||||
#define GUI_L (0x05 + FLAG_EXT) /* L GUI */
|
||||
#define GUI_R (0x06 + FLAG_EXT) /* R GUI */
|
||||
#define APPS (0x07 + FLAG_EXT) /* APPS */
|
||||
|
||||
/* Shift, Ctrl, Alt */
|
||||
#define SHIFT_L (0x08 + FLAG_EXT) /* L Shift */
|
||||
#define SHIFT_R (0x09 + FLAG_EXT) /* R Shift */
|
||||
#define CTRL_L (0x0A + FLAG_EXT) /* L Ctrl */
|
||||
#define CTRL_R (0x0B + FLAG_EXT) /* R Ctrl */
|
||||
#define ALT_L (0x0C + FLAG_EXT) /* L Alt */
|
||||
#define ALT_R (0x0D + FLAG_EXT) /* R Alt */
|
||||
|
||||
/* Lock keys */
|
||||
#define CAPS_LOCK (0x0E + FLAG_EXT) /* Caps Lock */
|
||||
#define NUM_LOCK (0x0F + FLAG_EXT) /* Number Lock */
|
||||
#define SCROLL_LOCK (0x10 + FLAG_EXT) /* Scroll Lock */
|
||||
|
||||
/* Function keys */
|
||||
#define F1 (0x11 + FLAG_EXT) /* F1 */
|
||||
#define F2 (0x12 + FLAG_EXT) /* F2 */
|
||||
#define F3 (0x13 + FLAG_EXT) /* F3 */
|
||||
#define F4 (0x14 + FLAG_EXT) /* F4 */
|
||||
#define F5 (0x15 + FLAG_EXT) /* F5 */
|
||||
#define F6 (0x16 + FLAG_EXT) /* F6 */
|
||||
#define F7 (0x17 + FLAG_EXT) /* F7 */
|
||||
#define F8 (0x18 + FLAG_EXT) /* F8 */
|
||||
#define F9 (0x19 + FLAG_EXT) /* F9 */
|
||||
#define F10 (0x1A + FLAG_EXT) /* F10 */
|
||||
#define F11 (0x1B + FLAG_EXT) /* F11 */
|
||||
#define F12 (0x1C + FLAG_EXT) /* F12 */
|
||||
|
||||
/* Control Pad */
|
||||
#define PRINTSCREEN (0x1D + FLAG_EXT) /* Print Screen */
|
||||
#define PAUSEBREAK (0x1E + FLAG_EXT) /* Pause/Break */
|
||||
#define INSERT (0x1F + FLAG_EXT) /* Insert */
|
||||
#define DELETE (0x20 + FLAG_EXT) /* Delete */
|
||||
#define HOME (0x21 + FLAG_EXT) /* Home */
|
||||
#define END (0x22 + FLAG_EXT) /* End */
|
||||
#define PAGEUP (0x23 + FLAG_EXT) /* Page Up */
|
||||
#define PAGEDOWN (0x24 + FLAG_EXT) /* Page Down */
|
||||
#define UP (0x25 + FLAG_EXT) /* Up */
|
||||
#define DOWN (0x26 + FLAG_EXT) /* Down */
|
||||
#define LEFT (0x27 + FLAG_EXT) /* Left */
|
||||
#define RIGHT (0x28 + FLAG_EXT) /* Right */
|
||||
|
||||
/* ACPI keys */
|
||||
#define POWER (0x29 + FLAG_EXT) /* Power */
|
||||
#define SLEEP (0x2A + FLAG_EXT) /* Sleep */
|
||||
#define WAKE (0x2B + FLAG_EXT) /* Wake Up */
|
||||
|
||||
/* Num Pad */
|
||||
#define PAD_SLASH (0x2C + FLAG_EXT) /* / */
|
||||
#define PAD_STAR (0x2D + FLAG_EXT) /* * */
|
||||
#define PAD_MINUS (0x2E + FLAG_EXT) /* - */
|
||||
#define PAD_PLUS (0x2F + FLAG_EXT) /* + */
|
||||
#define PAD_ENTER (0x30 + FLAG_EXT) /* Enter */
|
||||
#define PAD_DOT (0x31 + FLAG_EXT) /* . */
|
||||
#define PAD_0 (0x32 + FLAG_EXT) /* 0 */
|
||||
#define PAD_1 (0x33 + FLAG_EXT) /* 1 */
|
||||
#define PAD_2 (0x34 + FLAG_EXT) /* 2 */
|
||||
#define PAD_3 (0x35 + FLAG_EXT) /* 3 */
|
||||
#define PAD_4 (0x36 + FLAG_EXT) /* 4 */
|
||||
#define PAD_5 (0x37 + FLAG_EXT) /* 5 */
|
||||
#define PAD_6 (0x38 + FLAG_EXT) /* 6 */
|
||||
#define PAD_7 (0x39 + FLAG_EXT) /* 7 */
|
||||
#define PAD_8 (0x3A + FLAG_EXT) /* 8 */
|
||||
#define PAD_9 (0x3B + FLAG_EXT) /* 9 */
|
||||
#define PAD_UP PAD_8 /* Up */
|
||||
#define PAD_DOWN PAD_2 /* Down */
|
||||
#define PAD_LEFT PAD_4 /* Left */
|
||||
#define PAD_RIGHT PAD_6 /* Right */
|
||||
#define PAD_HOME PAD_7 /* Home */
|
||||
#define PAD_END PAD_1 /* End */
|
||||
#define PAD_PAGEUP PAD_9 /* Page Up */
|
||||
#define PAD_PAGEDOWN PAD_3 /* Page Down */
|
||||
#define PAD_INS PAD_0 /* Ins */
|
||||
#define PAD_MID PAD_5 /* Middle key */
|
||||
#define PAD_DEL PAD_DOT /* Del */
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* Stucture Definition */
|
||||
/************************************************************************/
|
||||
/* Keyboard structure, 1 per console. */
|
||||
typedef struct s_kb {
|
||||
char* p_head; /* input cache pointer */
|
||||
char* p_tail; /* read cache pointer */
|
||||
int count;
|
||||
char buf[KB_IN_BYTES];
|
||||
}KB_INPUT;
|
||||
|
||||
|
||||
|
||||
#endif /* _TINIX_KEYBOARD_H_ */
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user