Обзор HackRf One: Часть 2 Настройка софта

Мы подключили HackRf к ноутбуку, и увидели что он определяется корректно. Настала пора разобраться с программной частью. Для начала нам нужно установить ПО для HackRf. К счастью все необходимое ПО уже имеется в репозитории Ubuntu. Посмотрим что там есть.
igor@ghost64:~$ apt-cache search hackrf
gqrx-sdr — Software defined radio receiver
hackrf — Software defined radio peripheral
libhackrf-dev — Software defined radio peripheral
libhackrf0 — Software defined radio peripheral
gqrx — Software defined radio receiver
gr-osmosdr — Gnuradio blocks from the OsmoSDR project

Давай разберемся кто есть кто.
hackrf — утилиты для взаимодействия с приемником
libhackrf0 — библиотека для поддержки управления HackRf сторонними приложениями
libhackrf-dev  - пакет содержащий заголовочные файлы, и прочие вещи, необходимые нам, если мы сами захотим скомпилировать какую-нибудь программу с поддержкой HackRf

Нам потребуется это все. Устанавливаем ПО командой:
$ sudo apt-get install hackrf libhackrf0 libhackrf-dev

Посмотрим что за утилиты мы установили. Пакет hackrf содержит следующие программы:
hackrf_info — вывод информации о устройстве.
hackrf_spiflash — программа для обновления прошивки в контроллере
hackrf_cpldjtag — программа для обновления прошивки в CLPD микросхеме.
hackrf_transfer — многофункциональная программа для передачи/приема данных
hackrf_max2837, hackrf_rffc5071, hackrf_si5351c — насколько я понял, данные программы служат для модификаций значений регистров в микросхемах. Возможно они нужны для разработиков прошивок в отладочных целях.

Запустим уже что-нибудь? :-) Что попроще, к примеру hackrf_info

$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0x00584f5e 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825

Вся информация о оборудовании как на ладони. Наиболее полезное тут для нас это Firmware Version. Сейчас в HackRf прошита самая последняя версия 2014.08.1. Проверять наличие новых прошивок нужно тут http://sourceforge.net/projects/hackrf/files/

Если в результате запуска команды вы получили ошибку:
hackrf_open() failed: HACKRF_ERROR_NOT_FOUND (-5)
то причины могут быть в следующем:

1. Отсутствие прав доступа к USB устройствам у текущего пользователя.
Проверить это можно запустив утилиту hackrf_info от имени root пользователя. Если от имени рута программа успешно считывает информацию с HackRf, а от пользователя не хочет, то значит проблема с правами. Исправить это можно, написав правило для udev
Создайте файл /etc/udev/rules.d/52-hackrf.rules , и впишите в него следующие правила:
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»604b», SYMLINK+=»hackrf-jawbreaker-%k»
, MODE=»660″, GROUP=»plugdev»
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»6089″, SYMLINK+=»hackrf-one-%k», MODE=
«660», GROUP=»plugdev»
ATTR{idVendor}==»1fc9″, ATTR{idProduct}==»000c», SYMLINK+=»hackrf-dfu-%k», MODE=
«660», GROUP=»plugdev»

Сохраните файл, и либо перезагрузите компьютер, либо перезапустите демон udev  командой udevadm control --reload-rules. Как вы уже догадались, этими тремя правилами мы задаем для устройств с определенными VendorID и ProductID права доступа 660, и доступ членам группы plugdev.

2. Другая причина — устаревшая версия программ и библиотек для HackRf
HackRf One поддерживается ПО версии 2014.04.1 и новее. Может получиться так, что в репозитории окажется старая версия ПО. Проверить версию установленного ПО в Debian/Ubuntu можно при помощи команды apt-cache show hackrf
Вот небольшая иллюстрация.
Ноут с Ubuntu 14.04 LTS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION=»Ubuntu 14.04.2 LTS»

В репозитории — устаревший софт.
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 120
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2013.07.1.16.d5cebd-2с этой версией жизни нет!
Depends: libhackrf0 (= 2013.07.1.16.d5cebd-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2013.07.1.16.d5cebd-2_i386.deb
Size: 29708
MD5sum: e4e8542460419a3c0e577dbd6f26ffe9
SHA1: 777ef6d304f2c5606d755291dc123c7c800ab42e
SHA256: 3200d2819cf3f67614f3dd1d2b81fe7adb5443be89e577d0499ae464ab931b21

А вот другой ноут с относительно свежей системой
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION=»Ubuntu 14.10″
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 124
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2014.04.1-2тут в репозитории свежая версия.
Depends: libhackrf0 (= 2014.04.1-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2014.04.1-2_i386.deb
Size: 26718
MD5sum: 2658d15c2d09328049850cc41fb4e643

Выхода из этой ситуации два: либо ждать когда обновят софт в репозитории (ждать этого можно вечно ;) ) или собрать  свежий софт самому.
Собираем его так:
1. Ставим нужный для сборки софт
sudo apt-get install build-essential cmake libusb-1.0-0-dev
2. Удаляем неактуальный софт.
sudo apt-get remove hackrf libhackrf-dev libhackrf0
3. Получаем свежие версии исходников:
git clone https://github.com/mossmann/hackrf.git
4. Идем в папку host
cd hackrf/host/
5. Выполняем следующие команды
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
6. Теперь попытаемся выполнить команду hackrf_info (если у вас на эту команду bash выругался что-то вроде «команда не найдена», то просто откройте новое терминальное окно, и выполните в нем)
$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0xa000cb3c 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825
Ура! Работает!

Итак, софт мы поставили, и оборудование успешно определяется. Настала пора попробовать использовать HackRf как источник сигнала в GnuRadio.
Поддержку HackRf в GnuRadio обеспечивает OsmoSDR source (тот самый, что используется для работы с RTL донглами). Даже если у вас он уже был установлен ранее, то его надо будет пересобрать для поддержки HackRF. Сборка выполняется по инструкции из этой статьи . При сборке следует обратить внимание на вывод команды cmake. В ней он указывает какие компоненты он обнаружил и активировал. Запись о HackRF должна присутствовать в разделе «gr-osmosdr enabled components»
— ######################################################
— # gr-osmosdr enabled components
— ######################################################
— * Python support
— * FUNcube Dongle
— * IQ File Source
— * Osmocom RTLSDR
— * RTLSDR TCP Client
— * HackRF Jawbreaker
— * RFSPACE Receivers

После пересборки/установки OsmoSDR можно попробовать проверить работу HackRF с GnuRadio послушав FM станции с помощью графа приемника fm_radio_rx.grc Не забудьте поменять в этом графе частоту семплирования с 5 миллионов, до 8 (минимально поддерживаемую HackRF)

Прием FM станции при помощи HackRF OneВот как-то так оно работает. Не следует удивляться уровню сигнала, так как это принималось все квартире на антенну от Baofeng. :)

