NMEA
static void _gps_task(void *arg) {
u8_t size;
u8_t marker;
u8_t type[5];
u8_t body[128];
nmeaINFO info; //GPS解码后得到的信息
nmeaPARSER parser; //解码时使用的数据结构
nmea_zero_INFO(&info); //初始化NMEA数据结构体
nmea_parser_init(&parser);//初始化NMEA数据结构体
_gps_init();
os_driver_ioctl(_gps_dev, SET_EMPTY_FIFO, 0); // 清空接收缓冲队列
OS_RTT_printf(0, "GPS Task implementation \n");
while (1) {
memset((void *) &marker, 0, sizeof(marker));
size = _gps_read(&marker, 1);
if (size == 0) {
msleep(200);
continue;
}
if (marker != '$') continue;
memset((void *) &type, 0, sizeof(type));
_gps_read((u8_t *) type, 5);
OS_RTT_printf(0, "Type:%s \n", type);
if (type[0] != 'G' || type[1] != 'N' || type[2] != 'Z' || type[3] != 'D' || type[4] != 'A') {
continue;
} else {
_gps_read((u8_t *) body, 27);
OS_RTT_printf(0, "Rec:%s \n", body);
}
}
}
几个重要的结构体:
1.返回时用来保存返回数据的。
_nmeaINFO
typedef struct _nmeaINFO
{
int smask; /**< Mask specifying types of packages from which data have been obtained 掩码,指定从其中获取数据的包的类型 */
nmeaTIME utc; /**< UTC of position 位置的UTC */
int sig; /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) GPS质量指示器(0 =无效;1 =修复;2 =微分,3 =灵敏)*/
int fix; /**< Operating mode, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) 操作模式,用于导航(1 =修复不可用;2 = 2 d;3 = 3 d) */
double PDOP; /**< Position Dilution Of Precision 位置精度系数*/
double HDOP; /**< Horizontal Dilution Of Precision 水平精度系数*/
double VDOP; /**< Vertical Dilution Of Precision 垂直精度系数*/
double lat; /**< Latitude in NDEG - +/-[degree][min].[sec/60 ]纬度为NDEG - +/-[度][分钟]。(秒/ 60) */
double lon; /**< Longitude in NDEG - +/-[degree][min].[sec/60] 经度在NDEG - +/-[度][分钟].[秒/60]*/
double elv; /**< Antenna altitude above/below mean sea level (geoid) in meters 天线在平均海平面(大地水准面)上/下的高度,单位为米*/
double sog; /**< 数值 对地速度,单位为节 */
double speed; /**< Speed over the ground in kilometers/hour 在地面上的速度,单位为公里/小时*/
double direction; /**< Track angle in degrees True 跟踪角度,度为真*/
double declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) 磁场变化度(东方方差减去真实航向)*/
char mode; /**< 字符 定位模式标志 (A = 自主模式, D = 差分模式, E = 估算模式, N = 数据无效) */
nmeaSATINFO satinfo; /**< Satellites information 卫星信息*/
nmeaSATINFO BDsatinfo; /**北斗卫星信息*/
int txt_level;
char *txt;
} nmeaINFO;

浙公网安备 33010602011771号