From 10e9b5ada8232d3ec6320953ad9b6f42bead79ed Mon Sep 17 00:00:00 2001 From: haller Date: Thu, 28 Apr 2005 22:29:50 +0000 Subject: Ajout d'un test_es.cc pour tester la classe es Ajout d'une fonction wait à la classe es Quelques modifications --- 2005/i/robert/src/es/es.cc | 5 ++ 2005/i/robert/src/es/es.hh | 12 ++-- 2005/i/robert/src/es/test_es.cc | 143 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 2005/i/robert/src/es/test_es.cc (limited to '2005/i/robert/src/es') diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index 41baa51..5554d0a 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -72,6 +72,11 @@ void Es::ventouses(void) proto_.send('v'); } +void Es::wait(int timeout) +{ + proto_.wait(timeout); +} + void receive(char command, const Proto::Frame & frame) { switch(command) diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh index 86db4ed..a4d57f9 100644 --- a/2005/i/robert/src/es/es.hh +++ b/2005/i/robert/src/es/es.hh @@ -33,7 +33,7 @@ class Config; class Es : public Proto::Receiver { public: - typedef enum{HAUT, MILIEU, BAS} levelAsc; + enum levelAsc_t {HAUT, MILIEU, BAS}; private: // Objet Proto de communication vers la carte es Proto proto_; @@ -50,7 +50,7 @@ class Es : public Proto::Receiver bool jackOut_; /// Etat des capteurs enculeurs de murs (true si enfoncés) bool stateCapteurs_; - levelAsc stateAsc; + levelAsc_t stateAsc_; bool ascIdle_; public: @@ -62,14 +62,14 @@ class Es : public Proto::Receiver bool getStateJack(void); /// Renvoie la couleur sélectionné bool getColor(void); - /// Renvoie l'état des capteurs de contact(true si les 2 enfoncés) - bool capteursContact(void); /// Renvoie la position de l'ascenceur(true en haut false en bas) - levelAsc stateAsc(void); ///XXX au secours + levelAsc_t stateAsc(void); /// Execute un déplacement de l'ascenceur - void moveAsc(bool monte); + void moveAsc(levelAsc_t monte); /// Désactive les ventouses pour X secondes XXX vérifier la durées arg/config void ventouses(void); + /// On attend ... + void wait(int timeout); /// définition du receiver::receive void receive(char command, const Proto::Frame & frame); }; diff --git a/2005/i/robert/src/es/test_es.cc b/2005/i/robert/src/es/test_es.cc new file mode 100644 index 0000000..e5d561a --- /dev/null +++ b/2005/i/robert/src/es/test_es.cc @@ -0,0 +1,143 @@ +// test_es.cc +// robert - programme du robot 2005 {{{ +// +// Copyright (C) 2005 Nicolas Haller +// +// Robot APB Team/Efrei 2005. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +/// Affiche un memo de suntaxe. + +#include "timer/timer.hh" +#include "config/config.hh" +#include "es/es.hh" + +#include + + void +syntax (void) +{ + std::cout << "test_es - test la classe es.\n" + "Syntaxe : test_es <...>\n" + " s envois une commande\n" + " w attend pendant un nombre de millisecondes\n" + " ? affiche cet écran d'aide\n" + << std::endl; +} + + int +main (int argc, char **argv) +{ + try + { + int i; + if (argc < 2) + { + syntax (); + return 1; + } + Config config(argc, argv); + Es es(config); + i = 1; + while (i < argc) + { + switch (argv[i][0]) + { + case 's': + { + switch(argv[++i][0]) + { + case 'z': + es.init(); + break; + case 'J': + std::cout << "Jack: \n" << + "Booléen: " << es.getStateJack() << "\n" << + "Le Jack est " << (es.getStateJack() ? "sortie" : "Entrée") << std::endl; + break; + case 'C': + std::cout << "Couleur: \n" << + "Booléen: " << es.getColor() << "\n" << + "La couleur sélectionné est le " << + (es.getColor() ? "rouge" : "vert") << std::endl; + break; + case 'A': + std::cout << "L'ascenceur est en position "; + if(es.stateAsc() == Es::levelAsc_t::HAUT) // XXX Faudrait qu'on m'explique + std::cout << "HAUTE" << std::endl; + else if(es.stateAsc() == Es::levelAsc_t::MILIEU) + std::cout << "MILIEU" << std::endl; + else + std::cout << "BASSE" << std::endl; + break; + case 'a': + if(++i + 1 > argc) + throw std::runtime_error("syntax error"); + switch(argv[i][0]) + { + case '0': + es.moveAsc(Es::levelAsc_t::BAS); + break; + case '1': + es.moveAsc(Es::levelAsc_t::MILIEU); + break; + case '2': + es.moveAsc(Es::levelAsc_t::HAUT); + break; + } + break; + case 'v': + es.ventouses(); + break; + } + break; + } + case 'w': + { + int stop, t; + if (i + 1 >= argc) + throw std::runtime_error ("syntax error"); + stop = atoi (argv[++i]) + Timer::getProgramTime (); + t = Timer::getProgramTime (); + while (t < stop) + { + es.wait (stop - t); + t = Timer::getProgramTime (); + } + break; + } + case '?': + syntax (); + return 0; + default: + throw std::runtime_error ("syntax error"); + } + i++; + } + } + catch (const std::exception &e) + { + std::cerr << e.what () << std::endl; + syntax (); + return 1; + } + return 0; +} + -- cgit v1.2.3