node.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #include <gtest/gtest.h>
6 #include <uavcan/node/node.hpp>
7 #include <uavcan/node/sub_node.hpp> // Compilability test
9 #include "test_node.hpp"
10 #include "../protocol/helpers.hpp"
11 
12 static void registerTypes()
13 {
21 }
22 
23 
24 TEST(Node, Basic)
25 {
26  registerTypes();
28 
29  uavcan::protocol::SoftwareVersion swver;
30  swver.major = 0;
31  swver.minor = 1;
32  swver.vcs_commit = 0xDEADBEEF;
33 
34  std::cout << "sizeof(uavcan::Node<0>): " << sizeof(uavcan::Node<0>) << std::endl;
35 
36  /*
37  * uavcan::Node
38  */
39  uavcan::Node<1024> node1(nodes.can_a, nodes.clock_a);
40  node1.setName("com.example");
41  node1.setNodeID(1);
42  node1.setSoftwareVersion(swver);
43 
44  /*
45  * Companion test node
46  */
47  uavcan::Node<1024> node2(nodes.can_b, nodes.clock_b);
48  node2.setName("foobar");
49  node2.setNodeID(2);
50  node2.setSoftwareVersion(swver);
51 
52  BackgroundSpinner bgspinner(node2, node1);
54 
55  uavcan::NodeStatusMonitor node_status_monitor(node2);
56  ASSERT_LE(0, node_status_monitor.start());
57 
58  /*
59  * Init the second node - network is empty
60  */
61  ASSERT_LE(0, node2.start());
62  ASSERT_FALSE(node_status_monitor.findNodeWithWorstHealth().isValid());
63 
64  /*
65  * Init the first node
66  */
67  ASSERT_FALSE(node1.isStarted());
68  ASSERT_EQ(-uavcan::ErrNotInited, node1.spin(uavcan::MonotonicDuration::fromMSec(20)));
69  ASSERT_LE(0, node1.start());
70  ASSERT_TRUE(node1.isStarted());
71 
72  ASSERT_LE(0, node1.spin(uavcan::MonotonicDuration::fromMSec(2000)));
73 
74  ASSERT_EQ(1, node_status_monitor.findNodeWithWorstHealth().get());
75 
76  /*
77  * Some logging
78  */
80  ASSERT_LE(0, log_sub.start());
81 
82  node1.getLogger().setLevel(uavcan::protocol::debug::LogLevel::DEBUG);
83  node1.logInfo("test", "6 * 9 = 42");
84 
85  ASSERT_LE(0, node1.spin(uavcan::MonotonicDuration::fromMSec(20)));
86  ASSERT_LE(0, node2.spin(uavcan::MonotonicDuration::fromMSec(20)));
87 
88  ASSERT_TRUE(log_sub.collector.msg.get());
89  std::cout << *log_sub.collector.msg << std::endl;
90 }
uavcan::INode::setNodeID
bool setNodeID(NodeID nid)
Definition: abstract_node.hpp:48
uavcan::Node::setSoftwareVersion
void setSoftwareVersion(const protocol::SoftwareVersion &version)
Definition: node.hpp:203
uavcan::NodeID::isValid
bool isValid() const
Definition: transfer.hpp:134
uavcan::DefaultDataTypeRegistrator
Definition: global_data_type_registry.hpp:186
SubscriberWithCollector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:33
uavcan::NodeID::get
uint8_t get() const
Definition: transfer.hpp:132
node.hpp
registerTypes
static void registerTypes()
Definition: node.cpp:12
uavcan::DurationBase< MonotonicDuration >::fromMSec
static MonotonicDuration fromMSec(int64_t ms)
Definition: time.hpp:41
uavcan::Node::spin
int spin(MonotonicTime deadline)
Definition: node.hpp:120
InterlinkedTestNodes::can_b
PairableCanDriver can_b
Definition: test_node.hpp:154
SubscriberWithCollector::start
int start()
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:45
uavcan::NodeStatusMonitor
Definition: node_status_monitor.hpp:22
uavcan::TimerBase::startPeriodic
void startPeriodic(MonotonicDuration period)
Definition: uc_timer.cpp:42
uavcan::Node::setName
void setName(const NodeStatusProvider::NodeName &name)
Definition: node.hpp:167
node_status_monitor.hpp
InterlinkedTestNodes
Definition: test_node.hpp:149
SubscriberWithCollector::collector
Collector collector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:38
test_node.hpp
uavcan::NodeStatusMonitor::findNodeWithWorstHealth
NodeID findNodeWithWorstHealth() const
Definition: node_status_monitor.hpp:277
uavcan::Node::start
int start(const TransferPriority node_status_transfer_priority=TransferPriority::Default)
Definition: node.hpp:274
InterlinkedTestNodes::clock_b
ClockType clock_b
Definition: test_node.hpp:152
SubscriptionCollector::msg
std::unique_ptr< DataType > msg
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:23
InterlinkedTestNodes::clock_a
ClockType clock_a
Definition: test_node.hpp:151
uavcan::GlobalDataTypeRegistry::instance
static GlobalDataTypeRegistry & instance()
Definition: uc_global_data_type_registry.cpp:128
sub_node.hpp
BackgroundSpinner
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:119
uavcan::Node
Definition: node.hpp:38
InterlinkedTestNodes::can_a
PairableCanDriver can_a
Definition: test_node.hpp:153
TEST
TEST(Node, Basic)
Definition: node.cpp:24
uavcan::NodeStatusMonitor::start
int start()
Definition: node_status_monitor.hpp:196


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02