Files
firmware/main/RemoteDebugging.cpp

58 lines
1.6 KiB
C++

#include <string>
#include <iostream>
#include "RemoteDebugging.h"
#include "freertos/FreeRTOS.h"
#include "esp_debug_helpers.h"
std::string RemoteDebugging::get_task_manager() {
std::string out;
out.resize(1024);
vTaskGetRunTimeStats(out.data());
out.resize(425);
return out;
}
std::string RemoteDebugging::get_logs() {
std::string out;
for (const auto& log : log_buffer->peek_drain()) {
out.append(log);
}
out.resize(800);
return out;
}
void RemoteDebugging::register_calls(MessagingInterface &messaging_interface) {
messaging_interface.register_function(2, [](const uint8_t *parameters, size_t parameter_size, Writer& writer) {
auto out = get_task_manager();
std::vector<uint8_t> vec(out.begin(), out.end());
writer.write(vec);
});
messaging_interface.register_function(3, [](const uint8_t *parameters, size_t parameter_size, Writer& writer) {
auto out = get_logs();
std::vector<uint8_t> vec(out.begin(), out.end());
writer.write(vec);
});
messaging_interface.register_function(69, [](const uint8_t *parameters, size_t parameter_size, Writer& writer) {
uint8_t out = esp_reset_reason();
std::vector<uint8_t> vec{out};
writer.write(vec);
});
}
int RemoteDebugging::custom_log_write(const char *data, va_list args) {
char tmp[512];
va_list copy;
va_copy(copy, args);
int len = vsnprintf(tmp, sizeof(tmp), data, copy);
va_end(copy);
std::string str;
str.assign(tmp, len);
std::cout << str;
log_buffer->push(std::move(str));
return 0;
}