コード例 #1
0
ファイル: main.c プロジェクト: brianhrowe/Digital_Foos
void initialize()		///Works with current delays
{
	int result;
	result = enterCommandMode();
	sendString(GET_WLAN_STRING, 6);
	Delay10KTCYx(0);
	sendString(SET_SSID, 18);
	Delay10KTCYx(0);
	sendString(SET_PASSPHRASE, 29);
	Delay10KTCYx(0);
	sendString(SET_CHANNEL, 10);
	Delay10KTCYx(0);
	sendString(SET_AUTH, 10);
	Delay10KTCYx(0);
	sendString(SET_JOIN, 10);
	Delay10KTCYx(0);	
	sendString(SET_DHCP, 10);
	Delay10KTCYx(0);
	sendString(SET_COMM_OPEN, 10);
	Delay10KTCYx(0); 
	sendString(SET_COMM_REMOTE, 10);
	Delay10KTCYx(0);
	autoConnect();
	sendString(SAVE, 5);
	Delay10KTCYx(0);
	result = rebootModule();
	longDelay();
}
コード例 #2
0
BlockSubstitution::BlockSubstitution(Project* project,QString model, QString orgComponent,QString subComponent,bool doAutoConnect, bool &ok)
{

    ok = init(project,model,orgComponent,subComponent);

    if(doAutoConnect)
        autoConnect();
}
コード例 #3
0
// from useragent
void QConnectionManager::onConnectionRequest()
{
    previousConnectedService.clear();
    sendConnectReply("Suppress", 15);
    bool ok = autoConnect();
    qDebug() << serviceInProgress << ok << flightModeSuppression;
    if (!ok && serviceInProgress.isEmpty() && !flightModeSuppression) {
        Q_EMIT connectionRequest();
    }
}
コード例 #4
0
void MainWindow::on_buttonConnect_clicked()
{
    //if disconnected
    if(connection==0)

        //auto connection
        autoConnect();

    //if connected
    else
        //auto disconnection
        autoDisconnect();
}
コード例 #5
0
void QConnectionManager::servicesListChanged(const QStringList &list)
{
    bool ok = false;
    Q_FOREACH(const QString &path,list) {
        if (orderedServicesList.indexOf((path)) == -1) {
         //added
            qDebug() << Q_FUNC_INFO << "added" << path;
            serviceAdded(path);
            ok = true;
        }
    }
    Q_FOREACH(const QString &path,orderedServicesList) {
        if (list.indexOf((path)) == -1) {
            qDebug() << Q_FUNC_INFO << "removed" << path;
            serviceRemoved(path);
            ok = true;
         //removed
        }
    }
    if (ok && serviceInProgress.isEmpty())
        autoConnect();
}
コード例 #6
0
ファイル: mainform.cpp プロジェクト: Disasm/karya-valya
void MainForm::helperAutoConnect()
{
    ui->lineEdit->setText("/connect");

    emit autoConnect();
}
コード例 #7
0
boolean WiFiManager::autoConnect() {
    autoConnect("NoNetESP");
}
コード例 #8
0
// Scan APs, use configured if found, otherwise try each open AP to get through, finally open soft AP with config page.
boolean WiFiManager::findOpenAP(const char *szUrl)
{
    int nOpen = 0;
    begin("ESP8266");
    int nScan = WiFi.scanNetworks();
    bool bFound = false;
    Serial.println("scan done");
    String sSSID = getSSID();
    int ind = 0;

    display.setFontScale2x2(false);
    if (nScan == 0) {
        Serial.println( "No APs found" );
        display.print("No APs Found");
    }
    else {
        for (int i = 0; i < nScan; ++i) // try each public AP
        {
            Serial.print(WiFi.SSID(i));
            Serial.print(" ");
            Serial.println(WiFi.encryptionType(i));
            display.print(WiFi.SSID(i));
            if(WiFi.encryptionType(i) == 7 /*&& strncmp(WiFi.SSID(i),"Chromecast",6) != 0*/)
            {
              display.drawString(128-8, 56, "O");
              nOpen++;
            }
            else if( sSSID == WiFi.SSID(i) ){ // The saved WiFi was found
              bFound  = true;
              display.drawString(128-8, 56, "<");
              Serial.println(" Cfg AP found");
            }
        }
  }

  if(nOpen == 0 && !bFound)
  {
    display.print("No open AP found");
    if(sSSID == "")
    {
       display.print("Switch to SoftAP");
       display.print("Hotspot: ESP8266");
       display.print("Goto 192.168.4.1");
    }else{
       display.print("Switching to");
       display.print(sSSID);
    }
  }

  delay(2000); // delay for reading

  if(nOpen && !bFound)
  {
    WiFi.mode(WIFI_STA);
    int counter = 0;
    for (int i = 0; i < nScan; ++i)
    {
      if(WiFi.encryptionType(i) == 7)   // run through open APs and try to connect
      {
        Serial.print("Attempting ");
        Serial.print(WiFi.SSID(i));
        display.print(String(WiFi.SSID(i)) + "...");
        WiFi.begin(WiFi.SSID(i));
        for(int n = 0; n < 50 && WiFi.status() != WL_CONNECTED; n++)
        {
          delay(200);
          Serial.print(".");
          display.clear();
          display.drawXbm(34,10, 60, 36, WiFi_Logo_bits);
          display.setColor(INVERSE);
          display.fillRect(10, 10, 108, 44);
          display.setColor(WHITE);
          drawSpinner(4, n % 4);
          display.display();
        }
        if(WiFi.status() == WL_CONNECTED)
        {
          Serial.println("Connected");
          display.print("Connected");
          if(attemptClient(szUrl))    // attemp port 80 and 8080
          {
            display.drawString(64-8, 56, "!");
            break;
          }else{
            display.drawString(64-8, 56, "X");
            WiFi.disconnect();
          }
        }
        counter++;
      }
    }
    if (WiFi.status() != WL_CONNECTED)
    {
      Serial.println("Open WiFi failed");
      Serial.println("Switch to SoftAP");
      display.print("Open WiFi failed");
      display.print("Switch to SoftAP");
      autoConnect("ESP8266");
    }
  }
  else
  {
    autoConnect("ESP8266");
  }
  return true;
}
コード例 #9
0
void QConnectionManager::serviceStateChanged(const QString &state)
{
    NetworkService *service = static_cast<NetworkService *>(sender());
    qDebug() << state << service->name();

    if (currentNetworkState == "disconnect") {
        ua->sendConnectReply("Clear");
    }
    if (state == "failure") {
        serviceInProgress.clear();

        Q_EMIT errorReported(service->path(), "Connection failure: "+ service->name());
        autoConnect();
    }
    if (currentNetworkState == "configuration" && state == "ready"
            && netman->state() != "online") {
        goodConnectTimer->start();
    }

    //manual connection
    if ((state == "ready" || state == "online") && service->path() != serviceInProgress) {
        qDebug() << "manual connection of" << service->path() << "detected, enabling auto connect timeout";
        lastManuallyConnectedService = service->path();
        manualConnnectionTimer.start();
    }

    //auto migrate
    if (service->path() == serviceInProgress
            && state == "online") {
        serviceInProgress.clear();
    }

    //auto migrate
    if (state == "idle") {
        if (lastManuallyConnectedService == service->path()) {
            lastManuallyConnectedService.clear();
            manualConnnectionTimer.invalidate();
        }

        if (serviceInProgress == service->path())
            serviceInProgress.clear();

        previousConnectedService = service->path();
        if (service->type() == "ethernet") { //keep this alive
            NetworkTechnology tech;
            tech.setPath(netman->technologyPathForService(service->path()));
            if (tech.powered()) {
               requestConnect(service->path());
            }
        } else {
            updateServicesMap();
            qDebug() <<"serviceInProgress"<< serviceInProgress;
            // If a manual connection has recently been detected autoConnect() will do nothing.
            // Always call autoConnect() here as this state change could be that manual connection
            // disconnecting.
            autoConnect();
        }
    }

    if (!(currentNetworkState == "online" && state == "association"))
        Q_EMIT connectionState(state, service->type());

        currentNetworkState = state;
        QSettings confFile;
        confFile.beginGroup("Connectionagent");
        confFile.setValue("connected",currentNetworkState);
}
コード例 #10
0
int32_t UdpSocket::proofread(char* buffer, int32_t bufferSize, std::string& senderIp)
{
	senderIp.clear();
	if(!_socketDescriptor) throw SocketOperationException("Socket descriptor is nullptr.");
	_readMutex.lock();
	if(_autoConnect && !isOpen())
	{
		_readMutex.unlock();
		autoConnect();
		if(!isOpen()) throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (8).");
		_readMutex.lock();
	}
	timeval timeout;
	int32_t seconds = _readTimeout / 1000000;
	timeout.tv_sec = seconds;
	timeout.tv_usec = _readTimeout - (1000000 * seconds);
	fd_set readFileDescriptor;
	FD_ZERO(&readFileDescriptor);
	auto fileDescriptorGuard = _bl->fileDescriptorManager.getLock();
	fileDescriptorGuard.lock();
	int32_t nfds = _socketDescriptor->descriptor + 1;
	if(nfds <= 0)
	{
		fileDescriptorGuard.unlock();
		_readMutex.unlock();
		throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (1).");
	}
	FD_SET(_socketDescriptor->descriptor, &readFileDescriptor);
	fileDescriptorGuard.unlock();
	int32_t bytesRead = select(nfds, &readFileDescriptor, NULL, NULL, &timeout);
	if(bytesRead == 0)
	{
		_readMutex.unlock();
		throw SocketTimeOutException("Reading from socket timed out.");
	}
	if(bytesRead != 1)
	{
		_readMutex.unlock();
		throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (2).");
	}
	struct addrinfo clientInfo;
	memset(&clientInfo, 0, sizeof(addrinfo));
	uint32_t addressLength = sizeof(sockaddr);
	do
	{
		bytesRead = recvfrom(_socketDescriptor->descriptor, buffer, bufferSize, 0, clientInfo.ai_addr, &addressLength);
	} while(bytesRead < 0 && (errno == EAGAIN || errno == EINTR));
	if(bytesRead <= 0)
	{
		_readMutex.unlock();
		throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (3).");
	}
	_readMutex.unlock();
	char ipStringBuffer[INET6_ADDRSTRLEN];
	if (_serverInfo->ai_family == AF_INET)
	{
		struct sockaddr_in *s = (struct sockaddr_in*)_serverInfo->ai_addr;
		inet_ntop(AF_INET, &s->sin_addr, ipStringBuffer, sizeof(ipStringBuffer));
	}
	else
	{ // AF_INET6
		struct sockaddr_in6 *s = (struct sockaddr_in6*)_serverInfo->ai_addr;
		inet_ntop(AF_INET6, &s->sin6_addr, ipStringBuffer, sizeof(ipStringBuffer));
	}
	senderIp = std::string(&ipStringBuffer[0]);
	return bytesRead;
}
コード例 #11
0
int32_t UdpSocket::proofwrite(const std::string& data)
{
	if(!_socketDescriptor) throw SocketOperationException("Socket descriptor is nullptr.");
	_writeMutex.lock();
	if(!isOpen())
	{
		_writeMutex.unlock();
		autoConnect();
		if(!isOpen()) throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (8).");
		_writeMutex.lock();
	}
	if(data.empty())
	{
		_writeMutex.unlock();
		return 0;
	}
	if(data.size() > 104857600)
	{
		_writeMutex.unlock();
		throw SocketDataLimitException("Data size is larger than 100 MiB.");
	}

	int32_t totalBytesWritten = 0;
	while (totalBytesWritten < (signed)data.size())
	{
		/*timeval timeout;
		timeout.tv_sec = 5;
		timeout.tv_usec = 0;
		fd_set writeFileDescriptor;
		FD_ZERO(&writeFileDescriptor);
		_bl->fileDescriptorManager.lock();
		int32_t nfds = _socketDescriptor->descriptor + 1;
		if(nfds <= 0)
		{
			_bl->fileDescriptorManager.unlock();
			_writeMutex.unlock();
			throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (6).");
		}
		FD_SET(_socketDescriptor->descriptor, &writeFileDescriptor);
		_bl->fileDescriptorManager.unlock();
		int32_t readyFds = select(nfds, NULL, &writeFileDescriptor, NULL, &timeout);
		if(readyFds == 0)
		{
			_writeMutex.unlock();
			throw SocketTimeOutException("Writing to socket timed out.");
		}
		if(readyFds != 1)
		{
			_writeMutex.unlock();
			throw SocketClosedException("Connection to client number " + std::to_string(_socketDescriptor->id) + " closed (7).");
		}*/

		int32_t bytesToSend = data.size() - totalBytesWritten;
		int32_t bytesWritten = sendto(_socketDescriptor->descriptor, &data.at(totalBytesWritten), bytesToSend, 0, _serverInfo->ai_addr, sizeof(sockaddr));
		if(bytesWritten <= 0)
		{
			if(bytesWritten == -1 && errno == EINTR) continue;
			_writeMutex.unlock();
			close();
			throw SocketOperationException(strerror(errno));
		}
		totalBytesWritten += bytesWritten;
	}
	_writeMutex.unlock();
	return totalBytesWritten;
}
コード例 #12
0
ファイル: KviIrcServer.cpp プロジェクト: DINKIN/KVIrc
void KviIrcServer::save(KviConfigurationFile * pCfg, const QString & szPrefix)
{
	QString szTmp;
	szTmp = QString("%1Hostname").arg(szPrefix);
	pCfg->writeEntry(szTmp,m_szHostname);
	szTmp = QString("%1Id").arg(szPrefix);
	pCfg->writeEntry(szTmp,m_szId);
	if(!m_szIp.isEmpty())
	{
		szTmp = QString("%1Ip").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szIp);
	}
	if(!m_szDescription.isEmpty())
	{
		szTmp = QString("%1Description").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szDescription);
	}
	if(!m_szUser.isEmpty())
	{
		szTmp = QString("%1User").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szUser);
	}
	if(!m_szPass.isEmpty())
	{
		szTmp = QString("%1Pass").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szPass);
	}
	if(!m_szNick.isEmpty())
	{
		szTmp = QString("%1Nick").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szNick);
	}
	if(!m_szAlternativeNick.isEmpty())
	{
		szTmp = QString("%1AlternativeNick").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szAlternativeNick);
	}
	if(!m_szSaslPass.isEmpty())
	{
		szTmp = QString("%1SaslPass").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szSaslPass);
	}
	if(!m_szSaslNick.isEmpty())
	{
		szTmp = QString("%1SaslNick").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szSaslNick);
	}
	if(!m_szRealName.isEmpty())
	{
		szTmp = QString("%1RealName").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szRealName);
	}
	if(!m_szInitUMode.isEmpty())
	{
		szTmp = QString("%1InitUMode").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szInitUMode);
	}
	if(autoJoinChannelList())
	{
		szTmp = QString("%1AutoJoinChannels").arg(szPrefix);
		pCfg->writeEntry(szTmp,*(autoJoinChannelList()));
	}
	if(autoConnect()) // otherwise it defaults to false anyway
	{
		szTmp = QString("%1AutoConnect").arg(szPrefix);
		pCfg->writeEntry(szTmp,autoConnect());
	}
	if(!m_szEncoding.isEmpty())
	{
		szTmp = QString("%1Encoding").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szEncoding);
	}
	if(!m_szTextEncoding.isEmpty())
	{
		szTmp = QString("%1TextEncoding").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szTextEncoding);
	}
	if(!m_szOnConnectCommand.isEmpty())
	{
		szTmp = QString("%1OnConnectCommand").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szOnConnectCommand);
	}
	if(!m_szOnLoginCommand.isEmpty())
	{
		szTmp = QString("%1OnLoginCommand").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szOnLoginCommand);
	}
	if(!m_szLinkFilter.isEmpty())
	{
		szTmp = QString("%1LinkFilter").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szLinkFilter);
	}
	if(m_uPort != 6667)
	{
		szTmp = QString("%1Port").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_uPort);
	}
	if(isIPv6())
	{
		szTmp = QString("%1IPv6").arg(szPrefix);
		pCfg->writeEntry(szTmp,isIPv6());
	}
	if(cacheIp())
	{
		szTmp = QString("%1CacheIp").arg(szPrefix);
		pCfg->writeEntry(szTmp,cacheIp());
	}
	if(useSSL())
	{
		szTmp = QString("%1SSL").arg(szPrefix);
		pCfg->writeEntry(szTmp,useSSL());
	}
	if(!enabledCAP())
	{
		szTmp = QString("%1EnabledCAP").arg(szPrefix);
		pCfg->writeEntry(szTmp,enabledCAP());
	}
	if(!enabledSTARTTLS())
	{
		szTmp = QString("%1EnabledSTARTTLS").arg(szPrefix);
		pCfg->writeEntry(szTmp,enabledSTARTTLS());
	}
	if(enabledSASL())
	{
		szTmp = QString("%1EnabledSASL").arg(szPrefix);
		pCfg->writeEntry(szTmp,enabledSASL());
	}
	if(proxy()!=-2)
	{
		szTmp = QString("%1Proxy").arg(szPrefix);
		pCfg->writeEntry(szTmp,proxy());
	}
	if(!m_szUserIdentityId.isEmpty())
	{
		szTmp = QString("%1UserIdentityId").arg(szPrefix);
		pCfg->writeEntry(szTmp,m_szUserIdentityId);
	}
	if(favorite())
	{
		szTmp = QString("%1Favorite").arg(szPrefix);
		pCfg->writeEntry(szTmp,favorite());
	}
}
コード例 #13
0
ファイル: OpenRcon.cpp プロジェクト: cortex42/OpenRcon
OpenRcon::OpenRcon(QWidget *parent) : QMainWindow(parent)
{
    // Initialize the QSettings object.
    settings = new QSettings(APP_NAME, APP_NAME, this);

    // Create ServerManager instances.
    serverManager = new ServerManager(this);
    sessionManager = new SessionManager(this);

    // Create dialogs.
    serverListDialog = new ServerListDialog(this);
    optionsDialog = new OptionsDialog(this);
    aboutDialog = new AboutDialog(this);

    // Sets window title
    setWindowTitle(QString("%1 %2").arg(APP_NAME).arg(APP_VERSION));
    setWindowIcon(QIcon(":/icons/openrcon.png"));

    // Actions
    actionServerManager = new QAction(QIcon(":/icons/servermanager.png"), tr("&Servers"), this);
    actionServerManager->setShortcut(tr("Ctrl+S"));
    actionServerManager->setToolTip(tr("View and edit servers."));
    actionQuit = new QAction(QIcon(":/icons/quit.png"), tr("&Quit"), this);
    actionQuit->setShortcut(tr("Ctrl+Q"));
    actionQuickConnect = new QAction(tr("Quickconnect"), this);
    actionQuickConnect->setCheckable(true);
    actionOptions = new QAction(QIcon(":/icons/options.png"), tr("&Options"), this);
    actionOptions->setShortcut(tr("Ctrl+O"));
    actionDocumentation = new QAction(QIcon(":/icons/documentation.png"), tr("Documentation"), this);
    actionVisitWebsite = new QAction(QIcon(":/icons/internet.png"), tr("Visit website"), this);
    actionReportBug = new QAction(QIcon(":/icons/report-bug.png"), tr("Report bug"), this);
    actionAbout = new QAction(QIcon(APP_ICON), tr("&About %1").arg(APP_NAME), this);
    actionAbout->setShortcut(tr("Ctrl+A"));
    actionAboutQt = new QAction(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"), tr("About Qt"), this);
    actionAboutQt->setMenuRole(QAction::AboutQtRole);

    // Menubar
    menuBar = new QMenuBar(this);

    menuApplication = menuBar->addMenu(tr("Application"));
    menuApplication->addAction(actionServerManager);
    menuApplication->addSeparator();
    menuApplication->addAction(actionQuit);

    menuView = menuBar->addMenu(tr("View"));
    menuToolbars = menuView->addMenu(tr("Toolbars"));
    menuToolbars->addAction(actionQuickConnect);

    menuTools = menuBar->addMenu(tr("Tools"));
    menuTools->addAction(actionOptions);

    menuHelp = menuBar->addMenu(tr("Help"));
    menuHelp->addAction(actionDocumentation);
    menuHelp->addAction(actionVisitWebsite);
    menuHelp->addAction(actionReportBug);
    menuHelp->addSeparator();
    menuHelp->addAction(actionAbout);
    menuHelp->addAction(actionAboutQt);
    setMenuBar(menuBar);

    // Toolbar
    toolBar_quickConnect = new QToolBar(tr("Quick Connect"), this);
    toolBar_quickConnect->setFloatable(false);

    comboBox_quickConnect_server = new QComboBox(toolBar_quickConnect);
    comboBox_quickConnect_server->setToolTip(tr("Let's you select a prevously stored server."));

    pushButton_quickConnect_connect = new QPushButton(tr("Connect"), toolBar_quickConnect);
    pushButton_quickConnect_connect->setToolTip(tr("Connect's to the server selected in the combobox."));

    toolBar_quickConnect->addAction(actionServerManager);
    toolBar_quickConnect->addWidget(comboBox_quickConnect_server);
    toolBar_quickConnect->addWidget(pushButton_quickConnect_connect);
    addToolBar(toolBar_quickConnect);

    // TabWidget
    tabWidget = new QTabWidget(this);
    tabWidget->setDocumentMode(true);
    tabWidget->setMovable(true);
    tabWidget->setTabsClosable(true);
    setCentralWidget(tabWidget);

    // Statusbar
    statusBar = new QStatusBar(this);
    setStatusBar(statusBar);

    // Create and read settings
    readSettings();

    // Autoconnect serverentries which has the autoconnect option set to true.
    autoConnect();

    // Loads the server list from ServerManager.
    updateServerList();

    // Actions
    connect(actionServerManager, &QAction::triggered, this, &OpenRcon::actionServerManager_triggered);
    connect(actionQuit,          &QAction::triggered, this, &OpenRcon::close);
    connect(actionQuickConnect,  &QAction::triggered, this, &OpenRcon::actionQuickConnect_triggered);
    connect(actionOptions,       &QAction::triggered, this, &OpenRcon::actionOptions_triggered);
    connect(actionDocumentation, &QAction::triggered, this, &OpenRcon::actionDocumentation_triggered);
    connect(actionVisitWebsite,  &QAction::triggered, this, &OpenRcon::actionVisitWebsite_triggered);
    connect(actionReportBug,     &QAction::triggered, this, &OpenRcon::actionReportBug_triggered);
    connect(actionAbout,         &QAction::triggered, this, &OpenRcon::actionAbout_triggered);
    connect(actionAboutQt,       &QAction::triggered, this, &OpenRcon::actionAboutQt_triggered);

    // Toolbars
    connect(pushButton_quickConnect_connect, &QPushButton::clicked,              this, &OpenRcon::pushButton_quickConnect_connect_clicked);
    connect(serverManager,                   &ServerManager::onServerUpdated,    this, &OpenRcon::updateServerList);
    connect(sessionManager,                  &SessionManager::onServerConnected, this, &OpenRcon::updateServerList);

    // TabWidget
    connect(tabWidget, &QTabWidget::tabCloseRequested, this, &OpenRcon::closeTab);
}
コード例 #14
0
void MainWindow::on_buttonUpload_clicked()
{  
    //if connected
    if(connection==1)
    {
        //auto disconnection
        autoDisconnect();

        //there was a connection before
        oldconnection=1;
    }

    //temporary disable interface
    ui->buttonUpload->setEnabled(0);
    ui->buttonConnect->setEnabled(0);
    ui->cardComboBox->setEnabled(0);
    ui->speedComboBox->setEnabled(0);
    ui->portComboBox->setEnabled(0);
    ui->optionsLine->setEnabled(0);

    //set up upload information window
    infoUpload.setWindowTitle("Upload information");
    infoUpload.setMinimumSize(800,400);
    infoUpload.setStyleSheet("background-color: black; color: white;");

    //show upload information window
    infoUpload.show();

    //raise upload information window
    infoUpload.raise();

    //start upload process
    procUpload->start("avrdude -q "+ui->optionsLine->text()+" -p "+ui->cardComboBox->currentText()+" -c arduino -P "+ui->portComboBox->currentText()+" -b "+ui->speedComboBox->currentText()+" -U flash:w:"+hexName);

    //display panda message
    ui->pandaLabel->setText("Upload complete ! *dreaming*");

    //wait 2 sec
    delay(2000);

    //if disconnected and there was a connection before
    if((connection==0)&&(oldconnection==1))
    {
        //auto connection
        autoConnect();

        //reset old connection watcher
        oldconnection=0;
    }

    //if .hex complete directory path at default
    if(buildDir!="0")

        //enable upload button
        ui->buttonUpload->setEnabled(1);

    //enable interface
    ui->buttonConnect->setEnabled(1);
    ui->cardComboBox->setEnabled(1);
    ui->speedComboBox->setEnabled(1);
    ui->portComboBox->setEnabled(1);
    ui->optionsLine->setEnabled(1);
}