src.dualinventive.com/jjacobs/dinetrpcll-sniffer/libdi/tests/drv_xbee_at_cmd.cpp

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