air_gnss.lua 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. local air_gnss = {}
  2. function log_ui(...)
  3. lcd.clear()
  4. -- 把...拼成一个字符串,然后输出到UI
  5. local r = {}
  6. for i = 1, select('#', ...) do
  7. table.insert(r, tostring(select(i, ...)))
  8. end
  9. if #r == 0 then
  10. table.insert(r, "nil")
  11. end
  12. lcd.drawStr(50, 50, table.concat(r, "\t"))
  13. -- uart.write(1, "\r\n")
  14. log.info("log", table.concat(r, "\t"))
  15. end
  16. -- gnss的备电和gsensor的供电
  17. local vbackup = gpio.setup(24, 0)
  18. -- gnss的供电
  19. local gpsPower = pm.power(pm.GPS, true)
  20. local function gnss_pwr(on, vbak)
  21. log.info("GPS", "start")
  22. -- gnss的复位
  23. -- local gpsRst = gpio.setup(27, 1)
  24. local uartId = 2
  25. libgnss.clear() -- 清空数据,兼初始化
  26. uart.setup(uartId, 115200)
  27. libgnss.bind(2, 1)
  28. vbackup((vbak or on) and 1 or 0)
  29. gpsPower(on and 1 or 0)
  30. log_ui("vbackup power:", (vbak or on) and 1 or 0)
  31. log_ui("gpsPower power:", on and 1 or 0)
  32. sys.timerLoopStart(function()
  33. if libgnss.isFix() then
  34. libgnss.clear()
  35. sys.publish("GNSS_FIXED_TOPIC")
  36. end
  37. end, 200)
  38. end
  39. local waitSeconds = 5 --热启动等待时间
  40. local isHotStart = true --是否是热启动
  41. local testCount = 100 --测试循环次数
  42. function air_gnss.gnss_start()
  43. log_ui("start gnss test")
  44. -- 先给gps开机
  45. gnss_pwr(true, isHotStart)
  46. log_ui("gnss power on")
  47. -- 等待第一次定位成功
  48. sys.waitUntil("GNSS_FIXED_TOPIC")
  49. log_ui("gnss first fixed")
  50. local failCount = 0
  51. for i = 1, testCount do
  52. log_ui("gnss test count:", i)
  53. -- 关闭gps
  54. log_ui("gnss power off")
  55. gnss_pwr(false, isHotStart)
  56. sys.wait(1000)
  57. -- 打开gps
  58. log_ui("gnss power on")
  59. local closeTime = os.time()
  60. gnss_pwr(true, isHotStart)
  61. -- 等待定位成功
  62. sys.waitUntil("GNSS_FIXED_TOPIC")
  63. local fixedTime = os.time()
  64. -- 等待5s
  65. sys.wait(5000)
  66. -- 计算定位时间
  67. local diffTime = fixedTime - closeTime
  68. -- 如果定位时间小于waitSeconds,则认为定位成功
  69. if diffTime < waitSeconds then
  70. log_ui("gnss fixed time:", diffTime)
  71. else
  72. log_ui("gnss fixed time:", diffTime, "fail")
  73. failCount = failCount + 1
  74. end
  75. log_ui("gnss test success percent:", (i - failCount) / i * 100, "%", failCount, "/", i)
  76. end
  77. end
  78. return air_gnss