main.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. )
  10. func main() {
  11. if baseapp.IsArgsParam("-h") {
  12. help()
  13. return
  14. }
  15. if baseapp.IsArgsParam("-v") {
  16. fmt.Println("程序版本:", baseapp.Version, "\n构建时间:", baseapp.BuildTime)
  17. return
  18. }
  19. baseapp.ModuleInit()
  20. baseapp.SingleInstanceRun() // 异步非阻塞
  21. baseapp.Logger.Infof("程序版本: %s 构建时间: %s\n程序开始运行...",
  22. baseapp.Version, baseapp.BuildTime)
  23. // 01, 初始化卫星定位模块
  24. gps.ModuleInit()
  25. // 02, 初始化4G调制解调器
  26. if !netmgrd.ModemInit() {
  27. goto end_p
  28. }
  29. // 03, 初始化网络管理模块
  30. netmgrd.ModuleInit()
  31. netmgrd.WaitAllOK(time.Duration(10) * time.Second) // 等待联网成功和NTP时间同步成功
  32. // 04, 初始化相机拍照模块
  33. if !camera1.ModuleInit() {
  34. goto end_p
  35. }
  36. // 05, 初始化单片机控制板, Todo: 根据项目不同, 使用的控制版硬件和协议都不同, 具体看情况
  37. // 06, 后台服务器业务交互, Todo: 根据项目不同, 实现具体的业务逻辑协议都不同, 具体看情况
  38. // 07, 阻塞等待退出信号量
  39. <-baseapp.IsExit2()
  40. // 08, 退出程序并释放资源
  41. end_p:
  42. netmgrd.ModemExit()
  43. gps.ModuleExit()
  44. baseapp.Logger.Info("程序退出")
  45. baseapp.ExitLogger() // 安全的关闭日志模块
  46. baseapp.SafeExit() // 安全的关闭退出程序
  47. }
  48. func help() {
  49. h := `
  50. -h 显示帮助提示
  51. -v 当前程序版本
  52. `
  53. fmt.Println(h)
  54. }