Entwicklung - Einrichten einer Entwicklungsumgebung

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Hier ist noch stark Baustelle. Wer Lust hat darf gerne was schreiben!!


Inhaltsverzeichnis

Motivation

Jeder der sich vornimmt ein paar Zeilen Code für VDR zu programmieren, sei es ein Plugin oder ein patch, kommt früher oder später nicht um eine richtige Entwicklungsumgebung rum. Es ist viel zu mühsam auf einem Wohnzimmer VDR zu entwicklen. Hier sollen ein paar Tipps gezeigt werden wie man die Entwicklung bequem auf seinem Desktop PC machen kann.

Grundfunktionen der Entwicklungsumgebung

Es gibt mindestens zwei Eigenschaften die eine VDR-Entwicklungsumgebung bieten sollte.

  • Bequemes programmieren
  • Code im VDR testen

Diese Anleitung soll zeigen wie man eine Entwicklungsumgebung mit KDevelop, VDR und dem Xine-Plugin aufbauen kann.

Einrichten von VDR

Beim Einrichten von VDR ist nicht viel zu beachten. Nur ist es beim Verwenden vom Xine-Plugin nicht nötig die DVB-Treiber zu installieren, da das xine-plugin als Device erkannt wird. Trotzdem müssen die Header der Treiber an der richtigen Stelle liegen.(wie in der Beschreibung zum Treiber beschrieben) Bitte folge dieser Anleitung: VDR Installation

Einrichten von Xine-Plugin

Das Einrichten des Xine-Plugins wurde hier genauer beschrieben: Xine-plugin

Einrichten von Xine-Player

Neben dem Xine-Plugin muss auch noch der Xine Player richtig installiert werden:Xine-plugin

Alternativ kann man hier auch sehr schön den XineVDR Player verwenden.

Integrierte Entwicklungsumgebung einrichten

Wer ein wenig mehr Komfort bei der Bearbeitung seiner Quelltexte wünscht, wird eine integrierte Entwicklungsumgebung einrichten wollen. Vorteile einer integrierten Entwicklungsumgebung sind je nach Ausstattung:

  • Syntax Higlighting, Auto Completion
  • Class Browsing, C/C++ Parsing während der Eingabe, Automatisches Build nach dem Speichern
  • Auto Indentation, Auto Format
  • etc, etc

Neben kommerziellen Produkten, existieren im Linux Umfeld einige frei verfügbare Entwicklungsumgebungen. Dazu gehören z.B. KDevelop, eclipse mit CDT und Anjuta.

KDevelop einrichten

Fast alle Distributionen liefern KDevelop mit aus. Daher wird die Installation hier nicht weiter beschieben.

Einen wichtigen Punkt möchte ich hier jedoch kurz beschreiben. Erfahrene Programmierer kennen es natürlich. Unter Projekt->Projekt-Optionen->C++ Besonderheiten->Codekomplementierung, können wir den VDR Code zufügen.

Wenn sie dann also cDevice:: + strg + Space eingeben, dann werden ihnen alle Möglichkeiten der Codekomplementierung angezeigt. Das selbe gilt für Methoden von Objekten oder Elementen von Datenstrukturen.

Eclipse einrichten

Eclipse ist eine plattformübergreifende Entwicklungsumgebung auf Basis von java. Als Voraussetzung benötigt man also ein JRE (java runtime environment) oder SDK (java development kit). Bei den meisten Distribution ist das bereits enthalten. Auch eclipse ist in den meisten Fällen schon Bestandteil der Distribution. Eine manuelle Installation ist aber denkbar einfach. Dazu von [1] zunächst das Platform SDK für Linux als tgz herunterladen und im Dateisystem entpacken. Als Beispiel wählen wir das Verzeichnis /usr/share/eclipse. Wer möchte kann noch einen Link von /usr/share/eclipse/eclipse auf /usr/bin/eclipse anlegen. Danach die C/C++ Development Tools (CDT) herunterladen und in das gleiche Verzeichnis wie eclipse entpacken. Das war alles.

Neues Plugin erstellen

Das Erstellen eines neuen Plugins ist unter VDR recht einfach. In dem Verzeichniss von VDR gibt es ein Skript mit dem Namen "newplugin". Dieses läßt sich recht einfach mit

newplugin <name>

aufrufen. Das Skript erstellt im Verzeichniss VDR/PLUGINS/src/ ein neues Plugin. Dieses Plugin gilt es nun mit Leben zu füllen.

Plugin mit der integrierten Entwicklungsumgebung programmieren

Mit KDevelop ...

Um jedoch nun das Plugin unter KDevelop programmieren zu können, müssen wir erstmal aus dem Makefile ein KDevelop Projekt erstellen. Dieses kann man unter

Projekt->Projekt importieren...

