private bool SupportFor(KSProperties.CameraControlFeature feature) { KSPropertySupport supported = new KSPropertySupport(); _ksPropertySet.QuerySupported(PROPSETID_VIDCAP_CAMERACONTROL,(int)feature, out supported); return (supported.HasFlag(KSPropertySupport.Set) && supported.HasFlag(KSPropertySupport.Get)); }
private void MoveInternal(KSProperties.CameraControlFeature axis, int value) { // Create and prepare data structures var control = new KSProperties.KSPROPERTY_CAMERACONTROL_S(); IntPtr controlData = Marshal.AllocCoTaskMem(Marshal.SizeOf(control)); IntPtr instData = Marshal.AllocCoTaskMem(Marshal.SizeOf(control.Instance)); control.Instance.Value = value; //TODO: Fix for Absolute control.Instance.Flags = (int)CameraControlFlags.Relative; Marshal.StructureToPtr(control, controlData, true); Marshal.StructureToPtr(control.Instance, instData, true); var hr2 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis, instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control)); //TODO: It's a DC motor, no better way? Thread.Sleep(20); control.Instance.Value = 0; //STOP! control.Instance.Flags = (int)CameraControlFlags.Relative; Marshal.StructureToPtr(control, controlData, true); Marshal.StructureToPtr(control.Instance, instData, true); var hr3 = _ksPropertySet.Set(PROPSETID_VIDCAP_CAMERACONTROL, (int)axis, instData, Marshal.SizeOf(control.Instance), controlData, Marshal.SizeOf(control)); if (controlData != IntPtr.Zero) { Marshal.FreeCoTaskMem(controlData); } if (instData != IntPtr.Zero) { Marshal.FreeCoTaskMem(instData); } }