123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #include "TFTTerminal.h"
- TFTTerminal::TFTTerminal(TFT_eSprite *dis_buff_ptr) {
- _dis_buff_ptr = dis_buff_ptr;
- memset(discharbuff, 0, 55 * 60);
- }
- TFTTerminal::~TFTTerminal() {}
- void TFTTerminal::setcolor(uint16_t color, uint16_t bk_color) {
- _color = color;
- _bkcolor = bk_color;
- }
- void TFTTerminal::setGeometry(uint16_t x, uint16_t y, uint16_t w, uint16_t h) {
- _win_x_pos = x;
- _win_y_pos = y;
- _win_w = w;
- _win_h = h;
- _line_x_limit = _win_w / _font_x_size;
- _line_y_limit = _win_h / _font_y_size;
- }
- void TFTTerminal::setFontsize(uint8_t size) {
- size = (size == 0) ? 1 : size;
- _font_x_size = 5 * size;
- _font_y_size = 6 * size;
- _fontSize = size;
- _line_x_limit = _win_w / _font_x_size;
- _line_y_limit = _win_h / _font_y_size;
- }
- size_t TFTTerminal::write(uint8_t chardata) {
- bool flush_page_flag = false;
- uint8_t dis_y_pos = 0;
- if ((chardata == '\r') || (chardata == '\n')) {
- xpos = 0;
- ypos++;
- ypos = ypos % 60;
- memset(discharbuff[ypos % 60], 0, 55);
- return 1;
- } else if (xpos >= _line_x_limit) {
- xpos = 0;
- ypos++;
- ypos = ypos % 60;
- memset(discharbuff[ypos % 60], 0, 55);
- }
- discharbuff[ypos][xpos] = chardata;
- xpos++;
- if ((dispos <= ypos) && ((ypos - dispos) > _line_y_limit)) {
- dispos = ypos - _line_y_limit;
- flush_page_flag = true;
- } else if ((dispos <= ypos) && ((ypos - dispos) <= _line_y_limit)) {
- dis_y_pos = ypos - dispos;
- flush_page_flag = false;
- } else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit)) {
- dispos = 60 - (_line_y_limit - ypos);
- flush_page_flag = true;
- } else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit)) {
- dis_y_pos = 60 - (dispos - ypos);
- flush_page_flag = false;
- }
- dispos = dispos % 60;
- _dis_buff_ptr->setTextColor(_color);
- _dis_buff_ptr->setTextSize(_fontSize);
- if (flush_page_flag) {
- _dis_buff_ptr->fillSprite(_bkcolor);
- for (size_t i = 0; i < _line_y_limit; i++) {
- _dis_buff_ptr->drawString((char *)discharbuff[(dispos + i) % 60], 0,
- i * _font_y_size);
- }
- } else {
- _dis_buff_ptr->drawChar(chardata, (xpos - 1) * _font_x_size,
- dis_y_pos * _font_y_size);
- }
- _dis_buff_ptr->pushSprite(_win_x_pos, _win_y_pos);
- return 1;
- }
- size_t TFTTerminal::write(const uint8_t *buffer, size_t size) {
- while ((size != 0) && (*buffer != '\0')) {
- if ((*buffer == '\r') || (*buffer == '\n')) {
- xpos = 0;
- ypos++;
- ypos = ypos % 60;
- memset(discharbuff[ypos % 60], 0, 55);
- buffer++;
- size--;
- continue;
- } else if (xpos >= _line_x_limit) {
- xpos = 0;
- ypos++;
- ypos = ypos % 60;
- memset(discharbuff[ypos % 60], 0, 55);
- }
- discharbuff[ypos][xpos] = *buffer;
- xpos++;
- buffer++;
- size--;
- }
- if ((dispos <= ypos) && ((ypos - dispos) > _line_y_limit)) {
- dispos = ypos - _line_y_limit;
- } else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit)) {
- dispos = 60 - (_line_y_limit - ypos);
- }
- dispos = dispos % 60;
- _dis_buff_ptr->setTextColor(_color);
- _dis_buff_ptr->setTextSize(_fontSize);
- _dis_buff_ptr->fillSprite(_bkcolor);
- //_dis_buff_ptr->fillRect(_win_x_pos, _win_y_pos, _win_w, _win_h, _bkcolor);
- for (size_t i = 0; i < _line_y_limit; i++) {
- _dis_buff_ptr->drawString((char *)discharbuff[(dispos + i) % 60], 0,
- i * _font_y_size);
- }
- _dis_buff_ptr->pushSprite(_win_x_pos, _win_y_pos);
- return 1;
- }
|