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

📄 mac_keyb.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifdef CONFIG_PPC	if ( (_machine != _MACH_chrp) && (_machine != _MACH_Pmac) )		return;#endif#ifdef CONFIG_MAC	if (!MACH_IS_MAC)		return;#endif	/* setup key map */	memcpy(key_maps[0], macplain_map, sizeof(plain_map));	memcpy(key_maps[1], macshift_map, sizeof(plain_map));	memcpy(key_maps[2], macaltgr_map, sizeof(plain_map));	memcpy(key_maps[4], macctrl_map, sizeof(plain_map));	memcpy(key_maps[5], macshift_ctrl_map, sizeof(plain_map));	memcpy(key_maps[8], macalt_map, sizeof(plain_map));	memcpy(key_maps[12], macctrl_alt_map, sizeof(plain_map));#ifdef CONFIG_ADBMOUSE	/* initialize mouse interrupt hook */	adb_mouse_interrupt_hook = NULL;#endif	led_request.complete = 1;	mackeyb_probe();	notifier_chain_register(&adb_client_list, &mackeyb_adb_notifier);}static intadb_message_handler(struct notifier_block *this, unsigned long code, void *x){	unsigned long flags;	switch (code) {	case ADB_MSG_PRE_RESET:	case ADB_MSG_POWERDOWN:		/* Stop the repeat timer. Autopoll is already off at this point */		save_flags(flags);		cli();		del_timer(&repeat_timer);		restore_flags(flags);		/* Stop pending led requests */		while(!led_request.complete)			adb_poll();		break;	case ADB_MSG_POST_RESET:		mackeyb_probe();		break;	}	return NOTIFY_DONE;}static voidmackeyb_probe(void){	struct adb_request req;	int i;#ifdef CONFIG_ADBMOUSE	adb_register(ADB_MOUSE, 0, &mouse_ids, mouse_input);#endif /* CONFIG_ADBMOUSE */	adb_register(ADB_KEYBOARD, 0, &keyboard_ids, keyboard_input);	adb_register(0x07, 0x1F, &buttons_ids, buttons_input);	for (i = 0; i < keyboard_ids.nids; i++) {		int id = keyboard_ids.id[i];		/* turn off all leds */		adb_request(&req, NULL, ADBREQ_SYNC, 3,			    ADB_WRITEREG(id, KEYB_LEDREG), 0xff, 0xff);		/* Enable full feature set of the keyboard		   ->get it to send separate codes for left and right shift,		   control, option keys */#if 0		/* handler 5 doesn't send separate codes for R modifiers */		if (adb_try_handler_change(id, 5))			printk("ADB keyboard at %d, handler set to 5\n", id);		else#endif		if (adb_try_handler_change(id, 3))			printk("ADB keyboard at %d, handler set to 3\n", id);		else			printk("ADB keyboard at %d, handler 1\n", id);	}	/* Try to switch all mice to handler 4, or 2 for three-button	   mode and full resolution. */	for (i = 0; i < mouse_ids.nids; i++) {		int id = mouse_ids.id[i];		if (adb_try_handler_change(id, 4)) {			printk("ADB mouse at %d, handler set to 4", id);			adb_mouse_kinds[id] = ADBMOUSE_EXTENDED;		}		else if (adb_try_handler_change(id, 0x2F)) {			printk("ADB mouse at %d, handler set to 0x2F", id);			adb_mouse_kinds[id] = ADBMOUSE_MICROSPEED;		}		else if (adb_try_handler_change(id, 0x42)) {			printk("ADB mouse at %d, handler set to 0x42", id);			adb_mouse_kinds[id] = ADBMOUSE_TRACKBALLPRO;		}		else if (adb_try_handler_change(id, 0x66)) {			printk("ADB mouse at %d, handler set to 0x66", id);			adb_mouse_kinds[id] = ADBMOUSE_MICROSPEED;		}		else if (adb_try_handler_change(id, 0x5F)) {			printk("ADB mouse at %d, handler set to 0x5F", id);			adb_mouse_kinds[id] = ADBMOUSE_MICROSPEED;		}		else if (adb_try_handler_change(id, 3)) {			printk("ADB mouse at %d, handler set to 3", id);			adb_mouse_kinds[id] = ADBMOUSE_MS_A3;		}		else if (adb_try_handler_change(id, 2)) {			printk("ADB mouse at %d, handler set to 2", id);			adb_mouse_kinds[id] = ADBMOUSE_STANDARD_200;		}		else {			printk("ADB mouse at %d, handler 1", id);			adb_mouse_kinds[id] = ADBMOUSE_STANDARD_100;		}		if ((adb_mouse_kinds[id] == ADBMOUSE_TRACKBALLPRO)		    || (adb_mouse_kinds[id] == ADBMOUSE_MICROSPEED)) {			init_microspeed(id);		} else if (adb_mouse_kinds[id] == ADBMOUSE_MS_A3) {			init_ms_a3(id);		}  else if (adb_mouse_kinds[id] ==  ADBMOUSE_EXTENDED) {			/*			 * Register 1 is usually used for device			 * identification.  Here, we try to identify			 * a known device and call the appropriate			 * init function.			 */			adb_request(&req, NULL, ADBREQ_SYNC | ADBREQ_REPLY, 1,				    ADB_READREG(id, 1));			if ((req.reply_len) &&			    (req.reply[1] == 0x9a) && ((req.reply[2] == 0x21)				|| (req.reply[2] == 0x20)))				init_trackball(id);			else if ((req.reply_len >= 4) &&			    (req.reply[1] == 0x74) && (req.reply[2] == 0x70) &&			    (req.reply[3] == 0x61) && (req.reply[4] == 0x64))				init_trackpad(id);			else if ((req.reply_len >= 4) &&			    (req.reply[1] == 0x4b) && (req.reply[2] == 0x4d) &&			    (req.reply[3] == 0x4c) && (req.reply[4] == 0x31))				init_turbomouse(id);			else if ((req.reply_len == 9) &&			    (req.reply[1] == 0x4b) && (req.reply[2] == 0x4f) &&			    (req.reply[3] == 0x49) && (req.reply[4] == 0x54)){				if (adb_try_handler_change(id, 0x42)) {					printk("\nADB MacAlly 2-button mouse at %d, handler set to 0x42", id);					adb_mouse_kinds[id] = ADBMOUSE_MACALLY2;				}			}		}		printk("\n");        }}static voidinit_trackpad(int id){	struct adb_request req;	unsigned char r1_buffer[8];	printk(" (trackpad)");	adb_mouse_kinds[id] = ADBMOUSE_TRACKPAD;	adb_request(&req, NULL, ADBREQ_SYNC | ADBREQ_REPLY, 1,	ADB_READREG(id,1));	if (req.reply_len < 8)	    printk("bad length for reg. 1\n");	else	{	    memcpy(r1_buffer, &req.reply[1], 8);	    adb_request(&req, NULL, ADBREQ_SYNC, 9,	        ADB_WRITEREG(id,1),	            r1_buffer[0],	            r1_buffer[1],	            r1_buffer[2],	            r1_buffer[3],	            r1_buffer[4],	            r1_buffer[5],	            0x0d, /*r1_buffer[6],*/	            r1_buffer[7]);            adb_request(&req, NULL, ADBREQ_SYNC, 9,	        ADB_WRITEREG(id,2),		    0x99,		    0x94,		    0x19,		    0xff,		    0xb2,		    0x8a,		    0x1b,		    0x50);	    adb_request(&req, NULL, ADBREQ_SYNC, 9,	        ADB_WRITEREG(id,1),	            r1_buffer[0],	            r1_buffer[1],	            r1_buffer[2],	            r1_buffer[3],	            r1_buffer[4],	            r1_buffer[5],	            0x03, /*r1_buffer[6],*/	            r1_buffer[7]);        }}static voidinit_trackball(int id){	struct adb_request req;	printk(" (trackman/mouseman)");	adb_mouse_kinds[id] = ADBMOUSE_TRACKBALL;	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 00,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 01,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 02,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 03,0x38);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 00,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 01,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 02,0x81);	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id,1), 03,0x38);}static voidinit_turbomouse(int id){	struct adb_request req;        printk(" (TurboMouse 5)");	adb_mouse_kinds[id] = ADBMOUSE_TURBOMOUSE5;	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(id));	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(3));	adb_request(&req, NULL, ADBREQ_SYNC, 9,	ADB_WRITEREG(3,2),	    0xe7,	    0x8c,	    0,	    0,	    0,	    0xff,	    0xff,	    0x94);	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(3));	adb_request(&req, NULL, ADBREQ_SYNC, 9,	ADB_WRITEREG(3,2),	    0xa5,	    0x14,	    0,	    0,	    0x69,	    0xff,	    0xff,	    0x27);}static voidinit_microspeed(int id){	struct adb_request req;        printk(" (Microspeed/MacPoint or compatible)");	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(id));	/* This will initialize mice using the Microspeed, MacPoint and	   other compatible firmware. Bit 12 enables extended protocol.	   Register 1 Listen (4 Bytes)            0 -  3     Button is mouse (set also for double clicking!!!)            4 -  7     Button is locking (affects change speed also)            8 - 11     Button changes speed           12          1 = Extended mouse mode, 0 = normal mouse mode           13 - 15     unused 0           16 - 23     normal speed           24 - 31     changed speed       Register 1 talk holds version and product identification information.       Register 1 Talk (4 Bytes):            0 -  7     Product code            8 - 23     undefined, reserved           24 - 31     Version number       Speed 0 is max. 1 to 255 set speed in increments of 1/256 of max. */	adb_request(&req, NULL, ADBREQ_SYNC, 5,	ADB_WRITEREG(id,1),	    0x20,	/* alt speed = 0x20 (rather slow) */	    0x00,	/* norm speed = 0x00 (fastest) */	    0x10,	/* extended protocol, no speed change */	    0x07);	/* all buttons enabled as mouse buttons, no locking */	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(id));}static voidinit_ms_a3(int id){	struct adb_request req;	printk(" (Mouse Systems A3 Mouse, or compatible)");	adb_request(&req, NULL, ADBREQ_SYNC, 3,	ADB_WRITEREG(id, 0x2),	    0x00,	    0x07); 	adb_request(&req, NULL, ADBREQ_SYNC, 1, ADB_FLUSH(id)); }

⌨️ 快捷键说明

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