⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kbd_zlg7289.c

📁 44b0/linux环境基本实验源码,包括helloworld,线程,串口,AD,DA,CAN总线,LED,电机,GPS,GPRS,键盘驱动等
💻 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 + -