main.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. gps "hnyfkj.com.cn/rtu/bxs-sy/air530z"
  6. modem "hnyfkj.com.cn/rtu/bxs-sy/air720u"
  7. "hnyfkj.com.cn/rtu/bxs-sy/baseapp"
  8. mcu "hnyfkj.com.cn/rtu/bxs-sy/mcu_ctrl_board"
  9. takephoto "hnyfkj.com.cn/rtu/bxs-sy/mvs_takephoto"
  10. "hnyfkj.com.cn/rtu/bxs-sy/netmgr"
  11. "hnyfkj.com.cn/rtu/bxs-sy/reporter"
  12. )
  13. func main() {
  14. if baseapp.IsArgsParam("-h") {
  15. help()
  16. return
  17. }
  18. if baseapp.IsArgsParam("-v") {
  19. fmt.Println("程序版本:", baseapp.Version, "\n构建时间:", baseapp.BuildTime)
  20. return
  21. }
  22. baseapp.ModuleInit()
  23. baseapp.SingleInstanceRun() // 异步非阻塞
  24. baseapp.Logger.Infof("程序版本: %s 构建时间: %s\n程序开始运行...",
  25. baseapp.Version, baseapp.BuildTime)
  26. // 01, 初始化卫星定位模块
  27. gps.ModuleInit()
  28. // 02, 初始化4G调制解调器
  29. if !modem.ModuleInit(false) {
  30. goto end_p
  31. }
  32. // 03, 初始化网络管理模块
  33. netmgr.ModuleInit()
  34. netmgr.WaitAllOK(time.Duration(10) * time.Second) // 等待联网成功和NTP时间同步成功
  35. // 04, 初始化相机拍照模块
  36. if !takephoto.ModuleInit() {
  37. goto end_p
  38. }
  39. // 05, 初始化单片机控制板
  40. if !mcu.ModuleInit() {
  41. goto end_p
  42. }
  43. // 06, 后台服务器业务交互
  44. if !reporter.ModuleInit() {
  45. goto end_p
  46. }
  47. // 07, 阻塞等待退出信号量
  48. select {
  49. case <-baseapp.IsExit2():
  50. case <-mcu.NotifyPwrWillOff():
  51. }
  52. // 08, 退出程序并释放资源
  53. end_p:
  54. reporter.ModuleExit()
  55. mcu.ModuleExit()
  56. modem.ModuleExit()
  57. gps.ModuleExit()
  58. baseapp.Logger.Info("程序退出")
  59. baseapp.ExitLogger() // 安全的关闭日志模块
  60. baseapp.SafeExit() // 安全的关闭退出程序
  61. }
  62. func help() {
  63. h := `
  64. -h 显示帮助提示
  65. -v 当前程序版本
  66. `
  67. fmt.Println(h)
  68. }