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.old | 124 +++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 i/marvin/src/proto/test_proto.cc.old (limited to 'i/marvin/src/proto/test_proto.cc.old') 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