Exemple #1
0
void connecter(void *arg) {
    DMessage *message = d_new_message();
    int status;

    rt_printf("tconnect : Debut de l'exécution de tconnect\n");

    while (1) {
        rt_printf("tconnect : Attente du sémaphore semConnecterRobot\n");
        rt_sem_p(&semConnecterRobot, TM_INFINITE);
        rt_printf("tconnect : Ouverture de la communication avec le robot\n");
        status = robot->open_device(robot);
        rt_mutex_acquire(&mutexEtat, TM_INFINITE);
        etatCommRobot = status;

        if (status == STATUS_OK) {
            cptCommErr = 0;
            //robot->start_insecurely(robot);
            status = robot->start(robot);
            if (status == STATUS_OK) { /* Demarrage du robot */
                rt_printf("tconnect : Robot démarrer\n");
                rt_sem_v(&semDeplacer);
                rt_sem_v(&semRechargerWatchdog);
                rt_sem_v(&semVerifierBatterie);
            } else { /* Impossible de demarrer le robot, tentative de reinitialisation */
                robot->stop(robot);
                robot->close_com(robot);
            }
        }
        
        rt_mutex_release(&mutexEtat);
        message->put_state(message, status);
        serveur->send(serveur, message);
    }
}
Exemple #2
0
void comm_err_handler(int status) {
    DMessage *message = d_new_message();

    rt_printf("Trop d'erreurs de communication avec le robot => connexion perdue\n");
    robot->stop(robot);
    robot->close_com(robot);
    message->put_state(message, status);
    serveur->send(serveur, message);
}
Exemple #3
0
void Verif_Comm (int status) { 
    int compteur;
    DMessage *message;
    if (status != STATUS_OK) {
        rt_mutex_acquire(&mutexCpt, TM_INFINITE);
        cpt_perte_com ++;
        compteur = cpt_perte_com;
        rt_mutex_release(&mutexCpt);
         
        if (compteur >= 6) {
             
            // La communication est perdue
             
            rt_mutex_acquire(&mutexEtat, TM_INFINITE);
            etatCommRobot = status;
            rt_mutex_release(&mutexEtat);
             
            message = d_new_message();
            message->put_state(message, status);
            rt_printf("tmove : Envoi message\n");
            if (write_in_queue(&queueMsgGUI, message, sizeof (DMessage)) < 0) {
                message->free(message);
            }
            
            //rt_sem_v(&semConnectedRobot);
             
            // On réinitialise le compteur
            rt_mutex_acquire(&mutexCpt, TM_INFINITE);
            cpt_perte_com = 0 ;
            rt_mutex_release(&mutexCpt);
            compteur = 0 ;
             
            // On reset le robot
             
            //rt_mutex_acquire(&mutexRobot, TM_INFINITE);
            robot->close_com(robot); // a verifier
           // rt_mutex_release(&mutexRobot);
             
        }
    }
}
Exemple #4
0
void connecter(void * arg) {
    int status;
    DMessage *message;
 
    rt_printf("tconnect : Debut de l'exécution de tconnect\n");
 
    while (1) {
        rt_printf("tconnect : Attente du sémarphore semConnecterRobot\n");
        rt_sem_p(&semConnecterRobot, TM_INFINITE);
        rt_printf("tconnect : Ouverture de la communication avec le robot\n");
        status = robot->open_device(robot);
 
        rt_mutex_acquire(&mutexEtat, TM_INFINITE);
        etatCommRobot = status;
        rt_mutex_release(&mutexEtat);
 
        if (status == STATUS_OK) {
            status = robot->start_insecurely(robot);
            if (status == STATUS_OK){
                rt_printf("tconnect : Robot démarrer\n");
                
                                
                rt_sem_v(&semConnectedRobot); 
                rt_sem_v(&semConnectedRobot); 
            }
        }
 
        message = d_new_message();
        message->put_state(message, status);
        

 
        rt_printf("tconnecter : Envoi message\n");
        message->print(message, 100);
 
        if (write_in_queue(&queueMsgGUI, message, sizeof (DMessage)) < 0) {
            message->free(message);
        }
    }
}