diff --git a/program/SVET/lib/SVET/Logger/Logger.cpp b/program/SVET/lib/SVET/Logger/Logger.cpp new file mode 100644 index 0000000..142fe35 --- /dev/null +++ b/program/SVET/lib/SVET/Logger/Logger.cpp @@ -0,0 +1,106 @@ +#include +#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"); + } +} \ No newline at end of file diff --git a/program/SVET/lib/SVET/Logger/Logger.h b/program/SVET/lib/SVET/Logger/Logger.h new file mode 100644 index 0000000..63f320b --- /dev/null +++ b/program/SVET/lib/SVET/Logger/Logger.h @@ -0,0 +1,56 @@ +#pragma once +#include +/* + * 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); +}; \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVET.cpp b/program/SVET/lib/SVET/SVET.cpp new file mode 100644 index 0000000..8279e07 --- /dev/null +++ b/program/SVET/lib/SVET/SVET.cpp @@ -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(loggerOptions->BaudRate, + loggerOptions->CoreLoggerLevel, + loggerOptions->UserLoggerLevel); + + delete this->Builder; // nullptr to Builder + this->Builder = nullptr; + return true; +} +void SVET::Loop() +{ +} \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVET.h b/program/SVET/lib/SVET/SVET.h new file mode 100644 index 0000000..ed76ae1 --- /dev/null +++ b/program/SVET/lib/SVET/SVET.h @@ -0,0 +1,26 @@ +#pragma once +#include "SVETBuilder/SVETBuilder.h" +#include + +/* + * 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 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); +}; \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVETBuilder/SVETBuider.cpp b/program/SVET/lib/SVET/SVETBuilder/SVETBuider.cpp new file mode 100644 index 0000000..2623597 --- /dev/null +++ b/program/SVET/lib/SVET/SVETBuilder/SVETBuider.cpp @@ -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; +} \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVETBuilder/SVETBuilder.h b/program/SVET/lib/SVET/SVETBuilder/SVETBuilder.h new file mode 100644 index 0000000..a791144 --- /dev/null +++ b/program/SVET/lib/SVET/SVETBuilder/SVETBuilder.h @@ -0,0 +1,28 @@ +#pragma once +#include "options/LoggerOptions/LoggerOptions.h" +#include + +/* + * 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); +}; \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.cpp b/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.cpp new file mode 100644 index 0000000..68d692b --- /dev/null +++ b/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.cpp @@ -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; +} \ No newline at end of file diff --git a/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.h b/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.h new file mode 100644 index 0000000..65253a7 --- /dev/null +++ b/program/SVET/lib/SVET/SVETBuilder/options/LoggerOptions/LoggerOptions.h @@ -0,0 +1,29 @@ +#pragma once +#include + +/* + * 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; +}; \ No newline at end of file diff --git a/program/SVET/platformio.ini b/program/SVET/platformio.ini index 67b7a07..f7a3c28 100644 --- a/program/SVET/platformio.ini +++ b/program/SVET/platformio.ini @@ -13,4 +13,5 @@ platform = espressif8266 board = nodemcuv2 framework = arduino monitor_rts = 0 -upload_speed = 378000 \ No newline at end of file +upload_speed = 378000 +monitor_speed = 19200 \ No newline at end of file diff --git a/program/SVET/src/main.cpp b/program/SVET/src/main.cpp index 80b8cfa..8362213 100644 --- a/program/SVET/src/main.cpp +++ b/program/SVET/src/main.cpp @@ -1,14 +1,23 @@ #include #include +#include "SVETBuilder/SVETBuilder.h" +#include "SVET.h" -std::unique_ptr core; -void setup() { - bool isStarted{false}; - do{ - isStarted = core->Start(); - }while (!isStarted); +std::unique_ptr svet; +Logger *logger; +void setup() +{ + auto builder = SVETBuilder::Setup()->SetLogger(LoggerOptions()); + svet = std::make_unique(SVET(builder)); + svet->Start(); + logger = svet->SLogger.get(); } -void loop() { - core->Loop(); +void loop() +{ + logger->Info("Hello", "main.cpp"); + logger->Warn("Warn asd", "main.cpp"); + logger->Error("Warferr", "main.cpp"); + delay(1000); + svet->Loop(); } \ No newline at end of file