181 lines
5.2 KiB
C++
181 lines
5.2 KiB
C++
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <di/drv/xbee.h>
|
|
|
|
static struct di_drv_xbee_ctx ctx;
|
|
static bool check = false;
|
|
DI_BUFFER_DECL(read_buffer, 1024);
|
|
static uint64_t test_destination = 0xf4e732aacb7911fa;
|
|
|
|
static di_drv_xbee_frame test_frame;
|
|
|
|
size_t test_drv_xbee_write_cb(uint8_t *buf, size_t nbyte)
|
|
{
|
|
return di_buffer_write_data(&read_buffer, buf, nbyte);
|
|
}
|
|
|
|
void test_xbee_reset(void)
|
|
{
|
|
di_drv_xbee_init(&ctx);
|
|
di_drv_xbee_set_write_cb(&ctx, test_drv_xbee_write_cb);
|
|
di_drv_xbee_frame_init(&test_frame);
|
|
check = false;
|
|
di_buffer_reset(&read_buffer);
|
|
|
|
if(di_buffer_size_inuse(&ctx.buf))
|
|
di_buffer_flush(&ctx.buf);
|
|
}
|
|
|
|
//------------------------premade local functions------------------------------
|
|
TEST(drv_xbee_premade_local_at_commands, xbee_set_baudrate) {
|
|
test_xbee_reset();
|
|
|
|
/*
|
|
* set baudrate to 19200:
|
|
*/
|
|
di_buffer_reset(&read_buffer);
|
|
di_drv_xbee_set_baudrate(&ctx, DI_DRV_XBEE_BAUDRATE_19K2);
|
|
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[0]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[1]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[2]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[3]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[4]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[5]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[6]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[7]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[8]);
|
|
|
|
EXPECT_EQ(DNOK,di_drv_xbee_checksum_verify(&ctx.buf));
|
|
|
|
di_buffer_reset(&ctx.buf);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[9]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[10]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[11]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[12]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[13]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[14]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[15]);
|
|
di_buffer_write_u8(&ctx.buf,read_buffer_data[16]);
|
|
|
|
EXPECT_EQ(DNOK,di_drv_xbee_checksum_verify(&ctx.buf));
|
|
|
|
EXPECT_EQ(0,read_buffer_data[1]);
|
|
EXPECT_EQ(5,read_buffer_data[2]);
|
|
EXPECT_EQ(8,read_buffer_data[3]);
|
|
EXPECT_EQ('B',read_buffer_data[5]);
|
|
EXPECT_EQ('D',read_buffer_data[6]);
|
|
EXPECT_EQ(DI_DRV_XBEE_BAUDRATE_19K2,read_buffer_data[7]);
|
|
// read_buffer_data[8] checksum
|
|
// 9 sof
|
|
// 10, 11 size
|
|
// 12 frametype
|
|
// 13 frame id
|
|
EXPECT_EQ('A', read_buffer_data[14]);
|
|
EXPECT_EQ('C', read_buffer_data[15]);
|
|
|
|
/*
|
|
* set baudrate to 230400:
|
|
*/
|
|
di_buffer_reset(&read_buffer);
|
|
di_drv_xbee_set_baudrate(&ctx, DI_DRV_XBEE_BAUDRATE_230K4);
|
|
EXPECT_EQ(DI_DRV_XBEE_BAUDRATE_230K4,read_buffer_data[7]);
|
|
EXPECT_EQ('A', read_buffer_data[14]);
|
|
EXPECT_EQ('C', read_buffer_data[15]);
|
|
}
|
|
|
|
TEST(drv_xbee_premade_remote_at_commands, xbee_set_baudrate) {
|
|
test_xbee_reset();
|
|
|
|
/*
|
|
* set baudrate to 19200:
|
|
*/
|
|
check = di_drv_xbee_remote_set_baudrate(&ctx, test_destination ,DI_DRV_XBEE_BAUDRATE_19K2);
|
|
|
|
EXPECT_EQ(0, check);
|
|
EXPECT_EQ(0x17,read_buffer_data[3]);
|
|
EXPECT_EQ(1,read_buffer_data[4]);
|
|
/*
|
|
* Destination:
|
|
*/
|
|
EXPECT_EQ(0xf4,read_buffer_data[5]);
|
|
EXPECT_EQ(0xe7,read_buffer_data[6]);
|
|
EXPECT_EQ(0x32,read_buffer_data[7]);
|
|
EXPECT_EQ(0xaa,read_buffer_data[8]);
|
|
EXPECT_EQ(0xcb,read_buffer_data[9]);
|
|
EXPECT_EQ(0x79,read_buffer_data[10]);
|
|
EXPECT_EQ(0x11,read_buffer_data[11]);
|
|
EXPECT_EQ(0xfa,read_buffer_data[12]);
|
|
|
|
EXPECT_EQ(0xff,read_buffer_data[13]);
|
|
EXPECT_EQ(0xfe,read_buffer_data[14]);
|
|
|
|
EXPECT_EQ('B',read_buffer_data[16]);
|
|
EXPECT_EQ('D',read_buffer_data[17]);
|
|
|
|
EXPECT_EQ(DI_DRV_XBEE_BAUDRATE_19K2,read_buffer_data[18]);
|
|
|
|
test_xbee_reset();
|
|
/*
|
|
* set baudrate to 230400:
|
|
*/
|
|
di_drv_xbee_remote_set_baudrate(&ctx, test_destination, DI_DRV_XBEE_BAUDRATE_230K4);
|
|
EXPECT_EQ(DI_DRV_XBEE_BAUDRATE_230K4,read_buffer_data[18]);
|
|
}
|
|
|
|
TEST(drv_xbee_premade_local_at_commands, xbee_set_sleep_settings) {
|
|
test_xbee_reset();
|
|
EXPECT_EQ(DNOK, di_drv_xbee_set_sleep_settings(&ctx,0xfffefd,0xfffefd,DI_DRV_XBEE_SLEEP_MODE_SYNCHONOUS_CYCLIC_SLEEP,DI_DRV_XBEE_SLEEP_OPTIONS_SLEEP_COORDINATOR));
|
|
//sleep mode:
|
|
EXPECT_EQ(8,read_buffer_data[3]);
|
|
EXPECT_EQ('S',read_buffer_data[5]);
|
|
EXPECT_EQ('M',read_buffer_data[6]);
|
|
EXPECT_EQ(8,read_buffer_data[7]);
|
|
//chk
|
|
// 9 sof
|
|
// 10, 11 size
|
|
// 12 frametype
|
|
// 13 frame id
|
|
EXPECT_EQ('S', read_buffer_data[14]);
|
|
EXPECT_EQ('O', read_buffer_data[15]);
|
|
EXPECT_EQ(1, read_buffer_data[16]);
|
|
// 17 chk
|
|
// 18 sof
|
|
// 19 size
|
|
// 20 size
|
|
// 21 frametype
|
|
// 22 frame id
|
|
EXPECT_EQ('S', read_buffer_data[23]);
|
|
EXPECT_EQ('P', read_buffer_data[24]);
|
|
EXPECT_EQ(255, read_buffer_data[25]);
|
|
EXPECT_EQ(254, read_buffer_data[26]);
|
|
EXPECT_EQ(253, read_buffer_data[27]);
|
|
// 28 chk
|
|
// 29 sof
|
|
// 30 size
|
|
// 31 size
|
|
// 32 frametype
|
|
// 33 frame id
|
|
EXPECT_EQ('S', read_buffer_data[34]);
|
|
EXPECT_EQ('T', read_buffer_data[35]);
|
|
EXPECT_EQ(255, read_buffer_data[36]);
|
|
EXPECT_EQ(254, read_buffer_data[37]);
|
|
EXPECT_EQ(253, read_buffer_data[38]);
|
|
// 39 chk
|
|
// 40 sof
|
|
// 41 size
|
|
// 42 size
|
|
// 43 frametype
|
|
// 44 frame id
|
|
EXPECT_EQ('A', read_buffer_data[45]);
|
|
EXPECT_EQ('C', read_buffer_data[46]);
|
|
}
|
|
|
|
TEST(drv_xbee_premade_local_at_commands, xbee_set_incorrect_sleep_settings) {
|
|
test_xbee_reset();
|
|
EXPECT_EQ(DNE_RANGE, di_drv_xbee_set_sleep_settings(&ctx,0x40fffefd,0x5afffefd,DI_DRV_XBEE_SLEEP_MODE_SYNCHONOUS_CYCLIC_SLEEP,DI_DRV_XBEE_SLEEP_OPTIONS_SLEEP_COORDINATOR));
|
|
}
|