@@ -44,13 +44,14 @@ using namespace urcl;
4444namespace
4545{
4646// ConfigurationData payload before optional int16 reserved fields (older UR software).
47- constexpr size_t kConfigurationDataPayloadBytes = 6 * 2 * sizeof (double ) + // joint position limits
48- 6 * 2 * sizeof (double ) + // joint motion limits
49- 5 * sizeof (double ) + // v/a joint/tool defaults + eq_radius
50- 4 * 6 * sizeof (double ) + // dh_a, dh_d, dh_alpha, dh_theta
51- 4 * sizeof (int32_t ); // masterboard, controller, robot type, sub type
47+ constexpr size_t CONFIGURATION_DATA_PAYLOAD_BYTES =
48+ 6 * 2 * sizeof (double ) + // joint position limits
49+ 6 * 2 * sizeof (double ) + // joint motion limits
50+ 5 * sizeof (double ) + // v/a joint/tool defaults + eq_radius
51+ 4 * 6 * sizeof (double ) + // dh_a, dh_d, dh_alpha, dh_theta
52+ 4 * sizeof (int32_t ); // masterboard, controller, robot type, sub type
5253
53- static_assert (kConfigurationDataPayloadBytes == 440 );
54+ static_assert (CONFIGURATION_DATA_PAYLOAD_BYTES == 440 );
5455
5556std::vector<uint8_t > makeRobotStatePacketWithConfigurationSubmessage (const std::vector<uint8_t >& configuration_payload)
5657{
@@ -79,20 +80,20 @@ std::vector<uint8_t> makeRobotStatePacketWithConfigurationSubmessage(const std::
7980
8081// Masterboard payload sizes (not including packageSize + packageType header).
8182// Base payload up to and including `immiInterfaceInstalled` flag.
82- constexpr size_t kMasterboardPayloadBytesBeforeImmi = 2 * sizeof (uint32_t ) + // digital input/output bits
83- 2 * sizeof (uint8_t ) + // analog input ranges
84- 2 * sizeof (double ) + // analog inputs
85- 2 * sizeof (char ) + // analog output domains
86- 2 * sizeof (double ) + // analog outputs
87- 4 * sizeof (float ) + // temperature + voltages + currents
88- sizeof (uint8_t ) + // safety mode
89- sizeof (uint8_t ) + // in reduced mode (bool)
90- sizeof (uint8_t ); // immi interface installed (bool)
91- constexpr size_t kMasterboardOptionalImmiBytes = 2 * sizeof (uint32_t ) + 2 * sizeof (float );
92- constexpr size_t kMasterboardPayloadBytesAfterImmi = sizeof (uint32_t ) + // reserved
93- sizeof (uint8_t ) + // operational mode selector input
94- sizeof (uint8_t ) + // three position enabling device (bool)
95- sizeof (uint8_t ); // reserved
83+ constexpr size_t MASTERBOARD_PAYLOAD_BYTES_BEFORE_IMMI = 2 * sizeof (uint32_t ) + // digital input/output bits
84+ 2 * sizeof (uint8_t ) + // analog input ranges
85+ 2 * sizeof (double ) + // analog inputs
86+ 2 * sizeof (char ) + // analog output domains
87+ 2 * sizeof (double ) + // analog outputs
88+ 4 * sizeof (float ) + // temperature + voltages + currents
89+ sizeof (uint8_t ) + // safety mode
90+ sizeof (uint8_t ) + // in reduced mode (bool)
91+ sizeof (uint8_t ); // immi interface installed (bool)
92+ constexpr size_t MASTERBOARD_OPTIONAL_IMMI_BYTES = 2 * sizeof (uint32_t ) + 2 * sizeof (float );
93+ constexpr size_t MASTERBOARD_PAYLOAD_BYTES_AFTER_IMMI = sizeof (uint32_t ) + // reserved
94+ sizeof (uint8_t ) + // operational mode selector input
95+ sizeof (uint8_t ) + // three position enabling device (bool)
96+ sizeof (uint8_t ); // reserved
9697
9798std::vector<uint8_t > makeRobotStatePacketWithMasterboardSubmessage (const std::vector<uint8_t >& masterboard_payload)
9899{
@@ -611,7 +612,7 @@ TEST_F(PrimaryParserTest, parse_safetymode_msg)
611612 }
612613}
613614
614- std::string construct_string (int data_type, std::string data)
615+ std::string constructString (int data_type, std::string data)
615616{
616617 std::stringstream ss;
617618 ss << " SafetyModeMessage\n " ;
@@ -642,27 +643,27 @@ TEST_F(PrimaryParserTest, parsing_safetymode_results_in_correct_string)
642643 EXPECT_EQ (data->report_data_type_ , static_cast <uint32_t >(i));
643644 if (data->report_data_type_ == 0 || data->report_data_type_ == 1 )
644645 {
645- EXPECT_EQ (data->toString (), construct_string (data->report_data_type_ , " 2147943941" ));
646+ EXPECT_EQ (data->toString (), constructString (data->report_data_type_ , " 2147943941" ));
646647 }
647648 else if (data->report_data_type_ == 2 )
648649 {
649- EXPECT_EQ (data->toString (), construct_string (data->report_data_type_ , " -2147023355" ));
650+ EXPECT_EQ (data->toString (), constructString (data->report_data_type_ , " -2147023355" ));
650651 }
651652 else if (data->report_data_type_ == 3 )
652653 {
653- EXPECT_EQ (data->toString (), construct_string (data->report_data_type_ , " 6.30203e-36" ));
654+ EXPECT_EQ (data->toString (), constructString (data->report_data_type_ , " 6.30203e-36" ));
654655 }
655656 else
656657 {
657- EXPECT_EQ (data->toString (), construct_string (data->report_data_type_ , " 0x80070605" ));
658+ EXPECT_EQ (data->toString (), constructString (data->report_data_type_ , " 0x80070605" ));
658659 }
659660 }
660661 }
661662}
662663
663664TEST_F (PrimaryParserTest, parse_configuration_data_without_reserved_fields)
664665{
665- std::vector<uint8_t > payload (kConfigurationDataPayloadBytes , 0 );
666+ std::vector<uint8_t > payload (CONFIGURATION_DATA_PAYLOAD_BYTES , 0 );
666667 std::vector<uint8_t > packet = makeRobotStatePacketWithConfigurationSubmessage (payload);
667668
668669 comm::BinParser bp (packet.data (), packet.size ());
@@ -678,7 +679,7 @@ TEST_F(PrimaryParserTest, parse_configuration_data_without_reserved_fields)
678679
679680TEST_F (PrimaryParserTest, parse_configuration_data_with_reserved_fields)
680681{
681- std::vector<uint8_t > payload (kConfigurationDataPayloadBytes , 0 );
682+ std::vector<uint8_t > payload (CONFIGURATION_DATA_PAYLOAD_BYTES , 0 );
682683 // Big-endian int16 values appended after the legacy payload.
683684 payload.push_back (0x12 );
684685 payload.push_back (0x34 );
@@ -701,7 +702,7 @@ TEST_F(PrimaryParserTest, parse_configuration_data_with_reserved_fields)
701702TEST_F (PrimaryParserTest, parse_masterboard_data_without_immi)
702703{
703704 std::vector<uint8_t > payload;
704- payload.reserve (kMasterboardPayloadBytesBeforeImmi + kMasterboardPayloadBytesAfterImmi );
705+ payload.reserve (MASTERBOARD_PAYLOAD_BYTES_BEFORE_IMMI + MASTERBOARD_PAYLOAD_BYTES_AFTER_IMMI );
705706
706707 appendBigEndian<uint32_t >(payload, 0xDEADBEEFu ); // digital input bits
707708 appendBigEndian<uint32_t >(payload, 0xCAFEBABEu ); // digital output bits
@@ -725,7 +726,7 @@ TEST_F(PrimaryParserTest, parse_masterboard_data_without_immi)
725726 payload.push_back (0x01 ); // three position enabling device input (true)
726727 payload.push_back (0x00 ); // reserved
727728
728- ASSERT_EQ (payload.size (), kMasterboardPayloadBytesBeforeImmi + kMasterboardPayloadBytesAfterImmi );
729+ ASSERT_EQ (payload.size (), MASTERBOARD_PAYLOAD_BYTES_BEFORE_IMMI + MASTERBOARD_PAYLOAD_BYTES_AFTER_IMMI );
729730
730731 std::vector<uint8_t > packet = makeRobotStatePacketWithMasterboardSubmessage (payload);
731732 comm::BinParser bp (packet.data (), packet.size ());
@@ -754,13 +755,21 @@ TEST_F(PrimaryParserTest, parse_masterboard_data_without_immi)
754755 EXPECT_FALSE (data->immi_interface_installed_ );
755756 EXPECT_EQ (data->operational_mode_selector_input_ , 2 );
756757 EXPECT_TRUE (data->three_position_enabling_device_input_ );
758+
759+ auto msg_str = data->toString ();
760+ std::cout << msg_str << std::endl;
761+ EXPECT_NE (msg_str.find (" IMMI interface installed: false" ), std::string::npos);
762+ EXPECT_EQ (msg_str.find (" IMMI input bits:" ), std::string::npos);
763+ EXPECT_EQ (msg_str.find (" IMMI output bits:" ), std::string::npos);
764+ EXPECT_EQ (msg_str.find (" IMMI voltage 24V:" ), std::string::npos);
765+ EXPECT_EQ (msg_str.find (" IMMI current:" ), std::string::npos);
757766}
758767
759768TEST_F (PrimaryParserTest, parse_masterboard_data_with_immi)
760769{
761770 std::vector<uint8_t > payload;
762- payload.reserve (kMasterboardPayloadBytesBeforeImmi + kMasterboardOptionalImmiBytes +
763- kMasterboardPayloadBytesAfterImmi );
771+ payload.reserve (MASTERBOARD_PAYLOAD_BYTES_BEFORE_IMMI + MASTERBOARD_OPTIONAL_IMMI_BYTES +
772+ MASTERBOARD_PAYLOAD_BYTES_AFTER_IMMI );
764773
765774 appendBigEndian<uint32_t >(payload, 0x00000001u );
766775 appendBigEndian<uint32_t >(payload, 0x00000002u );
@@ -788,8 +797,8 @@ TEST_F(PrimaryParserTest, parse_masterboard_data_with_immi)
788797 payload.push_back (0x00 );
789798 payload.push_back (0x00 );
790799
791- ASSERT_EQ (payload.size (),
792- kMasterboardPayloadBytesBeforeImmi + kMasterboardOptionalImmiBytes + kMasterboardPayloadBytesAfterImmi );
800+ ASSERT_EQ (payload.size (), MASTERBOARD_PAYLOAD_BYTES_BEFORE_IMMI + MASTERBOARD_OPTIONAL_IMMI_BYTES +
801+ MASTERBOARD_PAYLOAD_BYTES_AFTER_IMMI );
793802
794803 std::vector<uint8_t > packet = makeRobotStatePacketWithMasterboardSubmessage (payload);
795804 comm::BinParser bp (packet.data (), packet.size ());
@@ -806,6 +815,15 @@ TEST_F(PrimaryParserTest, parse_masterboard_data_with_immi)
806815 EXPECT_EQ (data->immi_output_bits_ , std::bitset<32 >(0x33334444u ));
807816 EXPECT_FLOAT_EQ (data->immi_voltage_24v_ , 24 .0f );
808817 EXPECT_FLOAT_EQ (data->immi_current_ , 0 .75f );
818+
819+ auto msg_str = data->toString (); // also verify that the presence of IMMI fields does not cause issues in the
820+ // toString() method
821+ std::cout << msg_str << std::endl;
822+ EXPECT_NE (msg_str.find (" IMMI interface installed: true" ), std::string::npos);
823+ EXPECT_NE (msg_str.find (" IMMI input bits: 0b00010001000100010010001000100010" ), std::string::npos);
824+ EXPECT_NE (msg_str.find (" IMMI output bits: 0b00110011001100110100010001000100" ), std::string::npos);
825+ EXPECT_NE (msg_str.find (" IMMI voltage 24V: 24" ), std::string::npos);
826+ EXPECT_NE (msg_str.find (" IMMI current: 0.75" ), std::string::npos);
809827}
810828
811829int main (int argc, char * argv[])
0 commit comments