更新gnss,取消低功耗,方便调试射频
authorSnickerSun <snickersun@163.com>
Thu, 26 Dec 2024 22:43:27 +0000 (06:43 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 26 Dec 2024 22:43:27 +0000 (06:43 +0800)
code/sdk/zhihui/services/gnss/driver/device/gnss/firmware/gnss_cfg_h7s1.bin [new file with mode: 0644]
code/sdk/zhihui/services/gnss/driver/device/gnss/firmware/gnss_fw_file_array.c
code/sdk/zhihui/services/gnss/driver/device/gnss/firmware/gnss_fw_file_array.h
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

diff --git a/code/sdk/zhihui/services/gnss/driver/device/gnss/firmware/gnss_cfg_h7s1.bin b/code/sdk/zhihui/services/gnss/driver/device/gnss/firmware/gnss_cfg_h7s1.bin
new file mode 100644 (file)
index 0000000..112cc67
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d7d87f5f81edbcb9647b7bdf27773fe9f43343a71345bebcd5a96d3534dd9b9
+size 55883
index 38f9a48..bdf476a 100644 (file)
@@ -1,19 +1,26 @@
 /**
- * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
- *
- * Description:  gnss firmware dummy file arrays.
+ * Copyright (c) @CompanyNameMagicTag 2024-2024. All rights reserved.
  *
+ * Description:  gnss firmware file arrays.
+ * Author: @CompanyNameTag
  * History:
- * 2023-11-01, Create file.
+ * 2024-01-08, Create file.
  */
 #include "gnss_fw_file_array.h"
 #include "tiot_types.h"
 
 /* 仅用于SDK,无文件系统使用文件数组时,替换此目录下文件. */
 
-#define GNSS_FW_ATTR
+#define GNSS_FW_ATTR 
 
+#if 1
+/** $Achilles,H7S1,Q35,F1P26.0,0*72 */
 #define GNSS_CFG_BIN  "gnss_cfg.bin"
+#else
+/** $Achilles,H7S1,Q35,F1P10.0,0*77 */
+#define GNSS_CFG_BIN  "gnss_cfg_h7s1.bin"
+#endif
+
 GNSS_FW_ATTR const char g_gnss_cfg_file[] = {
 #include GNSS_CFG_BIN
 };
index 36312d9..a13dc61 100644 (file)
@@ -1,10 +1,10 @@
 /**
- * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
+ * Copyright (c) @CompanyNameMagicTag 2024-2024. All rights reserved.
  *
  * Description:  gnss firmware file arrays.
- *
+ * Author: @CompanyNameTag
  * History:
- * 2023-11-01, Create file.
+ * 2024-01-08, Create file.
  */
 
 #ifndef GNSS_FW_FILE_ARRAY_H
index 9f0adb6..996f09b 100644 (file)
@@ -162,6 +162,11 @@ QZSS L1C/A                 1~4                           193~196               PRN-192
        unsigned char term_offset;         /* 字段域数据偏移量 */\r
        unsigned char gps_data_good;       /* GPS数据有效状态 */\r
        unsigned int  sentence_type;       /* 字段类别,见枚举 sentence_types*/\r
+       /* 数据信号分析 */\r
+               unsigned char th001_errorcode; /**PNTH001 语句,定位错误码(第 6 字段)1:表示卫星跟踪数量不足,不满足定位条件;2:表示有效星历数量不足,不满足定位条件;3:定位精度不足,定位结果被拦截。*/\r
+               unsigned char th001_trace_star_count; /*实际跟踪卫星数量(第 7 字段)显示了当前实际跟踪的卫星数量。*/\r
+               unsigned char th001_valid_star_count; /*有效星历数量(第 8 字段)显示了当前有效的星历数量。*/\r
+               float th001_quality; /**PNTH001 语句,定位质量评估因子(第 5 字段)显示了当前评估出的定位精度,定位过程中,有效范围为 3~200,值越小定位精度越好。*/\r
        /* 数据解析结果 */\r
        unsigned int new_time;                  /* UTC时间 */\r
        unsigned int new_date;                  /* UTC日期 */\r
@@ -214,6 +219,11 @@ QZSS L1C/A                 1~4                           193~196               PRN-192
         unsigned char num_sats;            /* 可见卫星颗数 */\r
         unsigned char have_gps_yaw;        /* GPHDT航向字段有效 */\r
         unsigned int last_gps_time_ms;     /* 最后获取GPS信息时的时间  ms */\r
+       /* 数据信号分析 */\r
+               unsigned char th001_errorcode; /**PNTH001 语句,定位错误码(第 6 字段)1:表示卫星跟踪数量不足,不满足定位条件;2:表示有效星历数量不足,不满足定位条件;3:定位精度不足,定位结果被拦截。*/\r
+               unsigned char th001_trace_star_count; /*实际跟踪卫星数量(第 7 字段)显示了当前实际跟踪的卫星数量。*/\r
+               unsigned char th001_valid_star_count; /*有效星历数量(第 8 字段)显示了当前有效的星历数量。*/\r
+               float th001_quality; /**PNTH001 语句,定位质量评估因子(第 5 字段)显示了当前评估出的定位精度,定位过程中,有效范围为 3~200,值越小定位精度越好。*/\r
     }gps_data_t;\r
     \r
     /* NMEA0183结构体对象 */\r
