Browse Source

ble-dongle: Add name property to logger

ble
Andreas Berthoud 4 years ago
parent
commit
ec23355823
  1. 12
      backend/commands.py
  2. 8
      nucleo-wb55-dongle-ble/Core/Src/main.c
  3. 31
      nucleo-wb55-dongle-ble/app/LogCommand.cpp
  4. 10
      nucleo-wb55-dongle-ble/app/LogCommand.hpp
  5. 4
      nucleo-wb55-dongle-ble/app/command_interpreter.c
  6. 8
      nucleo-wb55-dongle-ble/app/commands.h

12
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()

8
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 */

31
nucleo-wb55-dongle-ble/app/LogCommand.cpp

@ -8,48 +8,57 @@
#include <stdarg.h>
#include <string.h>
#include <string>
#include <algorithm>
#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);
}

10
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; }

4
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);
}

8
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_ */

Loading…
Cancel
Save