diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 3a14c3784..0ff686a45 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -2931,9 +2931,10 @@ tmdb.enabled TMDb-Unterstützung tmdb.head TMDb tmdb.read_data Suche TMDb-Daten ... tunersetup.cable Kabel (DVB-C) -tunersetup.hybrid Hybrid (DVB-C/T/T2) +tunersetup.hybrid Hybrid (DVB-*) tunersetup.mode Betriebsmodus tunersetup.power 5V-Versorgung bei DVB-T/T2 Kanälen +tunersetup.sat Satellit (DVB-S/S2) tunersetup.terr Terrestrisch (DVB-T/T2) unicable.lnb Unicable Eingang unicable.pin Unicable PIN diff --git a/data/locale/english.locale b/data/locale/english.locale index 9c888c066..da56d4cd0 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -2931,9 +2931,10 @@ tmdb.enabled TMDb support tmdb.head TMDb tmdb.read_data Search TMDb data ... tunersetup.cable Cable (DVB-C) -tunersetup.hybrid Hybrid (DVB-C/T/T2) +tunersetup.hybrid Hybrid (DVB-*) tunersetup.mode Operation mode tunersetup.power 5V supply on DVB-T/T2 channels +tunersetup.sat Satellite (DVB-S/S2) tunersetup.terr Terrestrial (DVB-T/T2) unicable.lnb Unicable Input unicable.pin Unicable PIN diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index f492d153c..86fd73ceb 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -383,12 +383,13 @@ const CMenuOptionChooser::keyval SATSETUP_FRONTEND_MODE[SATSETUP_FRONTEND_MODE_C { 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] = { - { 0, LOCALE_TUNERSETUP_HYBRID }, - { 1, LOCALE_TUNERSETUP_CABLE }, - { 2, LOCALE_TUNERSETUP_TERR } + { CFEManager::FE_FMODE_HYBRID, LOCALE_TUNERSETUP_HYBRID }, + { CFEManager::FE_FMODE_CABLE, LOCALE_TUNERSETUP_CABLE }, + { CFEManager::FE_FMODE_TERR, LOCALE_TUNERSETUP_TERR }, + { CFEManager::FE_FMODE_SAT, LOCALE_TUNERSETUP_SAT } }; #define SATSETUP_SCANTP_PLM_COUNT 4 @@ -628,7 +629,7 @@ int CScanSetup::showScanMenu() if (CFEManager::getInstance()->haveSat()) { 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); @@ -643,18 +644,19 @@ int CScanSetup::showScanMenu() mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); 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 CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL); addScanMenuAutoScanAll(autoScanAll); fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue); fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL); 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 //fast scan CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, w, MN_WIDGET_ID_SCAN_FAST_SCAN); @@ -663,18 +665,21 @@ int CScanSetup::showScanMenu() mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); settings->addItem(mf); #endif +#if 0 //signal test CMenuWidget * sTest = new CMenuWidget(LOCALE_SCANTS_TEST, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); addScanMenuManualScan(sTest, true); mf = new CMenuDForwarder(LOCALE_SCANTS_TEST, true, NULL, sTest, "", CRCInput::RC_green); mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); settings->addItem(mf); - settings->addItem(GenericMenuSeparatorLine); +#endif + //settings->addItem(GenericMenuSeparatorLine); } if (CFEManager::getInstance()->haveCable()) { r_system = ALL_CABLE; + settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_TUNERSETUP_CABLE )); //tune timeout if(CFEManager::getInstance()->getFrontendCount() <= 1) addScanMenuFrontendOptions(settings); @@ -684,31 +689,34 @@ int CScanSetup::showScanMenu() char autoscan[64]; 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()); - 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); 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); 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, "", 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); settings->addItem(mf); //simple cable scan CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN); 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); settings->addItem(fcableScan); - settings->addItem(GenericMenuSeparatorLine); + //settings->addItem(GenericMenuSeparatorLine); } if (CFEManager::getInstance()->haveTerr()) { 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 if (CFEManager::getInstance()->getFrontendCount() <= 1) addScanMenuFrontendOptions(settings); @@ -717,7 +725,7 @@ int CScanSetup::showScanMenu() char autoscan[64]; std::string s_capt_part = g_Locale->getText(LOCALE_TERRESTRIALSETUP_PROVIDER); snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); - bool have_other = ! CFEManager::getInstance()->terrOnly(); + bool have_other = !CFEManager::getInstance()->terrOnly(); /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w, MN_WIDGET_ID_SCAN_AUTO_SCAN); @@ -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->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); 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 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); @@ -828,6 +839,7 @@ int CScanSetup::showScanMenuFrontendSetup() fe->isHybrid() ? g_Locale->getText(LOCALE_SCANTS_ACTHYBRID) : fe->hasSat() ? g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE) : fe->hasTerr() ? g_Locale->getText(LOCALE_SCANTS_ACTTERRESTRIAL) + : fe->hasCable() ? g_Locale->getText(LOCALE_SCANTS_ACTCABLE) : g_Locale->getText(LOCALE_SCANTS_ACTCABLE), fe->getName()); @@ -1020,14 +1032,20 @@ int CScanSetup::showFrontendSetup(int number) msettings.Clear(); - if (fe->hasCable() && fe->hasTerr()) { - mc = new CMenuOptionChooser(LOCALE_TUNERSETUP_MODE, (int *)&fe_config.force_mode, FRONTEND_FORCE_MODE, FRONTEND_FORCE_MODE_COUNT, true, this); + if (fe->isHybrid()) { + 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); setupMenu->addItem(mc); } 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); setupMenu->addItem(tsp); } @@ -2009,12 +2027,13 @@ printf("[neutrino] CScanSetup::%s: logical numbers %d\n", __FUNCTION__, scansett else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_TUNERSETUP_MODE)) { CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); frontend_config_t & fe_config = fe->getConfig(); - if (fe->hasCable() && fe->hasTerr()) + if (fe->isHybrid()) 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; 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; } return ret; diff --git a/src/system/locals.h b/src/system/locals.h index 2b44f8147..0d3512661 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -2961,6 +2961,7 @@ typedef enum LOCALE_TUNERSETUP_HYBRID, LOCALE_TUNERSETUP_MODE, LOCALE_TUNERSETUP_POWER, + LOCALE_TUNERSETUP_SAT, LOCALE_TUNERSETUP_TERR, LOCALE_UNICABLE_LNB, LOCALE_UNICABLE_PIN, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 80e4308ea..6e3a3001c 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -2961,6 +2961,7 @@ const char * locale_real_names[] = "tunersetup.hybrid", "tunersetup.mode", "tunersetup.power", + "tunersetup.sat", "tunersetup.terr", "unicable.lnb", "unicable.pin", diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index 4356dd4d2..c71fbd528 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -86,6 +86,12 @@ class CFEManager FE_MODE_TWIN, FE_MODE_ALONE } fe_mode_t; + typedef enum { + FE_FMODE_HYBRID, + FE_FMODE_CABLE, + FE_FMODE_TERR, + FE_FMODE_SAT + } fe_fmode_t; private: fe_map_t femap; fe_mode_t mode; diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index ba582ce30..043f9e972 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -41,7 +41,7 @@ #include #include -static int fedebug = 0; +static int fedebug = 1; static int unused_demux; static int noSameFE = 0; extern Zapit_config zapitCfg; @@ -219,28 +219,6 @@ bool CFEManager::loadSettings() 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++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -264,41 +242,10 @@ bool CFEManager::loadSettings() fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); - /* default mode for first / next frontends */ - int def_mode = def_modeX; - - if (fe->hasCable() && fe->hasTerr()) + if (fe->isHybrid()) fe->forceDelSys(fe_config.force_mode); - if (fe->hasSat() && fsat) { - 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->setMode(getConfigValue(fe, "mode", CFrontend::FE_MODE_INDEPENDENT)); fe->setMaster(getConfigValue(fe, "master", 0)); char cfg_key[81]; @@ -591,25 +538,36 @@ CFrontend * CFEManager::getFrontend(CZapitChannel * channel) for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; - if (!mfe->supportsDelivery(channel->delsys)) - continue; - if (mfe->forcedDelivery(channel->delsys)) - continue; + // frontend activ if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) + { + FEDEBUG("frontend %d not activ, skipping...", mfe->fenumber); continue; + } -#if BOXMODEL_MULTIBOXSE - if ((mfe->hasCable() && SAT_POSITION_CABLE(satellitePosition)) || (mfe->hasTerr() && SAT_POSITION_TERR(satellitePosition))) + // frontend can requested delivery system + if (!mfe->supportsDelivery(channel->delsys)) { - retfe = mfe; + FEDEBUG("frontend %d not support delsys, skipping...", mfe->fenumber); + continue; } - else -#endif - if (mfe->hasSat()) { + + // 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(); sat_iterator_t sit = satmap.find(satellitePosition); if ((sit == satmap.end()) || !sit->second.configured) + { + FEDEBUG("frontend %d not support requested satpos, skipping...", mfe->fenumber); continue; + } } if (mfe->getMode() == CFrontend::FE_MODE_MASTER) { diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 80ec5f930..3d6d2eab0 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -222,6 +222,9 @@ void CFrontend::getFEInfo(void) printf("[fe%d/%d] frontend fd %d type %d\n", adapter, fenumber, fd, info.type); bool legacy = true; + deliverySystemMask = UNKNOWN_DS; + forcedSystemMask = ALL_CABLE|ALL_TERR|ALL_SAT; + #if HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE std::ifstream in; if (adapter == 0) @@ -251,9 +254,6 @@ void CFrontend::getFEInfo(void) } #endif // HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE - deliverySystemMask = UNKNOWN_DS; - forcedSystemMask = UNKNOWN_DS; - #if (DVB_API_VERSION >= 5) && (DVB_API_VERSION_MINOR >= 5) dtv_property prop[1]; dtv_properties cmdseq; @@ -840,13 +840,16 @@ void CFrontend::forceDelSys(int i) { switch (i) { case 1: - forcedSystemMask = ALL_TERR; + forcedSystemMask = ALL_CABLE; break; case 2: - forcedSystemMask = ALL_CABLE; + forcedSystemMask = ALL_TERR; + break; + case 3: + forcedSystemMask = ALL_SAT; break; default: - forcedSystemMask = UNKNOWN_DS; + forcedSystemMask = ALL_CABLE|ALL_TERR|ALL_SAT; break; } } @@ -2597,6 +2600,8 @@ bool CFrontend::hasTerr(void) bool CFrontend::isHybrid(void) { + if (hasSat() && hasCable() && hasTerr()) + return true; if (hasSat() && hasCable()) return true; if (hasSat() && hasTerr()) @@ -2620,7 +2625,8 @@ bool CFrontend::supportsDelivery(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)