summaryrefslogtreecommitdiff
path: root/i/chuck/src/proto/test_proto.cc
diff options
context:
space:
mode:
authorbecquet2007-05-10 18:49:20 +0000
committerbecquet2007-05-10 18:49:20 +0000
commit8f486613be58ced269db1d437e560c16558604e8 (patch)
tree41e94b2122a118cb06abf6fc2a0038cd1dfbec4a /i/chuck/src/proto/test_proto.cc
parent4daa2c76c2a028e4b2c8ab379e7d1e0f535a0a31 (diff)
Création de chuck, le programme du robot 2007.
Diffstat (limited to 'i/chuck/src/proto/test_proto.cc')
-rw-r--r--i/chuck/src/proto/test_proto.cc96
1 files changed, 96 insertions, 0 deletions
diff --git a/i/chuck/src/proto/test_proto.cc b/i/chuck/src/proto/test_proto.cc
new file mode 100644
index 0000000..01cac96
--- /dev/null
+++ b/i/chuck/src/proto/test_proto.cc
@@ -0,0 +1,96 @@
+// test_proto.cc
+// robert - programme du robot 2006. {{{
+//
+// Copyright (C) 2005 Nicolas Haller
+//
+// Robot APB Team/Efrei 2006.
+// 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 "tester/tester.hh"
+#include "parser/parser.hh"
+
+#include <iostream>
+#include <stdexcept>
+
+class TestProto : public Tester, Proto::Receiver
+{
+ 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<std::string>("testProto.tty"));
+ // Add functions.
+ interpreter.add ("s", Interpreter::memFunc ( *this, &TestProto::send ),
+ "Fonction send (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;
+ }
+ void send (const Parser::AnyList & al, bool dryrun)
+ {
+ Parser::AnyList::const_iterator it = al.begin();
+ // arguments envoyé à la fonctions Proto::send
+ int arg[6];
+ // command avr
+ char command = any_cast<char> (*it);
+ // format des arguments
+ std::string format = any_cast<std::string> (*++it);
+ // Récupération des arguments
+ for (unsigned i = 0; i < 6; ++i)
+ {
+ if(i < al.size() - 2)
+ arg[i] = any_cast<int> (*++it);
+ else
+ arg[i] = 0;
+ }
+ if (!dryrun)
+ proto_.send(command, format.c_str(), arg[0], arg[1], arg[2],
+ arg[3], arg[4], arg[5]);
+ }
+};
+
+int
+main (int argc, char **argv)
+{
+ try
+ {
+ TestProto tp (argc, argv);
+ tp.run ();
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << e.what () << std::endl;
+ }
+}