testGps.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. --- 模块功能:GPS功能测试(本demo是以Air720通过uart1外接Air530为例配置,注意:Air530供电要求3.3V,Air720的IO是1.8V,硬件上注意做电平转换).
  2. -- @author openLuat
  3. -- @module gps.testGps
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.23
  7. require "autoGPS"
  8. module(...,package.seeall)
  9. local gps,agps
  10. --GPS模块实际连接的串口是多少就写多少
  11. local uartId=3
  12. local function printGps()
  13. if gps.isOpen() then
  14. local tLocation = gps.getLocation()
  15. local speed = gps.getSpeed()
  16. log.info("testGps.printGps",
  17. gps.isOpen(),gps.isFix(),
  18. tLocation.lngType,tLocation.lng,tLocation.latType,tLocation.lat,
  19. gps.getAltitude(),
  20. speed,
  21. gps.getCourse(),
  22. gps.getViewedSateCnt(),
  23. gps.getUsedSateCnt())
  24. end
  25. end
  26. local function test1Cb(tag)
  27. log.info("testGps.test1Cb",tag)
  28. printGps()
  29. end
  30. local function test2Cb(tag)
  31. log.info("testGps.test2Cb",tag)
  32. printGps()
  33. end
  34. local function test3Cb(tag)
  35. log.info("testGps.test3Cb",tag)
  36. printGps()
  37. end
  38. --测试代码开关,取值1,2
  39. local testIdx = 1
  40. local function test(idx)
  41. --第1种测试代码
  42. if idx==1 then
  43. --执行完下面三行代码后,GPS就会一直开启,永远不会关闭
  44. --因为gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb}),这个开启,没有调用gps.close关闭
  45. gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
  46. --10秒内,如果gps定位成功,会立即调用test2Cb,然后自动关闭这个“GPS应用”
  47. --10秒时间到,没有定位成功,会立即调用test2Cb,然后自动关闭这个“GPS应用”
  48. gps.open(gps.TIMERORSUC,{tag="TEST2",val=10,cb=test2Cb})
  49. --300秒时间到,会立即调用test3Cb,然后自动关闭这个“GPS应用”
  50. gps.open(gps.TIMER,{tag="TEST3",val=300,cb=test3Cb})
  51. --第2种测试代码
  52. elseif idx==2 then
  53. --执行完下面三行代码打开GPS后,5分钟之后GPS会关闭
  54. gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
  55. sys.timerStart(gps.close,300000,gps.DEFAULT,{tag="TEST1"})
  56. gps.open(gps.TIMERORSUC,{tag="TEST2",val=10,cb=test2Cb})
  57. gps.open(gps.TIMER,{tag="TEST3",val=60,cb=test3Cb})
  58. end
  59. end
  60. --[[
  61. 函数名:nemacb
  62. 功能 :NEMA数据的处理回调函数
  63. 参数 :
  64. data:一条NEMA数据
  65. 返回值:无
  66. ]]
  67. local function nmeaCb(nmeaItem)
  68. log.info("testGps.nmeaCb",nmeaItem)
  69. end
  70. --[[
  71. 函数名:powerCb
  72. 功能:设置给gps供电的函数
  73. 参数:无
  74. ]]
  75. --Air820内部给gps供电脚为VIB,但国科lib里面设置的默认打开的电压域为VMMC,导致gps无法工作,在这设置一个供电回调函数,不论何种gps芯片,都能正常工作
  76. local function powerCb(flag)
  77. if flag then
  78. pmd.ldoset(10, pmd.LDO_VIBR)
  79. rtos.sys32k_clk_out(1)
  80. else
  81. pmd.ldoset(0, pmd.LDO_VIBR)
  82. rtos.sys32k_clk_out(0)
  83. end
  84. end
  85. --收到AUTOGPS_READY消息,表示GPS自适应成功
  86. --在此消息之后,才能正常使用GPS功能
  87. sys.subscribe("AUTOGPS_READY",function(gpsLib,agpsLib,kind,baudrate)
  88. gps=gpsLib
  89. agps=agpsLib
  90. log.info("testGps.AUTOGPS_READY",baudrate,kind)
  91. gps.setUart(uartId,baudrate,8,uart.PAR_NONE,uart.STOP_1)
  92. gps.setPowerCbFnc(powerCb)
  93. --如果不调用此接口,默认为仅gps.lua内部处理NEMA数据
  94. --如果gps.lua内部不处理,把NMEA数据通过回调函数cb提供给外部程序处理,参数设置为1,nmeaCb
  95. --如果gps.lua和外部程序都处理,参数设置为2,nmeaCb
  96. gps.setNmeaMode(2,nmeaCb)
  97. test(testIdx)
  98. sys.timerLoopStart(printGps,2000)
  99. end)