je-menvol/prog/serial_print.hpp
2025-05-07 18:23:21 +02:00

84 lines
2.8 KiB
C++

#pragma once
template <typename T>
inline void serial_print(HardwareSerial* serial, T v){
serial->print(v);
}
template <typename T>
inline void serial_println(HardwareSerial* serial, T v){
serial->println(v);
}
template <typename T>
static inline char hex_conv(T val){
return val < 10 ? '0' + val : 'A' + (val-10);
}
static char eol[3] = "\r\n";
inline void serial_print_eol(HardwareSerial* serial){
serial->write((const uint8_t*)eol, sizeof(eol));
}
inline void serial_print_hex(HardwareSerial* serial, int32_t n){
constexpr const int SIZE_BUFF_HEX = 2*4+2;
char buff[SIZE_BUFF_HEX];
buff[0] = '0';
buff[1] = 'x';
buff[2] = hex_conv((n & 0xF0000000) >> 7*4 );
buff[3] = hex_conv((n & 0x0F000000) >> 6*4 );
buff[4] = hex_conv((n & 0x00F00000) >> 5*4 );
buff[5] = hex_conv((n & 0x000F0000) >> 4*4 );
buff[6] = hex_conv((n & 0x0000F000) >> 3*4 );
buff[7] = hex_conv((n & 0x00000F00) >> 2*4 );
buff[8] = hex_conv((n & 0x000000F0) >> 1*4 );
buff[9] = hex_conv((n & 0x0000000F) );
serial->write((const uint8_t*)&buff, SIZE_BUFF_HEX);
}
inline void serial_print_hex(HardwareSerial* serial, int64_t n){
constexpr const int SIZE_BUFF_HEX = 4*4+2;
char buff[SIZE_BUFF_HEX];
buff[0] = '0';
buff[1] = 'x';
buff[2] = hex_conv((n & 0xF000000000000000) >> 15*4 );
buff[3] = hex_conv((n & 0x0F00000000000000) >> 14*4 );
buff[4] = hex_conv((n & 0x00F0000000000000) >> 13*4 );
buff[5] = hex_conv((n & 0x000F000000000000) >> 12*4 );
buff[6] = hex_conv((n & 0x0000F00000000000) >> 11*4 );
buff[7] = hex_conv((n & 0x00000F0000000000) >> 10*4 );
buff[8] = hex_conv((n & 0x000000F000000000) >> 9*4 );
buff[9] = hex_conv((n & 0x0000000F00000000) >> 8*4 );
buff[10] = hex_conv((n & 0x00000000F0000000) >> 7*4 );
buff[11] = hex_conv((n & 0x000000000F000000) >> 6*4 );
buff[12] = hex_conv((n & 0x0000000000F00000) >> 5*4 );
buff[13] = hex_conv((n & 0x00000000000F0000) >> 4*4 );
buff[14] = hex_conv((n & 0x000000000000F000) >> 3*4 );
buff[15] = hex_conv((n & 0x0000000000000F00) >> 2*4 );
buff[16] = hex_conv((n & 0x00000000000000F0) >> 1*4 );
buff[17] = hex_conv((n & 0x000000000000000F) );
serial->write((const uint8_t*)&buff, SIZE_BUFF_HEX);
}
inline void serial_println_hex(HardwareSerial* serial, int32_t n){
serial_print_hex(serial, n);
serial_print_eol(serial);
}
inline void serial_print_hex(HardwareSerial* serial, uint32_t number){
serial->print(number);
}
inline void serial_println_hex(HardwareSerial* serial, uint32_t number){
serial->println(number);
}
inline void serial_println_hex(HardwareSerial* serial, int64_t n){
serial_print_hex(serial, n);
serial_print_eol(serial);
}
inline void serial_print_hex(HardwareSerial* serial, uint64_t number){
serial->print(number);
}
inline void serial_println_hex(HardwareSerial* serial, uint64_t number){
serial->println(number);
}