コード例 #1
0
int get_signal_strength(int fd, struct v4l2_tuner *vt){
    int totsig, rate, i;
    float perc;

    totsig=0;

    for (i = 0; i < TRIES; i++) {

        if (i>0)
            usleep(SAMPLEDELAY);

        if (get_v4l2_tuner(fd, vt) < 0) {
        return -1;
        }

        totsig += vt->signal;
        perc = (totsig / (65535.0 * i));
        //ALOGI("checking: %3.1f%% (%d/%d), vt.signal %d  \n", perc * 100.0, i, TRIES,  vt->signal);
        }

    perc = (totsig / (65535.0 * TRIES));
    rate = perc * 1000.0;   // changed in 0 - 1000 scale

    ALOGI("signal strenght in SE scale %d \n", rate);

    return rate;
}
コード例 #2
0
float get_fact(int fd, struct v4l2_tuner *vt){

    if (get_v4l2_tuner(fd, vt)<0)
        return -1;

    if ((vt->capability & V4L2_TUNER_CAP_LOW) == 0)
        return 0.016;
    else
        return 16.;

    return -1;
}
コード例 #3
0
ファイル: compat_ioctl32.c プロジェクト: 274914765/C
static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
    union {
#ifdef CONFIG_VIDEO_V4L1_COMPAT
        struct video_tuner vt;
        struct video_buffer vb;
        struct video_window vw;
        struct video_code vc;
        struct video_audio va;
#endif
        struct v4l2_format v2f;
        struct v4l2_buffer v2b;
        struct v4l2_framebuffer v2fb;
        struct v4l2_standard v2s;
        struct v4l2_input v2i;
        struct v4l2_tuner v2t;
        unsigned long vx;
    } karg;
    void __user *up = compat_ptr(arg);
    int compatible_arg = 1;
    int err = 0;
    int realcmd = cmd;

    /* First, convert the command. */
    switch(cmd) {
#ifdef CONFIG_VIDEO_V4L1_COMPAT
    case VIDIOCGTUNER32: realcmd = cmd = VIDIOCGTUNER; break;
    case VIDIOCSTUNER32: realcmd = cmd = VIDIOCSTUNER; break;
    case VIDIOCGWIN32: realcmd = cmd = VIDIOCGWIN; break;
    case VIDIOCGFBUF32: realcmd = cmd = VIDIOCGFBUF; break;
    case VIDIOCSFBUF32: realcmd = cmd = VIDIOCSFBUF; break;
    case VIDIOCGFREQ32: realcmd = cmd = VIDIOCGFREQ; break;
    case VIDIOCSFREQ32: realcmd = cmd = VIDIOCSFREQ; break;
    case VIDIOCSMICROCODE32: realcmd = cmd = VIDIOCSMICROCODE; break;
#endif
    case VIDIOC_G_FMT32: realcmd = cmd = VIDIOC_G_FMT; break;
    case VIDIOC_S_FMT32: realcmd = cmd = VIDIOC_S_FMT; break;
    case VIDIOC_QUERYBUF32: realcmd = cmd = VIDIOC_QUERYBUF; break;
    case VIDIOC_QBUF32: realcmd = cmd = VIDIOC_QBUF; break;
    case VIDIOC_DQBUF32: realcmd = cmd = VIDIOC_DQBUF; break;
    case VIDIOC_STREAMON32: realcmd = cmd = VIDIOC_STREAMON; break;
    case VIDIOC_STREAMOFF32: realcmd = cmd = VIDIOC_STREAMOFF; break;
    case VIDIOC_G_FBUF32: realcmd = cmd = VIDIOC_G_FBUF; break;
    case VIDIOC_S_FBUF32: realcmd = cmd = VIDIOC_S_FBUF; break;
    case VIDIOC_OVERLAY32: realcmd = cmd = VIDIOC_OVERLAY; break;
    case VIDIOC_ENUMSTD32: realcmd = VIDIOC_ENUMSTD; break;
    case VIDIOC_ENUMINPUT32: realcmd = VIDIOC_ENUMINPUT; break;
    case VIDIOC_S_CTRL32: realcmd = cmd = VIDIOC_S_CTRL; break;
    case VIDIOC_G_INPUT32: realcmd = cmd = VIDIOC_G_INPUT; break;
    case VIDIOC_S_INPUT32: realcmd = cmd = VIDIOC_S_INPUT; break;
    case VIDIOC_TRY_FMT32: realcmd = cmd = VIDIOC_TRY_FMT; break;
    };

    switch(cmd) {
#ifdef CONFIG_VIDEO_V4L1_COMPAT
    case VIDIOCSTUNER:
    case VIDIOCGTUNER:
        err = get_video_tuner32(&karg.vt, up);
        compatible_arg = 0;

        break;

    case VIDIOCSFBUF:
        err = get_video_buffer32(&karg.vb, up);
        compatible_arg = 0;
        break;


    case VIDIOCSFREQ:
#endif
    case VIDIOC_S_INPUT:
    case VIDIOC_OVERLAY:
    case VIDIOC_STREAMON:
    case VIDIOC_STREAMOFF:
        err = get_user(karg.vx, (u32 __user *)up);
        compatible_arg = 1;
        break;

    case VIDIOC_S_FBUF:
        err = get_v4l2_framebuffer32(&karg.v2fb, up);
        compatible_arg = 0;
        break;

    case VIDIOC_G_FMT:
    case VIDIOC_S_FMT:
    case VIDIOC_TRY_FMT:
        err = get_v4l2_format32(&karg.v2f, up);
        compatible_arg = 0;
        break;

    case VIDIOC_QUERYBUF:
    case VIDIOC_QBUF:
    case VIDIOC_DQBUF:
        err = get_v4l2_buffer32(&karg.v2b, up);
        compatible_arg = 0;
        break;

    case VIDIOC_ENUMSTD:
        err = get_v4l2_standard(&karg.v2s, up);
        compatible_arg = 0;
        break;

    case VIDIOC_ENUMSTD32:
        err = get_v4l2_standard32(&karg.v2s, up);
        compatible_arg = 0;
        break;

    case VIDIOC_ENUMINPUT:
        err = get_v4l2_input(&karg.v2i, up);
        compatible_arg = 0;
        break;

    case VIDIOC_ENUMINPUT32:
        err = get_v4l2_input32(&karg.v2i, up);
        compatible_arg = 0;
        break;

    case VIDIOC_G_TUNER:
    case VIDIOC_S_TUNER:
        err = get_v4l2_tuner(&karg.v2t, up);
        compatible_arg = 0;
        break;

#ifdef CONFIG_VIDEO_V4L1_COMPAT
    case VIDIOCGWIN:
    case VIDIOCGFBUF:
    case VIDIOCGFREQ:
#endif
    case VIDIOC_G_FBUF:
    case VIDIOC_G_INPUT:
        compatible_arg = 0;
        break;
#ifdef CONFIG_VIDEO_V4L1_COMPAT
    case VIDIOCSMICROCODE:
        err = microcode32(&karg.vc, up);
        compatible_arg = 0;
        break;
#endif
    };
    if(err)
        goto out;

    if(compatible_arg)
        err = native_ioctl(file, realcmd, (unsigned long)up);
    else {
        mm_segment_t old_fs = get_fs();

        set_fs(KERNEL_DS);
        err = native_ioctl(file, realcmd, (unsigned long) &karg);
        set_fs(old_fs);
    }
    if(err == 0) {
        switch(cmd) {
#ifdef CONFIG_VIDEO_V4L1_COMPAT
        case VIDIOCGTUNER:
            err = put_video_tuner32(&karg.vt, up);
            break;

        case VIDIOCGWIN:
            err = put_video_window32(&karg.vw, up);
            break;

        case VIDIOCGFBUF:
            err = put_video_buffer32(&karg.vb, up);
            break;

#endif
        case VIDIOC_G_FBUF:
            err = put_v4l2_framebuffer32(&karg.v2fb, up);
            break;

        case VIDIOC_G_FMT:
        case VIDIOC_S_FMT:
        case VIDIOC_TRY_FMT:
            err = put_v4l2_format32(&karg.v2f, up);
            break;

        case VIDIOC_QUERYBUF:
        case VIDIOC_QBUF:
        case VIDIOC_DQBUF:
            err = put_v4l2_buffer32(&karg.v2b, up);
            break;

        case VIDIOC_ENUMSTD:
            err = put_v4l2_standard(&karg.v2s, up);
            break;

        case VIDIOC_ENUMSTD32:
            err = put_v4l2_standard32(&karg.v2s, up);
            break;

        case VIDIOC_G_TUNER:
        case VIDIOC_S_TUNER:
            err = put_v4l2_tuner(&karg.v2t, up);
            break;

        case VIDIOC_ENUMINPUT:
            err = put_v4l2_input(&karg.v2i, up);
            break;

        case VIDIOC_ENUMINPUT32:
            err = put_v4l2_input32(&karg.v2i, up);
            break;

#ifdef CONFIG_VIDEO_V4L1_COMPAT
        case VIDIOCGFREQ:
#endif
        case VIDIOC_G_INPUT:
            err = put_user(((u32)karg.vx), (u32 __user *)up);
            break;
        };
    }
