You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
/*
|
|
* LogCommand.cpp
|
|
*
|
|
* Created on: Jul 8, 2021
|
|
* Author: Andreas Berthoud
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
#include <string>
|
|
|
|
#include "usbd_cdc_if.h"
|
|
#include "LogCommand.hpp"
|
|
|
|
|
|
void log_debug(const char * format, int nargs, ...) {
|
|
va_list args;
|
|
va_start(args, nargs);
|
|
push_command(new LogCommand(format, args, LOG_LEVEL_DEBUG));
|
|
va_end(args);
|
|
}
|
|
|
|
void log_info(const char * format, int nargs, ...) {
|
|
va_list args;
|
|
va_start(args, nargs);
|
|
push_command(new LogCommand(format, args, LOG_LEVEL_INFO));
|
|
va_end(args);
|
|
}
|
|
|
|
void log_warning(const char * format, int nargs, ...) {
|
|
va_list args;
|
|
va_start(args, nargs);
|
|
push_command(new LogCommand(format, args, LOG_LEVEL_WARNING));
|
|
va_end(args);
|
|
}
|
|
|
|
void log_error(const char * format, int nargs, ...) {
|
|
va_list args;
|
|
va_start(args, nargs);
|
|
push_command(new LogCommand(format, args, LOG_LEVEL_ERROR));
|
|
va_end(args);
|
|
}
|
|
|
|
LogCommand::LogCommand(const char * format, va_list args, LoggingLevel logging_level) : Command(COMMAND_LOG) {
|
|
*this->payload_ptr = logging_level;
|
|
vsnprintf((char *)this->payload_ptr + 1, this->max_payload_length - 1, format, args);
|
|
this->set_payload_length(strlen((char *)this->payload_ptr) + 1); // strlen + log level
|
|
}
|
|
|
|
bool LogCommand::execute() {
|
|
uint16_t size = this->get_payload_length() + 5; // number of bytes to be sent over USB
|
|
this->data[size-1] = 0xff; // set stop byte
|
|
uint8_t result = CDC_Transmit_FS(this->data, size);
|
|
return result == USBD_OK || result == USBD_BUSY;
|
|
}
|
|
|