In dem Dalog wählt man das Verzeichnis, in dem das neu erstelle Plugin liegt. Der Projektname wird richtig übernommen. Wir müssen nur noch den Projekttyp wählen. Ich habe hier immer "Generic C++ Application (Automake based)" genommen. Im vdr haben alle C Dateien die Endung *.c. Da wir in C++ programmieren und alle von KDevelop erzeugten Dateien die Endung .cpp haben, ändern wir diese auch in *.c

Mit eclipse ...

Eclipse verwaltet die einzelnen Projekt in einem sogenannten workspace. Ein workspace ist ein Basisverzeichnis in dem die im workspace enthaltenen Verzeichnisse als Unterverzeichnisse angelegt werden. Da eclipse nur eine einstufige Projektstruktur verwaltet, muss zur Entwicklung von Plugins als workspace das Verzeichnis $SOURCEDIR/PLUGINS/src ausgewählt werden.

Bevor wir jetzt ein neues Projekt mit eclipse anlegen, lassen wir zunächst ein Template mit dem Skript newplugin anlegen. Danach können wir in eclipse ein neues Projekt anlegen. Dazu unter "File/New" den Projekttyp "Standard Make C++ Project" auswählen und im folgenden Dialog als Project Name den Namen des Plugins angeben. Eclipse wird daraufhin das zuvor angelegte Template als neues Projekt erkennen und alle vorhandenen Dateien in die Projektverwaltung übernehmen. Da wir kein Managed C++ Projekt ausgewählt haben, wird eclipse das im Template enthaltene Makefile zum Übersetzen heranziehen und damit alle für das Plugin relevanten Einstellungen aus dem Makefile anwenden. Ab hier kann man jetzt wie gewohnt weiter arbeiten.

Start Skript

Da man sein zu entwicklendes Plugin auch immer testen will, bietet es sich an dieses per Tastendruck aus KDevelop zu machen. Dazu baut man sich ein Skript das ein "make clean && make all" im Pluginverzeichniss aufruft. Somit wird das Plugin übersetzt und in das lib Verzeichnis kopiert. Alternativ kann man auch "make plugins" aus dem VDR Verzeichniss aufrufen. Dauert aber unnötig länger.

Nun soll das Skript vdr mit allen Parametern starten. Ich habe die Ausgabe auf ein extra Fenster gelegt:

xterm -e "./vdr --log=3.7 -v /video/ '-Pxine -r' -w 60 -Ptest" &

Zum schluss soll noch der Xine-Player gestartet werden:

xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes 

Noch sehr hilftreich ist es wenn man ein

tail -f /var/log/syslog

mit einfügt. Dadurch kann man alle outputs des Plugins (mit dsyslog("Hallo Welt")) direkt sehen.

Das ganze zusammen sieht dann in etwas so aus.

#!/bin/bash

#Auf wunsch altest Plugin löschen um Probleme zu vermeiden
rm ../../lib/libvdr-myplugin.so.1.3.34 

make clean
make all

#testen ob make erfolgreich war
if test "${?}" != 0
 then
 exit;
fi 

cd /path/to/VDR
xterm -geometry 150 -e "tail -f /var/log/syslog"  &
xterm -e "./vdr --log=3.7 -v /path/to/video/ '-Pxine -r' -w 60 -Pfemon -Pgetdsmcc" &
xine vdr:/tmp/vdr-xine/stream#demux:mpeg_pes 

Dieses schreibe ich mir in eine Datei z.B. startvdr.sh und lege diese im Plugin Verzeichniss ab. In KDevelop trage ich nun dieses Skript unter Projekt->Projekt-Optionen->Laufzeit-Optionen->Hauptprogramm ein. Wenn ich nun in KDevelop auf den Startknopf drücke, wird das Plugin übersetzt und mit vdr gestartet.

Benutzen des Debuggers

Die Verwendung des gdb-Debugger wird ist in einen separaten Kapitel behandelt.

Zu beachten

Es ist zu beachten, dass Plugins, die in der Entwicklungsumgebung entwickelt werden, nicht immer auf anhieb auf einem echten VDR laufen. Oft ist es das Problem, dass das xine-Plugin keine Begrenzung für das OSD hat. Somit kann man damit recht viel machen. Es ist auch zu beachten, dass beim Entwickeln mit dem xine Plugin die Anzahl der Devices um eins erhöht ist. Das vom Xine-Plugin zugefügte Device(PrimaryDevice) dient jedoch nur zur Ausgabe und bietet nicht die Funktion über dieses Device etwas aufzunehmen. Dieses sollte man im Hinterkopft behalten wenn man versucht einen cReceiver oder cFiler zu schreiben.

Links

  1. VDR Homepage
  2. KDevelop Project
  3. Eclipse Project
  4. Anjuta Project