#pragma once template inline void serial_print(HardwareSerial* serial, T v){ serial->print(v); } template inline void serial_println(HardwareSerial* serial, T v){ serial->println(v); } template 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); }