Просмотр исходного кода

fix: 修改air8000 AGPS 加载错误的问题

梁健 9 месяцев назад
Родитель
Сommit
18d85a53f1

+ 7 - 4
module/Air8000/demo/GPS/agps_icoe.lua

@@ -172,7 +172,8 @@ local function do_agps()
     -- 然后, 判断星历时间和下载星历
     local now = os.time()
     local agps_time = tonumber(io.readFile("/hxxt_tm") or "0") or 0
-    if now - agps_time > 3600 then
+
+    if now - agps_time > 3600 or io.fileSize("/hxxt.dat") < 1024 then
         local url = agps_icoe.opts.url
         if not agps_icoe.opts.url then
             if agps_icoe.opts.sys and 2 == agps_icoe.opts.sys then
@@ -185,12 +186,13 @@ local function do_agps()
         local code = http.request("GET", url, nil, nil, {dst="/hxxt.dat"}).wait()
         if code and code == 200 then
             log.info("agps_icoe", "下载星历成功", url)
+            sys.publish("GNSS_STATE", "AGPS_DOWNLOADED")
             io.writeFile("/hxxt_tm", tostring(now))
         else
             log.info("agps_icoe", "下载星历失败", code)
         end
     else
-        log.info("agps_icoe", "星历不需要更新", now - agps_time)
+        log.info("agps_icoe", "星历不需要更新1", now - agps_time)
     end
 
     local gps_uart_id = agps_icoe.opts.uart_id or 2
@@ -215,6 +217,7 @@ local function do_agps()
     if not lat or not lng then
         -- lat, lng = 23.4068813, 113.2317505
         log.info("agps_icoe", "没有GPS坐标", lat, lng)
+        sys.publish("GNSS_STATE", "AGPS_LBS_LOC_ERR")
         return -- TODO 暂时不写入参考位置
     end
     if socket.sntp then
@@ -229,13 +232,13 @@ local function do_agps()
         uart.write(gps_uart_id, str .. "\r\n")
         sys.wait(20)
     end
-
+    sys.publish("GNSS_STATE", "AGPS_WIRTE_OK")
     local str = string.format("$AIDPOS,%.7f,%s,%.7f,%s,1.0\r\n",
     lat > 0 and lat or (0 - lat), lat > 0 and 'N' or 'S',
     lng > 0 and lng or (0 - lng), lng > 0 and 'E' or 'W')
     log.info("agps_icoe", "写入AGPS参考位置", str)
     uart.write(gps_uart_id, str)
-
+    
     -- 结束
     agps_icoe.agps_tm = now
 end

+ 7 - 4
module/Air8000/project/整机开发板出厂工程/user/agps_icoe.lua

@@ -172,7 +172,8 @@ local function do_agps()
     -- 然后, 判断星历时间和下载星历
     local now = os.time()
     local agps_time = tonumber(io.readFile("/hxxt_tm") or "0") or 0
-    if now - agps_time > 3600 then
+
+    if now - agps_time > 3600 or io.fileSize("/hxxt.dat") < 1024 then
         local url = agps_icoe.opts.url
         if not agps_icoe.opts.url then
             if agps_icoe.opts.sys and 2 == agps_icoe.opts.sys then
@@ -185,12 +186,13 @@ local function do_agps()
         local code = http.request("GET", url, nil, nil, {dst="/hxxt.dat"}).wait()
         if code and code == 200 then
             log.info("agps_icoe", "下载星历成功", url)
+            sys.publish("GNSS_STATE", "AGPS_DOWNLOADED")
             io.writeFile("/hxxt_tm", tostring(now))
         else
             log.info("agps_icoe", "下载星历失败", code)
         end
     else
-        log.info("agps_icoe", "星历不需要更新", now - agps_time)
+        log.info("agps_icoe", "星历不需要更新1", now - agps_time)
     end
 
     local gps_uart_id = agps_icoe.opts.uart_id or 2
@@ -215,6 +217,7 @@ local function do_agps()
     if not lat or not lng then
         -- lat, lng = 23.4068813, 113.2317505
         log.info("agps_icoe", "没有GPS坐标", lat, lng)
+        sys.publish("GNSS_STATE", "AGPS_LBS_LOC_ERR")
         return -- TODO 暂时不写入参考位置
     end
     if socket.sntp then
@@ -229,13 +232,13 @@ local function do_agps()
         uart.write(gps_uart_id, str .. "\r\n")
         sys.wait(20)
     end
-
+    sys.publish("GNSS_STATE", "AGPS_WIRTE_OK")
     local str = string.format("$AIDPOS,%.7f,%s,%.7f,%s,1.0\r\n",
     lat > 0 and lat or (0 - lat), lat > 0 and 'N' or 'S',
     lng > 0 and lng or (0 - lng), lng > 0 and 'E' or 'W')
     log.info("agps_icoe", "写入AGPS参考位置", str)
     uart.write(gps_uart_id, str)
