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

📄 keyb.c

📁 键盘设备驱动,只需修改代码里的功能码和系统码即可使用
💻 C
📖 第 1 页 / 共 3 页
字号:
/* */#include <linux/module.h>#include <linux/config.h>#include <linux/spinlock.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/tty.h>#include <linux/mm.h>#include <linux/signal.h>#include <linux/init.h>#include <linux/kbd_ll.h>#include <linux/delay.h>#include <linux/random.h>#include <linux/poll.h>#include <linux/miscdevice.h>#include <linux/slab.h>#include <linux/kbd_kern.h>#include <linux/vt_kern.h>#include <linux/smp_lock.h>#include <linux/kd.h>#include <linux/pm.h>#include <asm/bitops.h>#include <asm/uaccess.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/io.h>#include <linux/pc_keyb.h>/* * Module params by chchen */#define	D	printk("INFO: __%d__(%s:%s)\n",__LINE__,__FILE__,__FUNCTION__);static int debug = 1; /* insmod parameter */static int ir_type = 1; /* 0: SUNPLUS 1: COSHIP */static int use_keyb = 1; /* 1: enable 0: disable PS2 keyb */static int use_ir = 1; /* 1: enable 0: disable IR */static int time_tick = 10; /* 1-15 : 1=10ms 15=150ms polling time*/#if LINUX_VERSION_CODE >= 0x020100MODULE_PARM(debug,"i");MODULE_PARM(ir_type,"i");MODULE_PARM(use_keyb,"i");MODULE_PARM(use_ir,"i");MODULE_PARM(time_tick,"i");#endif#define	SUPPORT_IR#ifdef MIKEY_100ms#define SCANHZ 1	//10ms#else#define SCANHZ time_tick	//100ms#endif#define	UINT32	u32UINT32	*ps2_dat=(UINT32 *)0xbffe8e00;UINT32	*ps2_tat=(UINT32 *)0xbffe8e04;UINT32	*ps2_con=(UINT32 *)0xbffe8e08;UINT32	*ps2_sig=(UINT32 *)0xbffe8e0c;#define	PORT_PSDAT	(*ps2_dat)#define	PORT_PSTAT	(*ps2_tat)#define PORT_PSCON	(*ps2_con)#define PORT_PSSSIG     (*pps2_sig)#define inportb(x)	(x)#define outportb(x,y)	x=y    #define BASE     0xa8000000typedef	struct	{	unsigned char	status;	unsigned char	x;	unsigned char	y;} MOUSE_EVENT;static inline void handle_keyboard(unsigned char scancode);#define KBD_ESCAPEE0	0xe0		/* in */#define KBD_ESCAPEE1	0xe1		/* in */#define KBD_BREAK	0xf0#define KBD_RESEND	0xfe #define K_NONE		0x7f #define K_ESC		0x01//MIKEY#undef	K_F1#undef	K_F2#undef	K_F3#undef	K_F4#undef	K_F5#undef	K_F6#undef	K_F7#undef	K_F8#undef	K_F9#undef	K_F10#undef	K_F11#undef	K_F12#undef	K_CAPS   #define K_F4		0x3e  #define K_F6		0x40 #define K_F7		0x41 #define K_F8		0x42 #define K_F9		0x43 #define K_F11		0x57  #define K_PRNT		0xee #define K_SCRL		0x46 #define K_BRK		0x77 #define K_AGR		0x29   #define K_3		0x04    #define K_MINS		0x0c #define K_EQLS		0x0d #define K_BKSP		0x0e #define K_INS		0x6e #define K_HOME		0x66// #define K_PGUP		0x68 #define K_NUML		0x45 #define KP_SLH		0x62 #define KP_STR		0x37 #define KP_MNS		0x4a #define K_TAB		0x0f  #define K_W		0x11   #define K_Y		0x15 #define K_U		0x16  #define K_O		0x18    #define K_DEL		111 #define K_END		0x6b// #define K_PGDN		0x6d #define KP_7		0x47 #define KP_9		0x49 #define KP_PLS		0x4e #define K_CAPS		0x3a  #define K_D		0x20  #define K_G		0x22 #define K_H		0x23 #define K_J		0x24 #define K_K		0x25  #define K_SEMI		0x27 #define K_SQOT		0x28 #define K_HASH		K_NONE  #define KP_5		0x4c #define KP_6		0x4d  #define K_BSLH		0x2b #define K_Z		0x2c #define K_X		0x2d #define K_C		0x2e  #define K_B		0x30 #define K_N		0x31  #define K_COMA		0x33 #define K_DOT		0x34 #define K_FSLH		0x35 #define K_RSFT		0x36// #define K_UP		0x67 #define KP_1		0x4f #define KP_3		0x51 #define KP_ENT		0x60   #define K_SPCE		0x39 #define K_RALT		0x64 #define K_RCTL		0x61// #define K_LEFT		0x69// #define K_DOWN	0x6c// #define K_RGHT		0x6a #define KP_0		0x52 #define KP_DOT		0x53  //*************defined  2004/10/14*********  #define K_2		0x03     //key_power #define  k_second     0x4   //key_second #define K_4		0x05   //key_fifth #define K_5		0x06  //key_fourth #define K_6		0x07  //key_third #define  k_up  0x10   //key_up #define  k_enter  0x36  //key_enter #define K_1		0x02 //key_backward #define  k_for   0x17   //key_forward #define  k_qback  0x18  //key_qback #define  k_qfor  0x19   //key_qfor #define  k_video 0x23    //key_video #define  k_pn  0x30  //key_pN #define  k_zoom  0x40  //key_zoom#define K_0		0x0b   //key_1 #define K_9		0x0a   //key_2  #define K_8		0x09   //key_3  #define K_V		0x2f    //key_4 #define K_RSBK	0x1b  //key_5#define K_P		0x01  //key_6#define K_A		0x1e  //key_7#define K_F		0x21  //key_8#define K_L		0x26   //key_9#define K_ENTR		0x1c  //key_0#define K_T		0x14    //key_10 #define KP_8		0x11    //key_menu#define K_I		0x16   //key_clear#define K_R		0x13  //key_setup#define K_LALT		0x38    //key_down #define KP_2		0x45    //key_left  #define K_LSFT		0x2a   //key_right  #define K_7		0x08  //key_unknown#define K_LCTL		0x1d    //key_play#define K_Q		0x22    //key_pause #define K_S		0x1f   //key_volup  #define K_LSBK		0x1a    //key_voldown  #define K_E		0x12   //key_step #define K_F10		0x44  //key_slow#define K_M		0x32   //key_AB#define K_F12		0x58   //key_repeat#define K_F2		0x3c   //key_display #define K_F1		0x3b  //key_prog #define K_F3		0x3d  //key_goto  #define K_F5		0x3f  //key_mute#define KP_4		0x43  //key_title  //**********defined end ****************** static unsigned char keycode_translate[256] ={/* 00 */  K_NONE, K_F9  , k_second, K_F5  , K_F3  , K_F1  , K_F2  , K_F12 ,/* 08 */  k_video, K_F10 , K_F8  , K_F6  , K_F4  , K_TAB , K_AGR , K_NONE,/* 10 */  k_up, K_LALT, K_LSFT, k_enter, K_LCTL, K_Q   , K_1   , k_for,/* 18 */  k_qback, k_qfor, K_Z   , K_S   , K_A   , K_W   , K_2   , K_NONE,/* 20 */  K_NONE, K_C   , K_X   , K_D   , K_E   , K_4   , K_3   , K_NONE,/* 28 */  K_NONE, K_SPCE, K_V   , K_F   , K_T   , K_R   , K_5   , K_NONE,/* 30 */  k_pn, K_N   , K_B   , K_H   , K_G   , K_Y   , K_6   , K_NONE,/* 38 */  K_NONE, K_NONE, K_M   , K_J   , K_U   , K_7   , K_8   , K_NONE,/* 40 */  k_zoom, K_COMA, K_K   , K_I   , K_O   , K_0   , K_9   , K_NONE,/* 48 */  K_NONE, K_DOT , K_FSLH, K_L   , K_SEMI, K_P   , K_MINS, K_NONE,/* 50 */  K_NONE, K_NONE, K_SQOT, K_NONE, K_LSBK, K_EQLS, K_NONE, K_NONE,/* 58 */  K_CAPS, K_RSFT, K_ENTR, K_RSBK, K_NONE, K_BSLH, K_NONE, K_NONE,/* 60 */  K_NONE, K_HASH, K_NONE, K_NONE, K_NONE, K_NONE, K_BKSP, K_NONE,/* 68 */  K_NONE, KP_1  , K_NONE, KP_4  , KP_7  , K_NONE, K_NONE, K_NONE,/* 70 */  KP_0  , KP_DOT, KP_2  , KP_5  , KP_6  , KP_8  , K_ESC , K_NUML,/* 78 */  K_F11 , KP_PLS, KP_3  , KP_MNS, KP_STR, KP_9  , K_SCRL, K_PRNT,/* 80 */  K_NONE, K_NONE, K_NONE, K_F7  , K_NONE, K_NONE, K_NONE, K_NONE,/* 88 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 90 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 98 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* a0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* a8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* b0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* b8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* c0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* c8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* d0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* d8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* e0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* e8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* f0 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* f8 */  K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, KBD_RESEND, K_NONE}; //********** Hansuntech keyvalue define**********#define	 R_Power	0x1e   //power#define   R_PN 0x02  //second#define   R_AN 0x36  //third#define	R_L	0x2e  //fourth#define	R_S	0x25  //fifth#define  key_1  0x45  //key 1#define  key_2  0x46  //key 2#define  key_3  0x3e  //key 3#define  key_4  0x2a  //key 4#define  key_5  0x5b  //key 5#define  key_6  0x4d  //key 6#define  key_7  0x1c  //key 7#define  key_8  0x2b  //key 8#define  key_9  0x4b  //key 9#define  key_0  0x5a  //key 0#define  key_10  0x2c //key +10#define  key_Menu  0x75 //key menu#define  key_clean  0x43  //key clean#define  key_setup  0x2d#define  key_up  0x10#define  key_down 0x11#define  key_left  0x72#define  key_right 0x12#define  key_enter 0x13#define  key_non  0x3d#define  key_play  0x14#define  key_pause  0x15#define  key_volup  0x1b    //vol+#define  key_voldown 0x54  //vol-#define  key_b  0x16  //backward#define  key_f   0x17  //forward#define  key_qb  0x18  //quick backward#define  key_qf  0x19   //quick  forward#define  key_step  0x24#define  key_slow  0x9#define  key_video 0x8#define  key_AB  0x3a#define  key_repeat 0x7#define  key_display  0x6#define  key_prog  0x5#define  key_goto  0x4#define  key_mute  0x3#define  key_title   0x6b#define  key_PN  0x30#define  key_zoom  0x40//******end**********#define   R_P  0x72 #define	R_T	0x2c#define	R_A	0x1c#define	R_R	0x2d#define	R_V	0x2a#define	R_I	0x43#define	R_ll	0x54#define	R_rr	0x5b#define	R_1	0x16#define	R_2	0x1e#define	R_3	0x26#define	R_4	0x25#define	R_5	0x2e#define	R_6	0x36#define	R_7	0x3d#define	R_8	0x3e#define	R_9	0x46#define	R_0	0x45#define	R_UP	0x10#define	R_DOWN	0x11#define	R_LEFT	0x72#define	R_RGHT	0x12#define	R_ENTR	0x5a#define	R_G	0x34#define	R_F	0x2b#define	R_E	0x24#define	R_M	0x3a#define	R_O	0x44/*#define	R_PLUS	0x79	//KEYPAD '+'#define	R_MINS	0x7b	//KEYPAD '-'*/#define	R_PLUS	0x55	// '='#define	R_MINS	0x4e	// '-'#define	R_BSLH	0x5d#define	R_J	0x3b#define	R_X	0x22#define	R_K	0x42#define	R_N	0x31#define	R_Z	0x1a#define	R_H	0x33#define	R_Q	0x15#define	R_B	0x32#define	R_C	0x21#define	R_W	0x1d#define	R_U	0x3c#define	R_D	0x23#define	R_Y	0x35#define	R_SLSH	0x4astatic unsigned char ir_map_sunplus[256] ={/* 00 */  R_P   , K_NONE, R_ENTR, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 08 */  R_J   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 10 */  R_6   , K_NONE, R_W   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 18 */  R_N   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 20 */  R_3   , K_NONE, R_Q   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 28 */  R_E   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 30 */  R_9   , K_NONE, R_Y   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 38 */  R_rr  , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 40 */  R_7  , K_NONE, R_DOWN, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 48 */  R_I   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 50 */  R_7   , K_NONE, R_D   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 58 */  R_F   , K_NONE, R_rr, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,/* 60 */  R_4   , K_NONE, R_C   , K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,

⌨️ 快捷键说明

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