DBOX2-Modul

Aus TuxBoxWIKI
Wechseln zu: Navigation, Suche


Allgemeines

Um nicht zu viel zu sagen: Ein Plugin ist eine Erweiterung zu einem vorhanden Programm und hat folgende Attribute:

  • Erweiterung
  • dynamisch ladbar/entladbar
  • Plugins können/werden unabhängig vom Ladeprogramm (Hauptprogramm) produziert bzw. werden
  • Plugins sind abhängig vom Hauptprogramm
  • Durch bestimmte bereitgestellte Funktionen (Schnittstellen) können Plugins untereinander kommunizieren


Plugins können durch bestimmte Mechanismen in das Programm eingebungen (verbunden) werden (auch als linken bezeichnet).


Bevor ein Plugin (wie oben schon erwähnt) eingebunden werden kann, wird durch bestimmte Mechanismen versucht alle nicht gebundenen(nicht gelinkten) Symbole zu binden.
Bei Unix-System haben Module/Plugins oftmals die Erweiterung so (shared object) und bei Windows dll. Beide Systeme können Plugins dynamisch laden und enladen. Es gibt kein einheitliches Aussehen eines Plugins, Eintrittspunkt, Funktionen die bei bestimmten Events aufgerufen werden, sind oftmals in den Programmen nicht gleich. Fehler die in Plugins vorkommen, können zu Abstürzen führen (Programm, OS)


Die Implemtation eines Plugins

Die Implementation eines Plugins sollte erst nach der ausführlichen Planung kommen. Die Planung beschreibt das Aussehen des Plugins, bzw. die verwendeten Funktionen und deren späteren Programmierung. Während dieser Phase sollten alle wichtigen Eigenschaften des Hostes Hauptprogramm eingeholt bzw. berücksichtigt werden. Fehlerhafte Planungen können spätere Fehler in den Programmen bedeuten.


Interface eines Modules

Jedes Programm, das erweiterbar ist, benutzt andere Schnittstelle (oder mehrere), auch als Interface bezeichnet. Es gibt nur wenige Standards, z.B. VST (Musikbranche). Man sollte mit diesen Schnittstellen arbeiten, um einen Ablauf ohne Fehler zu garantieren.


Ein Plugin

(ergänzen bzw. ändern) Ein C-Programm hat einen Eintrittspunkt und zwar main. Main ist sozusagen die Hauptfunktion eines C-Programmes. Jedes mal, wenn Sie ein Programm aufrufen das in C gemacht ist, dann wird diese Funktion aufgerufen. Wenn Sie die Funktion beenden, wird auch das Programm beendet. Der Unterschied zu Plugins dabei ist, das diese meistens keine Hauptfunktion haben, sondern nur Funktionen die bei bestimmten Ablaufen gerufen werden. Stellen Sie sich das Plugin als ein Stecker vor, diesen stecken Sie in die Buchse, dabei verbinden Sie die Kontakte der Buchse mit dem Stecker und es besteht eine Verbindung, bei Plugins ist das genauso. Stecker ist das Plugin und der Buchse die Schnittstellen. Bei der DBOX2 hat ein Plugin eine Methode/Funktion die vom Lader aufgerufen wird, wenn Sie es laden. Diese Funktion heißt plugin_exec. Der Funktion wird zusätzlich ein Argument übergeben, und zwar eine Struktur: Sie ist vom Typ _PluginParam. Eine Struktur hat mehrere Felder, die Sie während des Programmierens/Laufzeit ansprechen können.


Die Struktur PluginParam hat folgende Elemente:

  • id:
Ist ein Character-Pointer, und wird verwendet, um den Wert in val identifizieren.
  • val:
Ist ein Characterpointer. val beinhaltet den Wert. Er kann z.B. ein FD (File Descriptor, Handles) für eine Datei, z.B. lcd oder fb (frame buffer). Achtung, bevor Sie den Character-Pointer verwenden können, müssen Sie ihn in ein Integer umwandeln.
  • next:
next ist vom Typ PluginParam. Er kann weitere der oben genannten Informationen enthalten


Die DBOX bietet folgende Interfaces

FX2

FX2 (nach dem Author) ist eine Bibliothek (Library, kurz. lib, deshalb wird diese Bibliothek auch als libfx2 genannt) mit der Sie graphische Operationen durchführen können. Ein weiteres Feature der Library ist die sind Remote-Control-Operationen.

Folgende graphische Operationen werden verwendet:

  • Zeichnen von horizontalen und vertikalen Linien
  • Zeichnen von Buchstaben
  • Verschieben von Bildinhalten
  • Kopieren von Bildinhalten
  • Zeichnen von ungefüllten und gefüllten Rechtecken
  • Pixel-Operationen


Enigma-Widgets

Enigma bietet Widgets zur eines Programmes an. Das ist der Unterschied zu anderen GUI, wie z.B. Neutrino/LCARS. Widgets:

  • Listbox
  • Button
  • Editierfelder
  • Menüs

Kernel

Module können genauso auf Schnittstellen zugreifen, wie andere ablaufe. Sie sind also nicht auf die bereitgestellten Funktionen des Hauptprogrammes eingeschränkt.

Wie erstelle ich denn nun Plugins ?

Jetzt gehts los ..., die Bayern .... Nein wir sind hier nicht in Bayern, als erstes wollen wir uns mit der einfachen Konsolenprogrammierung auseinandersetzen

VT

Als erstes fangen wir mit den Grundlagen an. Spätestens hier sollten Sie die Grunlagen der Programmierung, bzw. in C kapiert haben. Der nachfolgende Code gibt lediglich eine Hallo-Welt! Message aus.

Der Quelltext

#include <stdio.h>
plugin_exec (PluginParam * strc)
{
   printf ("Hallo-Welt!");
   return 0;
}

Aufbau des Textes

In Zeile 3 implementieren wir die Funktion plugin_exec. In dieser Funktion wird mittels printf ein String "Hallo-Welt!" ausgegeben. In Zeile 5 wird die Funktion beendet und das Plugin wird entladen.

LIBFX2


Stop hand.png An dieser Stelle muss noch Text rein.
==Enigma==
Stop hand.png An dieser Stelle muss noch Text rein.

Review-KandidatDieser Artikel befindet sich derzeit im Reviewprozess. Hilf mit, ihn zu verbessern! Falls du bei weiteren Artikeln helfen willst, findest du hier eine Auswahl offener Artikel.