- introduce triple tuner handling

Conflicts:
	src/gui/scan_setup.cpp
This commit is contained in:
TangoCash
2022-08-28 21:16:24 +02:00
committed by Thilo Graf
parent c961ba1aa2
commit c0e29ecbcb
8 changed files with 96 additions and 103 deletions

View File

@@ -2777,9 +2777,10 @@ tmdb.enabled TMDb-Unterstützung
tmdb.head TMDb tmdb.head TMDb
tmdb.read_data Suche TMDb-Daten ... tmdb.read_data Suche TMDb-Daten ...
tunersetup.cable Kabel (DVB-C) tunersetup.cable Kabel (DVB-C)
tunersetup.hybrid Hybrid (DVB-C/T/T2) tunersetup.hybrid Hybrid (DVB-*)
tunersetup.mode Betriebsmodus tunersetup.mode Betriebsmodus
tunersetup.power 5V-Versorgung bei DVB-T/T2 Kanälen tunersetup.power 5V-Versorgung bei DVB-T/T2 Kanälen
tunersetup.sat Satellit (DVB-S/S2)
tunersetup.terr Terrestrisch (DVB-T/T2) tunersetup.terr Terrestrisch (DVB-T/T2)
unicable.lnb Unicable Eingang unicable.lnb Unicable Eingang
unicable.pin Unicable PIN unicable.pin Unicable PIN

View File

@@ -2777,9 +2777,10 @@ tmdb.enabled TMDb support
tmdb.head TMDb tmdb.head TMDb
tmdb.read_data Search TMDb data ... tmdb.read_data Search TMDb data ...
tunersetup.cable Cable (DVB-C) tunersetup.cable Cable (DVB-C)
tunersetup.hybrid Hybrid (DVB-C/T/T2) tunersetup.hybrid Hybrid (DVB-*)
tunersetup.mode Operation mode tunersetup.mode Operation mode
tunersetup.power 5V supply on DVB-T/T2 channels tunersetup.power 5V supply on DVB-T/T2 channels
tunersetup.sat Satellite (DVB-S/S2)
tunersetup.terr Terrestrial (DVB-T/T2) tunersetup.terr Terrestrial (DVB-T/T2)
unicable.lnb Unicable Input unicable.lnb Unicable Input
unicable.pin Unicable PIN unicable.pin Unicable PIN

View File

