You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
415 lines
14 KiB
415 lines
14 KiB
1 year ago
|
using EC.Util.CameraSDK;
|
||
|
|
||
|
namespace JiLinApp.Docking.Ptz;
|
||
|
|
||
|
public class PtzCmd
|
||
|
{
|
||
|
public static PtzControlType GetControlType(string ctrlType)
|
||
|
{
|
||
|
return ctrlType switch
|
||
|
{
|
||
|
"PelcoD" => PtzControlType.PelcoD,
|
||
|
"PelcoP" => PtzControlType.PelcoP,
|
||
|
"DCamera" => PtzControlType.DCamera,
|
||
|
"CameraSdk" => PtzControlType.CameraSdk,
|
||
|
_ => PtzControlType.None
|
||
|
};
|
||
|
}
|
||
|
|
||
|
public static PtzCmdType GetCmdType(string cmdStr)
|
||
|
{
|
||
|
return cmdStr switch
|
||
|
{
|
||
|
"Left" => PtzCmdType.Left,
|
||
|
"Right" => PtzCmdType.Right,
|
||
|
"Top" => PtzCmdType.Top,
|
||
|
"Down" => PtzCmdType.Down,
|
||
|
"LeftTop" => PtzCmdType.LeftTop,
|
||
|
"LeftDown" => PtzCmdType.LeftDown,
|
||
|
"RightTop" => PtzCmdType.RightTop,
|
||
|
"RightDown" => PtzCmdType.RightDown,
|
||
|
"Stop" => PtzCmdType.Stop,
|
||
|
"AutoMove" => PtzCmdType.AutoMove,
|
||
|
"ZoomIn" => PtzCmdType.ZoomIn,
|
||
|
"ZoomOut" => PtzCmdType.ZoomOut,
|
||
|
"FocusNear" => PtzCmdType.FocusNear,
|
||
|
"FocusFar" => PtzCmdType.FocusFar,
|
||
|
"IrisOpen" => PtzCmdType.IrisOpen,
|
||
|
"IrisClose" => PtzCmdType.IrisClose,
|
||
|
"PresetSet" => PtzCmdType.PresetSet,
|
||
|
"PresetClear" => PtzCmdType.PresetClear,
|
||
|
"PresetGoto" => PtzCmdType.PresetGoto,
|
||
|
_ => PtzCmdType.None
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class PtzComCmd
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// GetPelcoDCmd
|
||
|
/// GetPelcoPCmd
|
||
|
/// DCamearCmd
|
||
|
/// </summary>
|
||
|
/// <param name="ctrlType"></param>
|
||
|
/// <param name="cmdType"></param>
|
||
|
/// <param name="args"></param>
|
||
|
/// <returns></returns>
|
||
|
public static byte[] GetCmd(PtzControlType ctrlType, PtzCmdType cmdType, object[] args = null)
|
||
|
{
|
||
|
byte[] cmd = ctrlType switch
|
||
|
{
|
||
|
PtzControlType.PelcoD => GetPelcoDCmd(cmdType, args),
|
||
|
PtzControlType.PelcoP => GetPelcoPCmd(cmdType, args),
|
||
|
PtzControlType.DCamera => GetDCameraCmd(cmdType, args),
|
||
|
_ => Array.Empty<byte>(),
|
||
|
};
|
||
|
return cmd;
|
||
|
}
|
||
|
|
||
|
public static byte[] GetPelcoDCmd(PtzCmdType cmdType, object[] args)
|
||
|
{
|
||
|
uint addr = (byte)args[0];
|
||
|
uint panSpeed = 0x2f;
|
||
|
uint tiltSpeed = (uint)(PelcoD.TiltSpeedMax + PelcoD.TiltSpeedMin) / 2;
|
||
|
byte[] cmd = cmdType switch
|
||
|
{
|
||
|
PtzCmdType.Left => PelcoD.CameraPan(addr, PelcoD.Pan.Left, panSpeed),
|
||
|
PtzCmdType.Right => PelcoD.CameraPan(addr, PelcoD.Pan.Right, panSpeed),
|
||
|
PtzCmdType.Top => PelcoD.CameraTilt(addr, PelcoD.Tilt.Up, tiltSpeed),
|
||
|
PtzCmdType.Down => PelcoD.CameraTilt(addr, PelcoD.Tilt.Down, tiltSpeed),
|
||
|
PtzCmdType.LeftTop => PelcoD.CameraPan(addr, PelcoD.Pan.LeftUp, panSpeed),
|
||
|
PtzCmdType.LeftDown => PelcoD.CameraPan(addr, PelcoD.Pan.LeftDown, panSpeed),
|
||
|
PtzCmdType.RightTop => PelcoD.CameraPan(addr, PelcoD.Pan.RightUp, panSpeed),
|
||
|
PtzCmdType.RightDown => PelcoD.CameraPan(addr, PelcoD.Pan.RightDown, panSpeed),
|
||
|
PtzCmdType.Stop => PelcoD.CameraStop(addr),
|
||
|
PtzCmdType.AutoMove => PelcoD.CameraScan(addr, PelcoD.Scan.Auto),
|
||
|
//PtzCmdType.AutoStop => PelcoD.CameraScan(addr, PelcoD.Scan.Manual),
|
||
|
PtzCmdType.PresetGoto => PelcoD.Preset(addr, PelcoD.PresetAction.Goto, (byte)args[1]),
|
||
|
_ => Array.Empty<byte>(),
|
||
|
};
|
||
|
return cmd;
|
||
|
}
|
||
|
|
||
|
public static byte[] GetPelcoPCmd(PtzCmdType cmdType, object[] args)
|
||
|
{
|
||
|
uint addr = (byte)args[0];
|
||
|
uint panSpeed = (uint)(PelcoP.PanSpeedMax + PelcoP.PanSpeedMin) / 2;
|
||
|
uint tiltSpeed = (uint)(PelcoP.TiltSpeedMax + PelcoP.TiltSpeedMin) / 2;
|
||
|
byte[] cmd = cmdType switch
|
||
|
{
|
||
|
PtzCmdType.Left => PelcoP.CameraPan(addr, PelcoP.Pan.Left, panSpeed),
|
||
|
PtzCmdType.Right => PelcoP.CameraPan(addr, PelcoP.Pan.Right, panSpeed),
|
||
|
PtzCmdType.Top => PelcoP.CameraTilt(addr, PelcoP.Tilt.Up, tiltSpeed),
|
||
|
PtzCmdType.Down => PelcoP.CameraTilt(addr, PelcoP.Tilt.Down, tiltSpeed),
|
||
|
PtzCmdType.LeftTop => PelcoP.CameraPanTilt(addr, PelcoP.Pan.Left, panSpeed, PelcoP.Tilt.Up, tiltSpeed),
|
||
|
PtzCmdType.LeftDown => PelcoP.CameraPanTilt(addr, PelcoP.Pan.Left, panSpeed, PelcoP.Tilt.Down, tiltSpeed),
|
||
|
PtzCmdType.RightTop => PelcoP.CameraPanTilt(addr, PelcoP.Pan.Right, panSpeed, PelcoP.Tilt.Up, tiltSpeed),
|
||
|
PtzCmdType.RightDown => PelcoP.CameraPanTilt(addr, PelcoP.Pan.Right, panSpeed, PelcoP.Tilt.Down, tiltSpeed),
|
||
|
PtzCmdType.Stop => PelcoP.CameraStop(addr),
|
||
|
PtzCmdType.AutoMove => PelcoP.AutoScan(addr, PelcoP.Action.Start),
|
||
|
//PtzCmdType.AutoStop => PelcoP.AutoScan(addr, PelcoP.Action.Stop),
|
||
|
PtzCmdType.PresetGoto => PelcoP.Preset(addr, PelcoP.PresetAction.Goto, (byte)args[1]),
|
||
|
_ => Array.Empty<byte>(),
|
||
|
};
|
||
|
return cmd;
|
||
|
}
|
||
|
|
||
|
public static byte[] GetDCameraCmd(PtzCmdType cmdType, object[] args)
|
||
|
{
|
||
|
double speed = (DCamera.SpeedMax + DCamera.SpeedMin) / 2;
|
||
|
byte[] cmd = cmdType switch
|
||
|
{
|
||
|
PtzCmdType.Left => DCamera.Left(speed),
|
||
|
PtzCmdType.Right => DCamera.Right(speed),
|
||
|
PtzCmdType.Top => DCamera.Up(speed),
|
||
|
PtzCmdType.Down => DCamera.Down(speed),
|
||
|
PtzCmdType.LeftTop => DCamera.LeftUp(speed, speed),
|
||
|
PtzCmdType.LeftDown => DCamera.LeftDown(speed, speed),
|
||
|
PtzCmdType.RightTop => DCamera.RightUp(speed, speed),
|
||
|
PtzCmdType.RightDown => DCamera.RightDown(speed, speed),
|
||
|
PtzCmdType.Stop => DCamera.Stop(),
|
||
|
_ => Array.Empty<byte>(),
|
||
|
};
|
||
|
return cmd;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class PtzCameraCmd
|
||
|
{
|
||
|
public static void PtzMove(ICameraSdk sdk, PtzCmdType cmdType, int[] args)
|
||
|
{
|
||
|
if (sdk == null || !sdk.ConnectSuccess() || args == null) return;
|
||
|
switch (sdk.CameraInfo.Manufactor)
|
||
|
{
|
||
|
case CameraManufactor.HiK:
|
||
|
HikPtzMove(sdk, cmdType, args);
|
||
|
break;
|
||
|
|
||
|
case CameraManufactor.DaHua:
|
||
|
DaHuaPtzMove(sdk, cmdType, args);
|
||
|
break;
|
||
|
|
||
|
case CameraManufactor.YuShi:
|
||
|
YuShiPtzMove(sdk, cmdType, args);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void HikPtzMove(ICameraSdk sdk, PtzCmdType cmdType, int[] args)
|
||
|
{
|
||
|
int stop = args[0], presetId = args[0];
|
||
|
int speed = (HiKOriSdk.PtzSpeedMin + HiKOriSdk.PtzSpeedMax) / 2;
|
||
|
switch (cmdType)
|
||
|
{
|
||
|
case PtzCmdType.Left:
|
||
|
sdk.PtzMove(HiKOriSdk.PAN_LEFT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Right:
|
||
|
sdk.PtzMove(HiKOriSdk.PAN_RIGHT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Top:
|
||
|
sdk.PtzMove(HiKOriSdk.TILT_UP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Down:
|
||
|
sdk.PtzMove(HiKOriSdk.TILT_DOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftTop:
|
||
|
sdk.PtzMove(HiKOriSdk.UP_LEFT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftDown:
|
||
|
sdk.PtzMove(HiKOriSdk.DOWN_LEFT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightTop:
|
||
|
sdk.PtzMove(HiKOriSdk.UP_RIGHT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightDown:
|
||
|
sdk.PtzMove(HiKOriSdk.DOWN_RIGHT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.AutoMove:
|
||
|
sdk.PtzMove(HiKOriSdk.PAN_AUTO, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomIn:
|
||
|
sdk.PtzMove(HiKOriSdk.ZOOM_IN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomOut:
|
||
|
sdk.PtzMove(HiKOriSdk.ZOOM_OUT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusNear:
|
||
|
sdk.PtzMove(HiKOriSdk.FOCUS_NEAR, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusFar:
|
||
|
sdk.PtzMove(HiKOriSdk.FOCUS_FAR, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisOpen:
|
||
|
sdk.PtzMove(HiKOriSdk.IRIS_OPEN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisClose:
|
||
|
sdk.PtzMove(HiKOriSdk.IRIS_CLOSE, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.PresetGoto:
|
||
|
sdk.PtzPreset(HiKOriSdk.GOTO_PRESET, presetId);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void DaHuaPtzMove(ICameraSdk sdk, PtzCmdType cmdType, int[] args)
|
||
|
{
|
||
|
int stop = args[0], presetId = args[0];
|
||
|
int speed = (DaHuaOriSdk.PtzSpeedMin + DaHuaOriSdk.PtzSpeedMax) / 2;
|
||
|
switch (cmdType)
|
||
|
{
|
||
|
case PtzCmdType.Left:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.LEFT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Right:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.RIGHT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Top:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.UP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Down:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.DOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftTop:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.LEFTTOP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftDown:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.LEFTDOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightTop:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.RIGHTTOP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightDown:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.RIGHTDOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.AutoMove:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.STARTPANCRUISE, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomIn:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.ZOOM_ADD, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomOut:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.ZOOM_DEC, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusNear:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.FOCUS_ADD, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusFar:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.FOCUS_DEC, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisOpen:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.APERTURE_ADD, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisClose:
|
||
|
sdk.PtzMove((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.APERTURE_DEC, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.PresetGoto:
|
||
|
sdk.PtzPreset((int)DaHuaOriSdk.EM_EXTPTZ_ControlType.GOTOPRESET, presetId);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void YuShiPtzMove(ICameraSdk sdk, PtzCmdType cmdType, int[] args)
|
||
|
{
|
||
|
int stop = args[0], presetId = args[0];
|
||
|
int speed = (YuShiOriSdk.PtzSpeedMax + YuShiOriSdk.PtzSpeedMin) / 2;
|
||
|
switch (cmdType)
|
||
|
{
|
||
|
case PtzCmdType.Left:
|
||
|
sdk.PtzMove(YuShiOriSdk.PANLEFT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Right:
|
||
|
sdk.PtzMove(YuShiOriSdk.PANRIGHT, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Top:
|
||
|
sdk.PtzMove(YuShiOriSdk.TILTUP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.Down:
|
||
|
sdk.PtzMove(YuShiOriSdk.TILTDOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftTop:
|
||
|
sdk.PtzMove(YuShiOriSdk.LEFTUP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.LeftDown:
|
||
|
sdk.PtzMove(YuShiOriSdk.LEFTDOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightTop:
|
||
|
sdk.PtzMove(YuShiOriSdk.RIGHTUP, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.RightDown:
|
||
|
sdk.PtzMove(YuShiOriSdk.RIGHTDOWN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomIn:
|
||
|
sdk.PtzMove(YuShiOriSdk.ZOOMTELE, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.ZoomOut:
|
||
|
sdk.PtzMove(YuShiOriSdk.ZOOMWIDE, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusNear:
|
||
|
sdk.PtzMove(YuShiOriSdk.FOCUSNEAR, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.FocusFar:
|
||
|
sdk.PtzMove(YuShiOriSdk.FOCUSFAR, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisOpen:
|
||
|
sdk.PtzMove(YuShiOriSdk.IRISOPEN, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.IrisClose:
|
||
|
sdk.PtzMove(YuShiOriSdk.IRISCLOSE, stop, speed);
|
||
|
break;
|
||
|
|
||
|
case PtzCmdType.PresetGoto:
|
||
|
sdk.PtzPreset(YuShiOriSdk.PRESET_GOTO, presetId);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public enum PtzControlType
|
||
|
{
|
||
|
PelcoD,
|
||
|
PelcoP,
|
||
|
DCamera,
|
||
|
CameraSdk,
|
||
|
None,
|
||
|
}
|
||
|
|
||
|
public enum PtzCmdType
|
||
|
{
|
||
|
Left,
|
||
|
Right,
|
||
|
Top,
|
||
|
Down,
|
||
|
LeftTop,
|
||
|
LeftDown,
|
||
|
RightTop,
|
||
|
RightDown,
|
||
|
Stop,
|
||
|
AutoMove,
|
||
|
ZoomIn,
|
||
|
ZoomOut,
|
||
|
FocusNear,
|
||
|
FocusFar,
|
||
|
IrisOpen,
|
||
|
IrisClose,
|
||
|
PresetSet,
|
||
|
PresetClear,
|
||
|
PresetGoto,
|
||
|
None
|
||
|
}
|