status.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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/internal/app/stc/socket"
  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. utils.LoggerDebug.Printf("Send To STC msg err:%+v", err)
  14. conn.Close()
  15. }
  16. //lfshook.NewLogger().Logger.Infof("SendToStc data:%x", data)
  17. }
  18. // report alarm status to STC
  19. func AlarmStatus(exten string, status string) {
  20. //Not Master role , ignore
  21. if !active.Master {
  22. return
  23. }
  24. //check exten if it is a alarm exten
  25. if !utils.IsPAIU(exten) { // if not alarm device , return
  26. return
  27. }
  28. protocol := msgdata.NewProtocol()
  29. protocol.MessageID = 0x26
  30. protocol.DataLength = 0x04
  31. protocol.Data = make([]byte, 4)
  32. protocol.Data[0] = exten[2] - '0' //车厢号
  33. protocol.Data[1] = exten[3] - '0' //位置号
  34. //报警器工作状态
  35. switch status {
  36. case "unavailable", "Unavailable": //offline
  37. protocol.Data[2] = 0x00
  38. case "idle", "Idle": //idle
  39. protocol.Data[2] = 0x01
  40. case "dial": //dial
  41. protocol.Data[2] = 0x02
  42. return
  43. case "queue": //PAD alarm
  44. protocol.Data[2] = 0x03
  45. case "connect": //connect
  46. protocol.Data[2] = 0x04
  47. case "allreset": //allreset
  48. protocol.MessageID = 0x29
  49. protocol.Data[0] = 0x02 //all reset
  50. protocol.Data[1] = 0
  51. protocol.Data[2] = 0
  52. case "allhold": //allhold
  53. protocol.MessageID = 0x29
  54. protocol.Data[0] = 0x01 //all hold
  55. protocol.Data[1] = 0
  56. protocol.Data[2] = 0
  57. }
  58. encoded, errEn := protocol.Encode()
  59. if errEn != nil {
  60. fmt.Println("Encode error:", errEn)
  61. return
  62. }
  63. //check if actived
  64. utils.LoggerDebug.Printf("PAD number:%s CarNum:%x Pos:%x Status:%x", exten, protocol.Data[0], protocol.Data[1], protocol.Data[2])
  65. if socket.Conn != nil {
  66. SendToStc(socket.Conn, encoded)
  67. }
  68. if socket.Conn8 != nil {
  69. SendToStc(socket.Conn8, encoded)
  70. }
  71. }
  72. // report broadcast status to STC
  73. func PaStatus(src string, patype string, operation string) {
  74. //Not Master role , ignore
  75. if !active.Master {
  76. return
  77. }
  78. utils.LoggerDebug.Printf("PA Status Src:%s Type:%s Status:%s", src, patype, operation)
  79. protocol := msgdata.NewProtocol()
  80. protocol.MessageID = 0x22
  81. protocol.DataLength = 0x04
  82. protocol.Data = make([]byte, 4)
  83. //广播发起方
  84. switch src {
  85. case "2311": //mc1
  86. protocol.Data[0] = 0x01
  87. case "2381": //mc8
  88. protocol.Data[0] = 0x08
  89. /*case "1411": //mc8
  90. protocol.Data[0] = 0x08
  91. case "1481": //mc8
  92. protocol.Data[0] = 0x08*/
  93. default: //
  94. protocol.Data[0] = 0x00
  95. }
  96. //广播类型
  97. switch patype {
  98. case "C2C": //司机对讲---ami
  99. protocol.Data[1] = 0x01
  100. case "PA": //人工广播---ami
  101. protocol.Data[1] = 0x02
  102. case "DCS": //开关门提示音
  103. protocol.Data[1] = 0x03
  104. case "EMG": //紧急广播
  105. protocol.Data[1] = 0x04
  106. case "PAD": //报警
  107. protocol.Data[1] = 0x05
  108. case "CPA": //地面广播---ami
  109. protocol.Data[1] = 0x06
  110. case "SPC": //特殊
  111. protocol.Data[1] = 0x07
  112. case "STN": //报站
  113. protocol.Data[1] = 0x08
  114. case "CHK": //自检
  115. protocol.Data[1] = 0x09
  116. case "VOL": //音调条件
  117. protocol.Data[1] = 0x0a
  118. }
  119. //操作类型
  120. switch operation {
  121. case "start": //
  122. protocol.Data[2] = 0x01
  123. case "end": //
  124. protocol.Data[2] = 0x02
  125. case "refuse": //
  126. protocol.Data[2] = 0x03
  127. case "fail": //
  128. protocol.Data[2] = 0x04
  129. case "continue": //
  130. protocol.Data[2] = 0x05
  131. }
  132. encoded, errEn := protocol.Encode()
  133. if errEn != nil {
  134. utils.LoggerDebug.Printf("Encode error:%+v", errEn)
  135. return
  136. }
  137. if socket.Conn != nil {
  138. SendToStc(socket.Conn, encoded)
  139. }
  140. if socket.Conn8 != nil {
  141. SendToStc(socket.Conn8, encoded)
  142. }
  143. }
  144. // report broadcast status to STC
  145. func OccPad(operation string) {
  146. //Not Master role , ignore
  147. if !active.Master {
  148. return
  149. }
  150. utils.LoggerDebug.Printf("OCC-PAD status:%s", operation)
  151. protocol := msgdata.NewProtocol()
  152. protocol.MessageID = 0x2A
  153. protocol.DataLength = 0x04
  154. protocol.Data = make([]byte, 4)
  155. //广播发起方
  156. switch operation {
  157. case "start": //mc1
  158. protocol.Data[0] = 0x01
  159. case "end": //mc8
  160. protocol.Data[0] = 0x02
  161. case "": //
  162. protocol.Data[0] = 0x00
  163. }
  164. encoded, errEn := protocol.Encode()
  165. if errEn != nil {
  166. utils.LoggerDebug.Printf("Encode error:%+v", errEn)
  167. return
  168. }
  169. if socket.Conn != nil {
  170. SendToStc(socket.Conn, encoded)
  171. }
  172. if socket.Conn8 != nil {
  173. SendToStc(socket.Conn8, encoded)
  174. }
  175. }
  176. // report broadcast status to STC
  177. func SendRecordFile(filename, rcdtype string) {
  178. //time.Sleep(5 * time.Second)
  179. /*
  180. if !utils.FileExists(filename) {
  181. lfshook.NewLogger().Logger.Infof("===Recording filename not exist:%+v=", filename)
  182. return
  183. }
  184. */
  185. //Not Master role , ignore
  186. if !active.Master {
  187. return
  188. }
  189. protocol := msgdata.NewProtocol()
  190. protocol.MessageID = 0x31
  191. filenameHex := []byte(filename)
  192. dataLen := len(filenameHex) + 1
  193. protocol.DataLength = uint16(dataLen)
  194. protocol.Data = make([]byte, dataLen)
  195. copy(protocol.Data[1:], filenameHex)
  196. switch rcdtype {
  197. case "C2C": //
  198. protocol.Data[0] = 0x01
  199. case "PA": //
  200. protocol.Data[0] = 0x02
  201. case "PAD": //
  202. protocol.Data[0] = 0x05
  203. case "CPA": //
  204. protocol.Data[0] = 0x06
  205. case "OTR": //
  206. protocol.Data[0] = 0x03
  207. //lfshook.NewLogger().Logger.Infof("===Recording filename:%+v=", protocol.Data)
  208. }
  209. encoded, errEn := protocol.Encode()
  210. if errEn != nil {
  211. utils.LoggerDebug.Printf("Encode error:%+v", errEn)
  212. return
  213. }
  214. if socket.Conn != nil {
  215. SendToStc(socket.Conn, encoded)
  216. }
  217. if socket.Conn8 != nil {
  218. SendToStc(socket.Conn8, encoded)
  219. }
  220. }