GNSS定位
目前GNSS定位组件主要功能为:解析接收机输出的位置信息(NMEA0183格式),提供给其他应用使用;后续会增加RTK、AGNSS等功能;目前支持的GNSS接收机有泰斗、和芯星通和中科微;对于其他厂家的接收机,除了特有的设置启动模式等接口,开发者需要自行适配外,其余均可通用;

重要数据结构及API接口
枚举
typedef enum rcvr_reset_type{
RCVR_COLD_START = 1,
RCVR_WARM_START,
RCVR_HOT_START,
}rcvr_reset_type_t;
定义 |
说明 |
RCVR_COLD_START |
接收机冷启动 |
RCVR_WARM_START |
接收机温启动 |
RCVR_HOT_START |
接收机热启动 |
结构体
typedef struct {
void *pos_data;
rcvr_prot_par parse_func;
}rcvr_prot_t;
参数 |
说明 |
pos_data |
指向协议对应的定位数据 |
parse_func |
协议的解析函数 |
typedef struct{
os_task_t *task;
rcvr_prot_t prot_table[RCVR_PROT_MAX];
}rcvr_prot_parse_t;
参数 |
说明 |
task |
接收机协议解析线程 |
prot_table |
挂载的所有协议结构体 |
typedef struct rcvr_object
{
os_device_t *device;
rcvr_prot_parse_t *prot_parser;
rcvr_ops_pfunc ops_table[RCVR_OPS_MAX];
}rcvr_object_t;
参数 |
说明 |
device |
挂载接收机的设备 |
prot_parser |
接收机挂载的协议解析模块 |
ops_table |
接收机的控制接口列表 |
API列表
接口 |
说明 |
rcvr_object_init |
初始化接收机(会涉及相关参数的空间申请) |
rcvr_object_deinit |
反初始化接收机(会涉及相关参数的空间释放) |
rcvr_object_get_by_name |
通过名称获取对应的接收机 |
rcvr_object_destroy |
销毁(动态申请的)接收机 |
get_rcvr_data |
获取接收机的数据 |
rcvr_reset |
控制接收机按照特定启动模式重启 |
rcvr_object_init
os_err_t rcvr_object_init(rcvr_object_t *self, const char *name, const char* device_name)
参数 |
说明 |
self |
指向接收机实体的指针 |
name |
接收机名称 |
device_name |
接收机挂载的设备名称 |
返回 |
说明 |
os_err_t |
返回相应的错误值 |
rcvr_object_deinit
os_err_t rcvr_object_deinit(rcvr_object_t *rcvr)
参数 |
说明 |
self |
指向接收机实体的指针 |
返回 |
说明 |
OS_EOK |
去初始化成功 |
rcvr_object_get_by_name
rcvr_object_t *rcvr_object_get_by_name(const char *name)
参数 |
说明 |
name |
要获取的接收机的名称 |
返回 |
说明 |
非OS_NULL |
指向接收机的指针(具体参见:rcvr_object_t定义) |
OS_NULL |
表明系统中没有此名称的接收机 |
rcvr_object_destroy
void rcvr_object_destroy(rcvr_object_t *rcvr)
get_rcvr_data
os_err_t get_rcvr_data(rcvr_object_t *rcvr, void *src, os_size_t src_size, rcvr_prot_type_t prot_type)
参数 |
说明 |
rcvr |
指向接收机实体的指针 |
src |
指向存储接收机结果的内存地址 |
src_size |
存储接收机位置结果的内存大小(根据协议不同,所需的内存大小不相同) |
prot_type |
协议类型(目前仅支持nmea_0183协议) |
返回 |
说明 |
os_err_t |
返回相应的错误值 |
特别说明 |
nmea协议的数据中经纬度是使用ddmm格式表示的,可以调用rcvr_data_to_wgs84函数将该坐标转成更为通用的wgs84坐标; |
NMEA0183协议的数据
根据不同的NMEA数据集封装了不同的结构体,这些语句集的结构体作为GNSS位置结构体的一个子集;目前支持的NMEA数据集有:RMC、GGA、GSV、GLL、GSA、VTG、ZDA。
typedef struct
{
nmea_rmc_t rmc_frame;
nmea_gga_t gga_frame;
nmea_gsv_t gsv_frame;
nmea_gll_t gll_frame;
nmea_gsa_t gsa_frame;
nmea_vtg_t vtg_frame;
nmea_zda_t zda_frame;
os_uint32_t valid_flag;
} nmea_t;
参数 |
说明 |
rmc_frame |
RMC数据集(推荐最低指定GNSS数据) |
gga_frame |
GGA数据集(GPS定位信息,用于全球定位系统的定位数据) |
gsv_frame |
GSV数据集(可见的GNSS卫星) |
gll_frame |
GGL数据集(地理位置——经度/纬度) |
gsa_frame |
GSA数据集(GPS精度因子与使用的卫星) |
vtg_frame |
VTG数据集(地面航向与地面速度,水平航向与航速) |
zda_frame |
ZDA数据集(时间与日期) |
valid_flag |
当前GNSS数据结构中有效数据集标志 |
rcvr_reset
os_err_t rcvr_reset(rcvr_object_t *rcvr, rcvr_reset_type_t reset_type)
参数 |
说明 |
rcvr |
指向接收机的指针 |
reset_type |
启动模式(参见:rcvr_reset_type_t定义) |
返回 |
说明 |
os_err_t |
返回相应的错误值 |
使用示例
参考components\position\sample目录下onepos_cmd.c文件中接口调用方式。