| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | 
							- package alstatus
 
- import (
 
- 	"fmt"
 
- 	"net"
 
- 	"pbx-api-gin/internal/app/stc/active"
 
- 	msgdata "pbx-api-gin/internal/app/stc/data"
 
- 	"pbx-api-gin/internal/app/stc/socket"
 
- 	"pbx-api-gin/pkg/lfshook"
 
- 	"pbx-api-gin/pkg/utils"
 
- )
 
- var AlarmHandling = 0
 
- func SendToStc(conn net.Conn, data []byte) {
 
- 	_, err := conn.Write(data)
 
- 	if err != nil {
 
- 		fmt.Println("send msg err:", err)
 
- 		conn.Close()
 
- 	}
 
- 	lfshook.NewLogger().Logger.Infof("====data:==%x", data)
 
- }
 
- // report alarm status to STC
 
- func AlarmStatus(exten string, status string) {
 
- 	//check exten if it is a alarm exten
 
- 	if !utils.IsPAIU(exten) { // if not alarm device , return
 
- 		return
 
- 	}
 
- 	protocol := msgdata.NewProtocol()
 
- 	protocol.MessageID = 0x26
 
- 	protocol.DataLength = 0x04
 
- 	protocol.Data = make([]byte, 4)
 
- 	protocol.Data[0] = exten[2] - '0' //车厢号
 
- 	protocol.Data[1] = exten[3] - '0' //位置号
 
- 	//报警器工作状态
 
- 	switch status {
 
- 	case "unavailable", "Unavailable": //offline
 
- 		protocol.Data[2] = 0x00
 
- 	case "idle", "Idle": //idle
 
- 		protocol.Data[2] = 0x01
 
- 	case "dial": //dial
 
- 		protocol.Data[2] = 0x02
 
- 		return
 
- 	case "queue": //PAD alarm
 
- 		protocol.Data[2] = 0x03
 
- 	case "connect": //connect
 
- 		protocol.Data[2] = 0x04
 
- 	case "allreset": //allreset
 
- 		protocol.MessageID = 0x29
 
- 		protocol.Data[0] = 0x02 //all reset
 
- 		protocol.Data[1] = 0
 
- 		protocol.Data[2] = 0
 
- 	case "allhold": //allhold
 
- 		protocol.MessageID = 0x29
 
- 		protocol.Data[0] = 0x01 //all hold
 
- 		protocol.Data[1] = 0
 
- 		protocol.Data[2] = 0
 
- 	}
 
- 	encoded, errEn := protocol.Encode()
 
- 	if errEn != nil {
 
- 		fmt.Println("Encode error:", errEn)
 
- 		return
 
- 	}
 
- 	//check if actived
 
- 	lfshook.NewLogger().Logger.Infof("===AlarmStatus=ext:%s===carr:%x==========pos:%x=========status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
 
- 	if active.Actived {
 
- 		SendToStc(socket.Conn, encoded)
 
- 		SendToStc(socket.Conn8, encoded)
 
- 	}
 
- }
 
- // report broadcast status to STC
 
- func PaStatus(src string, patype string, operation string) {
 
- 	protocol := msgdata.NewProtocol()
 
- 	protocol.MessageID = 0x22
 
- 	protocol.DataLength = 0x04
 
- 	protocol.Data = make([]byte, 4)
 
- 	//广播发起方
 
- 	switch src {
 
- 	case "2311": //mc1
 
- 		protocol.Data[0] = 0x01
 
- 	case "2381": //mc8
 
- 		protocol.Data[0] = 0x08
 
- 	case "": //
 
- 		protocol.Data[0] = 0x00
 
- 	}
 
- 	//广播类型
 
- 	switch patype {
 
- 	case "C2C": //司机对讲---ami
 
- 		protocol.Data[1] = 0x01
 
- 	case "PA": //人工广播---ami
 
- 		protocol.Data[1] = 0x02
 
- 	case "DCS": //开关门提示音
 
- 		protocol.Data[1] = 0x03
 
- 	case "EMG": //紧急广播
 
- 		protocol.Data[1] = 0x04
 
- 	case "PAD": //报警
 
- 		protocol.Data[1] = 0x05
 
- 	case "CPA": //地面广播---ami
 
- 		protocol.Data[1] = 0x06
 
- 	case "SPC": //特殊
 
- 		protocol.Data[1] = 0x07
 
- 	case "STN": //报站
 
- 		protocol.Data[1] = 0x08
 
- 	case "CHK": //自检
 
- 		protocol.Data[1] = 0x09
 
- 	}
 
- 	//操作类型
 
- 	switch operation {
 
- 	case "start": //
 
- 		protocol.Data[2] = 0x01
 
- 	case "end": //
 
- 		protocol.Data[2] = 0x02
 
- 	case "refuse": //
 
- 		protocol.Data[2] = 0x03
 
- 	case "fail": //
 
- 		protocol.Data[2] = 0x04
 
- 	case "continue": //
 
- 		protocol.Data[2] = 0x05
 
- 	}
 
- 	encoded, errEn := protocol.Encode()
 
- 	if errEn != nil {
 
- 		fmt.Println("Encode error:", errEn)
 
- 		return
 
- 	}
 
- 	if active.Actived {
 
- 		SendToStc(socket.Conn, encoded)
 
- 		SendToStc(socket.Conn8, encoded)
 
- 	}
 
- }
 
 
  |