diff --git a/backend/commands.py b/backend/commands.py index 81d062f..87c55e9 100644 --- a/backend/commands.py +++ b/backend/commands.py @@ -134,24 +134,28 @@ class LogCommand(Command): level: int message: str - HEADER_SIZE = 1 # log level + HEADER_SIZE = 2 # log level + logger name length def __init__( self, data: bytes, ) -> None: super().__init__() - self.received_logger = logging.getLogger("stm32wb55") - self.received_logger.setLevel(logging.DEBUG) self._logger.setLevel(logging.INFO) level = int(data[0]) + logger_name_length = int(data[1]) self._logger.debug(f"level: {level}") + self._logger.debug(f"logger_name_length: {logger_name_length}") - message = data[self.HEADER_SIZE :] + logger_name = data[self.HEADER_SIZE : self.HEADER_SIZE + logger_name_length] + message = data[self.HEADER_SIZE + logger_name_length :] + self._logger.debug("logger_name " + str(logger_name)) self._logger.debug("Message: " + str(message)) + self.received_logger = logging.getLogger(logger_name.decode()) + self.received_logger.setLevel(logging.DEBUG) self.level = level self.message = message.decode() diff --git a/nucleo-wb55-dongle-ble/Core/Src/main.c b/nucleo-wb55-dongle-ble/Core/Src/main.c index 82ca519..e9d753c 100644 --- a/nucleo-wb55-dongle-ble/Core/Src/main.c +++ b/nucleo-wb55-dongle-ble/Core/Src/main.c @@ -129,10 +129,10 @@ int main(void) // HAL_Delay(450); // counter_value++; - // log_debug("Counter value is %d", 1, counter_value); - // log_info("Counter value is %d", 1, counter_value); - // log_warning("Counter value is %d", 1, counter_value); - // log_error("Counter value is %d", 1, counter_value); + // log_debug("main", "Counter value is %d", 1, counter_value); + // log_info("main", "Counter value is %d", 1, counter_value); + // log_warning("main", "Counter value is %d", 1, counter_value); + // log_error("a very long logger name .........................", "Counter value is %d", 1, counter_value); /* USER CODE END WHILE */ diff --git a/nucleo-wb55-dongle-ble/app/LogCommand.cpp b/nucleo-wb55-dongle-ble/app/LogCommand.cpp index da80d6b..a106e24 100644 --- a/nucleo-wb55-dongle-ble/app/LogCommand.cpp +++ b/nucleo-wb55-dongle-ble/app/LogCommand.cpp @@ -8,48 +8,57 @@ #include #include #include +#include #include "LogCommand.hpp" -void log_debug(const char * format, int nargs, ...) { +void log_debug(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); - push_command(new LogCommand(format, args, LOG_LEVEL_DEBUG)); + push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_DEBUG)); va_end(args); } -void log_info(const char * format, int nargs, ...) { +void log_info(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); - push_command(new LogCommand(format, args, LOG_LEVEL_INFO)); + push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_INFO)); va_end(args); } -void log_warning(const char * format, int nargs, ...) { +void log_warning(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); - push_command(new LogCommand(format, args, LOG_LEVEL_WARNING)); + push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_WARNING)); va_end(args); } -void log_error(const char * format, int nargs, ...) { +void log_error(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); - push_command(new LogCommand(format, args, LOG_LEVEL_ERROR)); + push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_ERROR)); va_end(args); } LogCommand::LogCommand( + const char * logger_name, const char * format, va_list args, LoggingLevel logging_level) : Notification() { uint16_t max_payload_size = NOTIFICATION_COMMAND_FREE_BUFFER - this->get_payload_size(); + uint8_t logger_name_length = std::min(30, (int)strlen(logger_name)); + this->payload_ptr[0] = logging_level; + this->payload_ptr[1] = logger_name_length; + + char * name = (char *)(this->payload_ptr + 2); + char * message = (char *)(this->payload_ptr + 2 + logger_name_length); + uint16_t message_length = max_payload_size - 2 - logger_name_length; - char * message = (char *)(this->payload_ptr + 1); - vsnprintf(message, max_payload_size - 1, format, args); - this->add_to_payload_size(strlen(message) + 1); + memcpy(name, logger_name, logger_name_length); + vsnprintf(message, message_length, format, args); + this->add_to_payload_size(strlen(message) + 2 + logger_name_length); } diff --git a/nucleo-wb55-dongle-ble/app/LogCommand.hpp b/nucleo-wb55-dongle-ble/app/LogCommand.hpp index c31c27c..993d3d8 100644 --- a/nucleo-wb55-dongle-ble/app/LogCommand.hpp +++ b/nucleo-wb55-dongle-ble/app/LogCommand.hpp @@ -10,10 +10,10 @@ #include "Notification.hpp" -extern "C" void log_debug(const char * format, int nargs, ...); -extern "C" void log_info(const char * format, int nargs, ...); -extern "C" void log_warning(const char * format, int nargs, ...); -extern "C" void log_error(const char * format, int nargs, ...); +extern "C" void log_debug(const char * logger_name, const char * format, int nargs, ...); +extern "C" void log_info(const char * logger_name, const char * format, int nargs, ...); +extern "C" void log_warning(const char * logger_name, const char * format, int nargs, ...); +extern "C" void log_error(const char * logger_name, const char * format, int nargs, ...); typedef enum : uint8_t{ LOG_LEVEL_DEBUG = 10, @@ -28,7 +28,7 @@ public: /* * Create log command from formatted string */ - LogCommand(const char * format, va_list args, LoggingLevel logging_level); + LogCommand(const char * logger_name, const char * format, va_list args, LoggingLevel logging_level); virtual ~LogCommand() {}; virtual CommandId get_command_id() override { return COMMAND_LOG; } diff --git a/nucleo-wb55-dongle-ble/app/command_interpreter.c b/nucleo-wb55-dongle-ble/app/command_interpreter.c index e49f649..e64e122 100644 --- a/nucleo-wb55-dongle-ble/app/command_interpreter.c +++ b/nucleo-wb55-dongle-ble/app/command_interpreter.c @@ -11,7 +11,7 @@ void usb_receive(uint8_t *buf, uint32_t *len) { if (*len < 5) { - log_error("received command which cannot be interpreted", 0); + log_error("usb_receive", "received command which cannot be interpreted", 0); return; } uint8_t command_id = buf[0]; @@ -24,7 +24,7 @@ void usb_receive(uint8_t *buf, uint32_t *len) { } if (stop_byte != 0xFF) { - log_error("received command has invalid stop byte: 0x%x", 1, stop_byte); + log_error("usb_receive", "received command has invalid stop byte: 0x%x", 1, stop_byte); } else { handle_received_command(command_id, payload_ptr, length); } diff --git a/nucleo-wb55-dongle-ble/app/commands.h b/nucleo-wb55-dongle-ble/app/commands.h index b18a33d..5a60992 100644 --- a/nucleo-wb55-dongle-ble/app/commands.h +++ b/nucleo-wb55-dongle-ble/app/commands.h @@ -11,9 +11,9 @@ void pop_and_execute_commands(); void handle_received_command(uint8_t command_id, uint8_t * payload_ptr, uint16_t length); -void log_debug(const char * format, int nargs, ...); -void log_info(const char * format, int nargs, ...); -void log_warning(const char * format, int nargs, ...); -void log_error(const char * format, int nargs, ...); +void log_debug(const char * logger_name, const char * format, int nargs, ...); +void log_info(const char * logger_name, const char * format, int nargs, ...); +void log_warning(const char * logger_name, const char * format, int nargs, ...); +void log_error(const char * logger_name, const char * format, int nargs, ...); #endif /* COMMANDS_H_ */