main.go 1.9 KB

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