void CFEManager::Open() { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; if(!fe->Locked()) fe->Open(true); } }
CFrontend * CFEManager::getScanFrontend(t_satellite_position satellitePosition) { CFrontend * frontend = NULL; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; if (mfe->hasCable() && SAT_POSITION_CABLE(satellitePosition)) { if (mfe->getMode() != CFrontend::FE_MODE_UNUSED) { frontend = mfe; break; } } else if (mfe->hasTerr() && SAT_POSITION_TERR(satellitePosition)) { if (mfe->getMode() != CFrontend::FE_MODE_UNUSED) { frontend = mfe; break; } } else if (mfe->hasSat()) { if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) continue; satellite_map_t & satmap = mfe->getSatellites(); sat_iterator_t sit = satmap.find(satellitePosition); if ((sit != satmap.end()) && sit->second.configured) { frontend = mfe; break; } } } INFO("Selected fe: %d", frontend ? frontend->fenumber : -1); return frontend; }
void CFEManager::Close() { if(have_locked) return; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; if(!fe->Locked()) fe->Close(); } }
// FIXME bool CFEManager::haveFreeFrontend() { if(have_locked) { CFrontend * fe = getFE(0); if((mode == FE_MODE_TWIN) || (fe->getInfo()->type != FE_QPSK)) { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { fe = it->second; INFO("check %d: locked %d", fe->fenumber, fe->Locked()); if(!fe->Locked()) return true; } } return false; } return true; }
bool CFEManager::Init() { CFrontend * fe; unsigned short fekey; OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex); have_sat = have_cable = have_terr = false; for(int i = 0; i < MAX_ADAPTERS; i++) { for(int j = 0; j < MAX_FE; j++) { fe = new CFrontend(j, i); if(fe->Open()) { fekey = MAKE_FE_KEY(i, j); femap.insert(std::pair <unsigned short, CFrontend*> (fekey, fe)); INFO("add fe %d", fe->fenumber); if(livefe == NULL) livefe = fe; if (fe->hasSat()) have_sat = true; if (fe->hasCable()) have_cable = true; if (fe->hasTerr()) have_terr = true; } else delete fe; } } for (unsigned i = 0; i < MAX_DMX_UNITS; i++) dmap.push_back(CFeDmx(i)); INFO("found %d frontends, %d demuxes\n", (int)femap.size(), (int)dmap.size()); /* for testing without a frontend, export SIMULATE_FE=1 */ if (femap.empty() && getenv("SIMULATE_FE")) { INFO("SIMULATE_FE is set, adding dummy frontend for testing"); fe = new CFrontend(0,0); fekey = MAKE_FE_KEY(0, 0); femap.insert(std::pair <unsigned short, CFrontend*> (fekey, fe)); livefe = fe; } if (femap.empty()) return false; return true; }
bool CFEManager::unlockFrontend(CFrontend * frontend, bool unlock_demux) { OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex); have_locked = false; frontend->Unlock(); if (unlock_demux) { #ifdef DYNAMIC_DEMUX for (unsigned int i = 1; i < dmap.size(); i++) { if(dmap[i].tpid == frontend->getTsidOnid()) { dmap[i].Unlock(); break; } } #endif } for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; if(fe->Locked()) { have_locked = true; break; } } return true; }
void CFEManager::saveSettings(bool write) { configfile.clear(); satellite_map_t &satlist = CServiceManager::getInstance()->SatelliteList(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); INFO("fe%d", fe->fenumber); setConfigValue(fe, "diseqcType", fe_config.diseqcType); setConfigValue(fe, "diseqcRepeats", fe_config.diseqcRepeats); setConfigValue(fe, "motorRotationSpeed", fe_config.motorRotationSpeed); setConfigValue(fe, "highVoltage", fe_config.highVoltage); setConfigValue(fe, "uni_scr", fe_config.uni_scr); setConfigValue(fe, "uni_qrg", fe_config.uni_qrg); setConfigValue(fe, "diseqc_order", fe_config.diseqc_order); setConfigValue(fe, "use_usals", fe_config.use_usals); setConfigValue(fe, "rotor_swap", fe_config.rotor_swap); setConfigValue(fe, "lastSatellitePosition", fe->getRotorSatellitePosition()); setConfigValue(fe, "mode", fe->getMode()); setConfigValue(fe, "master", fe->getMaster()); std::vector<int> satList; satellite_map_t satellites = fe->getSatellites(); for(sat_iterator_t sit = satellites.begin(); sit != satellites.end(); ++sit) { if (sit->second.configured) { sat_iterator_t tit = satlist.find(sit->first); if (tit != satlist.end()) sit->second.use_in_scan = tit->second.use_in_scan; satList.push_back(sit->first); setSatelliteConfig(fe, sit->second); } } char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); configfile.setInt32Vector(cfg_key, satList); } if (write && configfile.getModifiedFlag()) { config_exist = configfile.saveConfig(FECONFIGFILE); //configfile.setModifiedFlag(false); } }
// load transponders int loadTransponders() { bool satcleared = 0; scnt = 0; t_satellite_position position = 0; //first postion dprintf(DEBUG_NORMAL, "getServices:loadTransponders:\n"); select_transponders.clear(); fake_tid = fake_nid = 0; if(!satcleared) satellitePositions.clear(); satcleared = 1; fe_type_t fe_type = FE_QAM; // parse sat tp for(int i = 0; i < FrontendCount; i++) { CFrontend * fe = getFE(i); fe_type = fe->getInfo()->type; //parseScanInputXml(i); parseScanInputXml(fe_type); if ( scanInputParser != NULL ) { xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; while (search) { if (!(strcmp(xmlGetName(search), "sat"))) { // position position = xmlGetSignedNumericAttribute(search, "position", 10); char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type satellitePositions[position].type = DVB_S; } else if(!(strcmp(xmlGetName(search), "cable"))) { //flags ??? //satfeed ??? char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_C; } else if(!(strcmp(xmlGetName(search), "terrestrial"))) { char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_T; } // parse sat TP ParseSatTransponders(fe_type, search, position); position++; search = search->xmlNextNode; } } } // satip if(g_settings.satip_allow_satip) { if(g_settings.satip_serverbox_type == DVB_C) fe_type = FE_QAM; else if(g_settings.satip_serverbox_type == DVB_S) fe_type = FE_QPSK; else if(g_settings.satip_serverbox_type == DVB_T) fe_type = FE_OFDM; parseScanInputXml(fe_type); if ( scanInputParser != NULL ) { xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; while (search) { if (!(strcmp(xmlGetName(search), "sat"))) { // position position = xmlGetSignedNumericAttribute(search, "position", 10); char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type satellitePositions[position].type = DVB_S; } else if(!(strcmp(xmlGetName(search), "cable"))) { //flags ??? //satfeed ??? char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_C; } else if(!(strcmp(xmlGetName(search), "terrestrial"))) { char * name = xmlGetAttribute(search, "name"); if(satellitePositions.find(position) == satellitePositions.end()) { init_sat(position); } // name satellitePositions[position].name = name; // type //needed to resort list for scan menue satellitePositions[position].type = DVB_T; } // parse sat TP ParseSatTransponders(fe_type, search, position); position++; search = search->xmlNextNode; } } } return 0; }
// scan services.xml void FindTransponder(xmlNodePtr search) { t_satellite_position satellitePosition = 0; uint8_t Source; newtpid = 0xC000; bool have_s = false; bool have_c = false; bool have_t = false; // frontend type for(int i = 0; i < FrontendCount; i++) { CFrontend * fe = getFE(i); if( fe->getDeliverySystem() == DVB_S ) have_s = true; if( fe->getDeliverySystem() == DVB_C ) have_c = true; if( fe->getDeliverySystem() == DVB_T ) have_t = true; } // satip if(g_settings.satip_allow_satip) { if(g_settings.satip_serverbox_type == DVB_C) have_c = true; else if(g_settings.satip_serverbox_type == DVB_S) have_s = true; else if(g_settings.satip_serverbox_type == DVB_T) have_t = true; } while (search) { if ( !(strcmp(xmlGetName(search), "cable")) && have_c) { Source = DVB_C; for (sat_iterator_t spos_it = satellitePositions.begin(); spos_it != satellitePositions.end(); spos_it++) { if( !strcmp(spos_it->second.name.c_str(), xmlGetAttribute(search, "name")) ) { satellitePosition = spos_it->first; break; } } dprintf(DEBUG_NORMAL, "getservices:FindTransponder: going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name")); } else if ( !(strcmp(xmlGetName(search), "terrestrial")) && have_t) { Source = DVB_T; for (sat_iterator_t spos_it = satellitePositions.begin(); spos_it != satellitePositions.end(); spos_it++) { if( !strcmp(spos_it->second.name.c_str(), xmlGetAttribute(search, "name")) ) { satellitePosition = spos_it->first; break; } } dprintf(DEBUG_NORMAL, "getservices:FindTransponder: going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name")); } else if ( !(strcmp(xmlGetName(search), "sat")) && have_s) { Source = DVB_S; satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10); dprintf(DEBUG_NORMAL, "getservices:FindTransponder: going to parse dvb-%c provider %s position %d\n", xmlGetName(search)[0], xmlGetAttribute(search, "name"), satellitePosition); } else // unknow { search = search->xmlNextNode; continue; } // parse TP ParseTransponders(search->xmlChildrenNode, satellitePosition, Source ); newfound++; search = search->xmlNextNode; } }
int CCAMMenuHandler::doMainMenu() { int ret, cnt; char name1[255]={0}; char str1[255]={0}; int CiSlots = ca->GetNumberCISlots(); CMenuWidget* cammenu = new CMenuWidget(LOCALE_CI_SETTINGS, NEUTRINO_ICON_SETTINGS); cammenu->addIntroItems(); #ifdef BOXMODEL_APOLLO int fecount = CFEManager::getInstance()->getFrontendCount(); char fename[fecount+1][255]; #endif if (!g_settings.easymenu) { if(CiSlots) { cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_RESET_STANDBY, &g_settings.ci_standby_reset, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); cammenu->addItem( new CMenuOptionNumberChooser(LOCALE_CI_CLOCK, &g_settings.ci_clock, true, 6, 12, this)); } cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_IGNORE_MSG, &g_settings.ci_ignore_messages, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_SAVE_PINCODE, &g_settings.ci_save_pincode, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this)); #ifdef BOXMODEL_APOLLO CMenuOptionChooser::keyval_ext feselect[fecount+1]; feselect[0].key = -1; feselect[0].value = NONEXISTANT_LOCALE; feselect[0].valname = g_Locale->getText(LOCALE_OPTIONS_OFF); int select_count = 1; for (int i = 0; i < fecount; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); int num = fe->getNumber(); snprintf(fename[select_count], sizeof(fename[select_count]), "%d: %s", num+1, fe->getName()); feselect[select_count].key = num; feselect[select_count].value = NONEXISTANT_LOCALE; feselect[select_count].valname = fename[select_count]; select_count++; } CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_CI_TUNER, &g_settings.ci_tuner, feselect, select_count, true, this); cammenu->addItem(mc); #endif cammenu->addItem( GenericMenuSeparatorLine ); } CMenuWidget * tempMenu; int i = 0; cnt = 0; printf("CCAMMenuHandler::doMainMenu CI slots: %d\n", CiSlots); while (i < CiSlots && i < 2) { if (ca->ModulePresent(CA_SLOT_TYPE_CI, i)) { ca->ModuleName(CA_SLOT_TYPE_CI, i, name1); printf("CCAMMenuHandler::doMainMenu cam%d name %s\n", i, name1); char tmp[32]; snprintf(tmp, sizeof(tmp), "ca_ci%d", i); cammenu->addItem(new CMenuForwarder(name1, true, NULL, this, tmp, CRCInput::RC_1 + cnt++)); snprintf(tmp, sizeof(tmp), "ca_ci_reset%d", i); cammenu->addItem(new CMenuForwarder(LOCALE_CI_RESET, true, NULL, this, tmp)); memset(name1,0,sizeof(name1)); } else { snprintf(str1, sizeof(str1), "%s %d", g_Locale->getText(LOCALE_CI_EMPTY), i); tempMenu = new CMenuWidget(str1, NEUTRINO_ICON_SETTINGS); cammenu->addItem(new CMenuDForwarder(str1, false, NULL, tempMenu)); memset(str1,0,sizeof(str1)); } if (i < (CiSlots - 1)) cammenu->addItem( GenericMenuSeparatorLine ); i++; } i = 0; int ScNum = ca->GetNumberSmartCardSlots(); printf("CCAMMenuHandler::doMainMenu sc slots: %d\n", ScNum); if(ScNum && CiSlots) cammenu->addItem( GenericMenuSeparatorLine ); while (i < ScNum && i < 2) { if (ca->ModulePresent(CA_SLOT_TYPE_SMARTCARD, i)) { ca->ModuleName(CA_SLOT_TYPE_SMARTCARD, i, name1); printf("CCAMMenuHandler::doMainMenu cam%d name %s\n", i, name1); char tmp[32]; snprintf(tmp, sizeof(tmp), "ca_sc%d", i); cammenu->addItem(new CMenuForwarder(name1, true, NULL, this, tmp, CRCInput::RC_1 + cnt++)); #if 0 // FIXME not implemented yet snprintf(tmp, sizeof(tmp), "ca_sc_reset%d", i); cammenu->addItem(new CMenuForwarder(LOCALE_SC_RESET, true, NULL, this, tmp)); #endif memset(name1,0,sizeof(name1)); } else { snprintf(str1, sizeof(str1), "%s %d", g_Locale->getText(LOCALE_SC_EMPTY), i); tempMenu = new CMenuWidget(str1, NEUTRINO_ICON_SETTINGS); cammenu->addItem(new CMenuDForwarder(str1, false, NULL, tempMenu)); memset(str1,0,sizeof(str1)); } if (i < (ScNum - 1)) cammenu->addItem( GenericMenuSeparatorLine ); i++; } in_menu = true; ret = cammenu->exec(NULL, ""); delete cammenu; in_menu = false; return ret; }
CFrontend * CFEManager::getFrontend(CZapitChannel * channel) { CFrontend * retfe = NULL; if (livefe && livefe->tuned && livefe->sameTsidOnid(channel->getTransponderId())) { FEDEBUG("live fe %d on the same TP", livefe->fenumber); return livefe; } t_satellite_position satellitePosition = channel->getSatellitePosition(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * mfe = it->second; if (!mfe->supportsDelivery(channel->delsys)) continue; if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) continue; if (mfe->hasSat()) { satellite_map_t & satmap = mfe->getSatellites(); sat_iterator_t sit = satmap.find(satellitePosition); if ((sit == satmap.end()) || !sit->second.configured) continue; } if (mfe->getMode() == CFrontend::FE_MODE_MASTER) { bool have_loop = mfe->have_loop; CFrontend * free_frontend = NULL; CFrontend * free_twin = NULL; bool loop_busy = false; for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { CFrontend * fe = mfe->linkmap[i]; FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64, fe->fenumber, fe->getMode(), fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); if(fe->Locked()) { if (mfe->have_rotor && (fe->getCurrentSatellitePosition() != satellitePosition)) { free_frontend = NULL; free_twin = NULL; break; } if (fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { FEDEBUG("fe %d on the same TP", fe->fenumber); return fe; } if (!loop_busy && fe->getMode() != CFrontend::FE_MODE_LINK_TWIN) { if (have_loop && !loopCanTune(fe, channel)) { free_frontend = NULL; loop_busy = true; } } } else { if (fe->getMode() == CFrontend::FE_MODE_LINK_TWIN) { if (!free_twin) free_twin = fe; } else if(!loop_busy && !free_frontend) { free_frontend = fe; } } } if (!free_frontend) free_frontend = free_twin; if (free_frontend && !retfe) retfe = free_frontend; } if (mfe->getMode() == CFrontend::FE_MODE_INDEPENDENT) { FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64, mfe->fenumber, mfe->getMode(), mfe->Locked(), mfe->getFrequency(), mfe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); if(mfe->Locked()) { if(mfe->tuned && mfe->sameTsidOnid(channel->getTransponderId())) { FEDEBUG("fe %d on the same TP", mfe->fenumber); return mfe; } } else if(!retfe) retfe = mfe; } } FEDEBUG("Selected fe: %d", retfe ? retfe->fenumber : -1); return retfe; }
void CFEManager::linkFrontends(bool init) { INFO("linking.."); OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex); enabled_count = 0; unused_demux = 0; int demuxes[MAX_DMX_UNITS]; for(unsigned i = 0; i < MAX_DMX_UNITS; i++) demuxes[i] = 0; demuxes[0] = 1; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; int femode = fe->getMode(); fe->slave = false; fe->have_loop = false; fe->have_rotor = false; fe->linkmap.clear(); if (femode == CFrontend::FE_MODE_MASTER) { fe->linkmap.push_back(fe); /* fe is master, find all linked */ for(fe_map_iterator_t it2 = femap.begin(); it2 != femap.end(); it2++) { CFrontend * fe2 = it2->second; if (!CFrontend::linked(fe2->getMode())) continue; if (fe2->getType() != fe->getType() || (fe2->getMaster() != fe->fenumber)) continue; fe->linkmap.push_back(fe2); if (fe2->getMode() == CFrontend::FE_MODE_LINK_LOOP) { INFO("Frontend #%d: link to master %d as LOOP", fe2->fenumber, fe->fenumber); fe->have_loop = true; } else { INFO("Frontend #%d: link to master %d as TWIN", fe2->fenumber, fe->fenumber); } } frontend_config_t & fe_config = fe->getConfig(); satellite_map_t &satellites = fe->getSatellites(); for(sat_iterator_t sit = satellites.begin(); sit != satellites.end(); ++sit) { if (fe_config.use_usals || (sit->second.configured && (sit->second.motor_position || sit->second.use_usals))) { fe->have_rotor = true; break; } } INFO("Frontend #%d: is master, with loop: %s, with rotor: %s", fe->fenumber, fe->have_loop ? "yes" : "no", fe->have_rotor ? "yes" : "no"); } else if (femode == CFrontend::FE_MODE_LINK_LOOP) { INFO("Frontend #%d: is LOOP, master %d", fe->fenumber, fe->getMaster()); if (init) fe->setMasterSlave(true); //fe->slave = true; } else if (femode == CFrontend::FE_MODE_LINK_TWIN) { INFO("Frontend #%d: is TWIN, master %d", fe->fenumber, fe->getMaster()); } else if (femode == CFrontend::FE_MODE_INDEPENDENT) { INFO("Frontend #%d: is independent", fe->fenumber); } if (init && femode != CFrontend::FE_MODE_UNUSED) fe->Init(); if (femode != CFrontend::FE_MODE_UNUSED) { enabled_count++; if ((fe->fenumber + 1) < (int) MAX_DMX_UNITS) demuxes[fe->fenumber + 1] = 1; } } for(unsigned i = 0; i < MAX_DMX_UNITS; i++) { if (demuxes[i] == 0) { unused_demux = i; INFO("pip demux: %d\n", unused_demux); break; } } }
bool CFEManager::loadSettings() { config_exist = true; configfile.clear(); if (!configfile.loadConfig(FECONFIGFILE)) { WARN("%s not found", FECONFIGFILE); 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(); INFO("load config for fe%d", fe->fenumber); fe_config.diseqcType = (diseqc_t) getConfigValue(fe, "diseqcType", NO_DISEQC); fe_config.diseqcRepeats = getConfigValue(fe, "diseqcRepeats", 0); fe_config.motorRotationSpeed = getConfigValue(fe, "motorRotationSpeed", 18); fe_config.highVoltage = getConfigValue(fe, "highVoltage", 0); fe_config.uni_scr = getConfigValue(fe, "uni_scr", -1); fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); fe_config.diseqc_order = getConfigValue(fe, "diseqc_order", UNCOMMITED_FIRST); fe_config.use_usals = getConfigValue(fe, "use_usals", 0); fe_config.rotor_swap = getConfigValue(fe, "rotor_swap", 0); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); /* default mode for first / next frontends */ int def_mode = def_modeX; 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->setMaster(getConfigValue(fe, "master", 0)); char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); satellite_map_t & satmap = fe->getSatellites(); satmap.clear(); satellite_map_t &satlist = CServiceManager::getInstance()->SatelliteList(); for(sat_iterator_t sit = satlist.begin(); sit != satlist.end(); ++sit) { if (!fe->supportsDelivery(sit->second.delsys)) continue; t_satellite_position position = sit->first; sat_config_t satconfig; /* defaults, to replace CServiceManager::InitSatPosition/LoadMotorPositions * in the future */ satconfig.position = position; satconfig.diseqc = -1; satconfig.commited = -1; satconfig.uncommited = -1; satconfig.motor_position = 0; satconfig.diseqc_order = 0; satconfig.lnbOffsetLow = 9750; satconfig.lnbOffsetHigh = 10600; satconfig.lnbSwitch = 11700; satconfig.use_in_scan = 0; satconfig.use_usals = 0; satconfig.input = 0; satconfig.configured = 0; satmap.insert(satellite_pair_t(position, satconfig)); if(getSatelliteConfig(fe, satconfig)) satmap[position] = satconfig; // overwrite if exist if (satconfig.use_in_scan) sit->second.use_in_scan = satconfig.use_in_scan; } } linkFrontends(); return true; }