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

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

?? pwc-ctrl.c

?? webcam device driver
?? C
?? 第 1 頁 / 共 3 頁
字號:
	buf = flags & 0x03; // only lower two bits are currently used	return SendControlMsg(SET_MPT_CTL, PT_RESET_CONTROL_FORMATTER, 1);}int pwc_mpt_reset(struct pwc_device *pdev, int flags){	int ret;	ret = _pwc_mpt_reset(pdev, flags);	if (ret >= 0) {		pdev->pan_angle = 0;		pdev->tilt_angle = 0;	}	return ret;}static int _pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt){	unsigned char buf[4];		/* set new relative angle; angles are expressed in degrees * 100,	   but cam as .5 degree resolution, hence divide by 200. Also	   the angle must be multiplied by 64 before it's send to	   the cam (??)	 */	pan  =  64 * pan  / 100;	tilt = -64 * tilt / 100; /* positive tilt is down, which is not what the user would expect */	buf[0] = pan & 0xFF;	buf[1] = (pan >> 8) & 0xFF;	buf[2] = tilt & 0xFF;	buf[3] = (tilt >> 8) & 0xFF;	return SendControlMsg(SET_MPT_CTL, PT_RELATIVE_CONTROL_FORMATTER, 4);}int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt){	int ret;	/* check absolute ranges */	if (pan  < pdev->angle_range.pan_min  ||	    pan  > pdev->angle_range.pan_max  ||	    tilt < pdev->angle_range.tilt_min ||	    tilt > pdev->angle_range.tilt_max)		return -ERANGE;	/* go to relative range, check again */	pan  -= pdev->pan_angle;	tilt -= pdev->tilt_angle;	/* angles are specified in degrees * 100, thus the limit = 36000 */	if (pan < -36000 || pan > 36000 || tilt < -36000 || tilt > 36000)		return -ERANGE;	ret = _pwc_mpt_set_angle(pdev, pan, tilt);	if (ret >= 0) {		pdev->pan_angle  += pan;		pdev->tilt_angle += tilt;	}	if (ret == -EPIPE) /* stall -> out of range */		ret = -ERANGE;					return ret;}static int pwc_mpt_get_status(struct pwc_device *pdev, struct pwc_mpt_status *status){	int ret;	unsigned char buf[5];		ret = RecvControlMsg(GET_MPT_CTL, PT_STATUS_FORMATTER, 5);	if (ret < 0)		return ret;	status->status = buf[0] & 0x7; // 3 bits are used for reporting	status->time_pan = (buf[1] << 8) + buf[2];	status->time_tilt = (buf[3] << 8) + buf[4];	return 0;}int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor){	unsigned char buf;	int ret = -1, request;		if (pdev->type < 675)		request = SENSOR_TYPE_FORMATTER1;	else if (pdev->type < 730)		return -1; /* The Vesta series doesn't have this call */	else		request = SENSOR_TYPE_FORMATTER2;		ret = RecvControlMsg(GET_STATUS_CTL, request, 1);	if (ret < 0)		return ret;	if (pdev->type < 675)		*sensor = buf | 0x100;	else		*sensor = buf;	return 0;} /* End of Add-Ons                                    */ /* ************************************************* *//* Linux 2.5.something and 2.6 pass direct pointers to arguments of   ioctl() calls. With 2.4, you have to do tedious copy_from_user()   and copy_to_user() calls. With these macros we circumvent this,   and let me maintain only one source file. The functionality is   exactly the same otherwise. */   #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)/* define local variable for arg */#define ARG_DEF(ARG_type, ARG_name)\	ARG_type *ARG_name = arg;/* copy arg to local variable */	#define ARG_IN(ARG_name) /* nothing *//* argument itself (referenced) */#define ARGR(ARG_name) (*ARG_name)/* argument address */#define ARGA(ARG_name) ARG_name/* copy local variable to arg */#define ARG_OUT(ARG_name) /* nothing */#else#define ARG_DEF(ARG_type, ARG_name)\	ARG_type ARG_name;#define ARG_IN(ARG_name)\	if (copy_from_user(&ARG_name, arg, sizeof(ARG_name))) {\		ret = -EFAULT;\		break;\	}#define ARGR(ARG_name) ARG_name#define ARGA(ARG_name) &ARG_name#define ARG_OUT(ARG_name)\	if (copy_to_user(arg, &ARG_name, sizeof(ARG_name))) {\		ret = -EFAULT;\		break;\	}#endifint pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg){	int ret = 0;	switch(cmd) {	case VIDIOCPWCRUSER:	{		if (pwc_restore_user(pdev))			ret = -EINVAL;		break;	}		case VIDIOCPWCSUSER:	{		if (pwc_save_user(pdev))			ret = -EINVAL;		break;	}			case VIDIOCPWCFACTORY:	{		if (pwc_restore_factory(pdev))			ret = -EINVAL;		break;	}		case VIDIOCPWCSCQUAL:	{			ARG_DEF(int, qual)		ARG_IN(qual)		if (ARGR(qual) < 0 || ARGR(qual) > 3)			ret = -EINVAL;		else			ret = pwc_try_video_mode(pdev, pdev->view.x, pdev->view.y, pdev->vframes, ARGR(qual), pdev->vsnapshot);		if (ret >= 0)			pdev->vcompression = ARGR(qual);		break;	}		case VIDIOCPWCGCQUAL:	{		ARG_DEF(int, qual)				ARGR(qual) = pdev->vcompression;		ARG_OUT(qual)		break;	}		case VIDIOCPWCPROBE:	{		ARG_DEF(struct pwc_probe, probe)				strcpy(ARGR(probe).name, pdev->vdev->name);		ARGR(probe).type = pdev->type;		ARG_OUT(probe)		break;	}	case VIDIOCPWCGSERIAL:	{		ARG_DEF(struct pwc_serial, serial)				strcpy(ARGR(serial).serial, pdev->serial);		ARG_OUT(serial)		break;	}	case VIDIOCPWCSAGC:	{		ARG_DEF(int, agc)		ARG_IN(agc)		if (pwc_set_agc(pdev, ARGR(agc) < 0 ? 1 : 0, ARGR(agc)))			ret = -EINVAL;		break;	}		case VIDIOCPWCGAGC:	{		ARG_DEF(int, agc)				if (pwc_get_agc(pdev, ARGA(agc)))			ret = -EINVAL;		ARG_OUT(agc)		break;	}		case VIDIOCPWCSSHUTTER:	{		ARG_DEF(int, shutter_speed)		ARG_IN(shutter_speed)		ret = pwc_set_shutter_speed(pdev, ARGR(shutter_speed) < 0 ? 1 : 0, ARGR(shutter_speed));		break;	}	        case VIDIOCPWCSAWB:	{		ARG_DEF(struct pwc_whitebalance, wb)				ARG_IN(wb)		ret = pwc_set_awb(pdev, ARGR(wb).mode);		if (ret >= 0 && ARGR(wb).mode == PWC_WB_MANUAL) {			pwc_set_red_gain(pdev, ARGR(wb).manual_red);			pwc_set_blue_gain(pdev, ARGR(wb).manual_blue);		}		break;	}	case VIDIOCPWCGAWB:	{		ARG_DEF(struct pwc_whitebalance, wb)		memset(ARGA(wb), 0, sizeof(struct pwc_whitebalance));		ARGR(wb).mode = pwc_get_awb(pdev);		if (ARGR(wb).mode < 0)			ret = -EINVAL;		else {			if (ARGR(wb).mode == PWC_WB_MANUAL) {				ret = pwc_get_red_gain(pdev, &ARGR(wb).manual_red);				if (ret < 0)					break;				ret = pwc_get_blue_gain(pdev, &ARGR(wb).manual_blue);				if (ret < 0)					break;			}			if (ARGR(wb).mode == PWC_WB_AUTO) {				ret = pwc_read_red_gain(pdev, &ARGR(wb).read_red);				if (ret < 0)					break; 				ret =pwc_read_blue_gain(pdev, &ARGR(wb).read_blue); 				if (ret < 0) 					break;			}		}		ARG_OUT(wb)		break;	}		case VIDIOCPWCSAWBSPEED:	{		ARG_DEF(struct pwc_wb_speed, wbs)				if (ARGR(wbs).control_speed > 0) {			ret = pwc_set_wb_speed(pdev, ARGR(wbs).control_speed);		}		if (ARGR(wbs).control_delay > 0) {			ret = pwc_set_wb_delay(pdev, ARGR(wbs).control_delay);		}		break;	}		case VIDIOCPWCGAWBSPEED:	{		ARG_DEF(struct pwc_wb_speed, wbs)				ret = pwc_get_wb_speed(pdev, &ARGR(wbs).control_speed);		if (ret < 0)			break;		ret = pwc_get_wb_delay(pdev, &ARGR(wbs).control_delay);		if (ret < 0)			break;		ARG_OUT(wbs)		break;	}        case VIDIOCPWCSLED:	{		ARG_DEF(struct pwc_leds, leds)		ARG_IN(leds)		ret = pwc_set_leds(pdev, ARGR(leds).led_on, ARGR(leds).led_off);	    	break;	}	case VIDIOCPWCGLED:	{		ARG_DEF(struct pwc_leds, leds)				ret = pwc_get_leds(pdev, &ARGR(leds).led_on, &ARGR(leds).led_off);		ARG_OUT(leds)		break;	}	case VIDIOCPWCSCONTOUR:	{		ARG_DEF(int, contour)		ARG_IN(contour)		ret = pwc_set_contour(pdev, ARGR(contour));		break;	}				case VIDIOCPWCGCONTOUR:	{		ARG_DEF(int, contour)				ret = pwc_get_contour(pdev, ARGA(contour));		ARG_OUT(contour)		break;	}		case VIDIOCPWCSBACKLIGHT:	{		ARG_DEF(int, backlight)				ARG_IN(backlight)		ret = pwc_set_backlight(pdev, ARGR(backlight));		break;	}	case VIDIOCPWCGBACKLIGHT:	{		ARG_DEF(int, backlight)				ret = pwc_get_backlight(pdev, ARGA(backlight));		ARG_OUT(backlight)		break;	}		case VIDIOCPWCSFLICKER:	{		ARG_DEF(int, flicker)				ARG_IN(flicker)		ret = pwc_set_flicker(pdev, ARGR(flicker));		break;	}	case VIDIOCPWCGFLICKER:	{		ARG_DEF(int, flicker)				ret = pwc_get_flicker(pdev, ARGA(flicker));		ARG_OUT(flicker)		break;	}		case VIDIOCPWCSDYNNOISE:	{		ARG_DEF(int, dynnoise)				ARG_IN(dynnoise)		ret = pwc_set_dynamic_noise(pdev, ARGR(dynnoise));		break;	}		case VIDIOCPWCGDYNNOISE:	{		ARG_DEF(int, dynnoise)		ret = pwc_get_dynamic_noise(pdev, ARGA(dynnoise));		ARG_OUT(dynnoise);		break;	}	case VIDIOCPWCGREALSIZE:	{		ARG_DEF(struct pwc_imagesize, size)				ARGR(size).width = pdev->image.x;		ARGR(size).height = pdev->image.y;		ARG_OUT(size)		break; 	} 	 	case VIDIOCPWCMPTRESET: 	{ 		if (pdev->features & FEATURE_MOTOR_PANTILT) 		{	 		ARG_DEF(int, flags) 			ARG_IN(flags)			ret = pwc_mpt_reset(pdev, ARGR(flags)); 		} 		else 		{ 			ret = -ENXIO; 		} 		break;		 	} 	 	case VIDIOCPWCMPTGRANGE: 	{ 		if (pdev->features & FEATURE_MOTOR_PANTILT) 		{ 			ARG_DEF(struct pwc_mpt_range, range) 			 			ARGR(range) = pdev->angle_range; 			ARG_OUT(range) 		} 		else 		{	 			ret = -ENXIO; 		} 		break; 	} 	 	case VIDIOCPWCMPTSANGLE: 	{ 		int new_pan, new_tilt; 		 		if (pdev->features & FEATURE_MOTOR_PANTILT) 		{	 		ARG_DEF(struct pwc_mpt_angles, angles)	 		ARG_IN(angles)			/* The camera can only set relative angles, so			   do some calculations when getting an absolute angle .			 */			if (ARGR(angles).absolute)			{ 				new_pan  = ARGR(angles).pan;  				new_tilt = ARGR(angles).tilt; 			} 			else 			{ 				new_pan  = pdev->pan_angle  + ARGR(angles).pan; 				new_tilt = pdev->tilt_angle + ARGR(angles).tilt;			}			ret = pwc_mpt_set_angle(pdev, new_pan, new_tilt);		} 		else 		{ 			ret = -ENXIO; 		} 		break; 	} 	case VIDIOCPWCMPTGANGLE: 	{ 		 		if (pdev->features & FEATURE_MOTOR_PANTILT) 		{	 		ARG_DEF(struct pwc_mpt_angles, angles) 			ARGR(angles).absolute = 1; 			ARGR(angles).pan  = pdev->pan_angle; 			ARGR(angles).tilt = pdev->tilt_angle; 			ARG_OUT(angles) 		} 		else 		{ 			ret = -ENXIO; 		} 		break; 	}  	case VIDIOCPWCMPTSTATUS: 	{ 		if (pdev->features & FEATURE_MOTOR_PANTILT) 		{ 			ARG_DEF(struct pwc_mpt_status, status) 			 			ret = pwc_mpt_get_status(pdev, ARGA(status)); 			ARG_OUT(status) 		} 		else 		{ 			ret = -ENXIO; 		} 		break;	}	case VIDIOCPWCGVIDCMD:	{		ARG_DEF(struct pwc_video_command, cmd);		                ARGR(cmd).type = pdev->type;		ARGR(cmd).release = pdev->release;		ARGR(cmd).command_len = pdev->cmd_len;		memcpy(&ARGR(cmd).command_buf, pdev->cmd_buf, pdev->cmd_len);		ARGR(cmd).bandlength = pdev->vbandlength;		ARGR(cmd).frame_size = pdev->frame_size;		ARG_OUT(cmd)		break;	}       /*	case VIDIOCPWCGVIDTABLE:	{		ARG_DEF(struct pwc_table_init_buffer, table);		ARGR(table).len = pdev->cmd_len;		memcpy(&ARGR(table).buffer, pdev->decompress_data, pdev->decompressor->table_size);		ARG_OUT(table)		break;	}	*/	default:		ret = -ENOIOCTLCMD;		break;	}		if (ret > 0)		return 0;	return ret;}/* vim: set cinoptions= formatoptions=croql cindent shiftwidth=8 tabstop=8: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
