/** * @file tests/can_raw.cpp * @brief CAN Raw messaging * @date Sep 5, 2015 * @author jjacobs * @copyright 2015 Dual Inventive Technology Centre B.V. */ #include "fixtures/CANTest.hpp" /** * Verify send and recv of DI_CAN_RAW_DTYPE_DINET_TIME results in the di_time_get_stamp updated */ TEST_F(DI_CAN, can_raw_send_time_verify_stamp) { const uint64_t time = 123456789; SetNodeid(0xdeadbeef); di_can_msg_enable_timesync(&_ctx, true); ASSERT_EQ(0, di_time_get_stamp()); struct di_can_msg *msg = di_can_msg_alloc(&_ctx); ASSERT_NE(nullptr, msg); di_can_msg_set_canid(msg, DI_CAN_MSGTYPE_RAW, DI_CAN_TRANSFERTYPE_PUBLISH, DI_CAN_RAW_DTYPE_DINET_TIME); ASSERT_EQ(DNOK, di_can_msg_write_data_u64(msg, time)); ASSERT_EQ(DNOK, di_can_send_broadcast(&msg)); ASSERT_EQ(time, di_time_get_stamp()); di_time_set_ms(0); } /** * Verify the correct device uid raw message is send when calling di_can_raw_send */ TEST_F(DI_CAN, can_raw_send_data_device_uid) { struct di_can_msg *msg; static const char uid[33] = "12340000123400001234000012340000"; SetNodeid(0xdeadbeef); /* raw send manual */ ASSERT_EQ(DNOK, di_can_raw_send(&_ctx, DI_CAN_NODEID_BROADCAST, DI_CAN_TRANSFERTYPE_PUBLISH, DI_CAN_RAW_DTYPE_DEVICE_UID, DI_CAN_PTYPE_STRING, &uid, sizeof(uid))); msg = di_can_recv(&_ctx, DI_CAN_MSGTYPE_ANY); ASSERT_NE(nullptr, msg); ASSERT_EQ(DI_CAN_TRANSFERTYPE_PUBLISH, DI_CAN_GET_TRANSFERTYPE(msg->canid)); ASSERT_EQ(DI_CAN_RAW_DTYPE_DEVICE_UID, DI_CAN_GET_DATATYPE(msg->canid)); ASSERT_EQ(0xdeadbeef, msg->src_id); ASSERT_EQ(DI_CAN_NODEID_BROADCAST, msg->dst_id); ASSERT_TRUE(msg->broadcast); ASSERT_EQ(DI_CAN_PTYPE_STRING, msg->ptype); ASSERT_EQ(sizeof(uid), msg->size); ASSERT_STREQ(uid, (const char *)msg->msg); /* raw send device_uid */ ASSERT_EQ(DNOK, di_can_raw_send_device_uid(&_ctx, DI_CAN_NODEID_BROADCAST, DI_CAN_TRANSFERTYPE_PUBLISH, uid)); msg = di_can_recv(&_ctx, DI_CAN_MSGTYPE_ANY); ASSERT_NE(nullptr, msg); ASSERT_EQ(DI_CAN_TRANSFERTYPE_PUBLISH, DI_CAN_GET_TRANSFERTYPE(msg->canid)); ASSERT_EQ(DI_CAN_RAW_DTYPE_DEVICE_UID, DI_CAN_GET_DATATYPE(msg->canid)); ASSERT_EQ(0xdeadbeef, msg->src_id); ASSERT_EQ(DI_CAN_NODEID_BROADCAST, msg->dst_id); ASSERT_TRUE(msg->broadcast); ASSERT_EQ(DI_CAN_PTYPE_STRING, msg->ptype); ASSERT_EQ(sizeof(uid), msg->size); ASSERT_STREQ(uid, (const char *)msg->msg); }