@@ -376,12 +376,13 @@ const CMenuOptionChooser::keyval SATSETUP_FRONTEND_MODE[SATSETUP_FRONTEND_MODE_C
{ CFrontend::FE_MODE_LINK_TWIN, LOCALE_SATSETUP_FE_MODE_LINK_TWIN } { CFrontend::FE_MODE_LINK_TWIN, LOCALE_SATSETUP_FE_MODE_LINK_TWIN }
}; };
#define FRONTEND_FORCE_MODE_COUNT 3 #define FRONTEND_FORCE_MODE_COUNT 4
const CMenuOptionChooser::keyval FRONTEND_FORCE_MODE[FRONTEND_FORCE_MODE_COUNT] = const CMenuOptionChooser::keyval FRONTEND_FORCE_MODE[FRONTEND_FORCE_MODE_COUNT] =
{ {
{ 0, LOCALE_TUNERSETUP_HYBRID }, { CFEManager::FE_FMODE_HYBRID, LOCALE_TUNERSETUP_HYBRID },
{ 1, LOCALE_TUNERSETUP_CABLE }, { CFEManager::FE_FMODE_CABLE, LOCALE_TUNERSETUP_CABLE },
{ 2, LOCALE_TUNERSETUP_TERR } { CFEManager::FE_FMODE_TERR, LOCALE_TUNERSETUP_TERR },
{ CFEManager::FE_FMODE_SAT, LOCALE_TUNERSETUP_SAT }
}; };
#define SATSETUP_SCANTP_PLM_COUNT 4 #define SATSETUP_SCANTP_PLM_COUNT 4
@@ -621,7 +622,7 @@ int CScanSetup::showScanMenu()
if (CFEManager::getInstance()->haveSat()) { if (CFEManager::getInstance()->haveSat()) {
r_system = ALL_SAT; r_system = ALL_SAT;
//settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM )); settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_TUNERSETUP_SAT ));
satOnOff = new CMenuWidget(LOCALE_SATSETUP_SATELLITE, NEUTRINO_ICON_SETTINGS, width); satOnOff = new CMenuWidget(LOCALE_SATSETUP_SATELLITE, NEUTRINO_ICON_SETTINGS, width);
@@ -636,18 +637,19 @@ int CScanSetup::showScanMenu()
mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO);
settings->addItem(mf); settings->addItem(mf);
//manual scan
CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN);
addScanMenuManualScan(manualScan);
mf = new CMenuDForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", CRCInput::RC_yellow);
mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL);
settings->addItem(mf);
//auto scan all //auto scan all
CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL); CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL);
addScanMenuAutoScanAll(autoScanAll); addScanMenuAutoScanAll(autoScanAll);
fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue); fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue);
fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL); fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL);
settings->addItem(fautoScanAll); settings->addItem(fautoScanAll);
//manual scan
CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN);
addScanMenuManualScan(manualScan);
mf = new CMenuDForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", CRCInput::RC_yellow);
mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL);
settings->addItem(mf);
#ifdef ENABLE_FASTSCAN #ifdef ENABLE_FASTSCAN
//fast scan //fast scan
CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, w, MN_WIDGET_ID_SCAN_FAST_SCAN); CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, w, MN_WIDGET_ID_SCAN_FAST_SCAN);
@@ -656,18 +658,21 @@ int CScanSetup::showScanMenu()
mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST);
settings->addItem(mf); settings->addItem(mf);
#endif #endif
#if 0
//signal test //signal test
CMenuWidget * sTest = new CMenuWidget(LOCALE_SCANTS_TEST, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); CMenuWidget * sTest = new CMenuWidget(LOCALE_SCANTS_TEST, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN);
addScanMenuManualScan(sTest, true); addScanMenuManualScan(sTest, true);
mf = new CMenuDForwarder(LOCALE_SCANTS_TEST, true, NULL, sTest, "", CRCInput::RC_green); mf = new CMenuDForwarder(LOCALE_SCANTS_TEST, true, NULL, sTest, "", CRCInput::RC_green);
mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST);
settings->addItem(mf); settings->addItem(mf);
settings->addItem(GenericMenuSeparatorLine); #endif
//settings->addItem(GenericMenuSeparatorLine);
} }
if (CFEManager::getInstance()->haveCable()) { if (CFEManager::getInstance()->haveCable()) {
r_system = ALL_CABLE; r_system = ALL_CABLE;
settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_TUNERSETUP_CABLE ));
//tune timeout //tune timeout
if(CFEManager::getInstance()->getFrontendCount() <= 1) { if(CFEManager::getInstance()->getFrontendCount() <= 1) {
CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100);
@@ -681,31 +686,34 @@ int CScanSetup::showScanMenu()
char autoscan[64]; char autoscan[64];
std::string s_capt_part = g_Locale->getText(LOCALE_CABLESETUP_PROVIDER); std::string s_capt_part = g_Locale->getText(LOCALE_CABLESETUP_PROVIDER);
snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str());
bool have_sat = CFEManager::getInstance()->haveSat(); bool have_other = !CFEManager::getInstance()->cableOnly();
CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN);
addScanMenuAutoScan(autoScan); addScanMenuAutoScan(autoScan);
mf = new CMenuDForwarder(autoscan, true, NULL, autoScan, "", have_sat ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_red); mf = new CMenuDForwarder(autoscan, true, NULL, autoScan, "", have_other ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_red);
mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO);
settings->addItem(mf); settings->addItem(mf);
//manual scan //manual scan
CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN);
addScanMenuManualScan(manualScan); addScanMenuManualScan(manualScan);
mf = new CMenuDForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_sat ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_yellow); mf = new CMenuDForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_other ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_yellow);
mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL);
settings->addItem(mf); settings->addItem(mf);
//simple cable scan //simple cable scan
CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN); CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN);
addScanMenuCable(cableScan); addScanMenuCable(cableScan);
CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", have_sat ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_blue); CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", have_other ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_blue);
fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE);
settings->addItem(fcableScan); settings->addItem(fcableScan);
settings->addItem(GenericMenuSeparatorLine); //settings->addItem(GenericMenuSeparatorLine);
} }
if (CFEManager::getInstance()->haveTerr()) { if (CFEManager::getInstance()->haveTerr()) {
r_system = ALL_TERR; r_system = ALL_TERR;
settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_TUNERSETUP_TERR ));
// tune timeout, "Setup tuner" is not shown for only one non-sat tuner // tune timeout, "Setup tuner" is not shown for only one non-sat tuner
if (CFEManager::getInstance()->getFrontendCount() <= 1) { if (CFEManager::getInstance()->getFrontendCount() <= 1) {
CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100);
@@ -732,8 +740,11 @@ int CScanSetup::showScanMenu()
mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_other ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_yellow); mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_other ? CRCInput::convertDigitToKey(shortcut++) : CRCInput::RC_yellow);
mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL);
settings->addItem(mf); settings->addItem(mf);
settings->addItem(GenericMenuSeparatorLine); //settings->addItem(GenericMenuSeparatorLine);
} }
settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM ));
//service select mode //service select mode
mc = new CMenuOptionChooser(LOCALE_ZAPIT_SCANTYPE, (int *)&scansettings.scanType, SCANTS_ZAPIT_SCANTYPE, SCANTS_ZAPIT_SCANTYPE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true); mc = new CMenuOptionChooser(LOCALE_ZAPIT_SCANTYPE, (int *)&scansettings.scanType, SCANTS_ZAPIT_SCANTYPE, SCANTS_ZAPIT_SCANTYPE_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true);
mc->setHint("", LOCALE_MENU_HINT_SCAN_SCANTYPE); mc->setHint("", LOCALE_MENU_HINT_SCAN_SCANTYPE);
@@ -812,6 +823,7 @@ int CScanSetup::showScanMenuFrontendSetup()
fe->isHybrid() ? g_Locale->getText(LOCALE_SCANTS_ACTHYBRID) fe->isHybrid() ? g_Locale->getText(LOCALE_SCANTS_ACTHYBRID)
: fe->hasSat() ? g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE) : fe->hasSat() ? g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE)
: fe->hasTerr() ? g_Locale->getText(LOCALE_SCANTS_ACTTERRESTRIAL) : fe->hasTerr() ? g_Locale->getText(LOCALE_SCANTS_ACTTERRESTRIAL)
: fe->hasCable() ? g_Locale->getText(LOCALE_SCANTS_ACTCABLE)
: g_Locale->getText(LOCALE_SCANTS_ACTCABLE), : g_Locale->getText(LOCALE_SCANTS_ACTCABLE),
fe->getName()); fe->getName());
@@ -1007,14 +1019,20 @@ int CScanSetup::showFrontendSetup(int number)
msettings.Clear(); msettings.Clear();
if (fe->hasCable() && fe->hasTerr()) { if (fe->isHybrid()) {
mc = new CMenuOptionChooser(LOCALE_TUNERSETUP_MODE, (int *)&fe_config.force_mode, FRONTEND_FORCE_MODE, FRONTEND_FORCE_MODE_COUNT, true, this); int fm_count = 2;
if (fe->hasTerr())
fm_count = 3;
if (fe->hasSat())
fm_count = FRONTEND_FORCE_MODE_COUNT;
mc = new CMenuOptionChooser(LOCALE_TUNERSETUP_MODE, (int *)&fe_config.force_mode, FRONTEND_FORCE_MODE, fm_count, true, this);
mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE);
setupMenu->addItem(mc); setupMenu->addItem(mc);
} }
if (fe->hasTerr()) { if (fe->hasTerr()) {
tsp = new CMenuOptionChooser(LOCALE_TUNERSETUP_POWER, (int *)&fe_config.powered, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, fe_config.force_mode != 1, this); bool tact = (fe_config.force_mode == CFEManager::FE_FMODE_TERR) || (fe_config.force_mode == CFEManager::FE_FMODE_HYBRID);
tsp = new CMenuOptionChooser(LOCALE_TUNERSETUP_POWER, (int *)&fe_config.powered, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, tact, this);
tsp->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); tsp->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE);
setupMenu->addItem(tsp); setupMenu->addItem(tsp);
} }
@@ -1995,12 +2013,13 @@ printf("[neutrino] CScanSetup::%s: logical numbers %d\n", __FUNCTION__, scansett
else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_TUNERSETUP_MODE)) { else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_TUNERSETUP_MODE)) {
CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); CFrontend * fe = CFEManager::getInstance()->getFE(fenumber);
frontend_config_t & fe_config = fe->getConfig(); frontend_config_t & fe_config = fe->getConfig();
if (fe->hasCable() && fe->hasTerr()) if (fe->isHybrid())
fe->forceDelSys(fe_config.force_mode); fe->forceDelSys(fe_config.force_mode);
if (fe_config.force_mode == 1) if (fe_config.force_mode == CFEManager::FE_FMODE_CABLE)
fe_config.powered = 0; fe_config.powered = 0;
if (tsp) if (tsp)
tsp->setActive(fe_config.force_mode != 1); tsp->setActive(fe_config.force_mode != CFEManager::FE_FMODE_CABLE || fe_config.force_mode != CFEManager::FE_FMODE_SAT);
ret = true; ret = true;
} }
return ret; return ret;

