123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #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;
- }
|