index afa4dd9..296ad89 100644 (file)
@@ -28,6 +28,20 @@ static uint8_t g_gnssServiceBuff[REPORT_MAX_BYTES] = { 0 };
 \r
 typedef int32_t (*GnssCfgFunc)(tiot_handle handle);\r
 \r
+//配置使能 TRK 轨迹低功耗(芯片默认)。\r
+const uint8_t CFG_TRK_LPW_ENABLE[] = {0x03 ,0x00 ,0x0a ,0x00 ,0x00 ,0x00 ,0x06 ,0x00 ,0x05 ,0x00 ,0x02 ,0x00 ,0x01 ,0x02 };\r
+//配置禁用 TRK 轨迹低功耗。\r
+const uint8_t CFG_TRK_LPW_DISABLE[] = {0x03 ,0x00 ,0x07 ,0x00 ,0x00 ,0x00 ,0x06 ,0x00 ,0x05 ,0x00 ,0x02 ,0x00 ,0x00 ,0x00};\r
+\r
+//配置使能 ACQ 捕获低功耗(芯片默认)。\r
+const uint8_t CFG_ACQ_LPW_ENABLE[] = {0x03 ,0x00 ,0x09 ,0x00 ,0x00 ,0x00 ,0x06 ,0x00 ,0x04 ,0x00 ,0x02 ,0x00 ,0x01 ,0x02 };\r
+//配置禁用 ACQ 捕获低功耗。\r
+const uint8_t CFG_ACQ_LPW_DISABLE[] = {0x03 ,0x00 ,0x06 ,0x00 ,0x00 ,0x00 ,0x06 ,0x00 ,0x04 ,0x00 ,0x02 ,0x00 ,0x00 ,0x00};\r
+                                         \r
+\r
+\r
+\r
+\r
 typedef struct {\r
     uint16_t    sampleId;\r
     GnssCfgFunc cfgHandle;\r
@@ -60,6 +74,18 @@ int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)
         printf("\nerror: cfgNmeaAllCmd error: %d\n", ret);\r
         return 0;\r
     }\r
