PushToGo on STM32F429-Disco Board
Dependencies: BSP_DISCO_F429ZI LCD_DISCO_F429ZI pushtogo usb
LCDConsole.h
- Committer:
- caoyu@caoyuan9642-desktop.MIT.EDU
- Date:
- 2018-09-23
- Revision:
- 8:f0455a1d4709
- Parent:
- 0:084d1dae2ea1
File content as of revision 8:f0455a1d4709:
/* * LCDStreamHandle.h * * Created on: 2018Äê2ÔÂ25ÈÕ * Author: caoyuan9642 */ #ifndef LCDCONSOLE_H_ #define LCDSTREAMHANDLE_H_ #include "mbed.h" #include "LCD_DISCO_F429ZI.h" class LCDConsole: public FileLike { protected: static int* buffer; // The first 3 byets of each int contain its color, and last byte contain the content static int *head, *tail; static Mutex mutex; static LCD_DISCO_F429ZI lcd; static Thread thread; static bool inited; static int x0, y0, width, height; static int textwidth, textheight, buffersize; static Semaphore sem_update; uint32_t color; static void task_thread(); public: static void init(int x0, int y0, int width, int height); /** Redirects the stdout the stderr * @param tolcd If true, stdout and stderr will be redirected to the console. * If false, it will be redirected back to serial */ static void redirect(bool tolcd); static LCD_DISCO_F429ZI &getLCD() { return lcd; } // Can initialize multiple instances LCDConsole(const char *name, uint32_t color); virtual ~LCDConsole() { } /** Read the contents of a file into a buffer * * Devices acting as FileHandles should follow POSIX semantics: * * * if no data is available, and non-blocking set return -EAGAIN * * if no data is available, and blocking set, wait until some data is available * * If any data is available, call returns immediately * * @param buffer The buffer to read in to * @param size The number of bytes to read * @return The number of bytes read, 0 at end of file, negative error on failure */ virtual ssize_t read(void *buffer, size_t size); /** Write the contents of a buffer to a file * * Devices acting as FileHandles should follow POSIX semantics: * * * if blocking, block until all data is written * * if no data can be written, and non-blocking set, return -EAGAIN * * if some data can be written, and non-blocking set, write partial * * @param buffer The buffer to write from * @param size The number of bytes to write * @return The number of bytes written, negative error on failure */ virtual ssize_t write(const void *buffer, size_t size); /** Move the file position to a given offset from from a given location * * @param offset The offset from whence to move to * @param whence The start of where to seek * SEEK_SET to start from beginning of file, * SEEK_CUR to start from current position in file, * SEEK_END to start from end of file * @return The new offset of the file, negative error code on failure */ virtual off_t seek(off_t offset, int whence = SEEK_SET); /** Close a file * * @return 0 on success, negative error code on failure */ virtual int close(); /** Check for poll event flags * The input parameter can be used or ignored - the could always return all events, * or could check just the events listed in events. * Call is non-blocking - returns instantaneous state of events. * Whenever an event occurs, the derived class should call the sigio() callback). * * @param events bitmask of poll events we're interested in - POLLIN/POLLOUT etc. * * @returns bitmask of poll events that have occurred. */ virtual short poll(short events) const { // Possible default for real files return POLLOUT; } /** Check if the file in an interactive terminal device * * @return True if the file is a terminal * @return False if the file is not a terminal * @return Negative error code on failure */ virtual int isatty() { return true; } }; #endif /* LCDCONSOLE_H_ */