cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands at any given time

This commit is contained in:
Klaus Schmidinger 2012-01-08 14:32:39 +01:00
parent acaa549404
commit 2b3821cc88
3 changed files with 9 additions and 1 deletions

View File

@ -2742,6 +2742,7 @@ Milan Cvijanovic <elcom_cvijo@hotmail.com>
Frank Neumann <frank.neumann@hp.com> Frank Neumann <frank.neumann@hp.com>
for suggesting to reduce the thread and I/O priority cCuttingThread::Action() for suggesting to reduce the thread and I/O priority cCuttingThread::Action()
for reporting a problem with tuning timeouts when using SCR with multiple tuners
Gerald Dachs <vdr@dachsweb.de> Gerald Dachs <vdr@dachsweb.de>
for reporting a problem with checking for minimum line length of 21 characters in for reporting a problem with checking for minimum line length of 21 characters in

View File

@ -6801,3 +6801,5 @@ Video Disk Recorder Revision History
DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery DTV_ENUM_DELSYS call. With older drivers it will fall back to one delivery
system per frontend. system per frontend.
- Updated the Hungarian language texts (thanks to István Füley). - Updated the Hungarian language texts (thanks to István Füley).
- cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands
at any given time (reported by Frank Neumann).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: dvbdevice.c 2.51 2012/01/07 10:42:47 kls Exp $ * $Id: dvbdevice.c 2.52 2012/01/08 14:30:04 kls Exp $
*/ */
#include "dvbdevice.h" #include "dvbdevice.h"
@ -642,6 +642,9 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power
lnbPowerTurnedOn = true; lnbPowerTurnedOn = true;
} }
static cMutex Mutex;
if (Diseqc->IsScr())
Mutex.Lock();
struct dvb_diseqc_master_cmd cmd; struct dvb_diseqc_master_cmd cmd;
const char *CurrentAction = NULL; const char *CurrentAction = NULL;
for (;;) { for (;;) {
@ -662,6 +665,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
} }
if (scr) if (scr)
ResetToneAndVoltage(); // makes sure we don't block the bus! ResetToneAndVoltage(); // makes sure we don't block the bus!
if (Diseqc->IsScr())
Mutex.Unlock();
} }
void cDvbTuner::ResetToneAndVoltage(void) void cDvbTuner::ResetToneAndVoltage(void)