Home | History | Annotate | Download | only in Device
      1 /** @file
      2   Constants and declarations for the Interactive IO library.
      3 
      4   Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials are licensed and made available
      6   under the terms and conditions of the BSD License which accompanies this
      7   distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php.
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 **/
     13 #ifndef _INTERACTIVE_IO_H
     14 #define _INTERACTIVE_IO_H
     15 
     16 #include  <sys/EfiSysCall.h>
     17 #include  <sys/termios.h>
     18 #include  <Containers/Fifo.h>
     19 #include  <kfile.h>
     20 
     21 __BEGIN_DECLS
     22 
     23 typedef struct _IIO_Instance  cIIO;
     24 
     25 cIIO * EFIAPI New_cIIO(void);   // Creates a new cIIO structure
     26 
     27 /*  Types of Member functions of the TTY I/O "class". */
     28 typedef void    (EFIAPI *cIIO_Delete)    (cIIO *This);
     29 
     30 typedef ssize_t (EFIAPI *cIIO_Read)      (struct __filedes *filp, size_t BufferSize, VOID *Buffer);
     31 
     32 typedef ssize_t (EFIAPI *cIIO_Write)     (struct __filedes *filp, const char *buf, ssize_t n);
     33 
     34 typedef ssize_t (EFIAPI *cIIO_Echo)      (struct __filedes *filp, wchar_t EChar, BOOLEAN EchoIsOK);
     35 
     36 /** Structure defining an instance of the Interactive I/O "class".  **/
     37 struct _IIO_Instance {
     38   /* ######## Public Functions ######## */
     39   cIIO_Delete      Delete;
     40   cIIO_Read        Read;
     41   cIIO_Write       Write;
     42   cIIO_Echo        Echo;
     43 
     44   /* ######## PRIVATE Data ######## */
     45 
     46   // Wide input buffer -- stdin
     47   cFIFO          *InBuf;
     48 
     49   // Wide output buffer -- stdout
     50   cFIFO          *OutBuf;
     51 
     52   // Attributes for characters in the output buffer
     53   UINT8          *AttrBuf;
     54 
     55   // Wide output buffer -- stderr
     56   cFIFO          *ErrBuf;
     57 
     58   // Character conversion states for the buffers
     59   mbstate_t       OutState;
     60   mbstate_t       ErrState;
     61 
     62   //  Cursor position at beginning of operation
     63   //  and at each character thereafter.
     64   CURSOR_XY       InitialXY;
     65   CURSOR_XY       CurrentXY;
     66 
     67   UINTN           MaxColumn;    // Width of the output device
     68   UINTN           MaxRow;       // Height of the output device
     69 
     70   // termios structure
     71   struct termios  Termio;
     72 };
     73 
     74 // Helper Functions
     75 ssize_t IIO_CanonRead     (struct __filedes *filp);
     76 ssize_t IIO_NonCanonRead  (struct __filedes *filp);
     77 ssize_t IIO_WriteOne      (struct __filedes *filp, cFIFO *Buf, wchar_t InCh);
     78 ssize_t IIO_EchoOne       (struct __filedes *filp, wchar_t InCh, BOOLEAN EchoIsOK);
     79 
     80 __END_DECLS
     81 #endif  /* _INTERACTIVE_IO_H */
     82