Created logger, Created SVET Builder

This commit is contained in:
Pavel-Savely Savianok 2024-06-14 23:17:44 +03:00
parent d2d511a823
commit 374531e013
10 changed files with 328 additions and 9 deletions

View File

@ -0,0 +1,106 @@
#include <Arduino.h>
#include "Logger.h"
/*
* Implementation of Logger instance. Docs on Logger.h
* Writed on 14.06.2024 21:11
* By Lisoveliy
*/
Logger::Logger(
short baudRate,
MessageType coreLogLevel,
MessageType userLogLevel,
bool useColor) : CoreLogLevel{coreLogLevel}, UserLogLevel{userLogLevel}, UseColor{useColor}
{
if (coreLogLevel == NONE && userLogLevel == NONE)
{
return;
}
Serial.begin(baudRate);
}
Logger::~Logger()
{
Serial.end();
}
const char *Logger::messageTypeToString(MessageType messageType)
{
switch (messageType)
{
case MessageType::INFO:
return "INFO";
case MessageType::WARN:
return "WARN";
case MessageType::ERROR:
return "ERROR";
case MessageType::NONE:
default:
return "";
}
}
std::string Logger::getMessage(MessageType messageType, char *text, char *initiator)
{
std::string output;
output += "[";
output += messageTypeToString(messageType);
output += "]";
if (initiator != nullptr)
{
output += ' ';
output += initiator;
}
output += ": ";
output += text;
return output;
}
void Logger::Info(char *data, char *initiator)
{
// TODO: check core and user level
if (UseColor)
{
Serial.write(27);
Serial.print("[37m"); // White color
}
Serial.println(getMessage(MessageType::INFO, data, initiator).c_str());
if (UseColor)
{
Serial.write(27);
Serial.print("[37m");
}
}
void Logger::Warn(char *data, char *initiator)
{
// TODO: check core and user level
if (UseColor)
{
Serial.write(27);
Serial.print("[33m"); // Orange color
}
Serial.println(getMessage(MessageType::WARN, data, initiator).c_str());
if (UseColor)
{
Serial.write(27);
Serial.print("[37m");
}
}
void Logger::Error(char *data, char *initiator)
{
// TODO: check core and user level
if (UseColor)
{
Serial.write(27);
Serial.print("[31m"); // Red color
}
Serial.println(getMessage(MessageType::ERROR, data, initiator).c_str());
if (UseColor)
{
Serial.write(27);
Serial.print("[37m");
}
}

View File

@ -0,0 +1,56 @@
#pragma once
#include <string>
/*
* Definition of Logger instance.
* Writed on 14.06.2024 21:11
* By Lisoveliy
*/
// Next briefs added for set logger statuses, not explaining logger work!
/// @brief Type of messages for logger
enum MessageType
{
/// @brief For info, warn and error messages (default)
INFO,
/// @brief For warn and error messages
WARN,
/// @brief For only error messages
ERROR,
/// @brief For disable logger
NONE
};
/// @brief Logger instance for messages on Serial port
class Logger
{
private:
const MessageType CoreLogLevel;
const MessageType UserLogLevel;
const bool UseColor;
const char *messageTypeToString(MessageType messageType);
std::string getMessage(MessageType messageType, char *text, char *initiator);
public:
/// @brief Create instance of logger
/// @param baudRate Speed of Serial port
/// @param coreLogLevel LogLevel for Core (if userLogLevel and coreLogLevel equals NONE, the serial connection will not start)
/// @param userLogLevel LogLevel for user (if userLogLevel and coreLogLevel equals NONE, the serial connection will not start)
/// @param useColor Send messages with color ESCapes on serial monitor
Logger(short baudRate, MessageType coreLogLevel, MessageType userLogLevel, bool useColor);
~Logger();
/// @brief Log information
/// @param data Message. Example: "Hello world!"
/// @param initiator Name of initiator. Example: "main.cpp"
void Info(char *data, char *initiator = nullptr);
/// @brief Log Warning
/// @param data Message. Example: "Some happened"
/// @param initiator Name of initiator. Example: "main.cpp"
void Warn(char *data, char *initiator = nullptr);
/// @brief Log Error
/// @param data Message. Example: "Error occured"
/// @param initiator Name of initiator. Example: "main.cpp"
void Error(char *data, char *initiator = nullptr);
};

View File

@ -0,0 +1,27 @@
#include "SVET.h"
/*
* Implementation of SVET. Docs in SVET.h
* Writed on 14.06.2024 21:56
* By Lisoveliy
*/
SVET::SVET(SVETBuilder *builder)
{
this->Builder = builder;
}
bool SVET::Start()
{
// Setup logger
auto loggerOptions = &Builder->BuildLoggerOptions;
this->SLogger = std::make_unique<Logger>(loggerOptions->BaudRate,
loggerOptions->CoreLoggerLevel,
loggerOptions->UserLoggerLevel);
delete this->Builder; // nullptr to Builder
this->Builder = nullptr;
return true;
}
void SVET::Loop()
{
}

