k5 agps模拟启动(未实现)
authorp15692025051 <846603105@qq.com>
Mon, 9 Oct 2023 01:28:33 +0000 (09:28 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 9 Oct 2023 01:28:33 +0000 (09:28 +0800)
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py

index 0174a46..8e50456 100644 (file)
@@ -1841,6 +1841,7 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
+        self.start_agps = 0
         #quecgnss.init()
         #quecgnss.gnssEnable(0)
     @staticmethod
@@ -2056,8 +2057,12 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
@@ -2082,7 +2087,7 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 3 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
                     GSV_dict= {}
@@ -2094,10 +2099,11 @@ class LocationManager(Abstract):
                         #gnss_r_data = [0,1]
                         gnss_r_data = quecgnss.read(4096)
                         #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        # print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
+                        print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
                         #print("gnss_r_data len:{}".format(gnss_r_data[0]))
                         if gnss_r_data[0] > 0 : #有数据
                             tmp_ok_count = 0
+                            tmp_very_ok_count = 0
                             gsv_data = gnss_r_data[1].split("GSV")
                                       
                             if len(gsv_data) >= 2 :  
@@ -2117,7 +2123,10 @@ class LocationManager(Abstract):
                                                 #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
                                                 if gsv_tmp[i+3] != "" :
                                                     if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
+                                                        tmp_ok_count +=1   
+                                                    if int(gsv_tmp[i+3])>=30:
+                                                        tmp_very_ok_count +=1  
+                                                     
                                             except Exception as e:
                                                 usys.print_exception(e)
                                             #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
@@ -2126,8 +2135,9 @@ class LocationManager(Abstract):
                                 
                                 if(tmp_ok_count > self.GSV_sig_ok_count ):
                                     self.GSV_sig_ok_count = tmp_ok_count
-                            
-
+                                if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                                    self.GSV_sig_very_ok_count = tmp_very_ok_count
+                                    
                             # if len(match_gga_data) > 8:
                             #     #print(match_gga_data)
                             #     if(match_gga_data[7] ):
@@ -2152,7 +2162,7 @@ class LocationManager(Abstract):
                                         EventMesh.txt_log("GGA:{}".format(match_gga_data))
                                         # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
                                         # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
+                                        #EventMesh.txt_log("timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
                                         print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
                                         gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
@@ -2228,10 +2238,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2247,7 +2260,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