?? cpia.c
字號:
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 + -