Существует ли стандарт радиосвязи для Linux?

Мы собираемся приступить к реализации устройства под управлением Linux, которое (среди прочего) будет подключено к программно определяемому FM/AM-радио, которое также может получать данные RDS, описывающие списки воспроизведения и другие подобные вещи. Это относительно глупое устройство, которое в основном содержит один или два DSP, которые действуют как тюнеры и в остальном очень мало обрабатывают сигнал.

Я имел в виду драйверы ядра для устройства, а затем уровень аппаратной абстракции пользовательского пространства, который предоставлял стандартизированный интерфейс и абстрагировался от деталей того, когда именно были получены данные RDS, занимался обработкой ошибок и всеми другими запутанными вещами. Есть ли уже подобный пользовательский слой? Было бы неплохо либо вообще не делать этого, либо сделать наш материал совместимым с чем-то, что уже существует, чтобы мы могли использовать другие проекты для пользовательского интерфейса радио, если захотим.


person Omnifarious    schedule 16.02.2013    source источник
comment
sdr.osmocom.org/trac/wiki/rtl-sdr   -  person Ignacio Vazquez-Abrams    schedule 16.02.2013
comment
@IgnacioVazquez-Abrams - Спасибо, похоже, это еще один проект SDR, но, похоже, у них нет пользовательского слоя, подобного тому, что я ищу. Хммм... может его еще нет?   -  person Omnifarious    schedule 21.02.2013
comment
Я назначу награду за это где-то около 17:30 по тихоокеанскому времени (он же UTC-0800).   -  person Omnifarious    schedule 26.02.2013
comment
@Omnifarious: добавлена ​​последняя ссылка: прием RDS с использованием SDR. Надеюсь это поможет!   -  person TrinitronX    schedule 27.02.2013


Ответы (3)


Поддержка радио в Linux

Похоже, вы создаете новое аппаратное радиоустройство? Вероятно, вам потребуется создать драйвер для этого устройства. Некоторую помощь по началу работы можно найти здесь, здесь и здесь. Если ваше устройство не новое, возможно, оно уже имеет драйвер в проекте Video4Linux2.

Похоже, что в настоящее время существует несколько проектов, связанных с RDS, основанных на модуле ядра saa6588.

Согласно этой страницы, эти карты в настоящее время имеют Чипсет SAA6588:

  • Терратек Синергия 600
  • Телевизионная станция KNC ONE RDS
  • KNC Одна телевизионная станция DVR
  • ТАЙФУН ТВ ТЮНЕР КАРТА RDS
  • Sundtek MediaTV Pro (поддерживается производителем)
  • USB FM-радио Sundtek (FM-передатчик/приемник, поддерживается производителем)

Специфическая информация RDS

Я бы порекомендовал проверить некоторые из проектов, связанных с Video4Linux2 (v4l2), есть декодирование RDS библиотека. Эта библиотека работает в пользовательском пространстве, поэтому работа по декодированию RDS может быть выполнена за вас:

Согласно спецификациям V4L2 необработанные данные декодеров RDS считываются с радиоустройства. Данные состоят из блоков, каждый из которых имеет длину 3 байта. Все декодирование должно выполняться в пользовательском пространстве.

API RDS

Вот полный справочник по API для Video4Linux2. Вот серия статей для ознакомления.

Конкретный раздел для API RDS находится здесь. На этой странице представлена ​​информация о том, как получить информацию о доступности данных RDS:

Наличие сигнала RDS можно определить, посмотрев на поле rxsubchans структуры v4l2_tuner: V4L2_TUNER_SUB_RDS будет установлен, если будут обнаружены данные RDS.

Декодер SDR RDS DSP в Gnu Radio Companion

Хотя это не официальный API, я нашел последний небольшой проект, который, возможно, стоит изучить:

Вот еще несколько проектов, связанных с радио, на которые стоит обратить внимание.

person TrinitronX    schedule 21.02.2013
comment
Итак, похоже, что V4L2 определяет стандартный интерфейс для данных RDS в пространстве пользователя? Одной из проблем с RDS конечно является частичный прием двух разных стандартов и всякие другие головные боли. Было бы очень хорошо, если бы программы, использующие радио, вообще не должны были этим заниматься, а просто получали обновления о данных RDS по мере их появления. Определяет ли V4L2 стандартный пользовательский интерфейс, чтобы клиенты могли делать вид, что RDS прост и удобен? - person Omnifarious; 21.02.2013
comment
И да, похоже, мы будем писать свой собственный драйвер. Аппаратное обеспечение, которое мы используем, основано на USB и, похоже, в настоящее время вообще не поддерживается. Я был бы более откровенен, если бы точно знал, сколько я могу публично рассказать о нашем проекте. :-) - person Omnifarious; 21.02.2013
comment
@Omnifarious: Я подумал, что вы, возможно, работаете над проприетарным проектом ;-) К ​​сожалению, многие аппаратные средства все еще защищены проприетарной защитой авторских прав, что, как мне кажется, может быть немного виновато в иногда мизерной поддержке такого оборудования в Linux. Чтобы ответить на ваш вопрос, я добавил еще одну ссылку, указывающую на API RDS - person TrinitronX; 21.02.2013
comment
Что ж, я попытаюсь заставить их перейти на GPL. Для этого есть несколько действительно веских причин. Отчасти потому, что наша основная деятельность на самом деле не связана с радио. - person Omnifarious; 21.02.2013
comment
Приятно слышать! Это также может помочь снизить затраты на обслуживание в будущем, если проект станет общественным достоянием, а также повысить ценность для мирового сообщества. Беспроигрышный сценарий ^_^ - person TrinitronX; 22.02.2013

Возможно, стоит выяснить, есть ли у консорциума GENIVI (http://www.genivi.org/) стандартное приложение для этого пока. Они разрабатывают стандарты такого рода специально для автомобильных «информационно-развлекательных» целей, и похоже, что это входит в их область стандартизации.

К сожалению, они, похоже, не публикуют свои материалы публично, поэтому вам, возможно, придется поспрашивать или отправить им электронное письмо напрямую.

person Brooks Moses    schedule 26.02.2013
comment
Это интересно и заслуживает внимания. Спасибо. - person Omnifarious; 26.02.2013

Как насчет GNU Radio? У них есть аппаратная поддержка множества программно-определяемых радиокомпонентов, а поток данных легко подключается через графический интерфейс к их «GNU Radio Companion» (GRC).

Они используют API-интерфейсы Python и C++, к которым можно получить доступ для вашего уровня пользовательского интерфейса. В сети можно найти множество примеров.

person Voider    schedule 25.02.2013