status.go 2.7 KB

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