|
|
@@ -1 +1,169 @@
|
|
|
package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "encoding/json"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "hnyfkj.com.cn/rtu/linux/camera"
|
|
|
+ "hnyfkj.com.cn/rtu/linux/dh_takephoto"
|
|
|
+ "hnyfkj.com.cn/rtu/linux/hk_takephoto"
|
|
|
+ "hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
|
|
|
+)
|
|
|
+
|
|
|
+func setGigeCameraPower(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
+ var params map[string]string
|
|
|
+ if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ enable, ok := params["enable"]
|
|
|
+ if !ok || enable == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'enable' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ var on bool
|
|
|
+ switch {
|
|
|
+ case strings.EqualFold(enable, "true"), enable == "1":
|
|
|
+ on = true
|
|
|
+ case strings.EqualFold(enable, "false"), enable == "0":
|
|
|
+ on = false
|
|
|
+ default:
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "invalid 'enable' value")
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := camera.PowerOnGigeCamera(on); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInternal, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonrpc2.BuildResponse(req, "success", nil)
|
|
|
+}
|
|
|
+
|
|
|
+func checkGigeCamera(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
+ var params map[string]string
|
|
|
+ if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ ip, ok := params["ip"]
|
|
|
+ if !ok || ip == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'ip' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ prefix, ok := params["prefix"]
|
|
|
+ if !ok || prefix == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'prefix' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ gigeAddrCIDR := ip + "/" + prefix
|
|
|
+ equal, err := camera.CidrEqualSemantic(eth1AddrCIDR, gigeAddrCIDR)
|
|
|
+ if err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ if !equal {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "gige camera ip not in network")
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := camera.PingOnce(ip, 1); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, -32001, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonrpc2.BuildResponse(req, "success", nil)
|
|
|
+}
|
|
|
+
|
|
|
+func getSupportedCameraCount(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
+ var params map[string]string
|
|
|
+ if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ cameraType, ok := params["type"]
|
|
|
+ if !ok || cameraType == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'type' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ var count int
|
|
|
+
|
|
|
+ switch strings.ToLower(cameraType) {
|
|
|
+ case "all":
|
|
|
+ count = camera.GetSupportedCameraCount()
|
|
|
+ case "hk":
|
|
|
+ count = hk_takephoto.GetHKCameraCount()
|
|
|
+ case "dh":
|
|
|
+ count = dh_takephoto.GetDHCameraCount()
|
|
|
+ default:
|
|
|
+ return jsonrpc2.BuildError(req, -32001, "unsupported camera type")
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonrpc2.BuildResponse(req, strconv.Itoa(count), nil)
|
|
|
+}
|
|
|
+
|
|
|
+func setWaitAEDoneForTakePhoto(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
+ var params map[string]string
|
|
|
+ if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ waitAE, ok := params["waitAE"]
|
|
|
+ if !ok || waitAE == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'waitAE' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ switch waitAE {
|
|
|
+ case "0":
|
|
|
+ camera.SetWaitAEDoneForTakePhoto(0)
|
|
|
+ case "1":
|
|
|
+ camera.SetWaitAEDoneForTakePhoto(1)
|
|
|
+ default:
|
|
|
+ return jsonrpc2.BuildError(req, -32001, "invalid 'waitAE' value")
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonrpc2.BuildResponse(req, "success", nil)
|
|
|
+}
|
|
|
+
|
|
|
+func takePhoto(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
+ var params map[string]string
|
|
|
+ if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ format, ok := params["format"]
|
|
|
+ if !ok || format == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'format' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ outFilename, ok := params["outFilename"]
|
|
|
+ if !ok || outFilename == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'outFilename' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ timeoutMs, ok := params["timeoutMs"]
|
|
|
+ if !ok || timeoutMs == "" {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'timeoutMs' parameter")
|
|
|
+ }
|
|
|
+
|
|
|
+ if !strings.EqualFold(format, "jpg") {
|
|
|
+ return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "unsupported format")
|
|
|
+ }
|
|
|
+
|
|
|
+ timeout, err := strconv.Atoi(timeoutMs)
|
|
|
+ if err != nil || timeout <= 0 {
|
|
|
+ timeout = 300
|
|
|
+ }
|
|
|
+
|
|
|
+ imgMark, err := camera.TakePhoto(
|
|
|
+ camera.IMG_TYPE_JPG,
|
|
|
+ outFilename,
|
|
|
+ timeout,
|
|
|
+ )
|
|
|
+ if err != nil {
|
|
|
+ return jsonrpc2.BuildError(req, -32001, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ return jsonrpc2.BuildResponse(req, map[string]interface{}{
|
|
|
+ "status": "success",
|
|
|
+ "mark": imgMark,
|
|
|
+ }, nil)
|
|
|
+}
|