View File

@@ -2807,6 +2807,7 @@ typedef enum
LOCALE_TUNERSETUP_HYBRID, LOCALE_TUNERSETUP_HYBRID,
LOCALE_TUNERSETUP_MODE, LOCALE_TUNERSETUP_MODE,
LOCALE_TUNERSETUP_POWER, LOCALE_TUNERSETUP_POWER,
LOCALE_TUNERSETUP_SAT,
LOCALE_TUNERSETUP_TERR, LOCALE_TUNERSETUP_TERR,
LOCALE_UNICABLE_LNB, LOCALE_UNICABLE_LNB,
LOCALE_UNICABLE_PIN, LOCALE_UNICABLE_PIN,

View File

@@ -2807,6 +2807,7 @@ const char * locale_real_names[] =
"tunersetup.hybrid", "tunersetup.hybrid",
"tunersetup.mode", "tunersetup.mode",
"tunersetup.power", "tunersetup.power",
"tunersetup.sat",
"tunersetup.terr", "tunersetup.terr",
"unicable.lnb", "unicable.lnb",
"unicable.pin", "unicable.pin",

View File

@@ -86,6 +86,12 @@ class CFEManager
FE_MODE_TWIN, FE_MODE_TWIN,
FE_MODE_ALONE FE_MODE_ALONE
} fe_mode_t; } fe_mode_t;
typedef enum {
FE_FMODE_HYBRID,
FE_FMODE_CABLE,
FE_FMODE_TERR,
FE_FMODE_SAT
} fe_fmode_t;
private: private:
fe_map_t femap; fe_map_t femap;
fe_mode_t mode; fe_mode_t mode;

