6 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" 10 #include <gtest/gtest.h> 18 uavcan::protocol::NodeStatus msg;
19 msg.health = uavcan::protocol::NodeStatus::HEALTH_OK;
20 msg.mode = uavcan::protocol::NodeStatus::MODE_OPERATIONAL;
21 msg.uptime_sec = uptime_sec;
35 : status_message_cnt(0)
36 , status_change_cnt(0)
37 , info_unavailable_cnt(0)
41 const uavcan::protocol::GetNodeInfo::Response& node_info)
43 last_node_id = node_id;
44 std::cout << node_info << std::endl;
45 last_node_info.reset(
new uavcan::protocol::GetNodeInfo::Response(node_info));
50 std::cout <<
"NODE INFO FOR " <<
int(node_id.
get()) <<
" IS UNAVAILABLE" << std::endl;
51 last_node_id = node_id;
52 info_unavailable_cnt++;
57 std::cout <<
"NODE " <<
int(event.
node_id.
get()) <<
" STATUS CHANGE: " 58 << event.
old_status.toString() <<
" --> " <<
event.status.toString() << std::endl;
64 std::cout << msg << std::endl;
70 TEST(NodeInfoRetriever, Basic)
80 std::cout <<
"sizeof(uavcan::ServiceClient<uavcan::protocol::GetNodeInfo>): " 90 ASSERT_LE(0, retr.
start());
98 uavcan::protocol::HardwareVersion hwver;
99 hwver.unique_id[0] = 123;
100 hwver.unique_id[4] = 213;
101 hwver.unique_id[8] = 45;
103 provider->setName(
"Ivan");
104 provider->setHardwareVersion(hwver);
106 ASSERT_LE(0, provider->startAndPublish());
209 std::cout <<
"Invalidation" << std::endl;
228 TEST(NodeInfoRetriever, MaxConcurrentRequests)
238 std::cout <<
"sizeof(uavcan::ServiceClient<uavcan::protocol::GetNodeInfo>): " 246 ASSERT_LE(0, retr.
start());
256 const unsigned MaxPendingRequests = 26;
257 const unsigned MinPendingRequestsAtFullLoad = 12;
262 for (
uint8_t node_id = 1U; node_id <= 127U; node_id++)
273 for (
int i = 0; i < 8; i++)
276 std::cout <<
"!!! SPIN " << i <<
" COMPLETE" << std::endl;
uint8_t getNumPendingRequests() const
int addListener(INodeInfoListener *listener)
MonotonicDuration getRequestInterval() const
unsigned info_unavailable_cnt
unsigned getNumListeners() const
std::unique_ptr< uavcan::protocol::GetNodeInfo::Response > last_node_info
virtual void handleNodeInfoUnavailable(uavcan::NodeID node_id)
virtual void handleNodeInfoRetrieved(uavcan::NodeID node_id, const uavcan::protocol::GetNodeInfo::Response &node_info)
unsigned status_message_cnt
bool isRetrievingInProgress() const
void removeListener(INodeInfoListener *listener)
static void publishNodeStatus(PairableCanDriver &can, uavcan::NodeID node_id, uavcan::uint32_t uptime_sec, uavcan::TransferID tid)
int start(const TransferPriority priority=TransferPriority::OneHigherThanLowest)
static void emulateSingleFrameBroadcastTransfer(CanDriver &can, uavcan::NodeID node_id, const MessageType &message, uavcan::TransferID tid)
static GlobalDataTypeRegistry & instance()
void setNumRequestAttempts(const uint8_t num)
virtual void handleNodeStatusMessage(const uavcan::ReceivedDataStructure< uavcan::protocol::NodeStatus > &msg)
static MonotonicDuration fromMSec(int64_t ms)
unsigned status_change_cnt
int spinBoth(uavcan::MonotonicDuration duration)
TEST(NodeInfoRetriever, Basic)
uavcan::NodeID last_node_id
virtual void handleNodeStatusChange(const uavcan::NodeStatusMonitor::NodeStatusChangeEvent &event)