有没有Linux的无线电标准?

16
我们即将开始实施一个运行Linux的设备,它将连接到一个软件定义的FM/AM收音机,该收音机还可以接收描述播放列表和其他相关信息的RDS数据。这是一个相对简单的设备,主要包含一两个作为调谐器的DSP,并且对信号的处理非常有限。
我在考虑为该设备编写内核驱动程序,然后再编写一个用户空间的硬件抽象层,提供一个标准化的接口,并将RDS数据的接收时间以及错误处理等繁琐的细节进行抽象。是否已经存在这样的用户空间层?如果我们能够避免编写它,或者使我们的设备与已有的某个东西兼容,这样我们就可以在需要时使用其他项目来进行收音机界面的开发,那将是很好的。

1
http://sdr.osmocom.org/trac/wiki/rtl-sdr - Ignacio Vazquez-Abrams
@IgnacioVazquez-Abrams - 谢谢,那似乎是另一个SDR项目,但它们似乎没有像我正在寻找的用户空间层。嗯...也许还不存在这样的东西? - Omnifarious
我将在接近太平洋标准时间17:30(又称UTC-0800)的某个时候颁发赏金。 - Omnifarious
1
@Omnifarious: 添加了最后一个链接:使用SDR接收RDS。希望这能有所帮助! - TrinitronX
3个回答

12

Linux中的无线电支持

听起来你正在创建一个新的硬件无线电设备?你可能需要为这个设备构建一个驱动程序。一些帮助可以在这里, 这里这里找到。如果你的设备不是新的,它可能已经有了一个Video4Linux2项目中的驱动程序

看起来目前基于saa6588内核模块有一些与RDS相关的项目。

根据这个页面,这些卡当前具有SAA6588芯片组:

  • Terratec Cinergy 600
  • KNC ONE TV-Station RDS
  • KNC One TV-Station DVR
  • TYPHOON TV TUNER CARD RDS
  • Sundtek MediaTV Pro (由制造商支持)
  • Sundtek USB FM Radio (FM发射器/接收器,由制造商支持)

RDS特定信息

我建议查看一些与Video4Linux2(v4l2)相关的项目,有一个RDS解码库。该库在用户空间运行,因此可以为您完成RDS解码工作:

根据V4L2规范,从无线电设备读取来自RDS解码器的原始数据。 数据由块组成,每个块长3个字节。 所有解码都必须在用户空间中完成。

RDS API

这里是一个完整的Video4Linux2 API参考。这里是一系列文章,让您熟悉它

特别介绍RDS API在这里。此页面提供了有关如何获取有关RDS数据是否可用的更新的信息:

可以通过查看struct v4l2_tuner的rxsubchans字段来检测是否存在RDS信号:如果检测到RDS数据,则将设置V4L2_TUNER_SUB_RDS。

Gnu Radio Companion中的SDR RDS解码器DSP

虽然它不是官方API,但我找到了一个最近的小项目,可能值得一看:

这里还有一些值得关注的与无线电相关的项目


看起来V4L2在用户空间中指定了RDS数据的标准接口?当然,RDS存在部分接收、两种不同的标准和各种其他问题。如果使用无线电的程序根本不必处理这些问题,只需在可用时获取有关RDS数据的更新,那将非常好。V4L2是否指定了用户空间接口,以便客户端可以假装RDS很简单易懂? - Omnifarious
是的,看起来我们将要编写自己的驱动程序。我们使用的硬件是基于USB的,目前似乎根本没有得到支持。如果我确定可以公开透露我们项目的具体信息,我会更加开放地谈论它的。 :-) - Omnifarious
@Omnifarious:我猜你可能在进行专有项目的开发;-) 可悲的是,很多硬件仍然受到专有版权保护,我觉得这可能有点怪异,导致Linux对此类硬件的支持有时不太充分。 回答你的问题,我已经添加了另一个链接,指向RDS API - TrinitronX
好的,我将尝试让他们使用GPL。这样做有一些非常好的理由。部分原因是因为我们的核心业务并不是无线电。 - Omnifarious
听到这个消息很不错!如果该项目成为公共领域,这也有助于降低未来的维护成本,并为全球社区增加价值。双赢的局面 ^_^ - TrinitronX

2
或许值得去了解一下GENIVI联盟(http://www.genivi.org/),是否已经有适用于此的标准应用程序。他们正在专门为汽车“信息娱乐”目的制定此类标准,这似乎就属于他们标准化范围之内。
不幸的是,他们似乎不公开发布他们的东西,因此您可能需要打听一下或直接给他们发电子邮件。

这很有趣,值得深入研究。谢谢。 - Omnifarious

1

那么GNU Radio呢?他们支持大量软件定义无线电组件的硬件,并且可以通过GUI轻松地连接数据流,使用他们的“GNU Radio Companion”(GRC)。

他们使用Python和C ++ API,可以在您的UI层中访问。可以在网上找到许多示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接