Пример #1
0
        public bool ReadData(ref byte[] TempData, uint Offset, uint Counter)
        {
            if (GetFIFOCounter() < Counter)
            {
                return(false);
            }
            if ((Offset + Counter) > TempData.Length)
            {
                return(false);
            }

            if ((ReadPointer + Counter) < BufferSize)
            {
                Array.Copy(Data, ReadPointer, TempData, Offset, Counter);
                ReadPointer += Counter;
            }
            else
            {
                uint Size1 = BufferSize - ReadPointer;
                uint Size2 = Counter - Size1;

                Array.Copy(Data, ReadPointer, TempData, Offset, Size1);
                Array.Copy(Data, 0, TempData, Offset + Size1, Size2);

                ReadPointer = Size2;
            }

            ReadCounter += Counter;

            if (UseEvents)
            {
                ReadExecuted.Set();
            }
            return(true);
        }
Пример #2
0
 public void WaitRead()
 {
     if (AbortWaitEvent)
     {
         return;
     }
     ReadExecuted.WaitOne();
 }
Пример #3
0
 public void FlushBuffer()
 {
     ReadCounter      =
         WriteCounter = 0;
     ReadPointer      =
         WritePointer = 0;
     ReadExecuted.Reset();
     WriteExecuted.Reset();
 }
Пример #4
0
 public void AbortWait(bool SetAbort)
 {
     AbortWaitEvent = SetAbort;
     if (SetAbort)
     {
         WriteExecuted.Set();
         ReadExecuted.Set();
     }
 }