添加GPS信号增益显示,默认使能抗干扰特性
authorSnickerSun <snickersun@163.com>
Thu, 2 Jan 2025 12:14:59 +0000 (20:14 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 2 Jan 2025 12:14:59 +0000 (20:14 +0800)
code/sdk/zhihui/services/gnss/inc/NMEA0183.h
code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c
code/sdk/zhihui/services/gnss/src/NMEA0183.c

index 996f09b..34bb3aa 100644 (file)
@@ -167,6 +167,7 @@ QZSS L1C/A          1~4                           193~196               PRN-192
                unsigned char th001_trace_star_count; /*实际跟踪卫星数量(第 7 字段)显示了当前实际跟踪的卫星数量。*/\r
                unsigned char th001_valid_star_count; /*有效星历数量(第 8 字段)显示了当前有效的星历数量。*/\r
                float th001_quality; /**PNTH001 语句,定位质量评估因子(第 5 字段)显示了当前评估出的定位精度,定位过程中,有效范围为 3~200,值越小定位精度越好。*/\r
+               unsigned char th000_signal_vga; /*PNTH000 语句,VGA 档位(第 2 字段)描述了当前的信号增益档位,有效范围为2~13,正常信号时,其档位值为 7~9;如果档位值显示为 2,说明可能存在强干扰,导致增益饱和;如果档位值为 13,说明信号特别弱,可能射频链路增益不足。。*/\r
        /* 数据解析结果 */\r
        unsigned int new_time;                  /* UTC时间 */\r
        unsigned int new_date;                  /* UTC日期 */\r
@@ -224,6 +225,7 @@ QZSS L1C/A          1~4                           193~196               PRN-192
                unsigned char th001_trace_star_count; /*实际跟踪卫星数量(第 7 字段)显示了当前实际跟踪的卫星数量。*/\r
                unsigned char th001_valid_star_count; /*有效星历数量(第 8 字段)显示了当前有效的星历数量。*/\r
                float th001_quality; /**PNTH001 语句,定位质量评估因子(第 5 字段)显示了当前评估出的定位精度,定位过程中,有效范围为 3~200,值越小定位精度越好。*/\r
+               unsigned char th000_signal_vga; /*PNTH000 语句,VGA 档位(第 2 字段)描述了当前的信号增益档位,有效范围为2~13,正常信号时,其档位值为 7~9;如果档位值显示为 2,说明可能存在强干扰,导致增益饱和;如果档位值为 13,说明信号特别弱,可能射频链路增益不足。。*/\r
     }gps_data_t;\r
     \r
     /* NMEA0183结构体对象 */\r
