src.dualinventive.com/fw/libdi_fw-tests/libdi/tests/can_raw.cpp

72 lines
2.5 KiB
C++

/**
* @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);
}