📄 kbd_zlg7289.c
字号:
/* * Microwindows keyboard driver for Compaq iPAQ * * Copyright (c) 2000, 2003 Century Software Embedded Technologies * Written by Jordan Crouse */#include <stdio.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include "kbd_types.h"#include "kbd_zlg7289.h"#define UP-NETARM3000 1/*#define UP-NETARM300-S 1 */#define KEYBOARD "/dev/keyboard/0raw"#ifdef UP-NETARM3000char keys[] = {//-->0x0a--0x19,0x28 '7', //0 '4', //1 '1', //2 MWKEY_UNKNOWN, MWKEY_C_NUMLOCK, //4 MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, '8', //8 '5', //9 '2', //0xa '0', //0xb '/', //0xc MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, '9',//0x10 '6',//0x11 '3',//0x12 '.',//0x13 MWKEY_C_MULTIPLY, //0x14 MWKEY_C_MINUS, //0x15 MWKEY_UNKNOWN, //0x16 MWKEY_UNKNOWN, //0x17 MWKEY_C_PLUS, //0x18 MWKEY_UNKNOWN, //0x19 MWKEY_C_ENTER, //0x1a MWKEY_UNKNOWN, //0x1b MWKEY_UNKNOWN //0x1c};/* From the kernel - this maps a single index into *//* the correct scancode */static MWKEY scancodes[] = { MWKEY_KP7, //0 MWKEY_KP4, //1 MWKEY_KP1, //2 MWKEY_UNKNOWN, //3 MWKEY_KP_NUMLOCK, //4 MWKEY_UNKNOWN, //5 MWKEY_UNKNOWN, //6 MWKEY_UNKNOWN, //7 MWKEY_KP8, //8 MWKEY_KP5, //9 MWKEY_KP2, //0xa MWKEY_KP0, //0xb MWKEY_KP_DIVIDE, //0xc MWKEY_UNKNOWN, //0xd MWKEY_UNKNOWN, //0xe MWKEY_UNKNOWN, //0xf MWKEY_KP9, //0x10 MWKEY_KP6, //0x11 MWKEY_KP3, //0x12 MWKEY_UNKNOWN, //0x13 MWKEY_KP_MULTIPLY, //0x14 MWKEY_KP_MINUS, //0x15 MWKEY_UNKNOWN, //0x16 MWKEY_UNKNOWN, //0x17 MWKEY_KP_PLUS, //0x18 MWKEY_UNKNOWN, //0x19 MWKEY_KP_ENTER, //0x1a MWKEY_UNKNOWN, //0x1b MWKEY_UNKNOWN, //0x1c};#else#ifdef UP-NETARM300-Schar keys[] = {//-->0x0a--0x19,0x28 MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, '*', '7', '4', '1', //0x6 MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, '0', '8', '5', '2', //0xe MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_UNKNOWN, 13, //enter '9', // '6', '3', //0x16 MWKEY_UNKNOWN, //0x17 MWKEY_UNKNOWN, //0x18 MWKEY_UNKNOWN, //0x19 MWKEY_UNKNOWN, //0x20};/* From the kernel - this maps a single index into *//* the correct scancode */static MWKEY scancodes[] = { MWKEY_KP7, //0 MWKEY_KP4, //1 MWKEY_KP1, //2 MWKEY_KP_MULTIPLY, //3 MWKEY_KP7, //4 MWKEY_KP4, //5 MWKEY_KP1, //6 MWKEY_UNKNOWN, //7 MWKEY_KP8, //8 MWKEY_KP5, //9 MWKEY_KP2, //0xa MWKEY_KP0, //0xb MWKEY_KP8, //0xc MWKEY_KP5, //0xd MWKEY_KP2, //0xe MWKEY_UNKNOWN, //0xf MWKEY_KP9, //0x10 MWKEY_KP6, //0x11 MWKEY_KP3, //0x12 MWKEY_KP_ENTER, //0x13 # MWKEY_KP9, //0x14 MWKEY_KP6, //0x15 MWKEY_KP3, //0x16 MWKEY_UNKNOWN, //0x17 MWKEY_KP_PLUS, //0x18 MWKEY_UNKNOWN, //0x19 MWKEY_KP_ENTER, //0x1a MWKEY_UNKNOWN, //0x1b MWKEY_UNKNOWN, //0x1c};#endif#endifstatic int fd;intKBD_Open(void){ /* Open the keyboard and get it ready for use */ fd = open(KEYBOARD, O_RDONLY | O_NONBLOCK); if (fd < 0) { printf("%s - Can't open keyboard!\n", __FUNCTION__); return -1; } return fd;}voidKBD_Close(void){ close(fd); fd = -1;}voidKBD_GetModifierInfo(MWKEYMOD * modifiers, MWKEYMOD * curmodifiers){ if (modifiers) *modifiers = 0; /* no modifiers available */ if (curmodifiers) *curmodifiers = 0;}intKBD_Read(char* kbuf, MWKEYMOD * modifiers, MWSCANCODE * scancode){ int keydown = 0; int cc = 0; char buf,key; cc = read(fd, &buf, 1); if (cc < 0) { if ((errno != EINTR) && (errno != EAGAIN) && (errno != EINVAL)) { perror("KBD KEY"); return (-1); } else { return (0); } } if (cc == 0) return (0); /* If the code is big than 127, then we know that */ /* we have a key down. Figure out what we've got */ *modifiers = 0; if (buf & 0x80) { keydown = 1; /* Key pressed but not released */ } else { keydown = 2; /* key released */ } buf &= (~0x80); if( buf >= sizeof(scancodes) ) *kbuf = MWKEY_UNKNOWN; *scancode = scancodes[(int) buf]; *kbuf = keys[buf];// printf("%c",*kbuf); // printf("by threewater: orgvalue=%x key=%c %x keystatus=%d, scancode=%x\n",buf, *kbuf,*kbuf,keydown, *scancode); return keydown; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -