/* * LogCommand.cpp * * Created on: Jul 8, 2021 * Author: Andreas Berthoud */ #include #include #include #include #include "LogCommand.hpp" void log_debug(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_DEBUG)); va_end(args); } void log_info(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_INFO)); va_end(args); } void log_warning(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); push_command(new LogCommand(logger_name, format, args, LOG_LEVEL_WARNING)); va_end(args); } void log_error(const char * logger_name, const char * format, int nargs, ...) { va_list args; va_start(args, nargs); 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(com_channel_type_usb) /* send it always over USB */ { 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; memcpy(name, logger_name, logger_name_length); vsnprintf(message, message_length, format, args); this->add_to_payload_size(strlen(message) + 2 + logger_name_length); }