|
|
|
|
@ -5,55 +5,18 @@ 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;
|
|
|
|
|
SerialStream sout = SerialStream();
|
|
|
|
|
|
|
|
|
|
if (sign)
|
|
|
|
|
{
|
|
|
|
|
*sp++ = '-';
|
|
|
|
|
len++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (tp > tmp)
|
|
|
|
|
*sp++ = *--tp;
|
|
|
|
|
|
|
|
|
|
return len;
|
|
|
|
|
void SerialStream::flush() {
|
|
|
|
|
print(sout.buffer, sout.pos);
|
|
|
|
|
sout.pos = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SerialStream::setForeground(Color c) {
|
|
|
|
|
write(0x1b);
|
|
|
|
|
write('[');
|
|
|
|
|
write('3');
|
|
|
|
|
write(c + 0x30);
|
|
|
|
|
sout << 30+c;
|
|
|
|
|
flush();
|
|
|
|
|
write('m');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -78,15 +41,18 @@ void SerialStream::reset() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SerialStream::setPos(int x, int y) {
|
|
|
|
|
char out[] = {0x1b, '[', 0, 0, ';', 0, 0, 'H', 0};
|
|
|
|
|
//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));
|
|
|
|
|
write(0x1b);
|
|
|
|
|
sout << '[';
|
|
|
|
|
sout << dec << x;
|
|
|
|
|
sout << ';';
|
|
|
|
|
sout << dec << y;
|
|
|
|
|
sout << 'H';
|
|
|
|
|
flush();
|
|
|
|
|
//itoa(x, &out[2], 10);
|
|
|
|
|
//itoa(y, &out[5], 10);
|
|
|
|
|
//print( out , strlen(out));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SerialStream::print(char* str, int length) {
|
|
|
|
|
|