IDevice.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package lc
  2. import "github.com/sirupsen/logrus"
  3. // 设备参数
  4. var DeviceInitData DeviceData
  5. type DeviceData struct {
  6. //雷达
  7. LowSpeed int //低速
  8. OverSpeed int //超速
  9. // 屏幕
  10. Brightness int // 亮度
  11. //语音
  12. Volume int // 声音大小
  13. NormalVoice string // 正常语音
  14. OverSpeedVoice string // 超速语音
  15. }
  16. // 通知接口
  17. type Notifier interface {
  18. Notify(text string, isProgram, speed int)
  19. }
  20. // 校时接口
  21. type CorrectTimer interface {
  22. Correct()
  23. }
  24. func DoCorrectTime(a any) {
  25. if c, ok := a.(CorrectTimer); ok {
  26. c.Correct()
  27. }
  28. }
  29. // 重连接口
  30. type ReConnector interface {
  31. Reconnect()
  32. }
  33. func DoReconnect(a any) {
  34. if c, ok := a.(ReConnector); ok {
  35. c.Reconnect()
  36. }
  37. }
  38. // 单个设备接口
  39. type IDevice interface {
  40. Call(text string, isProgram, speed int) // 触发警告
  41. Rollback() // 恢复初始状态
  42. ReConnector // 重连
  43. CorrectTimer // 校时
  44. }
  45. // 设备信息
  46. type DeviceInfo struct {
  47. Name string
  48. Ip string
  49. Port string
  50. Audio string // 扬声器音频
  51. }
  52. // 单个哨兵设备组合(屏幕+喇叭)
  53. type SentinelDevice struct {
  54. Info DeviceInfo
  55. Screen Screener
  56. Speaker Loudspeaker
  57. }
  58. // 触发警告(屏幕显示+喇叭发声)
  59. func (s *SentinelDevice) Call(text string, isProgram, speed int) {
  60. if s.Screen != nil {
  61. if isProgram == 1 || isProgram == 0 {
  62. if speed <= DeviceInitData.OverSpeed { //小于等于超速显示绿色
  63. s.Screen.Display(Green, DefaultRunMode, DefaultDisplayMode, isProgram, speed, text) // 显示警告
  64. } else {
  65. s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, isProgram, speed, text) // 显示警告
  66. }
  67. } else if isProgram == 2 {
  68. s.Screen.Display(Red, LoopAndOff, MoveLeft, isProgram, speed, text) // 显示警告
  69. }
  70. }
  71. if s.Speaker != nil {
  72. if speed > DeviceInitData.OverSpeed {
  73. logrus.Info("触发语音----------------------------------")
  74. s.Speaker.Speak(DeviceInitData.OverSpeedVoice) // 语音提示
  75. } else if speed > DeviceInitData.LowSpeed {
  76. s.Speaker.Speak(DeviceInitData.NormalVoice) // 语音提示
  77. }
  78. }
  79. }
  80. // 恢复初始状态
  81. func (s *SentinelDevice) Rollback() {
  82. if s.Screen != nil {
  83. s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, 0, 0, "") //恢复默认
  84. //s.Screen.Display(Yellow, DefaultRunMode, DefaultDisplayMode, 1, 0, "减速慢行") // 恢复默认显示
  85. }
  86. }
  87. // 重连设备
  88. func (s *SentinelDevice) Reconnect() {
  89. DoReconnect(s.Screen)
  90. //DoReconnect(s.Speaker)
  91. }
  92. // 校时
  93. func (s *SentinelDevice) Correct() {
  94. DoCorrectTime(s.Screen)
  95. }