1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Improved tuner timeout handling (cont'd)

This commit is contained in:
Klaus Schmidinger 2006-01-05 15:30:06 +01:00
parent 01bbd53fa1
commit 526c94f017

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 1.146 2006/01/04 11:47:36 kls Exp $ * $Id: dvbdevice.c 1.147 2006/01/05 15:30:06 kls Exp $
*/ */
#include "dvbdevice.h" #include "dvbdevice.h"
@ -152,12 +152,10 @@ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs)
if (TimeoutMs) { if (TimeoutMs) {
cPoller Poller(fd_frontend); cPoller Poller(fd_frontend);
if (Poller.Poll(TimeoutMs)) { if (Poller.Poll(TimeoutMs)) {
// just to clear the event queue - we'll read the actual status below
dvb_frontend_event Event; dvb_frontend_event Event;
CHECK(ioctl(fd_frontend, FE_GET_EVENT, &Event)); while (ioctl(fd_frontend, FE_GET_EVENT, &Event) == 0)
; // just to clear the event queue - we'll read the actual status below
} }
else
return false;
} }
do { do {
int stat = ioctl(fd_frontend, FE_READ_STATUS, &Status); int stat = ioctl(fd_frontend, FE_READ_STATUS, &Status);
@ -316,7 +314,7 @@ void cDvbTuner::Action(void)
tunerStatus = tsSet; tunerStatus = tsSet;
diseqcCommands = NULL; diseqcCommands = NULL;
if (time(NULL) - lastTimeoutReport > 60) { // let's not get too many of these if (time(NULL) - lastTimeoutReport > 60) { // let's not get too many of these
esyslog("ERROR: frontend %d timed out while tuning", cardIndex); esyslog("ERROR: frontend %d timed out while tuning to channel %d, tp %d", cardIndex, channel.Number(), channel.Transponder());
lastTimeoutReport = time(NULL); lastTimeoutReport = time(NULL);
} }
continue; continue;
@ -331,7 +329,7 @@ void cDvbTuner::Action(void)
} }
else if (Status & FE_HAS_LOCK) { else if (Status & FE_HAS_LOCK) {
if (LostLock) { if (LostLock) {
esyslog("frontend %d regained lock", cardIndex); esyslog("frontend %d regained lock on channel %d, tp %d", cardIndex, channel.Number(), channel.Transponder());
LostLock = false; LostLock = false;
} }
tunerStatus = tsLocked; tunerStatus = tsLocked;
@ -340,7 +338,7 @@ void cDvbTuner::Action(void)
} }
else if (tunerStatus == tsLocked) { else if (tunerStatus == tsLocked) {
LostLock = true; LostLock = true;
esyslog("ERROR: frontend %d lost lock", cardIndex); esyslog("ERROR: frontend %d lost lock on channel %d, tp %d", cardIndex, channel.Number(), channel.Transponder());
tunerStatus = tsTuned; tunerStatus = tsTuned;
Timer.Set(lockTimeout); Timer.Set(lockTimeout);
lastTimeoutReport = 0; lastTimeoutReport = 0;