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

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

?? analog.c

?? 是關于linux2.5.1的完全源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		cli();		GET_TIME(t1);		for (t = 0; t < 50; t++) { gameport_read(gameport); GET_TIME(t2); }		GET_TIME(t3);		restore_flags(flags);		udelay(i);		t = DELTA(t1, t2) - DELTA(t2, t3);		if (t < tx) tx = t;	}        port->loop = tx / 50;}/* * analog_name() constructs a name for an analog joystick. */static void analog_name(struct analog *analog){	sprintf(analog->name, "Analog %d-axis %d-button", 		hweight8(analog->mask & ANALOG_AXES_STD),		hweight8(analog->mask & ANALOG_BTNS_STD) + !!(analog->mask & ANALOG_BTNS_CHF) * 2 +		hweight16(analog->mask & ANALOG_BTNS_GAMEPAD) + !!(analog->mask & ANALOG_HBTN_CHF) * 4);	if (analog->mask & ANALOG_HATS_ALL)		sprintf(analog->name, "%s %d-hat",			analog->name, hweight16(analog->mask & ANALOG_HATS_ALL));	if (analog->mask & ANALOG_HAT_FCS)			strcat(analog->name, " FCS");	if (analog->mask & ANALOG_ANY_CHF)			strcat(analog->name, (analog->mask & ANALOG_SAITEK) ? " Saitek" : " CHF");	strcat(analog->name, (analog->mask & ANALOG_GAMEPAD) ? " gamepad": " joystick");}/* * analog_init_device() */static void analog_init_device(struct analog_port *port, struct analog *analog, int index){	int i, j, t, v, w, x, y, z;	analog_name(analog);	sprintf(analog->phys, "%s/input%d", port->gameport->phys, index);	analog->buttons = (analog->mask & ANALOG_GAMEPAD) ? analog_pad_btn : analog_joy_btn;	analog->dev.name = analog->name;	analog->dev.phys = analog->phys;	analog->dev.idbus = BUS_GAMEPORT;	analog->dev.idvendor = GAMEPORT_ID_VENDOR_ANALOG;	analog->dev.idproduct = analog->mask >> 4;	analog->dev.idversion = 0x0100;	analog->dev.open = analog_open;	analog->dev.close = analog_close;	analog->dev.private = port;	analog->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);		for (i = j = 0; i < 4; i++)		if (analog->mask & (1 << i)) {						t = analog_axes[j];			x = port->axes[i];			y = (port->axes[0] + port->axes[1]) >> 1;			z = y - port->axes[i];			z = z > 0 ? z : -z;			v = (x >> 3);			w = (x >> 3);			set_bit(t, analog->dev.absbit);			if ((i == 2 || i == 3) && (j == 2 || j == 3) && (z > (y >> 3)))				x = y;			if (analog->mask & ANALOG_SAITEK) {				if (i == 2) x = port->axes[i];				v = x - (x >> 2);				w = (x >> 4);			}			analog->dev.absmax[t] = (x << 1) - v;			analog->dev.absmin[t] = v;			analog->dev.absfuzz[t] = port->fuzz;			analog->dev.absflat[t] = w;			j++;		}	for (i = j = 0; i < 3; i++) 		if (analog->mask & analog_exts[i]) 			for (x = 0; x < 2; x++) {				t = analog_hats[j++];				set_bit(t, analog->dev.absbit);				analog->dev.absmax[t] = 1;				analog->dev.absmin[t] = -1;			}	for (i = j = 0; i < 4; i++)		if (analog->mask & (0x10 << i))			set_bit(analog->buttons[j++], analog->dev.keybit);	if (analog->mask & ANALOG_BTNS_CHF)		for (i = 0; i < 2; i++)			set_bit(analog->buttons[j++], analog->dev.keybit);	if (analog->mask & ANALOG_HBTN_CHF)		for (i = 0; i < 4; i++)			set_bit(analog->buttons[j++], analog->dev.keybit);	for (i = 0; i < 4; i++)		if (analog->mask & (ANALOG_BTN_TL << i))			set_bit(analog_pads[i], analog->dev.keybit);	analog_decode(analog, port->axes, port->initial, port->buttons);	input_register_device(&analog->dev);	printk(KERN_INFO "input: %s at %s", analog->name, port->gameport->phys);	if (port->cooked)		printk(" [ADC port]\n");	else		printk(" [%s timer, %d %sHz clock, %d ns res]\n", TIME_NAME,		port->speed > 10000 ? (port->speed + 800) / 1000 : port->speed,		port->speed > 10000 ? "M" : "k", 		port->speed > 10000 ? (port->loop * 1000) / (port->speed / 1000)				    : (port->loop * 1000000) / port->speed);}/* * analog_init_devices() sets up device-specific values and registers the input devices. */static int analog_init_masks(struct analog_port *port){	int i;	struct analog *analog = port->analog;	int max[4];	if (!port->mask)		return -1;	if ((port->mask & 3) != 3 && port->mask != 0xc) {		printk(KERN_WARNING "analog.c: Unknown joystick device found  "			"(data=%#x, %s), probably not analog joystick.\n",			port->mask, port->gameport->phys);		return -1;	}	i = analog_options[0]; /* FIXME !!! - need to specify options for different ports */	analog[0].mask = i & 0xfffff;	analog[0].mask &= ~(ANALOG_AXES_STD | ANALOG_HAT_FCS | ANALOG_BTNS_GAMEPAD)			| port->mask | ((port->mask << 8) & ANALOG_HAT_FCS)			| ((port->mask << 10) & ANALOG_BTNS_TLR) | ((port->mask << 12) & ANALOG_BTNS_TLR2);	analog[0].mask &= ~(ANALOG_HAT2_CHF)			| ((analog[0].mask & ANALOG_HBTN_CHF) ? 0 : ANALOG_HAT2_CHF);	analog[0].mask &= ~(ANALOG_THROTTLE | ANALOG_BTN_TR | ANALOG_BTN_TR2)			| ((~analog[0].mask & ANALOG_HAT_FCS) >> 8)			| ((~analog[0].mask & ANALOG_HAT_FCS) << 2)			| ((~analog[0].mask & ANALOG_HAT_FCS) << 4);	analog[0].mask &= ~(ANALOG_THROTTLE | ANALOG_RUDDER)			| (((~analog[0].mask & ANALOG_BTNS_TLR ) >> 10)			&  ((~analog[0].mask & ANALOG_BTNS_TLR2) >> 12));	analog[1].mask = ((i >> 20) & 0xff) | ((i >> 12) & 0xf0000);	analog[1].mask &= (analog[0].mask & ANALOG_EXTENSIONS) ? ANALOG_GAMEPAD			: (((ANALOG_BTNS_STD | port->mask) & ~analog[0].mask) | ANALOG_GAMEPAD);	if (port->cooked) {		for (i = 0; i < 4; i++) max[i] = port->axes[i] << 1;		if ((analog[0].mask & 0x7) == 0x7) max[2] = (max[0] + max[1]) >> 1;		if ((analog[0].mask & 0xb) == 0xb) max[3] = (max[0] + max[1]) >> 1;		if ((analog[0].mask & ANALOG_BTN_TL) && !(analog[0].mask & ANALOG_BTN_TL2)) max[2] >>= 1;		if ((analog[0].mask & ANALOG_BTN_TR) && !(analog[0].mask & ANALOG_BTN_TR2)) max[3] >>= 1;		if ((analog[0].mask & ANALOG_HAT_FCS)) max[3] >>= 1;		gameport_calibrate(port->gameport, port->axes, max);	}			for (i = 0; i < 4; i++) 		port->initial[i] = port->axes[i];	return -!(analog[0].mask || analog[1].mask);	}static int analog_init_port(struct gameport *gameport, struct gameport_dev *dev, struct analog_port *port){	int i, t, u, v;	gameport->private = port;	port->gameport = gameport;	init_timer(&port->timer);	port->timer.data = (long) port;	port->timer.function = analog_timer;	if (!gameport_open(gameport, dev, GAMEPORT_MODE_RAW)) {		analog_calibrate_timer(port);		gameport_trigger(gameport);		t = gameport_read(gameport);		wait_ms(ANALOG_MAX_TIME);		port->mask = (gameport_read(gameport) ^ t) & t & 0xf;		port->fuzz = (port->speed * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS;			for (i = 0; i < ANALOG_INIT_RETRIES; i++) {			if (!analog_cooked_read(port)) break;			wait_ms(ANALOG_MAX_TIME);		}		u = v = 0;		wait_ms(ANALOG_MAX_TIME);		t = gameport_time(gameport, ANALOG_MAX_TIME * 1000);		gameport_trigger(gameport);		while ((gameport_read(port->gameport) & port->mask) && (u < t)) u++; 		udelay(ANALOG_SAITEK_DELAY);		t = gameport_time(gameport, ANALOG_SAITEK_TIME);		gameport_trigger(gameport);		while ((gameport_read(port->gameport) & port->mask) && (v < t)) v++; 		if (v < (u >> 1)) { /* FIXME - more than one port */			analog_options[0] |= /* FIXME - more than one port */				ANALOG_SAITEK | ANALOG_BTNS_CHF | ANALOG_HBTN_CHF | ANALOG_HAT1_CHF;			return 0;		}		gameport_close(gameport);	}	if (!gameport_open(gameport, dev, GAMEPORT_MODE_COOKED)) {		for (i = 0; i < ANALOG_INIT_RETRIES; i++)			if (!gameport_cooked_read(gameport, port->axes, &port->buttons))				break;		for (i = 0; i < 4; i++)			if (port->axes[i] != -1) port->mask |= 1 << i;		port->fuzz = gameport->fuzz;		port->cooked = 1;		return 0;	}	if (!gameport_open(gameport, dev, GAMEPORT_MODE_RAW))		return 0;	return -1;}static void analog_connect(struct gameport *gameport, struct gameport_dev *dev){	struct analog_port *port;	int i;	if (!(port = kmalloc(sizeof(struct analog_port), GFP_KERNEL)))		return;	memset(port, 0, sizeof(struct analog_port));	if (analog_init_port(gameport, dev, port)) {		kfree(port);		return;	}	if (analog_init_masks(port)) {		gameport_close(gameport);		kfree(port);		return;	}	for (i = 0; i < 2; i++)		if (port->analog[i].mask)			analog_init_device(port, port->analog + i, i);}static void analog_disconnect(struct gameport *gameport){	int i;	struct analog_port *port = gameport->private;	for (i = 0; i < 2; i++)		if (port->analog[i].mask)			input_unregister_device(&port->analog[i].dev);	gameport_close(gameport);	printk(KERN_INFO "analog.c: %d out of %d reads (%d%%) on %s failed\n",		port->bads, port->reads, port->reads ? (port->bads * 100 / port->reads) : 0,		port->gameport->phys);	kfree(port);}struct analog_types {	char *name;	int value;};struct analog_types analog_types[] = {	{ "none",	0x00000000 },	{ "auto",	0x000000ff },	{ "2btn",	0x0000003f },	{ "y-joy",	0x0cc00033 },	{ "y-pad",	0x8cc80033 },	{ "fcs",	0x000008f7 },	{ "chf",	0x000002ff },	{ "fullchf",	0x000007ff },	{ "gamepad",	0x000830f3 },	{ "gamepad8",	0x0008f0f3 },	{ NULL, 0 }};static void analog_parse_options(void){	int i, j;	char *end;	for (i = 0; i < ANALOG_PORTS && js[i]; i++) {		for (j = 0; analog_types[j].name; j++)			if (!strcmp(analog_types[j].name, js[i])) {				analog_options[i] = analog_types[j].value;				break;			} 		if (analog_types[j].name) continue;		analog_options[i] = simple_strtoul(js[i], &end, 0);		if (end != js[i]) continue;		analog_options[i] = 0xff;		if (!strlen(js[i])) continue;		printk(KERN_WARNING "analog.c: Bad config for port %d - \"%s\"\n", i, js[i]);	}	for (; i < ANALOG_PORTS; i++)		analog_options[i] = 0xff;}/* * The gameport device structure. */static struct gameport_dev analog_dev = {	connect:	analog_connect,	disconnect:	analog_disconnect,};#ifndef MODULEstatic int __init analog_setup(char *str){	char *s = str;	int i = 0;	if (!str || !*str) return 0;	while ((str = s) && (i < ANALOG_PORTS)) {		if ((s = strchr(str,','))) *s++ = 0;		js[i++] = str;	}	return 1;}__setup("js=", analog_setup);#endifint __init analog_init(void){	analog_parse_options();	gameport_register_device(&analog_dev);	return 0;}void __exit analog_exit(void){	gameport_unregister_device(&analog_dev);}module_init(analog_init);module_exit(analog_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品—区二区四季| 蜜臀91精品一区二区三区| 69堂精品视频| 欧美优质美女网站| 91啪亚洲精品| 91丨九色丨国产丨porny| 9人人澡人人爽人人精品| 不卡在线观看av| 99re66热这里只有精品3直播| 成人精品gif动图一区| 99久久er热在这里只有精品66| 国产91清纯白嫩初高中在线观看| 成人免费毛片a| 99国产欧美另类久久久精品| 91麻豆.com| 在线电影欧美成精品| 欧美成人一级视频| 国产亚洲1区2区3区| 亚洲欧美日韩电影| 午夜精品久久久久久久99水蜜桃| 日韩精品福利网| 国产精品888| 色诱亚洲精品久久久久久| 欧美日韩国产首页在线观看| 日韩精品一区二区三区在线观看| 久久嫩草精品久久久久| 国产精品婷婷午夜在线观看| 亚洲精品欧美二区三区中文字幕| 亚洲va天堂va国产va久| 国产一区在线不卡| 91亚洲资源网| 欧美一级欧美三级| 欧美激情综合在线| 亚洲午夜成aⅴ人片| 狠狠色2019综合网| 91香蕉视频在线| 日韩欧美专区在线| 亚洲欧美一区二区视频| 日韩国产欧美在线观看| 成人免费黄色在线| 8v天堂国产在线一区二区| 久久精品无码一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 麻豆国产一区二区| 日本韩国欧美在线| 国产亚洲精品资源在线26u| 亚洲香蕉伊在人在线观| 国产精品69毛片高清亚洲| 欧美精品高清视频| 亚洲欧美偷拍三级| 国产一区二区三区黄视频| 欧美精品日韩精品| 亚洲乱码国产乱码精品精的特点 | 91猫先生在线| 日韩欧美黄色影院| 亚洲一级二级三级| 成人午夜视频网站| 2021中文字幕一区亚洲| 无吗不卡中文字幕| 欧美午夜一区二区三区免费大片| 国产精品第四页| 国产成人在线免费| 精品电影一区二区三区| 亚洲成人动漫av| 91精品1区2区| 亚洲欧美日韩精品久久久久| 成人av网址在线| 国产欧美日韩另类一区| 国产麻豆精品95视频| 91精品啪在线观看国产60岁| 一区二区三区久久| 色综合久久88色综合天天6| 国产精品网站在线观看| 国产成人av福利| 久久精品亚洲乱码伦伦中文| 国产成人精品一区二区三区四区| 精品成人在线观看| 国模娜娜一区二区三区| 精品国产麻豆免费人成网站| 日av在线不卡| 久久综合九色综合97_久久久| 精品中文字幕一区二区| 日韩欧美一区在线| 国精产品一区一区三区mba视频| 日韩一级片网址| 国产自产高清不卡| 中文字幕的久久| 91啪九色porn原创视频在线观看| 亚洲男女毛片无遮挡| 色综合久久中文字幕综合网| 亚洲精品国久久99热| 欧美日韩三级在线| 日本一区中文字幕 | 狠狠色丁香婷综合久久| 久久精品亚洲麻豆av一区二区| 国产99一区视频免费| 伊人婷婷欧美激情| 欧美夫妻性生活| 美女视频免费一区| 久久久久久久久99精品| www.欧美精品一二区| 一区二区三区不卡视频在线观看 | 91精品国产综合久久久蜜臀图片| 日韩中文字幕不卡| 2023国产一二三区日本精品2022| 国产宾馆实践打屁股91| 一区二区久久久| 欧美tickling挠脚心丨vk| jlzzjlzz亚洲日本少妇| 日韩精品一二三| 中文字幕一区二区三区视频| 欧美三区在线观看| 国产一区在线视频| 亚洲二区在线视频| 国产日韩欧美综合一区| 欧美日韩国产首页| 99久久精品国产毛片| 久久机这里只有精品| 一区二区免费在线| 国产亚洲成av人在线观看导航| 欧美视频第二页| 成年人国产精品| 久久国产日韩欧美精品| 亚洲高清中文字幕| 国产欧美日韩视频一区二区| 欧美一区二区大片| 在线免费观看视频一区| 国产精品一区二区果冻传媒| 婷婷开心久久网| 一区二区三区鲁丝不卡| 国产精品免费视频观看| 精品理论电影在线观看 | 精品少妇一区二区| 91福利在线播放| 成人精品视频.| 国产在线精品一区二区三区不卡 | 亚洲国产aⅴ成人精品无吗| 国产精品精品国产色婷婷| 精品理论电影在线观看| 91精品国产一区二区三区香蕉| 一本大道av伊人久久综合| 91在线视频18| 成人精品高清在线| 大胆欧美人体老妇| 国产精品 日产精品 欧美精品| 欧美aaaaaa午夜精品| 天天影视网天天综合色在线播放| 一区二区三区日韩| 亚洲一区二区视频在线| 亚洲一区二区成人在线观看| 亚洲免费在线电影| 国产精品另类一区| 中文字幕一区三区| 国产精品欧美一级免费| 欧美激情中文字幕一区二区| 国产免费观看久久| 中文字幕中文乱码欧美一区二区| 欧美国产日韩一二三区| 国产精品免费看片| 一区二区三区色| 日韩黄色免费电影| 久久国产尿小便嘘嘘尿| 国产一区999| 国产不卡视频一区| 色香蕉久久蜜桃| 欧美日韩成人在线一区| 欧美一区日韩一区| 精品国一区二区三区| 国产日韩欧美精品综合| 亚洲欧洲日韩av| 香蕉成人啪国产精品视频综合网| 亚洲成av人片www| 精品一区二区久久| 国产不卡在线一区| 成人做爰69片免费看网站| 色噜噜夜夜夜综合网| 欧美丰满高潮xxxx喷水动漫 | 久久精品国产免费看久久精品| 国产高清成人在线| 色哟哟一区二区| 日韩欧美国产精品一区| 亚洲三级免费电影| 中文字幕在线不卡| 麻豆91精品视频| 成人av免费在线观看| 欧美系列一区二区| 精品福利视频一区二区三区| 中文字幕一区在线观看| 日韩精品91亚洲二区在线观看| 国产精品影视网| 欧美性videosxxxxx| 国产网站一区二区三区| 亚洲风情在线资源站| 懂色av一区二区三区免费观看 | 欧美精品乱码久久久久久按摩| 2023国产精品| 日韩精品一二三区| 色老头久久综合| 国产欧美日本一区二区三区| 樱桃国产成人精品视频|