testGps.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. --- 模块功能:GPS功能测试(本demo是以Air820模块中科微gps为例).
  2. -- @author openLuat
  3. -- @module gps.testGps
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.23
  7. module(...,package.seeall)
  8. local gps = require"gpsZkw"
  9. --agps功能模块只能配合Air820或者Air530z使用;如果不是这两款模块,不要打开agps功能
  10. require"agpsZkw"
  11. --若要使用Air820模块中科微gps的热启动功能,则VBACKUP脚必须有备份电源输入
  12. --满足以下条件时,热启动才能体现出来
  13. --当GPS模块冷启动上电、第一次定位成功后,不要立即给GPS模块断电,定位成功状态下保持至少30s供电打开,这段时间gps模块在解算星历数据
  14. --按照以上方式做,如果模块处于静止状态,并且VBACKUP脚未断电,下次打开GPS基本上3s就可以定到位
  15. local function printGps()
  16. if gps.isOpen() then
  17. local tLocation = gps.getLocation()
  18. local speed = gps.getSpeed()
  19. log.info("testGps.printGps",
  20. gps.isOpen(),gps.isFix(),
  21. tLocation.lngType,tLocation.lng,tLocation.latType,tLocation.lat,
  22. gps.getAltitude(),
  23. speed,
  24. gps.getCourse(),
  25. gps.getViewedSateCnt(),
  26. gps.getUsedSateCnt())
  27. end
  28. end
  29. local function test1Cb(tag)
  30. log.info("testGps.test1Cb",tag)
  31. printGps()
  32. end
  33. local function test2Cb(tag)
  34. log.info("testGps.test2Cb",tag)
  35. printGps()
  36. end
  37. local function test3Cb(tag)
  38. log.info("testGps.test3Cb",tag)
  39. printGps()
  40. end
  41. --测试代码开关,取值1,2
  42. local testIdx = 1
  43. local function test(idx)
  44. --第1种测试代码
  45. if idx==1 then
  46. --执行完下面三行代码后,GPS就会一直开启,永远不会关闭
  47. --因为gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb}),这个开启,没有调用gps.close关闭
  48. gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
  49. --10秒内,如果gps定位成功,会立即调用test2Cb,然后自动关闭这个“GPS应用”
  50. --10秒时间到,没有定位成功,会立即调用test2Cb,然后自动关闭这个“GPS应用”
  51. gps.open(gps.TIMERORSUC,{tag="TEST2",val=10,cb=test2Cb})
  52. --300秒时间到,会立即调用test3Cb,然后自动关闭这个“GPS应用”
  53. gps.open(gps.TIMER,{tag="TEST3",val=300,cb=test3Cb})
  54. --第2种测试代码
  55. elseif idx==2 then
  56. --执行完下面三行代码打开GPS后,5分钟之后GPS会关闭
  57. gps.open(gps.DEFAULT,{tag="TEST1",cb=test1Cb})
  58. sys.timerStart(gps.close,300000,gps.DEFAULT,{tag="TEST1"})
  59. gps.open(gps.TIMERORSUC,{tag="TEST2",val=10,cb=test2Cb})
  60. gps.open(gps.TIMER,{tag="TEST3",val=60,cb=test3Cb})
  61. end
  62. end
  63. --[[
  64. 函数名:nemacb
  65. 功能 :NEMA数据的处理回调函数
  66. 参数 :
  67. data:一条NEMA数据
  68. 返回值:无
  69. ]]
  70. local function nmeaCb(nmeaItem)
  71. log.info("testGps.nmeaCb",nmeaItem)
  72. end
  73. --如果是外部控制对GPS模块的供电,调用下面的接口,根据实际情况控制GPS模块的供电开关
  74. --gps.setPowerCbFnc,设置供电开关回调
  75. --[[
  76. gps.setPowerCbFnc(
  77. function(status)
  78. if status then
  79. --打开供电
  80. else
  81. --关闭供电
  82. end
  83. end
  84. )
  85. ]]
  86. --如果不调用此接口,默认为GPS+BD定位
  87. --gps.setAerialMode(1,1,0)
  88. --设置NEMA语句的输出频率
  89. --gps.setNemaReportFreq(1,1,1,1)
  90. --设置仅gps.lua内部处理NEMA数据
  91. --如果不调用此接口,默认也为仅gps.lua内部处理NEMA数据
  92. --如果gps.lua内部不处理,把NMEA数据通过回调函数cb提供给外部程序处理,参数设置为1,nmeaCb
  93. --如果gps.lua和外部程序都处理,参数设置为2,nmeaCb
  94. gps.setNmeaMode(2,nmeaCb)
  95. test(testIdx)
  96. sys.timerLoopStart(printGps,2000)