You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
| #include "serialstream.h"
 | |
| #include "../utils/string.h"
 | |
| 
 | |
| SerialStream::SerialStream(ComPort port, BaudRate baud_rate, DataBits data_bits,
 | |
|                            StopBits stop_bits, Parity parity)
 | |
|     :Serial(port, baud_rate, data_bits, stop_bits, parity) {}
 | |
| 
 | |
| void SerialStream::flush() {
 | |
|   print(buffer, strlen(buffer));
 | |
| }
 | |
| 
 | |
| // https://stackoverflow.com/questions/3440726/what-is-the-proper-way-of-implementing-a-good-itoa-function
 | |
| // Yet, another good itoa implementation
 | |
| // returns: the length of the number string
 | |
| int itoa(int value, char *sp, int radix)
 | |
| {
 | |
|     char tmp[16];// be careful with the length of the buffer
 | |
|     char *tp = tmp;
 | |
|     int i;
 | |
|     unsigned v;
 | |
| 
 | |
|     int sign = (radix == 10 && value < 0);    
 | |
|     if (sign)
 | |
|         v = -value;
 | |
|     else
 | |
|         v = (unsigned)value;
 | |
| 
 | |
|     while (v || tp == tmp)
 | |
|     {
 | |
|         i = v % radix;
 | |
|         v /= radix;
 | |
|         if (i < 10)
 | |
|           *tp++ = i+'0';
 | |
|         else
 | |
|           *tp++ = i + 'a' - 10;
 | |
|     }
 | |
| 
 | |
|     int len = tp - tmp;
 | |
| 
 | |
|     if (sign) 
 | |
|     {
 | |
|         *sp++ = '-';
 | |
|         len++;
 | |
|     }
 | |
| 
 | |
|     while (tp > tmp)
 | |
|         *sp++ = *--tp;
 | |
| 
 | |
|     return len;
 | |
| }
 | |
| 
 | |
| void SerialStream::setForeground(Color c) {
 | |
|     write(0x1b);
 | |
|     write('[');
 | |
|     write('3');
 | |
|     write(c + 0x30);
 | |
|     write('m');
 | |
| }
 | |
| 
 | |
| void SerialStream::setBackground(Color c) { 
 | |
|     write(0x1b);
 | |
|     write('[');
 | |
|     write('4');
 | |
|     write(c + 0x30);
 | |
|     write('m');
 | |
| }
 | |
| 
 | |
| void SerialStream::setAttribute(Attrib a) {
 | |
|     write(0x1b);
 | |
|     write('[');
 | |
|     write(a + 0x30);
 | |
|     write('m');
 | |
| }
 | |
| 
 | |
| void SerialStream::reset() {
 | |
|     write(0x1b);
 | |
|     write('c');
 | |
| }
 | |
| 
 | |
| void SerialStream::setPos(int x, int y) {
 | |
|     char out[] = {0x1b, '[', 0, 0, ';', 0, 0, 'H', 0};
 | |
|     //*this << 0x1b;
 | |
|     //*this << '[';
 | |
|     //*this << dec << x;
 | |
|     //*this << ';' << y << 'H' << endl;
 | |
|     //flush();
 | |
|     itoa(x, &out[2], 10);
 | |
|     itoa(y, &out[5], 10);
 | |
|     print( out , strlen(out));
 | |
| }
 | |
| 
 | |
| void SerialStream::print(char* str, int length) {
 | |
|     for(int i=0; i < length; i++)
 | |
|         write(str[i]);
 | |
| }
 |