Skip to content

Commit 76166ea

Browse files
Implemented colorful logging to the RTT logger backend
1 parent d06259f commit 76166ea

File tree

7 files changed

+113
-29
lines changed

7 files changed

+113
-29
lines changed

Firmware/3rdparty/littlefs_lib/lfs_util_segger.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ extern "C"
9191
#ifndef LFS_ASSERT
9292
#ifndef LFS_NO_ASSERT
9393
#define LFS_ASSERT(test) \
94-
assert(test); \
95-
SEGGER_RTT_printf(0, "assert expr:" #test "\n")
94+
SEGGER_RTT_printf(0, "%s assert expr: %s", RTT_CTRL_TEXT_YELLOW, #test "\n"); \
95+
assert(test)
9696
#else
9797
#define LFS_ASSERT(test)
9898
#endif

Firmware/drivers/board/watchboard.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void Board::initBoard() noexcept
8989
/* Configure board. */
9090
bsp_board_init(BSP_INIT_LEDS);
9191

92-
LOG_DEBUG("Hello from E73 Mod Board!");
92+
LOG_INFO("Hello from E73 Mod Board!");
9393

9494
ret_code_t errorCode{};
9595

@@ -132,12 +132,12 @@ void Board::initBoardSpiFlash() noexcept
132132
// auto readResult = co_await m_pFlashDriver->requestReadBlock(0x00, blockTest.size());
133133
// LOG_DEBUG(fmt::format("Got read block {}", readResult));
134134

135-
LOG_DEBUG("Started filesystem creation");
135+
LOG_INFO("Started filesystem creation");
136136
m_filesystem = std::make_unique<Hal::TFilesystem>();
137137

138-
LOG_DEBUG("Started filesystem creation");
138+
LOG_INFO("Completed filesystem creation");
139139
co_await m_filesystem->initializeFs();
140-
LOG_DEBUG("Filesystem is ready");
140+
LOG_INFO("Filesystem is ready");
141141
}
142142

143143
Board::Board() noexcept
@@ -153,7 +153,6 @@ void Board::ledToggle() noexcept
153153
while (true)
154154
{
155155
co_await 300ms;
156-
// LOG_DEBUG("LED TIMER EXPIRED");
157156
bsp_board_led_invert(0);
158157
co_await 100ms;
159158
bsp_board_led_invert(0);

Firmware/drivers/spi/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ add_library(
55

66
if( ${TARGET_PLATFORM} STREQUAL "ARM_CORTEX" )
77
target_link_libraries( spi INTERFACE NordicSDK::Common )
8-
elseif( ${TARGET_PLATFORM} STREQUAL "FIRMWARE_SIMULATOR")
9-
target_link_libraries( spi INTERFACE fmt::fmt )
108
endif()
119

1210
target_compile_options(

Firmware/drivers/spi/inc/backends/spi_backend_desktop.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <fmt/ranges.h>
1616

1717
#include <utils/MetaUtils.hpp>
18+
#include <logger/logger_service.hpp>
1819

1920
#define USE_THREADING_ASYNC_BACKEND
2021

@@ -41,7 +42,7 @@ class SpiBusDesktopBackend
4142
using namespace std::chrono_literals;
4243

4344
std::unique_lock<std::mutex>(m_transactionBufferGuard);
44-
fmt::print("[Desktop SPI simultator]{}\n", m_dataBuffer);
45+
LOG_DEBUG(fmt::format("[Desktop SPI simultator]{}\n", m_dataBuffer));
4546

4647
m_newDataArrived.store(false);
4748
m_transactionCompleted();

Firmware/filesystem/CMakeLists.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
if(WIN32 OR UNIX AND ${TARGET_PLATFORM} STREQUAL "FIRMWARE_SIMULATOR")
2-
find_package(spdlog REQUIRED)
3-
endif()
4-
51
add_library(watch_filesystem INTERFACE
62

73
filesystem/filesystem_holder.hpp
@@ -19,7 +15,6 @@ target_include_directories(watch_filesystem INTERFACE ${CMAKE_CURRENT_LIST_DIR}
1915

2016
target_link_libraries(watch_filesystem INTERFACE
2117
littlefs
22-
fmt::fmt
2318
)
2419

2520
target_link_options(

Firmware/firmware_tests/coroutine/coroutine_thoughts.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
#include <windbondflash/winbond_flash_templated.hpp>
2929

30-
#include <spdlog/spdlog.h>
30+
#include <logger/logger_service.hpp>
3131

3232
using TSpiBus = Interface::SpiTemplated::SpiBus<Interface::SpiTemplated::SpiBusDesktopBackend>;
3333
using TFlashDriver = ExternalFlash::WinbondFlashDriver<TSpiBus>;
@@ -54,30 +54,30 @@ CoroUtils::VoidTask simpleRwTest(
5454
std::string_view fileName,
5555
std::string_view fileData)
5656
{
57-
spdlog::warn("simpleRwTest begin");
57+
LOG_WARN("simpleRwTest begin");
5858
auto lfs = filesystem.fsInstance();
5959
{
60-
spdlog::warn("FILE open begin");
60+
LOG_WARN("FILE open begin");
6161
auto filename = std::move(co_await filesystem.openFile(fileName));
6262
co_await filename.write(
6363
std::span(reinterpret_cast<const std::uint8_t*>(fileData.data()), fileData.size()));
64-
spdlog::warn("FILE open finalize");
64+
LOG_WARN("FILE open finalize");
6565
}
6666

6767
std::vector<std::uint8_t> readFrom;
6868
readFrom.resize(fileData.size());
6969

7070
{
71-
spdlog::warn("FILE read begin");
71+
LOG_WARN("FILE read begin");
7272
auto holdedFile = std::move(co_await filesystem.openFile(fileName));
7373
auto resultRead = co_await holdedFile.read(std::span(readFrom.data(), fileData.size()));
74-
spdlog::warn("FILE read finalize");
74+
LOG_WARN("FILE read finalize");
7575
}
7676

7777
auto kCompareStringView{
7878
std::string_view{reinterpret_cast<const char*>(readFrom.data()), readFrom.size()}};
7979
assert(fileData == kCompareStringView);
80-
spdlog::warn("simpleRwTest finalize");
80+
LOG_WARN("simpleRwTest finalize");
8181
}
8282
CoroUtils::VoidTask fileTest(TFilesystem& filesystem)
8383
{

Firmware/logger/logger_service_impl.cpp

Lines changed: 98 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,78 @@ class Logger::LoggerImpl
159159
SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);
160160
}
161161

162-
void logString(std::string_view _toLog) const noexcept
162+
auto formatMessage(std::span<char> formatBuffer, LogSeverity severity, std::string_view _toLog)
163+
const noexcept
164+
{
165+
switch (severity)
166+
{
167+
case LogSeverity::Trace:
168+
return fmt::format_to_n(
169+
formatBuffer.data(),
170+
formatBuffer.size(),
171+
"{} {} {}\n",
172+
RTT_CTRL_TEXT_WHITE,
173+
severityToString(severity),
174+
_toLog.data());
175+
break;
176+
case LogSeverity::Debug:
177+
return fmt::format_to_n(
178+
formatBuffer.data(),
179+
formatBuffer.size(),
180+
"{} {} {}\n",
181+
RTT_CTRL_TEXT_BRIGHT_WHITE,
182+
severityToString(severity),
183+
_toLog.data());
184+
break;
185+
case LogSeverity::Info:
186+
return fmt::format_to_n(
187+
formatBuffer.data(),
188+
formatBuffer.size(),
189+
"{} {} {}\n",
190+
RTT_CTRL_TEXT_MAGENTA,
191+
severityToString(severity),
192+
_toLog.data());
193+
break;
194+
case LogSeverity::Warn:
195+
return fmt::format_to_n(
196+
formatBuffer.data(),
197+
formatBuffer.size(),
198+
"{} {} {}\n",
199+
RTT_CTRL_TEXT_BRIGHT_YELLOW,
200+
severityToString(severity),
201+
_toLog.data());
202+
break;
203+
case LogSeverity::Error:
204+
return fmt::format_to_n(
205+
formatBuffer.data(),
206+
formatBuffer.size(),
207+
"{} {} {}\n",
208+
RTT_CTRL_TEXT_BRIGHT_RED,
209+
severityToString(severity),
210+
_toLog.data());
211+
break;
212+
case LogSeverity::None:
213+
break;
214+
default:
215+
break;
216+
}
217+
218+
std::terminate();
219+
}
220+
void logString(LogSeverity severity, std::string_view _toLog) const noexcept
221+
{
222+
std::array<char, 1024> formatBuffer{};
223+
auto formatResult = formatMessage(
224+
std::span(formatBuffer.data(), formatBuffer.size() - 1), severity, _toLog);
225+
formatBuffer[formatResult.size + 1] = '\0';
226+
auto formatString =
227+
std::string_view(formatBuffer.data(), formatBuffer.data() + formatResult.size + 1);
228+
229+
SEGGER_RTT_Write(0, formatString.data(), formatString.size());
230+
}
231+
232+
void completeMessage()
163233
{
164-
SEGGER_RTT_WriteString(0, _toLog.data());
165234
}
166235
static constexpr inline std::uint16_t kSeggerBufferSize = 512;
167236
static inline std::array<std::uint8_t, kSeggerBufferSize> seggerBuffer{};
@@ -173,9 +242,33 @@ class Logger::LoggerImpl
173242
{
174243

175244
public:
176-
void logString(std::string_view _toLog) const noexcept
245+
void logString(LogSeverity severity, std::string_view _toLog) const noexcept
177246
{
178-
fmt::print(fg(fmt::color::steel_blue), "{}", _toLog.data());
247+
248+
switch (severity)
249+
{
250+
case LogSeverity::Trace:
251+
fmt::print(
252+
fg(fmt::color::white_smoke), "{} {}\n", severityToString(severity), _toLog.data());
253+
break;
254+
case LogSeverity::Debug:
255+
fmt::print(fg(fmt::color::white), "{} {}\n", severityToString(severity), _toLog.data());
256+
break;
257+
case LogSeverity::Info:
258+
fmt::print(fg(fmt::color::blue), "{} {}\n", severityToString(severity), _toLog.data());
259+
break;
260+
case LogSeverity::Warn:
261+
fmt::print(
262+
fg(fmt::color::yellow), "{} {}\n", severityToString(severity), _toLog.data());
263+
break;
264+
case LogSeverity::Error:
265+
fmt::print(fg(fmt::color::red), "{} {}\n", severityToString(severity), _toLog.data());
266+
break;
267+
case LogSeverity::None:
268+
break;
269+
default:
270+
break;
271+
}
179272
#if defined USE_MSVC_DEBUG_OUT
180273
OutputDebugString(_toLog.data());
181274
#endif
@@ -195,7 +288,5 @@ Logger& Logger::Instance() noexcept
195288

196289
void Logger::logDebugImpl(LogSeverity severity, std::string_view _toLog) noexcept
197290
{
198-
m_pLoggerImpl->logString(severityToString(severity));
199-
m_pLoggerImpl->logString(_toLog);
200-
m_pLoggerImpl->logString(CaretReset);
291+
m_pLoggerImpl->logString(severity, _toLog);
201292
}

0 commit comments

Comments
 (0)