Пример #1
0
        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;
        }