Serial-plugin

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Links)
(Links)
Zeile 147: Zeile 147:
 
# [http://www.vdrportal.de/board/thread.php?postid=323339 nützliche Tips zum Plugin]
 
# [http://www.vdrportal.de/board/thread.php?postid=323339 nützliche Tips zum Plugin]
 
# [http://vdrportal.de/board/thread.php?postid=363812#post363812 v0.0.6b gegen Prellen]
 
# [http://vdrportal.de/board/thread.php?postid=363812#post363812 v0.0.6b gegen Prellen]
# [http://www.vdr-portal.de/board/thread.php?postid=433447#post433447 v0.0.6c ab VDR >1.3.38]
+
# [http://www.vdr-portal.de/board/thread.php?postid=433447#post433447 v0.0.6c ab VDR >1.3.38] aber wohl Probleme mit Tasten
 +
# [http://www.vdrportal.de/board/thread.php?postid=366679#post366679 anderer Fix für 0.0.6a für neuere VDRs]
  
 
[[Kategorie:Plugins]]
 
[[Kategorie:Plugins]]
 
{{i18n|serial-plugin}}
 
{{i18n|serial-plugin}}

Version vom 25. Dezember 2009, 14:23 Uhr

Inhaltsverzeichnis

Beschreibung

Autor: Ralf Klueber

Mit dem Plugin lässt sich der VDR über Tasten steuern, die an die serielle Schnittstelle angeschlossen sind. Zusätzlich lassen sich ein Paar Leuchtdioden ansteuern.


Bilder

Einstellungen

Hardwareanforderungen

  • Eine kleine Schaltung, die an die serielle Schnittstelle angeschlossen wird.

Schaltplan

Schaltplan

Funktionen der LED´s

LED 1 leuchtet bei Aufnahmen und blinkt, wenn keine TV-Karte mehr "frei" ist. Bsp: System mit nur einer TV-Karte: Hier würde die LED blinken, da die eine vorhandene Karte für die Aufnahme gebraucht wird. System mit zwei TV-Karten: Hier würde die LED bei einer Aufnahme leuchten, da die 2. Karte noch "frei" ist. Wenn eine 2. Aufnahme gestartet wird, würde die LED wieder blinken. Usw.

Die teilweise Bestückung ist auch möglich, wenn z. B. nur die ersten 5 Taster benötigt werden oder nur 1 LED. Es geht auch ganz ohne LED. Ein Vorwiderstand wird i. d. R. nicht benötigt für die LEDs (z. B. die HDD-LED des Gehäuses) da der serielle Port eine Konstantstromquelle ist mit 10-20 mA, aber aus Helligkeitsgründen empfiehlt sich ein 1 kOhm-Vorwiderstand bei normalen Anzeige-LEDs (rot, gelb, grün).

Ein evtl. Prellen der Tasten ist durch Parallelschalten eines Kondensators mit etwa 1 nF zu jedem Taster zu beheben (Tiefpass).

Nach Start des Plugins sollten etwa 12V zwischen Pin 4 und 5 des Comports anliegen.


Patches

Der folgende Patch macht das Plugin wieder kompatibel für Versionen >= 1.4. Weiterhin fügt er Einträge ins VDR-Logbuch ein, die zur Fehlersuche sehr nützlich sind.

--- serial.c	2005-07-22 12:48:36.000000000 +0200
+++ serial.c	2007-07-30 18:52:48.135644033 +0200
@@ -72,7 +72,7 @@
   int iNumDevices;
 
 protected:
-  virtual void Recording(const cDevice *Device, const char *Name);
+  virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On);
 
 public:
   int GetLedStatus(int i);
@@ -95,11 +95,15 @@
   int i;
 
   for(i=0; i<iNumDevices; i++) 
-    if(iCardIsRecording[i])
-		iOccupiedDevices++;
-  
+    if(iCardIsRecording[i]) {
+	    iOccupiedDevices++;
+    }
+
   if((iNumDevices == iOccupiedDevices) && (iOccupiedDevices >0)) // Blinken
   {
+    dsyslog("[serial] all cards are recording");
     for(i=0; i<SerialSetup.iFlash; i++)
 		iLedStatus[i] |=  LEDREC; // Bit setzen
     for(i=SerialSetup.iFlash; i<MAXCYCLE; i++)
@@ -107,28 +111,39 @@
   }
   else if(iOccupiedDevices > 0) // Dauerleuchten
   {
+    dsyslog("[serial] %i cards are recording",iOccupiedDevices);
     for(int i=0;i<MAXCYCLE;i++)
 		iLedStatus[i] |=  LEDREC; // Bit setzen
   }
   else // LED aus
   {
+    dsyslog("[serial] no card is recording");
     for(int i=0;i<MAXCYCLE;i++)
 		iLedStatus[i] &= ~LEDREC; // Bit loeschen
   }
   return iLedStatus[i % MAXCYCLE];
 }
  
-void cSerialStatus::Recording(const cDevice *Device, const char *Name)
+
+ // The given DVB device has started (On = true) or stopped (On = false) recording "Name".
+ // Name is the name of the recording, without any directory path. The full file name
+ // of the recording is given in FileName, which may be NULL in case there is no
+ // actual file involved. If On is false, Name may be NULL.
+
+void cSerialStatus::Recording(const cDevice *Device, const char *Name, const char *FileName, bool On)
 {
-	int iCardIndex = Device->CardIndex();
-	iNumDevices = Device->NumDevices();
+	int iCardIndex = Device->CardIndex(); // Returns the card index of this device (0 ... MAXDEVICES - 1).
+	iNumDevices = Device->NumDevices();   // Returns the total number of devices.
 
 	if(iCardIndex < MAXDEVICES)
 	{ 
-		if(Name && Name[0])
+		if(Name && Name[0]) {
 			iCardIsRecording[iCardIndex]++;
-		else
+			dsyslog("[serial] card %i starts recording",iCardIndex);
+		} else {
 			iCardIsRecording[iCardIndex]--;
+			dsyslog("[serial] card %i stops recording",iCardIndex);
+		}
 	}
 }

Softwareanforderungen

Beim Boot muss die serielle Schnittstelle initialisiert werden: /bin/setserial /dev/ttyS0 uart 16550A

Start beim VDR-Start durch Eintrag in die RunVDR:

-P'serial /dev/ttyS0'\

für Com1, für Com2in /dev/ttyS1 ändern.

In der setup.conf gibt es diese Parameter für das Plugin:

serial.Flashrate = 5 serial.Port = 1

Die Taster werden wie eine FB in der remote.conf angelernt. Bei der Aufforderung irgendeine Taste zu drücken (Phase 1), muss jedoch eine Taste auf der Tastatur gedrückt werden, NICHT ein Taster am Com-Port!

Bsp.:

Serial.Up Button11


Links

  1. Homepage des Plugins
  2. Release-Fred
  3. Erklärung der Funktionen
  4. erweitertes Diag-Tool
  5. nützliche Tips zum Plugin
  6. v0.0.6b gegen Prellen
  7. v0.0.6c ab VDR >1.3.38 aber wohl Probleme mit Tasten
  8. anderer Fix für 0.0.6a für neuere VDRs
In anderen Sprachen