android gps机制分析--之七

4 NMEA数据的解析

先看一段QXDM log,是获取NMEA的一个大致流程:

android gps机制分析--之七_第1张图片

loc_middleware_proc中打印Received IPC Message with id 10.Loc enabled 1

android gps机制分析--之七_第2张图片

因为cmd_type是1,也就是LOC_CMD_TYPE_REPORT_POSITION:

modem_proc\gps\gnss\loc_mw\src\loc_task.h

android gps机制分析--之七_第3张图片

android gps机制分析--之七_第4张图片

因此接下来调用了loc_pd_process_cmd_request这个函数,在这个函数中,

因为cmd_type是LOC_CMD_TYPE_REPORT_POSITION类型,因此调用loc_pd_notify_client函数:

modem_proc\gps\gnss\loc_mw\src\ loc_pd.c

android gps机制分析--之七_第5张图片

在loc_pd_notify_client函数中,调用loc_pd_report获取position信息,对应输出的log:

loc_pd_get_sv_repoet:health_svmask 0x0和gnss report, mask = 48, num_sv = 19,

再调用loc_client_invoke_callback函数,eventtype是LOC_EVENT_NMEA_POSITION_REPORT,

处理nmea的event事件,对应输出的log:"loc_client_invoke_callback, client_handle = 3, event_type = 2, maxclients = 5"





android gps机制分析--之七_第6张图片

loc_pd_ext_event_cb函数中,调用了loc_pd_queue_report_position_request:

android gps机制分析--之七_第7张图片

android gps机制分析--之七_第8张图片

android gps机制分析--之七_第9张图片

android gps机制分析--之七_第10张图片

在loc_middleware_queue_cmd_internal函数里的处理,对应了log:"send msg_id=10, cmd=1 to locthread"。

最后调用了tm_nmea_gpgga_put函数,对应输出”Generated NMEA $GPGGA”,在tm_nmea.c里,

有分别处理GPGGA、GNGNS、GPGSV、GPGSA等格式的函数,感兴趣的可以深入学习了解:

modem_proc\gps\gnss\sm\tm\src\tm_nmea.c


modem_proc\gps\gnss\sm\tm\src\tm_util.c

android gps机制分析--之七_第11张图片


最后格式化输出,也就是按照NMEA标准的格式输出。

你可能感兴趣的:(---【gps框架分析】)