Пример #1
0
void Simulator::receiveUpdate()
{
	// Update connection timer and status
	simTimer->setInterval(simTimeout);
	simTimer->stop();
	simTimer->start();
	if ( !simConnectionStatus )
	{
		simConnectionStatus = true;
		emit simulatorConnected();
	}

	// Process data
        while(inSocket->hasPendingDatagrams()) {
		// Receive datagram
		QByteArray datagram;
		datagram.resize(inSocket->pendingDatagramSize());
		QHostAddress sender;
		quint16 senderPort;
		inSocket->readDatagram(datagram.data(), datagram.size(),
							   &sender, &senderPort);
		//QString datastr(datagram);
		// Process incomming data
		processUpdate(datagram);
	 }
}
Пример #2
0
void HITLWidget::startButtonClicked()
{
    QThread *mainThread = QThread::currentThread();

    qDebug() << "Main Thread: " << mainThread;

    // Allow only one instance per simulator
    if (Simulator::Instances().indexOf(settings.simulatorId) != -1) {
        widget->textBrowser->append(settings.simulatorId + " alreary started!");
        return;
    }

    if (!HITLPlugin::typeSimulators.size()) {
        qxtLog->info("There is no registered simulators, add through HITLPlugin::addSimulator");
        return;
    }

    // Stop running process if one is active
    if (simulator) {
        QMetaObject::invokeMethod(simulator, "onDeleteSimulator", Qt::QueuedConnection);
        simulator = NULL;
    }

    if (settings.hostAddress == "" || settings.inPort == 0) {
        widget->textBrowser->append("Before start, set UDP parameters in options page!");
        return;
    }

    SimulatorCreator *creator = HITLPlugin::getSimulatorCreator(settings.simulatorId);
    simulator = creator->createSimulator(settings);

    // move to thread <--[BCH]
    simulator->setName(creator->Description());
    simulator->setSimulatorId(creator->ClassId());

    connect(simulator, SIGNAL(processOutput(QString)), this, SLOT(onProcessOutput(QString)));

    // Setup process
    widget->textBrowser->append(QString("[%1] Starting %2... ").arg(QTime::currentTime().toString("hh:mm:ss")).arg(creator->Description()));
    qxtLog->info("HITL: Starting " + creator->Description());

    // Start bridge
    bool ret = QMetaObject::invokeMethod(simulator, "setupProcess", Qt::QueuedConnection);
    if (ret) {
        Simulator::setInstance(settings.simulatorId);

        connect(this, SIGNAL(deleteSimulator()), simulator, SLOT(onDeleteSimulator()), Qt::QueuedConnection);

        widget->startButton->setEnabled(false);
        widget->stopButton->setEnabled(true);
        qxtLog->info("HITL: Starting bridge, initializing flight simulator and Autopilot connections");

        connect(simulator, SIGNAL(autopilotConnected()), this, SLOT(onAutopilotConnect()), Qt::QueuedConnection);
        connect(simulator, SIGNAL(autopilotDisconnected()), this, SLOT(onAutopilotDisconnect()), Qt::QueuedConnection);
        connect(simulator, SIGNAL(simulatorConnected()), this, SLOT(onSimulatorConnect()), Qt::QueuedConnection);
        connect(simulator, SIGNAL(simulatorDisconnected()), this, SLOT(onSimulatorDisconnect()), Qt::QueuedConnection);

        // Initialize connection status
        if (simulator->isAutopilotConnected()) {
            onAutopilotConnect();
        } else {
            onAutopilotDisconnect();
        }

        if (simulator->isSimulatorConnected()) {
            onSimulatorConnect();
        } else {
            onSimulatorDisconnect();
        }
    }
}