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

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

?? analog.c

?? 這個linux源代碼是很全面的~基本完整了~使用c編譯的~由于時間問題我沒有親自測試~但就算用來做參考資料也是非常好的
?? C
?? 第 1 頁 / 共 2 頁
字號:
		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);	analog->buttons = (analog->mask & ANALOG_GAMEPAD) ? analog_pad_btn : analog_joy_btn;	analog->dev.name = analog->name;	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%d: %s at gameport%d.%d",		analog->dev.number, analog->name, port->gameport->number, index);	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, gameport%d), probably not analog joystick.\n",			port->mask, port->gameport->number);		return -1;	}	i = port->gameport->number < ANALOG_PORTS ? analog_options[port->gameport->number] : 0xff;	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) && port->gameport->number < ANALOG_PORTS) {			analog_options[port->gameport->number] |=				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 gameport%d failed\n",		port->bads, port->reads, port->reads ? (port->bads * 100 / port->reads) : 0,		port->gameport->number);	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麻豆精品久久久久蜜臀| 日韩视频免费观看高清在线视频| 亚洲午夜精品17c| 久久精品亚洲麻豆av一区二区| 91欧美一区二区| 精品一区二区在线视频| 国产91精品免费| 日韩**一区毛片| 亚洲精选一二三| 中文字幕的久久| 精品久久久久一区二区国产| 色哟哟一区二区| 国产成人精品免费视频网站| 日本免费新一区视频| 亚洲老司机在线| 国产精品女同互慰在线看 | 欧美日韩国产精品成人| 成人午夜在线视频| 久久国产精品免费| 天天色图综合网| 一区二区三区资源| 中文字幕色av一区二区三区| 久久老女人爱爱| 精品乱人伦小说| 日韩一二三区视频| 777色狠狠一区二区三区| 91久久免费观看| 91一区在线观看| 91丝袜美女网| 色综合天天综合网天天狠天天| 成人中文字幕在线| 国产91在线观看丝袜| 国产一区二区三区免费观看| 美女免费视频一区二区| 日韩国产精品大片| 视频一区二区三区中文字幕| 亚洲妇女屁股眼交7| 一卡二卡三卡日韩欧美| 亚洲另类在线一区| 亚洲美女屁股眼交| 亚洲免费高清视频在线| 亚洲人成在线播放网站岛国| 亚洲视频图片小说| 亚洲少妇中出一区| 亚洲精品美腿丝袜| 亚洲国产日韩a在线播放性色| 亚洲一区免费在线观看| 亚洲不卡一区二区三区| 日韩一区欧美二区| 麻豆精品久久久| 精品一区二区三区影院在线午夜| 色视频欧美一区二区三区| 日本久久电影网| 9191成人精品久久| 精品国产免费一区二区三区四区| 精品久久一二三区| 欧美极品少妇xxxxⅹ高跟鞋| 1024成人网| 亚洲成av人片在线| 蜜桃视频免费观看一区| 国产一区二区女| 91在线国产观看| 欧美三级电影网| 精品女同一区二区| 国产精品成人免费精品自在线观看| 国产精品久线在线观看| 亚洲午夜久久久久中文字幕久| 青青草国产精品亚洲专区无| 国产精品综合二区| 一本色道**综合亚洲精品蜜桃冫| 欧美日韩一区 二区 三区 久久精品| 欧美视频你懂的| 337p日本欧洲亚洲大胆精品| 中文字幕一区二区三区不卡 | 日韩欧美aaaaaa| 国产午夜精品一区二区三区视频 | 久久免费视频一区| 亚洲品质自拍视频| 免费av网站大全久久| 成人综合婷婷国产精品久久蜜臀| 在线观看免费亚洲| 偷窥少妇高潮呻吟av久久免费| 激情五月婷婷综合网| 91原创在线视频| 日韩一级成人av| 亚洲欧美日韩中文字幕一区二区三区| 午夜久久久久久久久 | 欧美日韩精品是欧美日韩精品| 精品国产亚洲在线| 亚洲一区二区三区在线| 国产高清精品网站| 欧美日韩精品福利| 国产精品美女视频| 天使萌一区二区三区免费观看| 国产不卡在线播放| 制服丝袜亚洲网站| 亚洲日本va午夜在线影院| 日本不卡123| 色综合久久六月婷婷中文字幕| 欧美草草影院在线视频| 一区二区三区精品视频在线| 国产精品原创巨作av| 欧美精品乱码久久久久久| 中文字幕日韩av资源站| 国产一区二区三区在线观看免费视频 | 国产一区二区伦理| 欧美三级一区二区| 亚洲视频一区在线| 成人福利电影精品一区二区在线观看| 91精品国产欧美一区二区 | 91麻豆精品国产| 日韩码欧中文字| 国产成人免费在线观看不卡| 欧美一级二级三级蜜桃| 亚洲国产日韩精品| 在线欧美小视频| 国产精品久久久久aaaa| 国产福利一区二区| 欧美videossexotv100| 日韩在线卡一卡二| 日本大香伊一区二区三区| 中文字幕二三区不卡| 国产精品1024久久| 久久久久久黄色| 国产一区二区视频在线播放| 欧美电视剧免费全集观看| 日本免费在线视频不卡一不卡二| 欧美日本在线播放| 手机精品视频在线观看| 欧美日韩久久久久久| 亚洲成在人线在线播放| 欧美午夜精品一区二区三区 | 亚洲国产成人porn| 欧美三级韩国三级日本三斤| 亚洲一区日韩精品中文字幕| 欧美性videosxxxxx| 亚洲一区二区视频在线| 欧美亚洲动漫精品| 亚洲成人午夜电影| 欧美老女人第四色| 日韩成人av影视| 精品理论电影在线| 国产福利精品导航| 国产丝袜欧美中文另类| 丁香六月久久综合狠狠色| 中文av一区特黄| 色菇凉天天综合网| 亚洲大片在线观看| 日韩欧美一区二区三区在线| 久久福利资源站| 久久久精品蜜桃| jlzzjlzz亚洲女人18| 一区二区三区四区五区视频在线观看 | 国产亚洲女人久久久久毛片| 高清不卡在线观看| 亚洲人成亚洲人成在线观看图片 | 全国精品久久少妇| 久久综合色婷婷| 99精品视频一区| 亚洲不卡在线观看| 精品久久久久久久人人人人传媒| 国产精品一区二区三区四区| 亚洲欧洲韩国日本视频| 欧美日精品一区视频| 久草这里只有精品视频| 国产欧美精品国产国产专区| 色婷婷综合久久久久中文一区二区 | 亚洲精品国产a| 日韩欧美久久久| 成人伦理片在线| 亚洲va国产va欧美va观看| www一区二区| 91女厕偷拍女厕偷拍高清| 日韩电影在线一区| 国产精品水嫩水嫩| 91精品在线免费观看| 丰满放荡岳乱妇91ww| 亚洲国产精品尤物yw在线观看| 日韩精品一区二| 色诱亚洲精品久久久久久| 欧美亚洲动漫精品| 日韩一级高清毛片| 97精品国产露脸对白| 日韩精品电影一区亚洲| 国产精品久久久久aaaa樱花| 538在线一区二区精品国产| 国产v日产∨综合v精品视频| 亚洲国产综合人成综合网站| 日本一区二区不卡视频| 欧美一区二区视频观看视频| 99精品1区2区| 精品一区二区免费在线观看| 一区二区在线观看视频在线观看| 久久综合久色欧美综合狠狠| 欧美日韩视频专区在线播放| 成人国产精品免费网站| 美美哒免费高清在线观看视频一区二区 | 国产精品久久久久久久久免费相片| 欧美高清视频一二三区 | 天堂一区二区在线|