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

📄 cpia.c

📁 自己根据lkd和情境分析
💻 C
📖 第 1 页 / 共 5 页
字号:
	               cam->params.exposure.redComp, 220, 255, 220);	out += sprintf(out, "green1_comp:            %8d  %8d  %8d  %8d\n",	               cam->params.exposure.green1Comp, 214, 255, 214);	out += sprintf(out, "green2_comp:            %8d  %8d  %8d  %8d\n",	               cam->params.exposure.green2Comp, 214, 255, 214);	out += sprintf(out, "blue_comp:              %8d  %8d  %8d  %8d\n",	               cam->params.exposure.blueComp, 230, 255, 230);		out += sprintf(out, "apcor_gain1:            %#8x  %#8x  %#8x  %#8x\n",	               cam->params.apcor.gain1, 0, 0xff, 0x1c);	out += sprintf(out, "apcor_gain2:            %#8x  %#8x  %#8x  %#8x\n",	               cam->params.apcor.gain2, 0, 0xff, 0x1a);	out += sprintf(out, "apcor_gain4:            %#8x  %#8x  %#8x  %#8x\n",	               cam->params.apcor.gain4, 0, 0xff, 0x2d);	out += sprintf(out, "apcor_gain8:            %#8x  %#8x  %#8x  %#8x\n",	               cam->params.apcor.gain8, 0, 0xff, 0x2a);	out += sprintf(out, "vl_offset_gain1:        %8d  %8d  %8d  %8d\n",	               cam->params.vlOffset.gain1, 0, 255, 24);	out += sprintf(out, "vl_offset_gain2:        %8d  %8d  %8d  %8d\n",	               cam->params.vlOffset.gain2, 0, 255, 28);	out += sprintf(out, "vl_offset_gain4:        %8d  %8d  %8d  %8d\n",	               cam->params.vlOffset.gain4, 0, 255, 30);	out += sprintf(out, "vl_offset_gain8:        %8d  %8d  %8d  %8d\n",	               cam->params.vlOffset.gain8, 0, 255, 30);	out += sprintf(out, "flicker_control:        %8s  %8s  %8s  %8s\n",	               cam->params.flickerControl.flickerMode ? "on" : "off",		       "off", "on", "off");	out += sprintf(out, "mains_frequency:        %8d  %8d  %8d  %8d"	               " only 50/60\n",	               cam->mainsFreq ? 60 : 50, 50, 60, 50);	out += sprintf(out, "allowable_overexposure: %8d  %8d  %8d  %8d\n",	               cam->params.flickerControl.allowableOverExposure, 0,		       255, 0);	out += sprintf(out, "compression_mode:       ");	switch(cam->params.compression.mode) {	case CPIA_COMPRESSION_NONE:		out += sprintf(out, "%8s", "none");		break;	case CPIA_COMPRESSION_AUTO:		out += sprintf(out, "%8s", "auto");		break;	case CPIA_COMPRESSION_MANUAL:		out += sprintf(out, "%8s", "manual");		break;	default:		out += sprintf(out, "%8s", "unknown");		break;	}	out += sprintf(out, "    none,auto,manual      auto\n");	out += sprintf(out, "decimation_enable:      %8s  %8s  %8s  %8s\n",        	       cam->params.compression.decimation == 		       DECIMATION_ENAB ? "on":"off", "off", "off",		       "off");	out += sprintf(out, "compression_target:    %9s %9s %9s %9s\n",	               cam->params.compressionTarget.frTargeting  == 		       CPIA_COMPRESSION_TARGET_FRAMERATE ?		       "framerate":"quality",		       "framerate", "quality", "quality");	out += sprintf(out, "target_framerate:       %8d  %8d  %8d  %8d\n",	               cam->params.compressionTarget.targetFR, 0, 30, 7);	out += sprintf(out, "target_quality:         %8d  %8d  %8d  %8d\n",	               cam->params.compressionTarget.targetQ, 0, 255, 10);	out += sprintf(out, "y_threshold:            %8d  %8d  %8d  %8d\n",	               cam->params.yuvThreshold.yThreshold, 0, 31, 15);	out += sprintf(out, "uv_threshold:           %8d  %8d  %8d  %8d\n",	               cam->params.yuvThreshold.uvThreshold, 0, 31, 15);	out += sprintf(out, "hysteresis:             %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.hysteresis, 0, 255, 3);	out += sprintf(out, "threshold_max:          %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.threshMax, 0, 255, 11);	out += sprintf(out, "small_step:             %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.smallStep, 0, 255, 1);	out += sprintf(out, "large_step:             %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.largeStep, 0, 255, 3);	out += sprintf(out, "decimation_hysteresis:  %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.decimationHysteresis,		       0, 255, 2);	out += sprintf(out, "fr_diff_step_thresh:    %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.frDiffStepThresh,		       0, 255, 5);	out += sprintf(out, "q_diff_step_thresh:     %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.qDiffStepThresh,		       0, 255, 3);	out += sprintf(out, "decimation_thresh_mod:  %8d  %8d  %8d  %8d\n",	               cam->params.compressionParams.decimationThreshMod,		       0, 255, 2);		len = out - page;	len -= off;	if (len < count) {		*eof = 1;		if (len <= 0) return 0;	} else		len = count;	*start = page + off;	return len;}static int cpia_write_proc(struct file *file, const char *buffer,                           unsigned long count, void *data){	return -EINVAL;#if 0	struct cam_data *cam = data;	struct cam_params new_params;	int retval, find_colon;	int size = count;	unsigned long val;	u32 command_flags = 0;	u8 new_mains;		if (down_interruptible(&cam->param_lock))		return -ERESTARTSYS;		/*	 * Skip over leading whitespace	 */	while (count && isspace(*buffer)) {		--count;		++buffer;	}		memcpy(&new_params, &cam->params, sizeof(struct cam_params));	new_mains = cam->mainsFreq;	#define MATCH(x) \	({ \		int _len = strlen(x), _ret, _colon_found; \		_ret = (_len <= count && strncmp(buffer, x, _len) == 0); \		if (_ret) { \			buffer += _len; \			count -= _len; \			if (find_colon) { \				_colon_found = 0; \				while (count && (*buffer == ' ' || *buffer == '\t' || \				       (!_colon_found && *buffer == ':'))) { \					if (*buffer == ':')  \						_colon_found = 1; \					--count; \					++buffer; \				} \				if (!count || !_colon_found) \					retval = -EINVAL; \				find_colon = 0; \			} \		} \		_ret; \	})#define FIRMWARE_VERSION(x,y) (new_params.version.firmwareVersion == (x) && \                               new_params.version.firmwareRevision == (y))#define VALUE \	({ \		char *_p; \		unsigned long int _ret; \		_ret = simple_strtoul(buffer, &_p, 0); \		if (_p == buffer) \			retval = -EINVAL; \		else { \			count -= _p - buffer; \			buffer = _p; \		} \		_ret; \	})	retval = 0;	while (count && !retval) {		find_colon = 1;		if (MATCH("brightness")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 100)					new_params.colourParams.brightness = val;				else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURPARAMS;		} else if (MATCH("contrast")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 100) {					/* contrast is in steps of 8, so round*/					val = ((val + 3) / 8) * 8;					/* 1-02 firmware limits contrast to 80*/					if (FIRMWARE_VERSION(1,2) && val > 80)						val = 80;					new_params.colourParams.contrast = val;				} else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURPARAMS;		} else if (MATCH("saturation")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 100)					new_params.colourParams.saturation = val;				else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURPARAMS;		} else if (MATCH("sensor_fps")) {			if (!retval)				val = VALUE;			if (!retval) {				/* find values so that sensorFPS is minimized,				 * but >= val */				if (val > 30)					retval = -EINVAL;				else if (val > 25) {					new_params.sensorFps.divisor = 0;					new_params.sensorFps.baserate = 1;				} else if (val > 15) {					new_params.sensorFps.divisor = 0;					new_params.sensorFps.baserate = 0;				} else if (val > 12) {					new_params.sensorFps.divisor = 1;					new_params.sensorFps.baserate = 1;				} else if (val > 7) {					new_params.sensorFps.divisor = 1;					new_params.sensorFps.baserate = 0;				} else if (val > 6) {					new_params.sensorFps.divisor = 2;					new_params.sensorFps.baserate = 1;				} else if (val > 3) {					new_params.sensorFps.divisor = 2;					new_params.sensorFps.baserate = 0;				} else {					new_params.sensorFps.divisor = 3;					/* Either base rate would work here */					new_params.sensorFps.baserate = 1;				}				new_params.flickerControl.coarseJump = 					flicker_jumps[new_mains]					[new_params.sensorFps.baserate]					[new_params.sensorFps.divisor];				if (new_params.flickerControl.flickerMode)					command_flags |= COMMAND_SETFLICKERCTRL;			}			command_flags |= COMMAND_SETSENSORFPS;		} else if (MATCH("stream_start_line")) {			if (!retval)				val = VALUE;			if (!retval) {				int max_line = 288;				if (new_params.format.videoSize == VIDEOSIZE_QCIF)					max_line = 144;				if (val <= max_line)					new_params.streamStartLine = val/2;				else					retval = -EINVAL;			}		} else if (MATCH("ecp_timing")) {			if (!retval && MATCH("normal"))				new_params.ecpTiming = 0;			else if (!retval && MATCH("slow"))				new_params.ecpTiming = 1;			else				retval = -EINVAL;			command_flags |= COMMAND_SETECPTIMING;		} else if (MATCH("color_balance_mode")) {			if (!retval && MATCH("manual"))				new_params.colourBalance.balanceModeIsAuto = 0;			else if (!retval && MATCH("auto"))				new_params.colourBalance.balanceModeIsAuto = 1;			else				retval = -EINVAL;			command_flags |= COMMAND_SETCOLOURBALANCE;		} else if (MATCH("red_gain")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 212)					new_params.colourBalance.redGain = val;				else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURBALANCE;		} else if (MATCH("green_gain")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 212)					new_params.colourBalance.greenGain = val;				else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURBALANCE;		} else if (MATCH("blue_gain")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val <= 212)					new_params.colourBalance.blueGain = val;				else					retval = -EINVAL;			}			command_flags |= COMMAND_SETCOLOURBALANCE;		} else if (MATCH("max_gain")) {			if (!retval)				val = VALUE;			if (!retval) {				/* 1-02 firmware limits gain to 2 */				if (FIRMWARE_VERSION(1,2) && val > 2)					val = 2;				switch(val) {				case 1:					new_params.exposure.gainMode = 1;					break;				case 2:					new_params.exposure.gainMode = 2;					break;				case 4:					new_params.exposure.gainMode = 3;					break;				case 8:					new_params.exposure.gainMode = 4;					break;				default:					retval = -EINVAL;					break;				}			}			command_flags |= COMMAND_SETEXPOSURE;		} else if (MATCH("exposure_mode")) {			if (!retval && MATCH("auto"))				new_params.exposure.expMode = 2;			else if (!retval && MATCH("manual")) {				if (new_params.exposure.expMode == 2)					new_params.exposure.expMode = 3;				new_params.flickerControl.flickerMode = 0;				command_flags |= COMMAND_SETFLICKERCTRL;			} else				retval = -EINVAL;			command_flags |= COMMAND_SETEXPOSURE;		} else if (MATCH("centre_weight")) {			if (!retval && MATCH("on"))				new_params.exposure.centreWeight = 1;			else if (!retval && MATCH("off"))				new_params.exposure.centreWeight = 2;			else				retval = -EINVAL;			command_flags |= COMMAND_SETEXPOSURE;		} else if (MATCH("gain")) {			if (!retval)				val = VALUE;			if (!retval) {				switch(val) {				case 1:					new_params.exposure.gain = 0;					new_params.exposure.expMode = 1;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;					break;				case 2:					new_params.exposure.gain = 1;					new_params.exposure.expMode = 1;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;					break;				case 4:					new_params.exposure.gain = 2;					new_params.exposure.expMode = 1;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;					break;				case 8:					new_params.exposure.gain = 3;					new_params.exposure.expMode = 1;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;					break;				default:					retval = -EINVAL;					break;				}				command_flags |= COMMAND_SETEXPOSURE;				if (new_params.exposure.gain >				    new_params.exposure.gainMode-1)					retval = -EINVAL;			}		} else if (MATCH("fine_exp")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val < 256) {					/* 1-02 firmware limits fineExp to 127*/					if (FIRMWARE_VERSION(1,2) && val > 127)						val = 127;					new_params.exposure.fineExp = val;					new_params.exposure.expMode = 1;					command_flags |= COMMAND_SETEXPOSURE;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;				} else					retval = -EINVAL;			}		} else if (MATCH("coarse_exp")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val < 65536) {					/* 1-02 firmware limits					 * coarseExp to 255 */					if (FIRMWARE_VERSION(1,2) && val > 255)						val = 255;					new_params.exposure.coarseExpLo =						val & 0xff;					new_params.exposure.coarseExpHi =						val >> 8;					new_params.exposure.expMode = 1;					command_flags |= COMMAND_SETEXPOSURE;					new_params.flickerControl.flickerMode = 0;					command_flags |= COMMAND_SETFLICKERCTRL;				} else					retval = -EINVAL;			}		} else if (MATCH("red_comp")) {			if (!retval)				val = VALUE;			if (!retval) {				if (val >= 220 && val <= 255) {					new_params.exposure.redComp = val;

⌨️ 快捷键说明

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