/**
 * Exécute la commande suivante dans l'organigramme
 * @brief ModuleManager::ExecuterCommandeSuivante
 */
void ModuleManager::ExecuterCommandeSuivante()
{
    //Si la pile n'est pas vide
    if(!this->PileExec.isEmpty())
    {
        //Si on est pas en attente d'une réponse de la maquette
        if(!this->AttenteReponse)
        {
            //On remet le compteur de timeout à 0 et on déclare les variables necessaire
            this->CompteurTimeout = 0;
            IdentifiantInst PointeurInst;
            Instruction *    InstExec    (0);

            //On récupère l'instruction du haut de la pile
            PointeurInst    = this->PileExec.pop() ;
            InstExec        = this->ListeRoutines[PointeurInst.nIdRoutine]->getInstruction(PointeurInst.nIdInstruction) ;

            //Récupération de la vue correspondante à la routine en cours d'exécution
            Vue *   VueExec (this->ListeVues[PointeurInst.nIdRoutine]);

            //Récupération de l'index de la vue
            int     IxdexTab(this->pTabW_AfficheurRoutine->indexOf(VueExec));

            //Bascule sur l'onglet correspondant à la routine en cours
            this->pTabW_AfficheurRoutine->setCurrentIndex(IxdexTab);

            //Récupération de l'item correspondant à l'instruction en cours d'exécution
            Item *  ItemExec(VueExec->getItem(PointeurInst.nIdInstruction));

            //On déselectionne tous les items de la vue
            VueExec->DeselectionnerItems();

            //On ne selectinone que celui en cours
            ItemExec->setSelected(true);

            //On exécute enfin l'instruction
            InstExec->Executer();

            //On définit l'interval avant la prochaine instruction (en cas de tempo, c'est ici que ça se joue)
            this->TimerExec.setInterval(this->Temporisation);
            this->Temporisation = INTERVAL_DEFAULT ; //RAZ de la tempo

            //Si on est en mode debug
            if(this->ModeDebug)
            {
                //On indique que le programme est en pause
                emit this->EtatExec(PAUSE);
            }
        }
        else //Si on est en attente d'une réponse
        {
            this->CompteurTimeout++; //On compte

            if(CompteurTimeout > 10) //Si on met plus de 10 essais (1 seconde) à réussir, on abandonne la commande
            {
                qDebug() << "Exec org : Timeout...";
                this->AttenteReponse = false;
                this->CompteurTimeout = 0;
                this->pArduino->AnnulerDerniereCommande(ORG);
            }
        }

    }
    else //Si la pile est vie, on arrête l'exécution
    {
        this->StopperExecution();
    }
}