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;
}
Exemple #3
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());
}
Exemple #7
0
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();
  }

}