src.dualinventive.com/fw/dncm/libdi/tests/drv_crtm.cpp

150 lines
4.5 KiB
C++

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <gtest/gtest.h>
#include <di/drv/xbee.h>
#include <di/drv/crtm.h>
#include <../src/drv/crtm.c> // dirty stuff to test static functions.
#include <di/drv/xbee/definitions.h>
#include <di/drv/xbee/cmd.h>
static bool check = false;
static char test_destination_char[17] = "f4e732aacb7911fa";
static uint8_t crtm_correct_frame[]{CRTM_STATUS_FRAME_TYPE, 0x80, 4,2,1,0,0,0,0x07,0x01,0x09,0xe4,0x88,0x01,0xba,0xaa,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff};
TEST(drv_crtm, crtm_frame_conversion_correct){
di_drv_xbee_frame test_xbee_frame;
di_drv_crtm_data test_crtm_frame;
di_drv_xbee_frame_init(&test_xbee_frame);
di_drv_crtm_frame_init(&test_crtm_frame);
/*
* fill the test xbee frame with data:
*/
test_xbee_frame.size = 12+ (CRTM_NR_ADC_CHANNELS * 2);
test_xbee_frame.type = DI_DRV_XBEE_FT_RECEIVE_PACKET;
test_xbee_frame.id = 15;
strncpy(test_xbee_frame.src_addr, test_destination_char, 17);
for(int i = 0; i < 25; i++)
{
test_xbee_frame.data[i] = crtm_correct_frame[i];
}
check = di_drv_crtm_frame_converter(&test_xbee_frame, &test_crtm_frame);
EXPECT_EQ(true,check);
EXPECT_EQ(1,test_crtm_frame.patch_version);
EXPECT_EQ(0x0402,test_crtm_frame.mcu_version);
EXPECT_EQ(true,test_crtm_frame.rail_detect);
//printf("\n--------------\n Temp 1: %x \n Temp 2: %x \n Bat 1: %x \n------------------\n",test_crtm_frame.temp1,test_crtm_frame.temp2,test_crtm_frame.bat1);
EXPECT_EQ(MCUTYPE_CRTM3000_SENSOR,test_crtm_frame.mcu_type);
}
TEST(drv_crtm, crtm_frame_conversion_incorrect){
di_drv_xbee_frame test_xbee_frame;
di_drv_crtm_data test_crtm_frame;
di_drv_xbee_frame_init(&test_xbee_frame);
di_drv_crtm_frame_init(&test_crtm_frame);
/*
* Incorrect datasize:
*/
test_xbee_frame.size = 8+(CRTM_NR_ADC_CHANNELS * 2);
test_xbee_frame.type = DI_DRV_XBEE_FT_RECEIVE_PACKET;
test_xbee_frame.data[0] = CRTM_STATUS_FRAME_TYPE;
test_xbee_frame.id = 15;
strncpy(test_xbee_frame.src_addr, test_destination_char, 17);
check = di_drv_crtm_frame_converter(&test_xbee_frame, &test_crtm_frame);
EXPECT_EQ(false,check);
test_xbee_frame.size = 17+(CRTM_NR_ADC_CHANNELS * 2);
test_xbee_frame.type = DI_DRV_XBEE_FT_RECEIVE_PACKET;
test_xbee_frame.data[0] = CRTM_STATUS_FRAME_TYPE;
test_xbee_frame.id = 15;
strncpy(test_xbee_frame.src_addr, test_destination_char, 17);
check = di_drv_crtm_frame_converter(&test_xbee_frame, &test_crtm_frame);
EXPECT_EQ(false,check);
/*
* Incorrect frametype:
*/
test_xbee_frame.size = 12+(CRTM_NR_ADC_CHANNELS * 2);
test_xbee_frame.type = DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE;
test_xbee_frame.data[0] = CRTM_STATUS_FRAME_TYPE;
test_xbee_frame.id = 15;
strncpy(test_xbee_frame.src_addr, test_destination_char, 17);
check = di_drv_crtm_frame_converter(&test_xbee_frame, &test_crtm_frame);
EXPECT_EQ(false,check);
test_xbee_frame.size = 12+(CRTM_NR_ADC_CHANNELS * 2);
test_xbee_frame.type = DI_DRV_XBEE_FT_RECEIVE_PACKET;
test_xbee_frame.data[0] = 0x19;
test_xbee_frame.id = 15;
strncpy(test_xbee_frame.src_addr, test_destination_char, 17);
check = di_drv_crtm_frame_converter(&test_xbee_frame, &test_crtm_frame);
EXPECT_EQ(false,check);
}
TEST(drv_crtm, crtm_frame_init){
di_drv_crtm_data test_crtm_frame;
di_drv_crtm_frame_init(&test_crtm_frame);
EXPECT_EQ(0,test_crtm_frame.mcu_version);
EXPECT_EQ(0,test_crtm_frame.patch_version);
EXPECT_EQ(0,test_crtm_frame.mcu_type);
EXPECT_EQ(false,test_crtm_frame.rail_detect);
}
TEST(drv_crtm, crtm_bat_states){
di_drv_crtm_data test_crtm_frame;
di_drv_crtm_frame_init(&test_crtm_frame);
test_crtm_frame.bat1 = 0.98f;
di_drv_crtm_bat_state(&test_crtm_frame);
EXPECT_EQ(0,test_crtm_frame.bat1_status);
test_crtm_frame.bat1 = 2.50f;
di_drv_crtm_bat_state(&test_crtm_frame);
EXPECT_EQ(1,test_crtm_frame.bat1_status);
test_crtm_frame.bat1 = 2.86f;
di_drv_crtm_bat_state(&test_crtm_frame);
EXPECT_EQ(3,test_crtm_frame.bat1_status);
test_crtm_frame.bat1 = 3.54f;
di_drv_crtm_bat_state(&test_crtm_frame);
EXPECT_EQ(5,test_crtm_frame.bat1_status);
}
//------------------------------------------------------
TEST(drv_di_rpc_crtm, crtm_address_convert){
di_drv_crtm_data test_crtm_frame;
di_drv_crtm_frame_init(&test_crtm_frame);
char rpc_sn[33];
strncpy(test_crtm_frame.sn, test_destination_char, 17);
EXPECT_EQ(DNOK,di_drv_xbee_mac_to_device_uid(test_crtm_frame.sn, rpc_sn));
//printf("\nsn: %s\n",rpc_sn);
ASSERT_EQ('1',rpc_sn[1]);
ASSERT_EQ('1',rpc_sn[3]);
ASSERT_EQ('a',rpc_sn[31]);
ASSERT_EQ('f',rpc_sn[16]);
}