void eCableScan::start(int frontendid) { /* scan on specified channel */ ePtr<eDVBResourceManager> res; eDVBResourceManager::getInstance(res); ePtr<iDVBFrontend> fe; if (res->allocateRawChannel(m_channel, frontendid)) { eDebug("[eCableScan] failed to allocate channel!"); scanCompleted(-1); return; } m_channel->getFrontend(fe); m_channel->getDemux(m_demux); eDVBFrontendParametersCable cable; cable.frequency = initialFrequency; cable.fec_inner = eDVBFrontendParametersCable::FEC_Auto; cable.inversion = eDVBFrontendParametersCable::Inversion_Unknown; cable.symbol_rate = initialSymbolRate; cable.modulation = initialModulation; eDVBFrontendParameters parm; parm.setDVBC(cable); fe->tune(parm); m_NIT = new eTable<NetworkInformationSection>; CONNECT(m_NIT->tableReady, eCableScan::NITReady); m_NIT->start(m_demux, eDVBNITSpec(networkId)); }
int eCableScan::nextChannel() { ePtr<iDVBFrontend> fe; m_SDT = NULL; if (scanChannels.empty()) { m_channel = NULL; createBouquets(); return 1; } scanProgress(100 - (scanChannels.size() * 90) / totalChannels); currentScanChannel = scanChannels.front(); scanChannels.pop_front(); if (m_channel->getFrontend(fe)) { m_channel = NULL; scanCompleted(-1); return -1; } if (fe->tune(*currentScanChannel)) return nextChannel(); m_SDT = new eTable<ServiceDescriptionSection>; CONNECT(m_SDT->tableReady, eCableScan::SDTReady); m_SDT->start(m_demux, eDVBSDTSpec()); return 0; }
void TunerModel::slotOnTuned(double freq, uint signal) { qDebug() << "Engine tuned to " << freq << signal; m_signal = signal; emit signalChanged(); if(m_state == StateScanning && m_nextState == StateIdle) { qDebug() << "Scan completed"; m_currentFreq = freq; emit scanCompleted(freq); } m_state = StateIdle; if(m_nextState == StateTuning && m_currentFreq!=freq) { tuneToFreq(m_currentFreq); } else if (m_nextState == StateScanning) { scan(m_scanForward); } if(m_isFullScan) { doNextScanInFullScan(); saveStation(freq); } m_nextState = StateIdle; }
MainWindow::MainWindow(void) : QMainWindow() { wireless = new Wireless(); currentIndex = -1; currentSSID = ""; QFrame *frame = new QFrame; QVBoxLayout *frameLayout = new QVBoxLayout(frame); QPushButton *scanWIFI; scanWIFI = new QPushButton("Scan Network"); connect(scanWIFI, SIGNAL(clicked()), this, SLOT(scanCompleted())); QPushButton *joinNetwork; joinNetwork = new QPushButton("Join"); connect(joinNetwork, SIGNAL(clicked()), this, SLOT(joinNetwork())); networkList = new QListView(); networkList->setViewMode(QListView::ListMode); listModel = new QStringListModel(); networkList->setModel(listModel); frameLayout->addWidget(scanWIFI); frameLayout->addWidget(networkList); frameLayout->addWidget(joinNetwork); setFixedSize( 640, 480 ); //frame->setFrameRect(QRect( 10, 10, 640, 480 )); setCentralWidget(frame); QRect screenGeometry = QApplication::desktop()->screenGeometry(); int x = (screenGeometry.width() - width()) / 2; int y = (screenGeometry.height() - height()) / 2; move( x, y ); createStatusBar(); passwordQDialog = new PasswordQDialog( this ); setWindowTitle( tr("Wireless Manager") ); // SelectionModel /* QItemSelectionModel *selectionModel = networkList->selectionModel(); connect( selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)) ); */ }
void eCableScan::NITReady(int error) { eDebug("[eCableScan] NITReady %d", error); if (!error) { parseNIT(); nextChannel(); } else { scanCompleted(-1); } m_NIT = NULL; }
void eCableScan::createBouquets() { ePtr<iDVBChannelList> db; ePtr<eDVBResourceManager> res; eDVBResourceManager::getInstance(res); res->getChannelList(db); eDVBDB *dvbdb = eDVBDB::getInstance(); int most = 0; for (std::map<std::string, int>::iterator it = providerNames.begin(); it != providerNames.end(); ++it) { if (it->second > most) { most = it->second; providerName = it->first; } } bouquetFilename = replace_all(providerName, " ", ""); bool multibouquet = eConfigManager::getConfigBoolValue("config.usage.multibouquet"); if (multibouquet) { std::string bouquetname = "userbouquet." + bouquetFilename + ".tv"; std::string bouquetquery = "FROM BOUQUET \"" + bouquetname + "\" ORDER BY bouquet"; eServiceReference bouquetref(eServiceReference::idDVB, eServiceReference::flagDirectory, bouquetquery); bouquetref.setData(0, 1); /* bouquet 'servicetype' tv */ eBouquet *bouquet = NULL; eServiceReference rootref(eServiceReference::idDVB, eServiceReference::flagDirectory, "FROM BOUQUET \"bouquets.tv\" ORDER BY bouquet"); if (!db->getBouquet(bouquetref, bouquet) && bouquet) { /* bouquet already exists, empty it before we continue */ bouquet->m_services.clear(); } else { /* bouquet doesn't yet exist, create a new one */ if (!db->getBouquet(rootref, bouquet) && bouquet) { bouquet->m_services.push_front(bouquetref); bouquet->flushChanges(); } /* loading the bouquet seems to be the only way to add it to the bouquet list */ dvbdb->loadBouquet(bouquetname.c_str()); /* and now that it has been added to the list, we can find it */ db->getBouquet(bouquetref, bouquet); } if (bouquet) { /* fill our cable bouquet */ fillBouquet(bouquet, numberedServiceRefs); } else { eDebug("[eCableScan] failed to create bouquet!"); } } else { /* single bouquet mode, fill the favourites bouquet */ eBouquet *bouquet = NULL; eServiceReference favref(eServiceReference::idDVB, eServiceReference::flagDirectory, "FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet"); if (!db->getBouquet(favref, bouquet)) { fillBouquet(bouquet, numberedServiceRefs); } } if (!numberedRadioServiceRefs.empty()) { if (multibouquet) { std::string bouquetname = "userbouquet." + bouquetFilename + ".radio"; std::string bouquetquery = "FROM BOUQUET \"" + bouquetname + "\" ORDER BY bouquet"; eServiceReference bouquetref(eServiceReference::idDVB, eServiceReference::flagDirectory, bouquetquery); bouquetref.setData(0, 2); /* bouquet 'servicetype' radio */ eBouquet *bouquet = NULL; eServiceReference rootref(eServiceReference::idDVB, eServiceReference::flagDirectory, "FROM BOUQUET \"bouquets.radio\" ORDER BY bouquet"); if (!db->getBouquet(bouquetref, bouquet) && bouquet) { /* bouquet already exists, empty it before we continue */ bouquet->m_services.clear(); } else { /* bouquet doesn't yet exist, create a new one */ if (!db->getBouquet(rootref, bouquet) && bouquet) { bouquet->m_services.push_front(bouquetref); bouquet->flushChanges(); } /* loading the bouquet seems to be the only way to add it to the bouquet list */ dvbdb->loadBouquet(bouquetname.c_str()); /* and now that it has been added to the list, we can find it */ db->getBouquet(bouquetref, bouquet); } if (bouquet) { /* fill our cable bouquet */ fillBouquet(bouquet, numberedRadioServiceRefs); } else { eDebug("[eCableScan] failed to create bouquet!"); } } else { /* single bouquet, fill the favourites bouquet */ eBouquet *bouquet = NULL; eServiceReference favref(eServiceReference::idDVB, eServiceReference::flagDirectory, "FROM BOUQUET \"userbouquet.favourites.radio\" ORDER BY bouquet"); if (!db->getBouquet(favref, bouquet)) { fillBouquet(bouquet, numberedRadioServiceRefs); } } } /* force services to be saved */ if (dvbdb) { dvbdb->saveServicelist(); } scanProgress(100); scanCompleted(numberedServiceRefs.empty() ? -1 : numberedServiceRefs.size() + numberedRadioServiceRefs.size()); }
Daemon::Daemon(int argc, char *argv[]) : QCoreApplication(argc, argv) { initSettings(); char defaultLogFilename[] = DEFAULT_LOG_FILE; char* logFilename = defaultLogFilename; int port = DEFAULT_LOCAL_PORT; bool isDaemon = true; bool runWiFiScanner = true; bool runMovementDetector = true; bool recordScans = false; bool runAllAlgorithms = false; ////////////////////////////////////////////////////////// // Make sure no other arguments have been given QStringList args = QCoreApplication::arguments(); QStringListIterator argsIter(args); argsIter.next(); // moled while (argsIter.hasNext()) { QString arg = argsIter.next(); if (arg == "-h") { usage(); } else if (arg == "-v") { version(); } else if (arg == "-d") { debug = true; } else if (arg == "-n") { isDaemon = false; logFilename = NULL; } else if (arg == "-l") { logFilename = argsIter.next().toAscii().data(); } else if (arg == "-s") { mapServerURL = argsIter.next(); } else if (arg == "-f") { staticServerURL = argsIter.next(); } else if (arg == "-r") { rootPathname = argsIter.next(); } else if (arg == "-p") { port = argsIter.next().toInt(); } else if (arg == "--no-accelerometer") { runMovementDetector = false; } else if (arg == "--no-wifi") { runWiFiScanner = false; } else if (arg == "-S") { recordScans = true; } else if (arg == "-A") { runAllAlgorithms = true; } else if (arg == "-H") { SpeedSensor::HibernateWhenInactive = true; } else { usage(); } } // Seed rng QTime time = QTime::currentTime(); qsrand((uint)time.msec()); settings = new QSettings(QSettings::SystemScope, MOLE_ORGANIZATION, MOLE_APPLICATION, this); ////////////////////////////////////////////////////////// // Read default settings if (settings->contains("wifi_scanning")) { runWiFiScanner = settings->value("wifi_scanning").toBool(); } if (settings->contains("movement_detector")) { runMovementDetector = settings->value("movement_detector").toBool(); } if (settings->contains("map_server_url")) { mapServerURL = settings->value("map_server_url").toString(); } if (settings->contains("fingerprint_server_url")) { staticServerURL = settings->value("fingerprint_server_url").toString(); } if (settings->contains("port")) { port = settings->value("port").toInt(); } if (settings->contains("root_path")) { rootPathname = settings->value("root_path").toString(); } if (isDaemon) { daemonize(); } else { qDebug() << "not daemonizing"; } ////////////////////////////////////////////////////////// // check a few things before daemonizing initCommon(this, logFilename); qWarning() << "Starting mole daemon " << "debug=" << debug << "port=" << port << "wifi_scanning=" << runWiFiScanner << "movement_detector=" << runMovementDetector << "logFilename=" << logFilename << "map_server_url=" << mapServerURL << "fingerprint_server_url=" << staticServerURL << "rootPath=" << rootPathname; // start create map directory if (!rootDir.exists("map")) { bool ret = rootDir.mkdir("map"); if (!ret) { qFatal("Failed to create map directory. Exiting..."); exit(-1); } qDebug() << "created map dir"; } // end create map directory // reset session cookie on MOLEd restart resetSessionCookie(); m_localizer = new Localizer(this, runAllAlgorithms); if (runMovementDetector && SpeedSensor::haveAccelerometer()) { m_scanQueue = new ScanQueue(this, m_localizer, 0, recordScans); } else { // since we are not detecting motion, only use this many scans // for localization const int maxActiveQueueLength = 12; m_scanQueue = new ScanQueue(this, m_localizer, maxActiveQueueLength, recordScans); } m_binder = new Binder(this, m_localizer, m_scanQueue); m_proximity = new Proximity(this, m_localizer); m_localServer = new LocalServer(this, m_localizer, m_binder, port); m_scanner = 0; if (runWiFiScanner) { m_scanner = new Scanner(this); connect(m_scanner, SIGNAL(setWiFiDesc(QString)), m_binder, SLOT(setWiFiDesc(QString))); connect(m_scanner, SIGNAL(addReading(QString,QString,qint16,qint8)), m_scanQueue, SLOT(addReading(QString,QString,qint16,qint8))); connect(m_scanner, SIGNAL(scanCompleted()), m_scanQueue, SLOT(scanCompleted())); } m_speedSensor = 0; if (runMovementDetector && SpeedSensor::haveAccelerometer()) { m_speedSensor = new SpeedSensor(this); connect(m_speedSensor, SIGNAL(hibernate(bool)), m_scanner, SLOT(handleHibernate(bool))); connect(m_speedSensor, SIGNAL(hibernate(bool)), m_localizer, SLOT(handleHibernate(bool))); connect(m_speedSensor, SIGNAL(motionChange(Motion)), m_localizer, SLOT(handleMotionChange(Motion))); connect(m_speedSensor, SIGNAL(motionChange(Motion)), m_scanQueue, SLOT(handleMotionChange(Motion))); } connect(this, SIGNAL(aboutToQuit()), SLOT(handle_quit())); if (runWiFiScanner) { m_scanner->start(); } }