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

📄 keypad.c

📁 linux环境下的键盘驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			udelay(DELAY_TIME);		}		else		{	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x4d,!(0x4d & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xcd,!(0xcd & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);		}#ifdef HR_DEBUG                printk("KEYPAD6\n");#endif                break;	case KEYPAD7:		if(numlock == 0)		{	                handle_scancode(0x47,!(0x47 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);	                handle_scancode(0xc7,!(0xc7 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);		}		else		{	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x47,!(0x47 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x97,!(0x97 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);		}#ifdef HR_DEBUG                printk("KEYPAD7\n");#endif                break;	case KEYPAD8:		if(numlock == 0)		{	                handle_scancode(0x48,!(0x48 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);	                handle_scancode(0xc8,!(0xc8 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);		}		else		{	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x48,!(0x48 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xc8,!(0xc8 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);		}#ifdef HR_DEBUG                printk("KEYPAD8\n");#endif                break;	case KEYPAD9:		if(numlock == 0)		{	                handle_scancode(0x49,!(0x49 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);	                handle_scancode(0xc9,!(0xc9 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);		}		else		{	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x49,!(0x49 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xc9,!(0xc9 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);		}#ifdef HR_DEBUG                printk("KEYPAD9\n");#endif                break;	case KEYPADADD:                handle_scancode(0x4e,!(0x4e & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0xce,!(0xce & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADADD\n");#endif                break;	case KEYPADSUB:                handle_scancode(0x4a,!(0x4a & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0xca,!(0xca & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADSUB\n");#endif                break;	case KEYPADDOT:		if(numlock == 0)		{	                handle_scancode(0x53,!(0x53 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME); 	                handle_scancode(0xd3,!(0xd3 & 0x80));	                tasklet_schedule(&keyboard_tasklet);			udelay(DELAY_TIME);		}		else		{	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0x53,!(0x53 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xe0,!(0xe0 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);	                handle_scancode(0xd3,!(0xd3 & 0x80));	                tasklet_schedule(&keyboard_tasklet);	                udelay(DELAY_TIME);		}#ifdef HR_DEBUG                printk("KEYPADDOT\n");#endif		break;	case KEYPADMUL:                handle_scancode(0x37,!(0x37 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0xb7,!(0xb7 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADMUL\n");#endif		break;	case KEYPADDIV:                handle_scancode(0xe0,!(0xe0 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0x35,!(0x35 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);		handle_scancode(0xe0,!(0xe0 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0xb5,!(0xb5 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADDIV\n");#endif		break;	case KEYPADENTER:                handle_scancode(0xe0,!(0xe0 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0x1c,!(0x1c & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);		handle_scancode(0xe0,!(0xe0 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0x9c,!(0x9c & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADENTER\n");#endif		break;	case KEYPADNUMLK:		numlock = ~(numlock);                handle_scancode(0x45,!(0x45 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);                handle_scancode(0xc5,!(0xc5 & 0x80));                tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("KEYPADNUMLK\n");#endif		break;	default:		handle_scancode(0xff,!(0xff & 0x80));		tasklet_schedule(&keyboard_tasklet);		udelay(DELAY_TIME);#ifdef HR_DEBUG                printk("[           ]\n");#endif		break;	}}				#define keypad_MAJOR	196devfs_handle_t  keypad_handle;     /* register handle to store device fs */int keypad_temp_count=0;ssize_t keypad_read (struct file * file ,char * buf, size_t count, loff_t * f_ops){	ui8ScanCode=readKBValue();	put_user(ui8ScanCode,buf);    //	return sizeof(ui8ScanCode);	return count;}	/*=========== SimpleD  Write =======================*/ssize_t keypad_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops){	printk("s3c2410: device file-write operation!\n");			return count;}	/*=========== SimpleD Ioctl =======================*/ssize_t keypad_ioctl (struct inode * inode ,struct file * file,	       	   unsigned int cmd, long data){	printk("s3c2410: device ioctl operation!\n");		}/*============ SimpleD device open ==============*/ ssize_t keypad_open (struct inode * inode ,struct file * file){	return 0;}	/*============ SimpleD device close =============*/ssize_t keypad_release (struct inode  * inode ,struct file * file){	return 0;}struct file_operations keypad_ops ={		open:		keypad_open,		read:		keypad_read,		write:		keypad_write,		ioctl:		keypad_ioctl,		release:	keypad_release,};static void IRQ_keypad_interrupt(int nr, void *devid, struct pt_regs *regs){        ui8ScanCode=readKBValue();	HR_del_pre_scancode(ui8ScanCode);    //printk(" %x pressed!\n",ui8ScanCode);}static int __init HW_keypad_init(void){    int ret = -ENODEV;    int delay ;	        set_external_irq(IRQ_keypad_INT,EXT_FALLING_EDGE, GPIO_PULLUP_EN);        set_gpio_ctrl(GPIO_SimpleINT_EINT1);	ret = request_irq(IRQ_keypad_INT, IRQ_keypad_interrupt, SA_INTERRUPT,                      "keypad", NULL);	if (ret) {                 printk(KERN_INFO "request SimpleINT IRQ failed (%d)\n", IRQ_keypad_INT);        return ret;        }		ret = devfs_register_chrdev(keypad_MAJOR, "keypad", &keypad_ops);  			if( ret < 0 ){		printk (" s3c2410: init_module failed with %d\n", ret);			return ret;	}	else		{		printk(KERN_INFO" S3c2410 keypad register success!!!\n");		;		}	keypad_handle = devfs_register( NULL, "keypad", DEVFS_FL_DEFAULT,                        keypad_MAJOR, 0, S_IFCHR, &keypad_ops, NULL);//-------------------------------------------------------------------	KeyPadInit();//-------------------------------------------------------------------    return ret;}int __init s3c2410_keypad_init(void) {    int  ret = -ENODEV;    ret = HW_keypad_init();    if (ret)      return ret;    return 0;}int init_module(){	s3c2410_keypad_init();}void cleanup_module(){        devfs_unregister_chrdev( keypad_MAJOR, "keypad" );        devfs_unregister( keypad_handle );   	free_irq(IRQ_keypad_INT, NULL);}

⌨️ 快捷键说明

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