亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lkkbd.c

?? QQ2440板子
?? C
?? 第 1 頁 / 共 2 頁
字號:
	switch (lk->id[2]) {		case 0x00:			/* All okay */			break;		case LK_STUCK_KEY:			printk (KERN_ERR "lkkbd: Stuck key on keyboard at "					"%s\n", lk->phys);			break;		case LK_SELFTEST_FAILED:			printk (KERN_ERR "lkkbd: Selftest failed on keyboard "					"at %s, keyboard may not work "					"properly\n", lk->phys);			break;		default:			printk (KERN_ERR "lkkbd: Unknown error %02x on "					"keyboard at %s\n", lk->id[2],					lk->phys);			break;	}	/*	 * Try to hint user if there's a stuck key.	 */	if (lk->id[2] == LK_STUCK_KEY && lk->id[3] != 0)		printk (KERN_ERR "Scancode of stuck key is 0x%02x, keycode "				"is 0x%04x\n", lk->id[3],				lk->keycode[lk->id[3]]);	return;}/* * lkkbd_interrupt() is called by the low level driver when a character * is received. */static irqreturn_tlkkbd_interrupt (struct serio *serio, unsigned char data, unsigned int flags,		struct pt_regs *regs){	struct lkkbd *lk = serio_get_drvdata (serio);	int i;	DBG (KERN_INFO "Got byte 0x%02x\n", data);	if (lk->ignore_bytes > 0) {		DBG (KERN_INFO "Ignoring a byte on %s\n",				lk->name);		lk->id[LK_NUM_IGNORE_BYTES - lk->ignore_bytes--] = data;		if (lk->ignore_bytes == 0)			lkkbd_detection_done (lk);		return IRQ_HANDLED;	}	switch (data) {		case LK_ALL_KEYS_UP:			input_regs (&lk->dev, regs);			for (i = 0; i < ARRAY_SIZE (lkkbd_keycode); i++)				if (lk->keycode[i] != KEY_RESERVED)					input_report_key (&lk->dev, lk->keycode[i], 0);			input_sync (&lk->dev);			break;		case LK_METRONOME:			DBG (KERN_INFO "Got LK_METRONOME and don't "					"know how to handle...\n");			break;		case LK_OUTPUT_ERROR:			DBG (KERN_INFO "Got LK_OUTPUT_ERROR and don't "					"know how to handle...\n");			break;		case LK_INPUT_ERROR:			DBG (KERN_INFO "Got LK_INPUT_ERROR and don't "					"know how to handle...\n");			break;		case LK_KBD_LOCKED:			DBG (KERN_INFO "Got LK_KBD_LOCKED and don't "					"know how to handle...\n");			break;		case LK_KBD_TEST_MODE_ACK:			DBG (KERN_INFO "Got LK_KBD_TEST_MODE_ACK and don't "					"know how to handle...\n");			break;		case LK_PREFIX_KEY_DOWN:			DBG (KERN_INFO "Got LK_PREFIX_KEY_DOWN and don't "					"know how to handle...\n");			break;		case LK_MODE_CHANGE_ACK:			DBG (KERN_INFO "Got LK_MODE_CHANGE_ACK and ignored "					"it properly...\n");			break;		case LK_RESPONSE_RESERVED:			DBG (KERN_INFO "Got LK_RESPONSE_RESERVED and don't "					"know how to handle...\n");			break;		case 0x01:			DBG (KERN_INFO "Got 0x01, scheduling re-initialization\n");			lk->ignore_bytes = LK_NUM_IGNORE_BYTES;			lk->id[LK_NUM_IGNORE_BYTES - lk->ignore_bytes--] = data;			schedule_work (&lk->tq);			break;		default:			if (lk->keycode[data] != KEY_RESERVED) {				input_regs (&lk->dev, regs);				if (!test_bit (lk->keycode[data], lk->dev.key))					input_report_key (&lk->dev, lk->keycode[data], 1);				else					input_report_key (&lk->dev, lk->keycode[data], 0);				input_sync (&lk->dev);                        } else                                printk (KERN_WARNING "%s: Unknown key with "						"scancode 0x%02x on %s.\n",						__FILE__, data, lk->name);	}	return IRQ_HANDLED;}/* * lkkbd_event() handles events from the input module. */static intlkkbd_event (struct input_dev *dev, unsigned int type, unsigned int code,		int value){	struct lkkbd *lk = dev->private;	unsigned char leds_on = 0;	unsigned char leds_off = 0;	switch (type) {		case EV_LED:			CHECK_LED (LED_CAPSL, LK_LED_SHIFTLOCK);			CHECK_LED (LED_COMPOSE, LK_LED_COMPOSE);			CHECK_LED (LED_SCROLLL, LK_LED_SCROLLLOCK);			CHECK_LED (LED_SLEEP, LK_LED_WAIT);			if (leds_on != 0) {				lk->serio->write (lk->serio, LK_CMD_LED_ON);				lk->serio->write (lk->serio, leds_on);			}			if (leds_off != 0) {				lk->serio->write (lk->serio, LK_CMD_LED_OFF);				lk->serio->write (lk->serio, leds_off);			}			return 0;		case EV_SND:			switch (code) {				case SND_CLICK:					if (value == 0) {						DBG ("%s: Deactivating key clicks\n", __FUNCTION__);						lk->serio->write (lk->serio, LK_CMD_DISABLE_KEYCLICK);						lk->serio->write (lk->serio, LK_CMD_DISABLE_CTRCLICK);					} else {						DBG ("%s: Activating key clicks\n", __FUNCTION__);						lk->serio->write (lk->serio, LK_CMD_ENABLE_KEYCLICK);						lk->serio->write (lk->serio, volume_to_hw (lk->keyclick_volume));						lk->serio->write (lk->serio, LK_CMD_ENABLE_CTRCLICK);						lk->serio->write (lk->serio, volume_to_hw (lk->ctrlclick_volume));					}					return 0;				case SND_BELL:					if (value != 0)						lk->serio->write (lk->serio, LK_CMD_SOUND_BELL);					return 0;			}			break;		default:			printk (KERN_ERR "%s (): Got unknown type %d, code %d, value %d\n",					__FUNCTION__, type, code, value);	}	return -1;}/* * lkkbd_reinit() sets leds and beeps to a state the computer remembers they * were in. */static voidlkkbd_reinit (void *data){	struct lkkbd *lk = data;	int division;	unsigned char leds_on = 0;	unsigned char leds_off = 0;	/* Ask for ID */	lk->serio->write (lk->serio, LK_CMD_REQUEST_ID);	/* Reset parameters */	lk->serio->write (lk->serio, LK_CMD_SET_DEFAULTS);	/* Set LEDs */	CHECK_LED (LED_CAPSL, LK_LED_SHIFTLOCK);	CHECK_LED (LED_COMPOSE, LK_LED_COMPOSE);	CHECK_LED (LED_SCROLLL, LK_LED_SCROLLLOCK);	CHECK_LED (LED_SLEEP, LK_LED_WAIT);	if (leds_on != 0) {		lk->serio->write (lk->serio, LK_CMD_LED_ON);		lk->serio->write (lk->serio, leds_on);	}	if (leds_off != 0) {		lk->serio->write (lk->serio, LK_CMD_LED_OFF);		lk->serio->write (lk->serio, leds_off);	}	/*	 * Try to activate extended LK401 mode. This command will	 * only work with a LK401 keyboard and grants access to	 * LAlt, RAlt, RCompose and RShift.	 */	lk->serio->write (lk->serio, LK_CMD_ENABLE_LK401);	/* Set all keys to UPDOWN mode */	for (division = 1; division <= 14; division++)		lk->serio->write (lk->serio, LK_CMD_SET_MODE (LK_MODE_UPDOWN,					division));	/* Enable bell and set volume */	lk->serio->write (lk->serio, LK_CMD_ENABLE_BELL);	lk->serio->write (lk->serio, volume_to_hw (lk->bell_volume));	/* Enable/disable keyclick (and possibly set volume) */	if (test_bit (SND_CLICK, lk->dev.snd)) {		lk->serio->write (lk->serio, LK_CMD_ENABLE_KEYCLICK);		lk->serio->write (lk->serio, volume_to_hw (lk->keyclick_volume));		lk->serio->write (lk->serio, LK_CMD_ENABLE_CTRCLICK);		lk->serio->write (lk->serio, volume_to_hw (lk->ctrlclick_volume));	} else {		lk->serio->write (lk->serio, LK_CMD_DISABLE_KEYCLICK);		lk->serio->write (lk->serio, LK_CMD_DISABLE_CTRCLICK);	}	/* Sound the bell if needed */	if (test_bit (SND_BELL, lk->dev.snd))		lk->serio->write (lk->serio, LK_CMD_SOUND_BELL);}/* * lkkbd_connect() probes for a LK keyboard and fills the necessary structures. */static intlkkbd_connect (struct serio *serio, struct serio_driver *drv){	struct lkkbd *lk;	int i;	int err;	if (!(lk = kmalloc (sizeof (struct lkkbd), GFP_KERNEL)))		return -ENOMEM;	memset (lk, 0, sizeof (struct lkkbd));	init_input_dev (&lk->dev);	set_bit (EV_KEY, lk->dev.evbit);	set_bit (EV_LED, lk->dev.evbit);	set_bit (EV_SND, lk->dev.evbit);	set_bit (EV_REP, lk->dev.evbit);	set_bit (LED_CAPSL, lk->dev.ledbit);	set_bit (LED_SLEEP, lk->dev.ledbit);	set_bit (LED_COMPOSE, lk->dev.ledbit);	set_bit (LED_SCROLLL, lk->dev.ledbit);	set_bit (SND_BELL, lk->dev.sndbit);	set_bit (SND_CLICK, lk->dev.sndbit);	lk->serio = serio;	INIT_WORK (&lk->tq, lkkbd_reinit, lk);	lk->bell_volume = bell_volume;	lk->keyclick_volume = keyclick_volume;	lk->ctrlclick_volume = ctrlclick_volume;	lk->dev.keycode = lk->keycode;	lk->dev.keycodesize = sizeof (lk_keycode_t);	lk->dev.keycodemax = LK_NUM_KEYCODES;	lk->dev.event = lkkbd_event;	lk->dev.private = lk;	serio_set_drvdata (serio, lk);	err = serio_open (serio, drv);	if (err) {		serio_set_drvdata (serio, NULL);		kfree (lk);		return err;	}	sprintf (lk->name, "DEC LK keyboard");	sprintf (lk->phys, "%s/input0", serio->phys);	memcpy (lk->keycode, lkkbd_keycode, sizeof (lk_keycode_t) * LK_NUM_KEYCODES);	for (i = 0; i < LK_NUM_KEYCODES; i++)		set_bit (lk->keycode[i], lk->dev.keybit);	lk->dev.name = lk->name;	lk->dev.phys = lk->phys;	lk->dev.id.bustype = BUS_RS232;	lk->dev.id.vendor = SERIO_LKKBD;	lk->dev.id.product = 0;	lk->dev.id.version = 0x0100;	lk->dev.dev = &serio->dev;	input_register_device (&lk->dev);	printk (KERN_INFO "input: %s on %s, initiating reset\n", lk->name, serio->phys);	lk->serio->write (lk->serio, LK_CMD_POWERCYCLE_RESET);	return 0;}/* * lkkbd_disconnect() unregisters and closes behind us. */static voidlkkbd_disconnect (struct serio *serio){	struct lkkbd *lk = serio_get_drvdata (serio);	input_unregister_device (&lk->dev);	serio_close (serio);	serio_set_drvdata (serio, NULL);	kfree (lk);}static struct serio_device_id lkkbd_serio_ids[] = {	{		.type	= SERIO_RS232,		.proto	= SERIO_LKKBD,		.id	= SERIO_ANY,		.extra	= SERIO_ANY,	},	{ 0 }};MODULE_DEVICE_TABLE(serio, lkkbd_serio_ids);static struct serio_driver lkkbd_drv = {	.driver		= {		.name	= "lkkbd",	},	.description	= DRIVER_DESC,	.id_table	= lkkbd_serio_ids,	.connect	= lkkbd_connect,	.disconnect	= lkkbd_disconnect,	.interrupt	= lkkbd_interrupt,};/* * The functions for insering/removing us as a module. */static int __initlkkbd_init (void){	serio_register_driver(&lkkbd_drv);	return 0;}static void __exitlkkbd_exit (void){	serio_unregister_driver(&lkkbd_drv);}module_init (lkkbd_init);module_exit (lkkbd_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频一区二区免费在线观看 | 色综合欧美在线| 国产日韩欧美高清在线| 狠狠色狠狠色综合| 欧美国产乱子伦 | 日本道色综合久久| 亚洲成人你懂的| 欧美一级一区二区| 高清不卡在线观看| 国产女主播在线一区二区| 亚洲网友自拍偷拍| 日韩精品一区二区三区视频在线观看| 三级在线观看一区二区| 欧美日韩精品欧美日韩精品| 免费精品视频最新在线| 精品99一区二区三区| 国产精品乱码一区二区三区软件| 一本色道a无线码一区v| 久久精品国产77777蜜臀| 久久嫩草精品久久久精品一| av一二三不卡影片| 丝袜亚洲另类欧美综合| 2020国产精品久久精品美国| av午夜一区麻豆| 午夜精品一区二区三区三上悠亚| 一区二区欧美精品| 大胆欧美人体老妇| 亚洲电影激情视频网站| 久久午夜免费电影| 色诱亚洲精品久久久久久| 久久狠狠亚洲综合| 亚洲精品高清在线观看| 久久网站热最新地址| 色综合久久综合中文综合网| 国内精品不卡在线| 亚洲午夜国产一区99re久久| 久久先锋影音av| 欧美精品tushy高清| 成人av电影在线播放| 日韩国产精品久久久| 日本一区二区视频在线| 日韩一区二区三区在线视频| 91色porny| 国产成人精品www牛牛影视| 日韩av在线播放中文字幕| 亚洲欧美日韩综合aⅴ视频| 久久综合色鬼综合色| 欧美日韩免费电影| 99久久国产免费看| 国产精品综合视频| 另类小说综合欧美亚洲| 亚洲一区二区三区四区在线观看| 国产亚洲女人久久久久毛片| 欧美一区二区三区在线观看视频| 在线观看欧美日本| 99精品视频在线免费观看| 国产毛片精品一区| 精品制服美女久久| 欧美aaa在线| 日精品一区二区| 一个色综合网站| 一区二区三区在线视频观看58| 国产精品区一区二区三区| 国产日韩欧美高清| 欧美激情在线看| 国产精品热久久久久夜色精品三区 | 日韩一卡二卡三卡四卡| 91麻豆蜜桃一区二区三区| 成人av网站在线| 国产成人av电影| 国产乱对白刺激视频不卡| 久久99热99| 久久99久久精品| 久久精品国产第一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 亚洲综合成人在线视频| 一区二区三区在线观看欧美| 亚洲你懂的在线视频| 亚洲欧美一区二区久久| 亚洲另类在线制服丝袜| 一区二区三区在线观看动漫| 亚洲美女屁股眼交| 一区二区三区四区精品在线视频| 一区二区三区在线观看欧美 | 91麻豆精品国产综合久久久久久| 欧美男女性生活在线直播观看| 欧美日韩综合不卡| 亚洲成人免费影院| 国产亚洲精品免费| 国产精品美女一区二区三区 | 亚洲一区在线观看网站| 亚洲一二三四区不卡| 男人操女人的视频在线观看欧美| 美国三级日本三级久久99| 国内久久婷婷综合| 成人毛片视频在线观看| 91女厕偷拍女厕偷拍高清| 欧美丝袜丝交足nylons| 日韩视频免费观看高清在线视频| 欧美xxxx老人做受| 中文字幕电影一区| 亚洲国产精品尤物yw在线观看| 日韩黄色免费网站| 国产乱码字幕精品高清av| 91精品国产综合久久久蜜臀粉嫩| 欧美成人综合网站| 亚洲精品在线三区| 久久激情五月激情| 亚洲国产精品影院| 美女性感视频久久| 国产成人免费av在线| 不卡一区二区在线| 欧美精品久久久久久久多人混战| 欧美草草影院在线视频| 中文幕一区二区三区久久蜜桃| 亚洲福利一二三区| 国产乱对白刺激视频不卡| 色婷婷激情综合| 精品国内片67194| 亚洲欧美激情在线| 亚洲国产综合在线| 国产99久久久国产精品潘金网站| 精品视频1区2区3区| 久久久久久久久久久电影| 亚洲大片免费看| 成人短视频下载| 日韩亚洲欧美高清| 久久久精品黄色| 日韩电影一区二区三区| 波多野洁衣一区| 欧美xxxx老人做受| 中文字幕一区二区视频| 欧美国产精品久久| 六月婷婷色综合| 欧美日韩中文字幕一区| 国产清纯在线一区二区www| 日日摸夜夜添夜夜添亚洲女人| 成人性生交大片免费看视频在线| 9191国产精品| 亚洲欧美韩国综合色| 国产成人啪午夜精品网站男同| 91精品国产91久久久久久一区二区 | av中文一区二区三区| 精品国产乱码久久久久久久久| 午夜久久久影院| 99国产精品久久久| 欧美国产一区在线| 欧美精品日日鲁夜夜添| 制服丝袜国产精品| 一区二区成人在线观看| 国产精一区二区三区| 欧美一区二区啪啪| 日韩激情中文字幕| 欧美视频在线一区二区三区| 亚洲蜜臀av乱码久久精品| 成人av免费观看| 久久精品欧美一区二区三区不卡 | 色诱视频网站一区| 久久99热99| 欧美一级理论性理论a| 亚洲精品国产无天堂网2021| 成人动漫精品一区二区| 国产日韩欧美一区二区三区乱码 | 欧美一区二区三区人| 亚洲国产精品人人做人人爽| 欧洲日韩一区二区三区| 亚洲综合色婷婷| 欧美性大战xxxxx久久久| 亚洲美女偷拍久久| 欧美日韩在线电影| 偷拍一区二区三区四区| 成人精品在线视频观看| 国产精品久久久久影院亚瑟| 97久久精品人人做人人爽 | 99re6这里只有精品视频在线观看| 欧美激情在线看| 成人网在线播放| 精品久久久久久无| 亚洲综合另类小说| 狠狠色综合播放一区二区| caoporm超碰国产精品| 国产精品久久免费看| 一本到一区二区三区| 亚洲区小说区图片区qvod| 欧美曰成人黄网| 亚洲成av人**亚洲成av**| 日韩一区二区免费在线观看| 国精产品一区一区三区mba桃花 | 国产精品香蕉一区二区三区| 国产区在线观看成人精品| 一本色道久久加勒比精品| 丝袜亚洲另类欧美综合| 精品区一区二区| 国产成人久久精品77777最新版本| www.激情成人| 亚洲欧美另类在线| 日韩小视频在线观看专区| 免费看黄色91| 国产精品欧美一区二区三区| 欧美日韩一区二区三区不卡 |