|
Goby Underwater Autonomy Project
Series: 1.1, revision: 163, released on 2013-02-06 14:23:27 -0500
|
two_message.xml
<?xml version="1.0" encoding="UTF-8"?>
<message_set>
<message>
<name>GoToCommand</name>
<id>2</id>
<size>32</size>
<header>
<dest_id>
<name>destination</name>
</dest_id>
</header>
<layout>
<static>
<name>type</name>
<value>goto</value>
</static>
<int>
<name>goto_x</name>
<max>10000</max>
<min>0</min>
</int>
<int>
<name>goto_y</name>
<max>10000</max>
<min>0</min>
</int>
<bool>
<name>lights_on</name>
</bool>
<string>
<name>new_instructions</name>
<max_length>10</max_length>
</string>
<float>
<name>goto_speed</name>
<max>3</max>
<min>0</min>
<precision>2</precision>
</float>
</layout>
</message>
<message>
<name>VehicleStatus</name>
<id>3</id>
<size>32</size>
<layout>
<float>
<name>nav_x</name>
<max>10000</max>
<min>0</min>
<precision>1</precision>
</float>
<float>
<name>nav_y</name>
<max>10000</max>
<min>0</min>
<precision>1</precision>
</float>
<enum>
<name>health</name>
<value>good</value>
<value>low_battery</value>
<value>abort</value>
</enum>
</layout>
</message>
</message_set>
two_message.cpp
// t. schneider tes@mit.edu 3.31.09 // // 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 3 of the License, or // (at your option) any later version. // // This software 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 software. If not, see <http://www.gnu.org/licenses/>. // encodes/decodes the message given in the pGeneralCodec documentation // also includes the simple.xml file to show example of DCCLCodec instantiation // with multiple files #include "goby/acomms/dccl.h" #include <exception> #include <iostream> using namespace goby; using goby::acomms::operator<<; int main() { std::cout << "loading xml files: xml/simple.xml, xml/two_message.xml" << std::endl; goby::acomms::DCCLCodec dccl; goby::acomms::protobuf::DCCLConfig cfg; cfg.add_message_file()->set_path(DCCL_EXAMPLES_DIR "/dccl_simple/simple.xml"); cfg.add_message_file()->set_path(DCCL_EXAMPLES_DIR "/two_message/two_message.xml"); // must be kept secret! cfg.set_crypto_passphrase("my_passphrase!"); dccl.set_cfg(cfg); // show some useful information about all the loaded messages std::cout << std::string(30, '#') << std::endl << "number of messages loaded: " << dccl.message_count() << std::endl << std::string(30, '#') << std::endl; std::cout << std::string(30, '#') << std::endl << "detailed message summary:" << std::endl << std::string(30, '#') << std::endl << dccl; std::cout << std::string(30, '#') << std::endl << "brief message summary:" << std::endl << std::string(30, '#') << std::endl << dccl.brief_summary(); std::cout << std::string(30, '#') << std::endl << "all loaded ids:" << std::endl << std::string(30, '#') << std::endl << dccl.all_message_ids(); std::cout << std::string(30, '#') << std::endl << "all loaded names:" << std::endl << std::string(30, '#') << std::endl << dccl.all_message_names(); std::cout << std::string(30, '#') << std::endl << "all required message var names:" << std::endl << std::string(30, '#') << std::endl; std::set<unsigned> s = dccl.all_message_ids(); for (std::set<unsigned>::const_iterator it = s.begin(), n = s.end(); it != n; ++it) std::cout << (*it) << ": " << dccl.message_var_names(*it) << std::endl; std::cout << std::string(30, '#') << std::endl << "ENCODE / DECODE example:" << std::endl << std::string(30, '#') << std::endl; // initialize input contents to encoder std::map<std::string, acomms::DCCLMessageVal> vals; // initialize output hexadecimal std::string bytes2, bytes3; // id = 2, name = GoToCommand vals["destination"] = 2; vals["goto_x"] = 423; vals["goto_y"] = 523; vals["lights_on"] = true; vals["new_instructions"] = "make_toast"; vals["goto_speed"] = 2.3456; // id = 3, name = VehicleStatus vals["nav_x"] = 234.5; vals["nav_y"] = 451.3; vals["health"] = "abort"; std::cout << "passing values to encoder:" << std::endl << vals; dccl.encode(2, bytes2, vals); dccl.encode(3, bytes3, vals); std::cout << "received hexadecimal string for message 2 (GoToCommand): " << goby::acomms::hex_encode(bytes2) << std::endl; std::cout << "received hexadecimal string for message 3 (VehicleStatus): " << goby::acomms::hex_encode(bytes3) << std::endl; vals.clear(); std::cout << "passed hexadecimal string for message 2 to decoder: " << goby::acomms::hex_encode(bytes2) << std::endl; std::cout << "passed hexadecimal string for message 3 to decoder: " << goby::acomms::hex_encode(bytes3) << std::endl; dccl.decode(bytes2, vals); dccl.decode(bytes3, vals); std::cout << "received values:" << std::endl << vals; return 0; }
1.7.6.1