public void Close()
        {
            if (_IsClosing)
            {
                return;
            }
            _IsClosing = true;

            try
            {
                _UsbDeviceConnection?.Dispose();
                _UsbDevice?.Dispose();
                ReadUsbInterface?.Dispose();
                WriteUsbInterface?.Dispose();

                _UsbDeviceConnection = null;
                _UsbDevice           = null;
                ReadUsbInterface     = null;
                WriteUsbInterface    = null;
            }
            catch (Exception)
            {
                //TODO: Logging
            }

            _IsClosing = false;
        }
        public async Task WriteAsync(byte[] data)
        {
            await _WriteAndReadLock.WaitAsync().ConfigureAwait(false);

            try
            {
                _ = await WriteUsbInterface.WriteAsync(data).ConfigureAwait(false);
            }
            finally
            {
                _ = _WriteAndReadLock.Release();
            }
        }
Beispiel #3
0
        public sealed override void Dispose()
        {
            if (disposed)
            {
                Logger.LogWarning(Messages.WarningMessageAlreadyDisposed, DeviceNumberId);
                return;
            }

            disposed = true;

            Logger.LogInformation(Messages.InformationMessageDisposingDevice, DeviceNumberId);

            Close();

            try
            {
                _UsbDeviceConnection?.Dispose();
                _UsbDevice?.Dispose();
                ReadUsbInterface?.Dispose();
                WriteUsbInterface?.Dispose();

                _UsbDeviceConnection = null;
                _UsbDevice           = null;
                ReadUsbInterface     = null;
                WriteUsbInterface    = null;
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Dispose error DeviceId: {deviceNumberId}", DeviceNumberId);
            }

            _InitializingSemaphoreSlim.Dispose();

            base.Dispose();

            GC.SuppressFinalize(this);
        }
 public Task WriteAsync(byte[] data)
 {
     return(WriteUsbInterface.WriteAsync(data));
 }