terminal.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #ifndef __TERMINAL_H
  2. #define __TERMINAL_H
  3. #include "at32f403a_407.h"
  4. #include "microrl.h"
  5. #define EOL "\n\r"
  6. #define COUNT_TERMINAL_INTERFACE 2
  7. //Function for print on concrete interface
  8. typedef void (*InterfacePrint)(const char * str);
  9. typedef struct {
  10. InterfacePrint print;
  11. char* description[10];
  12. } TerminalInterface;
  13. //-----------------------------------------------------------------------------
  14. // Базовый класс терминала
  15. //-----------------------------------------------------------------------------
  16. typedef enum {
  17. tc_Black = 0x0, tc_Red, tc_Green, tc_Yello, tc_Blue, tc_Magenta, tc_Cyan, tc_White
  18. } TextColor;
  19. class Terminal
  20. {
  21. public:
  22. Terminal();
  23. virtual void connectCallback();
  24. void addPrint(InterfacePrint print_func);
  25. void clearScreen();
  26. void moveToPos(uint32_t h, uint32_t v);
  27. void moveToUpLeftCorner();
  28. void reset();
  29. void resetAttribute();
  30. void saveCursorPos();
  31. void restoreCursorPos();
  32. void hideCursor();
  33. void clearCurrentLine();
  34. //Формирование команд терминала
  35. uint32_t getCommand_MoveToPos(char* res_command, uint32_t& res_size, uint32_t h, uint32_t v);
  36. uint32_t getCommand_MoveUpNLines(char* res_command, uint32_t& res_size, uint32_t n);
  37. uint32_t getCommand_MoveDownNLines(char* res_command, uint32_t& res_size, uint32_t n);
  38. uint32_t getCommand_MoveRightNLines(char* res_command, uint32_t& res_size, uint32_t n);
  39. uint32_t getCommand_MoveLeftNLines(char* res_command, uint32_t& res_size, uint32_t n);
  40. uint32_t getCommand_SetTextColor(char* res_command, uint32_t& res_size, TextColor color);
  41. uint32_t getCommand_UnderlineText(char* res_command, uint32_t& res_size);
  42. public:
  43. virtual void configure();
  44. void insert(int ch);
  45. void print(const char * str);
  46. void printl(const char * str);
  47. void printll(const char * str);
  48. void eol();
  49. void printeol();
  50. virtual int execute(int argc, const char * const * argv);
  51. virtual char ** completion(int argc, const char * const * argv);
  52. virtual void sigint (void);
  53. private:
  54. InterfacePrint f_print[COUNT_TERMINAL_INTERFACE];
  55. int m_countPrintFunction;
  56. microrl_t rl;
  57. microrl_t * prl;
  58. };
  59. //-----------------------------------------------------------------------------
  60. // Класс таблицы
  61. //-----------------------------------------------------------------------------
  62. #define MAX_COL 8
  63. #define MAX_ROW 10
  64. class Table {
  65. public:
  66. Table();
  67. void outToCell(uint8_t col, uint8_t row, const char* str);
  68. void outToCell(uint8_t col, uint8_t row, uint32_t val);
  69. void outCellNumber();
  70. virtual void outStatic();
  71. void outExternalBorder();
  72. void outCrossLine(uint8_t row);
  73. void startUpdate();
  74. void endUpdate();
  75. //virtual void refreshData();
  76. void setGeometry(uint8_t x, uint8_t y, uint8_t col, uint8_t row, uint32_t width, ...);
  77. void setGeometry(uint8_t x, uint8_t y, uint8_t col, uint8_t row, const uint32_t* width);
  78. private:
  79. void setPos(uint8_t x, uint8_t y);
  80. void setSize(uint8_t col, uint8_t row);
  81. void resetAttributes();
  82. public:
  83. void addCellPosAttribute(uint8_t col, uint8_t row);
  84. void addCellColorAttribute(uint8_t col, uint8_t row, TextColor color);
  85. void addCellUnderlineAttribute(uint8_t col, uint8_t row);
  86. inline void clearCellAttributes(uint8_t col, uint8_t row);
  87. protected:
  88. inline void addCellAttribute(uint8_t col, uint8_t row, const char* attr);
  89. private:
  90. inline void printTopLine(uint32_t& line);
  91. inline void printCrossLine(uint32_t& line);
  92. inline void printTextLine(uint32_t& line);
  93. inline void printBottomLine(uint32_t& line);
  94. void printFrameLine(uint32_t& line,
  95. const char* lc, const char* rc,
  96. const char* cr, const char* ln);
  97. inline void print(const char* str);
  98. private:
  99. uint8_t m_x, m_y;
  100. uint8_t m_col, m_row;
  101. uint8_t m_width[MAX_COL];
  102. typedef struct {
  103. char attributes[40];
  104. char* text;
  105. } CellAttribute;
  106. CellAttribute cells[MAX_COL][MAX_ROW];
  107. };
  108. extern Terminal* pTerminal;
  109. char * utoa(uint32_t value);
  110. char * itoa(int32_t value);
  111. #endif // __TERMINAL_H