Exemple #1
0
        private unsafe void _PipeIOCallback(uint errorCode, uint numBytes, NativeOverlapped *pOverlapped)
        {
            try
            {
                Exception error = null;
                if (errorCode != 0)
                {
                    error = new Win32Exception((int)errorCode, "Asynchronous operation on WinUSB device failed.");
                }

                Overlapped        overlapped = Overlapped.Unpack(pOverlapped);
                WinUSBAsyncResult result     = (WinUSBAsyncResult)overlapped.AsyncResult;
                Overlapped.Free(pOverlapped);
                pOverlapped = null;

                result.OnCompletion(false, error, (int)numBytes, true);
            }
            finally
            {
                if (pOverlapped != null)
                {
                    Overlapped.Unpack(pOverlapped);
                    Overlapped.Free(pOverlapped);
                }
            }
        }
Exemple #2
0
        private unsafe void _HandleOverlappedAPI(bool success, string errorMessage, NativeOverlapped *pOverlapped,
                                                 WinUSBAsyncResult result, int bytesTransferred)
        {
            if (!success)
            {
                if (Marshal.GetLastWin32Error() != NativeInterface.ERROR_IO_PENDING)
                {
                    Overlapped.Unpack(pOverlapped);
                    Overlapped.Free(pOverlapped);

                    throw new Win32Exception(errorMessage);
                }
            }
            else
            {
                // Immediate success!
                Overlapped.Unpack(pOverlapped);
                Overlapped.Free(pOverlapped);

                result.OnCompletion(true, null, bytesTransferred, false);
            }
        }
Exemple #3
0
        private unsafe void _HandleOverlappedAPI(bool success, string errorMessage, NativeOverlapped* pOverlapped,
      WinUSBAsyncResult result, int bytesTransferred)
        {
            if (!success)
              {
            if (Marshal.GetLastWin32Error() != NativeInterface.ERROR_IO_PENDING)
            {
              Overlapped.Unpack(pOverlapped);
              Overlapped.Free(pOverlapped);

              throw new Win32Exception(errorMessage);
            }
              }
              else
              {
            // Immediate success!
            Overlapped.Unpack(pOverlapped);
            Overlapped.Free(pOverlapped);

            result.OnCompletion(true, null, bytesTransferred, false);
              }
        }