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>
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>
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
system per frontend.
- 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
* 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"
@ -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
lnbPowerTurnedOn = true;
}
static cMutex Mutex;
if (Diseqc->IsScr())
Mutex.Lock();
struct dvb_diseqc_master_cmd cmd;
const char *CurrentAction = NULL;
for (;;) {
@ -662,6 +665,8 @@ void cDvbTuner::ExecuteDiseqc(const cDiseqc *Diseqc, unsigned int *Frequency)
}
if (scr)
ResetToneAndVoltage(); // makes sure we don't block the bus!
if (Diseqc->IsScr())
Mutex.Unlock();
}
void cDvbTuner::ResetToneAndVoltage(void)