//================================================================================================================ /// <summary> /// Enables a callback method to be invoked when a certain condition is met /// </summary> /// <param name="callback">The callback delegate</param> /// <param name="type">The callback type</param> /// <param name="numberOfSamples">The number of samples that will be passed to the callback method</param> //================================================================================================================ public void EnableCallback(InputScanCallbackDelegate callback, CallbackType callbackType, object callbackData) { Monitor.Enter(m_deviceLock); if (callbackType == CallbackType.OnDataAvailable) { if (m_driverInterface.OnDataAvailableCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnDataAvailableCallbackControl = new CallbackControl(this, callback, callbackType, callbackData); } else if (callbackType == CallbackType.OnInputScanComplete) { if (m_driverInterface.OnInputScanCompleteCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnInputScanCompleteCallbackControl = new CallbackControl(this, callback, callbackType, callbackData); } else if (callbackType == CallbackType.OnInputScanError) { if (m_driverInterface.OnInputScanErrorCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnInputScanErrorCallbackControl = new CallbackControl(this, callback, callbackType, callbackData); } //else if (callbackType == CallbackType.OnAcquisitionArmed) //{ // if (m_driverInterface.OnInputScanErrorCallbackControl != null) // { // DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); // throw dex; // } // m_driverInterface.OnAcquisitionArmedCallbackControl = new CallbackControl(this, callback, callbackType, callbackData); //} Monitor.Exit(m_deviceLock); }
//======================================================================================================== /// <summary> /// ctor - for use with setting up a callback for an input scan /// </summary> /// <param name="daqDevice">A DaqDevice object</param> /// <param name="numberOfSamples">The number of samples to pass to each callback </param> /// <param name="callback">A InputScanCallbackDelegate</param> //======================================================================================================== internal CallbackControl(DaqDevice daqDevice, InputScanCallbackDelegate callback, CallbackType type, object callbackData) { InitializeComponent(); m_daqDevice = daqDevice; if (type == CallbackType.OnDataAvailable) { try { m_numberOfSamples = (int)callbackData; } catch (Exception) { System.Diagnostics.Debug.Assert(false, "OnDataAvailable callback data is not the correct data type"); } } m_callback = callback; m_type = type; }
public void EnableCallback(InputScanCallbackDelegate callback, CallbackType callbackType, object callbackData, bool executeOnUIThread) { Monitor.Enter(m_deviceLock); if (callbackType == CallbackType.OnDataAvailable) { if (m_driverInterface.OnDataAvailableCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnDataAvailableCallbackControl = new CallbackControl(this, callback, callbackType, callbackData, executeOnUIThread); } else if (callbackType == CallbackType.OnInputScanComplete) { if (m_driverInterface.OnInputScanCompleteCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnInputScanCompleteCallbackControl = new CallbackControl(this, callback, callbackType, callbackData, executeOnUIThread); } else if (callbackType == CallbackType.OnInputScanError) { if (m_driverInterface.OnInputScanErrorCallbackControl != null) { DaqException dex = new DaqException(ErrorMessages.CallbackOperationAlreadyEnabled, ErrorCodes.CallbackOperationAlreadyEnabled); throw dex; } m_driverInterface.OnInputScanErrorCallbackControl = new CallbackControl(this, callback, callbackType, callbackData, executeOnUIThread); } Monitor.Exit(m_deviceLock); }