View File

@ -0,0 +1,26 @@
#pragma once
#include "SVETBuilder/SVETBuilder.h"
#include <memory>
/*
* Definition of SVET.
* Writed on 14.06.2024 21:56
* By Lisoveliy
*/
class SVET
{
/// @brief Builder for SVET, exists only on start
SVETBuilder *Builder;
public:
std::unique_ptr<Logger> SLogger;
/// @brief Method that must be included to setup() on main.cpp
/// @return true if SVET was started
bool Start();
/// @brief Method that must be included to loop() on main.cpp
void Loop();
/// @brief Create new instance of SVET
/// @param builder Builder of SVET
SVET(SVETBuilder *builder);
};

View File

@ -0,0 +1,18 @@
#include "SVETBuilder.h"
/*
* Implementation of SVETBuilder. Docs in SVETBuilder.h
* Writed on 14.06.2024 21:29
* By Lisoveliy
*/
SVETBuilder *SVETBuilder::Setup()
{
return new SVETBuilder();
}
SVETBuilder *SVETBuilder::SetLogger(LoggerOptions options)
{
this->BuildLoggerOptions = options;
return this;
}

View File

@ -0,0 +1,28 @@
#pragma once
#include "options/LoggerOptions/LoggerOptions.h"
#include <memory>
/*
* Definition of SVETBuilder.
* Writed on 14.06.2024 21:29
* By Lisoveliy
*/
/// @brief Builder for SVET Framework
class SVETBuilder
{
friend class SVET;
private:
LoggerOptions BuildLoggerOptions;
public:
/// @brief Setup SVET using SVETBuilder
/// @return Builder for setup
static SVETBuilder *Setup();
/// @brief Set Logger Parameters
/// @param options Options of logging
/// @return Builder for setup
SVETBuilder *SetLogger(LoggerOptions options);
};

View File

@ -0,0 +1,19 @@
#include "LoggerOptions.h"
/*
* Implementation of Logger Options. Docs on LoggerOptions.h
* Writed on 14.06.2024 21:29
* By Lisoveliy
*/
LoggerOptions::LoggerOptions(
MessageType coreLoggerLevel,
MessageType userLoggerLevel,
bool useColor,
short baudRate)
{
this->CoreLoggerLevel = coreLoggerLevel;
this->UserLoggerLevel = userLoggerLevel;
this->UseColor = useColor;
this->BaudRate = baudRate;
}

View File

@ -0,0 +1,29 @@
#pragma once
#include <Logger/Logger.h>
/*
* Definition of Logger Options.
* Writed on 14.06.2024 21:21
* By Lisoveliy
*/
/// @brief Logger Options
class LoggerOptions
{
public:
MessageType CoreLoggerLevel;
MessageType UserLoggerLevel;
bool UseColor;
short BaudRate;
/// @brief Setup Logger Options
/// @param coreLoggerLevel Level of core logging
/// @param userLoggerLevel Level of user logging
/// @param useColor Use color on serial monitor
/// @param baudRate Speed of serial port
LoggerOptions(
MessageType coreLoggerLevel = INFO,
MessageType userLoggerLevel = INFO,
bool useColor = false,
short baudRate = 19200);
LoggerOptions(LoggerOptions &) = delete;
};

View File

@ -13,4 +13,5 @@ platform = espressif8266
board = nodemcuv2 board = nodemcuv2
framework = arduino framework = arduino
monitor_rts = 0 monitor_rts = 0
upload_speed = 378000 upload_speed = 378000
monitor_speed = 19200

View File

@ -1,14 +1,23 @@
#include <Arduino.h> #include <Arduino.h>
#include <memory> #include <memory>
#include "SVETBuilder/SVETBuilder.h"
#include "SVET.h"
std::unique_ptr<SVETCore> core; std::unique_ptr<SVET> svet;
void setup() { Logger *logger;
bool isStarted{false}; void setup()
do{ {
isStarted = core->Start(); auto builder = SVETBuilder::Setup()->SetLogger(LoggerOptions());
}while (!isStarted); svet = std::make_unique<SVET>(SVET(builder));
svet->Start();
logger = svet->SLogger.get();
} }
void loop() { void loop()
core->Loop(); {
logger->Info("Hello", "main.cpp");
logger->Warn("Warn asd", "main.cpp");
logger->Error("Warferr", "main.cpp");
delay(1000);
svet->Loop();
} }