#include <string.h>
#include <stdio.h>
#include <errno.h>
#include "./gps.h"
int gps_analyse(char *buff, GPRMC *gps_data)
{
char *ptr = NULL;
if (gps_data == NULL)
{
return -1;
}
if (strlen(buff) < 10)
{
return -1;
}
/* 如果buff字符串中包含字符"$GPRMC"则将$GPRMC的地址赋值给ptr */
if (NULL == (ptr = strstr(buff, "$GPRMC")))
{
return -1;
}
/* sscanf函数为从字符串输入,意思是将ptr内存单元的值作为输入分别输入到后面的结构体成员 */
// $GPRMC,075404.00,A,2306.61235,N,11316.59736,E,0.122,,020822,,,A*77
sscanf(ptr, "$GPRMC,%d.00,%c,%f,N,%f,E,%f,%f,%d,,,%c*",
&(gps_data->time), /* gps定位时间 */
&(gps_data->pos_state), /* gps状态位 */
&(gps_data->latitude), /* 纬度 */
&(gps_data->longitude), /* 经度 */
&(gps_data->speed), /* 速度 */
&(gps_data->direction), /* 航向 */
&(gps_data->date), /* 日期 */
&(gps_data->mode)); /* GPS模式位 */
return 0;
}
// !! 备注:留意如果$GPRMC里面航向字段无法获取,需要将sscanf改为
// sscanf(ptr, "$GPRMC,%d.00,%c,%f,N,%f,E,%f,,%d,,,%c*",
// &(gps_data->time), /* gps定位时间 */
// &(gps_data->pos_state), /* gps状态位 */
// &(gps_data->latitude), /* 纬度 */
// &(gps_data->longitude), /* 经度 */
// &(gps_data->speed), /* 速度 */
// &(gps_data->date), /* 日期 */
// &(gps_data->mode)); /* GPS模式位 */
int print_gps(GPRMC *gps_data)
{
printf("===========================================================\n");
printf("== \n");
printf("== GPS state bit : %c [A:有效状态 V:无效状态] \n", gps_data->pos_state);
printf("== GPS mode bit : %c [A:自主定位 D:差分定位] \n", gps_data->mode);
printf("== Date : 20%02d-%02d-%02d \n", gps_data->date % 100, (gps_data->date % 10000) / 100, gps_data->date / 10000);
printf("== Time : %02d:%02d:%02d \n", (gps_data->time / 10000 + 8) % 24, (gps_data->time % 10000) / 100, gps_data->time % 100);
printf("== 纬度 : 北纬:%d度%d分%d秒 \n", ((int)gps_data->latitude) / 100, (int)(gps_data->latitude - ((int)gps_data->latitude / 100 * 100)), (int)(((gps_data->latitude - ((int)gps_data->latitude / 100 * 100)) - ((int)gps_data->latitude - ((int)gps_data->latitude / 100 * 100))) * 60.0));
printf("== 经度 : 东经:%d度%d分%d秒 \n", ((int)gps_data->longitude) / 100, (int)(gps_data->longitude - ((int)gps_data->longitude / 100 * 100)), (int)(((gps_data->longitude - ((int)gps_data->longitude / 100 * 100)) - ((int)gps_data->longitude - ((int)gps_data->longitude / 100 * 100))) * 60.0));
printf("== 速度 : %.3f m/s \n", gps_data->speed);
printf("== \n");
printf("============================================================\n");
return 0;
}
评论5