summaryrefslogblamecommitdiffstats
path: root/src/include/console.h
blob: fd1382b4a592558bcbfa53f00e76645f4be40670 (plain) (tree)
1
2
3
4
5


                 
                        
 








                                                                      

   












                                                                  
                       

                                

                                                                       



                                                                    
                     



                                                       

                                 

           
                                            
 










                                                                     

                                              
                                 
                                              
                                 





                                                                      
                                  


                                      
                                 

                                                      
                                 




                                                                    


                                
















                                                               
                                                                       





                                      
                           

                      
#ifndef CONSOLE_H
#define CONSOLE_H

#include <gpxe/tables.h>

/** @file
 *
 * User interaction.
 *
 * Various console devices can be selected via the build options
 * CONSOLE_FIRMWARE, CONSOLE_SERIAL etc.  The console functions
 * putchar(), getchar() and iskey() delegate to the individual console
 * drivers.
 *
 */

/**
 * A console driver
 *
 * Defines the functions that implement a particular console type.
 * Must be made part of the console drivers table by using
 * #__console_driver.
 *
 * @note Consoles that cannot be used before their INIT_FN() has
 * completed should set #disabled=1 initially.  This allows other
 * console devices to still be used to print out early debugging
 * messages.
 *
 */
struct console_driver {
	/** Console is disabled.
	 *
	 * The console's putchar(), putline(), getchar() and iskey()
	 * methods will not be called while #disabled==1. Typically the
	 * console's initialisation functions (called via INIT_FN())
	 * will set #disabled=0 upon completion.
	 *
	 */
	int disabled;

	/** Write a character to the console.
	 *
	 * @v character		Character to be written
	 * @ret None		-
	 * @err None		-
	 *
	 */
	void ( *putchar ) ( int character );

	/** Write an entire line to the console.
	 * This is intended to be used by line-oriented output media,
	 * like system logging facilities or line printers.
	 * Line output will not contain non-printable characters.
	 *
	 * @v linebuffer	Pointer to the \0-terminated line
	 * @ret None		-
	 * @err None		-
	 */
	void ( * putline ) ( unsigned char * linebuffer );

	/** Read a character from the console.
	 *
	 * @v None		-
	 * @ret character	Character read
	 * @err None		-
	 *
	 * If no character is available to be read, this method will
	 * block.  The character read should not be echoed back to the
	 * console.
	 *
	 */
	int ( *getchar ) ( void );

	/** Check for available input.
	 *
	 * @v None		-
	 * @ret True		Input is available
	 * @ret False		Input is not available
	 * @err None		-
	 *
	 * This should return True if a subsequent call to getchar()
	 * will not block.
	 *
	 */
	int ( *iskey ) ( void );
};

/**
 * Mark a <tt> struct console_driver </tt> as being part of the
 * console drivers table.
 *
 * Use as e.g.
 *
 * @code
 *
 *   struct console_driver my_console __console_driver = {
 *      .putchar = my_putchar,
 *	.getchar = my_getchar,
 *	.iskey = my_iskey,
 *   };
 *
 * @endcode
 *
 */
#define __console_driver __table ( struct console_driver, console, 01 )

/* Function prototypes */

extern void putchar ( int character );
extern int getchar ( void );
extern int iskey ( void );
extern int getkey ( void );

#endif /* CONSOLE_H */