#include #include #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 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 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 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; }