View File

@@ -41,7 +41,7 @@
#include <hardware/dmx.h> #include <hardware/dmx.h>
#include <OpenThreads/ScopedLock> #include <OpenThreads/ScopedLock>
static int fedebug = 0; static int fedebug = 1;
static int unused_demux; static int unused_demux;
static int noSameFE = 0; static int noSameFE = 0;
extern Zapit_config zapitCfg; extern Zapit_config zapitCfg;
@@ -218,28 +218,6 @@ bool CFEManager::loadSettings()
config_exist = false; config_exist = false;
} }
int def_mode0 = CFrontend::FE_MODE_INDEPENDENT;
int def_modeX = CFrontend::FE_MODE_UNUSED;
if (cableOnly())
def_modeX = CFrontend::FE_MODE_INDEPENDENT;
int newmode = (fe_mode_t) configfile.getInt32("mode", -1);
if (newmode >= 0) {
INFO("old mode param: %d\n", newmode);
if (newmode == FE_MODE_LOOP) {
def_mode0 = CFrontend::FE_MODE_MASTER;
def_modeX = CFrontend::FE_MODE_LINK_LOOP;
} else if (newmode == FE_MODE_TWIN) {
def_mode0 = CFrontend::FE_MODE_MASTER;
def_modeX = CFrontend::FE_MODE_LINK_TWIN;
} else if (newmode == FE_MODE_ALONE) {
def_mode0 = CFrontend::FE_MODE_INDEPENDENT;
def_modeX = CFrontend::FE_MODE_INDEPENDENT;
}
}
bool fsat = true;
//bool fcable = true;
bool fterr = true;
for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) {
CFrontend * fe = it->second; CFrontend * fe = it->second;
frontend_config_t & fe_config = fe->getConfig(); frontend_config_t & fe_config = fe->getConfig();
@@ -263,41 +241,10 @@ bool CFEManager::loadSettings()
fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0));
/* default mode for first / next frontends */ if (fe->isHybrid())
int def_mode = def_modeX;
if (fe->hasCable() && fe->hasTerr())
fe->forceDelSys(fe_config.force_mode); fe->forceDelSys(fe_config.force_mode);
if (fe->hasSat() && fsat) { fe->setMode(getConfigValue(fe, "mode", CFrontend::FE_MODE_INDEPENDENT));
fsat = false;
def_mode = def_mode0;
}
if (fe->hasCable()) {
#if 0
if (fcable) {
fcable = false;
def_mode = def_mode0;
}
if (def_mode > CFrontend::FE_MODE_INDEPENDENT)
def_mode = CFrontend::FE_MODE_INDEPENDENT;
#endif
def_mode = CFrontend::FE_MODE_INDEPENDENT;
}
if (fe->hasTerr()) {
if (fterr) {
fterr = false;
def_mode = def_mode0;
}
if (def_mode > CFrontend::FE_MODE_INDEPENDENT)
def_mode = CFrontend::FE_MODE_INDEPENDENT;
}
if (femap.size() == 1)
def_mode = CFrontend::FE_MODE_INDEPENDENT;
fe->setMode(getConfigValue(fe, "mode", def_mode));
fe->setMaster(getConfigValue(fe, "master", 0)); fe->setMaster(getConfigValue(fe, "master", 0));
char cfg_key[81]; char cfg_key[81];
@@ -590,26 +537,37 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel)
for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) {
CFrontend * mfe = it->second; CFrontend * mfe = it->second;
if (!mfe->supportsDelivery(channel->delsys)) // frontend activ
continue;
if (mfe->forcedDelivery(channel->delsys))
continue;
if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode()))
continue;
#if BOXMODEL_MULTIBOXSE
if ((mfe->hasCable() && SAT_POSITION_CABLE(satellitePosition)) || (mfe->hasTerr() && SAT_POSITION_TERR(satellitePosition)))
{ {
retfe = mfe; FEDEBUG("frontend %d not activ, skipping...", mfe->fenumber);
continue;
} }
else
#endif // frontend can requested delivery system
if (mfe->hasSat()) { if (!mfe->supportsDelivery(channel->delsys))
{
FEDEBUG("frontend %d not support delsys, skipping...", mfe->fenumber);
continue;
}
// frontend is hybrid, check if delivery system is forced by user
if (mfe->isHybrid() && mfe->forcedDelivery(channel->delsys))
{
FEDEBUG("frontend %d not support delsys by user, skipping...", mfe->fenumber);
continue;
}
// frontend is sat, and requested position can be serviced
if (mfe->hasSat() && !SAT_POSITION_CABLE(satellitePosition) && !SAT_POSITION_TERR(satellitePosition)) {
satellite_map_t & satmap = mfe->getSatellites(); satellite_map_t & satmap = mfe->getSatellites();
sat_iterator_t sit = satmap.find(satellitePosition); sat_iterator_t sit = satmap.find(satellitePosition);
if ((sit == satmap.end()) || !sit->second.configured) if ((sit == satmap.end()) || !sit->second.configured)
{
FEDEBUG("frontend %d not support requested satpos, skipping...", mfe->fenumber);
continue; continue;
} }
}
if (mfe->getMode() == CFrontend::FE_MODE_MASTER) { if (mfe->getMode() == CFrontend::FE_MODE_MASTER) {
bool have_loop = mfe->have_loop; bool have_loop = mfe->have_loop;

View File

@@ -222,6 +222,9 @@ void CFrontend::getFEInfo(void)
printf("[fe%d/%d] frontend fd %d type %d\n", adapter, fenumber, fd, info.type); printf("[fe%d/%d] frontend fd %d type %d\n", adapter, fenumber, fd, info.type);
bool legacy = true; bool legacy = true;
deliverySystemMask = UNKNOWN_DS;
forcedSystemMask = ALL_CABLE|ALL_TERR|ALL_SAT;
#if HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE #if HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE
std::ifstream in; std::ifstream in;
if (adapter == 0) if (adapter == 0)
@@ -251,9 +254,6 @@ void CFrontend::getFEInfo(void)
} }
#endif // HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE #endif // HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE
deliverySystemMask = UNKNOWN_DS;
forcedSystemMask = UNKNOWN_DS;
#if (DVB_API_VERSION >= 5) && (DVB_API_VERSION_MINOR >= 5) #if (DVB_API_VERSION >= 5) && (DVB_API_VERSION_MINOR >= 5)
dtv_property prop[1]; dtv_property prop[1];
dtv_properties cmdseq; dtv_properties cmdseq;
@@ -840,13 +840,16 @@ void CFrontend::forceDelSys(int i)
{ {
switch (i) { switch (i) {
case 1: case 1:
forcedSystemMask = ALL_TERR;
break;
case 2:
forcedSystemMask = ALL_CABLE; forcedSystemMask = ALL_CABLE;
break; break;
case 2:
forcedSystemMask = ALL_TERR;
break;
case 3:
forcedSystemMask = ALL_SAT;
break;
default: default:
forcedSystemMask = UNKNOWN_DS; forcedSystemMask = ALL_CABLE|ALL_TERR|ALL_SAT;
break; break;
} }
} }
@@ -2597,6 +2600,8 @@ bool CFrontend::hasTerr(void)
bool CFrontend::isHybrid(void) bool CFrontend::isHybrid(void)
{ {
if (hasSat() && hasCable() && hasTerr())
return true;
if (hasSat() && hasCable()) if (hasSat() && hasCable())
return true; return true;
if (hasSat() && hasTerr()) if (hasSat() && hasTerr())
@@ -2620,7 +2625,8 @@ bool CFrontend::supportsDelivery(delivery_system_t delsys)
bool CFrontend::forcedDelivery(delivery_system_t delsys) bool CFrontend::forcedDelivery(delivery_system_t delsys)
{ {
return (forcedSystemMask & delsys) != 0; printf("forcedDelivery: 0x%04x & 0x%04x = 0x%04x\n", forcedSystemMask, delsys, forcedSystemMask & delsys);
return (forcedSystemMask & delsys) == 0;
} }
delivery_system_t CFrontend::getCurrentDeliverySystem(void) delivery_system_t CFrontend::getCurrentDeliverySystem(void)