Am Beispiel der Erstellung eines neuen GNU Radio Blocks für die Miller-Dekodierung
soll erläutert werden, welche allgemeinen Schritte hierzu nötig sind.
Diese Anleitung gilt nur für GNU Radio Blocks in der Version 3.2.2. Die aktuellste Version 3.3.0 wurde wie folgt umstrukturiert:
|
Beispiel-Block als Vorlage vorbereiten
Auf dem GNU FTP-Server liegen GNU Radio Beispiel-Block-Implementierung in unterschiedlichen Versionen bereit:
Diese Anleitung basiert auf Gnuradio Version 3.2.2. Wir laden den passenden Beispiel-Code herunter, packen ihn aus und benennen das Unterverzeichnis passend zu unserem neuen Block um.
Um alle nachfolgenden Schritte möglichst generisch beschreiben zu können, verwenden wir für die spezifischen Inhalte dieser Anleitung Shell-Umgebungsvariablen als Platzhalter:
Beschreibungen anpassen
Die projektbeschreibenden Dateien AUTHORS, ChangeLog und README nach Belieben anpassen:
Docs entfernen
Da lieber im Wiki dokumentiert und die Anzahl der anzupassenden Dateien gering gehalten werden sollen, entfernen wir die Docs aus dem Block:
Autoconfig und Automake-Dateien anpassen
In configure.ac Blocknamen und Version anpassen:
In src/lib/Makefile.am und src/python/Makefile.am Referenz zu zweiter Sourcedatei entfernen und Pfade zu Dateinamen anpassen:
Schließlich noch die src/lib/Makefile.swig.gen anpassen:
Sourcedateien umbenennen
Nun benennen wir die Sourcedateien um und entfernen dabei auch die zusätzlichen Sourcedateien "howto_square2_ff*":
Sourcedateien anpassen
Nun müssen wir die verschiedenen Sourcedateien anpassen. Wir beginnen mit der src/lib/miller.i, in der wir alle Vorkommnisse des Paketnamens "howto" und der Funktion "square_ff" in die entsprechenden neuen Namen ändern und wieder die Referenz auf die zweite Sourcedatei entfernen:
Die gleichen Ersetzungen führen wir bei src/lib/miller_decode.* und src/python/qa_miller.py durch. Außerdem werden die DEFINEs in der Header-Datei umbenannt und die zweite Funktion aus dem qa-Testdatei qa_miller.py entfernt:
Eigenen Code einsetzen
Nun sind alle Dateien vorbereitet, dass eigener Code eingesetzt werden kann. Die ersten Anpassungen dazu betreffen die folgenden Stellen in der src/lib/miller_decode.cc.
Zunächst muss konfiguriert werden, wie viele Eingangs- und Ausgangsdaten verarbeitet werden sollen:
Im Konstruktur wird u.a. konfiguriert, von welchem Typ die Eingangs- und Ausgangsdaten sind. In diesem Beispiel float:
Die eigentliche Bearbeitung der Eingangsdaten erfolgt in der Funktion general_work(). Die Funktion castet zunächst die Eingangs- und Ausgangspointer, verarbeitet die Eingangsdaten und erzeugt Ausgangsdaten, gibt mit consume_each() an, wie viele Eingangsdaten verarbeitet wurden und gibt als Funktionsrückgabewert die Anzahl der erzeugten Ausgabedaten an:
Nach Anpassungen des Verarbeitungscode muss anschließend die Testfunktionen in der src/python/qa_miller.py entsprechend angepasst werden:
Weitere Informationen zur Erstellung eines eigenen GNU Radio Blocks findet sich auf dieser GNU Radio Webseite
.
Neuen Block kompilieren
Zunächst löschen wir die alten Makefiles und generieren einmal alle configure- und Makefile-Dateien neu:
Nun kann wie gewohnt kompiliert werden:
Falls Python unter Mac OS X mit MacPorts installiert wurde, muss der Configure-Prefix entsprechend gesetzt werden:
Falls unter Ubuntu/Debian Probleme beim Linken (im Make-Prozess) auftreten sollten, folgende Umgebungsvariablen vor dem Kompilieren setzen: