libuav original

Dependents:   UAVCAN UAVCAN_Subscriber

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sub_node.cpp Source File

sub_node.cpp

00001 /*
00002  * Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
00003  */
00004 
00005 #include <gtest/gtest.h>
00006 #include <uavcan/node/node.hpp>
00007 #include <uavcan/node/sub_node.hpp>
00008 #include <uavcan/protocol/node_status_monitor.hpp>
00009 #include "test_node.hpp"
00010 #include "../protocol/helpers.hpp"
00011 
00012 static void registerTypes()
00013 {
00014     uavcan::GlobalDataTypeRegistry::instance().reset();
00015     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::NodeStatus> _reg2;
00016     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::GetNodeInfo> _reg4;
00017     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::GetDataTypeInfo> _reg5;
00018     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::debug::LogMessage> _reg6;
00019     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::GetTransportStats> _reg7;
00020     uavcan::DefaultDataTypeRegistrator<uavcan::protocol::RestartNode> _reg8;
00021 }
00022 
00023 
00024 TEST(SubNode, Basic)
00025 {
00026     registerTypes();
00027     InterlinkedTestNodesWithSysClock nodes;
00028 
00029     uavcan::protocol::SoftwareVersion swver;
00030     swver.major = 0;
00031     swver.minor = 1;
00032     swver.vcs_commit = 0xDEADBEEF;
00033 
00034     std::cout << "sizeof(uavcan::SubNode<0>): " << sizeof(uavcan::SubNode<0>) << std::endl;
00035 
00036     /*
00037      * uavcan::Node
00038      */
00039     uavcan::Node<1024> node1(nodes.can_a, nodes.clock_a);
00040     node1.setName("com.example");
00041     node1.setNodeID(1);
00042     node1.setSoftwareVersion(swver);
00043 
00044     /*
00045      * uavcan::SubNode
00046      */
00047     uavcan::SubNode<1024> node2(nodes.can_b, nodes.clock_b);
00048 
00049     BackgroundSpinner bgspinner(node2, node1);
00050     bgspinner.startPeriodic(uavcan::MonotonicDuration::fromMSec(10));
00051 
00052     uavcan::NodeStatusMonitor node_status_monitor(node2);
00053     ASSERT_LE(0, node_status_monitor.start());
00054 
00055     /*
00056      * Init the first node
00057      */
00058     ASSERT_FALSE(node1.isStarted());
00059     ASSERT_EQ(-uavcan::ErrNotInited, node1.spin(uavcan::MonotonicDuration::fromMSec(20)));
00060     ASSERT_LE(0, node1.start());
00061     ASSERT_TRUE(node1.isStarted());
00062 
00063     ASSERT_LE(0, node1.spin(uavcan::MonotonicDuration::fromMSec(2000)));
00064 
00065     ASSERT_EQ(1, node_status_monitor.findNodeWithWorstHealth().get());
00066 
00067     /*
00068      * Some logging
00069      */
00070     SubscriberWithCollector<uavcan::protocol::debug::LogMessage> log_sub(node2);
00071     ASSERT_LE(0, log_sub.start());
00072 
00073     node1.getLogger().setLevel(uavcan::protocol::debug::LogLevel::DEBUG);
00074     node1.logInfo("test", "6 * 9 = 42");
00075 
00076     ASSERT_LE(0, node1.spin(uavcan::MonotonicDuration::fromMSec(20)));
00077     ASSERT_LE(0, node2.spin(uavcan::MonotonicDuration::fromMSec(20)));
00078 
00079     ASSERT_TRUE(log_sub.collector.msg.get());
00080     std::cout << *log_sub.collector.msg << std::endl;
00081 }