rpc_handler.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "strconv"
  6. "strings"
  7. "hnyfkj.com.cn/rtu/linux/camera"
  8. "hnyfkj.com.cn/rtu/linux/dh_takephoto"
  9. "hnyfkj.com.cn/rtu/linux/hk_takephoto"
  10. "hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
  11. )
  12. func setGigeCameraPower(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
  13. var params map[string]string
  14. if err := json.Unmarshal(req.Params, &params); err != nil {
  15. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  16. }
  17. enable, ok := params["enable"]
  18. if !ok || enable == "" {
  19. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'enable' parameter")
  20. }
  21. var on bool
  22. switch {
  23. case strings.EqualFold(enable, "true"), enable == "1":
  24. on = true
  25. case strings.EqualFold(enable, "false"), enable == "0":
  26. on = false
  27. default:
  28. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "invalid 'enable' value")
  29. }
  30. if err := camera.PowerOnGigeCamera(on); err != nil {
  31. return jsonrpc2.BuildError(req, jsonrpc2.ErrInternal, err.Error())
  32. }
  33. return jsonrpc2.BuildResponse(req, "success", nil)
  34. }
  35. func checkGigeCamera(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
  36. var params map[string]string
  37. if err := json.Unmarshal(req.Params, &params); err != nil {
  38. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  39. }
  40. ip, ok := params["ip"]
  41. if !ok || ip == "" {
  42. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'ip' parameter")
  43. }
  44. prefix, ok := params["prefix"]
  45. if !ok || prefix == "" {
  46. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'prefix' parameter")
  47. }
  48. gigeAddrCIDR := ip + "/" + prefix
  49. equal, err := camera.CidrEqualSemantic(eth1AddrCIDR, gigeAddrCIDR)
  50. if err != nil {
  51. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  52. }
  53. if !equal {
  54. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "gige camera ip not in network")
  55. }
  56. if err := camera.PingOnce(ip, 1); err != nil {
  57. return jsonrpc2.BuildError(req, -32001, err.Error())
  58. }
  59. return jsonrpc2.BuildResponse(req, "success", nil)
  60. }
  61. func getSupportedCameraCount(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
  62. var params map[string]string
  63. if err := json.Unmarshal(req.Params, &params); err != nil {
  64. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  65. }
  66. cameraType, ok := params["type"]
  67. if !ok || cameraType == "" {
  68. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'type' parameter")
  69. }
  70. var count int
  71. switch strings.ToLower(cameraType) {
  72. case "all":
  73. count = camera.GetSupportedCameraCount()
  74. case "hk":
  75. count = hk_takephoto.GetHKCameraCount()
  76. case "dh":
  77. count = dh_takephoto.GetDHCameraCount()
  78. default:
  79. return jsonrpc2.BuildError(req, -32001, "unsupported camera type")
  80. }
  81. return jsonrpc2.BuildResponse(req, strconv.Itoa(count), nil)
  82. }
  83. func setWaitAEDoneForTakePhoto(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
  84. var params map[string]string
  85. if err := json.Unmarshal(req.Params, &params); err != nil {
  86. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  87. }
  88. waitAE, ok := params["waitAE"]
  89. if !ok || waitAE == "" {
  90. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'waitAE' parameter")
  91. }
  92. switch waitAE {
  93. case "0":
  94. camera.SetWaitAEDoneForTakePhoto(0)
  95. case "1":
  96. camera.SetWaitAEDoneForTakePhoto(1)
  97. default:
  98. return jsonrpc2.BuildError(req, -32001, "invalid 'waitAE' value")
  99. }
  100. return jsonrpc2.BuildResponse(req, "success", nil)
  101. }
  102. func takePhoto(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
  103. var params map[string]string
  104. if err := json.Unmarshal(req.Params, &params); err != nil {
  105. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
  106. }
  107. format, ok := params["format"]
  108. if !ok || format == "" {
  109. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'format' parameter")
  110. }
  111. outFilename, ok := params["outFilename"]
  112. if !ok || outFilename == "" {
  113. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'outFilename' parameter")
  114. }
  115. timeoutMs, ok := params["timeoutMs"]
  116. if !ok || timeoutMs == "" {
  117. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'timeoutMs' parameter")
  118. }
  119. if !strings.EqualFold(format, "jpg") {
  120. return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "unsupported format")
  121. }
  122. timeout, err := strconv.Atoi(timeoutMs)
  123. if err != nil || timeout <= 0 {
  124. timeout = 300
  125. }
  126. imgMark, err := camera.TakePhoto(
  127. camera.IMG_TYPE_JPG,
  128. outFilename,
  129. timeout,
  130. )
  131. if err != nil {
  132. return jsonrpc2.BuildError(req, -32001, err.Error())
  133. }
  134. return jsonrpc2.BuildResponse(req, map[string]interface{}{
  135. "status": "success",
  136. "mark": imgMark,
  137. }, nil)
  138. }