?? cpia.c
字號:
command_flags |= COMMAND_SETEXPOSURE; } else retval = -EINVAL; } } else if (MATCH("green1_comp")) { if (!retval) val = VALUE; if (!retval) { if (val >= 214 && val <= 255) { new_params.exposure.green1Comp = val; command_flags |= COMMAND_SETEXPOSURE; } else retval = -EINVAL; } } else if (MATCH("green2_comp")) { if (!retval) val = VALUE; if (!retval) { if (val >= 214 && val <= 255) { new_params.exposure.green2Comp = val; command_flags |= COMMAND_SETEXPOSURE; } else retval = -EINVAL; } } else if (MATCH("blue_comp")) { if (!retval) val = VALUE; if (!retval) { if (val >= 230 && val <= 255) { new_params.exposure.blueComp = val; command_flags |= COMMAND_SETEXPOSURE; } else retval = -EINVAL; } } else if (MATCH("apcor_gain1")) { if (!retval) val = VALUE; if (!retval) { command_flags |= COMMAND_SETAPCOR; if (val <= 0xff) new_params.apcor.gain1 = val; else retval = -EINVAL; } } else if (MATCH("apcor_gain2")) { if (!retval) val = VALUE; if (!retval) { command_flags |= COMMAND_SETAPCOR; if (val <= 0xff) new_params.apcor.gain2 = val; else retval = -EINVAL; } } else if (MATCH("apcor_gain4")) { if (!retval) val = VALUE; if (!retval) { command_flags |= COMMAND_SETAPCOR; if (val <= 0xff) new_params.apcor.gain4 = val; else retval = -EINVAL; } } else if (MATCH("apcor_gain8")) { if (!retval) val = VALUE; if (!retval) { command_flags |= COMMAND_SETAPCOR; if (val <= 0xff) new_params.apcor.gain8 = val; else retval = -EINVAL; } } else if (MATCH("vl_offset_gain1")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.vlOffset.gain1 = val; else retval = -EINVAL; } command_flags |= COMMAND_SETVLOFFSET; } else if (MATCH("vl_offset_gain2")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.vlOffset.gain2 = val; else retval = -EINVAL; } command_flags |= COMMAND_SETVLOFFSET; } else if (MATCH("vl_offset_gain4")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.vlOffset.gain4 = val; else retval = -EINVAL; } command_flags |= COMMAND_SETVLOFFSET; } else if (MATCH("vl_offset_gain8")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.vlOffset.gain8 = val; else retval = -EINVAL; } command_flags |= COMMAND_SETVLOFFSET; } else if (MATCH("flicker_control")) { if (!retval && MATCH("on")) { new_params.flickerControl.flickerMode = 1; new_params.exposure.expMode = 2; command_flags |= COMMAND_SETEXPOSURE; } else if (!retval && MATCH("off")) new_params.flickerControl.flickerMode = 0; else retval = -EINVAL; command_flags |= COMMAND_SETFLICKERCTRL; } else if (MATCH("mains_frequency")) { if (!retval && MATCH("50")) { new_mains = 0; 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; } else if (!retval && MATCH("60")) { new_mains = 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; } else retval = -EINVAL; } else if (MATCH("allowable_overexposure")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) { new_params.flickerControl. allowableOverExposure = val; command_flags |= COMMAND_SETFLICKERCTRL; } else retval = -EINVAL; } } else if (MATCH("compression_mode")) { if (!retval && MATCH("none")) new_params.compression.mode = CPIA_COMPRESSION_NONE; else if (!retval && MATCH("auto")) new_params.compression.mode = CPIA_COMPRESSION_AUTO; else if (!retval && MATCH("manual")) new_params.compression.mode = CPIA_COMPRESSION_MANUAL; else retval = -EINVAL; command_flags |= COMMAND_SETCOMPRESSION; } else if (MATCH("decimation_enable")) { if (!retval && MATCH("off")) new_params.compression.decimation = 0; else retval = -EINVAL; command_flags |= COMMAND_SETCOMPRESSION; } else if (MATCH("compression_target")) { if (!retval && MATCH("quality")) new_params.compressionTarget.frTargeting = CPIA_COMPRESSION_TARGET_QUALITY; else if (!retval && MATCH("framerate")) new_params.compressionTarget.frTargeting = CPIA_COMPRESSION_TARGET_FRAMERATE; else retval = -EINVAL; command_flags |= COMMAND_SETCOMPRESSIONTARGET; } else if (MATCH("target_framerate")) { if (!retval) val = VALUE; if (!retval) new_params.compressionTarget.targetFR = val; command_flags |= COMMAND_SETCOMPRESSIONTARGET; } else if (MATCH("target_quality")) { if (!retval) val = VALUE; if (!retval) new_params.compressionTarget.targetQ = val; command_flags |= COMMAND_SETCOMPRESSIONTARGET; } else if (MATCH("y_threshold")) { if (!retval) val = VALUE; if (!retval) { if (val < 32) new_params.yuvThreshold.yThreshold = val; else retval = -EINVAL; } command_flags |= COMMAND_SETYUVTHRESH; } else if (MATCH("uv_threshold")) { if (!retval) val = VALUE; if (!retval) { if (val < 32) new_params.yuvThreshold.uvThreshold = val; else retval = -EINVAL; } command_flags |= COMMAND_SETYUVTHRESH; } else if (MATCH("hysteresis")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.hysteresis = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("threshold_max")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.threshMax = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("small_step")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.smallStep = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("large_step")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.largeStep = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("decimation_hysteresis")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.decimationHysteresis = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("fr_diff_step_thresh")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.frDiffStepThresh = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("q_diff_step_thresh")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.qDiffStepThresh = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else if (MATCH("decimation_thresh_mod")) { if (!retval) val = VALUE; if (!retval) { if (val <= 0xff) new_params.compressionParams.decimationThreshMod = val; else retval = -EINVAL; } command_flags |= COMMAND_SETCOMPRESSIONPARAMS; } else { DBG("No match found\n"); retval = -EINVAL; } if (!retval) { while (count && isspace(*buffer) && *buffer != '\n') { --count; ++buffer; } if (count) { if (*buffer != '\n' && *buffer != ';') retval = -EINVAL; else { --count; ++buffer; } } } }#undef MATCH #undef FIRMWARE_VERSION#undef VALUE#undef FIND_VALUE#undef FIND_END if (!retval) { if (command_flags & COMMAND_SETCOLOURPARAMS) { /* Adjust cam->vp to reflect these changes */ cam->vp.brightness = new_params.colourParams.brightness*65535/100; cam->vp.contrast = new_params.colourParams.contrast*65535/100; cam->vp.colour = new_params.colourParams.saturation*65535/100; } memcpy(&cam->params, &new_params, sizeof(struct cam_params)); cam->mainsFreq = new_mains; cam->cmd_queue |= command_flags; retval = size; } else DBG("error: %d\n", retval); up(&cam->param_lock); return retval;#endif}static void create_proc_cpia_cam(struct cam_data *cam){ char name[7]; struct proc_dir_entry *ent; if (!cpia_proc_root || !cam) return; sprintf(name, "video%d", cam->vdev.minor); ent = create_proc_entry(name, S_IFREG|S_IRUGO|S_IWUSR, cpia_proc_root); if (!ent) return; ent->data = cam; ent->read_proc = cpia_read_proc; ent->write_proc = cpia_write_proc; ent->size = 3626; cam->proc_entry = ent;}static void destroy_proc_cpia_cam(struct cam_data *cam){ char name[7]; if (!cam || !cam->proc_entry) return; sprintf(name, "video%d", cam->vdev.minor); remove_proc_entry(name, cpia_proc_root); cam->proc_entry = NULL;}static void proc_cpia_create(void){ cpia_proc_root = create_proc_entry("cpia", S_IFDIR, 0); if (cpia_proc_root) cpia_proc_root->owner = THIS_MODULE; else LOG("Unable to initialise /proc/cpia\n");}static void proc_cpia_destroy(void){ remove_proc_entry("cpia", 0);}#endif /* CONFIG_PROC_FS *//* ----------------------- debug functions ---------------------- */#define printstatus(cam) \ DBG("%02x %02x %02x %02x %02x %02x %02x %02x\n",\ cam->params.status.systemState, cam->params.status.grabState, \ cam->params.status.streamState, cam->params.status.fatalError, \ cam->params.status.cmdError, cam->params.status.debugFlags, \ cam->params.status.vpStatus, cam->params.status.errorCode);/* ----------------------- v4l helpers -------------------------- *//* supported frame palettes and depths */static inline int valid_mode(u16 palette, u16 depth){ return (palette == VIDEO_PALETTE_GREY && depth == 8) || (palette == VIDEO_PALETTE_RGB555 && depth == 16) || (palette == VIDEO_PALETTE_RGB565 && depth == 16) || (palette == VIDEO_PALETTE_RGB24 && depth == 24) || (palette == VIDEO_PALETTE_RGB32 && depth == 32) || (palette == VIDEO_PALETTE_YUV422 && depth == 16) || (palette == VIDEO_PALETTE_YUYV && depth == 16) || (palette == VIDEO_PALETTE_UYVY && depth == 16);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -