📄 keyb.c
字号:
/* */#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 + -