/// <summary> /// Creates a new Camera from a Device. /// </summary> /// <param name="device">The device </param> /// <returns>The newly created Camera</returns> /// <exception cref="ArgumentNullException">The Device supplied is null</exception> /// <exception cref="DeviceNotFound"></exception> public static Camera Create(this Device device) { if (null == device) throw new ArgumentNullException(); if (!device.IsPoweredOn) throw new ArgumentException("The device is not powered on"); lock (deviceLock) { // The SpotCam service only allows one camera at a time to be controlled. if (currentCamera != null) currentCamera.HandleDisconnection(DisconnectionReason.ForcedByService); currentCamera = null; currentCamera = new Camera(device); return currentCamera; } }
public static void Reconnect(Camera camera) { if (null == camera) throw new ArgumentNullException(); lock (deviceLock) { ulong devUid = camera.DeviceUid; unsafe { var serviceException = SpotCamService.MakeException(SpotCamService.SpotSetValue(CoreParameter.DeviceUid, new IntPtr(&devUid))); if (serviceException != null) throw new InvalidOperationException("Unable to set the device identifier", serviceException); } SpotCamService.MakeException(SpotCamService.SpotInit()).ThrowIfNotNull(); currentCamera = camera; } camera.HandleConnection(); }
/// <summary> /// Shuts down the factory. Initialize must be called again to restart the factory. /// </summary> public static void Shutdown() { System.Diagnostics.Debug.Assert(SpotCamReturnCode.Success == SpotCamService.SpotShutDown()); currentCamera = null; }