package alstatus import ( "fmt" "net" msgdata "pbx-api-gin/internal/app/stc/data" "pbx-api-gin/pkg/lfshook" "pbx-api-gin/pkg/utils" ) func SendToStc(conn net.Conn, data []byte) { _, err := conn.Write(data) if err != nil { fmt.Println("send msg err:", err) } lfshook.NewLogger().Logger.Infof("=data:==%x", data) } // report alarm status to STC func AlarmStatus(exten string, status string, conn net.Conn) { //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 case "queue": //PAD alarm protocol.Data[2] = 0x03 case "connect": //connect protocol.Data[2] = 0x04 } encoded, errEn := protocol.Encode() if errEn != nil { fmt.Println("Encode error:", errEn) return } lfshook.NewLogger().Logger.Infof("===AlarmStatus=ext:%s===carr:%x==========pos:%x=========status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2]) SendToStc(conn, encoded) } // report broadcast status to STC func PaStatus(src string, patype string, operation string, conn net.Conn) { protocol := msgdata.NewProtocol() protocol.MessageID = 0x22 protocol.DataLength = 0x04 //广播发起方 switch src { case "2311": //offline protocol.Data[0] = 0x01 case "2381": //idle protocol.Data[0] = 0x08 case "": //idle protocol.Data[0] = 0x00 } //广播类型 switch patype { case "C2C": //司机对讲 protocol.Data[1] = 0x01 case "C2P": //人工广播 protocol.Data[1] = 0x02 case "DOR": //开关门提示音 protocol.Data[1] = 0x03 case "EMG": //紧急广播 protocol.Data[1] = 0x04 case "AlARM": //报警 protocol.Data[1] = 0x05 case "CPA": //地面广播 protocol.Data[1] = 0x06 case "SPE": //特殊 protocol.Data[1] = 0x07 case "STN": //报站 protocol.Data[1] = 0x08 case "CH": //自检 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 } SendToStc(conn, encoded) }