178 lines
4.9 KiB
C
178 lines
4.9 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <di/drv/hl854x.h>
|
|
extern "C" {
|
|
#include "drv/hl854x/gps_pvt.c"
|
|
static struct di_drv_hl854x_ctx ctx;
|
|
}
|
|
|
|
TEST(time, init) {
|
|
di_time_init();
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, extract_coord) {
|
|
const char *coord1 = "N 051 58'55.12\"";
|
|
const char *coord2 = "E 005 19'51.11";
|
|
char buf[64];
|
|
|
|
di_drv_hl854x_gps_pvt_extract_coord(buf, sizeof(buf), coord1);
|
|
EXPECT_STREQ("051.585512", buf);
|
|
|
|
di_drv_hl854x_gps_pvt_extract_coord(buf, sizeof(buf), coord2);
|
|
EXPECT_STREQ("005.195111", buf);
|
|
|
|
di_drv_hl854x_gps_pvt_extract_coord(buf, 3, coord2);
|
|
EXPECT_STREQ("00", buf);
|
|
|
|
di_drv_hl854x_gps_pvt_extract_coord(buf, 6, coord2);
|
|
EXPECT_STREQ("005.1", buf);
|
|
|
|
di_drv_hl854x_gps_pvt_extract_coord(buf, 8, coord2);
|
|
EXPECT_STREQ("005.195", buf);
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, hdr_id_0_time) {
|
|
const char *time1 = "01:02:03";
|
|
const char *time2 = "23:59:59";
|
|
const char *time_to_small = "23:59:";
|
|
const char *time_inval = "01:02 03";
|
|
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_time(&ctx, time1);
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 1);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 2);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 3);
|
|
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_time(&ctx, time2);
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 23);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 59);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 59);
|
|
|
|
memset(&ctx.gps.time, 0, sizeof(ctx.gps.time));
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_time(&ctx, time_to_small);
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 0);
|
|
|
|
memset(&ctx.gps.time, 0, sizeof(ctx.gps.time));
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_time(&ctx, time_inval);
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 0);
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, hdr_id_0_date) {
|
|
const char *date1 = "01/01/1970";
|
|
const char *date_to_short = "01/01/19";
|
|
const char *date_inval = "01-01-19";
|
|
|
|
memset(&ctx.gps.time, 0, sizeof(ctx.gps.time));
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_date(&ctx, date1);
|
|
EXPECT_EQ(ctx.gps.time.tm_year, 1970);
|
|
EXPECT_EQ(ctx.gps.time.tm_mon, 1);
|
|
EXPECT_EQ(ctx.gps.time.tm_mday, 1);
|
|
|
|
memset(&ctx.gps.time, 0, sizeof(ctx.gps.time));
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_date(&ctx, date_to_short);
|
|
EXPECT_EQ(ctx.gps.time.tm_year, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_mon, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_mday, 0);
|
|
|
|
memset(&ctx.gps.time, 0, sizeof(ctx.gps.time));
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_date(&ctx, date_inval);
|
|
EXPECT_EQ(ctx.gps.time.tm_year, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_mon, 0);
|
|
EXPECT_EQ(ctx.gps.time.tm_mday, 0);
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, fix_state) {
|
|
struct {
|
|
const char *str;
|
|
enum di_drv_hl854x_gps_fix_state s;
|
|
} t[] = {
|
|
{ "", HL854X_GPS_FIX_STATE_UNKNOWN },
|
|
{ "3A FIX", HL854X_GPS_FIX_STATE_UNKNOWN },
|
|
{ "NO FIX", HL854X_GPS_FIX_STATE_NO_FIX },
|
|
{ "ES FIX", HL854X_GPS_FIX_STATE_ES_FIX },
|
|
{ "2D FIX", HL854X_GPS_FIX_STATE_2D_FIX },
|
|
{ "3D FIX", HL854X_GPS_FIX_STATE_3D_FIX }
|
|
};
|
|
|
|
for (unsigned int i = 0; i < sizeof(t)/sizeof(t[0]); i++) {
|
|
di_drv_hl854x_gps_pvt_hdr_id_0_gps_fix_state(&ctx, t[i].str);
|
|
EXPECT_EQ(ctx.gps.fix_state, t[i].s);
|
|
}
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, cb_hdr_id_0) {
|
|
char pvt_frame_id_0[] = "0,06:59:28,15/09/2015,3D FIX,N 051 35'09.06\",E 005 11'43.42\",+0012m";
|
|
char pvt_frame_id_0_no_fix[] = "0,06:59:28,15/09/2015,NO FIX,N 051 35'09.06\",E 005 11'43.42\",+0012m";
|
|
|
|
di_drv_hl854x_init(&ctx);
|
|
|
|
/* 3D fix */
|
|
ctx.me.match.str = pvt_frame_id_0;
|
|
|
|
di_drv_hl854x_cb_gps_pvt(&ctx.me);
|
|
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 6U);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 59U);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 28U);
|
|
|
|
EXPECT_EQ(ctx.gps.time.tm_mday, 15U);
|
|
EXPECT_EQ(ctx.gps.time.tm_mon, 9U);
|
|
EXPECT_EQ(ctx.gps.time.tm_year, 2015U);
|
|
|
|
EXPECT_STREQ(ctx.gps.latitude, "051.350906");
|
|
EXPECT_STREQ(ctx.gps.longitude, "005.114342");
|
|
|
|
EXPECT_EQ(ctx.gps.fix_state, HL854X_GPS_FIX_STATE_3D_FIX);
|
|
|
|
/* No fix */
|
|
ctx.me.match.str = pvt_frame_id_0_no_fix;
|
|
|
|
di_drv_hl854x_cb_gps_pvt(&ctx.me);
|
|
|
|
EXPECT_EQ(ctx.gps.time.tm_hour, 6U);
|
|
EXPECT_EQ(ctx.gps.time.tm_min, 59U);
|
|
EXPECT_EQ(ctx.gps.time.tm_sec, 28U);
|
|
|
|
EXPECT_EQ(ctx.gps.time.tm_mday, 15U);
|
|
EXPECT_EQ(ctx.gps.time.tm_mon, 9U);
|
|
EXPECT_EQ(ctx.gps.time.tm_year, 2015U);
|
|
|
|
EXPECT_STREQ(ctx.gps.latitude, "n/a");
|
|
EXPECT_STREQ(ctx.gps.longitude, "n/a");
|
|
|
|
EXPECT_EQ(ctx.gps.fix_state, HL854X_GPS_FIX_STATE_NO_FIX);
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, cb_hdr_id_1) {
|
|
char pvt_frame_id_1[] = "1,087.5deg,021m/s";
|
|
|
|
di_drv_hl854x_init(&ctx);
|
|
|
|
ctx.me.cfg.private_data = &ctx;
|
|
ctx.me.match.str = pvt_frame_id_1;
|
|
|
|
/* pvt frame id 1 is not used */
|
|
di_drv_hl854x_cb_gps_pvt(&ctx.me);
|
|
}
|
|
|
|
TEST(drv_hl854x_gps_pvt, cb_hdr_id_2) {
|
|
char pvt_frame_id_2[] = "2,08SV,1.0HDOP,29,18.2";
|
|
|
|
di_drv_hl854x_init(&ctx);
|
|
|
|
ctx.me.cfg.private_data = &ctx;
|
|
ctx.me.match.str = pvt_frame_id_2;
|
|
|
|
di_drv_hl854x_cb_gps_pvt(&ctx.me);
|
|
|
|
EXPECT_EQ(ctx.gps.siv, 8);
|
|
EXPECT_STREQ(ctx.gps.hdop, "1.0");
|
|
}
|