| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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)
- }
|