Removed variables that had no effect on code behavior. Fifo.c::FIFO_Dequeue: Replaced instances of "Self->ElementSize" with preexisting variable "SizeOfElement". IIOutilities.c::IIO_GetInChar: Fixed variable of wrong, but compatible, type and made updating of housekeeping variables dependent upon successful completion of reading from the buffer. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> Reviewed by: Daryl McDaniel <daryl.mcdaniel@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16276 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  NonCanonical Interactive Input Function.
 | 
						|
 | 
						|
  The functions assume that isatty() is TRUE at the time they are called.
 | 
						|
  If _S_IWTTY is set, the device returns WIDE characters.
 | 
						|
 | 
						|
  Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
 | 
						|
  This program and the accompanying materials are licensed and made available
 | 
						|
  under the terms and conditions of the BSD License which accompanies this
 | 
						|
  distribution.  The full text of the license may be found at
 | 
						|
  http://opensource.org/licenses/bsd-license.php.
 | 
						|
 | 
						|
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
**/
 | 
						|
#include  <LibConfig.h>
 | 
						|
 | 
						|
#include  <sys/syslimits.h>
 | 
						|
#include  <sys/termios.h>
 | 
						|
#include  <Containers/Fifo.h>
 | 
						|
#include  <Device/IIO.h>
 | 
						|
 | 
						|
/** Perform a noncanonical read of input.
 | 
						|
 | 
						|
    @param[in]    filp        Pointer to a file descriptor structure.
 | 
						|
    @param[in]    BufferSize  Maximum number of bytes to return.
 | 
						|
 | 
						|
    @retval    -1   An error has occurred.  Reason in errno.
 | 
						|
    @retval    -1   No data returned.  None was ready.
 | 
						|
    @retval    >0   The number of elements returned
 | 
						|
**/
 | 
						|
ssize_t
 | 
						|
IIO_NonCanonRead (
 | 
						|
  struct __filedes *filp
 | 
						|
  )
 | 
						|
{
 | 
						|
  cIIO           *This;
 | 
						|
  cFIFO          *InBuf;
 | 
						|
  struct termios *Termio;
 | 
						|
  ssize_t         NumRead;
 | 
						|
  cc_t            tioMin;
 | 
						|
  cc_t            tioTime;
 | 
						|
  UINT32          InputType;
 | 
						|
  wchar_t         InChar;     // Intermediate character buffer
 | 
						|
 | 
						|
  NumRead = -1;
 | 
						|
  InChar  = 0;      // Initialize so compilers don't complain.
 | 
						|
  This    = filp->devdata;
 | 
						|
  Termio  = &This->Termio;
 | 
						|
  InBuf   = This->InBuf;
 | 
						|
  tioMin  = Termio->c_cc[VMIN];
 | 
						|
  tioTime = Termio->c_cc[VTIME];
 | 
						|
 | 
						|
  if(tioMin >= MAX_INPUT) {
 | 
						|
    tioMin = MAX_INPUT;
 | 
						|
  }
 | 
						|
  /*  There are four types of processing that may be done, based on
 | 
						|
      the values of tioMin and tioTime.
 | 
						|
          Min   Time    Type
 | 
						|
          ---   ----    ----
 | 
						|
           0      0       0   Return buffer contents or 1 new char
 | 
						|
           0     >0       1   Return 0 or 1 character depending on timeout
 | 
						|
          >0      0       2   Buffer Min chars. Return BufferSize chars.
 | 
						|
          >0     >0       3   Return up to Min chars. Unless the inter-byte timer expires.
 | 
						|
 | 
						|
    Currently, only type 0 is implemented.
 | 
						|
  */
 | 
						|
  InputType = 0;
 | 
						|
  if(tioMin   != 0)     InputType = 2;
 | 
						|
  if(tioTime  != 0)   ++InputType;
 | 
						|
  //switch(InputType) {
 | 
						|
  //  case 0:
 | 
						|
      if(InBuf->IsEmpty(InBuf)) {
 | 
						|
        NumRead = filp->f_ops->fo_read(filp, &filp->f_offset, sizeof(wchar_t), &InChar);
 | 
						|
        if(NumRead > 0) {
 | 
						|
          (void) InBuf->Write(InBuf, &InChar, 1);  // Buffer the character
 | 
						|
        }
 | 
						|
      }
 | 
						|
  //    break;
 | 
						|
  //  case 1:
 | 
						|
  //    break;
 | 
						|
  //  case 2:
 | 
						|
  //    break;
 | 
						|
  //  case 3:
 | 
						|
  //    break;
 | 
						|
  //}
 | 
						|
  return NumRead;
 | 
						|
}
 |