Current channel is now device specific

This commit is contained in:
Klaus Schmidinger 2000-11-05 18:39:17 +01:00
parent ea0bd668c8
commit eefbcf5216
8 changed files with 37 additions and 32 deletions

View File

@ -269,3 +269,5 @@ Video Disk Recorder Revision History
2000-11-05: Version 0.68
- Date and time in the title of an event info page are now always right adjusted.
- The 'current channel' is now handled device specific (in case there is more
than one DVB card).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 1.29 2000/11/01 15:52:00 kls Exp $
* $Id: config.c 1.30 2000/11/05 18:18:30 kls Exp $
*/
#include "config.h"
@ -262,9 +262,8 @@ bool cChannel::Switch(cDvbApi *DvbApi)
DvbApi = cDvbApi::PrimaryDvbApi;
if (!DvbApi->Recording() && !groupSep) {
isyslog(LOG_INFO, "switching to channel %d", number);
CurrentChannel = number;
for (int i = 3; i--;) {
if (DvbApi->SetChannel(frequency, polarization, diseqc, srate, vpid, apid, ca, pnr))
if (DvbApi->SetChannel(number, frequency, polarization, diseqc, srate, vpid, apid, ca, pnr))
return true;
esyslog(LOG_ERR, "retrying");
}
@ -284,7 +283,7 @@ cTimer::cTimer(bool Instant)
startTime = stopTime = 0;
recording = false;
active = Instant;
cChannel *ch = Channels.GetByNumber(CurrentChannel);
cChannel *ch = Channels.GetByNumber(cDvbApi::CurrentChannel());
channel = ch ? ch->number : 0;
time_t t = time(NULL);
struct tm *now = localtime(&t);
@ -545,7 +544,6 @@ cKeys Keys;
// -- cChannels --------------------------------------------------------------
int CurrentChannel = 1;
int CurrentGroup = -1;
cChannels Channels;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.29 2000/11/01 13:42:29 kls Exp $
* $Id: config.h 1.30 2000/11/05 13:17:03 kls Exp $
*/
#ifndef __CONFIG_H
@ -217,7 +217,6 @@ public:
cTimer *GetTimer(cTimer *Timer);
};
extern int CurrentChannel;
extern int CurrentGroup;
extern cChannels Channels;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbapi.c 1.35 2000/11/05 13:04:23 kls Exp $
* $Id: dvbapi.c 1.36 2000/11/05 18:30:58 kls Exp $
*/
#include "dvbapi.h"
@ -1130,6 +1130,7 @@ cDvbApi::cDvbApi(const char *VideoFileName, const char *VbiFileName)
#endif
lastProgress = lastTotal = -1;
replayTitle = NULL;
currentChannel = 1;
}
cDvbApi::~cDvbApi()
@ -1698,7 +1699,7 @@ bool cDvbApi::ShowProgress(bool Initial)
return false;
}
bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr)
bool cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr)
{
if (videoDev >= 0) {
struct frontend front;
@ -1723,6 +1724,7 @@ bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Sr
if (front.sync & 0x1F == 0x1F) {
if (siProcessor)
siProcessor->SetCurrentServiceID(Pnr);
currentChannel = ChannelNumber;
return true;
}
esyslog(LOG_ERR, "ERROR: channel not sync'ed (front.sync=%X)!", front.sync);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbapi.h 1.21 2000/11/05 12:40:07 kls Exp $
* $Id: dvbapi.h 1.22 2000/11/05 13:39:31 kls Exp $
*/
#ifndef __DVBAPI_H
@ -138,7 +138,11 @@ public:
// Channel facilities
bool SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr);
private:
int currentChannel;
public:
bool SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr);
static int CurrentChannel(void) { return PrimaryDvbApi ? PrimaryDvbApi->currentChannel : 0; }
// Record/Replay facilities

