void kbd_hit(char key) { set_active(); switch (key) { case 'd': dump_screen(0); break; case 'w': case 'W': save_image(); break; case 'q': case 'Q': case 'x': case 'X': /* exit the program */ end_display(); exit(0); case 'v': show_video_settings = !show_video_settings; refresh_screen = 1; break; case 'h': set_hue(get_hue() - 1); refresh_screen = 1; break; case 'H': set_hue(get_hue() + 1); refresh_screen = 1; break; case 's': set_saturation(get_saturation() - 1); refresh_screen = 1; break; case 'S': set_saturation(get_saturation() + 1); refresh_screen = 1; break; case 'b': set_brightness(get_brightness() - 1); refresh_screen = 1; break; case 'B': set_brightness(get_brightness() + 1); refresh_screen = 1; break; case 'c': set_contrast(get_contrast() - 1); refresh_screen = 1; break; case 'C': set_contrast(get_contrast() + 1); refresh_screen = 1; break; } }
void contrast_down(void) { int contrast = get_contrast(); if ( contrast > 0 ) { contrast--; lcd_cmd_and_data(0x4, 0x4, contrast); #if 0 printk("ctrst=0x%x\n", get_contrast()); #endif } }
void contrast_up(void) { int contrast = get_contrast(); if ( contrast < 0xff ) { contrast++; lcd_cmd_and_data(0x4, 0x4, contrast); #if 0 printk("ctrst=0x%x\n", get_contrast()); #endif } }
static int ipod_fb_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long arg, int con, struct fb_info *info) { int val; switch (cmd) { case FBIOGET_CONTRAST: val = get_contrast(); if (put_user(val, (int *)arg)) return -EFAULT; break; case FBIOPUT_CONTRAST: val = (int)arg; if (val < IPOD_MIN_CONTRAST || val > IPOD_MAX_CONTRAST) return -EINVAL; set_contrast(val); break; case FBIOGET_BACKLIGHT: val = get_backlight(); if (put_user(val, (int *)arg)) return -EFAULT; break; case FBIOPUT_BACKLIGHT: val = (int)arg; set_backlight(val); break; default: return -EINVAL; } return 0; }
/******************************************************************************************* Video capture routines - set input - setup_pixelformat - set_geometry - set_brightness - set_chroma - set_contrast - set_channelset - set_channel - set_capture_mode */ static unsigned char *v4l_start(struct video_dev *viddev, int width, int height, unsigned short input, unsigned short norm, unsigned long freq) { int dev_bktr = viddev->fd_bktr; struct sigaction act, old; //int dev_tunner = viddev->fd_tuner; /* to ensure that all device will be support the capture mode _TODO_ : Autodected the best capture mode . */ int dummy = 1; // int pixelformat = BSD_VIDFMT_I420; void *map; /* if we have choose the tuner is needed to setup the frequency */ if ((viddev->tuner_device != NULL) && (input == IN_TV)) { if (!freq) { motion_log(LOG_ERR, 0, "%s: Not valid Frequency [%lu] for Source input [%i]", __FUNCTION__, freq, input); return NULL; } else if (set_freq(viddev, freq) == -1) { motion_log(LOG_ERR, 0, "%s: Frequency [%lu] Source input [%i]", __FUNCTION__, freq, input); return NULL; } } /* FIXME if we set as input tuner , we need to set option for tuner not for bktr */ if ((dummy = set_input(viddev, input)) == -1) { motion_log(LOG_ERR, 0, "%s: set input [%d]", __FUNCTION__, input); return NULL; } viddev->input = dummy; if ((dummy = set_input_format(viddev, norm)) == -1) { motion_log(LOG_ERR, 0, "%s: set input format [%d]", __FUNCTION__, norm); return NULL; } viddev->norm = dummy; if (set_geometry(viddev, width, height) == -1) { motion_log(LOG_ERR, 0, "%s: set geometry [%d]x[%d]", __FUNCTION__, width, height); return NULL; } /* if (ioctl(dev_bktr, METEORSACTPIXFMT, &pixelformat) < 0) { motion_log(LOG_ERR, 1, "set encoding method BSD_VIDFMT_I420"); return NULL; } NEEDED !? FIXME if (setup_pixelformat(viddev) == -1) return NULL; */ if (freq) { if (debug_level >= CAMERA_DEBUG) motion_log(-1, 0, "%s: Frequency set (no implemented yet", __FUNCTION__); /* TODO missing implementation set_channelset(viddev); set_channel(viddev); if (set_freq (viddev, freq) == -1) { return NULL; } */ } /* set capture mode and capture buffers */ /* That is the buffer size for capture images , so is dependent of color space of input format / FIXME */ viddev->v4l_bufsize = (((width * height * 3 / 2)) * sizeof(unsigned char *)); viddev->v4l_fmt = VIDEO_PALETTE_YUV420P; map = mmap((caddr_t)0, viddev->v4l_bufsize, PROT_READ|PROT_WRITE, MAP_SHARED, dev_bktr, (off_t)0); if (map == MAP_FAILED){ motion_log(LOG_ERR, 1, "%s: mmap failed", __FUNCTION__); return NULL; } /* FIXME double buffer */ if (0) { viddev->v4l_maxbuffer = 2; viddev->v4l_buffers[0] = map; viddev->v4l_buffers[1] = (unsigned char *)map + 0; /* 0 is not valid just a test */ //viddev->v4l_buffers[1] = map+vid_buf.offsets[1]; } else { viddev->v4l_buffers[0] = map; viddev->v4l_maxbuffer = 1; } viddev->v4l_curbuffer = 0; /* Clear the buffer */ if (ioctl(dev_bktr, BT848SCBUF, &dummy) < 0) { motion_log(LOG_ERR, 1, "%s: BT848SCBUF", __FUNCTION__); return NULL; } /* signal handler to know when data is ready to be read() */ memset(&act, 0, sizeof(act)); sigemptyset(&act.sa_mask); act.sa_handler = catchsignal; sigaction(SIGUSR2, &act, &old); dummy = SIGUSR2; //viddev->capture_method = METEOR_CAP_CONTINOUS; //viddev->capture_method = METEOR_CAP_SINGLE; if ((viddev->capture_method == METEOR_CAP_CONTINOUS) && (ioctl(dev_bktr, METEORSSIGNAL, &dummy) < 0)) { motion_log(LOG_ERR, 1, "%s: METEORSSIGNAL", __FUNCTION__); motion_log(LOG_INFO, 0 , "%s: METEORSSIGNAL", __FUNCTION__); viddev->capture_method = METEOR_CAP_SINGLE; if (ioctl(dev_bktr, METEORCAPTUR, &viddev->capture_method) < 0) { motion_log(LOG_ERR, 1, "%s: METEORCAPTUR using single method " "Error capturing", __FUNCTION__); motion_log(LOG_INFO, 0, "%s: METEORCAPTUR using single method " "Error capturing", __FUNCTION__); } } else { if (ioctl(dev_bktr, METEORCAPTUR, &viddev->capture_method) < 0) { viddev->capture_method = METEOR_CAP_SINGLE; if (ioctl(dev_bktr, METEORCAPTUR, &viddev->capture_method) < 0) { motion_log(LOG_ERR, 1, "%s: METEORCAPTUR using single method " "Error capturing", __FUNCTION__); motion_log(LOG_INFO, 0, "%s: METEORCAPTUR using single method " "Error capturing", __FUNCTION__); } } } if (viddev->capture_method == METEOR_CAP_CONTINOUS) motion_log(LOG_INFO, 0, "%s: METEORCAPTUR METEOR_CAP_CONTINOUS", __FUNCTION__); else motion_log(LOG_INFO, 0, "%s: METEORCAPTUR METEOR_CAP_SINGLE", __FUNCTION__); // settle , sleep(1) replaced SLEEP(1, 0); /* FIXME*/ switch (viddev->v4l_fmt) { case VIDEO_PALETTE_YUV420P: viddev->v4l_bufsize = (width * height * 3) / 2; break; case VIDEO_PALETTE_YUV422: viddev->v4l_bufsize = (width * height * 2); break; case VIDEO_PALETTE_RGB24: viddev->v4l_bufsize = (width * height * 3); break; case VIDEO_PALETTE_GREY: viddev->v4l_bufsize = width * height; break; } motion_log(LOG_INFO, 0, "HUE [%d]", get_hue(dev_bktr, &dummy)); motion_log(LOG_INFO, 0, "SATURATION [%d]", get_saturation(dev_bktr, &dummy)); motion_log(LOG_INFO, 0, "BRIGHTNESS [%d]", get_brightness(dev_bktr, &dummy)); motion_log(LOG_INFO, 0, "CONTRAST [%d]", get_contrast(dev_bktr, &dummy)); return map; }