㊣最新国产の精品bt伙计久久| 国产精品区一区二区三| 国产盗摄精品一区二区三区在线| 亚洲啪啪综合av一区二区三区| 日韩一区二区三区电影 | 成人免费高清在线观看| 偷偷要91色婷婷| 综合自拍亚洲综合图不卡区| 欧美大白屁股肥臀xxxxxx| 99国产精品一区| 国产精品一区二区三区99| 亚洲最快最全在线视频| 欧美国产日韩a欧美在线观看| 欧美高清视频不卡网| 91美女视频网站| 国产成人丝袜美腿| 美女视频免费一区| 亚洲国产精品久久人人爱蜜臀| 欧美国产亚洲另类动漫| 精品美女一区二区| 777xxx欧美| 欧美日韩一区二区三区在线| 91伊人久久大香线蕉| 国产乱妇无码大片在线观看| 免费观看在线综合| 午夜av电影一区| 亚洲图片有声小说| 一区二区三区精密机械公司| 亚洲欧美自拍偷拍| 国产精品欧美精品| 日本一区二区免费在线| 久久久久久免费网| 久久久国产精华| 337p粉嫩大胆噜噜噜噜噜91av| 日韩一二在线观看| 欧美一区二区网站| 欧美一区二区视频网站| 51精品久久久久久久蜜臀| 欧美日韩国产a| 欧美日韩视频专区在线播放| 欧美在线制服丝袜| 欧美三级中文字幕在线观看| 欧美在线你懂得| 欧美丝袜丝交足nylons| 欧美久久久久久久久| 欧美伦理影视网| 欧美精品777| 91精品国产麻豆| 欧美一级精品在线| 26uuu久久天堂性欧美| 久久香蕉国产线看观看99| 久久久久久久久蜜桃| 国产片一区二区| 中文字幕亚洲一区二区va在线| 成人欧美一区二区三区小说| 亚洲欧美视频一区| 亚洲第一主播视频| 麻豆91精品视频| 国产精品一区三区| 91一区在线观看| 欧美日韩一级片在线观看| 91精品一区二区三区在线观看| 日韩欧美在线网站| 中文字幕高清一区| 玉米视频成人免费看| 三级在线观看一区二区| 国内精品久久久久影院薰衣草| 成人在线视频一区二区| 色婷婷综合久久久中文字幕| 91麻豆精品91久久久久久清纯| 2024国产精品| 亚洲人成影院在线观看| 婷婷综合五月天| 国产成人免费高清| 日本韩国精品在线| 欧美成人女星排名| 成人免费在线播放视频| 视频一区二区三区在线| 大陆成人av片| 欧美日韩黄色一区二区| 久久久一区二区三区捆绑**| 一区二区三区高清| 久草在线在线精品观看| 99久久精品国产一区二区三区| 欧美日本一道本| 国产精品色呦呦| 午夜精品福利一区二区三区av| 国产一区二区三区| 欧美视频你懂的| 久久精品免视看| 亚洲成人你懂的| 成人动漫在线一区| 日韩一区二区视频在线观看| 综合久久久久久久| 黄色小说综合网站| 在线亚洲人成电影网站色www| 精品女同一区二区| 亚洲一二三区不卡| 成人h精品动漫一区二区三区| 91精品国产色综合久久不卡电影| 国产视频一区二区在线观看| 天堂蜜桃91精品| 99国产精品一区| 国产午夜亚洲精品羞羞网站| 日韩中文字幕一区二区三区| 99在线精品观看| 久久久久久久久久久久久女国产乱 | 日本道色综合久久| 国产亚洲一二三区| 美女网站色91| 91国偷自产一区二区使用方法| 国产精品网曝门| 国产原创一区二区三区| 欧美精品免费视频| 亚洲精品国产a| 99久久精品免费| 国产精品久久久久久久久动漫| 国产在线看一区| 欧美r级在线观看| 蜜桃av噜噜一区二区三区小说| 91久久线看在观草草青青| 一色桃子久久精品亚洲| 国产福利一区二区| 久久夜色精品一区| 麻豆精品在线看| 日韩欧美专区在线| 免费成人性网站| 欧美一区二区三区白人| 五月综合激情婷婷六月色窝| 欧美视频完全免费看| 亚洲午夜免费视频| 欧美三级中文字幕在线观看| 一区二区三区在线高清| 色噜噜狠狠色综合中国| 亚洲精选视频在线| 色综合久久中文综合久久97| 亚洲欧美日韩在线不卡| 色婷婷av一区二区三区大白胸| 亚洲视频狠狠干| 91麻豆swag| 亚洲综合成人在线| 欧美亚洲国产bt| 天天爽夜夜爽夜夜爽精品视频| 欧美伦理影视网| 美国三级日本三级久久99| 日韩精品中文字幕一区| 国产一区二区精品在线观看| 中文字幕 久热精品 视频在线| 国产99一区视频免费| ㊣最新国产の精品bt伙计久久| 一本到一区二区三区| 亚洲自拍偷拍麻豆| 91精品欧美久久久久久动漫| 另类欧美日韩国产在线| 久久一日本道色综合| 成人激情小说网站| 一区二区三区中文在线| 欧美熟乱第一页| 另类调教123区| 国产精品狼人久久影院观看方式| 一本到三区不卡视频| 亚洲国产sm捆绑调教视频| 日韩精品一区二区三区中文不卡| 国产一区二区在线电影| 亚洲欧美日韩中文字幕一区二区三区 | 奇米一区二区三区| 久久久久久久av麻豆果冻| 97精品国产露脸对白| 亚洲成人你懂的| 久久众筹精品私拍模特| 色婷婷av一区二区三区之一色屋| 日韩国产欧美视频| 中文字幕乱码一区二区免费| 日本韩国欧美国产| 精品中文字幕一区二区| 综合婷婷亚洲小说| 日韩免费成人网| 99久久久精品| 蜜臀久久99精品久久久久久9| 久久久五月婷婷| 欧美性感一类影片在线播放| 久久国产福利国产秒拍| 亚洲桃色在线一区| 日韩欧美三级在线| 一本一道波多野结衣一区二区| 日韩黄色在线观看| 国产精品成人免费精品自在线观看 | 国产日产欧产精品推荐色| 91麻豆国产精品久久| 国产在线不卡一区| 亚洲国产欧美日韩另类综合| 国产午夜精品一区二区三区视频 | 欧美艳星brazzers| 国产精品99久久久久久有的能看| 亚洲一区二区三区四区五区中文 | 日韩女优制服丝袜电影| 99精品国产热久久91蜜凸| 精品一区二区免费看| 亚洲v精品v日韩v欧美v专区| 欧美国产精品专区|