-
+    
     -- 结束
     agps_icoe.agps_tm = now
 end

+ 52 - 10
module/Air8000/project/整机开发板出厂工程/user/airgps.lua

@@ -5,8 +5,11 @@ local gps_is_run  = false
 local lat = ""
 local lng = ""
 local total_sats = 0
+local total_sats_use = 0
 local speed = 0
 local degrees = ""
+local snr = ""
+local snr1 = ""
 local location = ""
 local move = "静止"
 local time = ""
@@ -30,9 +33,40 @@ local function setup_gps()
 end
 local function gps_state_get()
     local gsv =  libgnss.getGsv()
+    -- log.info("nmea", "gsv", json.encode(libgnss.getGsv()))
     if gsv and  gsv.total_sats then
         total_sats = gsv.total_sats
     end
+    local tmp = {}
+    snr = ""
+    snr1 = ""
+    if gsv.total_sats > 0 then
+        for i = 1, gsv.total_sats do
+            if gsv.sats[i].snr and gsv.sats[i].snr ~= 0 then
+                table.insert(tmp, gsv.sats[i].snr)
+            end
+        end
+        total_sats_use = #tmp
+        table.sort(tmp, function(a, b)
+            return a > b
+        end)
+        if #tmp > 16 then
+            for i = 1 , 16 do
+                snr = snr .. tmp[i] .. "," 
+            end
+            
+            for i = 17 , #tmp do
+                snr1 = snr1 .. tmp[i] .. "," 
+            end
+        else
+            for i = 1 , #tmp do
+                snr = snr .. tmp[i] .. "," 
+            end            
+        end
+        -- log.info("gps_state_get",#tmp,snr,snr1 )
+    end
+
+
     local vtg =  libgnss.getVtg()
     if vtg and  gsv.speed_kph then
         speed = gsv.speed_kph
@@ -50,7 +84,7 @@ local function gps_state_get()
         lng = rmc.lng
         variation = rmc.variation
         
-        time = rmc.year .. "年" .. rmc.month .. "月" .. rmc.day .. "日" .. rmc.hour .. "时" .. (rmc.min + 8) .. "分"  ..   rmc.sec .. "秒" 
+        time = rmc.year .. "年" .. rmc.month .. "月" .. rmc.day .. "日" .. (rmc.hour + 8) .. "时" .. rmc.min  .. "分"  ..   rmc.sec .. "秒" 
         -- speed = libgnss.getIntLocation(2)
     end
 end
@@ -73,6 +107,12 @@ sys.subscribe("GNSS_STATE", function(event, ticks)
         -- end
     elseif event == "LOSE" then
         gps_state = "定位失败"
+    elseif event == "AGPS_DOWNLOADED" then
+        gps_state = "定位中:辅助定位数据下载完成"
+    elseif event == "AGPS_LBS_LOC_ERR" then
+        gps_state = "定位中:辅助定位坐标位置获取失败"
+    elseif event == "AGPS_WIRTE_OK" then
+        gps_state = "定位中:辅助定位写入完成,正在搜星"
     end
 end)
 
@@ -83,19 +123,21 @@ function airgps.run()       -- TTS 播放主程序
     lcd.setFont(lcd.font_opposansm12_chinese) -- 具体取值可参考api文档的常量表
     while true do
         lcd.clear(_G.bkcolor) 
-        sys.wait(100)
-        
+        sys.wait(1000)
+        -- log.info("scell", json.encode(mobile.scell()))
         gps_state_get()
         -- log.info("airgps.run 11 ")
         
         lcd.drawStr(0,80,"GPS 状态:" .. gps_state)
-        lcd.drawStr(0,110,"经度:" .. lng  .. " 纬度:".. lat)
-        lcd.drawStr(0,140,"卫星数:" .. total_sats)
-        lcd.drawStr(0,170,"速度:" .. speed .. "千米/小时")
-        lcd.drawStr(0,200,"方向:" .. degrees)
-        lcd.drawStr(0,230,"位置:" .. location)
-        lcd.drawStr(0,260,"时间:" .. time)
-        lcd.drawStr(0,290,"运动状态:" .. move)
+        lcd.drawStr(0,110,"经度:" .. lng  .. " 纬度:".. lat .. " (WGS-84坐标系)" )
+        lcd.drawStr(0,140,"可见卫星数:" .. total_sats .. " ,可用卫星数:" .. total_sats_use)
+        lcd.drawStr(0,160,"信噪比:" .. snr)      
+        lcd.drawStr(0,180,snr1)       
+        lcd.drawStr(0,200,"速度:" .. speed .. "千米/小时")
+        lcd.drawStr(0,230,"方向:" .. degrees)
+        lcd.drawStr(0,260,"位置:" .. location)
+        lcd.drawStr(0,290,"高精度时间:" .. time)
+        lcd.drawStr(0,320,"运动状态:" .. move)
 
 
         lcd.showImage(20,360,"/luadb/back.jpg")