#include #include #include #include #include #include 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); }