The Setup/CICAM menu now only contains the devices that actually have a CI and dynamically detects the number of slots a CI provides

This commit is contained in:
Klaus Schmidinger 2005-08-26 12:49:26 +02:00
parent 60d77a9171
commit ed807972ac
3 changed files with 52 additions and 62 deletions

View File

@ -3717,6 +3717,8 @@ Video Disk Recorder Revision History
functions to avoid problems on platforms that don't provide these (thanks to
David Woodhouse for his help).
2005-08-21: Version 1.3.31
2005-08-26: Version 1.3.31
- Added missing German OSD texts for 'Audio language'.
- The Setup/CICAM menu now only contains the devices that actually have a CI and
dynamically detects the number of slots a CI provides.

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.224 2005/08/20 10:29:35 kls Exp $
* $Id: config.h 1.225 2005/08/26 12:28:40 kls Exp $
*/
#ifndef __CONFIG_H
@ -20,8 +20,8 @@
#include "i18n.h"
#include "tools.h"
#define VDRVERSION "1.3.30"
#define VDRVERSNUM 10330 // Version * 10000 + Major * 100 + Minor
#define VDRVERSION "1.3.31"
#define VDRVERSNUM 10331 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99
#define MAXLIFETIME 99

104
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.355 2005/08/14 15:14:29 kls Exp $
* $Id: menu.c 1.356 2005/08/26 12:49:26 kls Exp $
*/
#include "menu.h"
@ -2122,11 +2122,28 @@ eOSState cMenuSetupLNB::ProcessKey(eKeys Key)
// --- cMenuSetupCICAM -------------------------------------------------------
class cMenuSetupCICAMItem : public cOsdItem {
private:
cCiHandler *ciHandler;
int slot;
public:
cMenuSetupCICAMItem(int Device, cCiHandler *CiHandler, int Slot);
cCiHandler *CiHandler(void) { return ciHandler; }
int Slot(void) { return slot; }
};
cMenuSetupCICAMItem::cMenuSetupCICAMItem(int Device, cCiHandler *CiHandler, int Slot)
{
ciHandler = CiHandler;
slot = Slot;
char buffer[32];
const char *CamName = CiHandler->GetCamName(slot);
snprintf(buffer, sizeof(buffer), "%s%d %d\t%s", tr("Setup.CICAM$CICAM DVB"), Device + 1, slot + 1, CamName ? CamName : "-");
SetText(buffer);
}
class cMenuSetupCICAM : public cMenuSetupBase {
private:
int helpKeys;
void SetHelpKeys(void);
cCiHandler *GetCurrentCiHandler(int *Slot = NULL);
eOSState Menu(void);
eOSState Reset(void);
public:
@ -2136,66 +2153,43 @@ public:
cMenuSetupCICAM::cMenuSetupCICAM(void)
{
helpKeys = -1;
SetSection(tr("CICAM"));
for (int d = 0; d < cDevice::NumDevices(); d++) {
cDevice *Device = cDevice::GetDevice(d);
cCiHandler *CiHandler = Device->CiHandler();
for (int Slot = 0; Slot < 2; Slot++) {
char buffer[32];
int CardIndex = Device->CardIndex();
const char *CamName = CiHandler ? CiHandler->GetCamName(Slot) : NULL;
if (!CamName)
CamName = "-";
snprintf(buffer, sizeof(buffer), "%s%d %d\t%s", tr("Setup.CICAM$CICAM DVB"), CardIndex + 1, Slot + 1, CamName);
Add(new cOsdItem(buffer));
}
if (Device) {
cCiHandler *CiHandler = Device->CiHandler();
if (CiHandler) {
for (int Slot = 0; Slot < CiHandler->NumSlots(); Slot++)
Add(new cMenuSetupCICAMItem(Device->CardIndex(), CiHandler, Slot));
}
}
}
SetHelpKeys();
}
cCiHandler *cMenuSetupCICAM::GetCurrentCiHandler(int *Slot)
{
cDevice *Device = cDevice::GetDevice(Current() / 2);
if (Slot)
*Slot = Current() % 2;
return Device ? Device->CiHandler() : NULL;
}
void cMenuSetupCICAM::SetHelpKeys(void)
{
int NewHelpKeys = helpKeys;
NewHelpKeys = GetCurrentCiHandler() ? 1 : 0;
if (NewHelpKeys != helpKeys) {
switch (NewHelpKeys) {
case 0: SetHelp(NULL); break;
case 1: SetHelp(tr("Menu"), tr("Reset"));
}
helpKeys = NewHelpKeys;
}
SetHelp(tr("Menu"), tr("Reset"));
}
eOSState cMenuSetupCICAM::Menu(void)
{
int Slot = 0;
cCiHandler *CiHandler = GetCurrentCiHandler(&Slot);
if (CiHandler && CiHandler->EnterMenu(Slot))
return osEnd; // the CAM menu will be executed explicitly from the main loop
else
Skins.Message(mtError, tr("Can't open CAM menu!"));
cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
if (item) {
if (item->CiHandler()->EnterMenu(item->Slot()))
return osEnd; // the CAM menu will be executed explicitly from the main loop
else
Skins.Message(mtError, tr("Can't open CAM menu!"));
}
return osContinue;
}
eOSState cMenuSetupCICAM::Reset(void)
{
int Slot = 0;
cCiHandler *CiHandler = GetCurrentCiHandler(&Slot);
if (CiHandler && CiHandler->Reset(Slot)) {
Skins.Message(mtInfo, tr("CAM has been reset"));
return osEnd;
cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
if (item) {
if (item->CiHandler()->Reset(item->Slot())) {
Skins.Message(mtInfo, tr("CAM has been reset"));
return osEnd;
}
else
Skins.Message(mtError, tr("Can't reset CAM!"));
}
else
Skins.Message(mtError, tr("Can't reset CAM!"));
return osContinue;
}
@ -2205,17 +2199,11 @@ eOSState cMenuSetupCICAM::ProcessKey(eKeys Key)
if (state == osUnknown) {
switch (Key) {
case kRed: if (helpKeys == 1)
return Menu();
break;
case kGreen: if (helpKeys == 1)
return Reset();
break;
case kRed: return Menu();
case kGreen: return Reset();
default: break;
}
}
if (Key != kNone)
SetHelpKeys();
return state;
}