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