You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

194 lines
3.0 KiB

#pragma once
#ifndef __NANOLOG_H__
#define __NANOLOG_H__
#include "Arduino.h"
// #define LOG(severity, msg) p msg;
// void p(const char *fmt, ... )
// {
// static char tmp[128]; // resulting string limited to 128 chars.
// va_list args;
// va_start (args, fmt );
// vsnprintf(tmp, 128, fmt, args);
// va_end (args);
// Serial.println(tmp);
// delay(1);
// }
inline void LOG_SPACE_IMPL();
inline void LOG_SET_IMPL(int8_t i);
inline void LOG_SET_IMPL(int16_t i);
inline void LOG_SET_IMPL(int32_t i);
inline void LOG_SET_IMPL(int64_t i);
inline void LOG_SET_IMPL(uint8_t i);
inline void LOG_SET_IMPL(uint16_t i);
inline void LOG_SET_IMPL(uint32_t i);
inline void LOG_SET_IMPL(uint64_t i);
inline void LOG_SET_IMPL(char c);
inline void LOG_SET_IMPL(String s);
inline void LOG_SET_IMPL(float f);
inline void LOG_SET_IMPL(double d);
inline void LOG_NEW_LINE_IMPL();
#ifdef LOG_ENABLED
#define LOG(P) LOG_SET_IMPL(P)
#define LOG_NEW_LINE LOG_NEW_LINE_IMPL();
#define LOG_SPACE LOG_SPACE_IMPL()
#else
#define LOG(P)
#define LOG_NEW_LINE
#define LOG_SPACE
#endif
inline void LOG_INIT()
{
#if defined (LOG_ENABLED)
Serial.begin(115200);
LOG("Initialized: SERIAL_LOG64");
LOG_NEW_LINE;
#endif
#if defined (EEPROM_LOG_ENABLED)
LOG_EEPROM_READ;
EEPROM_LOG_ADDR_PTR = EEPROM_LOG_Start_Address;
#endif
}
inline void LOG_SPACE_IMPL()
{
Serial.print(" ");
}
inline void LOG_SET_IMPL(int8_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(int16_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(int32_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(uint8_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(uint16_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(uint32_t i)
{
Serial.print(i);
LOG_SPACE;
}
inline void LOG_SET_IMPL(char c)
{
Serial.print(c);
LOG_SPACE;
}
inline void LOG_SET_IMPL(String s)
{
Serial.print(s);
LOG_SPACE;
}
inline void LOG_SET_IMPL(float f)
{
Serial.print(f);
LOG_SPACE;
}
inline void LOG_SET_IMPL(double d)
{
Serial.print(d);
LOG_SPACE;
}
inline void LOG_NEW_LINE_IMPL()
{
Serial.println(" ");
}
inline void LOG_SET_IMPL(uint64_t n)
{
unsigned char buf[16 * sizeof(long)];
if (n == 0)
{
Serial.print((char)'0');
LOG_SPACE;
return;
}
for (uint16_t i = 0; n > 0; i++)
{
buf[i] = n % 10;
n /= 10;
}
for (uint16_t i = 0; i > 0; i--)
{
Serial.print((char) (buf[i - 1] < 10 ? ('0' + buf[i - 1]) : ('A' + buf[i - 1] - 10)));
}
LOG_SPACE;
}
inline void LOG_SET_IMPL(int64_t n)
{
unsigned char buf[16 * sizeof(long)]; ;
if (n == 0)
{
Serial.print((char)'0');
LOG_SPACE;
return;
}
if (n < 0)
{
Serial.print((char)'-');
n = n * (-1);
}
for (uint16_t i = 0; n > 0; i++)
{
buf[i] = n % 10;
n /= 10;
}
for (uint16_t i = 0; i > 0; i--)
{
Serial.print((char) (buf[i - 1] < 10 ? ('0' + buf[i - 1]) : ('A' + buf[i - 1] - 10)));
}
LOG_SPACE;
}
#endif // __NANOLOG_H__