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
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
\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
}\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
\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
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
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
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
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
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