diff --git a/HISTORY b/HISTORY index a0fc6285..b7801f08 100644 --- a/HISTORY +++ b/HISTORY @@ -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). diff --git a/config.c b/config.c index 0595b105..8d6415b5 100644 --- a/config.c +++ b/config.c @@ -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; diff --git a/config.h b/config.h index f9bd579e..32e92720 100644 --- a/config.h +++ b/config.h @@ -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; diff --git a/dvbapi.c b/dvbapi.c index a2fa9dcb..0737d304 100644 --- a/dvbapi.c +++ b/dvbapi.c @@ -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); diff --git a/dvbapi.h b/dvbapi.h index 6c0b50e7..aa8dbcf3 100644 --- a/dvbapi.h +++ b/dvbapi.h @@ -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 diff --git a/menu.c b/menu.c index 45d0a442..4240beb0 100644 --- a/menu.c +++ b/menu.c @@ -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) { diff --git a/svdrp.c b/svdrp.c index cf91cafb..66ae8e9a 100644 --- a/svdrp.c +++ b/svdrp.c @@ -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) diff --git a/vdr.c b/vdr.c index ee98b6b4..b4230a43 100644 --- a/vdr.c +++ b/vdr.c @@ -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 @@ -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();