Skip to content

Commit

Permalink
- introduce triple tuner handling
Browse files Browse the repository at this point in the history
  • Loading branch information
TangoCash authored and vanhofen committed Aug 28, 2022
1 parent 3a6c21a commit df427f9
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 100 deletions.
3 changes: 2 additions & 1 deletion data/locale/deutsch.locale
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion data/locale/english.locale
Expand Up @@ -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
Expand Down
69 changes: 44 additions & 25 deletions src/gui/scan_setup.cpp
Expand Up @@ -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
Expand Down Expand Up @@ -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);

Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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());

Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions src/system/locals.h
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions src/system/locals_intern.h
Expand Up @@ -2961,6 +2961,7 @@ const char * locale_real_names[] =
"tunersetup.hybrid",
"tunersetup.mode",
"tunersetup.power",
"tunersetup.sat",
"tunersetup.terr",
"unicable.lnb",
"unicable.pin",
Expand Down
6 changes: 6 additions & 0 deletions src/zapit/include/zapit/femanager.h
Expand Up @@ -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;
Expand Down
90 changes: 24 additions & 66 deletions src/zapit/src/femanager.cpp
Expand Up @@ -41,7 +41,7 @@
#include <hardware/dmx.h>
#include <OpenThreads/ScopedLock>

static int fedebug = 0;
static int fedebug = 1;
static int unused_demux;
static int noSameFE = 0;
extern Zapit_config zapitCfg;
Expand Down Expand Up @@ -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();
Expand All @@ -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];
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit df427f9

Please sign in to comment.