From de62a72457f02a32b27bdaaf0ce5f958a03ae734 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Wed, 9 May 2018 00:59:23 +0200 Subject: [PATCH] =?UTF-8?q?Peut=20ignorer=20si=20l'Arduino=20n'est=20pas?= =?UTF-8?q?=20connect=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chef/src/actionneurs.c | 47 +++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/chef/src/actionneurs.c b/chef/src/actionneurs.c index 94ab515..70454db 100644 --- a/chef/src/actionneurs.c +++ b/chef/src/actionneurs.c @@ -1,10 +1,14 @@ // Robotech Lille 2017-2018 -#include "actionneurs.h" +#include +#include + #include "CA.h" +#include "actionneurs.h" pthread_mutex_t receptionActionMutex; pthread_cond_t receptionActionCond; +bool actionneursConfigured = false; // On fait un truc de malpropre : étant donné que l'Arduino // peut faire qu'une seule tache à la fois on suppose que le @@ -12,6 +16,8 @@ pthread_cond_t receptionActionCond; void configureActionneurs() { + actionneursConfigured = true; + configureCA(); pthread_mutex_init(&receptionActionMutex, NULL); pthread_cond_init(&receptionActionCond, NULL); resetActionneurs(); @@ -26,15 +32,15 @@ void setPositionBalle(enum positionBalle pos) { unsigned char code; switch (pos) { - case attente: - code = C2AD_POS_BALLE_ATTENTE; - break; - case ejection: - code = C2AD_POS_BALLE_EJECTION; - break; - case evacuation: - code = C2AD_POS_BALLE_EVACUATION; - break; + case attente: + code = C2AD_POS_BALLE_ATTENTE; + break; + case ejection: + code = C2AD_POS_BALLE_EJECTION; + break; + case evacuation: + code = C2AD_POS_BALLE_EVACUATION; + break; } attendAction(code); } @@ -64,7 +70,6 @@ void setPropulsion(bool state) attendAction(state ? C2AD_PROPULSION_ON : C2AD_PROPULSION_OFF); } - void resetActionneurs() { setLoquet(false); @@ -87,14 +92,22 @@ void receptionAction() void attendAction(unsigned char code) { - pthread_mutex_lock(&receptionActionMutex); - registerRxHandlerCA(code, receptionAction); - sendCA(code, NULL, 0); - pthread_cond_wait(&receptionActionCond, &receptionActionMutex); - pthread_mutex_unlock(&receptionActionMutex); + if (actionneursConfigured) { + pthread_mutex_lock(&receptionActionMutex); + registerRxHandlerCA(code, receptionAction); + sendCA(code, NULL, 0); + pthread_cond_wait(&receptionActionCond, &receptionActionMutex); + pthread_mutex_unlock(&receptionActionMutex); + } else { + fprintf(stderr, "Action demandée sans Arduino configuré\n"); + } } void deconfigureActionneurs() { - stopActionneurs(); + if (actionneursConfigured) { + stopActionneurs(); + deconfigureCA(); + actionneursConfigured = false; + } }