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