10
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.41 2000/11/05 12:47:44 kls Exp $
* $Id: menu.c 1.42 2000/11/05 13:42:39 kls Exp $
*/
#include "menu.h"
@ -594,7 +594,7 @@ cMenuChannels::cMenuChannels(void)
//TODO
int i = 0;
cChannel *channel;
int curr = ((channel = Channels.GetByNumber(CurrentChannel)) != NULL) ? channel->Index() : -1;
int curr = ((channel = Channels.GetByNumber(cDvbApi::CurrentChannel())) != NULL) ? channel->Index() : -1;
while ((channel = Channels.Get(i)) != NULL) {
Add(new cMenuChannelItem(i, channel), i == curr);
@ -1245,7 +1245,7 @@ cMenuSchedule::cMenuSchedule(void)
:cOsdMenu("Schedule", 6, 6)
{
now = next = false;
cChannel *channel = Channels.GetByNumber(CurrentChannel);
cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
if (channel) {
char *buffer = NULL;
asprintf(&buffer, "Schedule - %s", channel->name);
@ -1547,7 +1547,7 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched, bool Group)
cDisplayChannel::cDisplayChannel(eKeys FirstKey)
:cOsdBase(true)
{
oldNumber = CurrentChannel;
oldNumber = cDvbApi::CurrentChannel();
number = 0;
lastTime = time_ms();
Interface->Open(MenuColumns, 5);
@ -1744,7 +1744,7 @@ cRecordControl *cRecordControls::RecordControls[MAXDVBAPI] = { NULL };
bool cRecordControls::Start(cTimer *Timer)
{
int ch = Timer ? Timer->channel : CurrentChannel;
int ch = Timer ? Timer->channel : cDvbApi::CurrentChannel();
cChannel *channel = Channels.GetByNumber(ch);
if (channel) {

16
svdrp.c
View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
* $Id: svdrp.c 1.11 2000/10/08 12:21:14 kls Exp $
* $Id: svdrp.c 1.12 2000/11/05 13:44:42 kls Exp $
*/
#define _GNU_SOURCE
@ -302,13 +302,13 @@ void cSVDRP::CmdCHAN(const char *Option)
n = o;
}
else if (strcmp(Option, "-") == 0) {
n = CurrentChannel;
if (CurrentChannel > 1)
n = cDvbApi::CurrentChannel();
if (n > 1)
n--;
}
else if (strcmp(Option, "+") == 0) {
n = CurrentChannel;
if (CurrentChannel < Channels.MaxNumber())
n = cDvbApi::CurrentChannel();
if (n < Channels.MaxNumber())
n++;
}
else {
@ -342,11 +342,11 @@ void cSVDRP::CmdCHAN(const char *Option)
return;
}
}
cChannel *channel = Channels.GetByNumber(CurrentChannel);
cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
if (channel)
Reply(250, "%d %s", CurrentChannel, channel->name);
Reply(250, "%d %s", channel->number, channel->name);
else
Reply(550, "Unable to find channel \"%d\"", CurrentChannel);
Reply(550, "Unable to find channel \"%d\"", cDvbApi::CurrentChannel());
}
void cSVDRP::CmdDELC(const char *Option)

16
vdr.c
View File

@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/people/kls/vdr
*
* $Id: vdr.c 1.42 2000/11/03 15:31:03 kls Exp $
* $Id: vdr.c 1.43 2000/11/05 18:39:17 kls Exp $
*/
#include <getopt.h>
@ -177,7 +177,7 @@ int main(int argc, char *argv[])
cDvbApi::SetPrimaryDvbApi(Setup.PrimaryDVB);
Channels.SwitchTo(CurrentChannel);
Channels.SwitchTo(1);
// User interface:
@ -199,15 +199,15 @@ int main(int argc, char *argv[])
cOsdBase *Menu = NULL;
cReplayControl *ReplayControl = NULL;
int LastChannel = -1;
int PreviousChannel = CurrentChannel;
int PreviousChannel = cDvbApi::CurrentChannel();
while (!Interrupted) {
// Channel display:
if (CurrentChannel != LastChannel) {
if (cDvbApi::CurrentChannel() != LastChannel) {
if (!Menu)
Menu = new cDisplayChannel(CurrentChannel, LastChannel > 0);
Menu = new cDisplayChannel(cDvbApi::CurrentChannel(), LastChannel > 0);
PreviousChannel = LastChannel;
LastChannel = CurrentChannel;
LastChannel = cDvbApi::CurrentChannel();
}
// Timers and Recordings:
if (!Menu) {
@ -259,7 +259,7 @@ int main(int argc, char *argv[])
switch (key) {
// Toggle channels:
case k0:
if (PreviousChannel != CurrentChannel)
if (PreviousChannel != cDvbApi::CurrentChannel())
Channels.SwitchTo(PreviousChannel);
break;
// Direct Channel Select:
@ -287,7 +287,7 @@ int main(int argc, char *argv[])
case kUp:
case kDown|k_Repeat:
case kDown: if (!Interface->Recording()) {
int n = CurrentChannel + (NORMALKEY(key) == kUp ? 1 : -1);
int n = cDvbApi::CurrentChannel() + (NORMALKEY(key) == kUp ? 1 : -1);
cChannel *channel = Channels.GetByNumber(n);
if (channel)
channel->Switch();