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

📄 kbd_ipaq.c

📁 神龙卡开发原代码
💻 C
字号:
/* * Copyright (c) 2000 Century Software Embedded Technologies * Written by Jordan Crouse * * Microwindows keyboard driver for Compaq iPAQ */#include <stdio.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include "device.h"#define IPAQ_SCANCODE_RECORD    129#define IPAQ_SCANCODE_CALENDAR  130#define IPAQ_SCANCODE_CONTACTS 131#define IPAQ_SCANCODE_Q        132#define IPAQ_SCANCODE_START    133#define IPAQ_SCANCODE_UP       134 /* keycode up */#define IPAQ_SCANCODE_RIGHT    135 /* keycode right */#define IPAQ_SCANCODE_LEFT     136 /* keycode left */#define IPAQ_SCANCODE_DOWN     137 /* keycode down */#ifdef __ECOS#define KEYBOARD "/dev/kbd"#else#define KEYBOARD "/dev/h3600_key"#endifstatic int  IPAQ_Open(KBDDEVICE *pkd);static void IPAQ_Close(void);static void IPAQ_GetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers);static int  IPAQ_Read(MWKEY *kbuf, MWKEYMOD *modifiers, MWSCANCODE *scancode);KBDDEVICE kbddev = {	IPAQ_Open,	IPAQ_Close,	IPAQ_GetModifierInfo,	IPAQ_Read,	NULL};static int fd;/* From the kernel - this maps a single index into *//* the correct scancode */static unsigned char scancodes[] = {        0, /* unused */        IPAQ_SCANCODE_RECORD, /* 1 -> record button */        IPAQ_SCANCODE_CALENDAR, /* 2 -> calendar */        IPAQ_SCANCODE_CONTACTS, /* 3 -> contact */        IPAQ_SCANCODE_Q, /* 4 -> Q button */        IPAQ_SCANCODE_START, /* 5 -> start menu */        IPAQ_SCANCODE_UP, /* 6 -> up */        IPAQ_SCANCODE_RIGHT, /* 7 -> right */        IPAQ_SCANCODE_LEFT, /* 8 -> left */        IPAQ_SCANCODE_DOWN, /* 9 -> down */};static int IPAQ_Open(KBDDEVICE *pkd){  /* 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);}static void IPAQ_Close(void){  close(fd);  fd = 0;}static void IPAQ_GetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers){  if (modifiers)    *modifiers = 0;			/* no modifiers available */  if (curmodifiers)    *curmodifiers = 0;}static int IPAQ_Read(MWKEY *kbuf, MWKEYMOD *modifiers, MWSCANCODE *scancode){  int keydown = 0;  int cc = 0;  char buf[1];  cc = read(fd, &buf, 1);  if (cc < 0)    {      if ((errno != EINTR) && (errno != EAGAIN) && (errno != EINVAL))	{	  perror("IPAQ KEY");	   return(-1);	}      else	{	  return(0);	}    }  if (cc == 0)    return(0);  /* If the code is less than 127, then we know that */  /* we have a key down.  Figure out what we've got */  *modifiers = 0;  if (*buf < 127)    {      keydown = 1; /* Key pressed but not released */      if (*buf > 9)	return(0);      *scancode = scancodes[(int) *buf];    }  else    {      keydown = 2; /* key released */      *scancode = *buf;    }    switch(*scancode)    {    case IPAQ_SCANCODE_RECORD:      *kbuf = MWKEY_RECORD;      break;    case IPAQ_SCANCODE_CALENDAR:      *kbuf = MWKEY_APP1;      break;          case IPAQ_SCANCODE_CONTACTS:      *kbuf = MWKEY_APP2;      break;    case IPAQ_SCANCODE_Q:      *kbuf = MWKEY_MENU;      break;    case IPAQ_SCANCODE_START://      *kbuf = MWKEY_LAST;      *kbuf = MWKEY_CANCEL;      break;          case IPAQ_SCANCODE_UP:      *kbuf = MWKEY_UP;      break;    case IPAQ_SCANCODE_DOWN:      *kbuf = MWKEY_DOWN;      break;    case IPAQ_SCANCODE_LEFT:      *kbuf = MWKEY_LEFT;      break;          case IPAQ_SCANCODE_RIGHT:      *kbuf = MWKEY_RIGHT;      break;    default:      printf("Ipaq - Unknown scancode %d\n", *scancode);      return(0);    }  return(keydown);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -