7.32. ioctl VIDIOC_G_FREQUENCY, VIDIOC_S_FREQUENCY

7.32.1. 名称

VIDIOC_G_FREQUENCY - VIDIOC_S_FREQUENCY - 获取或设置调谐器或调制器的无线电频率

7.32.2. 概要

VIDIOC_G_FREQUENCY

int ioctl(int fd, VIDIOC_G_FREQUENCY, struct v4l2_frequency *argp)

VIDIOC_S_FREQUENCY

int ioctl(int fd, VIDIOC_S_FREQUENCY, const struct v4l2_frequency *argp)

7.32.3. 参数

fd

open() 返回的文件描述符。

argp

指向结构体 v4l2_frequency 的指针。

7.32.4. 描述

要获取当前调谐器或调制器的无线电频率,应用程序将结构体 v4l2_frequencytuner 字段设置为相应的调谐器或调制器编号(只有输入设备有调谐器,只有输出设备有调制器),将 reserved 数组清零,并使用指向此结构的指针调用 VIDIOC_G_FREQUENCY ioctl。驱动程序将当前频率存储在 frequency 字段中。

要更改当前调谐器或调制器的无线电频率,应用程序初始化结构体 v4l2_frequencytunertypefrequency 字段以及 reserved 数组,并使用指向此结构的指针调用 VIDIOC_S_FREQUENCY ioctl。当请求的频率不可用时,驱动程序会采用最接近的值。然而 VIDIOC_S_FREQUENCY 是一个只写 ioctl,它不会返回实际的新频率。

type v4l2_frequency
struct v4l2_frequency

__u32

tuner

调谐器或调制器索引号。这与结构体 v4l2_inputtuner 字段和结构体 v4l2_tunerindex 字段相同,或与结构体 v4l2_outputmodulator 字段和结构体 v4l2_modulatorindex 字段相同。

__u32

type

调谐器类型。这与结构体 v4l2_tunertype 字段相同。对于 /dev/radioX 设备节点,该类型必须设置为 V4L2_TUNER_RADIO,对于所有其他设备,该类型必须设置为 V4L2_TUNER_ANALOG_TV。对于调制器,将此字段设置为 V4L2_TUNER_RADIO(目前只支持无线电调制器)。请参阅 v4l2_tuner_type

__u32

frequency

调谐频率,单位为 62.5 kHz,或者如果结构体 v4l2_tuner 或结构体 v4l2_modulatorcapability 标志 V4L2_TUNER_CAP_LOW 被设置,则单位为 62.5 Hz。当 capability 标志 V4L2_TUNER_CAP_1HZ 被设置时,使用 1 Hz 单位。

__u32

reserved[8]

保留以供未来扩展。驱动程序和应用程序必须将数组设置为零。

7.32.5. 返回值

成功时返回 0,失败时返回 -1,并适当设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。

EINVAL

tuner 索引超出范围或 type 字段中的值错误。

EBUSY

正在进行硬件搜索。