main.go 1.7 KB

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