out:
    return err;
}
コード例 #4
0
ファイル: v4l2_fm.c プロジェクト: EnJens/device-sony-common
static int v4l2_rx_start_func (void **data, int low_freq, int high_freq, int default_freq, int grid)
{
  char	*dev = DEFAULT_DEVICE;
  fm_v4l2_data* session;

  ALOGI("%s:\n", __FUNCTION__);
  ALOGI("low_freq %d, high_freq %d, default_freq %d, grid %d\n", low_freq, high_freq, default_freq, grid);

  session = malloc(sizeof(fm_v4l2_data));
  if (session== NULL){
      ALOGE("error on malloc");
      return -1;
  }

  memset(session, 0, sizeof(fm_v4l2_data));
  *data =  session;

  session->fd = open_dev(dev);
  if (session->fd < 0){
      ALOGE("error on open dev\n");
      return -1;
  }

  if (get_tun_radio_cap(session->fd) !=1) {
      ALOGE("error on check tunner radio capability");
      return -1;
  }

  session->vt.index=0;
  if ( get_v4l2_tuner(session->fd,  &session->vt) <0 ){
      ALOGE("error on get V4L tuner\n");
      return -1;
  }

  session->fact = get_fact(session->fd, &session->vt);
  if ( session->fact < 0) {
      ALOGE("error on get fact\n");
      return -1;
  }

  session->freq = get_proprietary_freq(default_freq, session->fact);
  session->low_freq =  get_proprietary_freq(low_freq,  session->fact);
  session->high_freq =  get_proprietary_freq(high_freq,  session->fact);
  session->grid = get_proprietary_freq(grid,  session->fact);
  session->threshold = DEFAULT_THRESHOLD;
  
  if (set_freq(session->fd, session->freq) < 0 ){
      ALOGE("error on set freq\n");
      return -1;
  }

  if (set_volume(session->fd, DEFAULT_VOLUME)<0){
      ALOGE("error on set volume\n");
      return -1;
  }

  if (set_mute(session->fd, MUTE_OFF) <0){
      ALOGE("error on mute\n");
      return -1;
  }

  return 0;
}
コード例 #5
0
int get_stereo(int fd, struct v4l2_tuner *vt){
    if (get_v4l2_tuner(fd, vt)<0)
        return -1;

    return ((vt->audmode & V4L2_TUNER_MODE_STEREO) ==1);
}