4.10. 软件定义无线电接口 (SDR)

SDR 是软件定义无线电的缩写,指使用应用程序软件进行调制或解调的无线电设备。此接口旨在控制此类设备并进行数据流传输。

SDR 设备通过名为 /dev/swradio0/dev/swradio255 的字符设备特殊文件进行访问,主设备号为 81,动态分配的次设备号为 0 到 255。

4.10.1. 查询功能

支持 SDR 接收器接口的设备会在 v4l2_capability 结构的 capabilities 字段中设置 V4L2_CAP_SDR_CAPTUREV4L2_CAP_TUNER 标志,该结构由 ioctl VIDIOC_QUERYCAP ioctl 返回。该标志表示设备具有模数转换器 (ADC),这是 SDR 接收器的强制性元件。

支持 SDR 发射器接口的设备会在 v4l2_capability 结构的 capabilities 字段中设置 V4L2_CAP_SDR_OUTPUTV4L2_CAP_MODULATOR 标志,该结构由 ioctl VIDIOC_QUERYCAP ioctl 返回。该标志表示设备具有数模转换器 (DAC),这是 SDR 发射器的强制性元件。

必须支持至少一种读取/写入或流式 I/O 方法。

4.10.2. 补充功能

SDR 设备可以支持 控制,并且必须支持 调谐器和调制器 ioctl。调谐器 ioctl 用于设置 ADC/DAC 采样率(采样频率)和可能的射频 (RF)。

V4L2_TUNER_SDR 调谐器类型用于设置 SDR 设备 ADC/DAC 频率,V4L2_TUNER_RF 调谐器类型用于设置射频。射频调谐器的调谐器索引(如果有)必须始终跟随 SDR 调谐器索引。通常,SDR 调谐器为 #0,射频调谐器为 #1。

不支持 ioctl VIDIOC_S_HW_FREQ_SEEK ioctl。

4.10.3. 数据格式协商

SDR 设备使用 数据格式 ioctl 来选择捕获和输出格式。采样分辨率和数据流格式都绑定到该可选格式。除了基本的 数据格式 ioctl 外,还必须支持 ioctl VIDIOC_ENUM_FMT ioctl。

为了使用 数据格式 ioctl,应用程序会将 v4l2_format 结构的 type 字段设置为 V4L2_BUF_TYPE_SDR_CAPTUREV4L2_BUF_TYPE_SDR_OUTPUT,并根据所需的操作使用 fmt 联合的 v4l2_sdr_format sdr 成员。目前使用了 v4l2_sdr_format 结构的两个字段,pixelformatbuffersizepixelformat 的内容是数据格式的 V4L2 FourCC 代码。buffersize 字段是数据传输所需的最大缓冲区大小(以字节为单位),由驱动程序设置以通知应用程序。

type v4l2_sdr_format
struct v4l2_sdr_format

__u32

pixelformat

由应用程序设置的数据格式或压缩类型。这是一个小端 四字符代码。V4L2 在 SDR 格式中定义了 SDR 格式。

__u32

buffersize

数据所需的最大大小(以字节为单位)。该值由驱动程序设置。

__u8

reserved[24]

此数组保留用于将来的扩展。驱动程序和应用程序必须将其设置为零。

SDR 设备可以支持 读取/写入 和/或流式 (内存映射用户指针) I/O。