286 lines
8.4 KiB
C++
286 lines
8.4 KiB
C++
/*
|
|
* drv_frame.cpp
|
|
*
|
|
* Created on: Apr 6, 2017
|
|
* Author: svlies
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <di/drv/xbee.h>
|
|
#include <../src/drv/xbee/frame.c> //dirty stuff for static function testing.
|
|
|
|
static di_buffer buf;
|
|
static di_drv_xbee_frame frame;
|
|
static uint8_t data[DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE];
|
|
|
|
TEST(drv_xbee_frame_init, verify_correct) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_CMD_STATUS_OK,frame.cmd_status);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE,frame.type);
|
|
EXPECT_EQ(0,frame.size);
|
|
EXPECT_EQ(0,frame.id);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_AT_cmd, verify_correct_test_1) {
|
|
di_buffer_flush(&buf);
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_init(&buf, data, DI_DRV_XBEE_DEFAULT_FRAME_MAX_FRAME_SIZE);
|
|
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,(uint8_t)'T');
|
|
di_buffer_write_u8(&buf,(uint8_t)'A');
|
|
|
|
di_drv_xbee_get_at_command(&buf,&frame);
|
|
EXPECT_EQ('T',frame.cmd[0]);
|
|
EXPECT_EQ('A',frame.cmd[1]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_AT_cmd, verify_correct_test_2) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,(uint8_t)'T');
|
|
di_buffer_write_u8(&buf,(uint8_t)'A');
|
|
|
|
di_drv_xbee_get_at_command(&buf,&frame);
|
|
EXPECT_EQ('T',frame.cmd[0]);
|
|
EXPECT_EQ('A',frame.cmd[1]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_address, verify_correct_test_1) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_RECEIVE_PACKET);
|
|
di_buffer_write_u8(&buf,0x88);
|
|
di_buffer_write_u8(&buf,0x99);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
di_buffer_write_u8(&buf,0xbb);
|
|
di_buffer_write_u8(&buf,0xcc);
|
|
di_buffer_write_u8(&buf,0xdd);
|
|
di_buffer_write_u8(&buf,0xee);
|
|
di_buffer_write_u8(&buf,0xff);
|
|
|
|
di_drv_xbee_get_address(&buf,&frame);
|
|
//printf("\n-----------------\n %s \n", frame.src_addr);
|
|
EXPECT_EQ('8',frame.src_addr[0]);
|
|
EXPECT_EQ('9',frame.src_addr[2]);
|
|
EXPECT_EQ('a',frame.src_addr[4]);
|
|
EXPECT_EQ('b',frame.src_addr[6]);
|
|
EXPECT_EQ('c',frame.src_addr[8]);
|
|
EXPECT_EQ('d',frame.src_addr[10]);
|
|
EXPECT_EQ('e',frame.src_addr[12]);
|
|
EXPECT_EQ('f',frame.src_addr[14]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_address, verify_correct_test_2) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x13);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x13);
|
|
di_buffer_write_u8(&buf,0xa2);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x40);
|
|
di_buffer_write_u8(&buf,0x52);
|
|
di_buffer_write_u8(&buf,0x2b);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
|
|
di_drv_xbee_get_address(&buf,&frame);
|
|
//printf("\n-----------------\n %s \n", frame.src_addr);
|
|
EXPECT_EQ('0',frame.src_addr[0]);
|
|
EXPECT_EQ('1',frame.src_addr[2]);
|
|
EXPECT_EQ('a',frame.src_addr[4]);
|
|
EXPECT_EQ('0',frame.src_addr[6]);
|
|
EXPECT_EQ('4',frame.src_addr[8]);
|
|
EXPECT_EQ('5',frame.src_addr[10]);
|
|
EXPECT_EQ('2',frame.src_addr[12]);
|
|
EXPECT_EQ('a',frame.src_addr[14]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_address, verify_incorrect_test_1) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_MODEM_STATUS);
|
|
di_buffer_write_u8(&buf,0x88);
|
|
di_buffer_write_u8(&buf,0x99);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
di_buffer_write_u8(&buf,0xbb);
|
|
di_buffer_write_u8(&buf,0xcc);
|
|
di_buffer_write_u8(&buf,0xdd);
|
|
di_buffer_write_u8(&buf,0xee);
|
|
di_buffer_write_u8(&buf,0xff);
|
|
|
|
di_drv_xbee_get_address(&buf,&frame);
|
|
//printf("\n-----------------\n %s \n", frame.src_addr);
|
|
EXPECT_EQ(0,frame.src_addr[0]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_deserialize, verify_correct_test_1) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x12);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_RECEIVE_PACKET);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x13);
|
|
di_buffer_write_u8(&buf,0xa2);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x40);
|
|
di_buffer_write_u8(&buf,0x52);
|
|
di_buffer_write_u8(&buf,0x2b);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
di_buffer_write_u8(&buf,0xff);
|
|
di_buffer_write_u8(&buf,0xfe);
|
|
di_buffer_write_u8(&buf,0x01);
|
|
di_buffer_write_u8(&buf,0x52);
|
|
di_buffer_write_u8(&buf,0x78);
|
|
di_buffer_write_u8(&buf,0x44);
|
|
di_buffer_write_u8(&buf,0x61);
|
|
di_buffer_write_u8(&buf,0x74);
|
|
di_buffer_write_u8(&buf,0x61);
|
|
di_buffer_write_u8(&buf,0x11);
|
|
|
|
di_drv_xbee_frame_deserialize(&buf,&frame);
|
|
//printf("\n-----------------\n %s \n", frame.src_addr);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_RECEIVE_PACKET,frame.type);
|
|
EXPECT_EQ('a',frame.src_addr[4]);
|
|
EXPECT_EQ(6,frame.size);
|
|
EXPECT_EQ(0x52,frame.data[0]);
|
|
EXPECT_EQ(0x78,frame.data[1]);
|
|
EXPECT_EQ(0x44,frame.data[2]);
|
|
EXPECT_EQ(0x61,frame.data[3]);
|
|
EXPECT_EQ(0x74,frame.data[4]);
|
|
EXPECT_EQ(0x61,frame.data[5]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_deserialize, verify_correct_test_2) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x13);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_REMOTE_COMMAND_RESPONSE);
|
|
di_buffer_write_u8(&buf,0x55);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x13);
|
|
di_buffer_write_u8(&buf,0xa2);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x40);
|
|
di_buffer_write_u8(&buf,0x52);
|
|
di_buffer_write_u8(&buf,0x2b);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
di_buffer_write_u8(&buf,0xff);
|
|
di_buffer_write_u8(&buf,0xfe);
|
|
di_buffer_write_u8(&buf,0x53);
|
|
di_buffer_write_u8(&buf,0x4C);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x40);
|
|
di_buffer_write_u8(&buf,0x52);
|
|
di_buffer_write_u8(&buf,0x2b);
|
|
di_buffer_write_u8(&buf,0xaa);
|
|
di_buffer_write_u8(&buf,0xf4);
|
|
|
|
di_drv_xbee_frame_deserialize(&buf, &frame);
|
|
|
|
EXPECT_EQ('a',frame.src_addr[4]);
|
|
EXPECT_EQ('S',frame.cmd[0]);
|
|
EXPECT_EQ('L',frame.cmd[1]);
|
|
EXPECT_EQ(0x55,frame.id);
|
|
EXPECT_EQ(4, frame.size);
|
|
EXPECT_EQ(0x40,frame.data[0]);
|
|
EXPECT_EQ(0x52,frame.data[1]);
|
|
EXPECT_EQ(0x2b,frame.data[2]);
|
|
EXPECT_EQ(0xaa,frame.data[3]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_deserialize, verify_correct_test_3) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x05);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE);
|
|
di_buffer_write_u8(&buf,0x01);
|
|
di_buffer_write_u8(&buf,0x42);
|
|
di_buffer_write_u8(&buf,0x44);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0xf0);
|
|
|
|
di_drv_xbee_frame_deserialize(&buf,&frame);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_AT_COMMAND_RESPONSE,frame.type);
|
|
EXPECT_EQ('B',frame.cmd[0]);
|
|
EXPECT_EQ('D',frame.cmd[1]);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_deserialize, verify_correct_test_4) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x02);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_MODEM_STATUS);
|
|
di_buffer_write_u8(&buf,0x0b);
|
|
di_buffer_write_u8(&buf,0x75);
|
|
|
|
di_drv_xbee_frame_deserialize(&buf,&frame);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_MODEM_STATUS,frame.type);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_CMD_STATUS_NETWORK_WOKE_UP,frame.cmd_status);
|
|
}
|
|
|
|
TEST(drv_xbee_frame_deserialize, verify_correct_test_5) {
|
|
di_drv_xbee_frame_init(&frame);
|
|
di_buffer_flush(&buf);
|
|
|
|
di_buffer_write_u8(&buf,0x7e);
|
|
di_buffer_write_u8(&buf,0x00);
|
|
di_buffer_write_u8(&buf,0x02);
|
|
di_buffer_write_u8(&buf,DI_DRV_XBEE_FT_NODE_IDENTIFICATION_INDICATOR);
|
|
di_buffer_write_u8(&buf,0x0b);
|
|
di_buffer_write_u8(&buf,0x75);
|
|
|
|
di_drv_xbee_frame_deserialize(&buf,&frame);
|
|
EXPECT_EQ(DI_DRV_XBEE_FT_NODE_IDENTIFICATION_INDICATOR,frame.type);
|
|
}
|
|
|