150 lines
4.5 KiB
C++
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]);
|
|
}
|