HackRf One

Обзор HackRf One: Часть 1 Распаковка и подключение.

Наступила весна. Солнышко начало пригревать, запели птички. И помимо этих чудесных вещей случилось долгожданное событие — ко мне приехал заказаный перед  Новым Годом HackRf! Он попал ко мне в руки буквально пару часов назад, и мне нетерпится поиграть с ним. Пока — распаковка и обзор. Открываем волшебную коробочку!

Читать далее

Raspberry Pi pinboard

Pinboard для Raspberry Pi

Нравятся ли вам пинборды как они нравятся мне? Что может быть удобнее при отладке, чем воткнуть датчик в разъемы и воткнуть пару проводков. Может собрать и для малинки пинборд? Почему нет? ;)

Читать далее

audiosdr2

Переделываем ICOM PCR1000 в SDR приемник.

Посвящается участнику форума radioscanner.ru STABO,
которому я дал обещание написать эту статью,
и чьи напоминания не давали спать моей совести.
:-)

Как я уже писал в предыдущей заметке, я удачно победил приемник PCR-1000 и смог им управлять из GnuRadio. Все прекрасно, но вот хочется удобств. Хочется видеть спектр, и не упускать интересные вещи происходящие на пару килогерц от той частоты на которой ты сейчас находишься. В родном софте для PCR1000 имеется возможность видеть спектр. Изучив ситуацию поглубже я обнаружил что все данные для отображения на спектре передаются непосредственно через COM порт, а программа лишь рисует пики. Повозившись немного с этими данными, и попробовав их отобразить, я плюнул на это дело и решил искать обходные пути. И этот путь был найден.
Читать далее

Управляем Icom PCR-1000 при помощи GnuRadio

Пару лет назад, я приобрел свой первый более-менее серьезный радоприемник: Icom PCR-1000. Одной из причин, по которой я выбрал именно его, было управление по RS-232. Итак, получил я его, подключил, погонял под Windows. Красота! Лишь одно омрачало прекрасное будущее, я пользуюсь Linux и FreeBSD, а родного софта от Icom под *nix системы как-то не наблюдалось.
Пошарившись в Интернете, я обнаружил что протокол управления приемником довольно прост, а посему почему бы не попробовать написать программу управления самому? Что ж, расчехляем свой любимый текстовый редактор,  понеслись!
Читать далее

Параметр Taps для Frequency Xlating FIR Filter, что это?

В наших прошлых примерах мы уже встречались с блоком Frequency Xlating FIR Filter.  И как вы можете помнить у этого блока есть загадочное поле Taps (отсчеты). Мы даже вводили туда какую-то муру, примерно нам понятную (полоса фильтра, ширина переходного периода и др.). Но почему «отсчеты»? Зачем они нам нужны? Попробуем с этим разобраться.
Читать далее

Горячие клавиши в GnuRadio

Так как мне сегодня немного лень что-либо писать, то сил моих хватило лишь на пару строчек. :)
Итак, горячие клавиши для GnuRadio:
«D» — выключить блок (Disable)
«E» — включить блок (Enable)
«↓» и «↑» — сменить тип данных для блока (Complex, Float, Byte и т.д.)
«←» и «→» — вращать блок по часовой стрелке и против часовой стрелки.

Сохранение и загрузка настроек: блок Variable Config

Зачастую бывает необходимо сохранить различные параметры своего графа. Допустим вы сделали граф SDR приемника и регулярно пользуетесь им. Естественно было бы удобно если бы ваша схема запоминала частоту, на которой вы остановились в прошлый раз, какую модуляцию использовали, и прочие параметры изменяемые в процессе работы. Для запоминания параметров при выходе, и их загрузки при старте служит блок Variable Config.
Читать далее

GnuRadio: многоликий WX GUI Chooser

В сегодняшней статье мы рассмотрим такой блок как WX GU Chooser.
Несмотря на  его название «Chooser», он может быть такими разными графическим элементами как кнопка, выпадающий список или радиокнопки.
Рассмотрим этот блок подробнее.
Читать далее

XMLRPC Client — управление внешними устройствами

GnuRadio — мощная вещь, и сейчас мы в этом убедимся еще раз. До этого момента мы взаимодейстововали только с между схемами созданными GnuRadio. Но настало время сделать что-то более интересное. В данной статье мы будем управлять светодиодом при помощи GnuRadio.
Читать далее