+\r
+    ret = tiot_service_write(handle, CFG_TRK_LPW_DISABLE, sizeof(CFG_TRK_LPW_DISABLE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_TRK_LPW_DISABLE error: %d\n", ret);\r
+        return 0;\r
+    }\r
+\r
+    ret = tiot_service_write(handle, CFG_ACQ_LPW_DISABLE, sizeof(CFG_ACQ_LPW_DISABLE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_ACQ_LPW_DISABLE error: %d\n", ret);\r
+        return 0;\r
+    }\r
     return 1;\r
 }\r
 \r
@@ -72,6 +98,9 @@ int32_t CfgAutoStartFixModeAllNmeaDefault(tiot_handle handle)
     const uint8_t cfgNmeaDefaultCmd[] = {0x03, 0x00, 0x16, 0x00, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0x02, 0x00, 0x11,\r
         0x00};\r
 \r
+    const uint8_t cfgAltCstrCmd[] = {0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x05, 0x00, 0x12, 0x10, 0x01, 0x00, 0x00};\r
+                                      \r
+\r
     // 配置启动模式:自动模式。\r
     int32_t ret = tiot_service_write(handle, cfgAutoStartCmd, sizeof(cfgAutoStartCmd));\r
     if (ret < 0) {\r
@@ -92,6 +121,18 @@ int32_t CfgAutoStartFixModeAllNmeaDefault(tiot_handle handle)
         printf("\nerror: cfgNmeaDefaultCmd error: %d\n", ret);\r
         return 0;\r
     }\r
+\r
+    ret = tiot_service_write(handle, CFG_TRK_LPW_DISABLE, sizeof(CFG_TRK_LPW_DISABLE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_TRK_LPW_DISABLE error: %d\n", ret);\r
+        return 0;\r
+    }\r
+\r
+    ret = tiot_service_write(handle, CFG_ACQ_LPW_DISABLE, sizeof(CFG_ACQ_LPW_DISABLE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_ACQ_LPW_DISABLE error: %d\n", ret);\r
+        return 0;\r
+    }\r
     return 1;\r
 }\r
 \r
index 5d0fda7..28c07c8 100644 (file)
@@ -176,6 +176,13 @@ 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_TH001:\r
+                                               pdata->th001_errorcode = pnmea->th001_errorcode;\r
+                                               pdata->th001_quality = pnmea->th001_quality;\r
+                                               pdata->th001_trace_star_count = pnmea->th001_trace_star_count;\r
+                                               pdata->th001_valid_star_count = pnmea->th001_valid_star_count;\r
+                           pdata->last_gps_time_ms = now;\r
+                                               printf("th001 copy to pdata \r\n" );\r
                                        case GPS_SENTENCE_TH002:\r
                            pdata->last_gps_time_ms = now;\r
                                                break;\r
@@ -404,6 +411,28 @@ static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata)
         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_TH001 + 4:\r
+               /*$PNTH001,0.000000,0.00,0.00,0.00,1,0,0*2E*/\r
+                       /***PNTH001 语句,定位质量评估因子(第 5 字段)显示了当前评估出的定位精度,定位过程中,有效范围为 3~200,值越小定位精度越好。*/\r
+                       pnmea->th001_quality = string_to_float((const char*)pnmea->term, (void*)0);\r
+                       // printf("th001 quality 5 %f,%s\n",pnmea->th001_quality,pnmea->term);\r
+                       break;\r
+               case GPS_SENTENCE_TH001 + 5:\r
+                       /**PNTH001 语句,定位错误码(第 6 字段) 1:表示卫星跟踪数量不足,不满足定位条件;2:表示有效星历数量不足,不满足定位条件;3:定位精度不足,定位结果被拦截。*/\r
+                       pnmea->th001_errorcode = (unsigned int)sring_to_int((const char*)pnmea->term, (void*)0);\r
+                       // printf("th001 th001_errorcode 6 %d,%s\n",pnmea->th001_errorcode,pnmea->term);\r
+                       break;\r
+               case GPS_SENTENCE_TH001 + 6:\r
+                       /**PNTH001 语句,实际跟踪卫星数量(第 7 字段)显示了当前实际跟踪的卫星数量。**/\r
+                       pnmea->th001_trace_star_count = (unsigned int)sring_to_int((const char*)pnmea->term, (void*)0);\r
+                       // printf("th001 th001_trace_star_count 7 %d,%s\n",pnmea->th001_trace_star_count,pnmea->term);\r
+                       break;\r
+               case GPS_SENTENCE_TH001 + 7:\r
+                       /**PNTH001 语句,有效星历数量(第 8 字段)显示了当前有效的星历数量*/\r
+                       pnmea->th001_valid_star_count = (unsigned int)sring_to_int((const char*)pnmea->term, (void*)0);\r
+                       // printf("th001 th001_valid_star_count 8 %d,%s\n",pnmea->th001_valid_star_count,pnmea->term);\r
+                       pnmea->gps_data_good = 1;\r
+                       break;\r
         }\r
     }\r
 \r
@@ -807,6 +836,15 @@ void dump_location_data_to_buf(gps_data_t *locationdata,char* buf,int max_buflen
        }else{\r
                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
+               locationdata->th001_errorcode==1?"跟踪数量不足":(locationdata->th001_errorcode==2?"有效星历数量不足":(locationdata->th001_errorcode==3?"定位精度不足":"无")),\r
+               locationdata->th001_quality,\r
+               locationdata->th001_trace_star_count,\r
+               locationdata->th001_valid_star_count\r
+       );\r
+       strcat_s(buf,max_buflen,tmpbuf);\r
+       \r
 #else\r
        strcat(buf,"\r\n");\r
        memset(tmpbuf,0,DUMP_BUF_SIZE);\r
@@ -849,6 +887,14 @@ void dump_location_data_to_buf(gps_data_t *locationdata,char* buf,int max_buflen
                strcat(buf,"无卫星数据\r\n");\r
        }\r
        strcat(buf,"\r\n");\r
+       memset(tmpbuf,0,DUMP_BUF_SIZE);\r
+       sprintf(tmpbuf,"定位质量信息,失败原因(%s),精度(%f),跟踪星(%d),有效星(%d)\n",\r
+               locationdata->th001_errorcode==1?"跟踪数量不足":(locationdata->th001_errorcode==2?"有效星历数量不足":(locationdata->th001_errorcode==3?"定位精度不足":"无")),\r
+               locationdata->th001_quality,\r
+               locationdata->th001_trace_star_count,\r
+               locationdata->th001_valid_star_count\r
+       );\r
+       strcat(buf,tmpbuf);\r
 #endif\r
        free(tmpbuf);\r
 }\r