Serial-plugin
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
Hardwareanforderungen
- Sie brauchen eine kleine Schaltung die an die serielle Schnittstelle angeschlossen wird.
Schaltplan
Funktionen der LED´s LED 1: leuchtet bei Aufnahmen, blinkt wenn keine TV-Karte mehr "frei" 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.
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); + } } }