index 14481f8..afa15ec 100644 (file)
@@ -44,19 +44,70 @@ const uint8_t cfgAutoStartCmd[] = {0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x0
 const uint8_t cfgAltCstrCmd[] = {0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x05, 0x00, 0x12, 0x10, 0x01, 0x00, 0x00};\r
 const uint8_t cfgColdStartCmd[] = {0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01};\r
 \r
-//配置定位使用的卫星系统\r
+//配置定位使用的卫星系统,GPS\r
 const uint8_t cfgFixModeGpsCmd[] = {0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00};\r
+//配置定位使用的卫星系统,QZSS/GAL/BDS/GLO/GPS\r
 const uint8_t cfgFixModeAllCmd[] = {0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00};\r
 \r
-//配置NMEA显示内容\r
+//配置NMEA显示内容,默认显示, RMC/GGA\r
 const uint8_t cfgNmeaDefaultCmd[] = {0x03, 0x00, 0x16, 0x00, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0x02, 0x00, 0x11, 0x00};\r
+//配置NMEA显示内容,全部显示,PNT/ZDA/VTG/RMC/GSV/GSA/GLL/GGA\r
 const uint8_t cfgNmeaAllCmd[] = {0x03, 0x00, 0x04, 0x01, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0x02, 0x00, 0xff, 0x00};  \r
 \r
+/*查询版本号*/\r
+const uint8_t qryVersion[] = {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00};\r
+\r
+/*开始定位*/\r
+const uint8_t startCmd[] = {0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+/*停止定位*/\r
+const uint8_t stopCmd[] = {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+\r
+/*配置禁用抗干扰特性*/\r
+const uint8_t CFG_ANTIJAM_DISABLE[]={0x03, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+/*配置使能抗干扰特性(芯片默认)*/\r
+const uint8_t CFG_ANTIJAM_ENABLE[]={0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00};\r
+\r
 typedef struct {\r
     uint16_t    sampleId;\r
     GnssCfgFunc cfgHandle;\r
 } GnssSamplesCfgTable;\r
 \r
+\r
+/**NMEA解析变量*/\r
+#include "NMEA0183.h"\r
+static NMEA0183 g_nmeadata={0};\r
+gps_data_t g_global_gpsData={0};\r
+\r
+/**GPS状态位*/\r
+static int g_is_gnss_poweron=0;\r
+static int g_is_gnss_logon=0;\r
+static int g_gnss_stopflag=0;\r
+\r
+static int decode_nmea(char c)\r
+{\r
+    int ret=0;\r
+    ret=0;\r
+    if(nmea_decode(&g_nmeadata,c) ==1 ) ///调用解析函数\r
+    {\r
+        dump_nmea_str(&(g_nmeadata.gpsParse));\r
+        if (g_nmeadata.gpsParse.sentence_type == GPS_SENTENCE_TH002 )\r
+        {\r
+            //一组数据最后一条\r
+            memcpy_s(&g_global_gpsData,sizeof(gps_data_t),&(g_nmeadata.gpsData),sizeof(gps_data_t));\r
+            ret = 1;\r
+            memset(&g_nmeadata,0,sizeof(g_nmeadata));\r
+        }\r
+    } \r
+\r
+    return ret;\r
+}\r
+\r
+gps_data_t * getGPSGlobaldata(void)\r
+{\r
+    return &g_global_gpsData;\r
+}\r
+\r
+\r
 int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)\r
 {\r
 \r
@@ -92,6 +143,12 @@ int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)
         printf("\nerror: CFG_ACQ_LPW_DISABLE error: %d\n", ret);\r
         return 0;\r
     }\r
+\r
+    ret = tiot_service_write(handle, CFG_ANTIJAM_ENABLE, sizeof(CFG_ANTIJAM_ENABLE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_ANTIJAM_ENABLE error: %d\n", ret);\r
+        return 0;\r
+    }\r
     return 1;\r
 }\r
 \r
@@ -137,7 +194,7 @@ int32_t CfgAutoStartFixModeAllNmeaDefault(tiot_handle handle)
 \r
 static int32_t QryVersion(tiot_handle handle)\r
 {\r
-    const uint8_t qryVersion[] = {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00};\r
+   \r
     // 查询版本号\r
     int32_t ret = tiot_service_write(handle, qryVersion, sizeof(qryVersion));\r
     if (ret < 0) {\r
@@ -148,14 +205,13 @@ static int32_t QryVersion(tiot_handle handle)
 }\r
 \r
 static const GnssSamplesCfgTable g_gnssSamplesCfg[] = {\r
-    // {COLDSTART_FIXMODEGPS_NMEAALL_SAMPLE,        CfgColdStartFixModeGpsNmeaAll},\r
-    {AUTOSTART_FIXMODEALL_NMEADEF_SAMPLE,        CfgAutoStartFixModeAllNmeaDefault}\r
+    {COLDSTART_FIXMODEGPS_NMEAALL_SAMPLE,        CfgColdStartFixModeGpsNmeaAll},\r
+    // {AUTOSTART_FIXMODEALL_NMEADEF_SAMPLE,        CfgAutoStartFixModeAllNmeaDefault}\r
 };\r
 \r
 static int32_t StartGnss(tiot_handle handle)\r
 {\r
-    const uint8_t startCmd[] = {0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,\r
-        0x01, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+    \r
     // 启动GNSS\r
     int32_t ret = tiot_service_write(handle, startCmd, sizeof(startCmd));\r
     if (ret < 0) {\r
@@ -168,7 +224,6 @@ static int32_t StartGnss(tiot_handle handle)
 \r
 static int32_t StopGnss(tiot_handle handle)\r
 {\r
-    const uint8_t stopCmd[] = {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
     // 停止GNSS\r
     int32_t ret = tiot_service_write(handle, stopCmd, sizeof(stopCmd));\r
     if (ret < 0) {\r
@@ -179,37 +234,6 @@ static int32_t StopGnss(tiot_handle handle)
     return 1;\r
 }\r
 \r
-#include "NMEA0183.h"\r
-static NMEA0183 g_nmeadata={0};\r
-gps_data_t g_global_gpsData={0};\r
-\r
-static int decode_nmea(char c)\r
-{\r
-    int ret=0;\r
-    ret=0;\r
-    if(nmea_decode(&g_nmeadata,c) ==1 ) ///调用解析函数\r
-    {\r
-        dump_nmea_str(&(g_nmeadata.gpsParse));\r
-        if (g_nmeadata.gpsParse.sentence_type == GPS_SENTENCE_TH002 )\r
-        {\r
-            //一组数据最后一条\r
-            memcpy_s(&g_global_gpsData,sizeof(gps_data_t),&(g_nmeadata.gpsData),sizeof(gps_data_t));\r
-            ret = 1;\r
-            memset(&g_nmeadata,0,sizeof(g_nmeadata));\r
-        }\r
-    } \r
-\r
-    return ret;\r
-}\r
-gps_data_t * getGPSGlobaldata(void)\r
-{\r
-    return &g_global_gpsData;\r
-}\r
-\r
-static int g_is_gnss_poweron=0;\r
-static int g_is_gnss_logon=0;\r
-static int g_gnss_stopflag=0;\r
-\r
 static void ListenGnssData(tiot_handle handle)\r
 {\r
     int32_t i = 0;\r
index ef4ad91..d276f3c 100644 (file)
@@ -176,6 +176,11 @@ static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata)
                                        case GPS_SENTENCE_ZDA:\r
                            pnmea->last_ZDA_ms = now;\r
                                                break;\r
+                                       case GPS_SENTENCE_TH000:\r
+                                               pdata->th000_signal_vga = pnmea->th000_signal_vga;\r
+                           pdata->last_gps_time_ms = now;\r
+                                               printf("th000 copy to pdata \r\n" );\r
+                                               break;\r
                                        case GPS_SENTENCE_TH001:\r
                                                pdata->th001_errorcode = pnmea->th001_errorcode;\r
                                                pdata->th001_quality = pnmea->th001_quality;\r
@@ -261,7 +266,6 @@ static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata)
             pnmea->sentence_type = GPS_SENTENCE_TH001;\r
         } else if (strcmp(term_type, "TH002") == 0) {;\r
             pnmea->sentence_type = GPS_SENTENCE_TH002;\r
-            pnmea->gps_data_good = 1;\r
         }else if (strcmp(term_type, "VTG") == 0) {\r
             pnmea->sentence_type = GPS_SENTENCE_VTG;\r
             // VTG may not contain a data qualifier, presume the solution is good\r
@@ -410,6 +414,11 @@ static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata)
         case GPS_SENTENCE_RMC + 8: // Course (GPRMC)\r
         case GPS_SENTENCE_VTG + 1: // Course (VTG)\r
             pnmea->new_course = string_to_float((const char*)pnmea->term, (void*)0);\r
+            break;\r
+               case GPS_SENTENCE_TH000 + 1:/*VGA 档位(第 2 字段)描述了当前的信号增益档位,有效范围为2~13,正常信号时,其档位值为 7~9;如果档位值显示为 2,说明可能存在强干扰,导致增益饱和;如果档位值为 13,说明信号特别弱,可能射频链路增益不足*/\r
+                       pnmea->th000_signal_vga = (unsigned int)sring_to_int((const char*)pnmea->term, (void*)0);\r
+                       printf("th000 signal_vga %d,%s\n",pnmea->th000_signal_vga,pnmea->term);\r
+                       pnmea->gps_data_good = 1;\r
             break;\r
                case GPS_SENTENCE_TH001 + 4:\r
                /*$PNTH001,0.000000,0.00,0.00,0.00,1,0,0*2E*/\r
@@ -837,7 +846,8 @@ void dump_location_data_to_buf(gps_data_t *locationdata,char* buf,int max_buflen
                strcat_s(buf,max_buflen,"无卫星数据\n");\r
        }\r
        memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
-       sprintf_s(tmpbuf,DUMP_BUF_SIZE,"定位质量信息,失败原因(%s),精度(%f),跟踪星(%d),有效星(%d)\n",\r
+       sprintf_s(tmpbuf,DUMP_BUF_SIZE,"定位质量信息,信号增益(%d),失败原因(%s),精度(%f),跟踪星(%d),有效星(%d)\n",\r
+               locationdata->th000_signal_vga,\r
                locationdata->th001_errorcode==1?"跟踪数量不足":(locationdata->th001_errorcode==2?"有效星历数量不足":(locationdata->th001_errorcode==3?"定位精度不足":"无")),\r
                locationdata->th001_quality,\r
                locationdata->th001_trace_star_count,\r