123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #ifndef __TERMINAL_H
- #define __TERMINAL_H
- #include "at32f403a_407.h"
- #include "microrl.h"
- #define EOL "\n\r"
- #define COUNT_TERMINAL_INTERFACE 2
- //Function for print on concrete interface
- typedef void (*InterfacePrint)(const char * str);
- typedef struct {
- InterfacePrint print;
- char* description[10];
- } TerminalInterface;
- //-----------------------------------------------------------------------------
- // Базовый класс терминала
- //-----------------------------------------------------------------------------
- typedef enum {
- tc_Black = 0x0, tc_Red, tc_Green, tc_Yello, tc_Blue, tc_Magenta, tc_Cyan, tc_White
- } TextColor;
- class Terminal
- {
- public:
- Terminal();
- virtual void connectCallback();
- void addPrint(InterfacePrint print_func);
- void clearScreen();
- void moveToPos(uint32_t h, uint32_t v);
- void moveToUpLeftCorner();
- void reset();
- void resetAttribute();
- void saveCursorPos();
- void restoreCursorPos();
- void hideCursor();
- void clearCurrentLine();
-
- //Формирование команд терминала
- uint32_t getCommand_MoveToPos(char* res_command, uint32_t& res_size, uint32_t h, uint32_t v);
- uint32_t getCommand_MoveUpNLines(char* res_command, uint32_t& res_size, uint32_t n);
- uint32_t getCommand_MoveDownNLines(char* res_command, uint32_t& res_size, uint32_t n);
- uint32_t getCommand_MoveRightNLines(char* res_command, uint32_t& res_size, uint32_t n);
- uint32_t getCommand_MoveLeftNLines(char* res_command, uint32_t& res_size, uint32_t n);
- uint32_t getCommand_SetTextColor(char* res_command, uint32_t& res_size, TextColor color);
- uint32_t getCommand_UnderlineText(char* res_command, uint32_t& res_size);
- public:
- virtual void configure();
- void insert(int ch);
- void print(const char * str);
- void printl(const char * str);
- void printll(const char * str);
- void eol();
- void printeol();
-
- virtual int execute(int argc, const char * const * argv);
- virtual char ** completion(int argc, const char * const * argv);
- virtual void sigint (void);
-
-
- private:
- InterfacePrint f_print[COUNT_TERMINAL_INTERFACE];
- int m_countPrintFunction;
- microrl_t rl;
- microrl_t * prl;
- };
- //-----------------------------------------------------------------------------
- // Класс таблицы
- //-----------------------------------------------------------------------------
- #define MAX_COL 8
- #define MAX_ROW 10
-
- class Table {
- public:
- Table();
-
- void outToCell(uint8_t col, uint8_t row, const char* str);
- void outToCell(uint8_t col, uint8_t row, uint32_t val);
- void outCellNumber();
- virtual void outStatic();
- void outExternalBorder();
- void outCrossLine(uint8_t row);
- void startUpdate();
- void endUpdate();
- //virtual void refreshData();
-
- void setGeometry(uint8_t x, uint8_t y, uint8_t col, uint8_t row, uint32_t width, ...);
- void setGeometry(uint8_t x, uint8_t y, uint8_t col, uint8_t row, const uint32_t* width);
- private:
- void setPos(uint8_t x, uint8_t y);
- void setSize(uint8_t col, uint8_t row);
- void resetAttributes();
- public:
- void addCellPosAttribute(uint8_t col, uint8_t row);
- void addCellColorAttribute(uint8_t col, uint8_t row, TextColor color);
- void addCellUnderlineAttribute(uint8_t col, uint8_t row);
- inline void clearCellAttributes(uint8_t col, uint8_t row);
- protected:
- inline void addCellAttribute(uint8_t col, uint8_t row, const char* attr);
- private:
- inline void printTopLine(uint32_t& line);
- inline void printCrossLine(uint32_t& line);
- inline void printTextLine(uint32_t& line);
- inline void printBottomLine(uint32_t& line);
- void printFrameLine(uint32_t& line,
- const char* lc, const char* rc,
- const char* cr, const char* ln);
-
- inline void print(const char* str);
- private:
- uint8_t m_x, m_y;
- uint8_t m_col, m_row;
- uint8_t m_width[MAX_COL];
- typedef struct {
- char attributes[40];
- char* text;
- } CellAttribute;
-
- CellAttribute cells[MAX_COL][MAX_ROW];
- };
- extern Terminal* pTerminal;
- char * utoa(uint32_t value);
- char * itoa(int32_t value);
- #endif // __TERMINAL_H
|