From cccec393fd1d6dc3f4586e69b4d29aaa128536b3 Mon Sep 17 00:00:00 2001 From: haller Date: Mon, 15 May 2006 22:27:25 +0000 Subject: * Debut de conversion de test_proto --- i/marvin/src/proto/test_proto.cc | 121 ++++++++-------------------------- i/marvin/src/proto/test_proto.cc.old | 124 +++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 93 deletions(-) create mode 100644 i/marvin/src/proto/test_proto.cc.old (limited to 'i/marvin') diff --git a/i/marvin/src/proto/test_proto.cc b/i/marvin/src/proto/test_proto.cc index 9ec119d..5af8d14 100644 --- a/i/marvin/src/proto/test_proto.cc +++ b/i/marvin/src/proto/test_proto.cc @@ -1,9 +1,9 @@ // test_proto.cc -// robert - programme du robot 2005. {{{ +// robert - programme du robot 2006. {{{ // // Copyright (C) 2005 Nicolas Haller // -// Robot APB Team/Efrei 2005. +// Robot APB Team/Efrei 2006. // Web: http://assos.efrei.fr/robot/ // Email: robot AT efrei DOT fr // @@ -24,101 +24,36 @@ // }}} #include "proto.hh" #include "timer/timer.hh" +#include "tester/tester.hh" #include #include -/// Classe de test pour proto. -class TestProto : public Proto::Receiver +class TestProto : public Tester, Proto::Receiver { - void receive (char command, const Proto::Frame &frame) - { - std::cout << "received " << frame << std::endl; - } + private: + Proto proto_; + public: + // Constructor + TestProto (int argc, char ** argv) + : Tester (argc, argv), proto_(*this){} + void preRun (void) + { + Interpreter &interpreter = getInterpreter (); + // Récupère le tty de config + proto_.open(config_.get("proto.tty")); + // Add functions. + interpreter.add ("s", Interpreter::memFunc ( proto_, &Proto::send ), + "Fonction wait (string, commande, string format, int arg...)"); + interpreter.add ("w", Interpreter::memFunc ( proto_, &Proto::wait ), "Fonction wait ()"); + } + void postRun(void) + { + proto_.close(); + } + void receive (char command, const Proto::Frame &frame) + { + std::cout << "received " << frame << std::endl; + } }; -/// Affiche un memo de suntaxe. -void -syntax (void) -{ - std::cout << "test_proto - test la classe de protocol série.\n" - "Syntaxe : test_proto <...>\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; - } - TestProto testProto; - Proto proto (testProto); - proto.open (argv[1]); - i = 2; - while (i < argc) - { - bool reliable = true; - switch (argv[i][0]) - { - case 'S': - reliable = false; - // no break; - case 's': - { - if (i + 2 >= argc) - throw std::runtime_error ("syntax error"); - unsigned a; - int arg[4]; - char c = argv[++i][0]; - const char *format = argv[++i]; - if (i + static_cast (strlen (format)) >= argc) - throw std::runtime_error ("syntax error"); - for (a = 0; a < 4 && a < strlen (format); a++) - arg[a] = atoi (argv[++i]); - proto.send (c, format, arg[0], arg[1], arg[2], arg[3], - reliable); - while (!proto.wait (-1)) - ; - } - 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) - { - proto.wait (stop - t); - t = Timer::getProgramTime (); - } - break; - } - case '?': - proto.close (); - 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; -} diff --git a/i/marvin/src/proto/test_proto.cc.old b/i/marvin/src/proto/test_proto.cc.old new file mode 100644 index 0000000..9ec119d --- /dev/null +++ b/i/marvin/src/proto/test_proto.cc.old @@ -0,0 +1,124 @@ +// test_proto.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. +// +// }}} +#include "proto.hh" +#include "timer/timer.hh" + +#include +#include + +/// Classe de test pour proto. +class TestProto : public Proto::Receiver +{ + void receive (char command, const Proto::Frame &frame) + { + std::cout << "received " << frame << std::endl; + } +}; + +/// Affiche un memo de suntaxe. +void +syntax (void) +{ + std::cout << "test_proto - test la classe de protocol série.\n" + "Syntaxe : test_proto <...>\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; + } + TestProto testProto; + Proto proto (testProto); + proto.open (argv[1]); + i = 2; + while (i < argc) + { + bool reliable = true; + switch (argv[i][0]) + { + case 'S': + reliable = false; + // no break; + case 's': + { + if (i + 2 >= argc) + throw std::runtime_error ("syntax error"); + unsigned a; + int arg[4]; + char c = argv[++i][0]; + const char *format = argv[++i]; + if (i + static_cast (strlen (format)) >= argc) + throw std::runtime_error ("syntax error"); + for (a = 0; a < 4 && a < strlen (format); a++) + arg[a] = atoi (argv[++i]); + proto.send (c, format, arg[0], arg[1], arg[2], arg[3], + reliable); + while (!proto.wait (-1)) + ; + } + 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) + { + proto.wait (stop - t); + t = Timer::getProgramTime (); + } + break; + } + case '?': + proto.close (); + 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