status.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package alstatus
  2. import (
  3. "fmt"
  4. "net"
  5. "pbx-api-gin/internal/app/stc/active"
  6. msgdata "pbx-api-gin/internal/app/stc/data"
  7. "pbx-api-gin/pkg/lfshook"
  8. "pbx-api-gin/pkg/utils"
  9. )
  10. var AlarmHandling = 0
  11. func SendToStc(conn net.Conn, data []byte) {
  12. _, err := conn.Write(data)
  13. if err != nil {
  14. fmt.Println("send msg err:", err)
  15. conn.Close()
  16. }
  17. lfshook.NewLogger().Logger.Infof("====data:==%x", data)
  18. }
  19. // report alarm status to STC
  20. func AlarmStatus(exten string, status string, conn net.Conn) {
  21. //check exten if it is a alarm exten
  22. if !utils.IsPAIU(exten) { // if not alarm device , return
  23. return
  24. }
  25. protocol := msgdata.NewProtocol()
  26. protocol.MessageID = 0x26
  27. protocol.DataLength = 0x04
  28. protocol.Data = make([]byte, 4)
  29. protocol.Data[0] = exten[2] - '0' //车厢号
  30. protocol.Data[1] = exten[3] - '0' //位置号
  31. //报警器工作状态
  32. switch status {
  33. case "unavailable", "Unavailable": //offline
  34. protocol.Data[2] = 0x00
  35. case "idle", "Idle": //idle
  36. protocol.Data[2] = 0x01
  37. case "dial": //dial
  38. protocol.Data[2] = 0x02
  39. return
  40. case "queue": //PAD alarm
  41. protocol.Data[2] = 0x03
  42. case "connect": //connect
  43. protocol.Data[2] = 0x04
  44. }
  45. encoded, errEn := protocol.Encode()
  46. if errEn != nil {
  47. fmt.Println("Encode error:", errEn)
  48. return
  49. }
  50. //check if actived
  51. if active.Actived {
  52. lfshook.NewLogger().Logger.Infof("===AlarmStatus=ext:%s===carr:%x==========pos:%x=========status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
  53. SendToStc(conn, encoded)
  54. }
  55. }
  56. // report broadcast status to STC
  57. func PaStatus(src string, patype string, operation string, conn net.Conn) {
  58. protocol := msgdata.NewProtocol()
  59. protocol.MessageID = 0x22
  60. protocol.DataLength = 0x04
  61. //广播发起方
  62. switch src {
  63. case "2311": //offline
  64. protocol.Data[0] = 0x01
  65. case "2381": //idle
  66. protocol.Data[0] = 0x08
  67. case "": //idle
  68. protocol.Data[0] = 0x00
  69. }
  70. //广播类型
  71. switch patype {
  72. case "C2C": //司机对讲
  73. protocol.Data[1] = 0x01
  74. case "C2P": //人工广播
  75. protocol.Data[1] = 0x02
  76. case "DOR": //开关门提示音
  77. protocol.Data[1] = 0x03
  78. case "EMG": //紧急广播
  79. protocol.Data[1] = 0x04
  80. case "AlARM": //报警
  81. protocol.Data[1] = 0x05
  82. case "CPA": //地面广播
  83. protocol.Data[1] = 0x06
  84. case "SPE": //特殊
  85. protocol.Data[1] = 0x07
  86. case "STN": //报站
  87. protocol.Data[1] = 0x08
  88. case "CH": //自检
  89. protocol.Data[1] = 0x09
  90. }
  91. //操作类型
  92. switch operation {
  93. case "start": //
  94. protocol.Data[2] = 0x01
  95. case "end": //
  96. protocol.Data[2] = 0x02
  97. case "refuse": //
  98. protocol.Data[2] = 0x03
  99. case "fail": //
  100. protocol.Data[2] = 0x04
  101. case "continue": //
  102. protocol.Data[2] = 0x05
  103. }
  104. encoded, errEn := protocol.Encode()
  105. if errEn != nil {
  106. fmt.Println("Encode error:", errEn)
  107. return
  108. }
  109. SendToStc(conn, encoded)
  110. }