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

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

?? joystick-api.txt

?? ARM 嵌入式 系統(tǒng) 設計與實例開發(fā) 實驗教材 二源碼
?? TXT
字號:
		      Joystick API Documentation                -*-Text-*-		        Ragnar Hojland Espinosa			  <ragnar@macula.net>			      7 Aug 1998	$Id: joystick-api.txt,v 1.2 2001/05/08 21:21:23 vojtech Exp $1. Initialization~~~~~~~~~~~~~~~~~Open the joystick device following the usual semantics (that is, with open).Since the driver now reports events instead of polling for changes,immediately after the open it will issue a series of synthetic events(JS_EVENT_INIT) that you can read to check the initial state of thejoystick.By default, the device is opened in blocking mode.	int fd = open ("/dev/js0", O_RDONLY);2. Event Reading~~~~~~~~~~~~~~~~	struct js_event e;	read (fd, &e, sizeof(struct js_event));where js_event is defined as	struct js_event {		__u32 time;     /* event timestamp in milliseconds */		__s16 value;    /* value */		__u8 type;      /* event type */		__u8 number;    /* axis/button number */	};If the read is successful, it will return sizeof(struct js_event), unlessyou wanted to read more than one event per read as described in section 3.1.2.1 js_event.type~~~~~~~~~~~~~~~~~The possible values of ``type'' are	#define JS_EVENT_BUTTON         0x01    /* button pressed/released */	#define JS_EVENT_AXIS           0x02    /* joystick moved */	#define JS_EVENT_INIT           0x80    /* initial state of device */As mentioned above, the driver will issue synthetic JS_EVENT_INIT ORedevents on open. That is, if it's issuing a INIT BUTTON event, thecurrent type value will be	int type = JS_EVENT_BUTTON | JS_EVENT_INIT;	/* 0x81 */If you choose not to differentiate between synthetic or real eventsyou can turn off the JS_EVENT_INIT bits	type &= ~JS_EVENT_INIT;				/* 0x01 */2.2 js_event.number~~~~~~~~~~~~~~~~~~~The values of ``number'' correspond to the axis or button thatgenerated the event. Note that they carry separate numeration (thatis, you have both an axis 0 and a button 0). Generally,			number	1st Axis X	0	1st Axis Y	1	2nd Axis X	2	2nd Axis Y	3	...and so onHats vary from one joystick type to another. Some can be moved in 8directions, some only in 4, The driver, however, always reports a hat as twoindependent axis, even if the hardware doesn't allow independent movement.2.3 js_event.value~~~~~~~~~~~~~~~~~~For an axis, ``value'' is a signed integer between -32767 and +32767representing the position of the joystick along that axis. If youdon't read a 0 when the joystick is `dead', or if it doesn't span thefull range, you should recalibrate it (with, for example, jscal).For a button, ``value'' for a press button event is 1 and for a releasebutton event is 0.Though this	if (js_event.type == JS_EVENT_BUTTON) {		buttons_state ^= (1 << js_event.number);	}may work well if you handle JS_EVENT_INIT events separately,	if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) {		if (js_event.value)	        	buttons_state |= (1 << js_event.number);	   	else	      		buttons_state &= ~(1 << js_event.number);	}is much safer since it can't lose sync with the driver. As you wouldhave to write a separate handler for JS_EVENT_INIT events in the firstsnippet, this ends up being shorter.2.4 js_event.time~~~~~~~~~~~~~~~~~The time an event was generated is stored in ``js_event.time''. It's a timein milliseconds since ... well, since sometime in the past.  This eases thetask of detecting double clicks, figuring out if movement of axis and buttonpresses happened at the same time, and similar.3. Reading~~~~~~~~~~If you open the device in blocking mode, a read will block (that is,wait) forever until an event is generated and effectively read. Thereare two alternatives if you can't afford to wait forever (which is,admittedly, a long time;)	a) use select to wait until there's data to be read on fd, or	   until it timeouts. There's a good example on the select(2)	   man page.	b) open the device in non-blocking mode (O_NONBLOCK)3.1 O_NONBLOCK~~~~~~~~~~~~~~If read returns -1 when reading in O_NONBLOCK mode, this isn'tnecessarily a "real" error (check errno(3)); it can just mean thereare no events pending to be read on the driver queue. You should readall events on the queue (that is, until you get a -1).For example,	while (1) {		while (read (fd, &e, sizeof(struct js_event)) > 0) {	        	process_event (e);	   	}	   	/* EAGAIN is returned when the queue is empty */	   	if (errno != EAGAIN) {	      		/* error */	   	}	   	/* do something interesting with processed events */	}One reason for emptying the queue is that if it gets full you'll startmissing events since the queue is finite, and older events will getoverwritten.The other reason is that you want to know all what happened, and notdelay the processing till later.Why can get the queue full? Because you don't empty the queue asmentioned, or because too much time elapses from one read to anotherand too many events to store in the queue get generated. Note thathigh system load may contribute to space those reads even more.If time between reads is enough to fill the queue and loose an event,the driver will switch to startup mode and next time you read it,synthetic events (JS_EVENT_INIT) will be generated to inform you ofthe actual state of the joystick.[As for version 1.2.8, the queue is circular and able to hold 64 events. You can increment this size bumping up JS_BUFF_SIZE in joystick.h and recompiling the driver.]In the above code, you might as well want to read more than one eventat a time using the typical read(2) functionality. For that, you wouldreplace the read above with something like	struct js_event mybuffer[0xff];	int i = read (fd, mybuffer, sizeof(struct mybuffer));In this case, read would return -1 if the queue was empty, or someother value in which the number of events read would be i /sizeof(js_event)  Again, if the buffer was full, it's a good idea toprocess the events and keep reading it until you empty the driver queue.4. IOCTLs~~~~~~~~~The joystick driver defines the following ioctl(2) operations.				/* function			3rd arg  */	#define JSIOCGAXES	/* get number of axes		char	 */	#define JSIOCGBUTTONS	/* get number of buttons	char	 */	#define JSIOCGVERSION	/* get driver version		int	 */	#define JSIOCGNAME(len) /* get identifier string	char	 */	#define JSIOCSCORR	/* set correction values	&js_corr */	#define JSIOCGCORR	/* get correction values	&js_corr */For example, to read the number of axes	char number_of_axes;	ioctl (fd, JSIOCGAXES, &number_of_axes);4.1 JSIOGCVERSION~~~~~~~~~~~~~~~~~JSIOGCVERSION is a good way to check in run-time whether the runningdriver is 1.0+ and supports the event interface. If it is not, theIOCTL will fail. For a compile-time decision, you can test theJS_VERSION symbol	#ifdef JS_VERSION	#if JS_VERSION > 0xsomething4.2 JSIOCGNAME~~~~~~~~~~~~~~JSIOCGNAME(len) allows you to get the name string of the joystick - the sameas is being printed at boot time. The 'len' argument is the length of thebuffer provided by the application asking for the name. It is used to avoidpossible overrun should the name be too long.	char name[128];	if (ioctl(fd, JSIOCGNAME(sizeof(name)), name) < 0)		strncpy(name, "Unknown", sizeof(name));	printf("Name: %s\n", name);4.3 JSIOC[SG]CORR~~~~~~~~~~~~~~~~~For usage on JSIOC[SG]CORR I suggest you to look into jscal.c  They arenot needed in a normal program, only in joystick calibration softwaresuch as jscal or kcmjoy. These IOCTLs and data types aren't consideredto be in the stable part of the API, and therefore may change withoutwarning in following releases of the driver.Both JSIOCSCORR and JSIOCGCORR expect &js_corr to be able to holdinformation for all axis. That is, struct js_corr corr[MAX_AXIS];struct js_corr is defined as	struct js_corr {		__s32 coef[8];		__u16 prec;		__u16 type;	};and ``type''	#define JS_CORR_NONE            0x00    /* returns raw values */	#define JS_CORR_BROKEN          0x01    /* broken line */5. Backward compatibility~~~~~~~~~~~~~~~~~~~~~~~~~The 0.x joystick driver API is quite limited and its usage is deprecated.The driver offers backward compatibility, though. Here's a quick summary:	struct JS_DATA_TYPE js;	while (1) {		if (read (fd, &js, JS_RETURN) != JS_RETURN) {	      		/* error */	   	}	   	usleep (1000);	}As you can figure out from the example, the read returns immediately,with the actual state of the joystick.	struct JS_DATA_TYPE {		int buttons;    /* immediate button state */		int x;          /* immediate x axis value */		int y;          /* immediate y axis value */	};and JS_RETURN is defined as	#define JS_RETURN       sizeof(struct JS_DATA_TYPE)To test the state of the buttons,	first_button_state  = js.buttons & 1;	second_button_state = js.buttons & 2;The axis values do not have a defined range in the original 0.x driver,except for that the values are non-negative. The 1.2.8+ drivers use afixed range for reporting the values, 1 being the minimum, 128 thecenter, and 255 maximum value.The v0.8.0.2 driver also had an interface for 'digital joysticks', (nowcalled Multisystem joysticks in this driver), under /dev/djsX. This driverdoesn't try to be compatible with that interface.6. Final Notes~~~~~~~~~~~~~~____/|	Comments, additions, and specially corrections are welcome.\ o.O|	Documentation valid for at least version 1.2.8 of the joystick =(_)=	driver and as usual, the ultimate source for documentation is   U	to "Use The Source Luke" or, at your convenience, Vojtech ;)					- RagnarEOF

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产永久精品大片wwwapp| 精品国产乱码久久久久久闺蜜| 中文字幕不卡三区| 国产伦精一区二区三区| 国产午夜精品理论片a级大结局| 国产伦精一区二区三区| 国产精品久久久久久久久免费桃花 | 日日摸夜夜添夜夜添精品视频| 欧美日韩另类一区| 视频一区在线视频| 日韩午夜在线观看| 精品一区二区国语对白| 欧美国产一区二区在线观看| 9l国产精品久久久久麻豆| 日韩理论片中文av| 欧美日韩一区不卡| 精品亚洲成a人| 国产精品水嫩水嫩| 欧美日韩国产一级二级| 久久99国内精品| 中文字幕亚洲视频| 欧美精品视频www在线观看| 久久 天天综合| 国产精品国产三级国产三级人妇| 欧美精品一卡二卡| 国产成人精品综合在线观看 | 色婷婷精品久久二区二区蜜臀av| 婷婷久久综合九色综合伊人色| 精品999在线播放| 92精品国产成人观看免费| 日本在线不卡一区| 国产精品色婷婷久久58| 欧美一区三区四区| 不卡的av电影| 美女免费视频一区| 亚洲精品视频一区| 国产亚洲婷婷免费| 欧美日韩精品一区二区三区| 成人黄色在线视频| 美国毛片一区二区三区| 亚洲精品美国一| 国产午夜亚洲精品不卡| 制服丝袜激情欧洲亚洲| 91在线无精精品入口| 精品一二三四在线| 三级在线观看一区二区| 综合在线观看色| 精品国产青草久久久久福利| 欧美特级限制片免费在线观看| av中文字幕在线不卡| 国产一区亚洲一区| 日韩精品一二三四| 亚洲激情欧美激情| 亚洲欧洲中文日韩久久av乱码| 精品粉嫩超白一线天av| 3d成人h动漫网站入口| 色一情一乱一乱一91av| 丰满放荡岳乱妇91ww| 国产精品综合一区二区三区| 七七婷婷婷婷精品国产| 亚洲精品国产品国语在线app| 日本一区二区三级电影在线观看| 欧美va在线播放| 777色狠狠一区二区三区| 欧美色综合网站| 91传媒视频在线播放| 色综合天天综合狠狠| gogogo免费视频观看亚洲一| 成人一区二区三区中文字幕| 国产成人99久久亚洲综合精品| 国产精品综合视频| 9191成人精品久久| 欧美日韩国产片| 欧美老女人在线| 欧美日韩国产一二三| 在线播放国产精品二区一二区四区| 欧美视频在线一区| 欧美日韩一区在线| 欧美久久久影院| 日韩一级视频免费观看在线| 欧美一区二区三区男人的天堂| 8x福利精品第一导航| 日韩欧美国产综合| 精品国产伦一区二区三区观看体验| 日韩无一区二区| 欧美精品一区二区三区在线| 精品国产91洋老外米糕| 久久九九99视频| 国产精品不卡在线| 亚洲精品视频一区| 亚洲 欧美综合在线网络| 日韩电影一区二区三区四区| 免费人成精品欧美精品| 国产盗摄视频一区二区三区| 99在线精品一区二区三区| 色综合久久综合| 欧美人与z0zoxxxx视频| 日韩免费电影一区| 国产精品系列在线| 亚洲一二三四区| 奇米一区二区三区| 成人av在线网站| 欧美日韩不卡视频| 26uuu欧美日本| 综合久久久久久久| 五月开心婷婷久久| 国产一区二区三区观看| 99riav一区二区三区| 欧美日韩免费不卡视频一区二区三区| 精品国产区一区| 成人欧美一区二区三区白人| 亚洲1区2区3区视频| 国产成人丝袜美腿| 欧美年轻男男videosbes| 久久久精品影视| 亚洲国产精品一区二区尤物区| 国产一区二区三区观看| 欧美日韩一区二区三区不卡| 欧美精品一区二区三区高清aⅴ | 欧美亚洲日本一区| 日韩欧美一区二区视频| 中文字幕日韩一区二区| 青青草成人在线观看| av电影在线观看完整版一区二区| 欧美欧美欧美欧美| 亚洲日本电影在线| 九九国产精品视频| 欧美日产国产精品| 亚洲欧洲国产日本综合| 精品无人码麻豆乱码1区2区| 色婷婷激情一区二区三区| 久久久久97国产精华液好用吗| 日韩av在线播放中文字幕| 99久久精品免费看国产免费软件| 日韩欧美国产精品| 香蕉久久一区二区不卡无毒影院| 岛国精品一区二区| 精品日韩在线观看| 亚洲电影在线播放| 91影院在线观看| 国产亚洲成av人在线观看导航| 偷拍一区二区三区| 色噜噜夜夜夜综合网| 国产精品视频线看| 精品在线观看视频| 欧美一区在线视频| 天天亚洲美女在线视频| 欧美亚洲国产一区二区三区va| 国产精品国产三级国产| 国产成人av福利| 国产日产欧美一区二区三区| 精品一区二区三区av| 91精品国产综合久久婷婷香蕉| 一区二区高清在线| 色成人在线视频| 亚洲人成小说网站色在线| 成人黄色综合网站| 国产精品福利影院| 丁香网亚洲国际| 中文字幕不卡在线观看| 国产成人av福利| 亚洲国产精品99久久久久久久久| 国产精品一区二区三区99| 久久一留热品黄| 国产又粗又猛又爽又黄91精品| 久久久久综合网| 国产老女人精品毛片久久| 久久久久久久久久久久电影 | 懂色av一区二区三区免费看| 久久综合九色综合欧美就去吻| 精品在线亚洲视频| 精品成人私密视频| 国产乱子轮精品视频| 国产免费久久精品| 成人激情动漫在线观看| 亚洲欧洲韩国日本视频 | 欧美日韩中文另类| 性欧美大战久久久久久久久| 91精品国产免费| 精品一区二区三区免费毛片爱| 2021中文字幕一区亚洲| 欧美日韩在线播放一区| 日本午夜一本久久久综合| 日韩精品专区在线影院重磅| 国产高清久久久久| 亚洲人成亚洲人成在线观看图片 | 丰满少妇在线播放bd日韩电影| 中文av一区二区| 在线一区二区三区四区| 丝袜亚洲精品中文字幕一区| 日韩精品一区二区三区四区| 国产98色在线|日韩| 亚洲欧美日韩中文播放 | 久久一区二区三区四区| 91在线看国产| 日韩电影在线观看电影| 国产视频一区二区在线| 日本高清免费不卡视频| 丝袜国产日韩另类美女| 久久中文字幕电影|