From ffbe4ef6de3fab980f6ffdd7b735e3d3926459e8 Mon Sep 17 00:00:00 2001 From: Martin Richter Date: Wed, 16 Feb 2022 15:24:26 +0100 Subject: [PATCH] First commit of the project Just a first try. --- .gitignore | 11 + PTZControl/ExtensionUnit.cpp | 665 ++++++++++++++++++++++++ PTZControl/ExtensionUnit.h | 75 +++ PTZControl/ExtensionUnitDefines.h | 120 +++++ PTZControl/PTZControl.aps | Bin 0 -> 248840 bytes PTZControl/PTZControl.cpp | 169 ++++++ PTZControl/PTZControl.h | 76 +++ PTZControl/PTZControl.rc | Bin 0 -> 24216 bytes PTZControl/PTZControl.sln | 31 ++ PTZControl/PTZControl.vcxproj | 224 ++++++++ PTZControl/PTZControlDlg.cpp | 829 ++++++++++++++++++++++++++++++ PTZControl/PTZControlDlg.h | 151 ++++++ PTZControl/SettingsDlg.cpp | 77 +++ PTZControl/SettingsDlg.h | 34 ++ PTZControl/framework.h | 31 ++ PTZControl/pch.cpp | 5 + PTZControl/pch.h | 13 + PTZControl/res/CameraControl.bmp | Bin 0 -> 20534 bytes PTZControl/res/PTZControl.ico | Bin 0 -> 198784 bytes PTZControl/res/PTZControl.rc2 | Bin 0 -> 804 bytes PTZControl/resource.h | 66 +++ PTZControl/targetver.h | 8 + README.md | 90 +++- 23 files changed, 2674 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 PTZControl/ExtensionUnit.cpp create mode 100644 PTZControl/ExtensionUnit.h create mode 100644 PTZControl/ExtensionUnitDefines.h create mode 100644 PTZControl/PTZControl.aps create mode 100644 PTZControl/PTZControl.cpp create mode 100644 PTZControl/PTZControl.h create mode 100644 PTZControl/PTZControl.rc create mode 100644 PTZControl/PTZControl.sln create mode 100644 PTZControl/PTZControl.vcxproj create mode 100644 PTZControl/PTZControlDlg.cpp create mode 100644 PTZControl/PTZControlDlg.h create mode 100644 PTZControl/SettingsDlg.cpp create mode 100644 PTZControl/SettingsDlg.h create mode 100644 PTZControl/framework.h create mode 100644 PTZControl/pch.cpp create mode 100644 PTZControl/pch.h create mode 100644 PTZControl/res/CameraControl.bmp create mode 100644 PTZControl/res/PTZControl.ico create mode 100644 PTZControl/res/PTZControl.rc2 create mode 100644 PTZControl/resource.h create mode 100644 PTZControl/targetver.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c65bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +PTZControl/.vs +PTZControl/Release/ +PTZControl/Debug/ +PTZControl/Save/ +PTZControl/x64/ +PTZControl/PTZControl.vcxproj.filters +PTZControl/PTZControl.vcxproj.user +PTZControl/PTZControlDEU.docx +PTZControl/PTZControl.exe +*.docx +*.bak diff --git a/PTZControl/ExtensionUnit.cpp b/PTZControl/ExtensionUnit.cpp new file mode 100644 index 0000000..6800473 --- /dev/null +++ b/PTZControl/ExtensionUnit.cpp @@ -0,0 +1,665 @@ +#include "pch.h" +// #include +// #include +// #include // Including this before DShow.h avoids a bunch of C4995 warnings for unsafe +// // string functions if (and only if) strsafe.h is not included above. + +#include +#include +#define NO_DSHOW_STRSAFE // Avoid more C4995 warnings in intrin.h +#include +#include +#include + +#pragma comment(lib, "strmiids.lib") + +#include "ExtensionUnit.h" + +#define NONODE 0xFFFFFFFF + +////////////////////////////////////////////////////////////////////////// + + +void MySleep(int mSec) +{ + // TIcks per second + LARGE_INTEGER li; + QueryPerformanceFrequency(&li); + + LARGE_INTEGER liStart; + QueryPerformanceCounter(&liStart); + + LARGE_INTEGER liEnd; + liEnd.QuadPart = liStart.QuadPart + (li.QuadPart*mSec)/1000; + + LARGE_INTEGER liNow; + do + { + QueryPerformanceCounter(&liNow); + } + while (liNow.QuadPart pSysDevEnum; + HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, __uuidof(ICreateDevEnum), (void **)&pSysDevEnum); + if(FAILED(hr)) + return hr; + + // Obtain a class enumerator for the video input device category + CComPtr pEnumCat; + hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0); + if(hr == S_OK) + { + hr = HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); + + // Enumerate the monikers and check if we can find a matching device + CComPtr pMoniker; + ULONG cFetched; + while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK) + { + if(DeviceMatches(pMoniker, bstrDevicePath, wVID, wPID)) + { + hr = OpenDevice(pMoniker); + break; // We're done searching (even if the OpenDevice() call above failed) + } + pMoniker = nullptr; + } + } + + return hr; +} + +void CWebcamController::CloseDevice() +{ + m_spKsControl = nullptr; + m_spAMCameraControl = nullptr; + m_spsPropertySet = nullptr; + m_spCameraControl = nullptr; + + m_dwXUDeviceInformationNodeId = + m_dwXUVideoPipeControlNodeId = + m_dwXUTestDebugNodeId = + m_dwXUPeripheralControlNodeId = NONODE; + + // Use IAMCameraControl motion control + m_bUseLogitechMotionControl = false; + m_iMotorIntervalTimer = DEFAULT_MOTOR_INTERVAL_TIMER; + + // The PTZ Pro 2 has a mechanical pan tilt + m_bMechanicalPanTilt = false; + m_lDigitalTiltMin = m_lDigitalTiltMax = m_lDigitalPanMin = m_lDigitalPanMax = -1; +} + +HRESULT CWebcamController::IsPeripheralPropertySetSupported() +{ + if (!m_spKsControl) + return -1; + + KSP_NODE extProp{}; + extProp.Property.Set = LOGITECH_XU_PERIPHERAL_CONTROL; + extProp.Property.Id = 0; + extProp.Property.Flags = KSPROPERTY_TYPE_SETSUPPORT | KSPROPERTY_TYPE_TOPOLOGY; + extProp.NodeId = m_dwXUPeripheralControlNodeId; + extProp.Reserved = 0; + ULONG ulBytesReturned = 0; + return m_spKsControl->KsProperty((PKSPROPERTY)&extProp, sizeof(extProp), NULL, 0, &ulBytesReturned); +} + +HRESULT CWebcamController::GetProperty(LOGITECH_XU_PROPERTYSET lPropertySet,ULONG ulPropertyId, ULONG ulSize, VOID *pValue) +{ + if (!m_spKsControl) + return -1; + + ASSERT(pValue!=0 && ulSize!=0); + + KSP_NODE extprop{}; + extprop.Property.Id = ulPropertyId; + extprop.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY; + + switch(lPropertySet) + { + case XU_DEVICE_INFORMATION: + extprop.NodeId = m_dwXUDeviceInformationNodeId; + extprop.Property.Set = LOGITECH_XU_DEVICE_INFORMATION; + break; + case XU_VIDEOPIPE_CONTROL: + extprop.NodeId = m_dwXUVideoPipeControlNodeId; + extprop.Property.Set = LOGITECH_XU_VIDEOPIPE_CONTROL; + break; + case XU_TEST_DEBUG: + extprop.NodeId = m_dwXUTestDebugNodeId; + extprop.Property.Set = LOGITECH_XU_TEST_DEBUG; + break; + case XU_PERIPHERAL_CONTROL: + extprop.NodeId = m_dwXUPeripheralControlNodeId; + extprop.Property.Set = LOGITECH_XU_PERIPHERAL_CONTROL; + break; + } + + HRESULT hr = m_spKsControl->KsProperty( + (PKSPROPERTY)&extprop, + sizeof(extprop), + pValue, + ulSize, + &ulSize + ); + + return hr; +} + + +HRESULT CWebcamController::SetProperty(LOGITECH_XU_PROPERTYSET lPropertySet,ULONG ulPropertyId, ULONG ulSize, VOID *pValue) +{ + if (!m_spKsControl) + return -1; + + ASSERT(pValue != 0 && ulSize != 0); + + KSP_NODE extprop{}; + extprop.Property.Id = ulPropertyId; + extprop.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY; + + switch(lPropertySet) + { + case XU_DEVICE_INFORMATION: + extprop.NodeId = m_dwXUDeviceInformationNodeId; + extprop.Property.Set = LOGITECH_XU_DEVICE_INFORMATION; + break; + case XU_VIDEOPIPE_CONTROL: + extprop.NodeId = m_dwXUVideoPipeControlNodeId; + extprop.Property.Set = LOGITECH_XU_VIDEOPIPE_CONTROL; + break; + case XU_TEST_DEBUG: + extprop.NodeId = m_dwXUTestDebugNodeId; + extprop.Property.Set = LOGITECH_XU_TEST_DEBUG; + break; + case XU_PERIPHERAL_CONTROL: + extprop.NodeId = m_dwXUPeripheralControlNodeId; + extprop.Property.Set = LOGITECH_XU_PERIPHERAL_CONTROL; + break; + } + + ULONG ulBytesReturned; + HRESULT hr = m_spKsControl->KsProperty( + (PKSPROPERTY)&extprop, + sizeof(extprop), + pValue, + ulSize, + &ulBytesReturned + ); + + + return hr; +} + +/* +* Checks whether the device represented by the given IMoniker matches the given device path +* or the given VID/PID. +* +* If the device path is NULL no device path matching is performed. +* A VID or PID of 0 is considered to always match. If the VID and PID are both 0 no VID/PID +* matching is performed. +*/ +bool CWebcamController::DeviceMatches(CComPtr pMoniker, BSTR devicePath, DWORD wVID, DWORD wPID) +{ + + bool match = false; + CComPtr pPropBag; + CComVariant varPath; + + // Open the device properties + HRESULT hr = pMoniker->BindToStorage(NULL, NULL, __uuidof(IPropertyBag), (void **)&pPropBag); + if(FAILED(hr)) + goto done; + + // Retrieve the device path + hr = pPropBag->Read(L"DevicePath", &varPath, 0); + if(FAILED(hr) || varPath.bstrVal == NULL) + goto done; + + // Return true if the device path matches + if(devicePath!=NULL) + { + // Parse the device path for vid pid + m_dwVid = m_dwPid = 0; + if (FAILED(varPath.ChangeType(VT_BSTR))) + return false; + + if (_wcsicmp(varPath.bstrVal, devicePath) == 0) + { + // Lowercase + _wcslwr_s(varPath.bstrVal, SysStringLen(varPath.bstrVal) + 1); + ParseDevicePath(varPath.bstrVal, m_dwVid, m_dwPid); + + match = true; + goto done; + } + } + + // Return true if the USB information matches + if(wVID || wPID) + { + // Parse the device path (Convert it to lower-case first for safer parsing) + _wcslwr_s(varPath.bstrVal, SysStringLen(varPath.bstrVal) + 1); + DWORD vid = 0, pid = 0; + if(ParseDevicePath(varPath.bstrVal, vid, pid)) + { + match = + (wVID == 0 || vid == wVID) && + (wPID == 0 || pid == wPID); + } + } + +done: + VariantClear(&varPath); + return match; +} + +HRESULT CWebcamController::OpenDevice(CComPtr pMoniker) +{ + CComPtr pKsControl; + + // Get a pointer to the IKsControl interface + HRESULT hr = pMoniker->BindToObject(NULL, NULL, __uuidof(IKsControl), (void **)&pKsControl); + if(FAILED(hr)) + return hr; + + // Find the H.264 XU node + hr = InitializeXUNodesArray(pKsControl); + if(SUCCEEDED(hr)) + { + // save the pointer, we succeeded + m_spKsControl = pKsControl; + + m_spAMCameraControl = pKsControl; + m_spsPropertySet = pKsControl; + m_spCameraControl = pKsControl; // not supported + } + + if (m_spAMCameraControl!=nullptr) + { + long lValue = 0, lMin = 0, lMax = 0, lSteppingSize = 0, lDefaults = 0, lFlags = 0; + HRESULT hResult = m_spAMCameraControl->Get(KSPROPERTY_CAMERACONTROL_PAN_RELATIVE, &lValue, &lFlags); + m_bMechanicalPanTilt = SUCCEEDED(hr); + + { + for (int i=0; i<=19; ++i) + { + hResult = m_spAMCameraControl->Get(i, &lValue, &lFlags); + if (SUCCEEDED(hr)) + TRACE(__FUNCTION__ " m_spAMCameraControl-%d val=%d, flag=%d\n",i, lValue, lFlags); + } + + } + + // The PTZ Pro 2 has a mechanical pan tilt + ASSERT(m_bMechanicalPanTilt); + +// { +// HRESULT hResult = GetProperty( KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE, &lValue, &lFlags); +// } + + hResult = m_spAMCameraControl->GetRange(CameraControl_Pan, &lMin, &lMax, &lSteppingSize, &lDefaults, &lFlags); + if (S_OK == hResult) + { + m_lDigitalPanMin = lMin; + m_lDigitalPanMax = lMax; + } + lMin = lMax = lSteppingSize = lDefaults = lFlags = 0; + hResult = m_spAMCameraControl->GetRange(CameraControl_Tilt, &lMin, &lMax, &lSteppingSize, &lDefaults, &lFlags); + if (S_OK == hResult) + { + m_lDigitalTiltMin = lMin; + m_lDigitalTiltMax = lMax; + } + } + + + return hr; +} + +bool CWebcamController::ParseDevicePath(const wchar_t *devicePath, DWORD &vid, DWORD &pid) +{ + if(swscanf_s(devicePath, L"\\\\?\\usb#vid_%04x&pid_%04x", &vid, &pid) != 2) + return false; + return true; +} + +void CWebcamController::GetVidPid(DWORD& vid, DWORD& pid) +{ + vid = m_dwVid; + pid = m_dwPid; +} + +void CWebcamController::GotoHome() +{ + // Zoom to Home + { + DWORD dwValue = 0; + SetProperty(XU_VIDEOPIPE_CONTROL, XU_VIDEO_FW_ZOOM_CONTROL, sizeof(dwValue), &dwValue); + } + // Zoom to Home + // Home = No Action + // 1 ? + // 2 ? + // Goto Home = 3 + // 8 Presets + // Preset 1-8 = 4-11, + // Goto Preset 1-8 = 12-19 + // Test 22 + { + DWORD dwValue(3); + SetProperty(XU_PERIPHERAL_CONTROL, XU_PERIPHERALCONTROL_PANTILT_MODE_CONTROL, sizeof(DWORD), &dwValue); + } + return; +} + +void CWebcamController::SavePreset(int iNum) +{ + if (iNum<0 || iNum>=NUM_PRESETS) + return; + + // Zoom to Home + // Home = No Action + // 1 ? + // 2 ? + // Goto Home = 3 + // 8 Presets + // Preset 1-8 = 4-11, + // Goto Preset 1-8 = 12-19 + // Test 22 + DWORD dwValue(iNum+4); + SetProperty(XU_PERIPHERAL_CONTROL, XU_PERIPHERALCONTROL_PANTILT_MODE_CONTROL, sizeof(DWORD), &dwValue); +} + +void CWebcamController::GotoPreset(int iNum) +{ + if (iNum<0 || iNum>=NUM_PRESETS) + return; + + // Zoom to Home + // Home = No Action + // 1 ? + // 2 ? + // Goto Home = 3 + // 8 Presets + // Preset 1-8 = 4-11, + // Goto Preset 1-8 = 12-19 + // Test 22 + DWORD dwValue(iNum + 12); + SetProperty(XU_PERIPHERAL_CONTROL, XU_PERIPHERALCONTROL_PANTILT_MODE_CONTROL, sizeof(DWORD), &dwValue); +} + +int CWebcamController::GetCurrentZoom() +{ + if (!m_spAMCameraControl) + return -1; + + long oldZoom = 0, oldFlags = 0; + oldFlags = CameraControl_Flags_Manual; + m_spAMCameraControl->Get(CameraControl_Zoom, &oldZoom, &oldFlags); + return oldZoom; +} + +int CWebcamController::Zoom(int direction) +{ + if (!m_spAMCameraControl) + return -1; + + long lZoomMin = 0, lZoomMax = 0, lZoomDefault = 0, lZoomStep = 0, lFlags = CameraControl_Flags_Manual; + m_spAMCameraControl->GetRange(CameraControl_Zoom, &lZoomMin, &lZoomMax, &lZoomStep, &lZoomDefault, &lFlags); + + long lOldZoom = GetCurrentZoom(); + if (lOldZoomlZoomMax) + lOldZoom = lZoomDefault; + + long lNewZoom = lOldZoom; + + // Devide in 150 parts + int iStep = (lZoomMax-lZoomMin)/150; + if (iStep==0) + iStep = 1; + + // calculate new zoom + lNewZoom = lOldZoom + lZoomStep*direction*iStep; // Just get 100 steps + + m_spAMCameraControl->Set(CameraControl_Zoom, lNewZoom, CameraControl_Flags_Manual); + return lNewZoom; +} + +void CWebcamController::Tilt(int yDirection) +{ + if (m_spAMCameraControl) + m_spAMCameraControl->Set(KSPROPERTY_CAMERACONTROL_TILT_RELATIVE, yDirection!=0 ? (yDirection < 0 ? -1 : 1) : 0, 0); +} + +void CWebcamController::MoveTilt(int yDirection) +{ + if (m_bUseLogitechMotionControl && m_dwXUPeripheralControlNodeId!=NONODE) + { + DWORD dwValue = MAKELONG(MAKEWORD(0, 0), MAKEWORD(0, yDirection < 0 ? 1 : -1)); + SetProperty(XU_PERIPHERAL_CONTROL, XU_PERIPHERALCONTROL_PANTILT_RELATIVE_CONTROL, sizeof(DWORD), &dwValue); + } + else + { + if (!m_spAMCameraControl) + return; + + if (m_bMechanicalPanTilt) + { + if (yDirection != 0) + { + Tilt(yDirection); + MySleep(m_iMotorIntervalTimer); + Tilt(0); + } + } + else + { + long lValue(0), lFlags(0); + if (yDirection != 0) + { + HRESULT hResult = m_spAMCameraControl->Get(CameraControl_Tilt, &lValue, &lFlags); + if (S_OK == hResult) + { + lValue += yDirection; + if (yDirection > 0 && lValue > m_lDigitalTiltMax) + lValue = m_lDigitalTiltMax; + if (yDirection < 0 && lValue < m_lDigitalTiltMin) + lValue = m_lDigitalTiltMin; + hResult = m_spAMCameraControl->Set(CameraControl_Tilt, lValue, lFlags); + } + } + } + } + return; +} + + +void CWebcamController::Pan(int xDirection) +{ + if (m_spAMCameraControl) + m_spAMCameraControl->Set(KSPROPERTY_CAMERACONTROL_PAN_RELATIVE, xDirection!=0 ? (xDirection < 0 ? -1 : 1) : 0, 0); +} + +void CWebcamController::MovePan(int xDirection) +{ + if (m_bUseLogitechMotionControl) + { + DWORD dwValue = MAKELONG(MAKEWORD(0, xDirection), MAKEWORD(0, 0)); + SetProperty(XU_PERIPHERAL_CONTROL, XU_PERIPHERALCONTROL_PANTILT_RELATIVE_CONTROL, sizeof(DWORD), &dwValue); + } + else + { + if (!m_spAMCameraControl) + return; + + if (m_bMechanicalPanTilt) + { + if (xDirection != 0) + { + Pan(xDirection); + MySleep(m_iMotorIntervalTimer); + Pan(0); + } + } + else + { + long lValue(0), lFlags(0); + if (xDirection != 0) + { + HRESULT hResult = m_spAMCameraControl->Get(CameraControl_Pan, &lValue, &lFlags); + if (S_OK == hResult) + { + lValue += xDirection; + if (xDirection > 0 && lValue > m_lDigitalPanMax) + lValue = m_lDigitalPanMax; + if (xDirection < 0 && lValue < m_lDigitalPanMin) + lValue = m_lDigitalPanMin; + hResult = m_spAMCameraControl->Set(CameraControl_Pan, lValue, lFlags); + } + } + } + } + return; +} + + +/* +* Tries to locate the node that carries H.264 XU extension and saves its ID. +*/ +HRESULT CWebcamController::InitializeXUNodesArray(CComPtr pKsControl) +{ + // Get the IKsTopologyInfo interface + CComQIPtr pKsTopologyInfo = pKsControl; + if (!pKsTopologyInfo) + return E_NOINTERFACE; + + // Retrieve the number of nodes in the filter + DWORD dwNumNodes = 0; + HRESULT hr = pKsTopologyInfo->get_NumNodes(&dwNumNodes); + if(FAILED(hr)) + return hr; + + // Go through all extension unit nodes and try to find the required XU node + hr = E_FAIL; + std::set setGuids; + for(unsigned int nodeId = 0; nodeId < dwNumNodes; nodeId++) + { + GUID guidNodeType; + hr = pKsTopologyInfo->get_NodeType(nodeId, &guidNodeType); + if(FAILED(hr)) + continue; + + // All Node types we have +// { 941C7AC0 - C559 - 11D0 - 8A2B - 00A0C9255AC1 } KSNODETYPE_DEV_SPECIFIC +// { DFF229E1 - F70F - 11D0 - B917 - 00A0C9223196 } KSNODETYPE_VIDEO_STREAMING +// { DFF229E5 - F70F - 11D0 - B917 - 00A0C9223196 } KSNODETYPE_VIDEO_PROCESSING +// { DFF229E6 - F70F - 11D0 - B917 - 00A0C9223196 } KSNODETYPE_VIDEO_CAMERA_TERMINAL + { + wchar_t szText[100]; + StringFromGUID2(guidNodeType, szText, _countof(szText)); + setGuids.emplace(szText); + } + + + if(!IsEqualGUID(guidNodeType, KSNODETYPE_DEV_SPECIFIC)) + continue; + + if(IsExtensionUnitSupported(pKsControl,LOGITECH_XU_DEVICE_INFORMATION,nodeId)) + { + m_dwXUDeviceInformationNodeId = nodeId; + } + else if(IsExtensionUnitSupported(pKsControl,LOGITECH_XU_VIDEOPIPE_CONTROL,nodeId)) + { + m_dwXUVideoPipeControlNodeId = nodeId; + } + else if(IsExtensionUnitSupported(pKsControl,LOGITECH_XU_TEST_DEBUG,nodeId)) + { + m_dwXUTestDebugNodeId = nodeId; + } + else if(IsExtensionUnitSupported(pKsControl,LOGITECH_XU_PERIPHERAL_CONTROL,nodeId)) + { + m_dwXUPeripheralControlNodeId = nodeId; + } +// else if (IsExtensionUnitSupported(pKsControl, PROPSETID_VIDCAP_CAMERACONTROL, nodeId)) +// { +// // DWORD dwNodeId = nodeId; +// } + } + for (const auto &str : setGuids) + TRACE(__FUNCTION__ " - %ls\n", str.GetString()); + return hr; +} + +bool CWebcamController::IsExtensionUnitSupported(CComPtr pKsControl,const GUID& guidExtension,unsigned int nodeId) +{ + KSP_NODE extProp{}; + extProp.Property.Set = guidExtension; + extProp.Property.Id = 0; + extProp.Property.Flags = KSPROPERTY_TYPE_SETSUPPORT | KSPROPERTY_TYPE_TOPOLOGY; + extProp.NodeId = nodeId; + extProp.Reserved = 0; + ULONG ulBytesReturned = 0; + HRESULT hr = pKsControl->KsProperty((PKSPROPERTY)&extProp, sizeof(extProp), NULL, 0, &ulBytesReturned); + return SUCCEEDED(hr); +} + + +void CWebcamController::ListDevices(CStringArray &aDevices) +{ + aDevices.RemoveAll(); + + // Get a device list + CComPtr pSysDevEnum; + HRESULT hr; + hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void**)&pSysDevEnum); + if (SUCCEEDED(hr)) + { + //create a device class enumerator + CComPtr pIEnumMoniker; + HRESULT hResult = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pIEnumMoniker, 0); + if (SUCCEEDED(hr)) + { + ULONG pFetched = NULL; + CComPtr pImoniker; + while (S_OK == pIEnumMoniker->Next(1, &pImoniker, &pFetched)) + { + CComPtr pPropBag; + hResult = pImoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)&pPropBag); + if (SUCCEEDED(hResult) && pPropBag!=nullptr) + { + CComVariant varCameraName, varDevicePath; + pPropBag->Read(L"FriendlyName", &varCameraName, 0); + pPropBag->Read(L"DevicePath", &varDevicePath, 0); + + if (SUCCEEDED(varCameraName.ChangeType(VT_BSTR)) && + SUCCEEDED(varDevicePath.ChangeType(VT_BSTR))) + { + CString strCameraName(varCameraName.bstrVal), strDevicePath(varDevicePath.bstrVal); + aDevices.Add(strCameraName + _T('\t') + strDevicePath); + } + } + + // Set to null + pImoniker = nullptr; + } + } + } +} diff --git a/PTZControl/ExtensionUnit.h b/PTZControl/ExtensionUnit.h new file mode 100644 index 0000000..5e0917b --- /dev/null +++ b/PTZControl/ExtensionUnit.h @@ -0,0 +1,75 @@ +#pragma once +#include +#include // For IKsControl +#include // For IKsNodeControl + +#include "ExtensionUnitDefines.h" + + +#define DEFAULT_MOTOR_INTERVAL_TIMER 70 + +/** +* CWebcamExtensionUnit encapsulates the USB extension unit capability of the device. +* (see https://msdn.microsoft.com/en-us/library/windows/hardware/ff568656(v=vs.85).aspx). +*/ + +class CWebcamController +{ +public: + CWebcamController(void); + ~CWebcamController(void); + + HRESULT OpenDevice(BSTR bstrDevicePath, DWORD wVID, DWORD wPID); + void CloseDevice(); + HRESULT IsPeripheralPropertySetSupported(); + HRESULT GetProperty(LOGITECH_XU_PROPERTYSET lPropertySet, ULONG ulPropertyId, ULONG ulSize, VOID* pValue); + HRESULT SetProperty(LOGITECH_XU_PROPERTYSET lPropertySet, ULONG ulPropertyId, ULONG ulSize, VOID* pValue); + void GetVidPid(DWORD& vid, DWORD& pid); + + int GetCurrentZoom(); + int Zoom(int direction); + void MoveTilt(int yDirection); + void MovePan(int xDirection); + void Tilt(int yDirection); + void Pan(int xDirection); + + void GotoHome(); + void SavePreset(int iNum); + void GotoPreset(int iNum); + + static void ListDevices(CStringArray &aDevices); + static const int NUM_PRESETS = 8; + + bool UseLogitechMotionControl() const { return m_bUseLogitechMotionControl; } + void UseLogitechMotionControl(bool val) { m_bUseLogitechMotionControl = val; } + + int GetMotorIntervalTimer() const { return m_iMotorIntervalTimer; } + void SetMotorIntervalTimer(int val) { m_iMotorIntervalTimer = val; } + +private: + bool DeviceMatches(CComPtr pMoniker, BSTR devicePath, DWORD wVID, DWORD wPID); + HRESULT OpenDevice(CComPtr pMoniker); + bool ParseDevicePath(const wchar_t* devicePath, DWORD& vid, DWORD& pid); + HRESULT InitializeXUNodesArray(CComPtr pKsControl); + bool IsExtensionUnitSupported(CComPtr pKsControl, const GUID& guidExtension, unsigned int nodeId); + +private: + CComPtr m_spKsControl; + CComQIPtr m_spAMCameraControl; + CComQIPtr m_spsPropertySet; + CComQIPtr m_spCameraControl; + + DWORD m_dwXUDeviceInformationNodeId; + DWORD m_dwXUVideoPipeControlNodeId; + DWORD m_dwXUTestDebugNodeId; + DWORD m_dwXUPeripheralControlNodeId; + DWORD m_dwVid; + DWORD m_dwPid; + + bool m_bMechanicalPanTilt; + long m_lDigitalTiltMin, m_lDigitalTiltMax, + m_lDigitalPanMin, m_lDigitalPanMax; + + bool m_bUseLogitechMotionControl; + int m_iMotorIntervalTimer; +}; diff --git a/PTZControl/ExtensionUnitDefines.h b/PTZControl/ExtensionUnitDefines.h new file mode 100644 index 0000000..b1c8d78 --- /dev/null +++ b/PTZControl/ExtensionUnitDefines.h @@ -0,0 +1,120 @@ +#pragma once + +DEFINE_GUID(LOGITECH_XU_DEVICE_INFORMATION, 0x69678EE4, 0x410F, 0x40DB, 0xA8, 0x50, 0x74, 0x20, 0xD7, 0xD8, 0x24, 0x0E); +DEFINE_GUID(LOGITECH_XU_VIDEOPIPE_CONTROL, 0x49E40215, 0xF434, 0x47FE, 0xB1, 0x58, 0x0E, 0x88, 0x50, 0x23, 0xE5, 0x1B); +DEFINE_GUID(LOGITECH_XU_TEST_DEBUG, 0x1F5D4CA9, 0xDE11, 0x4487, 0x84, 0x0D, 0x50, 0x93, 0x3C, 0x8E, 0xC8, 0xD1); +DEFINE_GUID(LOGITECH_XU_PERIPHERAL_CONTROL, 0xFFE52D21, 0x8030, 0x4E2C, 0x82, 0xD9, 0xF5, 0x87, 0xD0, 0x05, 0x40, 0xBD); + +enum //LOGITECH_XU_DEVICE_INFORMATION +{ + XU_DEVICE_INFORMATION_UNDEFINED_CONTROL = 0x00, + XU_FIRMWARE_VERSION_CONTROL = 0x01, + XU_FIRMWARE_CRC_CONTROL = 0x02, + XU_EEPROM_VERSION_CONTROL = 0x03, + XU_SENSOR_INFORMATION_CONTROL = 0x04, + XU_PROCESSOR_INFORMATION_CONTROL = 0x05, + XU_USB_INFORMATION_CONTROL = 0x06, + XU_Reserved1 = 0x07, + XU_Reserved2 = 0x08, + XU_LENS_FOV_CONTROL = 0x09, + XU_SENSOR_DIMENSION_CONTROL = 0x0A, + XU_EXTENDED_FIRMWARE_VERSION_CONTROL = 0x0B, +}; + +enum //LOGITECH_XU_VIDEOPIPE_CONTROL +{ + XU_VIDEO_UNDEFINED_CONTROL = 0x00, + XU_VIDEO_COLOR_BOOST_CONTROL = 0x01, + XU_VIDEO_NATIVE_MODE_FORCED_CONTROL = 0x02, + XU_VIDEO_NATIVE_MODE_AUTO_CONTROL = 0x03, + XU_VIDEO_RIGHTLIGHT_MODE_CONTROL = 0x04, + XU_VIDEO_RIGHTLIGHT_ZOI_CONTROL = 0x05, + XU_VIDEO_FW_ZOOM_CONTROL = 0x06, + XU_VIDEO_DUAL_ISO_ENABLE_CONTROL = 0x07, + XU_VIDEO_SENSOR_CROPPING_DIMENSION_CONTROL = 0x08, + XU_VIDEO_MJPEG_RESYNC_MARKER_CONTROL = 0x09, + XU_VIDEO_ADVANCE_DIGITAL_ZOOM_CONTROL = 0x0A, + XU_VIDEO_MJPEG_COMPRESS_RATIO_CONTROL = 0x0B, + XU_VIDEO_HDR_CONTROL = 0x0C, +}; + +enum //LOGITECH_XU_TEST_DEBUG +{ + XU_TESTDEBUG_UNDEFINED_CONTROL = 0x00, + XU_TEST_REGISTER_ADDRESS_CONTROL = 0x01, + XU_TEST_REGISTER_ACCESS_CONTROL = 0x02, + XU_TEST_EEPROM_ADDRESS_CONTROL = 0x03, + XU_TEST_EEPROM_ACCESS_CONTROL = 0x04, + XU_TEST_SENSOR_ADDRESS_CONTROL = 0x05, + XU_TEST_SENSOR_ACCESS_CONTROL = 0x06, + XU_PERIPHERAL_MODE_CONTROL = 0x07, + XU_PERIPHERAL_OP_CONTROL = 0x08, + XU_PERIPHERAL_ACCESS_CONTROL = 0x09, + XU_TEST_TDE_MODE_CONTROL = 0x0A, + XU_TEST_GAIN_ACCESS_CONTROL = 0x0B, + XU_TEST_LOW_LIGHT_PRIORITY_CONTROL = 0x0C, + XU_TEST_COLOR_PROCESSING_DISABLE_CONTROL = 0x0D, + XU_TEST_PIXEL_DEFECT_CORRECTION_CONTROL = 0x0E, + XU_TEST_LENS_SHADING_COMPENSATION_CONTROL = 0x0F, + XU_TEST_GAMMA_CONTROL = 0x10, + XU_TEST_INTEGRATION_TIME_CONTROL = 0x11, + XU_TEST_RAW_DATA_BITS_PER_PIXEL_CONTROL = 0x12, + XU_TEST_ISP_ADDRESS_CONTROL = 0x13, + XU_TEST_ISP_ACCESS_CONTROL = 0x14, + XU_PERIPHERAL_ACCESS_EXT_CONTROL = 0x15, + XU_H264_FRAME_NO_CONTROL = 0x16, + +}; + +// Seams that only 2 modes are defined for the PTZ Pro 2 +// XU_PERIPHERALCONTROL_PANTILT_RELATIVE_CONTROL = pan tilt +// XU_PERIPHERALCONTROL_PANTILT_MODE_CONTROL = Preset and recall position +enum //LOGITECH_XU_PERIPHERAL_CONTROL +{ + XU_PERIPHERAL_UNDEFINED_CONTROL = 0x00, + XU_PERIPHERALCONTROL_PANTILT_RELATIVE_CONTROL = 0x01, // pan tilt + XU_PERIPHERALCONTROL_PANTILT_MODE_CONTROL = 0x02, // Preset and recall position + XU_PERIPHERALCONTROL_MAXIMUM_RESOLUTION_SUPPORT_FOR_PANTILT_CONTROL = 0x03, + XU_PERIPHERALCONTROL_AF_MOTORCONTROL = 0x04, + XU_PERIPHERALCONTROL_AF_BLOB_CONTROL = 0x05, + XU_PERIPHERALCONTROL_AF_VCM_PARAMETERS = 0x06, + XU_PERIPHERALCONTROL_AF_STATUS = 0x07, + XU_PERIPHERALCONTROL_AF_THRESHOLDS = 0x08, + XU_PERIPHERALCONTROL_LED = 0x09, + XU_PERIPHERAL_CONTROL_PERIPHERAL_STATUS = 0x0A, + XU_PERIPHERAL_CONTROL_SPEAKER_VOLUME = 0x0B, + XU_PERIPHERAL_CONTROL_DEVICE_CODEC_STATUS = 0x0C, + XU_PERIPHERAL_CONTROL_SPEAKER = 0x0D, + XU_PERIPHERAL_CONTROL_MODE = 0x0E, + XU_AUDIO_LIBRARY_MODE_CONTROL = 0x0F, + XU_PERIPHERAL_MOTOR_STEPS_CONTROL = 0x10, + +}; + + +typedef enum +{ + XU_DEVICE_INFORMATION, + XU_VIDEOPIPE_CONTROL, + XU_TEST_DEBUG, + XU_PERIPHERAL_CONTROL, +} LOGITECH_XU_PROPERTYSET; + +/** +* Preset enumerations +*/ +enum +{ + RESET_NOACTION = 0, + SET_PRESET = 1, + GOTO_PRESET = 2, + GOTOHOME = 3 +}; + +// enum +// { +// RESET_NOACTION = 0, +// RESET_PAN = 1, +// RESET_TILT = 2, +// }; + diff --git a/PTZControl/PTZControl.aps b/PTZControl/PTZControl.aps new file mode 100644 index 0000000000000000000000000000000000000000..d5225d5bb627836f73167cd77323e51a7a7ee9f2 GIT binary patch literal 248840 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 PKJ~s2x}4%ZWjX%~%_oXn literal 0 HcmV?d00001 diff --git a/PTZControl/PTZControl.cpp b/PTZControl/PTZControl.cpp new file mode 100644 index 0000000..fa031f4 --- /dev/null +++ b/PTZControl/PTZControl.cpp @@ -0,0 +1,169 @@ + +// PTZControl.cpp : Defines the class behaviors for the application. +// + +#include "pch.h" +#include "framework.h" +#include "PTZControl.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +///////////////////////////////////////////////////////////////////////////// +// CAgvipCommandLineInfo +// The program must be started with the parameters /conn: +// and /user:. For the Debug mode special Options are prepared. + +class CPTZControlCommandLineInfo : public CCommandLineInfo +{ +public: + // Construction + CPTZControlCommandLineInfo() + : m_bNoReset(false) + , m_bNoGuard(false) + , m_bShowDevices(false) + { + + } + + // Overwritten virtual + virtual void ParseParam(const TCHAR* pszParam,BOOL bFlag,BOOL bLast); +#ifdef _UNICODE + virtual void ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast); +#endif + +public: + // Data + CString m_strDevName; // Device name from the command line to search for + bool m_bNoReset; // No Reset of web cam + bool m_bNoGuard; // Prevent a guard thread + bool m_bShowDevices; // SHow message box with devicenames on open. + + // Currently not used (may be used if we ant yes/no/undefined) + enum class Mode + { + False = 0, + True = 1, + Undefined = -1, + }; +}; + +#ifdef _UNICODE +void CPTZControlCommandLineInfo::ParseParam(const TCHAR* pszParam,BOOL bFlag,BOOL bLast) +{ + ParseParam(CT2CA(pszParam),bFlag,bLast); +} +#endif + +void CPTZControlCommandLineInfo::ParseParam(const char* pszParam,BOOL bFlag,BOOL bLast) +{ + if (bFlag) + { + if (_strnicmp(pszParam,"device:",7)==0) + { + // Get address set name + pszParam += 7; + m_strDevName = pszParam; + ::PathUnquoteSpaces(CStrBuf(m_strDevName,0)); + } + else if (_stricmp(pszParam, "noreset")==0) + { + m_bNoReset = true; + } + else if (_stricmp(pszParam, "noguard") == 0) + { + m_bNoGuard = true; + } + else if (_stricmp(pszParam, "showdevices") == 0) + { + m_bShowDevices = true; + } + else + ParseParamFlag(pszParam); + } + else + ParseParamNotFlag(pszParam); + + // Standard implementation + ParseLast(bLast); +} + + +////////////////////////////////////////////////////////////////////////// +// CPTZControlApp + +BEGIN_MESSAGE_MAP(CPTZControlApp, CWinApp) + ON_COMMAND(ID_HELP, &CWinApp::OnHelp) +END_MESSAGE_MAP() + +////////////////////////////////////////////////////////////////////////// +// CPTZControlApp construction + +CPTZControlApp::CPTZControlApp() + : m_bNoReset(false) + , m_bNoGuard(false) + , m_bShowDevices(false) +{ +} + + +// The one and only CPTZControlApp object + +CPTZControlApp theApp; + + +////////////////////////////////////////////////////////////////////////// +// CPTZControlApp initialization + +BOOL CPTZControlApp::InitInstance() +{ + CWinApp::InitInstance(); + + // Activate "Windows Native" visual manager for enabling themes in MFC controls + CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); + + // Taken from Logitech + // PTZDemo\ConferenceCamPTZDemoDlg.cpp + CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); + +//-------------Registry------------------------------------------------- + + SetRegistryKey(_T("MRi-Software")); + +//-------------Commandline parsing-------------------------------------- + +// Parse command line for standard shell commands, DDE, file open + CPTZControlCommandLineInfo cmdInfo; + ParseCommandLine(cmdInfo); + + m_strDevName = cmdInfo.m_strDevName; + + // Registry is overruled command line + m_bNoReset = GetProfileInt(REG_OPTIONS,REG_NORESET,FALSE)!=0 || cmdInfo.m_bNoReset; + m_bNoGuard = GetProfileInt(REG_OPTIONS,REG_NOGUARD,FALSE)!=0 || cmdInfo.m_bNoGuard; + m_bShowDevices = cmdInfo.m_bShowDevices; + +//-------------Main ---------------------------------------------------- + + // Create the Dialog + m_pDlg = new CPTZControlDlg(); + if (m_pDlg->Create(CPTZControlDlg::IDD)) + m_pMainWnd = m_pDlg; + else + return FALSE; + + // Succeeded + return TRUE; +} + +////////////////////////////////////////////////////////////////////////// + +int CPTZControlApp::ExitInstance() +{ +#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) + ControlBarCleanUp(); +#endif + + return __super::ExitInstance(); +} diff --git a/PTZControl/PTZControl.h b/PTZControl/PTZControl.h new file mode 100644 index 0000000..595c698 --- /dev/null +++ b/PTZControl/PTZControl.h @@ -0,0 +1,76 @@ + +// PTZControl.h : main header file for the PROJECT_NAME application +// +#pragma once + +#include "PTZControlDlg.h" + +#ifndef __AFXWIN_H__ + #error "include 'pch.h' before including this file for PCH" +#endif + +#include "resource.h" // main symbols + +////////////////////////////////////////////////////////////////////////// + +#define REG_WINDOW _T("Window") +#define REG_WINDOW_POSX _T("X") +#define REG_WINDOW_POSY _T("Y") +#define REG_TOOLTIP _T("Tooltip%d") + +#define REG_DEVICE _T("Device") +#define REG_USELOGOTECHMOTIONCONTROL _T("LogitechMotionControl") +#define REG_MOTORINTERVALTIMER _T("MotorIntervalTimer") +#define REG_DEVICENAME _T("DeviceName") + +#define REG_OPTIONS _T("Options") +#define REG_NORESET _T("NoReset") +#define REG_NOGUARD _T("NoGuard") + +#define DEFAULT_DEVICE_NAME_1 _T("PTZ Pro 2") +#define DEFAULT_DEVICE_NAME_2 _T("Logi Rally") + +#define TIMER_FOCUS_CHECK 4711 +#define TIMER_AUTO_REPEAT 4712 +#define TIMER_CLEAR_MEMORY 4713 + +#define FOCUS_CHECK_DELAY 250 // After 250msec we move the focus away from a button. +#define AUTO_REPEAT_DELAY 50 // Autorepeat is on the fastest possible delay of 50msec +#define AUTO_REPEAT_INITIAL_DELAY 500 // after 1/2 second we start autorepeat +#define CLEAR_MEMORY_DELAY 5000 // After 5 seconds clear the memory + +#define COLOR_GREEN RGB(0,240,0) +#define COLOR_RED RGB(240,0,0) +#define COLOR_ORANGE RGB(255,140,0) + +////////////////////////////////////////////////////////////////////////// +// CPTZControlApp: +// See PTZControl.cpp for the implementation of this class +// + +class CPTZControlApp : public CWinApp +{ +public: + CPTZControlApp(); + + // Overrides +public: + virtual BOOL InitInstance(); + +// Implementation + + DECLARE_MESSAGE_MAP() + virtual int ExitInstance(); + +public: + // command line flags + CString m_strDevName; // Device name from the command line to search for + bool m_bNoReset; // No Reset of web cam + bool m_bNoGuard; // Prevent a guard thread + bool m_bShowDevices; + +private: + CPTZControlDlg* m_pDlg; +}; + +extern CPTZControlApp theApp; diff --git a/PTZControl/PTZControl.rc b/PTZControl/PTZControl.rc new file mode 100644 index 0000000000000000000000000000000000000000..d217c106825e211b5a92ced52a0901c957178834 GIT binary patch literal 24216 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 + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {2E2437DA-35E2-4D0D-B1DF-26E1DFEE1FB9} + MFCProj + PTZControl + 10.0 + + + + Application + true + v142 + Unicode + Static + + + Application + false + v142 + true + Unicode + Static + + + Application + true + v142 + Unicode + Static + + + Application + false + v142 + true + Unicode + Static + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level4 + true + WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + pch.h + + + Windows + + + false + true + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Use + Level3 + true + _WINDOWS;_DEBUG;%(PreprocessorDefinitions) + pch.h + + + Windows + + + false + true + _DEBUG;%(PreprocessorDefinitions) + + + 0x0409 + _DEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Use + Level4 + true + true + true + WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) + pch.h + + + Windows + true + true + + + false + true + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + Use + Level3 + true + true + true + _WINDOWS;NDEBUG;%(PreprocessorDefinitions) + pch.h + + + Windows + true + true + + + false + true + NDEBUG;%(PreprocessorDefinitions) + + + 0x0409 + NDEBUG;%(PreprocessorDefinitions) + $(IntDir);%(AdditionalIncludeDirectories) + + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PTZControl/PTZControlDlg.cpp b/PTZControl/PTZControlDlg.cpp new file mode 100644 index 0000000..a7307a5 --- /dev/null +++ b/PTZControl/PTZControlDlg.cpp @@ -0,0 +1,829 @@ + +// PTZControlDlg.cpp : implementation file +// + +#include "pch.h" +#include "framework.h" +#include "PTZControl.h" +#include "PTZControlDlg.h" +#include "SettingsDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +////////////////////////////////////////////////////////////////////////////////////////// + +#define ON_BN_UNPUSHED(id, memberFxn) \ + ON_CONTROL(BN_UNPUSHED, id, memberFxn) + +////////////////////////////////////////////////////////////////////////////////////////// +// CPTZButton + +IMPLEMENT_DYNAMIC(CPTZButton,CMFCButton) + +CPTZButton::CPTZButton() + : m_bAutoRepeat(false) + , m_uiSent(0) +{ + +} + +void CPTZButton::PreSubclassWindow() +{ + __super::PreSubclassWindow(); + SetTooltip(_T("")); + // Setting delay time doesn't seam to work. + GetToolTipCtrl().SetDelayTime(0); +} + +void CPTZButton::OnDrawBorder(CDC* pDC, CRect& rectClient, UINT uiState) +{ + __super::OnDrawBorder(pDC,rectClient,uiState); + + // Give the button our button face. But only when the mouse isn't over + if (m_bWinXPTheme && m_clrFace!=COLORREF(-1)/* && !m_bHover && !m_bHighlighted*/) + pDC->FillSolidRect(rectClient, m_clrFace); +} + +void CPTZButton::OnDrawFocusRect(CDC* pDC, const CRect& rectClient) +{ + UNUSED_ALWAYS(pDC); UNUSED_ALWAYS(rectClient); +} + +void CPTZButton::OnLButtonDown(UINT nFlags, CPoint point) +{ + if (m_bAutoRepeat) + { + SetTimer(TIMER_AUTO_REPEAT, AUTO_REPEAT_INITIAL_DELAY, NULL); + m_uiSent = 0; + } + __super::OnLButtonDown(nFlags, point); +} + +void CPTZButton::OnLButtonUp(UINT nFlags, CPoint point) +{ + if (m_bAutoRepeat) + { + KillTimer(TIMER_AUTO_REPEAT); + + if (GetCapture() != NULL) + { + // If we never sent a message we do it once. + if (m_uiSent==0 && (GetState() & BST_PUSHED) != 0) + GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetDlgCtrlID(), BN_CLICKED), (LPARAM)m_hWnd); + else + GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetDlgCtrlID(), BN_UNPUSHED), (LPARAM)m_hWnd); + // release capture + ReleaseCapture(); + } + } + else + // Never call the default in auto repeat + __super::OnLButtonUp(nFlags, point); +} + +void CPTZButton::OnTimer(UINT_PTR nIDEvent) +{ + if (nIDEvent==TIMER_AUTO_REPEAT) + { + if (m_bAutoRepeat) + { + if ((GetState() & BST_PUSHED) == 0) + return; + ++m_uiSent; + SetTimer(TIMER_AUTO_REPEAT, AUTO_REPEAT_DELAY, NULL); + GetParent()->SendMessage(WM_COMMAND, MAKELONG(GetDlgCtrlID(), BN_CLICKED), (LPARAM)m_hWnd); + } + } + + __super::OnTimer(nIDEvent); +} + +////////////////////////////////////////////////////////////////////////////////////////// + +BOOL AdjustVisibleWindowRect(LPRECT lpRect, HWND hWndParent=NULL) +{ + RECT rcOrg(*lpRect); + + RECT rcBase; + if (hWndParent) + // Any parent given? + ::GetClientRect(hWndParent,&rcBase); + else + { + ::MONITORINFO mi; + mi.cbSize = sizeof(mi); + if (!AfxGetMainWnd()) + // If we have no main window we just try to use the main screen point 0,0 + ::GetMonitorInfo(::MonitorFromPoint(CPoint(0,0), MONITOR_DEFAULTTONEAREST), &mi); + else + // Get the main window monitor + ::GetMonitorInfo(::MonitorFromWindow(AfxGetMainWnd()->m_hWnd, MONITOR_DEFAULTTONEAREST), &mi); + rcBase = mi.rcWork; + } + + // To large? + if (lpRect->bottom-lpRect->top>rcBase.bottom-rcBase.top) + lpRect->bottom -= (lpRect->bottom-lpRect->top)-(rcBase.bottom-rcBase.top); + if (lpRect->right-lpRect->left>rcBase.right-rcBase.left) + lpRect->right -= (lpRect->right-lpRect->left)-(rcBase.right-rcBase.left); + + // Check if rect is visible + if (lpRect->bottom>rcBase.bottom) + ::OffsetRect(lpRect,0,rcBase.bottom-lpRect->bottom); + if (lpRect->toptop); + if (lpRect->right>rcBase.right) + ::OffsetRect(lpRect,rcBase.right-lpRect->right,0); + if (lpRect->leftleft,0); + + // Check if coords changes + return !EqualRect(lpRect,&rcOrg); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// CPTZControlDlg dialog + +CPTZControlDlg::CPTZControlDlg(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_PTZCONTROL_DIALOG, pParent) + , m_hAccel(NULL) + , m_iCurrentWebCam(0) + , m_iNumWebCams(0) + , m_evTerminating(FALSE,TRUE) + , m_pGuardThread(nullptr) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + m_hAccel = ::LoadAccelerators(AfxFindResourceHandle(IDR_ACCELERATOR, RT_ACCELERATOR), MAKEINTRESOURCE(IDR_ACCELERATOR)); +} + +CPTZControlDlg::~CPTZControlDlg() +{ + for (auto &webcam : m_aWebCams) + webcam.CloseDevice(); +} + +void CPTZControlDlg::PostNcDestroy() +{ + __super::PostNcDestroy(); + + // Cleanup the guard thread. + m_evTerminating.SetEvent(); + if (m_pGuardThread) + ::WaitForSingleObject(m_pGuardThread->m_hThread,INFINITE); + m_pGuardThread = nullptr; + + // Finally delete the application. + delete this; +} + +BOOL CPTZControlDlg::OnCommand(WPARAM wParam, LPARAM lParam) +{ + return __super::OnCommand(wParam,lParam); +} + + +BOOL CPTZControlDlg::PreTranslateMessage(MSG* pMsg) +{ + if (pMsg->message>=WM_KEYFIRST && pMsg->message<=WM_KEYLAST) + { + if (m_hAccel) + { + if (::TranslateAccelerator(m_hWnd, m_hAccel, pMsg)) + return TRUE; + } + } + + return __super::PreTranslateMessage(pMsg); +} + +void CPTZControlDlg::DoDataExchange(CDataExchange* pDX) +{ + __super::DoDataExchange(pDX); + DDX_Control(pDX, IDC_BT_ZOOM_IN, m_btZoomIn); + DDX_Control(pDX, IDC_BT_ZOOM_OUT, m_btZoomOut); + DDX_Control(pDX, IDC_BT_UP, m_btUp); + DDX_Control(pDX, IDC_BT_DOWN, m_btDown); + DDX_Control(pDX, IDC_BT_HOME, m_btHome); + DDX_Control(pDX, IDC_BT_LEFT, m_btLeft); + DDX_Control(pDX, IDC_BT_RIGHT, m_btRight); + DDX_Control(pDX, IDC_BT_MEMORY, m_btMemory); + DDX_Control(pDX, IDC_BT_PRESET1, m_btPreset[0]); + DDX_Control(pDX, IDC_BT_PRESET2, m_btPreset[1]); + DDX_Control(pDX, IDC_BT_PRESET3, m_btPreset[2]); + DDX_Control(pDX, IDC_BT_PRESET4, m_btPreset[3]); + DDX_Control(pDX, IDC_BT_PRESET5, m_btPreset[4]); + DDX_Control(pDX, IDC_BT_PRESET6, m_btPreset[5]); + DDX_Control(pDX, IDC_BT_PRESET7, m_btPreset[6]); + DDX_Control(pDX, IDC_BT_PRESET8, m_btPreset[7]); + DDX_Control(pDX, IDC_BT_EXIT, m_btExit); + DDX_Control(pDX, IDC_BT_SETTINGS, m_btSettings); + DDX_Control(pDX, IDC_BT_WEBCAM1, m_btWebCam[0]); + DDX_Control(pDX, IDC_BT_WEBCAM2, m_btWebCam[1]); +} + +BEGIN_MESSAGE_MAP(CPTZControlDlg, CDialogEx) + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_WM_CLOSE() + ON_WM_NCHITTEST() + ON_BN_CLICKED(IDC_BT_EXIT, &CPTZControlDlg::OnBtExit) + ON_WM_SETFOCUS() + ON_BN_CLICKED(IDC_BT_MEMORY, &CPTZControlDlg::OnBtMemory) + ON_COMMAND_EX(IDC_BT_WEBCAM1, &CPTZControlDlg::OnBtWebCam) + ON_COMMAND_EX(IDC_BT_WEBCAM2, &CPTZControlDlg::OnBtWebCam) + ON_COMMAND_EX(IDC_BT_PRESET1, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET2, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET3, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET4, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET5, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET6, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET7, &CPTZControlDlg::OnBtPreset) + ON_COMMAND_EX(IDC_BT_PRESET8, &CPTZControlDlg::OnBtPreset) + ON_BN_CLICKED(IDC_BT_ZOOM_IN, &CPTZControlDlg::OnBtZoomIn) + ON_BN_CLICKED(IDC_BT_ZOOM_OUT, &CPTZControlDlg::OnBtZoomOut) + ON_BN_CLICKED(IDC_BT_UP, &CPTZControlDlg::OnBtUp) + ON_BN_CLICKED(IDC_BT_DOWN, &CPTZControlDlg::OnBtDown) + ON_BN_CLICKED(IDC_BT_LEFT, &CPTZControlDlg::OnBtLeft) + ON_BN_CLICKED(IDC_BT_HOME, &CPTZControlDlg::OnBtHome) + ON_BN_CLICKED(IDC_BT_RIGHT, &CPTZControlDlg::OnBtRight) + ON_BN_CLICKED(IDC_BT_SETTINGS, &CPTZControlDlg::OnBtSettings) + ON_BN_UNPUSHED(IDC_BT_UP, &CPTZControlDlg::OnBtUnpushed) + ON_BN_UNPUSHED(IDC_BT_DOWN, &CPTZControlDlg::OnBtUnpushed) + ON_BN_UNPUSHED(IDC_BT_LEFT, &CPTZControlDlg::OnBtUnpushed) + ON_BN_UNPUSHED(IDC_BT_RIGHT, &CPTZControlDlg::OnBtUnpushed) + ON_WM_TIMER() +END_MESSAGE_MAP() + + +////////////////////////////////////////////////////////////////////////////////////////// +// CPTZControlDlg message handlers + +void CPTZControlDlg::ResetAllColors() +{ + for (CWnd* pWnd = GetWindow(GW_CHILD); pWnd; pWnd = pWnd->GetWindow(GW_HWNDNEXT)) + { + auto *pButton = DYNAMIC_DOWNCAST(CPTZButton, pWnd); + + // Don't reset color for web cam button + bool bIsWebCamBtn = false; + for (auto &btn : m_btWebCam) + bIsWebCamBtn |= pButton==&btn; + + // Reset color for all other buttons + if (pButton && !bIsWebCamBtn) + pButton->SetFaceColor(COLORREF(-1), TRUE); + } +} + +void CPTZControlDlg::ResetMemButton() +{ + // Clear the mem button + KillTimer(TIMER_CLEAR_MEMORY); + m_btMemory.SetCheck(0); + m_btMemory.SetFaceColor(COLORREF(-1)); +} + +CWebcamController& CPTZControlDlg::GetCurrentWebCam() +{ + return m_aWebCams[m_iCurrentWebCam]; +} + +void CPTZControlDlg::SetActiveCam(int iCam) +{ + if (iCam >= 0 && iCam < m_iNumWebCams) + { + // Clear mem button + ResetMemButton(); + + // Save the colors of the current buttons and set the old ones + for (CWnd* pWnd = GetWindow(GW_CHILD); pWnd; pWnd = pWnd->GetWindow(GW_HWNDNEXT)) + { + auto* pButton = DYNAMIC_DOWNCAST(CPTZButton, pWnd); + if (pButton) + { + // Save the color of the current buttons for the current web cam and get + // the saved color from the map we have for the new cam. + auto nId = pButton->GetDlgCtrlID(); + m_aMapBtnColors[m_iCurrentWebCam][nId] = pButton->GetFaceColor(); + auto it = m_aMapBtnColors[iCam].find(nId); + if (it!=m_aMapBtnColors[iCam].end()) + pButton->SetFaceColor(it->second); + } + } + + // Set the tooltips + for (int i=0; i(p); + + // This thread end when the application exists. + // For ever all 2000 seconds check if the application still runs and accepts messages. + for (;;) + { + // Check if we have an event, wait for 1 sec + CSingleLock lock(&pWnd->m_evTerminating,FALSE); + if (lock.Lock(1000)) + // Event is set. + return 0; + + DWORD dwResult = 0; + // Check if the application is blocking + if (::SendMessageTimeout(pWnd->GetSafeHwnd(), WM_NULL, 0, 0, SMTO_ABORTIFHUNG | SMTO_NORMAL, 1000, &dwResult)==0) + { + // Exit the current process + ::ExitProcess(10); + } + } +} + +BOOL CPTZControlDlg::OnInitDialog() +{ + __super::OnInitDialog(); + + // Set the icon for this dialog. The framework does this automatically + // when the application's main window is not a dialog + SetIcon(m_hIcon, TRUE); // Set big icon + SetIcon(m_hIcon, FALSE); // Set small icon + + // Load the bitmap + { + CMFCToolBarImages images; + images.SetImageSize(CSize(16, 16)); + images.Load(IDB_BUTTONS); + + int iImage = 0; + CPTZButton* apButtons[] = + { + &m_btDown, + &m_btLeft, + &m_btRight, + &m_btUp, + &m_btHome, + &m_btZoomIn, + &m_btZoomOut, + &m_btMemory, + &m_btPreset[0], + &m_btPreset[1], + &m_btPreset[2], + &m_btPreset[3], + &m_btPreset[4], + &m_btPreset[5], + &m_btPreset[6], + &m_btPreset[7], + &m_btExit, + &m_btSettings, + &m_btWebCam[0], + &m_btWebCam[1], + }; + for (auto* pBtn : apButtons) + { + HICON hIcon = images.ExtractIcon(iImage++); + pBtn->SetImage(hIcon); + // we have a graphic now, we skip the text + pBtn->SetWindowText(_T("")); + } + } + + // Set auto repeat buttons + m_btLeft.SetAutoRepeat(true); + m_btRight.SetAutoRepeat(true); + m_btDown.SetAutoRepeat(true); + m_btUp.SetAutoRepeat(true); + m_btZoomIn.SetAutoRepeat(true); + m_btZoomOut.SetAutoRepeat(true); + + // This is a check box style + m_btMemory.SetCheckStyle(); + for (auto &btn : m_btWebCam) + btn.SetCheckStyle(); + + // First Center + CenterWindow(); + + // Adjust the window + CRect rect; + GetWindowRect(rect); + CPoint pt = rect.TopLeft(); + rect.OffsetRect(-pt); + pt.x = theApp.GetProfileInt(REG_WINDOW,REG_WINDOW_POSX,pt.x); + pt.y = theApp.GetProfileInt(REG_WINDOW,REG_WINDOW_POSY,pt.y); + rect.OffsetRect(pt); + AdjustVisibleWindowRect(rect); + + // Move it + SetWindowPos(&CWnd::wndTopMost, rect.left, rect.top, 0, 0, SWP_NOSIZE); + + // Try to find the Device list + CStringArray aDevices; + CWebcamController::ListDevices(aDevices); + + auto OpenWebCam = [](CWebcamController& webCam, CString strDevToken)->bool + { + HRESULT hr = webCam.OpenDevice(CComBSTR(strDevToken), 0, 0); + if (FAILED(hr)) + { + AfxMessageBox(IDP_ERR_OPENFAILED); + return false; + } + + // Load the default setting + webCam.UseLogitechMotionControl(theApp.GetProfileInt(REG_DEVICE, REG_USELOGOTECHMOTIONCONTROL, FALSE) != 0); + webCam.SetMotorIntervalTimer(theApp.GetProfileInt(REG_DEVICE, REG_MOTORINTERVALTIMER, DEFAULT_MOTOR_INTERVAL_TIMER)); + return true; + }; + + // Find the devices to search for. We have some default devices if no other is set in + // the registry o on the command line. +CStringArray aStrCameraNameToSearch; + aStrCameraNameToSearch.Add(DEFAULT_DEVICE_NAME_1); + aStrCameraNameToSearch.Add(DEFAULT_DEVICE_NAME_2); + CString strCameraNameToSearch = theApp.GetProfileString(REG_DEVICE,REG_DEVICENAME,_T("")); + if (!strCameraNameToSearch.IsEmpty()) + aStrCameraNameToSearch.Add(strCameraNameToSearch); + if (!theApp.m_strDevName.IsEmpty()) + aStrCameraNameToSearch.Add(theApp.m_strDevName); + + // Search for the PTZ PRO 2 + CString strDevToken, strCameras; + for (int i = 0; i0) + SetActiveCam(0); + } + else + { + // Reset the cameras to home position. and leave the first camera + // (index 0) the active one ((loop backwards). + for (int i = m_iNumWebCams; i > 0; --i) + { + SetActiveCam(i - 1); + OnBtHome(); + } + } + + return FALSE; +} + +// If you add a minimize button to your dialog, you will need the code below +// to draw the icon. For MFC applications using the document/view model, +// this is automatically done for you by the framework. + +void CPTZControlDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // device context for painting + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); + + // Center icon in client rectangle + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // Draw the icon + dc.DrawIcon(x, y, m_hIcon); + } + else + { + __super::OnPaint(); + } +} + +// The system calls this function to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CPTZControlDlg::OnQueryDragIcon() +{ + return static_cast(m_hIcon); +} + +LRESULT CPTZControlDlg::OnNcHitTest(CPoint point) +{ + // Allow drag & drop + LRESULT lResult = __super::OnNcHitTest(point); + if (lResult == HTCLIENT) + lResult = HTCAPTION; + return lResult; +} + +void CPTZControlDlg::OnClose() +{ + CRect rect; + GetWindowRect(rect); + theApp.WriteProfileInt(REG_WINDOW,REG_WINDOW_POSX,rect.left); + theApp.WriteProfileInt(REG_WINDOW,REG_WINDOW_POSY,rect.top); + + DestroyWindow(); +} + +void CPTZControlDlg::OnBtExit() +{ + PostMessage(WM_CLOSE); +} + + +void CPTZControlDlg::OnOK() +{ + // Ignore +} + + +void CPTZControlDlg::OnCancel() +{ + // Ignore +} + + + +void CPTZControlDlg::OnBtMemory() +{ + ResetAllColors(); + bool bCheck = !m_btMemory.GetCheck(); + m_btMemory.SetCheck(bCheck); + if (bCheck) + { + // Remember the mem button, but clear it after some delay. + m_btMemory.SetFaceColor(COLOR_RED, TRUE); + SetTimer(TIMER_CLEAR_MEMORY,CLEAR_MEMORY_DELAY,nullptr); + } + else + m_btMemory.SetFaceColor(COLORREF(-1),TRUE); +} + +BEGIN_MESSAGE_MAP(CPTZButton, CMFCButton) + ON_WM_LBUTTONDOWN() + ON_WM_TIMER() + ON_WM_LBUTTONUP() +END_MESSAGE_MAP() + + +BOOL CPTZControlDlg::OnBtPreset(UINT nId) +{ + UINT uiPreset = 0; + while (uiPreset(m_btPreset[uiPreset].GetDlgCtrlID())==nId) + break; + ++uiPreset; + } + + if (uiPresetSetFaceColor(COLOR_GREEN,TRUE); + } + return TRUE; +} + +BOOL CPTZControlDlg::OnBtWebCam(UINT nId) +{ + SetActiveCam(nId==IDC_BT_WEBCAM1 ? 0 : 1); + return 1; +} + +void CPTZControlDlg::OnBtHome() +{ + ResetAllColors(); + GetCurrentWebCam().GotoHome(); + m_btHome.SetFaceColor(COLOR_GREEN,TRUE); +} + + +void CPTZControlDlg::OnBtZoomIn() +{ + ResetAllColors(); + GetCurrentWebCam().Zoom(1); +} + + +void CPTZControlDlg::OnBtZoomOut() +{ + ResetAllColors(); + GetCurrentWebCam().Zoom(-1); +} + + +void CPTZControlDlg::OnBtDown() +{ + ResetAllColors(); + if (m_btDown.InAutoRepeat()) + GetCurrentWebCam().Tilt(-1); + else + GetCurrentWebCam().MoveTilt(-1); +} + +void CPTZControlDlg::OnBtUp() +{ + ResetAllColors(); + if (m_btUp.InAutoRepeat()) + GetCurrentWebCam().Tilt(1); + else + GetCurrentWebCam().MoveTilt(1); +} + + +void CPTZControlDlg::OnBtLeft() +{ + ResetAllColors(); + if (m_btLeft.InAutoRepeat()) + GetCurrentWebCam().Pan(-1); + else + GetCurrentWebCam().MovePan(-1); +} + + +void CPTZControlDlg::OnBtRight() +{ + ResetAllColors(); + if (m_btRight.InAutoRepeat()) + GetCurrentWebCam().Pan(1); + else + GetCurrentWebCam().MovePan(1); +} + + +void CPTZControlDlg::OnSetFocus(CWnd* pOldWnd) +{ + // Do nothing. Never set the focus to a child. + UNUSED_ALWAYS(pOldWnd); +} + + + +void CPTZControlDlg::OnTimer(UINT_PTR nIDEvent) +{ + if (nIDEvent == TIMER_FOCUS_CHECK) + { + CWnd* pWndFocus = GetFocus(); + if (pWndFocus && + pWndFocus->GetParent()==this && + (GetAsyncKeyState(VK_LBUTTON) & 0x8000)==0) + // only move the focus, when a button has the focus and the mouse is not down. + SetFocus(); + } + else if (nIDEvent == TIMER_CLEAR_MEMORY) + { + // Clear the mem button after some delay + ResetMemButton(); + } + + __super::OnTimer(nIDEvent); +} + +void CPTZControlDlg::OnBtUnpushed() +{ + GetCurrentWebCam().Pan(0); + GetCurrentWebCam().Tilt(0); +} + +void CPTZControlDlg::OnBtSettings() +{ + CSettingsDlg dlg; + dlg.m_strCameraName = m_strCameraDeviceName; + dlg.m_bLogitechCameraControl = GetCurrentWebCam().UseLogitechMotionControl(); + dlg.m_iMotorIntervalTimer = GetCurrentWebCam().GetMotorIntervalTimer(); + + // Get a copy of the tooltips + for (int i = 0; i < CWebcamController::NUM_PRESETS; ++i) + { + for (int j = 0; j < CPTZControlDlg::NUM_MAX_WEBCAMS; ++j) + { + dlg.m_strTooltip[j][i] = m_strTooltips[j][i]; + } + } + + if (dlg.DoModal()!=IDOK) + return; + + // Copy back and save + for (int i = 0; i < CWebcamController::NUM_PRESETS; ++i) + { + for (int j = 0; j < CPTZControlDlg::NUM_MAX_WEBCAMS; ++j) + { + m_strTooltips[j][i] = dlg.m_strTooltip[j][i]; + CString str; + str.Format(REG_TOOLTIP, i + 1 + j*100); + theApp.WriteProfileString(REG_WINDOW, str, m_strTooltips[j][i]); + } + } + + // Camera control + GetCurrentWebCam().UseLogitechMotionControl(dlg.m_bLogitechCameraControl!=0); + theApp.WriteProfileInt(REG_DEVICE, REG_USELOGOTECHMOTIONCONTROL, dlg.m_bLogitechCameraControl); + GetCurrentWebCam().SetMotorIntervalTimer(dlg.m_iMotorIntervalTimer); + theApp.WriteProfileInt(REG_DEVICE, REG_USELOGOTECHMOTIONCONTROL, dlg.m_bLogitechCameraControl); + + // Set tooltips again + SetActiveCam(m_iCurrentWebCam); +} + diff --git a/PTZControl/PTZControlDlg.h b/PTZControl/PTZControlDlg.h new file mode 100644 index 0000000..e3e7318 --- /dev/null +++ b/PTZControl/PTZControlDlg.h @@ -0,0 +1,151 @@ + +// PTZControlDlg.h : header file +// + +#pragma once +#include "resource.h" +#include "ExtensionUnit.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// CPTZButton + +class CPTZButton : public CMFCButton +{ +DECLARE_DYNAMIC(CPTZButton) +public: + CPTZButton(); + void SetCheckStyle() + { + m_bCheckButton = TRUE; + m_bAutoCheck = FALSE; + } + + void SetAutoRepeat(bool bVal) + { + m_bAutoRepeat = bVal; + } + bool InAutoRepeat() + { + return m_uiSent!=0; + } + COLORREF GetFaceColor() + { + return m_clrFace; + } + + void SetTooltip(LPCTSTR lpszToolTipText) + { + // We keep an internal copy of the tooltip + m_strTooltip = lpszToolTipText; + __super::SetTooltip(lpszToolTipText); + } + CString GetTooltip() + { + return m_strTooltip; + } + +protected: +// Data + bool m_bAutoRepeat; + UINT m_uiSent; + CString m_strTooltip; + +protected: + void PreSubclassWindow() override; + void OnDrawBorder(CDC* pDC, CRect& rectClient, UINT uiState) override; + void OnDrawFocusRect(CDC* pDC, const CRect& rectClient) override; + +public: + DECLARE_MESSAGE_MAP() + afx_msg void OnLButtonDown(UINT nFlags, CPoint point); + afx_msg void OnTimer(UINT_PTR nIDEvent); + afx_msg void OnLButtonUp(UINT nFlags, CPoint point); +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// CPTZControlDlg dialog + +class CPTZControlDlg : public CDialogEx +{ +// Construction +public: + CPTZControlDlg(CWnd* pParent = nullptr); // standard constructor + ~CPTZControlDlg(); +// Dialog Data + enum { IDD = IDD_PTZCONTROL_DIALOG }; + static const int NUM_MAX_WEBCAMS = 2; + +protected: + CPTZButton m_btZoomIn; + CPTZButton m_btZoomOut; + CPTZButton m_btUp; + CPTZButton m_btDown; + CPTZButton m_btHome; + CPTZButton m_btLeft; + CPTZButton m_btRight; + CPTZButton m_btMemory; + CPTZButton m_btPreset[CWebcamController::NUM_PRESETS]; + CPTZButton m_btExit; + CPTZButton m_btSettings; + CPTZButton m_btWebCam[NUM_MAX_WEBCAMS]; + +// The controller + CWebcamController m_aWebCams[NUM_MAX_WEBCAMS]; + +// Map to save the colors of the buttons per Webcam + typedef std::map TMAP_BTNCOLORS; + TMAP_BTNCOLORS m_aMapBtnColors[NUM_MAX_WEBCAMS]; + +// Tooltips per WebCam + CString m_strTooltips[NUM_MAX_WEBCAMS][CWebcamController::NUM_PRESETS]; + + HACCEL m_hAccel; + CString m_strCameraDeviceName; + int m_iCurrentWebCam; // zero based index to m_aWebCams + int m_iNumWebCams; + + void ResetAllColors(); + CWebcamController &GetCurrentWebCam(); + void SetActiveCam(int iCam); + + // Guard thread + CEvent m_evTerminating; + CWinThread* m_pGuardThread; + static UINT AFX_CDECL GuardThread(LPVOID hWnd); // AFX_THREADPROC + +// Implementation +protected: + HICON m_hIcon; + + // Generated message map functions + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); + virtual void PostNcDestroy(); + virtual void OnOK(); + virtual void OnCancel(); + virtual BOOL PreTranslateMessage(MSG* pMsg); + virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam) override; + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() + afx_msg void OnBtExit(); + afx_msg void OnClose(); + afx_msg LRESULT OnNcHitTest(CPoint point); + afx_msg void OnBtMemory(); + afx_msg BOOL OnBtPreset(UINT nId); + + void ResetMemButton(); + + afx_msg BOOL OnBtWebCam(UINT nId); + afx_msg void OnSetFocus(CWnd* pOldWnd); + afx_msg void OnBtZoomIn(); + afx_msg void OnBtZoomOut(); + afx_msg void OnBtUp(); + afx_msg void OnBtLeft(); + afx_msg void OnBtHome(); + afx_msg void OnBtRight(); + afx_msg void OnBtDown(); + afx_msg void OnTimer(UINT_PTR nIDEvent); + afx_msg void OnBtUnpushed(); + afx_msg void OnBtSettings(); +}; diff --git a/PTZControl/SettingsDlg.cpp b/PTZControl/SettingsDlg.cpp new file mode 100644 index 0000000..caefd90 --- /dev/null +++ b/PTZControl/SettingsDlg.cpp @@ -0,0 +1,77 @@ +// SettingsDlg.cpp : implementation file +// + +#include "pch.h" +#include "PTZControl.h" +#include "SettingsDlg.h" +#include "afxdialogex.h" + + +// CSettingsDlg dialog + +IMPLEMENT_DYNAMIC(CSettingsDlg, CDialogEx) + +CSettingsDlg::CSettingsDlg(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_SETTINGS, pParent) + , m_bLogitechCameraControl(FALSE) + , m_iMotorIntervalTimer(0) +{ + +} + +CSettingsDlg::~CSettingsDlg() +{ +} + +void CSettingsDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Text(pDX, IDC_ED_CAMERA, m_strCameraName); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_1, m_strTooltip[0][0]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_2, m_strTooltip[0][1]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_3, m_strTooltip[0][2]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_4, m_strTooltip[0][3]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_5, m_strTooltip[0][4]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_6, m_strTooltip[0][5]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_7, m_strTooltip[0][6]); + DDX_Text(pDX, IDC_ED_TOOLTIP_1_8, m_strTooltip[0][7]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_1, m_strTooltip[1][0]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_2, m_strTooltip[1][1]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_3, m_strTooltip[1][2]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_4, m_strTooltip[1][3]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_5, m_strTooltip[1][4]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_6, m_strTooltip[1][5]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_7, m_strTooltip[1][6]); + DDX_Text(pDX, IDC_ED_TOOLTIP_2_8, m_strTooltip[1][7]); + DDX_Check(pDX, IDC_CH_LOGITECHCONTROL, m_bLogitechCameraControl); + DDX_Text(pDX, IDC_ED_MOTORTIME, m_iMotorIntervalTimer); + DDX_Control(pDX, IDC_ED_MOTORTIME, m_edMotorInterval); + DDX_Control(pDX, IDC_CH_LOGITECHCONTROL, m_chLogitechControl); + if (pDX->m_bSaveAndValidate) + m_iMotorIntervalTimer = min(max(10,m_iMotorIntervalTimer),1000); +} + + +BEGIN_MESSAGE_MAP(CSettingsDlg, CDialogEx) + ON_BN_CLICKED(IDC_CH_LOGITECHCONTROL, &CSettingsDlg::OnChLogitechcontrol) +END_MESSAGE_MAP() + + +// CSettingsDlg message handlers + + +void CSettingsDlg::OnChLogitechcontrol() +{ + m_edMotorInterval.EnableWindow(!m_chLogitechControl.GetCheck()); +} + + +BOOL CSettingsDlg::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + OnChLogitechcontrol(); + + CenterWindow(); + return TRUE; +} diff --git a/PTZControl/SettingsDlg.h b/PTZControl/SettingsDlg.h new file mode 100644 index 0000000..44fefbe --- /dev/null +++ b/PTZControl/SettingsDlg.h @@ -0,0 +1,34 @@ +#pragma once + +#include "ExtensionUnit.h" +#include "PTZControlDlg.h" + +// CSettingsDlg dialog + +class CSettingsDlg : public CDialogEx +{ + DECLARE_DYNAMIC(CSettingsDlg) + +public: + CSettingsDlg(CWnd* pParent = nullptr); // standard constructor + virtual ~CSettingsDlg(); + +// Dialog Data +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_SETTINGS }; +#endif +public: + CString m_strCameraName; + CString m_strTooltip[CPTZControlDlg::NUM_MAX_WEBCAMS][CWebcamController::NUM_PRESETS]; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + DECLARE_MESSAGE_MAP() +public: + BOOL m_bLogitechCameraControl; + int m_iMotorIntervalTimer; + afx_msg void OnChLogitechcontrol(); + CEdit m_edMotorInterval; + CButton m_chLogitechControl; + virtual BOOL OnInitDialog(); +}; diff --git a/PTZControl/framework.h b/PTZControl/framework.h new file mode 100644 index 0000000..c700568 --- /dev/null +++ b/PTZControl/framework.h @@ -0,0 +1,31 @@ +#pragma once + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +#include "targetver.h" + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include // MFC core and standard components +#include // MFC extensions + +#ifndef _AFX_NO_OLE_SUPPORT +#include // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + +#include // MFC support for ribbons and control bars +#include + +#include +#include +#include +#include + diff --git a/PTZControl/pch.cpp b/PTZControl/pch.cpp new file mode 100644 index 0000000..64b7eef --- /dev/null +++ b/PTZControl/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/PTZControl/pch.h b/PTZControl/pch.h new file mode 100644 index 0000000..885d5d6 --- /dev/null +++ b/PTZControl/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/PTZControl/res/CameraControl.bmp b/PTZControl/res/CameraControl.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8437d55a7f473c3699acd63144429c4d0415c8d1 GIT binary patch literal 20534 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 literal 0 HcmV?d00001 diff --git a/PTZControl/res/PTZControl.ico b/PTZControl/res/PTZControl.ico new file mode 100644 index 0000000000000000000000000000000000000000..0007556ff4cd8263b1c1de5287af8e300e2eef92 GIT binary patch literal 198784 zcmdSA1y@`_(=Iw#Z~_AacXzkoGPnoV;O_1c+@0Va9D=(gxVu|$f(-6*Cg1yh>#lXz z`2(kCdbjQA>S?L2u6_ytfC8Wb(9zK$AuNCv3IJFH{Kr875CFWD0Kgk0kChbwDMtX5 zp#cEg)c^n~>3`D*0KjGk0Dz18pY-qt03fU%0IBakX-hZ&KymDU>mvnxE(ZXbrvZS# zz<=eW09phnz=anSKt$xfX)#D$!O;JuM+zvT0sut%q5n${l7`fKbPWApdZd5|L;xV+ z3HrbENCB3xkl(|?0B9j3A+JIx{Hqs|32}k{^ZdU(ASM3_0|WmPK%S5�LU;dwU@T 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⁡$Y3z1k@dd%y1cKOTgOL#Zw{1u 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 literal 0 HcmV?d00001 diff --git a/PTZControl/resource.h b/PTZControl/resource.h new file mode 100644 index 0000000..53c53e3 --- /dev/null +++ b/PTZControl/resource.h @@ -0,0 +1,66 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by PTZControl.rc +// +#define IDD_PTZCONTROL_DIALOG 102 +#define IDD_PTZCONTROL 102 +#define IDR_MAINFRAME 128 +#define IDB_BUTTONS 130 +#define IDP_ERR_NO_CAMERA 131 +#define IDP_ERR_OPENFAILED 132 +#define IDR_ACCELERATOR 132 +#define IDD_SETTINGS 133 +#define IDP_TXT_CAMERAS 133 +#define IDC_BT_LEFT 1000 +#define IDC_BT_RIGHT 1001 +#define IDC_CHECK1 1001 +#define IDC_CH_LOGITECHCONTROL 1001 +#define IDC_BT_UP 1002 +#define IDC_ED_TOOLTIP_1_1 1002 +#define IDC_BT_DOWN 1003 +#define IDC_ED_TOOLTIP_1_2 1003 +#define IDC_BT_HOME 1004 +#define IDC_ED_TOOLTIP_1_3 1004 +#define IDC_BT_MEMORY 1005 +#define IDC_ED_TOOLTIP_1_4 1005 +#define IDC_BT_PRESET1 1006 +#define IDC_ED_TOOLTIP_1_5 1006 +#define IDC_BT_PRESET2 1007 +#define IDC_ED_TOOLTIP_1_6 1007 +#define IDC_BT_PRESET3 1008 +#define IDC_ED_TOOLTIP_1_7 1008 +#define IDC_BT_PRESET4 1009 +#define IDC_ED_TOOLTIP_1_8 1009 +#define IDC_BT_PRESET5 1010 +#define IDC_ED_CAMERA 1010 +#define IDC_BT_PRESET6 1011 +#define IDC_EDIT1 1011 +#define IDC_ED_MOTORTIME 1011 +#define IDC_BT_PRESET7 1012 +#define IDC_ED_TOOLTIP_2_1 1012 +#define IDC_BT_PRESET8 1013 +#define IDC_ED_TOOLTIP_2_2 1013 +#define IDC_BT_ZOOM_IN 1014 +#define IDC_ED_TOOLTIP_2_3 1014 +#define IDC_BT_ZOOM_OUT 1015 +#define IDC_ED_TOOLTIP_2_4 1015 +#define IDC_BT_EXIT 1016 +#define IDC_ED_TOOLTIP_2_5 1016 +#define IDC_BT_SETTINGS 1017 +#define IDC_ED_TOOLTIP_2_6 1017 +#define IDC_BT_WEBCAM1 1018 +#define IDC_ED_TOOLTIP_2_7 1018 +#define IDC_BT_WEBCAM2 1019 +#define IDC_ED_TOOLTIP_2_8 1019 +#define DC_BT_SETTINGS 32791 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 135 +#define _APS_NEXT_COMMAND_VALUE 32793 +#define _APS_NEXT_CONTROL_VALUE 1012 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/PTZControl/targetver.h b/PTZControl/targetver.h new file mode 100644 index 0000000..87c0086 --- /dev/null +++ b/PTZControl/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/README.md b/README.md index 084adbe..a56113e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,90 @@ # PTZControl - Pan Tilt Zoom Control for Logitech PTZ2 Pro and Rally cameras + +## History +This small program is designed to control a Logitech PTZ 2 Pro. The camera was purchased to stream our church services. +Unfortunately, it quickly turned out that the operation with the remote control is possible but cumbersome and inaccurate, since the camera was installed directly behind and above the video technician. So I made the decision to build a corresponding control program. +Some month later we bought a second camera and the program was extended by the function to control another camera. A maximum of two cameras are supported. +And finally I added support for the Logitech Rally. + +## Used interfaces +The program directly uses the camera media control via the Windows SDK (see links in the source code). +For controlling the zoom functions and the preset functions of the PTZ 2 Pro, Logitech provided me with some example code with defines from the Lync driver. +Logitech internal interfaces are used for: +- Saving the presets, +- Getting the presets +- For step-by-step Pan Tilt camera control (see also the settings dialog: Check "Use LogitechCamera Motion Control") + +Standard controls from the Windows Driver API are used +- For zoom control +- For the timer-controlled PT (Pan Tilt) control (see Settings: no check mark at "Use Logitech Camera Motion Control")This control is the standard. + +The program supports tooltips that and you can define them yourself to give the camera presets useful names. (Separate for each camera) + +## Used environment and libraries +I used the Visual Studoi 2019 Community Edition to develop this program with C++. +MFC and ATL as the library. No additional software is used. +The EXE runs alone, without installing any other files. + +## Behaviour +The program is always in the foreground and has been designed relatively compact and small, so that you can hover somewhere over your OBS program and it is really easy to use. +Current selected preset or home position are shown with a green background on the buttons. +Recalling a presets are simply done by clicking on one of the number buttons. +Presets are changed by pressing the M button (Memory) followed by a number key. The M button turns red as long as it is active. + +The program remembers its last position on the screen and is automatically repositioned to when it is started. +All settings are stored in the registry under the branch `HKEY_CURRENT_USER\SOFTWARE\MRi-Software\PTZControl`. +See the command line secion too. + +### Supported Cameras +Currently, the Logitech PTZ 2 Pro and Logitech Rally cameras are automatically detected. +For other cameras, you can try to force detection by specifying the name (or part of the name) of the cameras in the registry or on the command line. + +Internally, all cameras that have one of the following tokens in the name are automatically used: +- *PTZ 2 Pro* +- *Logi Rally* + +### Guard Thread +Unfortunately, we have sometimes had the experience that OBS or the USB bus hangs with a camera. The PTZControl program then usually stops and stops responding because the camera control commands block the application. +Through an internal guard thread, the application can determine that it is no longer working correctly and terminates automatically. +Otherwise you would have to use the task manager and this can take a lot of time to terminate the application in the hustle and bustle of a livestream. + +### Logitech Motion Control +The Logitech cameras have their own interface for pan/tilt control. This moves the camera in X/Y Axe by a certain step value, This control is a special Logitech feature. +If you click on a direction button once, exactly one step pulse is output. +If you hold down a direction button, a pulse is sent to the camera again and again at a certain interval to change the direction. + +### Standard Motion Control +This control is the standard when you start the application for the first time. +I have made the experience that this Logitech motion control is a bit rough. Via the normal device control, a pan/tilt is also possible in corresponding motor commands for X/Y direction. This is done in turning on the motor for a specific time interval and turning it off again. +Accordingly, you can adjust the timer interval for Motor on/off accordingly. The default is 70msec. Values between 70 and 100 or goiod values. +If you click on a direction button once, the motor is turned on and off again after the corresponding interval. +If the direction button remains pressed, the motor remains switched on for the corresponding direction until the button is released again. +This control seems more effective and accurate to me and is the standard. The disadvantage is that if the timer interval is too small, the camera does not react immediately when a button is clicked. But since precision was more important to me because our camera is installed relatively far away from the podium, I use this setting with a 70msec timer. + +## Command Line Options +A few options can be set from the command line. Command-line switches override the settings in the registry. + +**-device:"name of device"** +The device option can be used to specify a name component of a camera to be used for control. +If you enter "*" as the name, then each camera will be recognized. + +**-showdevices** +Displays a message box after startup showing the name(s) of the detected cameras. + +**-noreset** +At startup, a detected camera is moved to the home position (Logitech Preset) and the zoom is reset to maximum wide angle. If the -noreset option is specified, the camera position remains unchanged. + +**-noguard** +-noguard prevents the application from terminating itself in a controlled manner. This can be especially important in the event of a bug and for testing. + +## Registry +In the registry branch `HKEY_CURRENT_USER\SOFTWARE\MRi-Software\PTZControl\Options` it is possible to preset the following options without using the command line. + +**NoReset (DWORD value** +*Value <>0:* Has the same function as -noreset on the command line. The current camera and zoom position is maintained when starting the program. Value = 0: When starting the program, you move to the home position and zoom to maximum wide angle. (Default) + +**NoGuard (DWORD value)** +*Value <>0:* The guard thread that may automatically terminate the application is terminated. +*Value = 0:* The guard thread automatically terminates the application if a blocking of the USB bus is detected. (Default) + +