| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package lc
- import "github.com/sirupsen/logrus"
- // 设备参数
- var DeviceInitData DeviceData
- type DeviceData struct {
- //雷达
- LowSpeed int //低速
- OverSpeed int //超速
- // 屏幕
- Brightness int // 亮度
- //语音
- Volume int // 声音大小
- NormalVoice string // 正常语音
- OverSpeedVoice string // 超速语音
- }
- // 通知接口
- type Notifier interface {
- Notify(text string, isProgram, speed int)
- }
- // 校时接口
- type CorrectTimer interface {
- Correct()
- }
- func DoCorrectTime(a any) {
- if c, ok := a.(CorrectTimer); ok {
- c.Correct()
- }
- }
- // 重连接口
- type ReConnector interface {
- Reconnect()
- }
- func DoReconnect(a any) {
- if c, ok := a.(ReConnector); ok {
- c.Reconnect()
- }
- }
- // 单个设备接口
- type IDevice interface {
- Call(text string, isProgram, speed int) // 触发警告
- Rollback() // 恢复初始状态
- ReConnector // 重连
- CorrectTimer // 校时
- }
- // 设备信息
- type DeviceInfo struct {
- Name string
- Ip string
- Port string
- Audio string // 扬声器音频
- }
- // 单个哨兵设备组合(屏幕+喇叭)
- type SentinelDevice struct {
- Info DeviceInfo
- Screen Screener
- Speaker Loudspeaker
- }
- // 触发警告(屏幕显示+喇叭发声)
- func (s *SentinelDevice) Call(text string, isProgram, speed int) {
- if s.Screen != nil {
- if isProgram == 1 || isProgram == 0 {
- if speed <= DeviceInitData.OverSpeed { //小于等于超速显示绿色
- s.Screen.Display(Green, DefaultRunMode, DefaultDisplayMode, isProgram, speed, text) // 显示警告
- } else {
- s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, isProgram, speed, text) // 显示警告
- }
- } else if isProgram == 2 {
- s.Screen.Display(Red, LoopAndOff, MoveLeft, isProgram, speed, text) // 显示警告
- }
- }
- if s.Speaker != nil {
- if speed > DeviceInitData.OverSpeed {
- logrus.Info("触发语音----------------------------------")
- s.Speaker.Speak(DeviceInitData.OverSpeedVoice) // 语音提示
- } else if speed > DeviceInitData.LowSpeed {
- s.Speaker.Speak(DeviceInitData.NormalVoice) // 语音提示
- }
- }
- }
- // 恢复初始状态
- func (s *SentinelDevice) Rollback() {
- if s.Screen != nil {
- s.Screen.Display(Red, DefaultRunMode, DefaultDisplayMode, 0, 0, "") //恢复默认
- //s.Screen.Display(Yellow, DefaultRunMode, DefaultDisplayMode, 1, 0, "减速慢行") // 恢复默认显示
- }
- }
- // 重连设备
- func (s *SentinelDevice) Reconnect() {
- DoReconnect(s.Screen)
- //DoReconnect(s.Speaker)
- }
- // 校时
- func (s *SentinelDevice) Correct() {
- DoCorrectTime(s.Screen)
- }
|