public void SendBytesToDevice() { if (IntPtr.Zero == _ftdi.GetFtHandle()) { _ftdi.SetFtHandle(_ftHandle); } _status = FtcSuccess; uint numBytesSent = 0; uint dwTotalNumBytesSent = 0; if (_dwNumBytesToSend > MaxNumBytesUsbWrite) { do { uint dwNumDataBytesToSend; if (numBytesSent != 0) { var tmp = new byte[_dwNumBytesToSend - dwTotalNumBytesSent]; Buffer.BlockCopy(_byOutputBuffer, (int)numBytesSent, tmp, 0, tmp.Length); ClearOutputBuffer(); Buffer.BlockCopy(tmp, 0, _byOutputBuffer, 0, tmp.Length); if ((dwTotalNumBytesSent + MaxNumBytesUsbWrite) <= _dwNumBytesToSend) { dwNumDataBytesToSend = MaxNumBytesUsbWrite; } else { dwNumDataBytesToSend = (uint)tmp.Length; } } else { if ((dwTotalNumBytesSent + MaxNumBytesUsbWrite) <= _dwNumBytesToSend) { dwNumDataBytesToSend = MaxNumBytesUsbWrite; } else { dwNumDataBytesToSend = _dwNumBytesToSend - dwTotalNumBytesSent; } } _status = (uint)_ftdi.Write(_byOutputBuffer, dwNumDataBytesToSend, ref numBytesSent); dwTotalNumBytesSent = dwTotalNumBytesSent + numBytesSent; }while (dwTotalNumBytesSent < _dwNumBytesToSend && _status == FtcSuccess); } else { _status = (uint)_ftdi.Write(_byOutputBuffer, _dwNumBytesToSend, ref numBytesSent); } _dwNumBytesToSend = 0; }