From 6c54311f81ae9fd6b60558522aeb5c80e3a76f66 Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Fri, 21 Mar 2014 13:41:13 +0400 Subject: [PATCH] gui/scan_setup.cpp: add dynamic diseqc options switch based on frontend mode Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/bfc30ae53e819859bb8abfdc7d2e1fbd748db41b Author: [CST] Focus Date: 2014-03-21 (Fri, 21 Mar 2014) --- src/gui/scan_setup.cpp | 38 +++++++++++++++++++++++++++++++++++++- src/gui/scan_setup.h | 1 + 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index e673a8c25..35debb8ad 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -672,6 +672,38 @@ static std::string rotationSpeed2str(int i) return to_string(i/10) + g_Locale->getText(LOCALE_UNIT_DECIMAL) + to_string(i%10) + "°/" + g_Locale->getText(LOCALE_UNIT_SHORT_SECOND); } +static struct CMenuOptionChooser::keyval_ext twin_doptions[2]; +void CScanSetup::setDiseqcOptions(int number) +{ + CFrontend * fe = CFEManager::getInstance()->getFE(number); + + int mode = fe->getMode(); + if (CFrontend::linked(femode)) { + printf("CScanSetup::setDiseqcOptions: set options for linked\n"); + CFrontend * mfe = CFEManager::getInstance()->getFE(femaster); + frontend_config_t & mfe_config = mfe->getConfig(); + + int count = 1; + twin_doptions[0].key = mfe_config.diseqcType; + twin_doptions[0].value = (mfe_config.diseqcType == NO_DISEQC ? LOCALE_SATSETUP_NODISEQC : + mfe_config.diseqcType == MINI_DISEQC ? LOCALE_SATSETUP_MINIDISEQC : + mfe_config.diseqcType == DISEQC_1_0 ? LOCALE_SATSETUP_DISEQC10 : + mfe_config.diseqcType == DISEQC_1_1 ? LOCALE_SATSETUP_DISEQC11 : + mfe_config.diseqcType == DISEQC_ADVANCED ? LOCALE_SATSETUP_DISEQC_ADVANCED : + LOCALE_SATSETUP_UNICABLE); + + if (mode == CFrontend::FE_MODE_LINK_TWIN && mfe_config.diseqcType != DISEQC_UNICABLE) { + count++; + twin_doptions[1].key = DISEQC_UNICABLE; + twin_doptions[1].value = LOCALE_SATSETUP_UNICABLE; + } + dtype->setOptions(twin_doptions, count); + } else if( mode != CFrontend::FE_MODE_UNUSED) { + printf("CScanSetup::setDiseqcOptions: set default options\n"); + dtype->setOptions(SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT); + } +} + int CScanSetup::showFrontendSetup(int number) { int shortcut = 1; @@ -768,6 +800,9 @@ int CScanSetup::showFrontendSetup(int number) dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); setupMenu->addItem(dtype); + if (fecount > 1) + setDiseqcOptions(fenumber); + /* diseqc repeats */ ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, allow_moptions && (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); @@ -1523,7 +1558,6 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); ojDiseqcRepeats->setActive(enable && !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); - } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE)) { printf("[neutrino] CScanSetup::%s: fe%d mode %d master %d\n", __FUNCTION__, fenumber, femode, femaster); @@ -1552,6 +1586,7 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* if (femaster >= 0) fe->setMaster(femaster); } + setDiseqcOptions(fenumber); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE_MASTER)) { printf("[neutrino] CScanSetup::%s: fe%d link %d \n", __FUNCTION__, fenumber, femaster); @@ -1559,6 +1594,7 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); if (fe) fe->setMaster(femaster); + setDiseqcOptions(fenumber); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_CABLESETUP_PROVIDER)) { printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.cableName.c_str()); diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index aa8cb896b..b76dc9784 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -119,6 +119,7 @@ class CScanSetup : public CMenuTarget, public CChangeObserver #ifdef ENABLE_FASTSCAN int showFastscanDiseqcSetup(); #endif + void setDiseqcOptions(int number); void saveScanSetup();