232 lines
5.4 KiB
C++
232 lines
5.4 KiB
C++
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <di/stdio.h>
|
|
#include <di/drv/xbee.h>
|
|
|
|
static struct di_drv_xbee_ctx ctx;
|
|
static bool check = false;
|
|
static size_t data_elements = 0;
|
|
static uint8_t read_data[DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE];
|
|
static uint8_t *read_cb_testdata = NULL;
|
|
static di_drv_xbee_frame test_frame;
|
|
|
|
size_t test_drv_xbee_read_cb(uint8_t *buf)
|
|
{
|
|
if (data_elements) {
|
|
memcpy(buf, read_data,data_elements);
|
|
}
|
|
return data_elements;
|
|
}
|
|
|
|
size_t test_drv_xbee_write_cb(uint8_t *buf, size_t nbyte)
|
|
{
|
|
read_cb_testdata = (uint8_t*)buf;
|
|
return nbyte;
|
|
}
|
|
|
|
void test_xbee_reset(void)
|
|
{
|
|
data_elements = 0;
|
|
di_drv_xbee_init(&ctx);
|
|
di_drv_xbee_set_read_cb(&ctx, test_drv_xbee_read_cb);
|
|
di_drv_xbee_set_write_cb(&ctx, test_drv_xbee_write_cb);
|
|
di_drv_xbee_frame_init(&test_frame);
|
|
check = false;
|
|
|
|
if(di_buffer_size_inuse(&ctx.buf))
|
|
di_buffer_flush(&ctx.buf);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_init_test) {
|
|
test_xbee_reset();
|
|
|
|
EXPECT_EQ(0, ctx.fw_version);
|
|
EXPECT_EQ(0, ctx.sn);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_check_for_no_frame){
|
|
test_xbee_reset();
|
|
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
|
|
EXPECT_EQ(false,check);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_check_for_small_correct_frame){
|
|
test_xbee_reset();
|
|
|
|
read_data[0] = 0x7e;
|
|
read_data[1] = 0x00;
|
|
read_data[2] = 0x05;
|
|
read_data[3] = 0x88;
|
|
read_data[4] = 0x01;
|
|
read_data[5] = 0x42;
|
|
read_data[6] = 0x44;
|
|
read_data[7] = 0x00;
|
|
read_data[8] = 0xf0;
|
|
read_cb_testdata = read_data;
|
|
data_elements = 9;
|
|
|
|
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
|
|
EXPECT_EQ(true,check);
|
|
EXPECT_EQ(0x01 ,test_frame.id);
|
|
//printf("\n CMD: %s \n", test_frame.cmd);
|
|
//EXPECT_EQ("BD" ,test_frame.cmd);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_check_for_large_correct_frame){
|
|
test_xbee_reset();
|
|
|
|
read_data[0] = 0x7e;
|
|
read_data[1] = 0x00;
|
|
read_data[2] = 0x12;
|
|
read_data[3] = 0x90;
|
|
read_data[4] = 0x00;
|
|
read_data[5] = 0x13;
|
|
read_data[6] = 0xa2;
|
|
read_data[7] = 0x00;
|
|
read_data[8] = 0x40;
|
|
read_data[9] = 0x52;
|
|
read_data[10] = 0x2b;
|
|
read_data[11] = 0xaa;
|
|
read_data[12] = 0xff;
|
|
read_data[13] = 0xfe;
|
|
read_data[14] = 0x01;
|
|
read_data[15] = 0x52;
|
|
read_data[16] = 0x78;
|
|
read_data[17] = 0x44;
|
|
read_data[18] = 0x61;
|
|
read_data[19] = 0x74;
|
|
read_data[20] = 0x61;
|
|
read_data[21] = 0x11;
|
|
|
|
read_cb_testdata = read_data;
|
|
data_elements = 22;
|
|
|
|
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
|
|
EXPECT_EQ(true,check);
|
|
//printf("\n SN: %s \n", test_frame.source_address);
|
|
//EXPECT_EQ("0013a20040522baa" ,test_frame.source_address);
|
|
EXPECT_EQ(0 ,test_frame.id);
|
|
EXPECT_EQ(6 ,test_frame.size);
|
|
EXPECT_EQ(0x52 ,test_frame.data[0]);
|
|
EXPECT_EQ(0x78 ,test_frame.data[1]);
|
|
EXPECT_EQ(0x44 ,test_frame.data[2]);
|
|
EXPECT_EQ(0x61 ,test_frame.data[3]);
|
|
EXPECT_EQ(0x74 ,test_frame.data[4]);
|
|
EXPECT_EQ(0x61 ,test_frame.data[5]);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_check_for_corrupt_frame){
|
|
test_xbee_reset();
|
|
|
|
read_data[0] = 0x7e;
|
|
read_data[1] = 0x00;
|
|
read_data[2] = 0x05;
|
|
read_data[3] = 0x98;
|
|
read_data[4] = 0x01;
|
|
read_data[5] = 0x42;
|
|
read_data[6] = 0x44;
|
|
read_data[7] = 0x00;
|
|
read_data[8] = 0xf0;
|
|
read_cb_testdata = read_data;
|
|
data_elements = 9;
|
|
|
|
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
|
|
EXPECT_EQ(false,check);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_check_for_incomplete_frame){
|
|
test_xbee_reset();
|
|
|
|
read_data[0] = 0x00;
|
|
read_data[1] = 0x05;
|
|
read_data[2] = 0x98;
|
|
read_data[3] = 0x01;
|
|
read_data[4] = 0x42;
|
|
read_data[5] = 0x44;
|
|
read_data[6] = 0x00;
|
|
read_data[7] = 0xf0;
|
|
read_cb_testdata = read_data;
|
|
data_elements = 8;
|
|
|
|
check = di_drv_xbee_recv_frame(&ctx, &test_frame);
|
|
EXPECT_EQ(false,check);
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_msb_lsb_reconstruction_correct) {
|
|
test_xbee_reset();
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'L');
|
|
test_frame.size = 4;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
test_frame.data[2] = 0xfd;
|
|
test_frame.data[3] = 0xfc;
|
|
|
|
EXPECT_EQ(DNOK, di_drv_xbee_build_sn(&ctx, &test_frame));
|
|
EXPECT_EQ(0xfffefdfc,ctx.sn);
|
|
|
|
test_xbee_reset();
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'H');
|
|
|
|
test_frame.size = 4;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
test_frame.data[2] = 0xfd;
|
|
test_frame.data[3] = 0xfc;
|
|
|
|
EXPECT_EQ(DNOK, di_drv_xbee_build_sn(&ctx, &test_frame));
|
|
EXPECT_EQ(0xfffefdfc00000000, ctx.sn);
|
|
|
|
test_xbee_reset();
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'L');
|
|
test_frame.size = 4;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
test_frame.data[2] = 0xfd;
|
|
test_frame.data[3] = 0xfc;
|
|
|
|
di_drv_xbee_build_sn(&ctx, &test_frame);
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'S', 'H');
|
|
|
|
test_frame.size = 4;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
test_frame.data[2] = 0xfd;
|
|
test_frame.data[3] = 0xfc;
|
|
|
|
di_drv_xbee_build_sn(&ctx, &test_frame);
|
|
|
|
EXPECT_EQ(0xfffefdfcfffefdfc, ctx.sn);
|
|
|
|
}
|
|
|
|
TEST(drv_xbee, xbee_msb_lsb_reconstruction_incorrect) {
|
|
test_xbee_reset();
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'D', 'B');
|
|
test_frame.size = 2;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
|
|
EXPECT_EQ(DNE_RANGE, di_drv_xbee_build_sn(&ctx, &test_frame));
|
|
EXPECT_EQ(0,ctx.sn);
|
|
|
|
test_xbee_reset();
|
|
|
|
di_snprintf(test_frame.cmd, sizeof(test_frame.cmd), "%c%c", 'D', 'B');
|
|
test_frame.size = 4;
|
|
test_frame.data[0] = 0xff;
|
|
test_frame.data[1] = 0xfe;
|
|
test_frame.data[1] = 0x00;
|
|
test_frame.data[1] = 0x00;
|
|
|
|
EXPECT_EQ(DNE_PARAM, di_drv_xbee_build_sn(&ctx, &test_frame));
|
|
EXPECT_EQ(0,ctx.sn);
|
|
}
|